/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web.data.store.pgraster; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.validation.IFormValidator; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import org.geoserver.catalog.CoverageStoreInfo; import org.geoserver.web.data.store.StoreEditPanel; import org.geoserver.web.data.store.panel.TextParamPanel; import org.geoserver.web.util.MapModel; import org.geoserver.web.wicket.FileExistsValidator; /** * Provides more components for PGRaster store automatic configuration * * @author Daniele Romagnoli, GeoSolutions SAS * */ public final class PGRasterCoverageStoreEditPanel extends StoreEditPanel { private CheckBox enabled; public PGRasterCoverageStoreEditPanel(final String componentId, final Form storeEditForm) { super(componentId, storeEditForm); final IModel model = storeEditForm.getModel(); setDefaultModel(model); final IModel paramsModel = new PropertyModel(model, "connectionParameters"); // double container dance to get stuff to show up and hide on demand (grrr) final WebMarkupContainer configsContainer = new WebMarkupContainer("configsContainer"); configsContainer.setOutputMarkupId(true); add(configsContainer); final PGRasterPanel advancedConfigPanel = new PGRasterPanel("pgpanel", paramsModel, storeEditForm); advancedConfigPanel.setOutputMarkupId(true); advancedConfigPanel.setVisible(false); configsContainer.add(advancedConfigPanel); // TODO: Check whether this constructor is properly setup final TextParamPanel url = new TextParamPanel("urlPanel", new PropertyModel(paramsModel, "URL"), new ResourceModel("url", "URL"), true); final FormComponent urlFormComponent = url.getFormComponent(); urlFormComponent.add(new FileExistsValidator()); add(url); // enabled flag, and show the rest only if enabled is true IModel<Boolean> enabledModel = new Model<Boolean>(false); enabled = new CheckBox("enabled", enabledModel); add(enabled); enabled.add(new AjaxFormComponentUpdatingBehavior("click") { @Override protected void onUpdate(AjaxRequestTarget target) { Boolean visible = enabled.getModelObject(); advancedConfigPanel.setVisible(visible); target.add(configsContainer); } }); /* * Listen to form submission and update the model's URL */ storeEditForm.add(new IFormValidator() { private static final long serialVersionUID = 1L; public FormComponent[] getDependentFormComponents() { if(enabled.getModelObject()) { return advancedConfigPanel.getDependentFormComponents(); } else { return new FormComponent[] {urlFormComponent}; } } public void validate(final Form form) { CoverageStoreInfo storeInfo = (CoverageStoreInfo) form.getModelObject(); String coverageUrl = urlFormComponent.getValue(); if (enabled.getModelObject()) { coverageUrl = advancedConfigPanel.buildURL() + coverageUrl; } storeInfo.setURL(coverageUrl); } }); } private FormComponent addTextPanel(final IModel paramsModel, final String paramName) { final String resourceKey = getClass().getSimpleName() + "." + paramName; final boolean required = true; final TextParamPanel textParamPanel = new TextParamPanel(paramName, new MapModel( paramsModel, paramName), new ResourceModel(resourceKey, paramName), required); textParamPanel.getFormComponent().setType(String.class); String defaultTitle = paramName; ResourceModel titleModel = new ResourceModel(resourceKey + ".title", defaultTitle); String title = String.valueOf(titleModel.getObject()); textParamPanel.add(AttributeModifier.replace("title", title)); add(textParamPanel); return textParamPanel.getFormComponent(); } }