package org.nuunframework.universalvisitor.core; import java.lang.reflect.AnnotatedElement; import org.nuunframework.universalvisitor.api.Metadata; import org.nuunframework.universalvisitor.api.Node; /** * * * @author Epo Jemba * @author Pierre Thirouin * */ public class NodeDefault implements Node{ private Object instance; private Metadata metadata =null; private AnnotatedElement annotatedElement; protected int level = 0; protected NodeDefault(Object instance, AnnotatedElement annotatedElement ) { super(); this.instance = instance; this.annotatedElement = annotatedElement; } protected NodeDefault(Object instance, AnnotatedElement annotatedElement, int level ) { this(instance, annotatedElement); this.level = level; } protected NodeDefault(Object instance, AnnotatedElement annotatedElement, int level , Metadata metadata) { this(instance, annotatedElement); this.level = level; this.metadata = metadata; } protected NodeDefault(Object instance, AnnotatedElement annotatedElement, int level , int index) { this(instance, annotatedElement); this.level = level; metadata = new Metadata(index); } protected NodeDefault(Object instance, AnnotatedElement annotatedElement, int level , Object key) { this(instance, annotatedElement); this.level = level; metadata = new Metadata(key); } @Override public Object instance() { return instance; } @Override public int level() { return level; } @Override public Metadata metadata() { return metadata; } @Override public AnnotatedElement annotatedElement() { return annotatedElement; } public Metadata metadata (int index) { if (metadata == null) { metadata = new Metadata(index); } return metadata; } public Metadata metadata (Object key) { if (metadata == null) { metadata = new Metadata(key); } return metadata; } public Node metadata (Metadata metadata) { this.metadata = metadata; return this; } public void annotatedElement(AnnotatedElement annotatedElement) { this.annotatedElement = annotatedElement; } @Override public String toString() { return "Node [instance=" + instance + ", annotatedElement=" + annotatedElement + ", level=" + level + "]"; } }