# HG changeset patch # User one # Date 1372754963 -32400 # Node ID 054dc02c117d821282d675c3b7b1cbf4f2a1956b # Parent bf696a6334b2008a9dd8bc4dbbf3bd272314ce9b add test.alice.jungle.codesegment diff -r bf696a6334b2 -r 054dc02c117d src/alice/jungle/transaction/NetworkTransactionManager.java --- a/src/alice/jungle/transaction/NetworkTransactionManager.java Tue Jul 02 11:52:32 2013 +0900 +++ b/src/alice/jungle/transaction/NetworkTransactionManager.java Tue Jul 02 17:49:23 2013 +0900 @@ -3,6 +3,7 @@ import java.io.IOException; import java.util.Iterator; +import alice.jungle.codesegment.LogUpdateCodeSegment; import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; @@ -84,6 +85,8 @@ container.setTreeName(_treeName); container.setUUID(_uuid); container.unconvert(_log); + LogUpdateCodeSegment cs = new LogUpdateCodeSegment(); + cs.ods.update("log", container); } diff -r bf696a6334b2 -r 054dc02c117d src/jungle/test/codesegment/operation/CodeSegmentJournal.java --- a/src/jungle/test/codesegment/operation/CodeSegmentJournal.java Tue Jul 02 11:52:32 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -package jungle.test.codesegment.operation; - -import alice.codesegment.CodeSegment; -import alice.datasegment.CommandType; -import alice.datasegment.Receiver; - -public class CodeSegmentJournal extends CodeSegment { - - Receiver arg1 = ids.create(CommandType.PEEK); - - @Override - public void run() { - - - } - - - - -} diff -r bf696a6334b2 -r 054dc02c117d src/test/alice/jungle/codesegment/CheckDoubleTreeAttr.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/alice/jungle/codesegment/CheckDoubleTreeAttr.java Tue Jul 02 17:49:23 2013 +0900 @@ -0,0 +1,60 @@ +package test.alice.jungle.codesegment; + +import java.nio.ByteBuffer; +import java.util.Iterator; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; + +public class CheckDoubleTreeAttr extends CodeSegment { + + Receiver arg1 = ids.create(CommandType.TAKE); + + public CheckDoubleTreeAttr() { + arg1.setKey("count"); + } + + public void run() { + int count = arg1.asInteger(); + + DoubleJungleManager djm = new DoubleJungleManager(); + Jungle jungle1 = djm.getJungle1(); + Jungle jungle2 = djm.getJungle2(); + JungleTree tree1 = jungle1.getTreeByName("tree"); + JungleTree tree2 = jungle2.getTreeByName("tree"); + + Node node1 = tree1.getRootNode(); + Node node2 = tree2.getRootNode(); + Children chs1 = node1.getChildren(); + Children chs2 = node2.getChildren(); + + Iterator iter1 = chs1.iterator(); + Iterator iter2 = chs2.iterator(); + + for(; iter1.hasNext() && iter2.hasNext();) { + Node n1 = iter1.next(); + Node n2 = iter2.next(); + ByteBuffer b1 = n1.getAttributes().get("key"); + ByteBuffer b2 = n2.getAttributes().get("key"); + String str1 = new String(b1.array()); + String str2 = new String(b2.array()); + if(!str1.equals(str2)) { + System.out.println("Failed "); + System.out.println("str1 "+ str1); + System.out.println("str2 "+ str2); + System.exit(0); + } else { + System.out.println("success: " + str1); + } + + } + + + } + +} diff -r bf696a6334b2 -r 054dc02c117d src/test/alice/jungle/codesegment/CopyAttrJungle2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/alice/jungle/codesegment/CopyAttrJungle2.java Tue Jul 02 17:49:23 2013 +0900 @@ -0,0 +1,57 @@ +package test.alice.jungle.codesegment; + +import java.io.IOException; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; +import jungle.test.codesegment.operation.JungleManager; +import jungle.test.core.practice.PrintChildrenAttribute; +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; + +public class CopyAttrJungle2 extends CodeSegment { + + Receiver logReceiver = ids.create(CommandType.TAKE); + Receiver countReceiver = ids.create(CommandType.TAKE); + + public CopyAttrJungle2() { + logReceiver.setKey("log"); + countReceiver.setKey("count2"); + } + + public void run() { + System.out.println("CopyAttrJungle2"); + int count = countReceiver.asInteger(); + DefaultTreeOperationLogContainer container = logReceiver.asClass(DefaultTreeOperationLogContainer.class); + DefaultTreeOperationLog log = null; + try { + log = container.convert(); + } catch (IOException e) { + e.printStackTrace(); + System.exit(0); + } + DoubleJungleManager djm = new DoubleJungleManager(); + Jungle jungle2 = djm.getJungle2(); + JungleTree tree = jungle2.getTreeByName("tree"); + + JungleTreeEditor editor = tree.getTreeEditor(); + Either either = djm.edit(editor, log); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + editor.success(); + new CheckDoubleTreeAttr(); + ods.update("count", count); + + + + } + +} diff -r bf696a6334b2 -r 054dc02c117d src/test/alice/jungle/codesegment/DoubleJungleManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/alice/jungle/codesegment/DoubleJungleManager.java Tue Jul 02 17:49:23 2013 +0900 @@ -0,0 +1,84 @@ +package test.alice.jungle.codesegment; + +import java.nio.ByteBuffer; + +import alice.jungle.core.NetworkDefaultJungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; + +public class DoubleJungleManager { + + static Jungle jungle1 = new NetworkDefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser())); + static Jungle jungle2 = new NetworkDefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser())); + + + public DoubleJungleManager() { + + } + + public Jungle getJungle1() { + return jungle1; + } + + public Jungle getJungle2() { + return jungle2; + } + + + public Either edit(JungleTreeEditor _editor ,TreeOperationLog _log) { + JungleTreeEditor editor = _editor; + Either either = null; + for (TreeOperation op : _log) { + either = _edit(editor, op); + if(either.isA()) { + return either; + } + editor = either.b(); + } + return either; + } + + private Either _edit(JungleTreeEditor editor, + TreeOperation op) { + NodePath path = op.getNodePath(); + NodeOperation nodeOp = op.getNodeOperation(); + Command c = nodeOp.getCommand(); + String str = ""; + String key = ""; + switch (c) { + case PUT_ATTRIBUTE: + key = nodeOp.getKey(); + ByteBuffer value = nodeOp.getValue(); + if (value.limit() < 100) { + str = String.format("key:%s,value:%s", key, + new String(value.array())); + } else { + str = String.format("key:%s,value:%d", key, value.limit()); + } + return editor.putAttribute(path, key, value); + case DELETE_ATTRIBUTE: + key = nodeOp.getKey(); + str = String.format("key:%s", nodeOp.getKey()); + return editor.deleteAttribute(path, key); + case APPEND_CHILD: + str = String.format("pos:%d", nodeOp.getPosition()); + return editor.addNewChildAt(path, 0); + case DELETE_CHILD: + str = String.format("pos:%d", nodeOp.getPosition()); + return editor.deleteChildAt(path, 0); + } + return null; + } +} diff -r bf696a6334b2 -r 054dc02c117d src/test/alice/jungle/codesegment/LocalDoubleJungleTree.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/alice/jungle/codesegment/LocalDoubleJungleTree.java Tue Jul 02 17:49:23 2013 +0900 @@ -0,0 +1,20 @@ +package test.alice.jungle.codesegment; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; + +public class LocalDoubleJungleTree { + + public static void main(String[] args) { + System.out.println("LocalDoubleJungleTree"); + DoubleJungleManager djm = new DoubleJungleManager(); + Jungle jungle1 = djm.getJungle1(); + Jungle jungle2 = djm.getJungle2(); + jungle1.createNewTree("tree"); + jungle2.createNewTree("tree"); + + PutAttrJungle1 cs = new PutAttrJungle1(); + cs.ods.update("count1", 0); + + } + +} diff -r bf696a6334b2 -r 054dc02c117d src/test/alice/jungle/codesegment/PutAttrJungle1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/alice/jungle/codesegment/PutAttrJungle1.java Tue Jul 02 17:49:23 2013 +0900 @@ -0,0 +1,47 @@ +package test.alice.jungle.codesegment; + +import java.nio.ByteBuffer; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; + +public class PutAttrJungle1 extends CodeSegment { + + Receiver arg1 = ids.create(CommandType.TAKE); + + public PutAttrJungle1() { + arg1.setKey("count1"); + } + + public void run() { + System.out.println("PutAttrJungle1"); + int count = arg1.asInteger(); + Jungle jungle1 = new DoubleJungleManager().getJungle1(); + JungleTree tree = jungle1.getTreeByName("tree"); + JungleTreeEditor editor = tree.getTreeEditor(); + DefaultNodePath root = new DefaultNodePath(); + Either either = editor.addNewChildAt(root, 0); + if(either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.putAttribute(root.add(0), "key", ByteBuffer.wrap("message".getBytes())); + if(either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + editor.success(); + + new CopyAttrJungle2(); + ods.update("count2", count); + + } + +}