Package org.geoserver.web.data.resource

Source Code of org.geoserver.web.data.resource.MetadataLinkEditor

package org.geoserver.web.data.resource;

import java.util.Arrays;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.validation.FormComponentFeedbackBorder;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.validation.validator.UrlValidator;
import org.geoserver.catalog.MetadataLinkInfo;
import org.geoserver.catalog.ResourceInfo;

/**
* Shows and allows editing of the {@link MetadataLinkInfo} attached to a
* {@link ResourceInfo}
*
* @author Andrea Aime - OpenGeo
*
*/
@SuppressWarnings("serial")
public class MetadataLinkEditor extends Panel {
    private static final List<String> LINK_TYPES = Arrays.asList("FGDC",
            "TC211", "other");
    private ListView links;
    private Label noMetadata;
    private WebMarkupContainer table;

    /**
     * @param id
     * @param model Must return a {@link ResourceInfo}
     */
    public MetadataLinkEditor(String id, final IModel resourceModel) {
        super(id, resourceModel);
       
        // container for ajax updates
        final WebMarkupContainer container = new WebMarkupContainer("container");
        container.setOutputMarkupId(true);
        add(container);

        // the link list
        table = new WebMarkupContainer("table");
        table.setOutputMarkupId(true);
        container.add(table);
        links = new ListView("links", new PropertyModel(resourceModel, "metadataLinks")) {

            @Override
            protected void populateItem(ListItem item) {
               
                // odd/even style
                item.add(new SimpleAttributeModifier("class",
                        item.getIndex() % 2 == 0 ? "even" : "odd"));

                // link info
                DropDownChoice dropDownChoice = new DropDownChoice("type",
                        new PropertyModel(item.getModel(), "metadataType"), LINK_TYPES);
                dropDownChoice.setRequired(true);
                item.add(dropDownChoice);
                FormComponentFeedbackBorder urlBorder = new FormComponentFeedbackBorder("urlBorder");
                item.add(urlBorder);
                TextField format = new TextField("format", new PropertyModel(item.getModel(), "type"));
                format.setRequired(true);
                item.add(format);
                TextField url = new TextField("metadataLinkURL", new PropertyModel(item.getModel(), "content"));
                url.add(new UrlValidator());
                url.setRequired(true);
                urlBorder.add(url);
               
                // remove link
                AjaxLink link = new AjaxLink("removeLink", item.getModel()) {

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        ResourceInfo ri = (ResourceInfo) resourceModel.getObject();
                        ri.getMetadataLinks().remove(getModelObject());
                        updateLinksVisibility();
                        target.addComponent(container);
                    }
                   
                };
                item.add(link);
            }

        };
        // this is necessary to avoid loosing item contents on edit/validation checks
        links.setReuseItems(true);
        table.add(links);
       
        // the no metadata links label
        noMetadata = new Label("noLinks", new ResourceModel("noMetadataLinksSoFar"));
        container.add(noMetadata);
        updateLinksVisibility();
       
        // add new link button
        AjaxButton button = new AjaxButton("addlink") {

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form form) {
                ResourceInfo ri = (ResourceInfo) resourceModel.getObject();
                MetadataLinkInfo link = ri.getCatalog().getFactory().createMetadataLink();;
                link.setMetadataType(LINK_TYPES.get(0));
                link.setType("text/plain");
                ri.getMetadataLinks().add(link);
                updateLinksVisibility();
               
                target.addComponent(container);
            }
           
        };
        add(button);
    }

    private void updateLinksVisibility() {
        ResourceInfo ri = (ResourceInfo) getModelObject();
        boolean anyLink = ri.getMetadataLinks().size() > 0;
        table.setVisible(anyLink);
        noMetadata.setVisible(!anyLink);
    }
}
TOP

Related Classes of org.geoserver.web.data.resource.MetadataLinkEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.