package org.subethamail.entity;
import java.io.Serializable;
import java.util.logging.Level;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import lombok.extern.java.Log;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Columns;
import org.hibernate.annotations.Type;
import org.subethamail.entity.i.Validator;
// In JBoss4, the copy of this in Config was sufficient to register
// the type. In JBoss5, either the order of loading changed or the
// type must be registered in every class.
@org.hibernate.annotations.TypeDefs({
@org.hibernate.annotations.TypeDef(
name="anyImmutable",
typeClass=org.subethamail.entity.type.AnyImmutableType.class
)
})
/**
* One parameter key and argument value for an enabled filter.
*
* @author Jeff Schnitzer
*/
@Entity
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
@Log
public class FilterArgument implements Serializable, Comparable<FilterArgument>
{
private static final long serialVersionUID = 1L;
/** */
@Id
@GeneratedValue
Long id;
/** */
@ManyToOne
@JoinColumn(name="filterId", nullable=false)
EnabledFilter filter;
/** */
@Column(nullable=false, length=Validator.MAX_FILTER_ARGUMENT_NAME)
String name;
/** */
@Type(type="anyImmutable")
@Columns(columns={
@Column(name="type"),
@Column(name="value", length=Validator.MAX_FILTER_ARGUMENT_VALUE)
})
Object value;
/**
*/
public FilterArgument() {}
/**
*/
public FilterArgument(EnabledFilter filter, String name, Object value)
{
log.log(Level.FINE,"Creating new FilterArgument");
this.filter = filter;
this.name = name;
this.value = value;
}
/** */
public Long getId() { return this.id; }
/** */
public EnabledFilter getFilter() { return this.filter; }
/**
*/
public String getName() { return this.name; }
/**
* @return the value object in its native type
*/
public Object getValue() { return this.value; }
public void setValue(Object val)
{
this.value = val;
}
/** */
@Override
public String toString()
{
return this.getClass() + " {id=" + this.id + ", name=" + this.name + "}";
}
/**
* Natural sort order is based on name
*/
public int compareTo(FilterArgument other)
{
return this.name.compareTo(other.getName());
}
}