/* * This file is part of gwap, an open platform for games with a purpose * * Copyright (C) 2013 * Project play4science * Lehr- und Forschungseinheit für Programmier- und Modellierungssprachen * Ludwig-Maximilians-Universität München * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package gwap.model; import gwap.model.action.Action; import gwap.model.resource.Location; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import org.hibernate.validator.Email; import org.hibernate.validator.NotNull; import org.hibernate.validator.Range; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.security.management.UserFirstName; import org.jboss.seam.annotations.security.management.UserLastName; import org.jboss.seam.annotations.security.management.UserPassword; import org.jboss.seam.annotations.security.management.UserPrincipal; import org.jboss.seam.annotations.security.management.UserRoles; @NamedQueries( { @NamedQuery(name = "person.byId", query = "select p from Person p where p.id=:id"), @NamedQuery(name = "person.usernameById", query = "select p.username from Person p where p.id=:id"), @NamedQuery(name = "person.authentication", query = "select p from Person p where lower(p.username)=lower(:username)"), @NamedQuery(name = "person.byUsername", query = "select p from Person p where lower(p.username)=lower(:username)"), @NamedQuery(name = "person.byEmail", query = "select p from Person p where lower(p.email)=lower(:email)"), @NamedQuery(name = "person.byPasswordResetToken", query = "select p from Person p where p.passwordResetToken = :passwordResetToken"), @NamedQuery(name = "person.byEmailVerifyToken", query = "select p from Person p where p.emailVerifyToken = :emailVerifyToken"), @NamedQuery(name = "person.countByUsername", query = "select count(p) from Person p where lower(p.username)=lower(:username)"), @NamedQuery(name = "person.hasRole", query = "select p from Person p join p.roles r where r.role=:role and p.id=:personId"), @NamedQuery(name = "person.byForenameAndSurname", query = "select p from Person p where p.forename=:forename and p.surname=:surname"), @NamedQuery(name = "person.byDeviceId", query = "select p from Person p where p.deviceId=:deviceId") //@NamedQuery(name = "person.allPoints", query = "select p.name,sum(la.score) from Person p, LocationAssignment la, StatementCharacterization sc where la.person = p group by p") }) /** * A person represents a user. Usually its a human. * * @author Christoph Wieser */ @Entity @Name("person") @Scope(ScopeType.SESSION) public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; private String externalUsername; @ManyToOne private Person personConnected; // the person it is connected to (if it exists) @OneToMany(mappedBy="personConnected") private Set<Person> connectedPersons = new HashSet<Person>(); // persons, that are connected to this person (reflexive). @OneToMany(mappedBy="person") private List<GameRound> gameRounds = new ArrayList<GameRound>(); @OneToMany(mappedBy="person") private List<Action> actions = new ArrayList<Action>(); @ManyToMany @UserRoles private Set<Role> roles = new HashSet<Role>(); @ManyToMany private Set<Badge> badges = new HashSet<Badge>(); // private data @UserFirstName private String forename; @UserLastName private String surname; private Date death; @Enumerated(EnumType.STRING) private Gender gender; @Range(min=1900, max=2013) private Integer birthyear; @ManyToOne private Location hometown; @Enumerated(EnumType.STRING) private Education education; @Email private String email; @Email private String unverifiedEmail; @NotNull @UserPrincipal private String username; @UserPassword(hash="md5") private String password; private String language; private Date lastLogin; private Date lastLogout; private Date registration; private String passwordResetToken; private String emailVerifyToken; private Date passwordResetDate; private Boolean newsletter; private String deviceId; // e.g. mobile applications (IMEI) public Long getId() { return id; } public void setId(Long id) { this.id = id; } public void addConnectedPerson(Person person) { connectedPersons.add(person); } public String getForename() { return forename; } public Date getDeath() { return death; } public void setDeath(Date death) { this.death = death; } public void setForename(String forename) { this.forename = forename; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getLastLogin() { return lastLogin; } public void setLastLogin(Date lastLogin) { this.lastLogin = lastLogin; } public Date getLastLogout() { return lastLogout; } public void setLastLogout(Date lastLogout) { this.lastLogout = lastLogout; } public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } public Set<Person> getConnectedPersons() { return connectedPersons; } public void setConnectedPersons(Set<Person> connectedPersons) { this.connectedPersons = connectedPersons; } public Date getRegistration() { return registration; } public void setRegistration(Date registration) { this.registration = registration; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public Date getPasswordResetDate() { return passwordResetDate; } public void setPasswordResetDate(Date passwordResetDate) { this.passwordResetDate = passwordResetDate; } public String getPasswordResetToken() { return passwordResetToken; } public void setPasswordResetToken(String passwordResetToken) { this.passwordResetToken = passwordResetToken; } public Person getPersonConnected() { return personConnected; } public void setPersonConnected(Person personConnected) { this.personConnected = personConnected; } public List<GameRound> getGameRounds() { return gameRounds; } public void setGameRounds(List<GameRound> gameRounds) { this.gameRounds = gameRounds; } public List<Action> getActions() { return actions; } public void setActions(List<Action> actions) { this.actions = actions; } public String toString() { if (username != null && username.length()>0) return "User#" + id + "(" + username + ")"; return "User#" + id; } public String getName() { String name = ""; if (forename != null && forename.length() > 0) name = forename; if (surname != null && surname.length() > 0) { if (name.length() == 0) name = surname; else name = name + " " + surname; } if (name.length()==0) name = username; return name; } public Gender getGender() { return gender; } public void setGender(String gender) { this.gender = Gender.valueOf(gender); } public void setGender(Gender gender) { this.gender = gender; } public Integer getBirthyear() { return birthyear; } public void setBirthyear(Integer birthyear) { this.birthyear = birthyear; } public Location getHometown() { return hometown; } public void setHometown(Location hometown) { this.hometown = hometown; } public Education getEducation() { return education; } public void setEducation(Education education) { this.education = education; } public String getExternalUsername() { return externalUsername; } public void setExternalUsername(String externalUsername) { this.externalUsername = externalUsername; } public String getUnverifiedEmail() { return unverifiedEmail; } public void setUnverifiedEmail(String unverifiedEmail) { this.unverifiedEmail = unverifiedEmail; } public String getEmailVerifyToken() { return emailVerifyToken; } public void setEmailVerifyToken(String emailVerifyToken) { this.emailVerifyToken = emailVerifyToken; } public Boolean getNewsletter() { return newsletter; } public void setNewsletter(Boolean newsletter) { this.newsletter = newsletter; } public String getDeviceId() { return deviceId; } public void setDeviceId(String deviceId) { this.deviceId = deviceId; } public Set<Badge> getBadges() { return badges; } public void setBadges(Set<Badge> badges) { this.badges = badges; } }