diff src/test/alice/jungle/codesegment/DoubleJungleManager.java @ 35:054dc02c117d

add test.alice.jungle.codesegment
author one
date Tue, 02 Jul 2013 17:49:23 +0900
parents
children ed4c2e6ab5d1
line wrap: on
line diff
--- /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<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
+		JungleTreeEditor editor = _editor;
+		Either<Error, JungleTreeEditor> either = null;
+		for (TreeOperation op : _log) { 
+			either = _edit(editor, op);
+			if(either.isA()) {
+				return either;
+			}
+			editor = either.b();
+		}
+		return either;
+	}
+	
+	private Either<Error, JungleTreeEditor> _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;
+	}
+}