You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by ts...@apache.org on 2003/10/31 09:16:38 UTC

cvs commit: jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple NullSessionStateManager.java SimpleTreeModel.java FullTreeSessionStateManager.java SimpleNodeRenderFactory.java TreeNode.java SimpleSessionStateManager.java SimpleTreeDataModel.java TreePath.java SimpleTreeStateModel.java

tsvetelin    2003/10/31 00:16:38

  Added:       contrib/src/org/apache/tapestry/contrib/tree/simple
                        NullSessionStateManager.java SimpleTreeModel.java
                        FullTreeSessionStateManager.java
                        SimpleNodeRenderFactory.java TreeNode.java
                        SimpleSessionStateManager.java
                        SimpleTreeDataModel.java TreePath.java
                        SimpleTreeStateModel.java
  Log:
  
  
  Revision  Changes    Path
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/NullSessionStateManager.java
  
  Index: NullSessionStateManager.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import org.apache.tapestry.contrib.tree.model.ITreeModel;
  import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
  
  /**
   * All right reserved.
   * Copyright (c) by Rushmore Digital Ltd.
   * Created on Sep 27, 2002
   *
   * @author ceco
   *
   */
  public class NullSessionStateManager implements ITreeSessionStateManager {
  
  	/**
  	 * Constructor for NullSessionStateManager.
  	 */
  	public NullSessionStateManager() {
  		super();
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
  	 */
  	public Object getSessionState(ITreeModel objModel) {
  		return null;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
  	 */
  	public ITreeModel getModel(Object objSessionState) {
  		return null;
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeModel.java
  
  Index: SimpleTreeModel.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import java.io.Serializable;
  
  import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
  import org.apache.tapestry.contrib.tree.model.ITreeModel;
  import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
  
  /**
   * All right reserved.
   * Copyright (c) by Rushmore Digital Ltd.
   * Created on Sep 25, 2002
   *
   * @author ceco
   *
   */
  public class SimpleTreeModel implements ITreeModel, Serializable{
  
  	private ITreeDataModel m_objDataModel;
  	private ITreeStateModel m_objTreeStateModel;
  	
  	/**
  	 * Constructor for SimpleTreeModel.
  	 */
  	public SimpleTreeModel(ITreeDataModel objDataModel) {
  		this(objDataModel, new SimpleTreeStateModel());
  	}
  
  	public SimpleTreeModel(ITreeDataModel objDataModel, ITreeStateModel objTreeStateModel) {
  		super();
  		m_objDataModel = objDataModel;
  		m_objTreeStateModel = objTreeStateModel;
  	}
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeModel#getTreeDataModel()
  	 */
  	public ITreeDataModel getTreeDataModel() {
  		return m_objDataModel;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeModel#getTreeStateModel()
  	 */
  	public ITreeStateModel getTreeStateModel() {
  		return m_objTreeStateModel;
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/FullTreeSessionStateManager.java
  
  Index: FullTreeSessionStateManager.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import org.apache.tapestry.contrib.tree.model.ITreeModel;
  import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
  
  /**
   * All right reserved.
   * Copyright (c) by Rushmore Digital Ltd.
   * Created on Sep 25, 2002
   *
   * @author ceco
   *
   */
  public class FullTreeSessionStateManager implements ITreeSessionStateManager {
  
  	/**
  	 * Constructor for FullTreeSessionStateManager.
  	 */
  	public FullTreeSessionStateManager() {
  		super();
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getSessionState(ITreeModel)
  	 */
  	public Object getSessionState(ITreeModel objModel) {
  		return objModel;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager#getModel(Object)
  	 */
  	public ITreeModel getModel(Object objSessionState) {
  		return (ITreeModel)objSessionState;
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleNodeRenderFactory.java
  
  Index: SimpleNodeRenderFactory.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import org.apache.tapestry.IRender;
  import org.apache.tapestry.IRequestCycle;
  import org.apache.tapestry.contrib.tree.components.INodeRenderFactory;
  import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
  import org.apache.tapestry.valid.RenderString;
  
  /**
   * @author ceco
   */
  
  public class SimpleNodeRenderFactory implements INodeRenderFactory {
  
  	/**
  	 * Constructor for SimpleNodeRenderFactory.
  	 */
  	public SimpleNodeRenderFactory() {
  		super();
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.INodeRenderFactory#getRender(ITreeNode, ITreeModel, IRequestCycle)
  	 */
  	public IRender getRenderByID(
  		Object objUniqueKey,
  		ITreeModelSource objTreeModelSource,
  		IRequestCycle cycle)
  	{
  		Object objValue = objTreeModelSource.getTreeModel().getTreeDataModel().getObject(objUniqueKey);
  		return getRender(objValue, objTreeModelSource, cycle);
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.INodeRenderFactory#getRender(Object, IRequestCycle)
  	 */
  	public IRender getRender(Object objValue, ITreeModelSource objTreeModelSource, IRequestCycle objCycle) {
  		return new RenderString(objValue.toString());
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/TreeNode.java
  
  Index: TreeNode.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import java.util.Collection;
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.Set;
  
  import org.apache.tapestry.contrib.tree.model.IMutableTreeNode;
  import org.apache.tapestry.contrib.tree.model.ITreeNode;
  
  /**
   * @author ceco
   */
  public class TreeNode implements IMutableTreeNode {
  
  	protected Set m_setChildren;
  	protected IMutableTreeNode m_objParentNode;
  	
  	/**
  	 * Constructor for TreeNode.
  	 */
  	public TreeNode() {
  		this(null);
  	}
  	public TreeNode(IMutableTreeNode parentNode) {
  		super();
  		m_objParentNode = parentNode;
  		m_setChildren = new HashSet();
  	}
  
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeNode#getChildCount()
  	 */
  	public int getChildCount() {
  		return m_setChildren.size();
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeNode#getParent()
  	 */
  	public ITreeNode getParent() {
  		return m_objParentNode;
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeNode#getAllowsChildren()
  	 */
  	public boolean getAllowsChildren() {
  		return true;
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeNode#isLeaf()
  	 */
  	public boolean isLeaf() {
  		return m_setChildren.size() == 0 ? true:false;
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeNode#children()
  	 */
  	public Collection children() {
  		return m_setChildren;
  	}
  
  
  	/**
  	 * @see com.rushmore.components.tree.IMutableTreeNode#insert(IMutableTreeNode, int)
  	 */
  	public void insert(IMutableTreeNode child) {
  		child.setParent(this);
  		m_setChildren.add(child);
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.IMutableTreeNode#remove(IMutableTreeNode)
  	 */
  	public void remove(IMutableTreeNode node) {
  		m_setChildren.remove(node);
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.IMutableTreeNode#removeFromParent()
  	 */
  	public void removeFromParent() {
  		m_objParentNode.remove(this);
  		m_objParentNode = null;
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.IMutableTreeNode#setParent(IMutableTreeNode)
  	 */
  	public void setParent(IMutableTreeNode newParent) {
  		m_objParentNode = newParent;
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.IMutableTreeNode#insert(Collection)
  	 */
  	public void insert(Collection colChildren){
  		for (Iterator iter = colChildren.iterator(); iter.hasNext();) {
  			IMutableTreeNode element = (IMutableTreeNode) iter.next();
  			element.setParent(this);
  			m_setChildren.add(element);
  		}
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#containsChild(ITreeNode)
  	 */
  	public boolean containsChild(ITreeNode node) {
  		return m_setChildren.contains(node);
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeNode#getChildren()
  	 */
  	public Collection getChildren() {
  		return m_setChildren;
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleSessionStateManager.java
  
  Index: SimpleSessionStateManager.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import org.apache.tapestry.contrib.tree.model.*;
  
  /**
   * All right reserved.
   * Copyright (c) by Rushmore Digital Ltd.
   * Created on Sep 24, 2002
   *
   * @author ceco
   *
   */
  public class SimpleSessionStateManager implements ITreeSessionStateManager {
  
  	/**
  	 * Constructor for SimpleSessionStateManager.
  	 */
  	public SimpleSessionStateManager() {
  		super();
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeSessionStateManager#getSessionState(ITreeModel)
  	 */
  	public Object getSessionState(ITreeModel objModel) {
  		return objModel;
  	}
  
  	/**
  	 * @see com.rushmore.components.tree.ITreeSessionStateManager#getModel(Object)
  	 */
  	public ITreeModel getModel(Object objSessionState) {
  		return (ITreeModel)objSessionState;
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeDataModel.java
  
  Index: SimpleTreeDataModel.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import java.io.Serializable;
  import java.util.Iterator;
  
  import org.apache.tapestry.contrib.tree.model.ITreeDataModel;
  import org.apache.tapestry.contrib.tree.model.ITreeNode;
  
  /**
   * All right reserved.
   * Copyright (c) by Rushmore Digital Ltd.
   * Created on Sep 25, 2002
   *
   * @author ceco
   *
   */
  public class SimpleTreeDataModel implements ITreeDataModel, Serializable {
  
  	protected ITreeNode m_objRootNode;
  	/**
  	 * Constructor for SimpleTreeDataModel.
  	 */
  	public SimpleTreeDataModel(ITreeNode objRootNode) {
  		super();
  		m_objRootNode = objRootNode;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getRoot()
  	 */
  	public Object getRoot() {
  		return m_objRootNode;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildCount(Object)
  	 */
  	public int getChildCount(Object objParent) {
  		ITreeNode objParentNode = (ITreeNode)objParent;
  		
  		return objParentNode.getChildCount();
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getChildren(Object)
  	 */
  	public Iterator getChildren(Object objParent) {
  		ITreeNode objParentNode = (ITreeNode)objParent;
  		return objParentNode.getChildren().iterator();
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getObject(Object)
  	 */
  	public Object getObject(Object objUniqueKey) {
  		if(objUniqueKey != null) {
  			TreePath objPath = (TreePath)objUniqueKey;
  			return objPath.getLastPathComponent();
  		}
  		return null;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getUniqueKey(Object, Object)
  	 */
  	public Object getUniqueKey(Object objTarget, Object objParentUniqueKey) {
  		TreePath objPath = (TreePath)objParentUniqueKey;
  		Object objTargetUID = null;
  		if(objPath != null){
  			objTargetUID = objPath.pathByAddingChild(objTarget);
  		}else{
  			objTargetUID = new TreePath(objTarget);
  		}
  		return objTargetUID;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#isAncestorOf(Object, Object)
  	 */
  	public boolean isAncestorOf(Object objTargetUniqueKey, Object objParentUniqueKey) {
  		TreePath objParentPath = (TreePath)objParentUniqueKey;
  		TreePath objTargetPath = (TreePath)objTargetUniqueKey;
  		boolean bResult = objParentPath.isDescendant(objTargetPath);
  		return bResult;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeDataModel#getParentID(Object)
  	 */
  	public Object getParentUniqueKey(Object objChildUniqueKey) {
  		TreePath objChildPath = (TreePath)objChildUniqueKey;
  		TreePath objParentPath = objChildPath.getParentPath();
  		if(objParentPath == null)
  			return null;
  		return objParentPath.getLastPathComponent();
  	}
  
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/TreePath.java
  
  Index: TreePath.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import java.io.*;
  import java.util.Vector;
  
  /*
  * @version 1.00 30/07/03
  * @author ceco
  */
  
  public class TreePath extends Object implements Serializable {
  	private TreePath parentPath;
  	transient private Object lastPathComponent;
  
  	public TreePath(Object[] path) {
  		if (path == null || path.length == 0)
  			throw new IllegalArgumentException("path in TreePath must be non null and not empty.");
  		lastPathComponent = path[path.length - 1];
  		if (path.length > 1)
  			parentPath = new TreePath(path, path.length - 1);
  	}
  
  	public TreePath(Object singlePath) {
  		if (singlePath == null)
  			throw new IllegalArgumentException("path in TreePath must be non null.");
  		lastPathComponent = singlePath;
  		parentPath = null;
  	}
  
  	protected TreePath(TreePath parent, Object lastElement) {
  		if (lastElement == null)
  			throw new IllegalArgumentException("path in TreePath must be non null.");
  		parentPath = parent;
  		lastPathComponent = lastElement;
  	}
  
  	protected TreePath(Object[] path, int length) {
  		lastPathComponent = path[length - 1];
  		if (length > 1)
  			parentPath = new TreePath(path, length - 1);
  	}
  
  	protected TreePath() {
  	}
  
  	public Object[] getPath() {
  		int i = getPathCount();
  		Object[] result = new Object[i--];
  
  		for (TreePath path = this; path != null; path = path.parentPath) {
  			result[i--] = path.lastPathComponent;
  		}
  		return result;
  	}
  
  	public Object getLastPathComponent() {
  		return lastPathComponent;
  	}
  
  	/**
  	 * Returns the number of elements in the path.
  	 *
  	 * @return an int giving a count of items the path
  	 */
  	public int getPathCount() {
  		int result = 0;
  		for (TreePath path = this; path != null; path = path.parentPath) {
  			result++;
  		}
  		return result;
  	}
  
  	public Object getPathComponent(int element) {
  		int pathLength = getPathCount();
  
  		if (element < 0 || element >= pathLength)
  			throw new IllegalArgumentException(
  				"Index " + element + " is out of the specified range");
  
  		TreePath path = this;
  
  		for (int i = pathLength - 1; i != element; i--) {
  			path = path.parentPath;
  		}
  		return path.lastPathComponent;
  	}
  
  	public boolean equals(Object o) {
  		if (o == this)
  			return true;
  		if (o instanceof TreePath) {
  			TreePath oTreePath = (TreePath) o;
  
  			if (getPathCount() != oTreePath.getPathCount())
  				return false;
  			for (TreePath path = this; path != null; path = path.parentPath) {
  				if (!(path.lastPathComponent.equals(oTreePath.lastPathComponent))) {
  					return false;
  				}
  				oTreePath = oTreePath.parentPath;
  			}
  			return true;
  		}
  		return false;
  	}
  
  	public int hashCode() {
  		return lastPathComponent.hashCode();
  	}
  
  	public boolean isDescendant(TreePath aTreePath) {
  		if (aTreePath == this)
  			return true;
  
  		if (aTreePath != null) {
  			int pathLength = getPathCount();
  			int oPathLength = aTreePath.getPathCount();
  
  			if (oPathLength < pathLength)
  				// Can't be a descendant, has fewer components in the path.
  				return false;
  			while (oPathLength-- > pathLength)
  				aTreePath = aTreePath.getParentPath();
  			return equals(aTreePath);
  		}
  		return false;
  	}
  
  	public TreePath pathByAddingChild(Object child) {
  		if (child == null)
  			throw new NullPointerException("Null child not allowed");
  
  		return new TreePath(this, child);
  	}
  
  	public TreePath getParentPath() {
  		return parentPath;
  	}
  
  	public String toString() {
  		StringBuffer tempSpot = new StringBuffer("[");
  
  		for (int counter = 0, maxCounter = getPathCount(); counter < maxCounter; counter++) {
  			if (counter > 0)
  				tempSpot.append(", ");
  			tempSpot.append(getPathComponent(counter));
  		}
  		tempSpot.append("]");
  		return tempSpot.toString();
  	}
  
  	// Serialization support.  
  	private void writeObject(ObjectOutputStream s) throws IOException {
  		s.defaultWriteObject();
  
  		Vector values = new Vector();
  		//boolean writePath = true;
  
  		if (lastPathComponent != null && (lastPathComponent instanceof Serializable)) {
  			values.addElement("lastPathComponent");
  			values.addElement(lastPathComponent);
  		}
  		s.writeObject(values);
  	}
  
  	private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
  		s.defaultReadObject();
  
  		Vector values = (Vector) s.readObject();
  		int indexCounter = 0;
  		int maxCounter = values.size();
  
  		if (indexCounter < maxCounter
  			&& values.elementAt(indexCounter).equals("lastPathComponent")) {
  			lastPathComponent = values.elementAt(++indexCounter);
  			indexCounter++;
  		}
  	}
  }
  
  
  
  1.1                  jakarta-tapestry/contrib/src/org/apache/tapestry/contrib/tree/simple/SimpleTreeStateModel.java
  
  Index: SimpleTreeStateModel.java
  ===================================================================
  package org.apache.tapestry.contrib.tree.simple;
  
  import java.io.Serializable;
  import java.util.HashSet;
  import java.util.Set;
  
  import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
  
  /**
   * All right reserved.
   * Copyright (c) by Rushmore Digital Ltd.
   * Created on Sep 25, 2002
   *
   * @author ceco
   *
   */
  public class SimpleTreeStateModel implements ITreeStateModel, Serializable{
  
  	private Set m_setExpanded;
  	private Object m_objSelectedNodeUID = null;
  	
  	/**
  	 * Constructor for SimpleTreeStateModel.
  	 */
  	public SimpleTreeStateModel() {
  		super();
  		initialize();
  	}
  	private void initialize(){
  		m_setExpanded = new HashSet();
  		m_objSelectedNodeUID = null;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#getExpandSelection()
  	 */
  	public Set getExpandSelection() {
  		return m_setExpanded;
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#expand(Object)
  	 */
  	public void expand(Object objUniqueKey) {
  		m_setExpanded.add(objUniqueKey);
  		setSelectedNode(objUniqueKey);
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#expandPath(Object)
  	 */
  	public void expandPath(Object objUniqueKey) {
  		m_setExpanded.add(objUniqueKey);
  		setSelectedNode(objUniqueKey);
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#collapse(Object)
  	 */
  	public void collapse(Object objUniqueKey) {
  		m_setExpanded.remove(objUniqueKey);
  		setSelectedNode(objUniqueKey);
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#collapsePath(Object)
  	 */
  	public void collapsePath(Object objUniqueKey) {
  		m_setExpanded.remove(objUniqueKey);
  		setSelectedNode(objUniqueKey);
  	}
  
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#isUniqueKeyExpanded(Object)
  	 */
  	public boolean isUniqueKeyExpanded(Object objUniqueKey) {
  		return m_setExpanded.contains(objUniqueKey);
  	}
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#getSelectedNode()
  	 */
  	public Object getSelectedNode() {
  		return m_objSelectedNodeUID;
  	}
  	private void setSelectedNode(Object objUniqueKey){
  		if(m_objSelectedNodeUID == null || !m_objSelectedNodeUID.equals(objUniqueKey))
  			m_objSelectedNodeUID = objUniqueKey;
  	}
  	/**
  	 * @see org.apache.tapestry.contrib.tree.model.ITreeStateModel#resetState()
  	 */
  	public void resetState() {
  		initialize();
  	}
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org