/**
 *
 */
package gr.uoa.di.webui.search;

/**
 * @author kiatrop
 *
 */
public class FieldCriterion {

	public enum Qualifier { ANY, ALL, EXACT, DATE };

	private String name = null;
	private String display = null;
	private String value = null;
	private Qualifier qualifier = null;

	public FieldCriterion(String name,
			String display, String value, Qualifier qualifier) {
		super();
		this.setName(name);
		this.display = display;
		this.value = value;
		this.qualifier = qualifier;
	}

	@Override
	public boolean equals(Object obj) {
		// TODO check for cql equivalence
		if (obj instanceof FieldCriterion) {
			FieldCriterion other = (FieldCriterion) obj;
			return other.display.equals(display) && other.value.equals(value)
					&& other.qualifier == qualifier && other.name.equals(name);
		}
		return false;
	}

	@Override
	public int hashCode() {
		return display.hashCode();
	}

	@Override
	public String toString(){
		StringBuffer sb = new StringBuffer();
		sb.append(this.display).append(" (").append(this.name).append(") ");
		sb.append(" / ");
		sb.append(this.qualifier).append(" : ").append(this.value);
		return sb.toString();
	}

	public String getDisplay() {
		return display;
	}

	public void setDisplay(String display) {
		this.display = display;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		if (!TextUtils.isValidFieldName(name)) {
			throw new RuntimeException("Bad field criterion name " + name);
		}
		
		this.name = name;
	}

	public Qualifier getQualifier() {
		return qualifier;
	}

	public void setQualifier(Qualifier qualifier) {
		this.qualifier = qualifier;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}	
}
