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 * There is a new data source 016 * 017 * @author Taylor Smock 018 * @since 15609 019 */ 020public class DataSourceAddedEvent extends AbstractDataSourceChangeEvent { 021 private Set<DataSource> current; 022 private Set<DataSource> removed; 023 private final 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 newDataSources The data sources that are being added 031 */ 032 public DataSourceAddedEvent(DataSet source, Set<DataSource> old, Stream<DataSource> newDataSources) { 033 super(source, old); 034 CheckParameterUtil.ensureParameterNotNull(newDataSources, "newDataSources"); 035 this.added = newDataSources.collect(Collectors.toCollection(LinkedHashSet::new)); 036 } 037 038 @Override 039 public Set<DataSource> getDataSources() { 040 if (current == null) { 041 current = new LinkedHashSet<>(getOldDataSources()); 042 current.addAll(added); 043 } 044 return current; 045 } 046 047 @Override 048 public synchronized Set<DataSource> getRemoved() { 049 if (removed == null) { 050 removed = getOldDataSources().stream().filter(s -> !getDataSources().contains(s)) 051 .collect(Collectors.toCollection(LinkedHashSet::new)); 052 } 053 return removed; 054 } 055 056 @Override 057 public synchronized Set<DataSource> getAdded() { 058 return added; 059 } 060 061 @Override 062 public String toString() { 063 return "DataSourceAddedEvent [current=" + current + ", removed=" + removed + ", added=" + added + ']'; 064 } 065} 066