Package org.geoserver.wms.web.publish

Source Code of org.geoserver.wms.web.publish.AuthorityURLListEditor

/* (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.wms.web.publish;

import java.util.ArrayList;
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.Form;
import org.apache.wicket.markup.html.form.FormComponentPanel;
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.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.validation.validator.UrlValidator;
import org.geoserver.catalog.AuthorityURLInfo;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.impl.AuthorityURL;
import org.geoserver.wms.WMSInfo;
import org.springframework.util.Assert;

/**
* Shows and allows editing of the {@link AuthorityURLInfo} attached to a {@link WMSInfo}, a
* {@link LayerInfo}, or a {@link LayerGroupInfo}.
*
* @author groldan
*
*/
public class AuthorityURLListEditor extends FormComponentPanel<List<AuthorityURLInfo>> {

    private static final long serialVersionUID = 5098470663723800345L;

    private ListView<AuthorityURLInfo> authorityURLs;

    private Label noMetadata;

    private WebMarkupContainer table;

    /**
     * @param id
     * @param model
     *            the model over the appropriate cataloginfo's list of {@link AuthorityURLInfo}
     * @see WMSInfo#getAuthorityURLs()
     * @see LayerInfo#getAuthorityURLs()
     * @see LayerGroupInfo#getAuthorityURLs()
     */
    public AuthorityURLListEditor(final String id, final IModel<List<AuthorityURLInfo>> list) {
        super(id, list);
        Assert.notNull(list.getObject());

        // 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);
        authorityURLs = new ListView<AuthorityURLInfo>("authorities",
                new ArrayList<AuthorityURLInfo>(list.getObject())) {

            private static final long serialVersionUID = 1L;

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

                // Authority name
                TextField<String> authName;
                authName = new TextField<String>("authName", new PropertyModel<String>(
                        item.getModel(), "name"));
                authName.setRequired(true);

                FormComponentFeedbackBorder authNameBorder = new FormComponentFeedbackBorder("authNameBorder");
                item.add(authNameBorder);
                authNameBorder.add(authName);

                // Authority URL
                TextField<String> authURL;
                authURL = new TextField<String>("authorityURL", new PropertyModel<String>(
                        item.getModel(), "href"));
                authURL.setRequired(true);
                authURL.add(new UrlValidator());
                FormComponentFeedbackBorder urlBorder = new FormComponentFeedbackBorder("urlBorder");
                item.add(urlBorder);
                urlBorder.add(authURL);

                // remove link
                AjaxLink<Integer> link = new AjaxLink<Integer>("removeLink", new Model<Integer>(
                        item.getIndex())) {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        List<AuthorityURLInfo> list = new ArrayList<AuthorityURLInfo>(
                                authorityURLs.getModelObject());
                        int index = getModelObject();
                        list.remove(index);
                        authorityURLs.setModelObject(list);
                        updateLinksVisibility();
                        target.addComponent(container);
                    }

                };
                item.add(link);
            }

        };
        // this is necessary to avoid loosing item contents on edit/validation checks
        authorityURLs.setReuseItems(true);
        table.add(authorityURLs);

        // the no metadata links label
        noMetadata = new Label("noURLs", new ResourceModel("noAuthorityURLsSoFar"));
        container.add(noMetadata);
        updateLinksVisibility();

        // add new link button
        AjaxButton button = new AjaxButton("addURL") {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                List<AuthorityURLInfo> list = authorityURLs.getModelObject();
                AuthorityURLInfo authorityURL = new AuthorityURL();
                list.add(authorityURL);
                authorityURLs.setModelObject(list);
                AuthorityURLListEditor.this.convertInput();
                updateLinksVisibility();
                target.addComponent(container);
            }

        };
        add(button);
    }

    private void updateLinksVisibility() {
        List<AuthorityURLInfo> list = authorityURLs.getModelObject();
        boolean anyLink = list.size() > 0;
        table.setVisible(anyLink);
        noMetadata.setVisible(!anyLink);
    }

    @Override
    protected void convertInput() {
        List<AuthorityURLInfo> info = authorityURLs.getModelObject();
        if (info == null || info.size() == 0) {
            setConvertedInput(new ArrayList<AuthorityURLInfo>(2));
            return;
        }

        setConvertedInput(info);
    }

    /**
     */
    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
    }
}
TOP

Related Classes of org.geoserver.wms.web.publish.AuthorityURLListEditor

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.