/**
* 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.sign.up;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.validation.validator.StringValidator;
import org.odlabs.wiquery.core.javascript.JsUtils;
import de.alpharogroup.auth.models.BaseUsernameSignUpModel;
import de.alpharogroup.wicket.behaviors.BuildableChainableStatement;
import de.alpharogroup.wicket.behaviors.JqueryStatementsBehavior;
import de.alpharogroup.wicket.components.examples.basepage.ApplicationBasePanel;
import de.alpharogroup.wicket.components.labeled.textfield.LabeledEmailTextFieldPanel;
import de.alpharogroup.wicket.components.labeled.textfield.LabeledPasswordTextFieldPanel;
import de.alpharogroup.wicket.components.labeled.textfield.LabeledTextFieldPanel;
import de.alpharogroup.wicket.components.sign.in.SigninPanel;
import de.alpharogroup.wicket.components.sign.up.SignupFormPanel;
import de.alpharogroup.wicket.components.sign.up.SignupPanel;
import lombok.Getter;
public class ApplicationSignupPanel extends ApplicationBasePanel<BaseUsernameSignUpModel>
{
/**
* The serialVersionUID
*/
private static final long serialVersionUID = 1L;
private final int labelSize = 4;
private final int inputSize = 8;
@Getter
private SignupFormPanel signupFormPanel;
public ApplicationSignupPanel(final String id, final IModel<BaseUsernameSignUpModel> model)
{
super(id, Args.notNull(model, "model"));
add(this.signupFormPanel = newSignupFormPanel("signupFormPanel", model));
}
protected SignupFormPanel newSignupFormPanel(final String id,
final IModel<BaseUsernameSignUpModel> model)
{
final SignupFormPanel signupFormPanel = new SignupFormPanel("signupFormPanel", model)
{
/**
* The serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Override
protected Button newButton(final String id)
{
final Button button = super.newButton(id);
button
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"form-group\"></div>")).build()))
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"col-sm-offset-"
+ ApplicationSignupPanel.this.labelSize + " col-sm-"
+ ApplicationSignupPanel.this.inputSize + "\"></div>"))
.build()));
button.add(new AttributeAppender("class", " btn btn-default"));
return button;
}
@Override
protected Form<?> newForm(final String id,
final IModel<? extends BaseUsernameSignUpModel> formModel)
{
final Form<?> form = super.newForm(id, formModel);
form.add(new AttributeAppender("class",
" form-horizontal col-sm" + (ApplicationSignupPanel.this.labelSize
- ApplicationSignupPanel.this.inputSize)));
return form;
}
@Override
protected SignupPanel<BaseUsernameSignUpModel> newSignupPanel(final String id,
final IModel<BaseUsernameSignUpModel> signupModel)
{
final SignupPanel<BaseUsernameSignUpModel> signupPanel = new SignupPanel<BaseUsernameSignUpModel>(
id, signupModel)
{
/**
* The serialVersionUID
*/
private static final long serialVersionUID = 1L;
@Override
protected LabeledPasswordTextFieldPanel<String, BaseUsernameSignUpModel> newRepeatPasswordTextField(
final String id, final IModel<BaseUsernameSignUpModel> repeatPasswordModel)
{
final LabeledPasswordTextFieldPanel<String, BaseUsernameSignUpModel> pwTextField = super.newRepeatPasswordTextField(
id, repeatPasswordModel);
pwTextField.add(new AttributeAppender("class", " form-group"));
pwTextField.getPasswordTextField()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"col-sm-"
+ ApplicationSignupPanel.this.inputSize + "\"></div>"))
.build()))
.add(new AttributeAppender("class", " form-control"));
pwTextField.getLabelComponent().add(new AttributeAppender("class",
" control-label col-sm-" + ApplicationSignupPanel.this.labelSize));
return pwTextField;
}
@Override
protected SigninPanel<BaseUsernameSignUpModel> newSigninPanel(final String id,
final IModel<BaseUsernameSignUpModel> signinPanelmodel)
{
final SigninPanel<BaseUsernameSignUpModel> signinPanel = new SigninPanel<BaseUsernameSignUpModel>(
id, signinPanelmodel)
{
/**
* The serialVersionUID
*/
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
protected Component newEmailTextField(final String id,
final IModel<BaseUsernameSignUpModel> emailModel)
{
final LabeledEmailTextFieldPanel<String, BaseUsernameSignUpModel> emailTextField = (LabeledEmailTextFieldPanel<String, BaseUsernameSignUpModel>)super.newEmailTextField(
id, emailModel);
emailTextField.add(new AttributeAppender("class", " form-group"));
emailTextField.getEmailTextField()
.add(new AttributeAppender("type", "email"))
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"col-sm-"
+ ApplicationSignupPanel.this.inputSize
+ "\"></div>"))
.build()))
.add(new AttributeAppender("class", " form-control"));
emailTextField.getLabelComponent()
.add(new AttributeAppender("class", " control-label col-sm-"
+ ApplicationSignupPanel.this.labelSize));
return emailTextField;
}
@Override
protected LabeledPasswordTextFieldPanel<String, BaseUsernameSignUpModel> newPasswordTextField(
final String id,
final IModel<BaseUsernameSignUpModel> passwordModel)
{
final LabeledPasswordTextFieldPanel<String, BaseUsernameSignUpModel> pwTextField = super.newPasswordTextField(
id, passwordModel);
pwTextField.add(new AttributeAppender("class", " form-group"));
pwTextField.getPasswordTextField()
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"col-sm-"
+ ApplicationSignupPanel.this.inputSize
+ "\"></div>"))
.build()))
.add(new AttributeAppender("class", " form-control"));
pwTextField.getLabelComponent()
.add(new AttributeAppender("class", " control-label col-sm-"
+ ApplicationSignupPanel.this.labelSize));
return pwTextField;
}
};
return signinPanel;
}
@SuppressWarnings("unchecked")
@Override
protected Component newUsernameTextField(final String id,
final IModel<BaseUsernameSignUpModel> usernameModel)
{
final LabeledTextFieldPanel<String, BaseUsernameSignUpModel> nameTextField = (LabeledTextFieldPanel<String, BaseUsernameSignUpModel>)super.newUsernameTextField(
id, usernameModel);
nameTextField.add(new AttributeAppender("class", " form-group"));
nameTextField.getTextField().add(StringValidator.lengthBetween(3, 20))
.add(new JqueryStatementsBehavior()
.add(new BuildableChainableStatement.Builder().label("wrap")
.args(JsUtils.quotes("<div class=\"col-sm-"
+ ApplicationSignupPanel.this.inputSize + "\"></div>"))
.build()))
.add(new AttributeAppender("class", " form-control"));
nameTextField.getLabelComponent().add(new AttributeAppender("class",
" control-label col-sm-" + ApplicationSignupPanel.this.labelSize));
nameTextField.getLabelComponent().add(new AttributeAppender("class",
" control-label col-sm-" + ApplicationSignupPanel.this.labelSize));
return nameTextField;
}
};
return signupPanel;
}
@Override
protected void onSignup(final AjaxRequestTarget target, final Form<?> form)
{
ApplicationSignupPanel.this.onSignup(target, form);
}
};
return signupFormPanel;
}
/**
* Callback method that provide the action on sign up.
*
* @param target
* the target
* @param form
* the form
*/
protected void onSignup(final AjaxRequestTarget target, final Form<?> form)
{
target.add(getFeedback());
final String email = getModelObject().getEmail();
final String username = getModelObject().getUsername();
final String password = getModelObject().getPassword();
final String repeatPassword = getModelObject().getRepeatPassword();
if (password != null && !password.equals(repeatPassword))
{
error("Password is not same as repeated password");
}
if (username != null)
info("Email: " + email + ":Username:" + username + ":Password:" + password
+ ":RepeatPassword:" + repeatPassword);
}
}