changeset 13:3bccd745f2e2

bug fix
author shoshi
date Sun, 29 Aug 2010 12:07:03 +0900
parents c8e31aaac297
children ce6e4523b284
files src/treecms/proto/edit/type1/EditableNodeAPITreeBuilder.java src/treecms/proto/edit/type2/EditableNodeAPI.java src/treecms/proto/edit/type2/EditableNodeAPITreeBuilder.java src/treecms/proto/simple/SimpleNodeAPITreeBuilder.java src/treecms/proto/test/PreOrderTreeWalkerRecursive.java src/treecms/proto/test/Test1.java src/treecms/proto/test/TestMultiThread1.java src/treecms/proto/test/TestMultiThread2.java src/treecms/proto/test/UUIDTest.java
diffstat 9 files changed, 216 insertions(+), 234 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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<NodeAPI> m_children;
-	
-	public EditableNodeAPI(NodeAPI _orig)
-	{
-		m_orig = _orig;
-		if(m_orig != null){
-			m_flagChanged = false;
-		}else{
-			m_flagChanged = true;
-		}
-		
-		m_children = new LinkedList<NodeAPI>();
-		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<NodeAPI> 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<NodeAPI> iterator() {
-		// TODO Auto-generated method stub
-		if(setandgetChanged(false)){
-			return m_children.iterator();
-		}
-		return m_orig.iterator();
-	}
-}
--- 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<NodeAPI> 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);
-	}
-
-}
--- 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());
 	}
 	
 }
--- 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<NodeAPI>
+{
+	private NodeAPI m_root;
+	
+	public PreOrderTreeWalkerRecursive(NodeAPI _root)
+	{
+		m_root = _root;
+	}
+
+	@Override
+	public Iterator<NodeAPI> iterator()
+	{
+		// TODO Auto-generated method stub
+		return new PreOrderRecursiveIterator(m_root);
+	}
 
-public class PreOrderTreeWalkerRecursive {
+	class PreOrderRecursiveIterator implements Iterator<NodeAPI>
+	{
+		private NodeAPI m_root;
+		private LinkedList<Iterator<NodeAPI>> m_itrList;
+		
+		private int m_pos;
+		
+		public PreOrderRecursiveIterator(NodeAPI _root)
+		{
+			m_root = _root;
+			m_itrList = new LinkedList<Iterator<NodeAPI>>();
+			for(NodeAPI child : m_root.getChildList()){
+				Iterator<NodeAPI> 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");
+		}
+		
+	}
 }
--- 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<NodeAPI> itr = walker.iterator();
 		while(itr.hasNext()){
 			NodeAPI node = itr.next();
--- 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<NodeAPI> itr = walker.iterator();
 				while(itr.hasNext()){
 					NodeAPI node = itr.next();
--- /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<NodeAPI> 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<NodeAPI> 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<NodeAPI> itr = walker.iterator();
+				while(itr.hasNext()){
+					NodeAPI node = itr.next();
+					if((new Random()).nextBoolean()){
+						node.setTitle("edit");
+					}
+				}
+			}
+			//
+		}
+	}
+}
--- 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();
 			}