/* (c) 2014 - 2016 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.web.data.layer; import java.io.IOException; import net.opengis.wfs20.ParameterExpressionType; import org.apache.wicket.Component; import org.apache.wicket.markup.html.panel.Fragment; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.web.data.resource.ResourceConfigurationPage; import org.geotools.data.wfs.internal.v2_0.storedquery.ParameterMapping; import org.geotools.data.wfs.internal.v2_0.storedquery.ParameterMappingBlockValue; import org.geotools.data.wfs.internal.v2_0.storedquery.ParameterMappingDefaultValue; import org.geotools.data.wfs.internal.v2_0.storedquery.ParameterMappingExpressionValue; import org.geotools.data.wfs.internal.v2_0.storedquery.StoredQueryConfiguration; public class CascadedWFSStoredQueryEditPage extends CascadedWFSStoredQueryAbstractPage { /** serialVersionUID */ private static final long serialVersionUID = 7254877970765799559L; private ResourceConfigurationPage previousPage; private FeatureTypeInfo editableType; private StoredQueryConfiguration configuration; private String storedQueryId; public CascadedWFSStoredQueryEditPage(FeatureTypeInfo type, ResourceConfigurationPage previousPage) throws IOException { super(type.getStore().getWorkspace().getName(), type.getStore().getName(), type.getName()); this.editableType = type; this.configuration = (StoredQueryConfiguration) type.getMetadata() .get(FeatureTypeInfo.STORED_QUERY_CONFIGURATION); this.storedQueryId = this.configuration.getStoredQueryId(); this.previousPage = previousPage; parameterProvider.refreshItems(configuration.getStoredQueryId()); } @Override public void populateStoredQueryParameterAttribute(String storedQueryId, ParameterExpressionType pet, StoredQueryParameterAttribute attr) { // Sanity check if (!storedQueryId.equals(configuration.getStoredQueryId())) { throw new RuntimeException("Programming error! Stored query ids do not match: '"+ storedQueryId+"' vs '"+configuration.getStoredQueryId()+"'"); } ParameterMapping mapping = null; if (configuration.getStoredQueryParameterMappings() != null) { for (ParameterMapping pm : configuration.getStoredQueryParameterMappings()) { if (pm.getParameterName().equals(pet.getName())) { mapping = pm; break; } } } if (mapping == null) { // No current mapping, return no mapping attr.setMappingType(ParameterMappingType.NONE); attr.setValue(null); } else { // Convert mapping to UI model ParameterMappingType type = ParameterMappingType.NONE; String value = null; if (mapping instanceof ParameterMappingBlockValue) { type = ParameterMappingType.BLOCKED; } else if (mapping instanceof ParameterMappingDefaultValue) { ParameterMappingDefaultValue pmdv = (ParameterMappingDefaultValue)mapping; if (pmdv.isForcible()) { type = ParameterMappingType.STATIC; } else { type = ParameterMappingType.DEFAULT; } value = pmdv.getDefaultValue(); } else if (mapping instanceof ParameterMappingExpressionValue) { ParameterMappingExpressionValue pmev = (ParameterMappingExpressionValue)mapping; if (pmev.getExpressionLanguage().equals("CQL")) { type = ParameterMappingType.EXPRESSION_CQL; value = pmev.getExpression(); } } attr.setMappingType(type); attr.setValue(value); } } @Override protected Component getStoredQueryNameComponent() { return new Fragment("storedQueryName", "editPage", this); } @Override protected void onSave() { StoredQueryConfiguration config = createStoredQueryConfiguration(parameterProvider.getItems(), storedQueryId); editableType.getMetadata().put(FeatureTypeInfo.STORED_QUERY_CONFIGURATION, config); setResponsePage(previousPage); } @Override protected void onCancel() { setResponsePage(previousPage); } }