Ignore:
Timestamp:
2012-01-03T21:48:04+01:00 (8 years ago)
Author:
jttt
Message:

Fix EDT thread violation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java

    r4674 r4760  
    1010import java.util.HashMap;
    1111import java.util.Map;
     12
    1213import javax.swing.JOptionPane;
    1314import javax.swing.SwingUtilities;
     
    135136    }
    136137
    137         public void showHistory(final Collection<OsmPrimitive> primitives) {
    138                 final Collection<OsmPrimitive> notNewPrimitives = Utils.filter(primitives, notNewPredicate);
    139                 if (notNewPrimitives.isEmpty()) {
    140                         JOptionPane.showMessageDialog(
    141                                         Main.parent,
    142                                         tr("Please select at least one already uploaded node, way, or relation."),
    143                                         tr("Warning"),
    144                                         JOptionPane.WARNING_MESSAGE);
    145                         return;
    146                 }
     138    public void showHistory(final Collection<OsmPrimitive> primitives) {
     139        final Collection<OsmPrimitive> notNewPrimitives = Utils.filter(primitives, notNewPredicate);
     140        if (notNewPrimitives.isEmpty()) {
     141            JOptionPane.showMessageDialog(
     142                    Main.parent,
     143                    tr("Please select at least one already uploaded node, way, or relation."),
     144                    tr("Warning"),
     145                    JOptionPane.WARNING_MESSAGE);
     146            return;
     147        }
    147148
    148149        Main.worker.submit(new ContributorTermsUpdateRunnable());
    149150
    150                 Collection<OsmPrimitive> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
    151                 if (!toLoad.isEmpty()) {
    152                         HistoryLoadTask task = new HistoryLoadTask();
    153                         task.add(notNewPrimitives);
    154                         Main.worker.submit(task);
    155                 }
    156 
    157                 Runnable r = new Runnable() {
    158 
    159                         @Override
    160                         public void run() {
    161                                 try {
    162                                         for (OsmPrimitive p : notNewPrimitives) {
    163                                                 History h = HistoryDataSet.getInstance().getHistory(p.getPrimitiveId());
    164                                                 if (h == null) {
    165                                                         continue;
    166                                                 }
    167                                                 show(h);
    168                                         }
    169                                 } catch (final Exception e) {
    170                                         SwingUtilities.invokeLater(new Runnable() {
    171 
    172                                                 @Override
    173                                                 public void run() {
    174                                                         BugReportExceptionHandler.handleException(e);
    175                                                 }
    176                                         });
    177                                 }
    178 
    179                         }
    180                 };
    181                 Main.worker.submit(r);
    182         }
    183 
    184         private final Predicate<OsmPrimitive> unloadedHistoryPredicate = new Predicate<OsmPrimitive>() {
    185 
    186                 HistoryDataSet hds = HistoryDataSet.getInstance();
    187 
    188                 @Override
    189                 public boolean evaluate(OsmPrimitive p) {
    190                         if (hds.getHistory(p.getPrimitiveId()) == null) {
    191                                 // reload if the history is not in the cache yet
    192                                 return true;
    193                         } else if (!p.isNew() && hds.getHistory(p.getPrimitiveId()).getByVersion(p.getUniqueId()) == null) {
    194                                 // reload if the history object of the selected object is not in the cache yet
    195                                 return true;
    196                         } else {
    197                                 return false;
    198                         }
    199                 }
    200         };
    201 
    202         private final Predicate<OsmPrimitive> notNewPredicate = new Predicate<OsmPrimitive>() {
    203 
    204                 @Override
    205                 public boolean evaluate(OsmPrimitive p) {
    206                         return !p.isNew();
    207                 }
    208         };
     151        Collection<OsmPrimitive> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
     152        if (!toLoad.isEmpty()) {
     153            HistoryLoadTask task = new HistoryLoadTask();
     154            task.add(notNewPrimitives);
     155            Main.worker.submit(task);
     156        }
     157
     158        Runnable r = new Runnable() {
     159
     160            @Override
     161            public void run() {
     162                try {
     163                    for (OsmPrimitive p : notNewPrimitives) {
     164                        final History h = HistoryDataSet.getInstance().getHistory(p.getPrimitiveId());
     165                        if (h == null) {
     166                            continue;
     167                        }
     168                        SwingUtilities.invokeLater(new Runnable() {
     169                            @Override
     170                            public void run() {
     171                                show(h);
     172                            }
     173                        });
     174                    }
     175                } catch (final Exception e) {
     176                    BugReportExceptionHandler.handleException(e);
     177                }
     178
     179            }
     180        };
     181        Main.worker.submit(r);
     182    }
     183
     184    private final Predicate<OsmPrimitive> unloadedHistoryPredicate = new Predicate<OsmPrimitive>() {
     185
     186        HistoryDataSet hds = HistoryDataSet.getInstance();
     187
     188        @Override
     189        public boolean evaluate(OsmPrimitive p) {
     190            if (hds.getHistory(p.getPrimitiveId()) == null)
     191                // reload if the history is not in the cache yet
     192                return true;
     193            else if (!p.isNew() && hds.getHistory(p.getPrimitiveId()).getByVersion(p.getUniqueId()) == null)
     194                // reload if the history object of the selected object is not in the cache yet
     195                return true;
     196            else
     197                return false;
     198        }
     199    };
     200
     201    private final Predicate<OsmPrimitive> notNewPredicate = new Predicate<OsmPrimitive>() {
     202
     203        @Override
     204        public boolean evaluate(OsmPrimitive p) {
     205            return !p.isNew();
     206        }
     207    };
    209208
    210209}
Note: See TracChangeset for help on using the changeset viewer.