cz.zcu.kiv.eegdatabase.wui.ui.experiments.forms.PersonForm.java Source code

Java tutorial

Introduction

Here is the source code for cz.zcu.kiv.eegdatabase.wui.ui.experiments.forms.PersonForm.java

Source

/*******************************************************************************
 * This file is part of the EEG-database project
 * 
 *   ==========================================
 *  
 *   Copyright (C) 2013 by University of West Bohemia (http://www.zcu.cz/en/)
 *  
 *  ***********************************************************************************************************************
 *  
 *   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.
 *  
 *  ***********************************************************************************************************************
 *  
 *   PersonForm.java, 2013/10/02 00:01 Jakub Rinkes
 ******************************************************************************/
package cz.zcu.kiv.eegdatabase.wui.ui.experiments.forms;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.EmailTextField;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.lang.Classes;
import org.apache.wicket.validation.validator.PatternValidator;
import org.apache.wicket.validation.validator.StringValidator;

import com.googlecode.wicket.jquery.ui.form.datepicker.DatePicker;

import cz.zcu.kiv.eegdatabase.data.pojo.EducationLevel;
import cz.zcu.kiv.eegdatabase.data.pojo.Person;
import cz.zcu.kiv.eegdatabase.logic.Util;
import cz.zcu.kiv.eegdatabase.wui.components.table.TimestampConverter;
import cz.zcu.kiv.eegdatabase.wui.components.utils.ResourceUtils;
import cz.zcu.kiv.eegdatabase.wui.components.utils.StringUtils;
import cz.zcu.kiv.eegdatabase.wui.core.Gender;
import cz.zcu.kiv.eegdatabase.wui.core.Laterality;
import cz.zcu.kiv.eegdatabase.wui.core.educationlevel.EducationLevelFacade;
import cz.zcu.kiv.eegdatabase.wui.core.person.PersonFacade;

public class PersonForm extends Form<Person> {

    private static final long serialVersionUID = 36670720990541049L;

    @SpringBean
    private EducationLevelFacade educationFacade;

    @SpringBean
    private PersonFacade personFacade;

    private FeedbackPanel feedback;

    public PersonForm(String id, final ModalWindow window) {
        super(id, new CompoundPropertyModel<Person>(new Person()));

        add(new Label("addPersonHeader", ResourceUtils.getModel("pageTitle.addPerson")));

        feedback = new FeedbackPanel("feedback");
        feedback.setOutputMarkupId(true);
        add(feedback);

        TextField<String> name = new TextField<String>("givenname");
        name.setLabel(ResourceUtils.getModel("label.name"));
        name.setRequired(true);
        name.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
        add(name);

        TextField<String> surname = new TextField<String>("surname");
        surname.setLabel(ResourceUtils.getModel("label.surname"));
        surname.setRequired(true);
        surname.add(new PatternValidator(StringUtils.REGEX_ONLY_LETTERS));
        add(surname);

        DatePicker date = new DatePicker("dateOfBirth") {

            private static final long serialVersionUID = 1L;

            @Override
            public <C> IConverter<C> getConverter(Class<C> type) {
                return (IConverter<C>) new TimestampConverter();
            }
        };

        date.setLabel(ResourceUtils.getModel("label.dateOfBirth"));
        date.setRequired(true);
        add(date);

        EmailTextField email = new EmailTextField("username");
        email.setLabel(ResourceUtils.getModel("label.email"));
        email.setRequired(true);
        add(email);

        TextField<String> phoneNumber = new TextField<String>("phoneNumber");
        phoneNumber.setLabel(ResourceUtils.getModel("label.phoneNumber"));
        add(phoneNumber);

        RadioChoice<Character> gender = new RadioChoice<Character>("gender", Gender.getShortcutList(),
                new ChoiceRenderer<Character>() {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public Object getDisplayValue(Character object) {
                        Gender enumValue = Gender.getGenderByShortcut(object);
                        return getString(
                                Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                    }

                });
        gender.setSuffix("\n");
        gender.setRequired(true);
        gender.setLabel(ResourceUtils.getModel("label.gender"));
        add(gender);

        TextArea<String> note = new TextArea<String>("note");
        note.setLabel(ResourceUtils.getModel("label.note"));
        note.add(StringValidator.maximumLength(255));
        add(note);

        DropDownChoice<Character> laterality = new DropDownChoice<Character>("laterality",
                Laterality.getShortcutList(), new ChoiceRenderer<Character>() {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public Object getDisplayValue(Character object) {
                        Laterality enumValue = Laterality.getLateralityByShortcut(object);
                        return getString(
                                Classes.simpleName(enumValue.getDeclaringClass()) + '.' + enumValue.name());
                    }

                });

        laterality.setLabel(ResourceUtils.getModel("label.laterality"));
        add(laterality);

        DropDownChoice<EducationLevel> educationLevel = new DropDownChoice<EducationLevel>("educationLevel",
                educationFacade.getAllRecords(), new ChoiceRenderer<EducationLevel>("title", "educationLevelId") {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public Object getDisplayValue(EducationLevel object) {
                        return object.getEducationLevelId() + " " + super.getDisplayValue(object);
                    }

                });

        educationLevel.setLabel(ResourceUtils.getModel("label.educationLevel"));
        add(educationLevel);

        AjaxButton submit = new AjaxButton("submitForm", ResourceUtils.getModel("button.save"), this) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                target.add(feedback);
            }

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                Person user = PersonForm.this.getModelObject();

                boolean isEdit = user.getPersonId() > 0;

                if (validation(user, personFacade, isEdit)) {
                    if (isEdit) {
                        personFacade.update(user);
                    } else {
                        user.setAuthority(Util.ROLE_READER);
                        personFacade.create(user);
                    }
                    window.close(target);
                }
                target.add(feedback);
            }
        };
        add(submit);

        add(new AjaxButton("closeForm", ResourceUtils.getModel("button.close"), this) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                window.close(target);
            }
        }.setDefaultFormProcessing(false));

        setOutputMarkupId(true);
    }

    private boolean validation(Person user, PersonFacade facade, boolean editation) {

        boolean validate = true;

        // if its editation we can't check if email exist
        if (!editation && facade.usernameExists(user.getEmail())) {
            error(ResourceUtils.getString("inUse.email"));
            validate = false;
        }

        if (user.getDateOfBirth().getTime() >= System.currentTimeMillis()) {
            error(ResourceUtils.getString("invalid.dateOfBirth"));
            validate = false;
        }

        if (user.getPhoneNumber() != null && !user.getPhoneNumber().isEmpty()) {
            try {
                if (user.getPhoneNumber().charAt(0) == '+') {
                    Long.parseLong(user.getPhoneNumber().substring(1));
                } else {
                    Long.parseLong(user.getPhoneNumber());
                }

            } catch (NumberFormatException ex) {
                error(ResourceUtils.getString("invalid.phoneNumber"));
                validate = false;
            }

        }

        return validate;
    }
}