package es.uniovi.reflection.patternmining.features;

import es.uniovi.reflection.patternmining.category.ExpressionCategory;
import es.uniovi.reflection.patternmining.category.ExpressionRole;
import es.uniovi.reflection.patternmining.model.interfaces.ExpressionChild;
import es.uniovi.reflection.patternmining.model.interfaces.ExpressionParent;

public class ExpressionFeatures {
	
	private long id;
	private long parentId = 0; //information from parent
	private ExpressionCategory expressionCategory;
	private ExpressionChild firstChild = ExpressionCategory.None;
	private ExpressionChild secondChild = ExpressionCategory.None;
	private ExpressionChild thirdChild = ExpressionCategory.None;
	private ExpressionParent parentNode = ExpressionCategory.None; //information from parent
	private ExpressionRole parentChild = ExpressionRole.None; //parent role
	private int height;
	private int depth;
	private String packageName;
	private long firstChildId;
	private long secondChildId;
	private long thirdChildId;
	private String sourceCode;
	
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}
	
	public long getParentId() {
		return parentId;
	}
	
	public void setParentId(long parentId) {
		this.parentId = parentId;
	}
	
	public ExpressionCategory getExpressionCategory() {
		return expressionCategory;
	}
	
	public void setExpressionCategory(ExpressionCategory expressionCategory) {
		this.expressionCategory = expressionCategory;
	}
	
	public ExpressionChild getFirstChild() {
		return firstChild;
	}
	
	public void setFirstChild(ExpressionChild firstChild) {
		this.firstChild = firstChild;
	}
	
	public ExpressionChild getSecondChild() {
		return secondChild;
	}
	
	public void setSecondChild(ExpressionChild secondChild) {
		this.secondChild = secondChild;
	}
	
	public ExpressionChild getThirdChild() {
		return thirdChild;
	}
	
	public void setThirdChild(ExpressionChild thirdChild) {
		this.thirdChild = thirdChild;
	}
	
	public ExpressionParent getParentNode() {
		return parentNode;
	}
	
	public void setParentNode(ExpressionParent parentNode) {
		this.parentNode = parentNode;
	}
	
	public ExpressionRole getParentChild() {
		return parentChild;
	}
	
	public void setParentChild(ExpressionRole parentChild) {
		this.parentChild = parentChild;
	}
	
	public int getHeight() {
		return height;
	}
	
	public void setHeight(int height) {
		this.height = height;
	}
	
	public int getDepth() {
		return depth;
	}
	
	public void setDepth(int depth) {
		this.depth = depth;
	}
	
	public String getPackageName() {
		return packageName;
	}

	public void setPackageName(String packageName) {
		this.packageName = packageName;
	}
	
	public long getFirstChildId() {
		return firstChildId;
	}
	
	public void setFirstChildId(long firstChildId) {
		this.firstChildId = firstChildId;
	}

	public long getSecondChildId() {
		return secondChildId;
	}

	public void setSecondChildId(long secondChildId) {
		this.secondChildId = secondChildId;
	}

	public long getThirdChildId() {
		return thirdChildId;
	}

	public void setThirdChildId(long thirdChildId) {
		this.thirdChildId = thirdChildId;
	}

	public String getSourceCode() {
		return sourceCode;
	}

	public void setSourceCode(String sourceCode) {
		this.sourceCode = sourceCode;
	}

	@Override
	public String toString() {
		return "ExpressionFeatures [id=" + id + ", parentId=" + parentId + ", expressionCategory=" + expressionCategory
				+ ", firstChild=" + firstChild + ", secondChild=" + secondChild + ", thirdChild=" + thirdChild
				+ ", parentNode=" + parentNode + ", parentChild=" + parentChild + ", height=" + height + ", depth="
				+ depth + ", packageName=" + packageName + ", firstChildId=" + firstChildId + ", secondChildId="
				+ secondChildId + ", thirdChildId=" + thirdChildId + ", sourceCode=" + sourceCode + "]";
	}
	
}
