package es.uniovi.reflection.patternmining.features;

import es.uniovi.reflection.patternmining.category.TypeCategory;
import es.uniovi.reflection.patternmining.util.Util.NamingSystem;
import es.uniovi.reflection.patternmining.util.Util.NodeType;
import es.uniovi.reflection.patternmining.util.Util.Visibility;

public class FieldFeatures {
	
	private long id;
	private long idParent; //information from parent
	private int height;
	private Visibility fieldVisibility;
	private NodeType parentNode;
	private boolean valueDefined;
	private boolean isFinal;
	private boolean isStatic;
	private boolean isTransient;
	private boolean isVolatile;
	private int numberAnnotations;
	private NamingSystem fieldNaming;
	private String initialValue;
	private int innerClases;
	private TypeCategory type;
	public long downDepth;
	private String sourceCode;
	
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}
	
	public long getIdParent() {
		return idParent;
	}
	
	public void setIdParent(long l) {
		this.idParent = l;
	}
	
	public int getHeight() {
		return height;
	}
	
	public void setHeight(int height) {
		this.height = height;
	}
	
	public Visibility getFieldVisibility() {
		return fieldVisibility;
	}
	
	public void setFieldVisibility(Visibility fieldVisibility) {
		this.fieldVisibility = fieldVisibility;
	}
	
	public NodeType getParentNode() {
		return parentNode;
	}

	public void setParentNode(NodeType parentNode) {
		this.parentNode = parentNode;
	}

	public boolean isValueDefined() {
		return valueDefined;
	}
	
	public void setValueDefined(boolean valueDefined) {
		this.valueDefined = valueDefined;
	}
	
	public boolean isFinal() {
		return isFinal;
	}
	
	public void setFinal(boolean isFinal) {
		this.isFinal = isFinal;
	}
	
	public boolean isStatic() {
		return isStatic;
	}
	
	public void setStatic(boolean isStatic) {
		this.isStatic = isStatic;
	}
	
	public boolean isTransient() {
		return isTransient;
	}
	
	public void setTransient(boolean isTransient) {
		this.isTransient = isTransient;
	}
	
	public boolean isVolatile() {
		return isVolatile;
	}
	
	public void setVolatile(boolean isVolatile) {
		this.isVolatile = isVolatile;
	}
	
	public int getNumberAnnotations() {
		return numberAnnotations;
	}
	
	public void setNumberAnnotations(int numberAnnotations) {
		this.numberAnnotations = numberAnnotations;
	}
	
	public NamingSystem getFieldNaming() {
		return fieldNaming;
	}
	
	public void setFieldNaming(NamingSystem fieldNaming) {
		this.fieldNaming = fieldNaming;
	}
	
	public String getInitialValue() {
		return initialValue;
	}
	
	public void setInitialValue(String initialValue) {
		this.initialValue = initialValue;
	}
	
	public int getInnerClases() {
		return innerClases;
	}
	
	public void setInnerClases(int innerClases) {
		this.innerClases = innerClases;
	}
	
	public TypeCategory getType() {
		return type;
	}
	
	public void setType(TypeCategory type) {
		this.type = type;
	}
	
	public long getDownDepth() {
		return downDepth;
	}
	
	public void setDownDepth(long downDepth) {
		this.downDepth = downDepth;
	}

	public String getSourceCode() {
		return sourceCode;
	}

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

	@Override
	public String toString() {
		return "FieldFeatures [id=" + id + ", idParent=" + idParent + ", height=" + height + ", fieldVisibility="
				+ fieldVisibility + ", parentNode=" + parentNode + ", valueDefined=" + valueDefined + ", isFinal="
				+ isFinal + ", isStatic=" + isStatic + ", isTransient=" + isTransient + ", isVolatile=" + isVolatile
				+ ", numberAnnotations=" + numberAnnotations + ", fieldNaming=" + fieldNaming + ", initialValue="
				+ initialValue + ", innerClases=" + innerClases + ", type=" + type + ", downDepth=" + downDepth
				+ ", sourceCode=" + sourceCode + "]";
	}
	
}
