001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002-2006, GeoTools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.data;
017:
018: import java.io.IOException;
019:
020: import org.geotools.data.postgis.FeatureDiffReader;
021: import org.geotools.data.postgis.VersionedPostgisDataStore;
022: import org.geotools.feature.FeatureCollection;
023: import org.opengis.filter.Filter;
024:
025: /**
026: * Extension to feature source to provide the read only methods needed to work
027: * against a versioned data store.
028: * <p>
029: * Thought a read only versioned data store does not make sense, it may happen
030: * that a VersioningFeatureSource gets returned, for instance, because of
031: * limited authorizations from the caller code.
032: *
033: * @author Andrea Aime, TOPP TODO: this shall be moved in a more generic module
034: * (api?) once the interfaces are good
035: */
036: public interface VersioningFeatureSource extends FeatureSource {
037:
038: /**
039: * Returns a log of changes performed between fromVersion and toVersion
040: * against the features matched by the specified filter.
041: * <p>
042: * This is equivalent to gathering the ids of features changed between the
043: * two versions and matching the filter, getting a list of revision
044: * involving those feaures between fromVersion and toVersion, and then query
045: * {@link VersionedPostgisDataStore#TBL_CHANGESETS} against these revision
046: * numbers.
047: *
048: * @param fromVersion
049: * the start revision
050: * @param toVersion
051: * the end revision, may be null to imply the latest one
052: * @param filter
053: * will match features whose log will be reported *
054: * @param users
055: * limits the features whose log will be returned, by
056: * catching only those that have been modified by at least one of
057: * the specified users. May be null to avoid user filtering.
058: * @param maxRows
059: * the maximum number of log rows returned from this call
060: * @return a feature collection of the logs, sorted on revision, descending
061: * @throws IOException
062: */
063: public FeatureCollection getLog(String fromVersion,
064: String toVersion, Filter filter, String[] userIds,
065: int maxRows) throws IOException;
066:
067: /**
068: * Returns a feature difference reader providing the changes occurred on
069: * filtered features between the two specified versions
070: *
071: * @param fromVersion
072: * the start version
073: * @param toVersion
074: * the end version, may be null to imply the latest one
075: * @param filter
076: * matches features whose differences will be reported *
077: * @param users
078: * limits the features whose diff will be returned, by
079: * catching only those that have been modified by at least one of
080: * the specified users. May be null to avoid user filtering.
081: * @return a difference reader
082: * @throws IOException
083: */
084: public FeatureDiffReader getDifferences(String fromVersion,
085: String toVersion, Filter filter, String[] userIds)
086: throws IOException;
087:
088: /**
089: * Returns the same features as {@link FeatureSource#getFeatures(Query)} but providing more
090: * attributes, namely, revision, author and date of the version.
091: * @return
092: */
093: public FeatureCollection getVersionedFeatures(Query q)
094: throws IOException;
095:
096: /**
097: * Returns the same features as {@link FeatureSource#getFeatures(Filter)} but providing more
098: * attributes, namely, revision, author and date of the version.
099: * @return
100: */
101: public FeatureCollection getVersionedFeatures(Filter f)
102: throws IOException;
103:
104: /**
105: * Returns the same features as {@link FeatureSource#getFeatures()} but providing more
106: * attributes, namely, revision, author and date of the version.
107: * @return
108: */
109: public FeatureCollection getVersionedFeatures() throws IOException;
110: }
|