package com.openedit.webui.tree; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import com.openedit.hittracker.HitTracker; import com.openedit.hittracker.ListHitTracker; public abstract class BaseTreeModel implements WebTreeModel { public HitTracker getHitTracker(String inId) { HitTracker tracker = new ListHitTracker(getChildrenById(inId)); return tracker; } public HitTracker getLeaves(String inId) { HitTracker tracker = new ListHitTracker(); for (Iterator iterator = getChildrenById(inId).iterator(); iterator.hasNext();) { Object node = (Object) iterator.next(); if (isLeaf(node)) { tracker.add(node); } } return tracker; } public HitTracker getNonLeaves(String inId) { HitTracker tracker = new ListHitTracker(); for (Iterator iterator = getChildrenById(inId).iterator(); iterator.hasNext();) { Object node = (Object) iterator.next(); if (!isLeaf(node)) { tracker.add(node); } } return tracker; } public List getChildrenById(String inId) { Object parent = findNodeById(getRoot(), inId); if( parent == null) { return null; } return getChildren(parent); } public List getParentPaths(String inId, String inRootNodeId) { List parents = new ArrayList(); Object child = findNodeById(getRoot(), inId); //last node Object top = null; if( inRootNodeId != null ) { top = findNodeById(getRoot(), inRootNodeId); //last node } while( child != null ) { parents.add(child); if( child == top) { break; } child = getParent(child); } Collections.reverse(parents); return parents; } public List getParentPaths(String inId) { return getParentPaths(inId,0); } public List getParentPaths(String inId, int inDeepLevel) { List parents = new ArrayList(); Object child = findNodeById(getRoot(), inId); while( child != null ) { parents.add(child); child = getParent(child); } Collections.reverse(parents); if( inDeepLevel > 0 ) { if( inDeepLevel > parents.size() ) { parents = Collections.EMPTY_LIST; } else { parents = parents.subList(inDeepLevel, parents.size()); } } return parents; } public boolean hasChildren(Object inNode) { return getChildCount(inNode) > 0; } public boolean hasFolderChildren(Object inNode) { for (Iterator iterator = getChildren(inNode).iterator(); iterator.hasNext();) { Object child = (Object) iterator.next(); if( !isLeaf(child)) { return true; } } return false; } }