package net.ion.craken.node; import java.util.Map; import java.util.Set; import net.ion.craken.node.crud.NodeIteratorList; import net.ion.craken.node.crud.tree.Fqn; import net.ion.craken.node.crud.tree.impl.PropertyId; import net.ion.craken.node.crud.tree.impl.PropertyValue; import com.google.common.base.Function; public interface NodeCommon<T extends NodeCommon<T>> extends NodeCommonMap<T> { final static String NameProp = "__name"; public ISession<T> session() ; public Fqn fqn(); public int dataSize(); public T parent(); public boolean hasChild(String fqn); public boolean hasProperty(String pid) ; public boolean hasPropertyId(PropertyId pid) ; PropertyValue extendProperty(String propPath); public T root() ; public T child(String fqn); public Set<String> childrenNames(); public Iterable<T> children(); public Set<PropertyId> keys(); // all normal & ref public Set<PropertyId> normalKeys(); public PropertyValue property(String key); public PropertyValue propertyId(PropertyId pid) ; public Object id() ; Map<PropertyId, PropertyValue> toMap(); public T ref(String refName) ; boolean hasRef(String refName); boolean hasRef(String refName, Fqn fqn); public NodeIteratorList<T> refs(String refName) ; <R> R transformer(Function<T, R> transformer) ; public String asString(String pid) ; public String asDateFmt(String pid, String fmt) ; public <R> R defaultValue(String pid, R val) ; public T asRef(String pid, Fqn base) ; public void debugPrint() ; }