/******************************************************************************* * Copyright (c) 2015 Development Gateway, Inc and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the MIT License (MIT) * which accompanies this distribution, and is available at * https://opensource.org/licenses/MIT * * Contributors: * Development Gateway - initial API and implementation *******************************************************************************/ package org.devgateway.toolkit.persistence.dao; import java.io.Serializable; import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.Transient; import org.devgateway.toolkit.persistence.dao.categories.Group; import org.devgateway.toolkit.persistence.dao.categories.Role; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.envers.Audited; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import com.fasterxml.jackson.annotation.JsonIgnore; @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @Entity @Audited public class Person extends AbstractAuditableEntity implements Serializable, UserDetails { private static final long serialVersionUID = 109780377848343674L; private String username; private String firstName; private String lastName; private String email; @JsonIgnore private String password; private String country; private String title; private Boolean changePassword; private Boolean enabled = true; @JsonIgnore private String secret; @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @ManyToOne(fetch = FetchType.EAGER) private Group group; @Transient private Collection<? extends GrantedAuthority> authorities; @Transient @JsonIgnore private String plainPassword; @Transient @JsonIgnore private String plainPasswordCheck; // flag if user want to change password @Transient @JsonIgnore private boolean changePass; @ManyToMany(fetch = FetchType.EAGER) @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) private List<Role> roles; @Override public String getUsername() { return username; } public void setUsername(final String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(final String email) { this.email = email; } @Override public String getPassword() { return password; } public void setPassword(final String password) { this.password = password; } public Group getGroup() { return group; } public void setGroup(final Group group) { this.group = group; } public String getFirstName() { return firstName; } public void setFirstName(final String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(final String lastName) { this.lastName = lastName; } /** * @return the authorities */ @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } /** * @param authorities * the authorities to set */ public void setAuthorities(final Collection<? extends GrantedAuthority> authorities) { this.authorities = authorities; } /* * (non-Javadoc) * * @see org.springframework.security.core.userdetails.UserDetails# * isAccountNonExpired() */ @Override public boolean isAccountNonExpired() { return true; } /* * (non-Javadoc) * * @see org.springframework.security.core.userdetails.UserDetails# * isAccountNonLocked() */ @Override public boolean isAccountNonLocked() { return true; } /* * (non-Javadoc) * * @see org.springframework.security.core.userdetails.UserDetails# * isCredentialsNonExpired() */ @Override public boolean isCredentialsNonExpired() { return true; } /* * (non-Javadoc) * * @see * org.springframework.security.core.userdetails.UserDetails#isEnabled() */ @Override public boolean isEnabled() { return this.enabled; } public String getCountry() { return country; } public void setCountry(final String country) { this.country = country; } public String getPlainPassword() { return plainPassword; } public void setPlainPassword(final String plainPassword) { this.plainPassword = plainPassword; } public String getPlainPasswordCheck() { return plainPasswordCheck; } public void setPlainPasswordCheck(final String plainPasswordCheck) { this.plainPasswordCheck = plainPasswordCheck; } public boolean getChangePass() { return changePass; } public void setChangePass(final boolean changePass) { this.changePass = changePass; } public String getTitle() { return title; } public void setTitle(final String title) { this.title = title; } public void setEnabled(final boolean enabled) { this.enabled = enabled; } public Boolean getChangePassword() { return changePassword; } public void setChangePassword(final Boolean changePassword) { this.changePassword = changePassword; } public String getSecret() { return secret; } public void setSecret(final String secret) { this.secret = secret; } public List<Role> getRoles() { return roles; } public void setRoles(final List<Role> roles) { this.roles = roles; } @Override public String toString() { return "[" + username + "," + firstName + "," + lastName + "," + email + "]"; } @Override public AbstractAuditableEntity getParent() { return null; } }