# HG changeset patch # User shoshi # Date 1283051223 -32400 # Node ID 3bccd745f2e233974fd3540f750feb16b098f08e # Parent c8e31aaac297582b183804ea491102ed910c4ade bug fix diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/edit/type1/EditableNodeAPITreeBuilder.java --- a/src/treecms/proto/edit/type1/EditableNodeAPITreeBuilder.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/edit/type1/EditableNodeAPITreeBuilder.java Sun Aug 29 12:07:03 2010 +0900 @@ -51,7 +51,7 @@ public String generateUUID() { - return UUID.randomUUID().toString(); + return Long.toString(System.currentTimeMillis()); } @Override diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/edit/type2/EditableNodeAPI.java --- a/src/treecms/proto/edit/type2/EditableNodeAPI.java Sun Aug 29 00:11:08 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -package treecms.proto.edit.type2; - -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import treecms.proto.api.NodeAPI; - -public class EditableNodeAPI implements NodeAPI -{ - private boolean m_flagChanged; - - private String m_class; - private String m_title; - - private NodeAPI m_orig; - - private LinkedList m_children; - - public EditableNodeAPI(NodeAPI _orig) - { - m_orig = _orig; - if(m_orig != null){ - m_flagChanged = false; - }else{ - m_flagChanged = true; - } - - m_children = new LinkedList(); - m_class = ""; - m_title = ""; - } - - void _resetFlag() - { - m_flagChanged = false; - } - - public synchronized boolean setandgetChanged(boolean _flag) - { - m_flagChanged = m_flagChanged | _flag; - return m_flagChanged; - } - - public void setOriginal(NodeAPI _orig) - { - m_orig = _orig; - } - - public NodeAPI getOriginal() - { - return m_orig; - } - - @Override - public List getChildList() - { - // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return this.m_children; - } - return this.m_orig.getChildList(); - } - - @Override - public boolean isChild(NodeAPI _child) - { - // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return m_children.contains(_child); - } - return m_orig.getChildList().contains(_child); - } - - @Override - public void addChild(NodeAPI _child) { - // TODO Auto-generated method stub - if(m_children.add(_child)){ - setandgetChanged(true); - } - } - - @Override - public void removeChild(NodeAPI _child) { - // TODO Auto-generated method stub - if(m_children.remove(_child)){ - setandgetChanged(true); - } - } - - @Override - public void up(NodeAPI _child) { - // TODO Auto-generated method stub - int curPos = m_children.indexOf(_child); - if(curPos - 1 > 0){ - m_children.add(curPos - 1,m_children.remove(curPos)); - setandgetChanged(true); - } - } - - @Override - public void down(NodeAPI _child) { - // TODO Auto-generated method stub - int curPos = m_children.indexOf(_child); - if(curPos + 1 < m_children.size()){ - m_children.add(curPos + 1,m_children.remove(curPos)); - m_flagChanged = true; - } - } - - @Override - public void setClassName(String _class) { - // TODO Auto-generated method stub - this.m_class = _class; - setandgetChanged(true); - } - - @Override - public void setTitle(String _title) { - // TODO Auto-generated method stub - this.m_title = _title; - setandgetChanged(true); - } - - @Override - public String getClassName() { - // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return this.m_class; - } - return m_orig.getClassName(); - } - - @Override - public String getTitle() { - // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return this.m_title; - } - return m_orig.getClassName(); - } - - @Override - public Iterator iterator() { - // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return m_children.iterator(); - } - return m_orig.iterator(); - } -} diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/edit/type2/EditableNodeAPITreeBuilder.java --- a/src/treecms/proto/edit/type2/EditableNodeAPITreeBuilder.java Sun Aug 29 00:11:08 2010 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -package treecms.proto.edit.type2; - -import java.util.List; -import java.util.UUID; - -import treecms.proto.api.NodeAPI; -import treecms.proto.api.NodeAPITreeBuilder; - -public class EditableNodeAPITreeBuilder implements NodeAPITreeBuilder -{ - private NodeAPI m_root; - private NodeAPI m_clone; - - public EditableNodeAPITreeBuilder(NodeAPI _root) - { - m_root = _root; - m_clone = clone(_root); - } - - private NodeAPI clone(NodeAPI _orig) - { - EditableNodeAPI clone = new EditableNodeAPI(_orig); - - List children = _orig.getChildList(); - for(NodeAPI child : children){ - //System.out.println(child.getTitle()); - clone.addChild(clone(child)); - } - - clone._resetFlag(); - return clone; - } - - public void discard() - { - //discard changes. - m_clone = clone(m_root); - } - - public void commit() - { - //commit changes - } - - public void push() - { - //push changes - } - - public String generateUUID() - { - return UUID.randomUUID().toString(); - } - - @Override - public NodeAPI getContents() { - // TODO Auto-generated method stub - return this.m_clone; - } - - @Override - public NodeAPI createNode() { - // TODO Auto-generated method stub - return new EditableNodeAPI(null); - } - -} diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/simple/SimpleNodeAPITreeBuilder.java --- a/src/treecms/proto/simple/SimpleNodeAPITreeBuilder.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/simple/SimpleNodeAPITreeBuilder.java Sun Aug 29 12:07:03 2010 +0900 @@ -2,8 +2,6 @@ import treecms.proto.api.*; -import java.util.*; - public class SimpleNodeAPITreeBuilder implements NodeAPITreeBuilder { private NodeAPI m_root; @@ -26,7 +24,7 @@ String generateUUID() { - return UUID.randomUUID().toString(); + return Long.toString(System.currentTimeMillis()); } } diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/test/PreOrderTreeWalkerRecursive.java --- a/src/treecms/proto/test/PreOrderTreeWalkerRecursive.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/test/PreOrderTreeWalkerRecursive.java Sun Aug 29 12:07:03 2010 +0900 @@ -1,5 +1,90 @@ package treecms.proto.test; +import java.util.Iterator; +import java.util.LinkedList; + +import treecms.proto.api.NodeAPI; + +public class PreOrderTreeWalkerRecursive implements Iterable +{ + private NodeAPI m_root; + + public PreOrderTreeWalkerRecursive(NodeAPI _root) + { + m_root = _root; + } + + @Override + public Iterator iterator() + { + // TODO Auto-generated method stub + return new PreOrderRecursiveIterator(m_root); + } -public class PreOrderTreeWalkerRecursive { + class PreOrderRecursiveIterator implements Iterator + { + private NodeAPI m_root; + private LinkedList> m_itrList; + + private int m_pos; + + public PreOrderRecursiveIterator(NodeAPI _root) + { + m_root = _root; + m_itrList = new LinkedList>(); + for(NodeAPI child : m_root.getChildList()){ + Iterator itr = new PreOrderRecursiveIterator(child); + m_itrList.add(itr); + } + + m_pos = -1; + } + + @Override + public boolean hasNext() + { + // TODO Auto-generated method stub + int pos = m_pos; + + if(pos < 0){ + return true; + } + + while(pos < m_itrList.size()){ + if(m_itrList.get(pos).hasNext()){ + return true; + } + pos++; + } + + return false; + } + @Override + public NodeAPI next() + { + // TODO Auto-generated method stub + if(m_pos < 0){ + m_pos ++; + return m_root; + } + + while(m_pos < m_itrList.size()){ + NodeAPI next = m_itrList.get(m_pos).next(); + if(next != null){ + return next; + } + m_pos ++; + } + + return null; + } + + @Override + public void remove() + { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("cant remove from itrerator"); + } + + } } diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/test/Test1.java --- a/src/treecms/proto/test/Test1.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/test/Test1.java Sun Aug 29 12:07:03 2010 +0900 @@ -14,39 +14,39 @@ root.setTitle("root"); NodeAPI child1 = builder.createNode(); - child1.setTitle("child1"); + child1.setTitle("+-child1"); NodeAPI child2 = builder.createNode(); - child2.setTitle("child2"); + child2.setTitle("+-child2"); root.addChild(child1); root.addChild(child2); NodeAPI child11 = builder.createNode(); - child11.setTitle("child11"); + child11.setTitle(" +-child11"); NodeAPI child12 = builder.createNode(); - child12.setTitle("child12"); + child12.setTitle(" +-child12"); NodeAPI child13 = builder.createNode(); - child13.setTitle("child13"); + child13.setTitle(" +-child13"); child1.addChild(child11); child1.addChild(child12); child1.addChild(child13); NodeAPI child21 = builder.createNode(); - child21.setTitle("child21"); + child21.setTitle(" +-child21"); child2.addChild(child21); NodeAPI child211 = builder.createNode(); - child211.setTitle("child211"); + child211.setTitle(" +-child211"); NodeAPI child212 = builder.createNode(); - child212.setTitle("child212"); + child212.setTitle(" +-child212"); child21.addChild(child211); child21.addChild(child212); - PreOrderTreeWalker walker = new PreOrderTreeWalker(root); + PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(root); Iterator itr = walker.iterator(); while(itr.hasNext()){ NodeAPI node = itr.next(); diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/test/TestMultiThread1.java --- a/src/treecms/proto/test/TestMultiThread1.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/test/TestMultiThread1.java Sun Aug 29 12:07:03 2010 +0900 @@ -103,7 +103,6 @@ NodeAPITreeBuilder builder = new EditableNodeAPITreeBuilder(m_root); PreOrderTreeWalker walker = new PreOrderTreeWalker(builder.getContents()); for(int i = 0;i < 3;i ++){ - String result = ""; Iterator itr = walker.iterator(); while(itr.hasNext()){ NodeAPI node = itr.next(); diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/test/TestMultiThread2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/test/TestMultiThread2.java Sun Aug 29 12:07:03 2010 +0900 @@ -0,0 +1,112 @@ +package treecms.proto.test; + +import java.util.Iterator; +import java.util.Random; + +import treecms.proto.api.NodeAPI; +import treecms.proto.api.NodeAPITreeBuilder; +import treecms.proto.edit.type1.*; +import treecms.proto.simple.SimpleNodeAPITreeBuilder; + +public class TestMultiThread2 +{ + public static void main(String _arg[]) throws Exception + { + new TestMultiThread2(); + } + + public TestMultiThread2() throws Exception + { + NodeAPITreeBuilder builder = new SimpleNodeAPITreeBuilder(); + NodeAPI root = builder.getContents(); + root.setTitle("t"); + + NodeAPI child1 = builder.createNode(); + child1.setTitle("1"); + NodeAPI child2 = builder.createNode(); + child2.setTitle("2"); + + root.addChild(child1); + root.addChild(child2); + + NodeAPI child11 = builder.createNode(); + child11.setTitle("11"); + NodeAPI child12 = builder.createNode(); + child12.setTitle("12"); + + child1.addChild(child11); + child1.addChild(child12); + + NodeAPI child21 = builder.createNode(); + child21.setTitle("21"); + + child2.addChild(child21); + + Thread th2 = new EditingWorkerThread(root); + Thread th3 = new EditingWorkerThread(root); + + th2.start(); + th3.start(); + + th2.join(); + th3.join(); + + PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(root); + String result = ""; + Iterator itr = walker.iterator(); + while(itr.hasNext()){ + NodeAPI node = itr.next(); + result += (node.getTitle() + "\t"); + } + System.out.println(result); + } + + class RenderingWorkerThread extends Thread + { + private NodeAPI m_root; + + public RenderingWorkerThread(NodeAPI _node) + { + m_root = _node; + } + + public void run() + { + PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(m_root); + for(int i = 0;i < 3;i ++){ + String result = ""; + Iterator itr = walker.iterator(); + while(itr.hasNext()){ + NodeAPI node = itr.next(); + result += (node.getTitle() + " "); + } + System.out.println(result); + } + } + } + + class EditingWorkerThread extends Thread + { + private NodeAPI m_root; + + public EditingWorkerThread(NodeAPI _node) + { + m_root = _node; + } + public void run() + { + NodeAPITreeBuilder builder = new EditableNodeAPITreeBuilder(m_root); + PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(builder.getContents()); + for(int i = 0;i < 3;i ++){ + Iterator itr = walker.iterator(); + while(itr.hasNext()){ + NodeAPI node = itr.next(); + if((new Random()).nextBoolean()){ + node.setTitle("edit"); + } + } + } + // + } + } +} diff -r c8e31aaac297 -r 3bccd745f2e2 src/treecms/proto/test/UUIDTest.java --- a/src/treecms/proto/test/UUIDTest.java Sun Aug 29 00:11:08 2010 +0900 +++ b/src/treecms/proto/test/UUIDTest.java Sun Aug 29 12:07:03 2010 +0900 @@ -27,11 +27,17 @@ } } + public static synchronized UUID getUUID() + { + return UUID.randomUUID(); + } + public void run() { for(int i = 0;i < 3;i ++){ try{ - System.out.println(UUID.randomUUID().toString()); + //System.out.println(UUID.randomUUID().toString()); + System.out.println(UUIDTest.getUUID()); }catch(Exception _err){ _err.printStackTrace(); }