Changeset 15609 in josm
- Timestamp:
- 2019-12-23T22:41:07+01:00 (6 years ago)
- Location:
- trunk
- Files:
-
- 7 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/AbstractUploadAction.java
r15513 r15609 12 12 * Abstract super-class of all upload actions. 13 13 * Listens to layer change events to update its enabled state. 14 * @since xxx14 * @since 15513 15 15 */ 16 16 public abstract class AbstractUploadAction extends JosmAction { -
trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
r15497 r15609 11 11 import java.util.HashSet; 12 12 import java.util.Iterator; 13 import java.util.LinkedHashSet; 13 14 import java.util.LinkedList; 14 15 import java.util.List; … … 43 44 import org.openstreetmap.josm.data.osm.event.DataChangedEvent; 44 45 import org.openstreetmap.josm.data.osm.event.DataSetListener; 46 import org.openstreetmap.josm.data.osm.event.DataSourceAddedEvent; 47 import org.openstreetmap.josm.data.osm.event.DataSourceRemovedEvent; 45 48 import org.openstreetmap.josm.data.osm.event.FilterChangedEvent; 46 49 import org.openstreetmap.josm.data.osm.event.NodeMovedEvent; … … 166 169 private final Collection<DataSource> dataSources = new LinkedList<>(); 167 170 171 /** 172 * A list of listeners that listen to DataSource changes on this layer 173 */ 174 private final ListenerList<DataSourceListener> dataSourceListeners = ListenerList.create(); 175 168 176 private final ConflictCollection conflicts = new ConflictCollection(); 169 177 … … 226 234 .collect(Collectors.toList())); 227 235 } 236 DataSourceAddedEvent addedEvent = new DataSourceAddedEvent(this, 237 new LinkedHashSet<>(dataSources), copyFrom.dataSources.stream()); 228 238 for (DataSource source : copyFrom.dataSources) { 229 239 dataSources.add(new DataSource(source)); 230 240 } 241 dataSourceListeners.fireEvent(d -> d.dataSourceChange(addedEvent)); 231 242 version = copyFrom.version; 232 243 uploadPolicy = copyFrom.uploadPolicy; … … 272 283 */ 273 284 public synchronized boolean addDataSources(Collection<DataSource> sources) { 285 DataSourceAddedEvent addedEvent = new DataSourceAddedEvent(this, 286 new LinkedHashSet<>(dataSources), sources.stream()); 274 287 boolean changed = dataSources.addAll(sources); 275 288 if (changed) { … … 277 290 cachedDataSourceBounds = null; 278 291 } 292 dataSourceListeners.fireEvent(d -> d.dataSourceChange(addedEvent)); 279 293 return changed; 280 294 } … … 573 587 public void removeHighlightUpdateListener(HighlightUpdateListener listener) { 574 588 highlightUpdateListeners.removeListener(listener); 589 } 590 591 /** 592 * Adds a listener that gets notified whenever the data sources change 593 * 594 * @param listener The listener 595 * @see #removeDataSourceListener 596 * @see #getDataSources 597 * @since 15609 598 */ 599 public void addDataSourceListener(DataSourceListener listener) { 600 dataSourceListeners.addListener(listener); 601 } 602 603 /** 604 * Removes a listener that gets notified whenever the data sources change 605 * 606 * @param listener The listener 607 * @see #addDataSourceListener 608 * @see #getDataSources 609 * @since 15609 610 */ 611 public void removeDataSourceListener(DataSourceListener listener) { 612 dataSourceListeners.removeListener(listener); 575 613 } 576 614 … … 1085 1123 synchronized (from) { 1086 1124 if (!from.dataSources.isEmpty()) { 1087 if (dataSources.addAll(from.dataSources)) { 1125 DataSourceAddedEvent addedEvent = new DataSourceAddedEvent( 1126 this, new LinkedHashSet<>(dataSources), from.dataSources.stream()); 1127 DataSourceRemovedEvent clearEvent = new DataSourceRemovedEvent( 1128 this, new LinkedHashSet<>(from.dataSources), from.dataSources.stream()); 1129 if (from.dataSources.stream().filter(dataSource -> !dataSources.contains(dataSource)) 1130 .map(dataSources::add).filter(Boolean.TRUE::equals).count() > 0) { 1088 1131 cachedDataSourceArea = null; 1089 1132 cachedDataSourceBounds = null; … … 1092 1135 from.cachedDataSourceArea = null; 1093 1136 from.cachedDataSourceBounds = null; 1137 dataSourceListeners.fireEvent(d -> d.dataSourceChange(addedEvent)); 1138 from.dataSourceListeners.fireEvent(d -> d.dataSourceChange(clearEvent)); 1094 1139 } 1095 1140 } -
trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java
r13565 r15609 14 14 import org.junit.Rule; 15 15 import org.junit.Test; 16 import org.openstreetmap.josm.data.Bounds; 17 import org.openstreetmap.josm.data.DataSource; 16 18 import org.openstreetmap.josm.data.coor.LatLon; 19 import org.openstreetmap.josm.data.osm.event.DataSourceAddedEvent; 20 import org.openstreetmap.josm.data.osm.event.DataSourceRemovedEvent; 17 21 import org.openstreetmap.josm.testutils.JOSMTestRules; 18 22 … … 248 252 assertTrue(UploadPolicy.DISCOURAGED.compareTo(UploadPolicy.NORMAL) > 0); 249 253 } 254 255 /** 256 * Checks that data source listeners get called when a data source is added 257 */ 258 @Test 259 public void testAddDataSourceListener() { 260 DataSourceListener addListener = new DataSourceListener() { 261 @Override 262 public void dataSourceChange(DataSourceChangeEvent event) { 263 assertTrue(event instanceof DataSourceAddedEvent); 264 } 265 }; 266 267 DataSet ds = new DataSet(); 268 ds.addDataSourceListener(addListener); 269 ds.addDataSource(new DataSource(new Bounds(0, 0, 0.1, 0.1), "fake source")); 270 271 } 272 273 /** 274 * Checks that data source listeners get called when a data source is removed 275 */ 276 @Test 277 public void testRemoveDataSourceListener() { 278 DataSourceListener removeListener = new DataSourceListener() { 279 @Override 280 public void dataSourceChange(DataSourceChangeEvent event) { 281 assertTrue(event instanceof DataSourceRemovedEvent); 282 } 283 }; 284 285 DataSet ds = new DataSet(); 286 ds.addDataSource(new DataSource(new Bounds(0, 0, 0.1, 0.1), "fake source")); 287 ds.addDataSourceListener(removeListener); 288 new DataSet().mergeFrom(ds); 289 } 250 290 }
Note:
See TracChangeset
for help on using the changeset viewer.