org.geoserver.web.data.resource.CoverageResourceConfigurationPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.web.data.resource.CoverageResourceConfigurationPanel.java

Source

/* (c) 2014 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.resource;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.CoverageView;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.web.data.layer.SQLViewEditPage;
import org.geoserver.web.data.layer.CoverageViewEditPage;
import org.geoserver.web.data.layer.CoverageViewAbstractPage;
import org.geoserver.web.data.store.panel.ColorPickerPanel;
import org.geoserver.web.data.store.panel.TextParamPanel;
import org.geoserver.web.util.MapModel;

/**
 * A configuration panel for CoverageInfo properties that related to WCS publication
 * @author Andrea Aime - OpenGeo
 *
 */
@SuppressWarnings("serial")
public class CoverageResourceConfigurationPanel extends ResourceConfigurationPanel {

    public CoverageResourceConfigurationPanel(final String panelId, final IModel model) {
        super(panelId, model);

        final CoverageInfo coverage = (CoverageInfo) getResourceInfo();

        final Map<String, Serializable> parameters = coverage.getParameters();
        List<String> keys = new ArrayList<String>(parameters.keySet());
        Collections.sort(keys);

        final IModel paramsModel = new PropertyModel(model, "parameters");
        ListView paramsList = new ListView("parameters", keys) {

            @Override
            protected void populateItem(ListItem item) {
                Component inputComponent = getInputComponent("parameterPanel", paramsModel,
                        item.getDefaultModelObjectAsString());
                item.add(inputComponent);
            }
        };

        WebMarkupContainer coverageViewContainer = new WebMarkupContainer("editCoverageViewContainer");
        add(coverageViewContainer);
        final CoverageView coverageView = coverage.getMetadata().get(CoverageView.COVERAGE_VIEW,
                CoverageView.class);
        coverageViewContainer.add(new Link("editCoverageView") {

            @Override
            public void onClick() {
                CoverageInfo coverageInfo = (CoverageInfo) model.getObject();
                try {
                    CoverageStoreInfo store = coverageInfo.getStore();
                    WorkspaceInfo workspace = store.getWorkspace();
                    setResponsePage(new CoverageViewEditPage(workspace.getName(), store.getName(),
                            coverageInfo.getName(), coverageInfo, ((ResourceConfigurationPage) this.getPage())));
                } catch (Exception e) {
                    LOGGER.log(Level.SEVERE, "Failure opening the Virtual Coverage edit page", e);
                    error(e.toString());
                }
            }

        });

        coverageViewContainer.setVisible(coverageView != null);

        // needed for form components not to loose state
        paramsList.setReuseItems(true);
        add(paramsList);

        if (keys.size() == 0)
            setVisible(false);
    }

    private Component getInputComponent(String id, IModel paramsModel, String keyName) {
        if (keyName.contains("Color"))
            return new ColorPickerPanel(id, new MapModel(paramsModel, keyName),
                    new org.apache.wicket.model.ResourceModel(keyName, keyName), false);
        else
            return new TextParamPanel(id, new MapModel(paramsModel, keyName),
                    new org.apache.wicket.model.ResourceModel(keyName, keyName), false);
    }
}