/*
* Copyright 2010 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 com.springsource.greenhouse.signup;
import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.joda.time.LocalDate;
import org.springframework.social.connect.UserProfile;
import com.springsource.greenhouse.account.AccountRepository;
import com.springsource.greenhouse.account.Gender;
import com.springsource.greenhouse.account.Person;
import com.springsource.greenhouse.validation.Confirm;
/**
* The model for the new member signup form.
* @author Keith Donald
*/
@Confirm(field="email", message="does not match confirmation email")
@JsonIgnoreProperties(ignoreUnknown=true)
public class SignupForm {
@NotEmpty
@JsonProperty("first-name")
private String firstName;
@NotEmpty
@JsonProperty("last-name")
private String lastName;
@NotEmpty
@Email
@JsonProperty("email")
private String email;
@JsonProperty("confirm-email")
private String confirmEmail;
@JsonProperty("gender")
@JsonDeserialize(using=SignupFormDeserializers.GenderDeserializer.class)
private Gender gender;
@NotNull
private Integer month;
@NotNull
private Integer day;
@NotNull
private Integer year;
@Size(min=6, message="must be at least 6 characters")
@JsonProperty("password")
private String password;
/**
* The person's first name.
*/
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* The person's last name.
*/
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* The person's email, must be unique.
*/
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
/**
* A confirmation of the person's email. Must match.
*/
public String getConfirmEmail() {
return confirmEmail;
}
public void setConfirmEmail(String confirmEmail) {
this.confirmEmail = confirmEmail;
}
/**
* The member's password.
*/
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* The member's gender.
*/
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
/**
* The month them member as born.
*/
public Integer getMonth() {
return month;
}
public void setMonth(Integer month) {
this.month = month;
}
/**
* The day them member was born.
*/
public Integer getDay() {
return day;
}
public void setDay(Integer day) {
this.day = day;
}
/**
* The year the member was born.
*/
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
@JsonProperty("birthdate")
@JsonDeserialize(using=SignupFormDeserializers.BirthdateDeserializer.class)
protected void setBirthdate(List<Integer> birthdateFields) {
this.month = birthdateFields.get(0);
this.day = birthdateFields.get(1);
this.year = birthdateFields.get(2);
}
/**
* Creates a Person record from this SignupForm.
* A Person is used as input to {@link AccountRepository} to create a new member Account.
*/
public Person createPerson() {
return new Person(firstName, lastName, email, password, gender, new LocalDate(year, month, day));
}
/**
* Factory method that creates a pre-populated SignupForm from a ServiceProviderUser model obtained from a provider user sign-in attempt.
* @param providerUser the providerUser model
*/
public static SignupForm fromProviderUser(UserProfile providerUser) {
SignupForm form = new SignupForm();
form.setFirstName(providerUser.getFirstName());
form.setLastName(providerUser.getLastName());
form.setEmail(providerUser.getEmail());
form.setConfirmEmail(providerUser.getEmail());
return form;
}
}