/**
* Abiquo community edition
* cloud management application for hybrid clouds
* Copyright (C) 2008-2010 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software 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
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package com.abiquo.server.core.enterprise;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import com.abiquo.server.core.common.DefaultEntityBase;
import com.softwarementors.validation.constraints.LeadingOrTrailingWhitespace;
import com.softwarementors.validation.constraints.Required;
@Entity
@Table(name = User.TABLE_NAME)
@org.hibernate.annotations.Table(appliesTo = User.TABLE_NAME)
public class User extends DefaultEntityBase
{
public static final String TABLE_NAME = "user";
protected User()
{
}
private final static String ID_COLUMN = "idUser";
@Id
@GeneratedValue
@Column(name = ID_COLUMN, nullable = false)
private Integer id;
@Override
public Integer getId()
{
return this.id;
}
public final static String NAME_PROPERTY = "name";
private final static boolean NAME_REQUIRED = true;
public final static int NAME_LENGTH_MIN = 0;
public final static int NAME_LENGTH_MAX = 128;
private final static boolean NAME_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = false;
private final static String NAME_COLUMN = "name";
@Column(name = NAME_COLUMN, nullable = !NAME_REQUIRED, length = NAME_LENGTH_MAX)
private String name;
@Required(value = NAME_REQUIRED)
@Length(min = NAME_LENGTH_MIN, max = NAME_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = NAME_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getName()
{
return this.name;
}
public void setName(final String name)
{
this.name = name;
}
public final static String ENTERPRISE_PROPERTY = "enterprise";
private final static boolean ENTERPRISE_REQUIRED = true;
private final static String ENTERPRISE_ID_COLUMN = "idEnterprise";
@JoinColumn(name = ENTERPRISE_ID_COLUMN)
@ManyToOne(fetch = FetchType.LAZY)
@ForeignKey(name = "FK_" + TABLE_NAME + "_enterprise")
private Enterprise enterprise;
@Required(value = ENTERPRISE_REQUIRED)
public Enterprise getEnterprise()
{
return this.enterprise;
}
public void setEnterprise(final Enterprise enterprise)
{
this.enterprise = enterprise;
}
public final static String NICK_PROPERTY = "nick";
private final static boolean NICK_REQUIRED = false;
private final static int NICK_LENGTH_MIN = 1;
private final static int NICK_LENGTH_MAX = 128;
private final static boolean NICK_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = false;
private final static String NICK_COLUMN = "user";
@Column(name = NICK_COLUMN, nullable = !NICK_REQUIRED, length = NICK_LENGTH_MAX)
private String nick;
@Required(value = NICK_REQUIRED)
@Length(min = NICK_LENGTH_MIN, max = NICK_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = NICK_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getNick()
{
return this.nick;
}
public void setNick(final String nick)
{
this.nick = nick;
}
public final static String ROLE_PROPERTY = "role";
private final static boolean ROLE_REQUIRED = true;
private final static String ROLE_ID_COLUMN = "idRole";
@JoinColumn(name = ROLE_ID_COLUMN)
@ManyToOne(fetch = FetchType.LAZY)
@ForeignKey(name = "FK_" + TABLE_NAME + "_role")
private Role role;
@Required(value = ROLE_REQUIRED)
public Role getRole()
{
return this.role;
}
public void setRole(final Role role)
{
this.role = role;
}
public final static String LOCALE_PROPERTY = "locale";
private final static boolean LOCALE_REQUIRED = true;
private final static int LOCALE_LENGTH_MIN = 0;
private final static int LOCALE_LENGTH_MAX = 10;
private final static boolean LOCALE_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = false;
private final static String LOCALE_COLUMN = "locale";
@Column(name = LOCALE_COLUMN, nullable = !LOCALE_REQUIRED, length = LOCALE_LENGTH_MAX)
private String locale;
@Required(value = LOCALE_REQUIRED)
@Length(min = LOCALE_LENGTH_MIN, max = LOCALE_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = LOCALE_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getLocale()
{
return this.locale;
}
public void setLocale(final String locale)
{
this.locale = locale;
}
public final static String PASSWORD_PROPERTY = "password";
private final static boolean PASSWORD_REQUIRED = false;
private final static int PASSWORD_LENGTH_MIN = 0;
private final static int PASSWORD_LENGTH_MAX = 255;
private final static boolean PASSWORD_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = false;
private final static String PASSWORD_COLUMN = "password";
@Column(name = PASSWORD_COLUMN, nullable = !PASSWORD_REQUIRED, length = PASSWORD_LENGTH_MAX)
private String password;
@Required(value = PASSWORD_REQUIRED)
@Length(min = PASSWORD_LENGTH_MIN, max = PASSWORD_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = PASSWORD_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getPassword()
{
return this.password;
}
public void setPassword(final String password)
{
this.password = password;
}
public final static String SURNAME_PROPERTY = "surname";
private final static boolean SURNAME_REQUIRED = false;
private final static int SURNAME_LENGTH_MIN = 0;
private final static int SURNAME_LENGTH_MAX = 50;
private final static boolean SURNAME_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = false;
private final static String SURNAME_COLUMN = "surname";
@Column(name = SURNAME_COLUMN, nullable = !SURNAME_REQUIRED, length = SURNAME_LENGTH_MAX)
private String surname;
@Required(value = SURNAME_REQUIRED)
@Length(min = SURNAME_LENGTH_MIN, max = SURNAME_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = SURNAME_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getSurname()
{
return this.surname;
}
public void setSurname(final String surname)
{
this.surname = surname;
}
public final static String ACTIVE_PROPERTY = "active";
private final static String ACTIVE_COLUMN = "active";
private final static int ACTIVE_MIN = Integer.MIN_VALUE;
private final static int ACTIVE_MAX = Integer.MAX_VALUE;
@Column(name = ACTIVE_COLUMN, nullable = true)
@Range(min = ACTIVE_MIN, max = ACTIVE_MAX)
private int active;
public int getActive()
{
return this.active;
}
public void setActive(final int active)
{
this.active = active;
}
public final static String EMAIL_PROPERTY = "email";
private final static boolean EMAIL_REQUIRED = false;
private final static int EMAIL_LENGTH_MIN = 0;
private final static int EMAIL_LENGTH_MAX = 200;
private final static boolean EMAIL_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = false;
private final static String EMAIL_COLUMN = "email";
@Column(name = EMAIL_COLUMN, nullable = !EMAIL_REQUIRED, length = EMAIL_LENGTH_MAX)
private String email;
@Required(value = EMAIL_REQUIRED)
@Length(min = EMAIL_LENGTH_MIN, max = EMAIL_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = EMAIL_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getEmail()
{
return this.email;
}
public void setEmail(final String email)
{
this.email = email;
}
public final static String DESCRIPTION_PROPERTY = "description";
private final static boolean DESCRIPTION_REQUIRED = false;
private final static int DESCRIPTION_LENGTH_MIN = 0;
private final static int DESCRIPTION_LENGTH_MAX = 100;
private final static boolean DESCRIPTION_LEADING_OR_TRAILING_WHITESPACES_ALLOWED = true;
private final static String DESCRIPTION_COLUMN = "description";
@Column(name = DESCRIPTION_COLUMN, nullable = !DESCRIPTION_REQUIRED, length = DESCRIPTION_LENGTH_MAX)
private String description;
@Required(value = DESCRIPTION_REQUIRED)
@Length(min = DESCRIPTION_LENGTH_MIN, max = DESCRIPTION_LENGTH_MAX)
@LeadingOrTrailingWhitespace(allowed = DESCRIPTION_LEADING_OR_TRAILING_WHITESPACES_ALLOWED)
public String getDescription()
{
return this.description;
}
public void setDescription(final String description)
{
this.description = description;
}
public final static String AVAILABLE_VIRTUAL_DATACENTERS_PROPERTY =
"availableVirtualDatacenters";
@Column(name = AVAILABLE_VIRTUAL_DATACENTERS_PROPERTY, nullable = true)
private String availableVirtualDatacenters;
@LeadingOrTrailingWhitespace(allowed = false)
public String getAvailableVirtualDatacenters()
{
return this.availableVirtualDatacenters;
}
public void setAvailableVirtualDatacenters(final String availableVirtualDatacenters)
{
this.availableVirtualDatacenters = availableVirtualDatacenters;
}
@Column(nullable = false)
private Date creationDate;
public Date getCreationDate()
{
return creationDate;
}
public void setCreationDate(final Date creationDate)
{
this.creationDate = creationDate;
}
/**
* THIS CONSTRUCTOR FORCES THE TYPE, AND THEREFORE THE AUTHENTICATION MODE TO <b>ABIQUO</b>.
* THAT MEANS THAT THIS USER CAN ONLY AUTHENTICATE TO DB. Constructor.
*
* @param enterprise Enterprise to which the user belonsg.
* @param role Role in Abiquo.
* @param name Name.
* @param surname Surname.
* @param email Email address.
* @param nick Login.
* @param password Password.
* @param locale Language preferred for communications with Abiquo.
* @deprecated use instead
* {@link #User(Enterprise, Role, String, String, String, String, String, String, AuthType)}
*/
@Deprecated
public User(final Enterprise enterprise, final Role role, final String name,
final String surname, final String email, final String nick, final String password,
final String locale)
{
setEnterprise(enterprise);
setRole(role);
setName(name);
setSurname(surname);
setEmail(email);
setNick(nick);
setPassword(password);
setLocale(locale);
setAuthType(AuthType.ABIQUO);
}
/**
* Constructor.
*
* @param enterprise Enterprise to which the user belonsg.
* @param role Role in Abiquo.
* @param name Name.
* @param surname Surname.
* @param email Email address.
* @param nick Login.
* @param password Password.
* @param locale Language preferred for communications with Abiquo.
* @param authType Which system this user signed up.
*/
public User(final Enterprise enterprise, final Role role, final String name,
final String surname, final String email, final String nick, final String password,
final String locale, final AuthType authType)
{
setEnterprise(enterprise);
setRole(role);
setName(name);
setSurname(surname);
setEmail(email);
setNick(nick);
setPassword(password);
setLocale(locale);
setAuthType(authType);
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true, mappedBy = "user")
private List<Session> sessions = new ArrayList<Session>();
protected void addSession(final Session session)
{
sessions.add(session);
}
/**
* Which system this user signed up. This also indicates to which system this user will
* authenticate.
*/
@Enumerated(value = javax.persistence.EnumType.STRING)
@Column(name = "authType", nullable = false)
private AuthType authType;
/**
* Which system this user signed up. This also indicates to which system this user will
* authenticate.
*
* @return AuthType
*/
@Required(value = true)
public AuthType getAuthType()
{
return authType;
}
/**
* Which system this user signed up. This also indicates to which system this user will
* authenticate.
*
* @param authType {@link com.abiquo.server.core.enterprise.User.AuthType} value.
*/
private void setAuthType(final AuthType authType)
{
this.authType = authType;
}
/**
* Which system this user signed up. This also indicates to which system this user will
* authenticate.
*
* @author ssedano
*/
public static enum AuthType
{
ABIQUO, LDAP;
}
}