/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.catalog; import java.io.IOException; import org.geotools.data.DataAccess; import org.geotools.data.wfs.WFSDataStore; import org.geotools.data.wfs.internal.v2_0.storedquery.StoredQueryConfiguration; import org.opengis.feature.Feature; import org.opengis.feature.type.FeatureType; import org.opengis.feature.type.Name; /** * Handles feature types derived from cascaded WFS Stored Queries. Stored Query configuration * is stored within the FeatureTypeInfo metadata. */ public class CascadedStoredQueryCallback implements FeatureTypeCallback { @Override public boolean canHandle(FeatureTypeInfo info, DataAccess<? extends FeatureType, ? extends Feature> dataAccess) { return dataAccess instanceof WFSDataStore && info.getMetadata() != null && (info.getMetadata().get(FeatureTypeInfo.STORED_QUERY_CONFIGURATION) instanceof StoredQueryConfiguration); } @Override public boolean initialize(FeatureTypeInfo info, DataAccess<? extends FeatureType, ? extends Feature> dataAccess, Name temporaryName) throws IOException { StoredQueryConfiguration sqc = info.getMetadata().get(FeatureTypeInfo.STORED_QUERY_CONFIGURATION, StoredQueryConfiguration.class); WFSDataStore wstore = (WFSDataStore)dataAccess; String localPart = info.getName(); boolean usesTemporary = false; if (temporaryName != null) { localPart = temporaryName.getLocalPart(); usesTemporary = true; } if(!wstore.getConfiguredStoredQueries().containsValue(localPart)) { wstore.addStoredQuery(localPart, sqc.getStoredQueryId()); } return usesTemporary; } @Override public void flush(FeatureTypeInfo info, DataAccess<? extends FeatureType, ? extends Feature> dataAccess) throws IOException { // nothing to do } @Override public void dispose(FeatureTypeInfo info, DataAccess<? extends FeatureType, ? extends Feature> dataAccess, Name temporaryName) throws IOException { WFSDataStore wstore = (WFSDataStore)dataAccess; wstore.removeStoredQuery(temporaryName.getLocalPart()); } }