001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.osm.event; 003 004import java.util.LinkedHashSet; 005import java.util.Set; 006import java.util.stream.Collectors; 007import java.util.stream.Stream; 008 009import org.openstreetmap.josm.data.DataSource; 010import org.openstreetmap.josm.data.osm.AbstractDataSourceChangeEvent; 011import org.openstreetmap.josm.data.osm.DataSet; 012import org.openstreetmap.josm.tools.CheckParameterUtil; 013 014/** 015 * A data source was removed 016 * 017 * @author Taylor Smock 018 * @since 15609 019 */ 020public class DataSourceRemovedEvent extends AbstractDataSourceChangeEvent { 021 private Set<DataSource> current; 022 private final Set<DataSource> removed; 023 private Set<DataSource> added; 024 025 /** 026 * Create a Data Source change event 027 * 028 * @param source The DataSet that is originating the change 029 * @param old The previous set of DataSources 030 * @param removedDataSources The data sources that are being removed 031 */ 032 public DataSourceRemovedEvent(DataSet source, Set<DataSource> old, Stream<DataSource> removedDataSources) { 033 super(source, old); 034 CheckParameterUtil.ensureParameterNotNull(removedDataSources, "removedDataSources"); 035 this.removed = removedDataSources.collect(Collectors.toCollection(LinkedHashSet::new)); 036 } 037 038 @Override 039 public Set<DataSource> getDataSources() { 040 if (current == null) { 041 current = getOldDataSources().stream().filter(s -> !removed.contains(s)) 042 .collect(Collectors.toCollection(LinkedHashSet::new)); 043 } 044 return current; 045 } 046 047 @Override 048 public synchronized Set<DataSource> getRemoved() { 049 return removed; 050 } 051 052 @Override 053 public synchronized Set<DataSource> getAdded() { 054 if (added == null) { 055 added = getDataSources().stream().filter(s -> !getOldDataSources().contains(s)) 056 .collect(Collectors.toCollection(LinkedHashSet::new)); 057 } 058 return added; 059 } 060 061 @Override 062 public String toString() { 063 return "DataSourceAddedEvent [current=" + current + ", removed=" + removed + ", added=" + added + ']'; 064 } 065} 066