Package org.geoserver.web.wicket

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

/* (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.wicket;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;

import net.sf.cglib.core.Local;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
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;
import org.geoserver.catalog.Keyword;
import org.geoserver.catalog.KeywordInfo;

/**
* 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;
    TextField<String> vocabTextField;
    DropDownChoice<String> langChoice;
   
    /**
     * 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()), new ChoiceRenderer<Keyword>() {
                @Override
                public Object getDisplayValue(Keyword kw) {
                    StringBuffer sb = new StringBuffer(kw.getValue());
                    if (kw.getLanguage() != null) {
                        sb.append(" (").append(kw.getLanguage()).append(")");
                    }
                    if (kw.getVocabulary() != null) {
                        sb.append(" [").append(kw.getVocabulary()).append("]");
                    }
                    return sb.toString();
                }
        });
        choices.setOutputMarkupId(true);
        add(choices);
        add(removeKeywordsButton());
        newKeyword = new TextField("newKeyword", new Model());
        newKeyword.setOutputMarkupId(true);
        add(newKeyword);

        langChoice = new DropDownChoice<String>("lang", new Model(),
            Arrays.asList(Locale.getISOLanguages()), new ChoiceRenderer<String>() {
            @Override
            public Object getDisplayValue(String object) {
                return new Locale(object).getDisplayLanguage();
            }
            @Override
            public String getIdValue(String object, int index) {
                return object;
            }
        });

        langChoice.setNullValid(true);
        langChoice.setOutputMarkupId(true);
        add(langChoice);

        vocabTextField = new TextField<String>("vocab", new Model());
        vocabTextField.setOutputMarkupId(true);
           
        add(vocabTextField);

        add(addKeywordsButton());
    }

    private AjaxButton addKeywordsButton() {
        AjaxButton button = new AjaxButton("addKeyword") {
            @Override
            public void onSubmit(AjaxRequestTarget target, Form form) {
                String value = newKeyword.getInput();
                String lang = langChoice.getInput();
                String vocab = vocabTextField.getInput();
               
                KeywordInfo keyword = new Keyword(value);
                if (lang != null && !"".equals(lang.trim())) {
                    keyword.setLanguage(lang);
                }
                if (vocab != null && !"".equals(vocab.trim())) {
                    keyword.setVocabulary(vocab);
                }
               
                List choiceList = choices.getChoices();
                choiceList.add(keyword);
                choices.setChoices(choiceList);
               
                langChoice.setModelObject(null);
                langChoice.modelChanged();

                vocabTextField.setModelObject(null);
                vocabTextField.modelChanged();

                target.addComponent(newKeyword);
                target.addComponent(langChoice);
                target.addComponent(vocabTextField);
                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();) {
                    KeywordInfo selected = (KeywordInfo) 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.