All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.vfny.geoserver.global.GeoServerVersioningFeatureSource Maven / Gradle / Ivy

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
 * This code is licensed under the GPL 2.0 license, availible at the root
 * application directory.
 */
package org.vfny.geoserver.global;

import org.geotools.data.DataSourceException;
import org.geotools.data.DefaultQuery;
import org.geotools.data.Query;
import org.geotools.data.VersioningFeatureLocking;
import org.geotools.data.VersioningFeatureSource;
import org.geotools.data.VersioningFeatureStore;
import org.geotools.data.postgis.FeatureDiffReader;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.FeatureType;
import org.opengis.filter.Filter;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import java.io.IOException;


/**
 * Versioning wrapper that preserves the versioning nature of a feature source
 *
 * @TODO: once the experiment is over, move this back to the main module
 * @author Andrea Aime, TOPP
 *
 */
public class GeoServerVersioningFeatureSource extends GeoServerFeatureSource
    implements VersioningFeatureSource {
    GeoServerVersioningFeatureSource(VersioningFeatureSource source, FeatureType schema,
        Filter definitionQuery, CoordinateReferenceSystem declaredCRS, int srsHandling) {
        super(source, schema, definitionQuery, declaredCRS, srsHandling);
    }

    public FeatureDiffReader getDifferences(String fromVersion, String toVersion, Filter filter, String[] users)
        throws IOException {
        // TODO: if we are bound to a smaller schema, we should remove the
        // hidden attributes from the differences
        return ((VersioningFeatureSource) source).getDifferences(fromVersion, toVersion, filter, users);
    }

    public FeatureCollection getLog(String fromVersion, String toVersion, Filter filter, String[] users, int maxFeatures)
        throws IOException {
        return ((VersioningFeatureSource) source).getLog(fromVersion, toVersion, filter, users, maxFeatures);
    }

    /**
     * Factory that make the correct decorator for the provided featureSource.
     *
     * 

* This factory method is public and will be used to create all required * subclasses. By comparison the constructors for this class have package * visibiliy. *

* * @param featureSource * @param schema * @param definitionQuery * @param declaredCRS * * * @return */ public static GeoServerFeatureSource create(VersioningFeatureSource featureSource, FeatureType schema, Filter definitionQuery, CoordinateReferenceSystem declaredCRS, int srsHandling) { if (featureSource instanceof VersioningFeatureLocking) { return new GeoServerVersioningFeatureLocking((VersioningFeatureLocking) featureSource, schema, definitionQuery, declaredCRS, srsHandling); } else if (featureSource instanceof VersioningFeatureStore) { return new GeoServerVersioningFeatureStore((VersioningFeatureStore) featureSource, schema, definitionQuery, declaredCRS, srsHandling); } return new GeoServerVersioningFeatureSource(featureSource, schema, definitionQuery, declaredCRS, srsHandling); } public FeatureCollection getVersionedFeatures(Query query) throws IOException { final VersioningFeatureSource versioningSource = ((VersioningFeatureSource) source); Query newQuery = adaptQuery(query, versioningSource.getVersionedFeatures().getSchema()); CoordinateReferenceSystem targetCRS = query.getCoordinateSystemReproject(); try { //this is the raw "unprojected" feature collection FeatureCollection fc = versioningSource.getVersionedFeatures(newQuery); return reprojectFeatureCollection(targetCRS, fc); } catch (Exception e) { throw new DataSourceException(e); } } public FeatureCollection getVersionedFeatures(Filter filter) throws IOException { return getFeatures(new DefaultQuery(schema.getTypeName(), filter)); } public FeatureCollection getVersionedFeatures() throws IOException { return getFeatures(Query.ALL); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy