changeset 180:4493dd7692ce

add FindMatrixTest
author tatsuki
date Mon, 15 Sep 2014 14:04:22 +0900
parents 2828205bdc3a
children 28a8625d78bb
files src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java src/main/java/alice/jungle/persistent/PersistentChangeSet.java src/main/java/alice/jungle/persistent/PersistentTransactionManager.java src/main/java/alice/jungle/transaction/NetworkTransactionManager.java src/main/java/app/bbs/NetworkJungleBulletinBoard.java src/main/java/app/bbs/thinks/EditNodeName.java src/test/java/alice/jungle/log/example/FindMatrixTest.java
diffstat 7 files changed, 131 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Sat Sep 13 12:54:02 2014 +0900
+++ b/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Mon Sep 15 14:04:22 2014 +0900
@@ -1,5 +1,6 @@
 package alice.jungle.datasegment.transformer;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
@@ -7,6 +8,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
 
 import org.msgpack.annotation.Message;
@@ -54,7 +56,7 @@
 	}
 
 	@Override
-	public TreeMap<String,TreeMap<String, List<TreeNode>>> getIndex() {
+	public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 		// TODO Auto-generated method stub
 		return null;
 	}
--- a/src/main/java/alice/jungle/persistent/PersistentChangeSet.java	Sat Sep 13 12:54:02 2014 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentChangeSet.java	Mon Sep 15 14:04:22 2014 +0900
@@ -4,8 +4,10 @@
 import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
 public class PersistentChangeSet implements ChangeSet 
 {
@@ -67,7 +69,7 @@
 	}
 
 	@Override
-	public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+	public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 		// TODO Auto-generated method stub
 		return null;
 	}
--- a/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Sat Sep 13 12:54:02 2014 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Mon Sep 15 14:04:22 2014 +0900
@@ -5,6 +5,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
@@ -16,6 +17,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
 public class PersistentTransactionManager implements TransactionManager { 
 	private final AtomicReservableReference<TreeContext> repository;
@@ -35,7 +37,7 @@
 	}
 	
 	@Override
-	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log,TreeMap<String, TreeMap<String, List<TreeNode>>> index) {
+	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log,TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index) {
 		ChangeSet cs = tip.getChangeSet();
 		long currentRevision = cs.revision();
 		long nextRevision = currentRevision + 1;
--- a/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java	Sat Sep 13 12:54:02 2014 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java	Mon Sep 15 14:04:22 2014 +0900
@@ -8,6 +8,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
@@ -21,6 +22,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
 public class NetworkTransactionManager implements TransactionManager
 {
@@ -42,7 +44,7 @@
 	}
 	
 	@Override
-	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log, TreeMap<String,TreeMap<String, List<TreeNode>>> index) {
+	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log,TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index) {
 		ChangeSet cs = tip.getChangeSet();
 		long currentRevision = cs.revision();
 		long nextRevision = currentRevision + 1;
--- a/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Sat Sep 13 12:54:02 2014 +0900
+++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Mon Sep 15 14:04:22 2014 +0900
@@ -20,6 +20,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+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.TreeNode;
@@ -35,6 +36,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
 import junit.framework.Assert;
 
@@ -204,7 +206,7 @@
 				return new LoggingNode(node, op);
 			}
 			@Override
-			public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+			public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 				// TODO Auto-generated method stub
 				return null;
 			}
@@ -277,7 +279,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
@@ -334,7 +336,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
@@ -387,7 +389,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
@@ -443,7 +445,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
@@ -492,7 +494,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
@@ -582,7 +584,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
@@ -626,7 +628,7 @@
 				}
 
 				@Override
-				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
 					// TODO Auto-generated method stub
 					return null;
 				}
--- a/src/main/java/app/bbs/thinks/EditNodeName.java	Sat Sep 13 12:54:02 2014 +0900
+++ b/src/main/java/app/bbs/thinks/EditNodeName.java	Mon Sep 15 14:04:22 2014 +0900
@@ -6,6 +6,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang.StringEscapeUtils;
+
 import app.bbs.NetworkBulletinBoard;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/log/example/FindMatrixTest.java	Mon Sep 15 14:04:22 2014 +0900
@@ -0,0 +1,107 @@
+package alice.jungle.log.example;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+import fj.Ord;
+import fj.data.List;
+import fj.data.TreeMap;
+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.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
+import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
+import junit.framework.TestCase;
+import alice.jungle.operations.NetworkNodePath;
+import alice.jungle.persistent.PersistentJournal;
+import alice.jungle.persistent.PersistentJungle;
+import alice.jungle.transaction.JungleUpdater;
+import app.bbs.NetworkBulletinBoard;
+import app.bbs.NetworkJungleBulletinBoard;
+
+public class FindMatrixTest extends TestCase {
+	
+	public class SearchQuery implements Query{
+		
+		private String key;
+		private String searchAttribute;
+		
+		public SearchQuery (String key, String searchAttribute){
+			this.key = key;
+			this.searchAttribute = searchAttribute;
+		}
+		
+		@Override
+		public boolean condition(TreeNode _node) {
+			ByteBuffer attribute = _node.getAttributes().get(key);
+			if(attribute != null){
+				byte[] byteAttribute = attribute.array();
+				String str = new String(byteAttribute);
+				System.out.println(str);
+				return str.equals(searchAttribute);
+			}
+			return false;
+		}
+
+		@Override
+		public List<Pair<String, String>> indexCondition() {
+			// TODO Auto-generated method stub
+			return null;
+		}
+		
+	};
+	
+	public static void main(String[] args) throws IOException {
+		PersistentJournal journal1 = new PersistentJournal();
+		journal1.setInputFile(new File("./log/1410589309338.log"));
+		journal1.setOutputFile(new File("./log/test.log"));
+		Jungle jungle2 = new PersistentJungle(journal1, "uuid2", new DefaultTreeEditor(new DefaultTraverser()));
+		ChangeListReader reader = journal1.getReader();
+		int roopCount = 0;
+		String treeName = null;
+		for (ChangeList chList : reader) {
+			roopCount++;
+			treeName = chList.getTreeName();
+			JungleTree tree2 = jungle2.getTreeByName(treeName);
+			if(tree2 == null) {
+				tree2 = jungle2.createNewTree(treeName);
+			}
+			JungleTreeEditor editor2 = tree2.getTreeEditor();
+			Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList);
+			assertFalse(either2.isA());
+			editor2 = either2.b();
+			editor2.success();
+		}
+		
+		
+		JungleTree tree2 = jungle2.getTreeByName(treeName);
+		TreeNode root = tree2.getRootNode();
+		TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index = TreeMap.empty(Ord.stringOrd);
+	    DefaultTraverser traverser = new DefaultTraverser();
+	    DefaultTreeEditor treeEditor = new DefaultTreeEditor(traverser);
+	    JungleTreeEditor editor = new DefaultJungleTreeEditor(root,null,treeEditor,null);
+		InterfaceTraverser ifTraverser = new  InterfaceTraverser(root,index,editor);
+		String key = "mes";
+		String attribute = "株式会社フタコ放送";
+		
+		Query query = new FindMatrixTest().new SearchQuery(key, attribute);
+		Iterator<Pair<TreeNode, NodePath>> searchNode = ifTraverser.find(query);
+		TreeNode node = searchNode.next().left();
+		byte[] nodeAttibute = node.getAttributes().get(key).array();
+		System.out.println(new String(nodeAttibute));
+	}
+}