Changeset 4760 in josm


Ignore:
Timestamp:
Jan 3, 2012 9:48:04 PM (17 months 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.