/*
 *    GeoTools - OpenSource mapping toolkit
 *    http://geotools.org
 *    (C) 2002-2006, GeoTools Project Managment Committee (PMC)
 * 
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation;
 *    version 2.1 of the License.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 */
package org.geotools.data.postgis;

import java.util.Collections;
import java.util.Set;

/**
 * Contains the three sets of feature ids that identify those changes occurred between two versions
 * in the versioned datastore
 * 
 * @author aaime
 * @since 2.4
 * 
 */
public class ModifiedFeatureIds {
    RevisionInfo fromRevision;

    RevisionInfo toRevision;

    Set created;

    Set deleted;

    Set modified;

    public ModifiedFeatureIds(RevisionInfo fromRevision, RevisionInfo toRevision) {
        this(fromRevision, toRevision, Collections.EMPTY_SET, Collections.EMPTY_SET,
                Collections.EMPTY_SET);
    }

    public ModifiedFeatureIds(RevisionInfo fromRevision, RevisionInfo toRevision, Set created,
            Set deleted, Set modified) {
        this.fromRevision = fromRevision;
        this.toRevision = toRevision;
        this.deleted = deleted;
        this.created = created;
        this.modified = modified;
    }

    /**
     * Contains all ids for features that were deleted before endVersion (a feature may be both in
     * this set and in created if it was created and then deleted)
     * 
     * @return
     */
    public Set getDeleted() {
        return Collections.unmodifiableSet(deleted);
    }

    /**
     * Contains all ids for features that were created after startVersion (a feature may be both in
     * this set and in deleted if it was created and then deleted)
     * 
     * @return
     */
    public Set getCreated() {
        return Collections.unmodifiableSet(created);
    }

    /**
     * Contains all ids for features that were already there at startVersion, were modified before
     * endVersion and were not deleted.
     * 
     * @return
     */
    public Set getModified() {
        return Collections.unmodifiableSet(modified);
    }

    public String getToVersion() {
        return toRevision.getVersion();
    }

    public String getFromVersion() {
        return fromRevision.getVersion();
    }

    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("Diff between: " + fromRevision + " and " + toRevision).append("\n");
        sb.append("Created: ").append(created).append("\n");
        sb.append("Deleted: ").append(deleted).append("\n");
        sb.append("Modified: ").append(modified);
        return sb.toString();
    }

}
