package fr.openwide.core.jpa.more.business.history.model.embeddable; import java.io.Serializable; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.Basic; import javax.persistence.Embeddable; import javax.persistence.Embedded; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.bindgen.Bindable; import org.hibernate.search.annotations.Analyze; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.FieldBridge; import fr.openwide.core.jpa.business.generic.model.GenericEntityReference; import fr.openwide.core.jpa.search.bridge.NullEncodingGenericEntityReferenceFieldBridge; @Embeddable @Bindable @Access(AccessType.FIELD) public class HistoryValue implements Serializable { private static final long serialVersionUID = 1251495816635000683L; public static final String REFERENCE = "reference"; /** * Human-readable string */ @Basic private String label; /** * Machine-readable string (for instance MyEnum.VALUE.name()) */ @Basic private String serialized; @Embedded @Field(name = REFERENCE, bridge = @FieldBridge(impl = NullEncodingGenericEntityReferenceFieldBridge.class), analyze = Analyze.NO) private HistoryEntityReference reference; public HistoryValue() { // nothing to do } public HistoryValue(String label) { this(label, null, null); } public HistoryValue(String label, String serialized) { this(label, serialized, null); } public HistoryValue(String label, GenericEntityReference<Long, ?> entityValueReference) { this(label, null, entityValueReference); } private HistoryValue(String label, String serialized, GenericEntityReference<Long, ?> entityValueReference) { super(); this.label = label; this.serialized = serialized; this.reference = HistoryEntityReference.from(entityValueReference); } public String getLabel() { return label; } public String getSerialized() { return serialized; } public HistoryEntityReference getReference() { return reference; } @Override public String toString() { if (reference != null) { return reference.toString(); } else { return label; } } @Override public boolean equals(Object obj) { if (!(obj instanceof HistoryValue)) { return false; } HistoryValue other = (HistoryValue) obj; return new EqualsBuilder() .append(getLabel(), other.getLabel()) .append(getSerialized(), other.getSerialized()) .append(getReference(), other.getReference()) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() .append(getLabel()) .append(getSerialized()) .append(getReference()) .build(); } }