All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.leadware.persistence.tools.test.dao.entities.sx.SXGroup Maven / Gradle / Ivy

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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 net.leadware.persistence.tools.test.dao.entities.sx;

import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;
import javax.validation.constraints.NotNull;

import net.leadware.persistence.tools.api.dao.constants.DAOMode;
import net.leadware.persistence.tools.api.validator.annotations.SizeDAOValidator;
import net.leadware.persistence.tools.api.validator.annotations.SizeDAOValidators;
import net.leadware.persistence.tools.api.validator.jsr303ext.annotations.Length;
import net.leadware.persistence.tools.test.dao.entities.sx.constants.UserExpirationStrategy;


/**
 * Classe representant un ensemble de Roles du Systeme a proteger (Groupe)
 * @author Jean-Jacques ETUNÈ NGI
 */
@SizeDAOValidators({
	@SizeDAOValidator(mode = DAOMode.SAVE,   expr = "from SXGroup g where (g.name = ${name})", max = 0, message = "SXGroup.save.name.exist"),
	@SizeDAOValidator(mode = DAOMode.SAVE,   expr = "from SXGroup g where (g.code = ${code})", max = 0, message = "SXGroup.save.code.exist"),
	@SizeDAOValidator(mode = DAOMode.UPDATE, expr = "from SXGroup g where (g.id = ${id})", min = 1, message = "SXGroup.update.id.notexist"),
	@SizeDAOValidator(mode = DAOMode.UPDATE, expr = "from SXGroup g where (g.id != ${id}) and (g.name = ${name})", max = 0, message = "SXGroup.update.name.notunique"),
	@SizeDAOValidator(mode = DAOMode.UPDATE, expr = "from SXGroup g where (g.id != ${id}) and (g.code = ${code})", max = 0, message = "SXGroup.update.code.notunique")
})
@Entity(name = "SXGroup")
@Table(name = "SX_GROUP")
@SequenceGenerator(name="Seq_SXGroup", sequenceName="SEQ_SX_GROUP", allocationSize = 1, initialValue = 1)
public class SXGroup implements Serializable, Comparable {
	
	/**
	 * ID Genere par Eclipse
	 */
	private static final long serialVersionUID = 1L;
		   
	/**
	 * Identifiant du Groupe
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Seq_SXGroup")
    @Column(name = "ID")
	private Long id;
	
	/**
	 * Code du groupe
	 */
	@Column(name = "CODE", nullable = false, unique = true)
	@Length(min = 1, message = "SXGroup.code.empty")
	private String code; 
	
	/**
	 * Nom du Groupe
	 */
	@Column(name = "NAME", nullable = false, unique = true)
	@Length(min = 1, message = "SXGroup.name.empty")
	private String name;
	
	/**
	 * Description du Groupe
	 */
	@Column(name = "DESCRIPTION")
	private String description;
	
	/**
	 * Strategie de gestion de l'expiration des utilisateurs du Groupe
	 */
	@Enumerated(EnumType.STRING)
	@Column(name = "EXPIRATION_STRATEGY", nullable = false)
	@NotNull(message = "SXGroup.expirationStrategy.null")
	private UserExpirationStrategy expirationStrategy = UserExpirationStrategy.PERMANENT; 
	
	/**
	 * Date de creation
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "CREATION_DATE", nullable = false)
	private Date creationDate = new Date();
	
	/**
	 * Periode de validite des utilisateurs du groupe
	 */
	private Integer validityPeriod = -1;
		
	/**
	 * Ensemble des roles de ce RolesSet
	 */
	@ManyToMany(cascade = CascadeType.REMOVE)
	@JoinTable(
		name = "SX_AUTHORIZATION",
		joinColumns = {@JoinColumn(name = "GROUP_ID")},
		inverseJoinColumns = {@JoinColumn(name = "ROLE_ID")}
	)
	private Set roles = new HashSet();

	/**
	 * Version de l'enregistrement
	 */
	@Version
	@Column(name = "GROUP_VERSION")
	private Integer version = 0;
	
	/**
	 * Constructeur par defaut
	 */
	public SXGroup() {}   
	
	public SXGroup(SXGroup group) {
		this.id = group.id;
		this.code = group.code;
		this.name = group.name;
		this.description = group.description;
		this.roles = new HashSet(group.getRoles());
	}
	
	/**
	 * Constructeur avec initialisation des parametres
	 * @param roles	Ensemble des roles de ce RolesSet
	 */
	public SXGroup(String code, String name, String description, Set roles) {
		this.roles = roles;
		this.code = code;
		this.description = description;
		this.name = name;
		if(this.code != null) this.code = this.code.trim().toUpperCase();
		if(this.name != null) this.name = this.name.trim().toUpperCase();
	}
	
