/** * 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()); } } }