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}