Mercurial > hg > Members > shoshi > TreeCMSv1
view src/treecms/proto/simple/SimpleNode.java @ 32:02ef906d0341
2010/11/18
added GUIEditor
Monotonic-tree GUI editor.
modified Editor API
bug fix (not done yet , still buggy)
author | shoshi |
---|---|
date | Thu, 18 Nov 2010 19:05:23 +0900 |
parents | ff4d4704e5d7 |
children | c0a0fa870e6e |
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) { LinkedList<Node> children = new LinkedList<Node>(); for(Node child : m_children){ if(child == _target){ children.add(_newChild); continue; } children.add(child); } } @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()+"]"; } }