package org.objectstyle.wolips.eomodeler.core.model; import java.util.List; import java.util.Set; import java.util.TreeSet; /** * EOEntityTreeNode is a data structure for representing a subtree of a set of * entities. As an example, when you are generating SQ, you need to be able to * order an arbitrary set of entities in order of their inheritance. * * @author mschrag */ public class EOEntityTreeNode implements Comparable<EOEntityTreeNode> { private EOEntity _entity; private EOEntityTreeNode _parent; private Set<EOEntityTreeNode> _children; public EOEntityTreeNode(EOEntity entity) { _entity = entity; _children = new TreeSet<EOEntityTreeNode>(); } public EOEntity getEntity() { return _entity; } public boolean isRoot() { return _parent == null; } public EOEntityTreeNode getParent() { return _parent; } public Set<EOEntityTreeNode> getChildren() { return _children; } public void addChild(EOEntityTreeNode entity) { entity._parent = this; _children.add(entity); } public void removeChild(EOEntityTreeNode entity) { entity._parent = null; _children.remove(entity); } public void _breadthFirst(List<EOEntity> entities) { for (EOEntityTreeNode childNode : getChildren()) { entities.add(childNode.getEntity()); } for (EOEntityTreeNode childNode : getChildren()) { childNode._breadthFirst(entities); } } public String toString() { return "[EOEntityNode: entity=" + _entity.getName() + "]"; } public int compareTo(EOEntityTreeNode otherNode) { return _entity.getName().compareTo(otherNode.getEntity().getName()); } }