/**
* Copyright (C) 2010 Asterios Raptis
*
* 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 de.alpharogroup.wicket.components.examples.labeled;
import java.util.Date;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.yui.calendar.DateTimeField;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.odlabs.wiquery.core.javascript.JsUtils;
import de.alpharogroup.test.objects.Gender;
import de.alpharogroup.test.objects.Member;
import de.alpharogroup.wicket.base.BasePanel;
import de.alpharogroup.wicket.behaviors.BuildableChainableStatement;
import de.alpharogroup.wicket.behaviors.JqueryStatementsBehavior;
import de.alpharogroup.wicket.components.examples.area.publicly.PubliclyBasePage;
import de.alpharogroup.wicket.components.examples.fragment.swapping.HomeAddress;
import de.alpharogroup.wicket.components.examples.labeled.address.AddressPanel;
import de.alpharogroup.wicket.components.labeled.checkbox.LabeledCheckboxPanel;
import de.alpharogroup.wicket.components.labeled.label.LabeledEnumLabelPanel;
import de.alpharogroup.wicket.components.labeled.label.LabeledLabelPanel;
import de.alpharogroup.wicket.components.labeled.textarea.LabeledTextAreaPanel;
import de.alpharogroup.wicket.components.labeled.textfield.LabeledDateTextFieldPanel;
import de.alpharogroup.wicket.components.labeled.textfield.LabeledDateTimeFieldPanel;
import de.alpharogroup.wicket.components.labeled.textfield.LabeledTextFieldPanel;
import lombok.Getter;
public class LabeledComponentsPanel extends BasePanel<Object>
{
private static final long serialVersionUID = 1L;
public static final String COL_SM_1 = "col-sm-1";
public static final String COL_SM_2 = "col-sm-2";
public static final String COL_SM_3 = "col-sm-3";
public static final String COL_SM_4 = "col-sm-4";
private FeedbackPanel feedbackPanel;
@Getter
AddressPanel addressPanel;
final IModel<HomeAddress> addressModel;
public LabeledComponentsPanel(final String id)
{
super(id);
setOutputMarkupId(true);
final Member person = Member.buildMember().build();
person.setGender(Gender.UNDEFINED);
person.setName("foo");
person.setAbout("");
person.setMarried(false);
person.setDateofbirth(new Date());
person.setDateofMarriage(new Date());
final CompoundPropertyModel<Member> cpm = new CompoundPropertyModel<>(person);
final Form<Member> form = new Form<>("form", cpm);
add(form);
final LabeledEnumLabelPanel<Member> genderLabel = newLabeledEnumLabelPanel("gender", cpm,
Model.of("Gender:"));
form.add(genderLabel);
final LabeledLabelPanel<Member> nameLabel = newLabeledLabelPanel("name", cpm,
Model.of("Name:"));
form.add(nameLabel);
final LabeledTextFieldPanel<String, Member> nameTextField = newLabeledTextFieldPanel(
"nickname", cpm, Model.of("Input your nickname:"));
form.add(nameTextField);
final LabeledTextAreaPanel<String, Member> about = newLabeledTextAreaPanel("about", cpm,
Model.of("About:"));
form.add(about);
final LabeledCheckboxPanel<String, Member> married = newLabeledCheckboxPanel("married", cpm,
Model.of("Married:"));
form.add(married);
final LabeledDateTextFieldPanel<String, Member> dateofbirth = newLabeledDateTextFieldPanel(
"dateofbirth", cpm, Model.of("Date of birth:"));
form.add(dateofbirth);
final LabeledDateTimeFieldPanel<String, Member> dateofMarriage = newLabeledDateTimeFieldPanel(
"dateofMarriage", cpm, Model.of("Date of marriage:"));
form.add(dateofMarriage);
this.addressModel = Model
.of(HomeAddress.builder().street("").localNumber("").code("").city("").build());
form.add(this.addressPanel = newAddressPanel("addressPanel", this.addressModel));
// Create submit button for the form
final AjaxButton submitButton = new AjaxButton("submitButton", form)
{
/**
* The serialVersionUID.
*/
private static final long serialVersionUID = 1L;
@Override
public void onSubmit(final AjaxRequestTarget target, final Form<?> form)
{
info("Member:" + person.toString());
info(":::Address::" + LabeledComponentsPanel.this.addressModel.toString());
target.add(getAddressPanel());
target.add(getFeedback());
}
};
form.add(submitButton);
add(this.feedbackPanel = new FeedbackPanel("feedbackpanel"));
this.feedbackPanel.setOutputMarkupId(true);
}
protected Component getFeedback()
{
final PubliclyBasePage<?> basePage = (PubliclyBasePage<?>)getPage();
return basePage.getFeedback();
}
protected AddressPanel newAddressPanel(final String id, final IModel<HomeAddress> model)
{
final AddressPanel addressPanel = new AddressPanel(id, model);
addressPanel.add(new AttributeAppender("class", ""));
addressPanel.getStreetNumberPanel().getTwoFormComponent()
.add(new AttributeAppender("class", " form-group row"));
addressPanel.getStreetNumberPanel().getTwoFormComponent().getLeftFormComponent()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_3 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
addressPanel.getStreetNumberPanel().getTwoFormComponent().getRightFormComponent()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_1 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
addressPanel.getStreetNumberPanel().getLabelComponent()
.add(new AttributeAppender("class", " control-label " + COL_SM_2));
addressPanel.getZipcodeCityPanel().getTwoFormComponent()
.add(new AttributeAppender("class", " form-group row "));
addressPanel.getZipcodeCityPanel().getTwoFormComponent().getLeftFormComponent()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_1 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
addressPanel.getZipcodeCityPanel().getTwoFormComponent().getRightFormComponent()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_3 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
addressPanel.getZipcodeCityPanel().getLabelComponent()
.add(new AttributeAppender("class", " control-label " + COL_SM_2));
return addressPanel;
}
protected LabeledCheckboxPanel<String, Member> newLabeledCheckboxPanel(final String id,
final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledCheckboxPanel<String, Member> married = new LabeledCheckboxPanel<>(id, model,
labelModel);
married.add(new AttributeAppender("class", " form-group"));
married.getCheckBox()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new JqueryStatementsBehavior().add(new BuildableChainableStatement.Builder()
.label("wrap").args(JsUtils.quotes("<div class=\"checkbox\"></div>")).build()))
.add(new JqueryStatementsBehavior().add(new BuildableChainableStatement.Builder()
.label("wrap").args(JsUtils.quotes("<label></label>")).build()))
.add(new AttributeAppender("class", " checkbox"));
married.getLabelComponent()
.add(new AttributeAppender("class", " control-label " + COL_SM_2));
return married;
}
protected LabeledDateTextFieldPanel<String, Member> newLabeledDateTextFieldPanel(
final String id, final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledDateTextFieldPanel<String, Member> dateofbirth = new LabeledDateTextFieldPanel<>(
id, model, labelModel);
dateofbirth.add(new AttributeAppender("class", " form-group"));
dateofbirth.getDateTextField()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
dateofbirth.getLabelComponent()
.add(new AttributeAppender("class", " control-label " + COL_SM_2));
return dateofbirth;
}
protected LabeledDateTimeFieldPanel<String, Member> newLabeledDateTimeFieldPanel(
final String id, final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledDateTimeFieldPanel<String, Member> dateofMarriage = new LabeledDateTimeFieldPanel<String, Member>(
id, model, labelModel)
{
private static final long serialVersionUID = 1L;
@Override
protected DateTimeField newDateTimeField(final String id, final IModel<Member> model)
{
final PropertyModel<Date> textFieldModel = new PropertyModel<>(model.getObject(),
getId());
final DateTimeField dateTextField = new DateTimeField(id, textFieldModel);
return dateTextField;
}
};
dateofMarriage.add(new AttributeAppender("class", " form-group"));
dateofMarriage.getDateTimeField()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control no-border"));
dateofMarriage.getLabelComponent()
.add(new AttributeAppender("class", " control-label " + COL_SM_2));
return dateofMarriage;
}
protected LabeledEnumLabelPanel<Member> newLabeledEnumLabelPanel(final String id,
final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledEnumLabelPanel<Member> enumPanel = new LabeledEnumLabelPanel<>(id, model,
labelModel);
enumPanel.add(new AttributeAppender("class", " form-group"));
enumPanel.getEnumLabel()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control no-border"));
enumPanel.getLabel().add(new AttributeAppender("class", " control-label " + COL_SM_2));
return enumPanel;
}
protected LabeledLabelPanel<Member> newLabeledLabelPanel(final String id,
final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledLabelPanel<Member> nameLabel = new LabeledLabelPanel<>(id, model, labelModel);
nameLabel.add(new AttributeAppender("class", " form-group"));
nameLabel.getViewableLabel()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control no-border"));
nameLabel.getLabel().add(new AttributeAppender("class", " control-label " + COL_SM_2));
return nameLabel;
}
protected LabeledTextAreaPanel<String, Member> newLabeledTextAreaPanel(final String id,
final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledTextAreaPanel<String, Member> about = new LabeledTextAreaPanel<>(id, model,
labelModel);
about.add(new AttributeAppender("class", " form-group"));
about.getTextArea()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
about.getLabelComponent().add(new AttributeAppender("class", " control-label " + COL_SM_2));
return about;
}
protected LabeledTextFieldPanel<String, Member> newLabeledTextFieldPanel(final String id,
final IModel<Member> model, final IModel<String> labelModel)
{
final LabeledTextFieldPanel<String, Member> nameTextField = new LabeledTextFieldPanel<>(id,
model, labelModel);
nameTextField.add(new AttributeAppender("class", " form-group"));
nameTextField.getTextField()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"" + COL_SM_4 + "\"></div>")).build()))
.add(new AttributeAppender("class", " form-control"));
nameTextField.getLabelComponent()
.add(new AttributeAppender("class", " control-label " + COL_SM_2));
return nameTextField;
}
}