# HG changeset patch # User shoshi # Date 1283008268 -32400 # Node ID c8e31aaac297582b183804ea491102ed910c4ade # Parent bb802051dab35fb9db410dd41cdf8369490a29fa added TestMultiThread1 , seems like java.util.UUID is not thread-safe diff -r bb802051dab3 -r c8e31aaac297 src/treecms/proto/edit/EditableNodeAPI.java --- a/src/treecms/proto/edit/EditableNodeAPI.java Sat Aug 28 20:39:41 2010 +0900 +++ b/src/treecms/proto/edit/EditableNodeAPI.java Sun Aug 29 00:11:08 2010 +0900 @@ -8,144 +8,70 @@ 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() - { + public Iterator iterator() { // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return this.m_children; - } - return this.m_orig.getChildList(); + return null; } @Override - public boolean isChild(NodeAPI _child) - { + public List getChildList() { // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return m_children.contains(_child); - } - return m_orig.getChildList().contains(_child); + return null; + } + + @Override + public boolean isChild(NodeAPI _child) { + // TODO Auto-generated method stub + return false; } @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(); + return null; } @Override public String getTitle() { // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return this.m_title; - } - return m_orig.getClassName(); + return null; } - - @Override - public Iterator iterator() { - // TODO Auto-generated method stub - if(setandgetChanged(false)){ - return m_children.iterator(); - } - return m_orig.iterator(); - } -} +} \ No newline at end of file diff -r bb802051dab3 -r c8e31aaac297 src/treecms/proto/edit/EditableNodeAPITreeBuilder.java --- a/src/treecms/proto/edit/EditableNodeAPITreeBuilder.java Sat Aug 28 20:39:41 2010 +0900 +++ b/src/treecms/proto/edit/EditableNodeAPITreeBuilder.java Sun Aug 29 00:11:08 2010 +0900 @@ -8,60 +8,24 @@ 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; - } + private NodeAPITreeBuilder m_builder; - public void discard() - { - //discard changes. - m_clone = clone(m_root); - } - - public void commit() - { - //commit changes - } - - public void push() + public EditableNodeAPITreeBuilder(NodeAPITreeBuilder _builder) { - //push changes - } - - public String generateUUID() - { - return UUID.randomUUID().toString(); - } - - @Override - public NodeAPI getContents() { - // TODO Auto-generated method stub - return this.m_clone; + m_builder = _builder; } @Override - public NodeAPI createNode() { + public NodeAPI getContents() + { // TODO Auto-generated method stub - return new EditableNodeAPI(null); + return null; } + @Override + public NodeAPI createNode() + { + // TODO Auto-generated method stub + return null; + } } diff -r bb802051dab3 -r c8e31aaac297 src/treecms/proto/test/Test2.java --- a/src/treecms/proto/test/Test2.java Sat Aug 28 20:39:41 2010 +0900 +++ b/src/treecms/proto/test/Test2.java Sun Aug 29 00:11:08 2010 +0900 @@ -4,10 +4,10 @@ import treecms.proto.api.*; import treecms.proto.simple.*; -import treecms.proto.edit.*; +import treecms.proto.edit.type1.*; /* - * treecms.proto.edit Test + * treecms.proto.edit.type2 Test */ public class Test2 @@ -56,6 +56,7 @@ Iterator itr = walker.iterator(); while(itr.hasNext()){ NodeAPI node = itr.next(); + node.setTitle(node.getTitle()+":edit"); System.out.println(node.getTitle()); } } diff -r bb802051dab3 -r c8e31aaac297 src/treecms/proto/test/TestMultiThread1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/test/TestMultiThread1.java Sun Aug 29 00:11:08 2010 +0900 @@ -0,0 +1,118 @@ +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 TestMultiThread1 +{ + public static void main(String _arg[]) throws Exception + { + new TestMultiThread1(); + } + + public TestMultiThread1() 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"); + NodeAPI child13 = builder.createNode(); + child13.setTitle("13"); + + child1.addChild(child11); + child1.addChild(child12); + child1.addChild(child13); + + NodeAPI child21 = builder.createNode(); + child21.setTitle("21"); + + child2.addChild(child21); + + NodeAPI child211 = builder.createNode(); + child211.setTitle("211"); + NodeAPI child212 = builder.createNode(); + child212.setTitle("212"); + + child21.addChild(child211); + child21.addChild(child212); + + Thread th1 = new RenderingWorkerThread(root); + Thread th2 = new EditingWorkerThread(root); + Thread th3 = new EditingWorkerThread(root); + + th1.start(); + th2.start(); + th3.start(); + + th1.join(); + th2.join(); + th3.join(); + } + + class RenderingWorkerThread extends Thread + { + private NodeAPI m_root; + + public RenderingWorkerThread(NodeAPI _node) + { + m_root = _node; + } + + public void run() + { + PreOrderTreeWalker walker = new PreOrderTreeWalker(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); + 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(); + if((new Random()).nextBoolean()){ + node.setTitle("edit"); + } + } + } + // + } + } +} diff -r bb802051dab3 -r c8e31aaac297 src/treecms/proto/test/UUIDTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/proto/test/UUIDTest.java Sun Aug 29 00:11:08 2010 +0900 @@ -0,0 +1,40 @@ +package treecms.proto.test; + +import java.util.*; + +public class UUIDTest extends Thread +{ + public static void main(String _args[]) + { + Thread th1 = new UUIDTest(); + Thread th2 = new UUIDTest(); + Thread th3 = new UUIDTest(); + Thread th4 = new UUIDTest(); + + th1.start(); + th2.start(); + th3.start(); + th4.start(); + + try { + th1.join(); + th2.join(); + th3.join(); + th4.join(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void run() + { + for(int i = 0;i < 3;i ++){ + try{ + System.out.println(UUID.randomUUID().toString()); + }catch(Exception _err){ + _err.printStackTrace(); + } + } + } +}