Mercurial > hg > Members > shoshi > TreeCMS > TreeCMSPrototype1
view src/treecms/proto/simple/SimpleNode.java @ 33:c0a0fa870e6e
commit again
author | shoshi |
---|---|
date | Fri, 19 Nov 2010 15:31:42 +0900 |
parents | 02ef906d0341 |
children | 9663c816e370 |
line wrap: on
line source
package treecms.proto.simple; import java.util.Iterator; import java.util.Collections; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.LinkedList; import treecms.proto.api.Node; import treecms.proto.api.NodeID; import treecms.proto.id.IncrementalNodeID; public class SimpleNode implements Node { private CopyOnWriteArrayList<Node> m_children; private NodeID m_id; private String m_title,m_class; public SimpleNode() { this(new IncrementalNodeID()); } private SimpleNode(NodeID _id) { m_children = new CopyOnWriteArrayList<Node>(); m_id = _id; m_title = ""; m_class = ""; } @Override public List<Node> getChildren() { // return unmodifiable list<node> return Collections.unmodifiableList(m_children); } @Override public boolean isChild(Node _child) { return m_children.contains(_child); } @Override public Node addChild(Node _child) { if(m_children.addIfAbsent(_child)){ return _child; } return null; } @Override public boolean removeChild(Node _child) { return m_children.remove(_child); } @Override public Iterator<Node> iterator() { // return unmodifiable iterator return m_children.iterator(); } @Override public NodeID getID() { return this.m_id; } @Override public void addChildren(List<Node> _children) { this.m_children.addAllAbsent(_children); } @Override public Node cloneNode() { SimpleNode clone = new SimpleNode(m_id.update()); clone.setTitle(getTitle()); clone.setClassName(getClassName()); clone.addChildren(m_children); return clone; } @Override public String getTitle() { return m_title; } @Override public void setTitle(String _title) { m_title = _title; } @Override public String getClassName() { return m_class; } @Override public void setClassName(String _class) { m_class = _class; } @Override public void down(Node _child) { LinkedList<Node> children = new LinkedList<Node>(); //copy and build new list Iterator<Node> itr = iterator(); while(itr.hasNext()){ Node next = itr.next(); if(next == _child && itr.hasNext()){ Node target = itr.next(); children.add(target); } children.add(next); } m_children = new CopyOnWriteArrayList<Node>(children); } @Override public void replace(Node _target, Node _newChild) { Node target = _target; LinkedList<Node> children = new LinkedList<Node>(); for(Node child : m_children){ if(child == target){ children.add(_newChild); target = _newChild; continue; } children.add(child); } m_children = new CopyOnWriteArrayList<Node>(children); } @Override public void up(Node _child) { LinkedList<Node> children = new LinkedList<Node>(); //copy and build new list Iterator<Node> itr = iterator(); while(itr.hasNext()){ Node next = itr.next(); if(next == _child && !children.isEmpty()){ Node target = children.removeLast(); children.add(next); children.add(target); continue; } children.add(next); } m_children = new CopyOnWriteArrayList<Node>(children); } public String toString() { return getTitle()+"["+getID().toString()+"]"; } @Override public void clearChildren() { m_children.clear(); } }