package com.salesmanager.core.model.generic;
import java.io.Serializable;
import java.text.Collator;
import java.util.Locale;
import org.hibernate.Hibernate;
/**
* <p>Entité racine pour la persistence des objets via JPA.</p>
*
* @param <E> type de l'entité
*/
public abstract class SalesManagerEntity<K extends Serializable & Comparable<K>, E extends SalesManagerEntity<K, ?>>
implements Serializable, Comparable<E> {
private static final long serialVersionUID = -3988499137919577054L;
public static final Collator DEFAULT_STRING_COLLATOR = Collator.getInstance(Locale.FRENCH);
static {
DEFAULT_STRING_COLLATOR.setStrength(Collator.PRIMARY);
}
/**
* Retourne la valeur de l'identifiant unique.
*
* @return id
*/
public abstract K getId();
/**
* Définit la valeur de l'identifiant unique.
*
* @param id id
*/
public abstract void setId(K id);
/**
* Indique si l'objet a déjà été persisté ou non
*
* @return vrai si l'objet n'a pas encore été persisté
*/
public boolean isNew() {
return getId() == null;
}
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object object) {
if (object == null) {
return false;
}
if (object == this) {
return true;
}
// l'objet peut être proxyfié donc on utilise Hibernate.getClass() pour sortir la vraie classe
if (Hibernate.getClass(object) != Hibernate.getClass(this)) {
return false;
}
SalesManagerEntity<K, E> entity = (SalesManagerEntity<K, E>) object; // NOSONAR : traité au-dessus mais wrapper Hibernate
K id = getId();
if (id == null) {
return false;
}
return id.equals(entity.getId());
}
@Override
public int hashCode() {
int hash = 7;
K id = getId();
hash = 31 * hash + ((id == null) ? 0 : id.hashCode());
return hash;
}
public int compareTo(E o) {
if (this == o) {
return 0;
}
return this.getId().compareTo(o.getId());
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("entity.");
builder.append(Hibernate.getClass(this).getSimpleName());
builder.append("<");
builder.append(getId());
builder.append("-");
builder.append(super.toString());
builder.append(">");
return builder.toString();
}
}