Mercurial > hg > Members > shoshi > TreeCMSv1
view src/treecms/proto/test/SimpleEditorTest2.java @ 30:8d733b98c5de
added Node API
setLinkedNode,getLinkedNode for create link to other node.
but not implemented yet.
author | Shoshi TAMAKI |
---|---|
date | Wed, 10 Nov 2010 00:36:51 +0900 |
parents | 64359341c04a |
children |
line wrap: on
line source
package treecms.proto.test; /** * SimpleEditorTest2 * * testMultiThread * test concurrent monotonic-tree modification */ import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import org.junit.Test; import treecms.proto.api.Node; import treecms.proto.simple.SimpleEditor; import treecms.proto.simple.SimpleNode; import treecms.proto.util.PreOrderTreeWalker; public class SimpleEditorTest2 { public static void main(String _args[]) { new SimpleEditorTest2(); } private AtomicReference<Node> m_contents; public SimpleEditorTest2() { Node root = new SimpleNode(); root.setTitle("root"); Node c1 = root.addChild(new SimpleNode()); c1.setTitle("c1"); Node c2 = root.addChild(new SimpleNode()); c2.setTitle("c2"); Node c11 = c1.addChild(new SimpleNode()); c11.setTitle("c11"); Node c12 = c1.addChild(new SimpleNode()); c12.setTitle("c12"); Node c121 = c12.addChild(new SimpleNode()); c121.setTitle("c121"); m_contents = new AtomicReference<Node>(root); testMultiThread(); } @Test public void testMultiThread() { int threads = 10; //number of threads. final int modifyCount = 100; ExecutorService service = Executors.newFixedThreadPool(threads); for(int i = 0;i < threads;i ++){ service.execute(new Runnable(){ @Override public void run() { SimpleEditor editor = new SimpleEditor(m_contents); Random random = new Random(); for(int i = 0;i < modifyCount;i ++){ List<Node> nodeList = transform(new PreOrderTreeWalker(m_contents.get())); //get random target from nodelist Node target = nodeList.get(Math.abs(random.nextInt(nodeList.size()))); //edit target editor.edit(target); //force commit. editor.commit(true); } } /* * convert iterator to list */ public List<Node> transform(PreOrderTreeWalker _walker) { LinkedList<Node> nodeList = new LinkedList<Node>(); for(Node node : _walker){ nodeList.add(node); } return nodeList; } }); } service.shutdown(); try { service.awaitTermination(Long.MAX_VALUE,TimeUnit.DAYS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } print(m_contents.get(),0); } private void print(Node _root,int _indent) { for(int i = 0;i < _indent;i ++){ System.out.print("\t"); } System.out.println(_root.getTitle()+"["+_root.getID()+"]"); for(Node child : _root.getChildren()){ print(child,_indent+1); } } }