hsa.awp.admingui.edit.TermPanel.java Source code

Java tutorial

Introduction

Here is the source code for hsa.awp.admingui.edit.TermPanel.java

Source

/*
 * Copyright (c) 2010-2012 Matthias Klass, Johannes Leimer,
 *               Rico Lieback, Sebastian Gabriel, Lothar Gesslein,
 *               Alexander Rampp, Kai Weidner
 *
 * This file is part of the Physalix Enrollment System
 *
 * Foobar is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Foobar is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
 */

package hsa.awp.admingui.edit;

import hsa.awp.admingui.OnePanelPage;
import hsa.awp.admingui.controller.IAdminGuiController;
import hsa.awp.admingui.util.AbstractDeleteLink;
import hsa.awp.common.exception.DataAccessException;
import hsa.awp.event.model.Term;
import hsa.awp.event.model.TermType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
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.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
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.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Panel for creating a {@link hsa.awp.event.model.Category} and viewing all persisted categories.
 *
 * @author klassm & Rico
 */
public class TermPanel extends Panel {
    /**
     * unique serialization id.
     */
    private static final long serialVersionUID = 5086059009742235583L;

    /**
     * name of the Category.
     */
    private IModel<TermType> typeModel = new Model<TermType>();

    /**
     * name of the Category.
     */
    private IModel<String> descModel = new Model<String>();
    /**
     * Performing feedback.
     */
    private FeedbackPanel feedbackPanel = new FeedbackPanel("termPanel.feedback");

    /**
     * Controller which feeds the class with data.
     */
    @SpringBean(name = "admingui.controller")
    private transient IAdminGuiController controller;

    /**
     * Creates a new {@link hsa.awp.admingui.edit.TermPanel}.
     *
     * @param id wicket id.
     */
    public TermPanel(String id) {

        super(id);
        feedbackPanel.setOutputMarkupId(true);

        Form<String> form = new Form<String>("termPanel.form");

        final WebMarkupContainer availableTerms = new WebMarkupContainer("availableTerms");

        add(availableTerms);
        availableTerms.setOutputMarkupId(true);

        Comparator<Term> termComparator = new Comparator<Term>() {
            @Override
            public int compare(Term o1, Term o2) {
                return o1.getTermDesc().compareToIgnoreCase(o2.getTermDesc());
            }
        };

        List<Term> terms = new ArrayList<Term>(controller.getTermsByMandator(getSession()));

        Collections.sort(terms, termComparator);

        availableTerms.add(new ListView<Term>("knownTerms", terms) {
            /**
             * unique serialization id.
             */
            private static final long serialVersionUID = 7541183670558921101L;

            @Override
            protected void populateItem(ListItem<Term> item) {

                item.add(new Label("name", item.getModelObject().toString()));
                item.add(new AbstractDeleteLink<Term>("deleteLink", item.getModelObject()) {
                    @Override
                    public void modifyItem(Term term) {
                        controller.deleteTerm(term);
                        setResponsePage(new OnePanelPage(new TermPanel(OnePanelPage.getPanelIdOne())));
                    }
                });
            }
        });

        form.add(new TextField<String>("termPanel.desc", descModel, String.class).setRequired(true));
        form.add(new AjaxButton("termPanel.button") {
            /**
             * unique serialization id.
             */
            private static final long serialVersionUID = 1L;

            @Override
            protected void onError(final AjaxRequestTarget target, final Form<?> form) {

                target.addComponent(feedbackPanel);
            }

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

                try {

                    controller.createTerm(descModel.getObject(), getSession());

                    // TODO Sprache:
                    feedbackPanel.info("Eingaben bernommen.");
                    this.setVisible(false);

                    target.addComponent(feedbackPanel);
                    target.addComponent(form);
                    target.addComponent(availableTerms);

                    setResponsePage(new OnePanelPage(new TermPanel(OnePanelPage.getPanelIdOne())));
                } catch (DataAccessException e) {
                    // TODO Sprache:
                    feedbackPanel.error("'" + typeModel.getObject() + "' already exists");
                }
            }
        });

        add(form);
        form.add(feedbackPanel);
    }
}