001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.osm; 003 004import java.util.Collection; 005import java.util.Collections; 006import java.util.HashSet; 007import java.util.Set; 008 009/** 010 * The default event implementation that is used to indicate a change in the {@link ChangesetCache} 011 */ 012public class DefaultChangesetCacheEvent implements ChangesetCacheEvent { 013 014 private final Set<Changeset> added; 015 private final Set<Changeset> modified; 016 private final Set<Changeset> removed; 017 private final ChangesetCache source; 018 019 /** 020 * Creates a basic, empty {@link ChangesetCacheEvent} 021 * @param source The source changeset 022 */ 023 public DefaultChangesetCacheEvent(ChangesetCache source) { 024 this.source = source; 025 added = new HashSet<>(); 026 modified = new HashSet<>(); 027 removed = new HashSet<>(); 028 } 029 030 @Override 031 public ChangesetCache getSource() { 032 return source; 033 } 034 035 @Override 036 public Collection<Changeset> getAddedChangesets() { 037 return Collections.unmodifiableCollection(added); 038 } 039 040 @Override 041 public Collection<Changeset> getRemovedChangesets() { 042 return Collections.unmodifiableCollection(removed); 043 } 044 045 @Override 046 public Collection<Changeset> getUpdatedChangesets() { 047 return Collections.unmodifiableCollection(modified); 048 } 049 050 /** 051 * Adds a {@link Changeset} to the added list 052 * @param cs the {@link Changeset} 053 */ 054 public void rememberAddedChangeset(Changeset cs) { 055 if (cs == null) return; 056 added.add(cs); 057 } 058 059 /** 060 * Adds a {@link Changeset} to the updated list 061 * @param cs the {@link Changeset} 062 */ 063 public void rememberUpdatedChangeset(Changeset cs) { 064 if (cs == null) return; 065 modified.add(cs); 066 } 067 068 /** 069 * Adds a {@link Changeset} to the removed list 070 * @param cs the {@link Changeset} 071 */ 072 public void rememberRemovedChangeset(Changeset cs) { 073 if (cs == null) return; 074 removed.add(cs); 075 } 076 077 /** 078 * Checks if this event contains any {@link Changeset}s 079 * @return <code>true</code> if changesets were added 080 */ 081 public boolean isEmpty() { 082 return added.isEmpty() && modified.isEmpty() && removed.isEmpty(); 083 } 084}