Mercurial > hg > Members > shoshi > TreeCMSv2
view src/treecms/tree/memory/OnMemoryNode.java @ 0:7ecb9273581d
hg init
author | shoshi |
---|---|
date | Wed, 16 Feb 2011 14:27:35 +0900 |
parents | |
children |
line wrap: on
line source
package treecms.tree.memory; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import treecms.api.Node; import treecms.api.NodeID; public class OnMemoryNode implements Node { NodeID m_id; OnMemoryTree m_tree; HashSet<Node> m_children; HashMap<String,byte[]> m_attrs; public OnMemoryNode(NodeID _id,OnMemoryTree _tree) { m_id = _id; m_tree = _tree; m_children = new HashSet<Node>(); m_attrs = new HashMap<String,byte[]>(); } @Override public Node createNode() { OnMemoryNode child = m_tree.createNode(null); return child; } @Override public NodeID getID() { return m_id; } @Override public Iterator<Node> iterator() { return Collections.unmodifiableSet(m_children).iterator(); } @Override public Node addChild(Node _child) { OnMemoryTree.NodeData data = m_tree.extractData(this); data.m_children.add(_child); OnMemoryNode newNode = m_tree.clonetree(this,data); if(newNode == null){ m_children.add(_child); return this; } return newNode; } @Override public Node addChildren(Set<Node> _children) { OnMemoryTree.NodeData data = m_tree.extractData(this); data.m_children.addAll(_children); OnMemoryNode newNode = m_tree.clonetree(this,data); if(newNode == null){ m_children.addAll(_children); return this; } return newNode; } @Override public Node clearChildren() { OnMemoryTree.NodeData data = m_tree.extractData(this); data.m_children.clear(); OnMemoryNode newNode = m_tree.clonetree(this,data); if(newNode == null){ m_children.clear(); return this; } return newNode; } @Override public Node removeChild(Node _child) { OnMemoryTree.NodeData data = m_tree.extractData(this); data.m_children.remove(_child); OnMemoryNode newNode = m_tree.clonetree(this,data); if(newNode == null){ m_children.remove(_child); return this; } return newNode; } @Override public Node setAttribute(String _attr,byte[] _value) { OnMemoryTree.NodeData data = m_tree.extractData(this); data.m_attrs.put(_attr,_value); OnMemoryNode newNode = m_tree.clonetree(this,data); if(newNode == null){ m_attrs.put(_attr,_value); return this; } return newNode; } @Override public Node setAttributeMap(Map<String,byte[]> _map) { OnMemoryTree.NodeData data = m_tree.extractData(this); data.m_attrs.putAll(_map); OnMemoryNode newNode = m_tree.clonetree(this,data); if(newNode == null){ m_attrs.putAll(_map); return this; } return newNode; } @Override public byte[] getAttribute(String _attr) { return m_attrs.get(_attr); } @Override public Set<String> getAttributeKeys() { return m_attrs.keySet(); } @Override public Map<String, byte[]> getAttributeMap() { return Collections.unmodifiableMap(m_attrs); } @Override public Set<Node> getChildren() { return Collections.unmodifiableSet(m_children); } @Override public String toString() { return m_id.toString(); } @Override public boolean isChild(Node _child) { return m_children.contains(_child); } @Override public Node useContents() { return m_tree.useContents(); } }