view src/test/java/alice/jungle/log/example/FindMatrixTest.java @ 181:4493dd7692ce

add FindMatrixTest
author tatsuki
date Mon, 15 Sep 2014 14:04:22 +0900
parents
children bf08205d5c5f
line wrap: on
line source

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));
	}
}