AtomicCondition.java

package eu.javaexperience.query;

import java.util.HashSet;
import java.util.Map;

import eu.javaexperience.reflect.CastTo;

public class AtomicCondition// implements ObjectLike
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private final F operator;
	private final boolean negate;
	private final String field;
	private final Object value;
	
	public AtomicCondition(F operator,boolean negate,String field,Object val)
	{
		this.operator = operator;
		this.negate = negate;
		this.field = field;
		this.value = val;
	}

	public F getOperator()
	{
		return operator;
	}

	public boolean isNegated()
	{
		return negate;
	}

	public String getFieldName()
	{
		return field;
	}

	public Object getValue()
	{
		return value;
	}
	
	@Override
	public String toString()
	{
		return field+" "+(negate?"!":"")+operator.name()+" "+value;
	}
	
	protected static final HashSet<String> fields = new HashSet<>();
	static
	{
		fields.add("o");
		fields.add("n");
		fields.add("f");
		fields.add("v");
	}
	
	public static AtomicCondition parse(Map<String, Object> ac)
	{
		F op = F.valueOf((String)ac.get("o"));
		boolean neg = (boolean) CastTo.Boolean.cast(ac.get("n"));
		String f = (String) ac.get("f");
		Object val = ac.get("v");
		return new AtomicCondition(op, neg, f, val);
	}
	
	public void write(Map<String, Object> to)
	{
		to.put("o", operator.name());
		to.put("n", negate);
		to.put("f", field);
		to.put("v", value);
	}

	
	/*public static AtomicCondition parse(DataObject ac)
	{
		F op = F.valueOf(ac.getString("o"));
		boolean neg = ac.getBoolean("n");
		String f = ac.getString("f");
		Object val = ac.get("v");
		if(val instanceof DataArray)
		{
			val = ((DataArray)val).asJavaArray();
		}
		
		return new AtomicCondition(op, neg, f, val);
	}
	
	@Override
	public Object get(String key)
	{
		if(null == key)
		{
			return null;
		}
		
		switch (key)
		{
			case "o":	return operator.name();
			case "n":	return negate;
			case "f":	return field;
			case "v":	return value;
			default: return null;
		}
	}

	@Override
	public DataReprezType getDataReprezType()
	{
		return DataReprezType.OBJECT;
	}

	@Override
	public boolean has(String key)
	{
		return fields.contains(key);
	}

	@Override
	public String[] keys()
	{
		return fields.toArray(Mirror.emptyStringArray);
	}

	@Override
	public int size()
	{
		return fields.size();
	}*/
}