Java tutorial
/******************************************************************************* * 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); }