/* Copyright (c) 2003 eInnovation Inc. All rights reserved This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ package com.openedit.webui.tree; import java.io.Serializable; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * This class is a Web tree, which can render a <code>{@link WebTreeModel}</code> to an XML * document. * * @author Eric Galluzzo */ public class WebTree implements Serializable { private static final Log log = LogFactory.getLog(WebTree.class); protected transient String fieldName; protected transient String fieldId; protected transient WebTreeModel fieldModel; protected transient TreeRenderer fieldTreeRenderer; public WebTree() { } /** * Create a new WebTree which listens to the given model. * * @param inModel DOCUMENT ME! */ public WebTree(WebTreeModel inModel) { setModel(inModel); //expandNode(getModel().getRoot()); } public boolean isEmpty() { if ((getModel() == null) || (getModel().getChildCount(getModel().getRoot()) == 0)) { return true; } else { return false; } } /** * Sets the model. * * @param model The model to set */ public void setModel(WebTreeModel model) { fieldModel = model; if ( fieldModel != null && fieldTreeRenderer != null) { getTreeRenderer().expandNode( fieldModel.getRoot() ); } } /** * Gets the model. * * @return Returns a WebTreeModel */ public WebTreeModel getModel() { if (fieldModel == null) { fieldModel = new DefaultWebTreeModel(); } return fieldModel; } public Object getChildChildren(int inCount) { List children = getModel().getChildren(getModel().getRoot() ); if( children.size() < inCount) { Object parent = children.get(inCount); return getModel().getChildren(parent); } return null; } /** * DOCUMENT ME! * * @param inName */ public void setName(String inName) { fieldName = inName; } /** * DOCUMENT ME! * * @return */ public String getName() { if (fieldName == null) { fieldName = "WebTree"; } return fieldName; } /** * DOCME * * @return DOCME */ public String renderAsJavaScript() { return render(); } public String render() { TreeRenderer renderer = getTreeRenderer(); return renderer.renderAsString(); } public String render(String inNodeId) { if( inNodeId == null) { log.error(getName() + " was passed in a null node id "); inNodeId = "_"; } TreeRenderer renderer = getTreeRenderer(); return renderer.renderAsString(inNodeId); } public TreeRenderer getTreeRenderer() { if (fieldTreeRenderer == null) { fieldTreeRenderer = new WebTreeNodeTreeRenderer(this); } return fieldTreeRenderer; } public void setTreeRenderer(TreeRenderer inTreeRenderer) { fieldTreeRenderer = inTreeRenderer; if ( fieldModel != null && inTreeRenderer != null) { getTreeRenderer().expandNode( getModel().getRoot() ); } } public String toString() { return getTreeRenderer().renderAsString(); } public String getId() { return fieldId; } public void setId(String inId) { fieldId = inId; } public boolean isChildSelected(Object inChild) { Object check = getTreeRenderer().getSelectedNode(); while( check != null) { if( check == inChild) { return true; } check = getModel().getParent(check); } return false; } public Object selectNodeByUrl(String inURL) { Object node = getTreeRenderer().setSelectedNodeByUrl(inURL); return node; } public boolean isExpanded(Object inNode){ return getTreeRenderer().hasBeenExpanded(inNode); } }