/**
* Copyright 2011 the original author or authors.
*
* 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.bricket.plugin.authentication.web;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.validation.EqualPasswordInputValidator;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.bricket.plugin.authentication.service.AuthenticationService;
import org.bricket.plugin.user.domain.User;
import org.bricket.plugin.user.service.UserService;
import org.bricket.service.BricketServiceException;
import org.bricket.web.BricketConfigAwarePanel;
import brix.jcr.wrapper.BrixNode;
/**
* @author Ingo Renner
* @author Henning Teek
*/
public class SignUpPanel extends BricketConfigAwarePanel<SignUpConfig> {
@SpringBean
private AuthenticationService authenticationService;
@SpringBean
private UserService userService;
private final Model<String> passwordModel = new Model<String>("");
public SignUpPanel(String id, IModel<BrixNode> tileNode) {
super(id, tileNode, new SignUpConfig());
}
@Override
protected void initGui() {
Form<User> form = new Form<User>("form", new CompoundPropertyModel<User>(userService.createDomainObject()));
StringResourceModel lEmail = new StringResourceModel("email.label", SignUpPanel.this, null);
form.add(new Label("email.label", lEmail));
form.add(new TextField<String>("email", String.class).setRequired(true).setLabel(lEmail)
.add(RfcCompliantEmailAddressValidator.getInstance()));
StringResourceModel lPwd = new StringResourceModel("password.label", SignUpPanel.this, null);
form.add(new Label("password.label", lPwd));
PasswordTextField password = new PasswordTextField("password");
password.setModel(passwordModel);
password.setRequired(true).setLabel(lPwd);
form.add(password);
StringResourceModel lPwdrep = new StringResourceModel("passwordrepeat.label", SignUpPanel.this, null);
form.add(new Label("passwordrepeat.label", lPwdrep));
PasswordTextField passwordrepeat = new PasswordTextField("passwordrepeat");
passwordrepeat.setModel(password.getModel());
passwordrepeat.setRequired(true).setLabel(lPwdrep);
form.add(passwordrepeat);
form.add(new EqualPasswordInputValidator(password, passwordrepeat));
StringResourceModel lFname = new StringResourceModel("firstname.label", SignUpPanel.this, null);
form.add(new Label("firstname.label", lFname));
form.add(new TextField<String>("firstname", String.class).setRequired(true).setLabel(lFname));
StringResourceModel lLname = new StringResourceModel("lastname.label", SignUpPanel.this, null);
form.add(new Label("lastname.label", lLname));
form.add(new TextField<String>("lastname", String.class).setRequired(true).setLabel(lLname));
form.add(new CancelAjaxLink("cancel"));
form.add(new AjaxButton("submit") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
try {
String password = passwordModel.getObject();
if (!"".equals(password)) {
((User) form.getDefaultModelObject()).setPassword(password);
}
authenticationService.signupUser((User) form.getModelObject(), getConfig().isSendActivationMail(),
getConfig().getRoles());
getSession().info(new StringResourceModel("feedback.success", SignUpPanel.this, null).getString());
setResponsePage(getApplication().getHomePage());
} catch (BricketServiceException e) {
form.error(new StringResourceModel(e.getKey(), SignUpPanel.this, null).getString());
target.addComponent(getFeedback());
}
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.addComponent(getFeedback());
}
});
add(form);
}
private static final class CancelAjaxLink extends AjaxLink<Void> {
private CancelAjaxLink(String id) {
super(id);
}
@Override
public void onClick(AjaxRequestTarget target) {
setResponsePage(getApplication().getHomePage());
}
}
}