org.cipango.ims.hss.web.gba.EditUssPage.java Source code

Java tutorial

Introduction

Here is the source code for org.cipango.ims.hss.web.gba.EditUssPage.java

Source

// ========================================================================
// Copyright 2010 NEXCOM Systems
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.cipango.ims.hss.web.gba;

import java.util.Arrays;
import java.util.Collections;

import org.apache.wicket.Component;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Button;
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.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.collections.MicroMap;
import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
import org.cipango.ims.hss.db.NafGroupDao;
import org.cipango.ims.hss.db.PrivateIdentityDao;
import org.cipango.ims.hss.model.NafGroup;
import org.cipango.ims.hss.model.PrivateIdentity;
import org.cipango.ims.hss.model.uss.Uss;
import org.cipango.ims.hss.web.privateid.ContextPanel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class EditUssPage extends UssPage {

    private static final Logger __log = LoggerFactory.getLogger(EditUssPage.class);

    private Long _key;
    private String _privateIdKey;
    private String _title;

    @SpringBean
    private PrivateIdentityDao _privateIdentityDao;

    @SpringBean
    private NafGroupDao _nafGroupDao;

    @SuppressWarnings("unchecked")
    public EditUssPage(PageParameters pageParameters) {
        super(pageParameters);
        String sKey = pageParameters.getString("id");
        PrivateIdentity privateIdentity = null;
        if (sKey != null)
            _key = Long.decode(sKey);
        else {
            _privateIdKey = pageParameters.getString("privateId");
            privateIdentity = _privateIdentityDao.findById(_privateIdKey);
        }

        Uss uss = null;
        if (_key != null) {
            uss = _dao.findById(_key);
            if (uss == null) {
                error(MapVariableInterpolator.interpolate(getString(getPrefix() + ".error.notFound"),
                        new MicroMap("identity", _key)));
                _key = null;
            } else {
                privateIdentity = uss.getPrivateIdentity();
                _privateIdKey = privateIdentity.getIdentity();
            }
        }

        if (uss == null) {
            uss = new Uss();
        }

        DaoDetachableModel model = new DaoDetachableModel(uss);

        if (isAdding()) {
            _title = MapVariableInterpolator.interpolate(getString(getPrefix() + ".add.title"),
                    new MicroMap("identity", _privateIdKey));
        } else {
            _title = getString(getPrefix() + ".edit.title", model);
        }

        Form form = new Form("form", new CompoundPropertyModel(model));
        add(form);

        form.add(new Label("title", String.valueOf(uss.getId())));
        form.add(new DropDownChoice("nafGroup", new LoadableDetachableModel() {
            @Override
            protected Object load() {
                return _nafGroupDao.getAllGroups();
            }
        }, new ChoiceRenderer<NafGroup>() {
            @Override
            public Object getDisplayValue(NafGroup nafGroup) {
                return nafGroup.getName();
            }

        }));

        DropDownChoice typeChoice = new DropDownChoice("type",
                Arrays.asList(new Integer[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }),
                new ChoiceRenderer<Integer>() {
                    @Override
                    public Object getDisplayValue(Integer type) {
                        return Uss.getTypeAsString(type);
                    }

                });
        form.add(typeChoice);

        typeChoice.setRequired(true);
        typeChoice.add(new AjaxFormComponentUpdatingBehavior("onChange") {

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                final Integer type = (Integer) getPage().get("form:type").getDefaultModelObject();
                DropDownChoice flagSelect = (DropDownChoice) getPage().get("form:flagSelect");
                Component flagInput = getPage().get("form:flagInput");

                Integer flag = getFlag2(flagInput, flagSelect);

                if (Uss.getDefinedFlagList(type) != null) {
                    flagInput.setVisible(false);
                    flagSelect.setChoiceRenderer(new ChoiceRenderer<Integer>() {
                        @Override
                        public Object getDisplayValue(Integer flag) {
                            return Uss.getFlagAsString(type, flag);
                        }

                    });
                    flagSelect.setChoices(Arrays.asList(Uss.getDefinedFlagList(type)));
                    flagSelect.setVisible(true);
                } else {
                    flagInput.setVisible(true);
                    flagInput.setDefaultModelObject(flag);
                    flagSelect.setVisible(false);
                }
                target.addComponent(flagInput);
                target.addComponent(flagSelect);
            }
        });

        final Integer type = uss.getType();

        Component flagInput = new TextField<Integer>("flagInput", new Model<Integer>(uss.getFlag()), Integer.class);
        form.add(flagInput);
        flagInput.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);

        DropDownChoice<Integer> flagSelect = new DropDownChoice<Integer>("flagSelect",
                new Model<Integer>(uss.getFlag()), Collections.EMPTY_LIST);
        form.add(flagSelect);
        flagSelect.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true);

        if (Uss.getDefinedFlagList(type) != null) {
            flagSelect.setChoiceRenderer(new ChoiceRenderer<Integer>() {
                @Override
                public Object getDisplayValue(Integer flag) {
                    return Uss.getFlagAsString(type, flag);
                }

            });
            flagSelect.setChoices(Arrays.asList(Uss.getDefinedFlagList(type)));
            flagInput.setVisible(false);
        } else {
            flagSelect.setVisible(false);
        }

        form.add(new Button("submit") {
            @Override
            public void onSubmit() {
                try {
                    Uss uss = (Uss) getForm().getModelObject();

                    if (_privateIdKey != null) {
                        PrivateIdentity privateIdentity = _privateIdentityDao.findById(_privateIdKey);
                        if (privateIdentity != null)
                            uss.setPrivateIdentity(privateIdentity);
                    }
                    uss.setFlag(getFlag2(getForm().get("flagInput"), getForm().get("flagSelect")));

                    _dao.save(uss);

                    getSession().info(getString("modification.success"));
                    setResponsePage(UssBrowserPage.class,
                            new PageParameters("privateId=" + uss.getPrivateIdentity().getIdentity()));
                } catch (Exception e) {
                    __log.debug("Failed to apply edit", e);
                    getSession().error(getString("uss.error", getForm().getModel()));
                }
            }
        });

        form.add(new Button("cancel") {
            @Override
            public void onSubmit() {
                getSession().info(getString("modification.cancel"));
                setResponsePage(UssBrowserPage.class, new PageParameters("privateId=" + _privateIdKey));
            }
        }.setDefaultFormProcessing(false));

        form.add(new Button("delete") {
            @Override
            public void onSubmit() {
                Uss uss = _dao.findById(_key);
                setResponsePage(UssBrowserPage.class, new PageParameters("privateId=" + _privateIdKey));
                _dao.delete(uss);
                getSession().info(getString(getPrefix() + ".delete.done", new DaoDetachableModel(uss)));

            }
        }.setDefaultFormProcessing(false).setVisible(!isAdding()));

        if (privateIdentity != null) {
            setContextMenu(new ContextPanel(privateIdentity));
        }

    }

    private Integer getFlag2(Component flagInput, Component flagSelect) {
        if (flagInput.isVisible())
            return (Integer) flagInput.getDefaultModelObject();
        return (Integer) flagSelect.getDefaultModelObject();
    }

    private boolean isAdding() {
        return _key == null;
    }

    @Override
    public String getTitle() {
        return _title;
    }
}