Package org.geoserver.web.wicket

Source Code of org.geoserver.web.wicket.KeywordsEditor

/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.wicket;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

/**
* Form component to edit a List<String> that makes up the keywords field of
* various catalog objects.
*/
@SuppressWarnings("serial")
public class KeywordsEditor extends FormComponentPanel {

    ListMultipleChoice choices;
    TextField newKeyword;

    /**
     * Creates a new keywords editor.
     * @param id
     * @param keywords The module should return a non null collection of strings.
     */
    public KeywordsEditor(String id, final IModel keywords) {
        super(id, keywords);

        choices = new ListMultipleChoice("keywords", new Model(), new ArrayList((List) keywords.getObject()));
        choices.setOutputMarkupId(true);
        add(choices);
        add(removeKeywordsButton());
        newKeyword = new TextField("newKeyword", new Model());
        newKeyword.setOutputMarkupId(true);
        add(newKeyword);
        add(addKeywordsButton());
    }

    private AjaxButton addKeywordsButton() {
        AjaxButton button = new AjaxButton("addKeyword") {
            @Override
            public void onSubmit(AjaxRequestTarget target, Form form) {
                List choiceList = choices.getChoices();
                choiceList.add(newKeyword.getInput());
                choices.setChoices(choiceList);
                newKeyword.setModelObject(null);
                newKeyword.modelChanged();
                target.addComponent(newKeyword);
                target.addComponent(choices);
            }
        };
        button.setDefaultFormProcessing(false);
        return button;
    }

    private AjaxButton removeKeywordsButton() {
        AjaxButton button = new AjaxButton("removeKeywords") {
           
            @Override
            public void onSubmit(AjaxRequestTarget target, Form form) {
                List selection = (List) choices.getModelObject();
                List keywords = choices.getChoices();
                for (Iterator it = selection.iterator(); it.hasNext();) {
                    String selected = (String) it.next();
                    keywords.remove(selected);
                }
                choices.setChoices(keywords);
                choices.modelChanged();
                target.addComponent(choices);
            }
        };
        // button.setDefaultFormProcessing(false);
        return button;
    }
   
    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
        updateFields();
    }

    private void updateFields() {
        choices.setChoices(getModel());
    }
   
    @Override
    protected void convertInput() {
        setConvertedInput(choices.getChoices());
    }
}
TOP

Related Classes of org.geoserver.web.wicket.KeywordsEditor

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.