org.obiba.onyx.quartz.editor.openAnswer.autocomplete.SuggestionItemWindow.java Source code

Java tutorial

Introduction

Here is the source code for org.obiba.onyx.quartz.editor.openAnswer.autocomplete.SuggestionItemWindow.java

Source

/*******************************************************************************
 * Copyright 2012(c) OBiBa. All rights reserved.
 *
 * This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
package org.obiba.onyx.quartz.editor.openAnswer.autocomplete;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SimpleFormComponentLabel;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.obiba.onyx.quartz.core.engine.questionnaire.question.OpenAnswerDefinition;
import org.obiba.onyx.quartz.core.engine.questionnaire.question.OpenAnswerDefinitionSuggestion;
import org.obiba.onyx.quartz.editor.locale.LabelsPanel;
import org.obiba.onyx.quartz.editor.locale.LocaleProperties;
import org.obiba.onyx.quartz.editor.locale.LocalePropertiesUtils;
import org.obiba.onyx.quartz.editor.utils.SaveCancelPanel;
import org.obiba.onyx.wicket.behavior.RequiredFormFieldBehavior;
import org.obiba.onyx.wicket.reusable.FeedbackWindow;

/**
 *
 */
@SuppressWarnings("serial")
public abstract class SuggestionItemWindow extends Panel {

    // private final transient Logger logger = LoggerFactory.getLogger(getClass());

    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "SE_BAD_FIELD", justification = "Need to be be re-initialized upon deserialization")
    @SpringBean
    private LocalePropertiesUtils localePropertiesUtils;

    private final FeedbackPanel feedbackPanel;

    private final FeedbackWindow feedbackWindow;

    public SuggestionItemWindow(String id, IModel<OpenAnswerDefinition> model, IModel<String> itemModel,
            IModel<LocaleProperties> localePropertiesModel, final ModalWindow modalWindow) {
        super(id, model);

        feedbackPanel = new FeedbackPanel("content");
        feedbackWindow = new FeedbackWindow("feedback");
        feedbackWindow.setOutputMarkupId(true);
        add(feedbackWindow);

        OpenAnswerDefinitionSuggestion openAnswerSuggestion = new OpenAnswerDefinitionSuggestion(model.getObject());

        final Form<OpenAnswerDefinition> form = new Form<OpenAnswerDefinition>("form", model);
        form.setMultiPart(false);
        add(form);

        String originalItem = itemModel.getObject();

        final TextField<String> name = new TextField<String>("name", itemModel);
        name.setLabel(new ResourceModel("Name"));
        name.add(new RequiredFormFieldBehavior());
        form.add(name).add(new SimpleFormComponentLabel("nameLabel", name));

        // excludes other openAnswer label properties
        Map<String, Boolean> visibleStates = new HashMap<String, Boolean>();
        visibleStates.put("label", false);
        visibleStates.put("unitLabel", false);
        for (String item : openAnswerSuggestion.getSuggestionItems()) {
            visibleStates.put(item, StringUtils.equals(item, originalItem));
        }

        form.add(new LabelsPanel("labels", localePropertiesModel, model, feedbackPanel, feedbackWindow, null,
                visibleStates));

        form.add(new SaveCancelPanel("saveCancel", form) {
            @Override
            protected void onSave(AjaxRequestTarget target, Form<?> form1) {
                if (form.hasError())
                    return;
                SuggestionItemWindow.this.onSave(target, name.getModelObject());
                modalWindow.close(target);
            }

            @Override
            protected void onCancel(AjaxRequestTarget target, Form<?> form1) {
                SuggestionItemWindow.this.onCancel(target);
                modalWindow.close(target);
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                feedbackWindow.setContent(feedbackPanel);
                feedbackWindow.show(target);
            }
        });
    }

    public abstract void onSave(AjaxRequestTarget target, String newItem);

    public abstract void onCancel(AjaxRequestTarget target);

}