package com.tandbergtv.metadatamanager.search;

import java.util.ArrayList;
import java.util.List;

import com.tandbergtv.watchpoint.search.Entity;
import com.tandbergtv.watchpoint.search.GroupingEntity;
import com.tandbergtv.workflow.driver.search.SearchOperator;

public class NodeFieldInfo extends FieldInfo {

	private List<FieldInfo> fields = new ArrayList<FieldInfo>();
	private boolean isChildrenConjunction = true;

	/**
	 * 
	 */
	public NodeFieldInfo() {
		super();
		this.isConjunction = true;
	}

	/**
	 * 
	 */
	public NodeFieldInfo(boolean isChildrenConjunction) {
		super();
		this.isChildrenConjunction = isChildrenConjunction;
		this.isConjunction = true;
	}

	/**
	 * 
	 * @param ttvxpath
	 * @param values
	 */
	public NodeFieldInfo(String ttvxpath, List<FieldInfo> fields) {
		super();
		this.ttvxpath = ttvxpath;
		this.fields = fields;
		this.isConjunction = true;
	}

	/**
	 * 
	 * @param ttvxpath
	 * @param values
	 */
	public NodeFieldInfo(String ttvxpath, List<FieldInfo> fields, SearchOperator operator) {
		super();
		this.ttvxpath = ttvxpath;
		this.fields = fields;
		this.isConjunction = true;
	}
	
	/**
	 * 
	 * @param ttvxpath
	 * @param values
	 * @param isConjunction
	 */
	public NodeFieldInfo(String ttvxpath, List<FieldInfo> fields, SearchOperator operator, boolean isConjunction) {
		super();
		this.ttvxpath = ttvxpath;
		this.fields = fields;
		this.isConjunction = isConjunction;
	}

	public List<FieldInfo> getFields() {
		return fields;
	}

	public void setFields(List<FieldInfo> fields) {
		this.fields = fields;
	}

	public void addNode(FieldInfo fieldInfo) {
		fields.add(fieldInfo);
	}

	public boolean isChildrenConjunction() {
		return isChildrenConjunction;
	}

	public void setChildrenConjunction(boolean isChildrenConjunction) {
		this.isChildrenConjunction = isChildrenConjunction;
	}

	@Override
	public void createEntity(String property, Entity assetEntity) {

		GroupingEntity ge = new GroupingEntity("open", true);
		ge.setConjunction(isConjunction);
		assetEntity.addParameter(ge);

		for(FieldInfo fi : fields) {
			fi.setConjunction(isChildrenConjunction);
			fi.createEntity(property, assetEntity);
		}

		assetEntity.addParameter(new GroupingEntity("close", false));
	}
}
