/*
* Copyright (c) 2011, grossmann, Nikolaus Moll
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the jo-widgets.org nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.jowidgets.examples.common.demo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.jowidgets.api.toolkit.Toolkit;
import org.jowidgets.api.widgets.IComboBox;
import org.jowidgets.api.widgets.IInputComponent;
import org.jowidgets.api.widgets.IInputComponentValidationLabel;
import org.jowidgets.api.widgets.IInputControl;
import org.jowidgets.api.widgets.IInputField;
import org.jowidgets.api.widgets.blueprint.ICollectionInputFieldBluePrint;
import org.jowidgets.api.widgets.blueprint.IComboBoxSelectionBluePrint;
import org.jowidgets.api.widgets.blueprint.IInputComponentValidationLabelBluePrint;
import org.jowidgets.api.widgets.blueprint.IInputFieldBluePrint;
import org.jowidgets.api.widgets.blueprint.ITextLabelBluePrint;
import org.jowidgets.api.widgets.blueprint.factory.IBluePrintFactory;
import org.jowidgets.api.widgets.content.IInputContentContainer;
import org.jowidgets.api.widgets.content.IInputContentCreator;
import org.jowidgets.common.widgets.controller.IInputListener;
import org.jowidgets.common.widgets.controller.IKeyEvent;
import org.jowidgets.common.widgets.controller.IMouseButtonEvent;
import org.jowidgets.common.widgets.controller.IMouseEvent;
import org.jowidgets.common.widgets.layout.MigLayoutDescriptor;
import org.jowidgets.examples.common.data.Countries;
import org.jowidgets.examples.common.data.GermanCities;
import org.jowidgets.examples.common.data.Languages;
import org.jowidgets.tools.controller.KeyAdapter;
import org.jowidgets.tools.controller.MouseAdapter;
import org.jowidgets.validation.IValidationResult;
import org.jowidgets.validation.IValidator;
import org.jowidgets.validation.ValidationResult;
import org.jowidgets.validation.tools.MandatoryValidator;
public class DemoForm1ContentCreator implements IInputContentCreator<List<String>> {
private IComboBox<String> gender;
private IInputComponent<String> lastname;
private IInputComponent<String> firstName;
private IInputField<Date> dateOfBirth;
private IInputComponent<String> street;
private IInputComponent<String> city;
private IInputField<Integer> postalCode;
private IComboBox<String> country;
private IInputControl<Collection<String>> languages;
private IInputComponent<String> phoneNumber;
private IInputComponent<String> mail;
private IInputComponentValidationLabel genderValidationWidget;
private IInputComponentValidationLabel firstnameValidationWidget;
private IInputComponentValidationLabel lastnameValidationWidget;
private IInputComponentValidationLabel dateOfBirthValidationWidget;
private IInputComponentValidationLabel streetValidationWidget;
private IInputComponentValidationLabel postalCodeValidationWidget;
private IInputComponentValidationLabel cityValidationWidget;
private IInputComponentValidationLabel countryValidationWidget;
private IInputComponentValidationLabel languagesValidationWidget;
private IInputComponentValidationLabel phoneValidationWidget;
private IInputComponentValidationLabel mailValidationWidget;
@Override
public void createContent(final IInputContentContainer container) {
final IBluePrintFactory bpF = Toolkit.getBluePrintFactory();
container.setLayout(new MigLayoutDescriptor("[][grow][20::]", "[]"));
final String inputWidgetConstraints = "w 270:270:, grow, sg fg";
final IValidator<String> moreThanOneWordValidator = new IValidator<String>() {
@Override
public IValidationResult validate(final String validationInput) {
if (validationInput != null && validationInput.trim().length() > 0 && validationInput.trim().contains(" ")) {
return ValidationResult.warning("Input contains more than one word");
}
return ValidationResult.ok();
};
};
final IValidator<String> maxLengthValidator = new IValidator<String>() {
@Override
public IValidationResult validate(final String validationInput) {
if (validationInput != null && validationInput.length() > 50) {
return ValidationResult.error("Input must not have more than 50 characters");
}
return ValidationResult.ok();
};
};
final IValidator<String> mandatoryValidator = new MandatoryValidator<String>("Must not be null");
final ITextLabelBluePrint textLabelBp = bpF.textLabel().alignRight();
final IInputComponentValidationLabelBluePrint validationLabelBp = bpF.inputComponentValidationLabel();
validationLabelBp.setShowValidationMessage(false);
final IInputFieldBluePrint<String> stringFieldBp = bpF.inputFieldString().setMaxLength(51);
stringFieldBp.setValidator(maxLengthValidator);
container.add(textLabelBp.setText("Gender"), "right, sg lg");
gender = container.add("Gender", bpF.comboBoxSelection("Male", "Female", ""), inputWidgetConstraints);
genderValidationWidget = container.add(validationLabelBp.setInputComponent(gender), "wrap");
gender.addInputListener(new IInputListener() {
@Override
public void inputChanged() {
//CHECKSTYLE:OFF
System.out.println(gender.getValue());
//CHECKSTYLE:ON
}
});
container.add(textLabelBp.setText("Firstname*"), "right, sg lg");
firstName = container.add("Firstname", stringFieldBp, inputWidgetConstraints);
firstName.addValidator(mandatoryValidator);
firstnameValidationWidget = container.add(validationLabelBp.setInputComponent(firstName), "wrap");
firstName.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(final IKeyEvent event) {
//CHECKSTYLE:OFF
System.out.println(event);
//CHECKSTYLE:ON
}
});
container.add(textLabelBp.setText("Lastname*"), "right, sg lg");
lastname = container.add("Lastname", stringFieldBp, inputWidgetConstraints);
lastname.addValidator(mandatoryValidator);
lastnameValidationWidget = container.add(validationLabelBp.setInputComponent(lastname), "wrap");
lastname.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(final IMouseButtonEvent mouseEvent) {
//CHECKSTYLE:OFF
System.out.println("mousePressed " + mouseEvent);
//CHECKSTYLE:ON
}
@Override
public void mouseReleased(final IMouseButtonEvent mouseEvent) {
//CHECKSTYLE:OFF
System.out.println("mouseReleased " + mouseEvent);
//CHECKSTYLE:ON
}
@Override
public void mouseDoubleClicked(final IMouseButtonEvent mouseEvent) {
//CHECKSTYLE:OFF
System.out.println("mouseDoubleClicked " + mouseEvent);
//CHECKSTYLE:ON
}
@Override
public void mouseEnter(final IMouseEvent mouseEvent) {
//CHECKSTYLE:OFF
System.out.println("mouseEnter " + mouseEvent);
//CHECKSTYLE:ON
}
@Override
public void mouseExit(final IMouseEvent mouseEvent) {
//CHECKSTYLE:OFF
System.out.println("mouseExit " + mouseEvent);
//CHECKSTYLE:ON
}
});
container.add(textLabelBp.setText("Day of dirth*"), "right, sg lg");
dateOfBirth = container.add("Day of dirth", bpF.inputFieldDate(), inputWidgetConstraints);
dateOfBirth.addValidator(new MandatoryValidator<Date>("Must not be null"));
dateOfBirthValidationWidget = container.add(validationLabelBp.setInputComponent(dateOfBirth), "wrap");
container.add(textLabelBp.setText("Street*"), "right, sg lg");
street = container.add("Street", stringFieldBp, inputWidgetConstraints);
street.addValidator(mandatoryValidator);
streetValidationWidget = container.add(validationLabelBp.setInputComponent(street), "wrap");
container.add(textLabelBp.setText("Postal code*"), "right, sg lg");
postalCode = container.add("Postal code", bpF.inputFieldIntegerNumber().setMaxLength(5), inputWidgetConstraints);
postalCode.addValidator(new MandatoryValidator<Integer>("Must not be null"));
postalCodeValidationWidget = container.add(validationLabelBp.setInputComponent(postalCode), "wrap");
postalCode.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(final IKeyEvent event) {
//CHECKSTYLE:OFF
System.out.println("Caret pos: " + postalCode.getCaretPosition());
//CHECKSTYLE:ON
}
});
postalCode.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(final IMouseButtonEvent event) {
//CHECKSTYLE:OFF
System.out.println("Caret pos: " + postalCode.getCaretPosition());
//CHECKSTYLE:ON
}
});
container.add(textLabelBp.setText("City*"), "right, sg lg");
city = container.add("City", bpF.comboBox(GermanCities.CITIES), inputWidgetConstraints);
city.addValidator(mandatoryValidator);
cityValidationWidget = container.add(validationLabelBp.setInputComponent(city), "wrap");
container.add(textLabelBp.setText("Country*"), "right, sg lg");
//final IComboBoxBluePrint<String> countryBp = bpF.comboBox(Countries.COUNTRIES);
final IComboBoxSelectionBluePrint<String> countryBp = bpF.comboBoxSelection(Countries.COUNTRIES);
countryBp.setValidator(maxLengthValidator);
//countryBp.setMaxLength(Integer.valueOf(51));
country = container.add("Country", countryBp, inputWidgetConstraints);
country.addValidator(mandatoryValidator);
countryValidationWidget = container.add(validationLabelBp.setInputComponent(country), "wrap");
container.add(textLabelBp.setText("Languages"), "right, sg lg");
final ICollectionInputFieldBluePrint<String> collectionInputFieldBp = bpF.collectionInputField(Toolkit.getConverterProvider()
.string());
collectionInputFieldBp.setCollectionInputDialogSetup(bpF.collectionInputDialog(bpF.comboBoxSelection(Languages.LANGUAGES)
.setLenient(true)));
languages = container.add("Languages", collectionInputFieldBp, inputWidgetConstraints);
languagesValidationWidget = container.add(validationLabelBp.setInputComponent(languages), "wrap");
container.add(textLabelBp.setText("Phone number"), "right, sg lg");
phoneNumber = container.add("Phone number", stringFieldBp, inputWidgetConstraints);
phoneValidationWidget = container.add(validationLabelBp.setInputComponent(phoneNumber), "wrap");
container.add(textLabelBp.setText("Email"), "right, sg lg");
mail = container.add("Email", stringFieldBp, inputWidgetConstraints);
mail.addValidator(moreThanOneWordValidator);
mailValidationWidget = container.add(validationLabelBp.setInputComponent(mail), "wrap");
resetValidation();
}
@Override
public void setValue(final List<String> value) {
if (value != null) {
final ArrayList<String> values = new ArrayList<String>(value);
try {
gender.setValue(values.get(0));
}
catch (final Exception e1) {
//DO NOTHING
}
firstName.setValue(values.get(1));
lastname.setValue(value.get(2));
street.setValue(values.get(3));
try {
postalCode.setValue(Integer.valueOf(values.get(4)));
}
catch (final NumberFormatException e) {
//DO NOTHING
}
city.setValue(values.get(5));
country.setValue(values.get(6));
phoneNumber.setValue(values.get(7));
mail.setValue(values.get(8));
}
else {
gender.setValue("");
lastname.setValue(null);
firstName.setValue(null);
dateOfBirth.setValue(null);
street.setValue(null);
postalCode.setValue(null);
city.setValue(null);
country.setValue(null);
phoneNumber.setValue(null);
mail.setValue(null);
languages.setValue(new LinkedList<String>());
}
resetValidation();
}
@Override
public List<String> getValue() {
final List<String> result = new LinkedList<String>();
result.add(getStringValue(gender.getValue()));
result.add(getStringValue(firstName.getValue()));
result.add(getStringValue(lastname.getValue()));
result.add(getStringValue(street.getValue()));
result.add(getStringValue(postalCode.getValue()));
result.add(getStringValue(city.getValue()));
result.add(getStringValue(country.getValue()));
result.add(getStringValue(phoneNumber.getValue()));
result.add(getStringValue(mail.getValue()));
return result;
}
private void resetValidation() {
genderValidationWidget.resetValidation();
firstnameValidationWidget.resetValidation();
lastnameValidationWidget.resetValidation();
dateOfBirthValidationWidget.resetValidation();
streetValidationWidget.resetValidation();
postalCodeValidationWidget.resetValidation();
cityValidationWidget.resetValidation();
countryValidationWidget.resetValidation();
phoneValidationWidget.resetValidation();
mailValidationWidget.resetValidation();
languagesValidationWidget.resetValidation();
}
private String getStringValue(final Object object) {
if (object == null) {
return "";
}
else {
return object.toString();
}
}
}