package fr.openwide.core.jpa.more.business.parameter.model;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.apache.lucene.analysis.core.KeywordTokenizerFactory;
import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory;
import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilterFactory;
import org.apache.lucene.analysis.miscellaneous.TrimFilterFactory;
import org.apache.lucene.analysis.miscellaneous.WordDelimiterFilterFactory;
import org.apache.lucene.analysis.pattern.PatternReplaceFilterFactory;
import org.bindgen.Bindable;
import org.hibernate.annotations.NaturalId;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.AnalyzerDef;
import org.hibernate.search.annotations.AnalyzerDefs;
import org.hibernate.search.annotations.TokenFilterDef;
import org.hibernate.search.annotations.TokenizerDef;
import fr.openwide.core.commons.util.CloneUtils;
import fr.openwide.core.jpa.business.generic.model.GenericEntity;
import fr.openwide.core.jpa.more.business.parameter.service.AbstractParameterServiceImpl;
import fr.openwide.core.jpa.search.analysis.fr.CoreFrenchMinimalStemFilterFactory;
import fr.openwide.core.jpa.search.util.HibernateSearchAnalyzer;
import fr.openwide.core.spring.property.service.IPropertyService;
@SuppressWarnings("deprecation")
@Entity
@Bindable
@AnalyzerDefs({
@AnalyzerDef(name = HibernateSearchAnalyzer.KEYWORD,
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class)
),
@AnalyzerDef(name = HibernateSearchAnalyzer.KEYWORD_CLEAN,
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class)
}
),
@AnalyzerDef(name = HibernateSearchAnalyzer.TEXT,
tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = WordDelimiterFilterFactory.class, params = {
@org.hibernate.search.annotations.Parameter(name = "generateWordParts", value = "1"),
@org.hibernate.search.annotations.Parameter(name = "generateNumberParts", value = "1"),
@org.hibernate.search.annotations.Parameter(name = "catenateWords", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "catenateNumbers", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "catenateAll", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "splitOnCaseChange", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "splitOnNumerics", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "preserveOriginal", value = "1")
}
),
@TokenFilterDef(factory = LowerCaseFilterFactory.class)
}
),
@AnalyzerDef(name = HibernateSearchAnalyzer.TEXT_STEMMING,
tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = WordDelimiterFilterFactory.class, params = {
@org.hibernate.search.annotations.Parameter(name = "generateWordParts", value = "1"),
@org.hibernate.search.annotations.Parameter(name = "generateNumberParts", value = "1"),
@org.hibernate.search.annotations.Parameter(name = "catenateWords", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "catenateNumbers", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "catenateAll", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "splitOnCaseChange", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "splitOnNumerics", value = "0"),
@org.hibernate.search.annotations.Parameter(name = "preserveOriginal", value = "1")
}
),
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = CoreFrenchMinimalStemFilterFactory.class)
}
),
@AnalyzerDef(name = HibernateSearchAnalyzer.TEXT_SORT,
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = PatternReplaceFilterFactory.class, params = {
@org.hibernate.search.annotations.Parameter(name = "pattern", value = "('-&\\.,\\(\\))"),
@org.hibernate.search.annotations.Parameter(name = "replacement", value = " "),
@org.hibernate.search.annotations.Parameter(name = "replace", value = "all")
}),
@TokenFilterDef(factory = PatternReplaceFilterFactory.class, params = {
@org.hibernate.search.annotations.Parameter(name = "pattern", value = "([^0-9\\p{L} ])"),
@org.hibernate.search.annotations.Parameter(name = "replacement", value = ""),
@org.hibernate.search.annotations.Parameter(name = "replace", value = "all")
}),
@TokenFilterDef(factory = TrimFilterFactory.class)
}
)
})
public class Parameter extends GenericEntity<Long, Parameter> {
private static final long serialVersionUID = 4739408616523513971L;
@Id
@GeneratedValue
private Long id;
@NaturalId
@Column(nullable = false, unique = true)
private String name;
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
@Column
private Boolean booleanValue;
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
@Column
private Integer integerValue;
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
@Column
private Float floatValue;
@Column
@Type(type = "fr.openwide.core.jpa.hibernate.usertype.StringClobType")
private String stringValue;
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
@Column
private Date dateValue;
public Parameter() {
super();
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Parameter(String name, Boolean value) {
super();
setName(name);
setBooleanValue(value);
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Parameter(String name, Integer value) {
super();
setName(name);
setIntegerValue(value);
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Parameter(String name, Float value) {
super();
setName(name);
setFloatValue(value);
}
public Parameter(String name, String value) {
super();
setName(name);
setStringValue(value);
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Parameter(String name, Date value) {
super();
setName(name);
setDateValue(value);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Boolean getBooleanValue() {
return booleanValue;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public void setBooleanValue(Boolean booleanValue) {
this.booleanValue = booleanValue;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Integer getIntegerValue() {
return integerValue;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public void setIntegerValue(Integer integerValue) {
this.integerValue = integerValue;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Float getFloatValue() {
return floatValue;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public void setFloatValue(Float floatValue) {
this.floatValue = floatValue;
}
public String getStringValue() {
return stringValue;
}
public void setStringValue(String stringValue) {
this.stringValue = stringValue;
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public Date getDateValue() {
return CloneUtils.clone(dateValue);
}
/**
* @deprecated Only {@link AbstractParameterServiceImpl} made use of typed values. It is now deprecated in favor
* of {@link IPropertyService}, which only uses the string value.
* @see IPropertyService
*/
@Deprecated
public void setDateValue(Date dateValue) {
this.dateValue = CloneUtils.clone(dateValue);
}
public Object getValue() {
if (booleanValue != null) {
return booleanValue;
}
if (integerValue != null) {
return integerValue;
}
if (floatValue != null) {
return floatValue;
}
if (stringValue != null) {
return stringValue;
}
if (dateValue != null) {
return CloneUtils.clone(dateValue);
}
return null;
}
@Override
public String getDisplayName() {
StringBuilder displayName = new StringBuilder();
displayName.append(name);
displayName.append(':');
displayName.append(getValue());
return displayName.toString();
}
@Override
public String getNameForToString() {
return name;
}
@Override
public Long getId() {
return id;
}
@Override
public void setId(Long id) {
this.id = id;
}
}