Changeset 2920

Show
Ignore:
Timestamp:
01.02.2010 21:56:31 (6 months ago)
Author:
jttt
Message:

Fixed NPE from log in #4409

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/event/DatasetEventManager.java

    r2879 r2920  
    142142                    if (consolidatedEvent != null && dataSet != event.getDataset()) { 
    143143                        fireConsolidatedEvents(inEDTListeners, consolidatedEvent); 
    144                         dataSet = event.getDataset(); 
    145144                        consolidatedEvent = null; 
    146145                    } 
    147146 
     147                    dataSet = event.getDataset(); 
     148 
    148149                    // Build consolidated event 
    149                     if (consolidatedEvent == null) { 
    150                         consolidatedEvent = event; 
    151                         dataSet = event.getDataset(); 
    152                     } else if (consolidatedEvent instanceof DataChangedEvent) { 
    153                         ((DataChangedEvent)consolidatedEvent).getEvents().add(event); 
     150                    if (event instanceof DataChangedEvent) { 
     151                        // DataChangeEvent can contains other events, so it gets special handling 
     152                        DataChangedEvent dataEvent = (DataChangedEvent) event; 
     153                        if (dataEvent.getEvents() == null) { 
     154                            consolidatedEvent = dataEvent; // Dataset was completely changed, we can ignore older events 
     155                        } else { 
     156                            if (consolidatedEvent == null) { 
     157                                consolidatedEvent = new DataChangedEvent(dataSet, dataEvent.getEvents()); 
     158                            } else if (consolidatedEvent instanceof DataChangedEvent) { 
     159                                List<AbstractDatasetChangedEvent> evts = ((DataChangedEvent) consolidatedEvent).getEvents(); 
     160                                if (evts != null) { 
     161                                    evts.addAll(dataEvent.getEvents()); 
     162                                } 
     163                            } else { 
     164                                AbstractDatasetChangedEvent oldConsolidateEvent = consolidatedEvent; 
     165                                consolidatedEvent = new DataChangedEvent(dataSet, dataEvent.getEvents()); 
     166                                ((DataChangedEvent) consolidatedEvent).getEvents().add(oldConsolidateEvent); 
     167                            } 
     168                        } 
    154169                    } else { 
    155                         consolidatedEvent = new DataChangedEvent(dataSet, 
    156                                 new ArrayList<AbstractDatasetChangedEvent>(Arrays.asList(consolidatedEvent))); 
     170                        // Normal events 
     171                        if (consolidatedEvent == null) { 
     172                            consolidatedEvent = event; 
     173                        } else if (consolidatedEvent instanceof DataChangedEvent) { 
     174                            List<AbstractDatasetChangedEvent> evs = ((DataChangedEvent) consolidatedEvent).getEvents(); 
     175                            if (evs != null) { 
     176                                evs.add(event); 
     177                            } 
     178                        } else { 
     179                            consolidatedEvent = new DataChangedEvent(dataSet, 
     180                                    new ArrayList<AbstractDatasetChangedEvent>(Arrays.asList(consolidatedEvent))); 
     181                        } 
     182 
    157183                    } 
    158184                }