	/**
	 * Methode d'obtention de l'Identifiant du role
	 * @return	Identifiant du role
	 */
	public Long getId() {
		return this.id;
	}
	
	/**
	 * Methode de mise a jour de l'Identifiant du role
	 * @param id	Identifiant du role
	 */
	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * Methode d'obtention de la Version de l'enregistrement
	 * @return Version de l'enregistrement
	 */
	public Integer getVersion() {
		return version;
	}
	
	/**
	 * Methode de mise a jour de la Version de l'enregistrement
	 * @param version Version de l'enregistrement
	 */
	public void setVersion(Integer version) {
		this.version = version;
	}
	
	/**
	 * Methode d'obtention du Nom du Groupe
	 * @return Nom du Groupe
	 */
	public String getName() {
		return name;
	}

	/**
	 * Methode de mise a jour du Nom du Groupe
	 * @param name Nom du Groupe
	 */
	public void setName(String name) {
		this.name = name;
		if(this.name != null) this.name = this.name.trim().toUpperCase();
	}
	
	/**
	 * Methode d'obtention du Code du Groupe
	 * @return Code du Groupe
	 */
	public String getCode() {
		return code;
	}

	/**
	 * Methode de mise a jour du Code du Groupe
	 * @param code Code du Groupe
	 */
	public void setCode(String code) {
		this.code = code;
		if(this.code != null) this.code = this.code.trim().toUpperCase();
	}

	/**
	 * Methode d'Obtention de la Description du Groupe
	 * @return Description du Groupe
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * Methode de mise a jour de la Description du Groupe
	 * @param description Description du Groupe
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * Methode d'obtention de la Strategie de gestion de l'expiration des utilisateurs du Groupe
	 * @param description Strategie de gestion de l'expiration des utilisateurs du Groupe
	 */
	public UserExpirationStrategy getExpirationStrategy() {
		return expirationStrategy;
	}

	/**
	 * Methode de mise a jour de la Strategie de gestion de l'expiration des utilisateurs du Groupe
	 * @return Strategie de gestion de l'expiration des utilisateurs du Groupe
	 */
	public void setExpirationStrategy(UserExpirationStrategy expirationStrategy) {
		this.expirationStrategy = expirationStrategy;
	}

	/**
	 * Methode d'obtention de la Date de creation
	 * @return Date de creation
	 */
	public Date getCreationDate() {
		return creationDate;
	}

	/**
	 * Methode de mise a jour de la Date de creation
	 * @param creationDate Date de creation
	 */
	protected void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
		
		// Si la Date est nulle
		if(this.creationDate == null) this.creationDate = new Date();
	}

	/**
	 * Methode d'obtention de la Periode de validite des utilisateurs du groupe
	 * @return Periode de validite des utilisateurs du groupe
	 */
	public Integer getValidityPeriod() {
		return validityPeriod;
	}

	/**
	 * Methode de mise a jour de la Periode de validite des utilisateurs du groupe
	 * @param validityPeriod Periode de validite des utilisateurs du groupe
	 */
	public void setValidityPeriod(Integer validityPeriod) {
		this.validityPeriod = validityPeriod;
	}
	
	/**
	 * Methode d'obtention de l'Ensemble des roles de ce RolesSet
	 * @return Ensemble des roles de ce RolesSet
	 */
	public Set getRoles() {
		return Collections.unmodifiableSet(roles);
	}

	/**
	 * Methode de mise a jour de l'Ensemble des roles de ce RolesSet
	 * @param roles Ensemble des roles de ce RolesSet
	 */
	public void setRoles(Set roles) {
		this.roles = roles;
	}
	
	
	/*
	 * (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object parameter) {
		
		// Si le parametre est null
		if(parameter == null) return false;
		
		// Si le parametre n'est pas de l'instance
		if(!(parameter instanceof SXGroup)) return false;
		
		// On caste
		SXGroup data = (SXGroup) parameter;
		
		// Si le nom du groupe est vide
		if(data.name == null || data.name.trim().length() == 0) return false;
		
		// Si le nom en cours est vide
		if(name == null || name.trim().length() == 0) return false;
		
		// On retourne la comparaison des noms
		return name.equals(data.name);
	}
	
	/*
	 * (non-Javadoc)
	 * @see java.lang.Comparable#compareTo(java.lang.Object)
	 */
	public int compareTo(SXGroup parameter) {
		
		// Si le parametre est null
		if(parameter == null) return -1;
		
		// Si le nom du role est vide
		if(parameter.name == null || parameter.name.trim().length() == 0) return -1;
		
		// Si le nom du role en cours est vide
		if(name == null || name.trim().length() == 0) return 1;
		
		// On retourne la comparaison des noms
		return name.compareTo(parameter.name);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy