view src/test/java/alice/jungle/PersistenJournalTest.java @ 105:f9e29a52efd3

Move some files
author one
date Tue, 26 Nov 2013 06:43:10 +0900
parents src/test/alice/jungle/PersistenJournalTest.java@f3f89613c7e3
children 7d9b7fcb4d9a
line wrap: on
line source

package alice.jungle;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;

import alice.jungle.operations.NetworkNodePath;
import alice.jungle.persistent.JungleUpdater;
import alice.jungle.persistent.PersistentChangeList;
import alice.jungle.persistent.PersistentJournal;
import alice.jungle.persistent.PersistentJungle;
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.Node;
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.Command;
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.operations.NodeOperation;
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 PersistenJournalTest {

	public static void main(String[] args) throws IOException {
		PersistentJournal journal = new PersistentJournal(
				new File("./log/commit.log"));
		Jungle jungle = new PersistentJungle(journal, "uuid",new DefaultTreeEditor(new DefaultTraverser()));
		jungle.createNewTree("hoge");
		JungleTree tree = jungle.getTreeByName("hoge");
		JungleTreeEditor editor = tree.getTreeEditor();
		NetworkNodePath path = new NetworkNodePath();
		String key = "key";
		ByteBuffer value = ByteBuffer.wrap("value".getBytes());
		int pos = 0;
		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos);
		if(either.isA()){
			System.out.println("Failed addNewChildAt");
			System.exit(0);
		}
		editor = either.b();
		either = editor.putAttribute(path, key,	value);
		JungleTreeEditor e = either.b();
		e.success();
		journal.close();

		PersistentJournal journal2 = new PersistentJournal();
		journal2.setInputFile(new File("./log/commit.log"));
		journal2.setOutputFile(new File("./log/commit2.log"));
		Jungle jungle2 = new PersistentJungle(journal, "uuid2", new DefaultTreeEditor(new DefaultTraverser()));
		ChangeListReader reader = journal2.getReader();
		PersistentChangeList chList = (PersistentChangeList) reader.read();
		for (; chList != null; chList = (PersistentChangeList) reader.read()) {
			String treeName = chList.getTreeName();
			JungleTree tree2 = jungle2.getTreeByName(treeName);
			if(tree2 == null) {
				tree2 = jungle2.createNewTree(treeName);
			}
			System.out.println("Tree name :"+treeName);
			JungleTreeEditor editor2 = tree2.getTreeEditor();
			Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList.getTreeOperationLog());
			if (either2.isA()) {
				System.err.println("JungleUpdater Error");
				System.exit(0);
			}
			editor2 = either2.b();
			editor2.success();
			printChangeList(chList);
			System.out.println();
		}
		JungleTree tree2 = jungle2.getTreeByName("hoge");
		Node node = tree2.getRootNode();
		System.out.println("Children size : "+node.getChildren().size());
		
		journal2.close();

	}
	
	public static void printChangeList(ChangeList chList) {
		for (TreeOperation op : chList) {
			NodePath p = op.getNodePath();
			NodeOperation nodeOp = op.getNodeOperation();
			Command c = nodeOp.getCommand();
			String str = "";
			switch (c) {
			case PUT_ATTRIBUTE:
				String opKey = nodeOp.getKey();
				ByteBuffer opValue = nodeOp.getValue();
				if (opValue.limit() < 100) {
					str = String.format("key:%s,value:%s", opKey,
							new String(opValue.array()));
				} else {
					str = String.format("key:%s,value:%d", opKey,
							opValue.limit());
				}
				break;
			case DELETE_ATTRIBUTE:
				str = String.format("key:%s", nodeOp.getKey());
				break;
			case APPEND_CHILD:
				str = String.format("pos:%d", nodeOp.getPosition());
				break;
			case DELETE_CHILD:
				str = String.format("pos:%d", nodeOp.getPosition());
				break;
			}
			System.out.println(String.format("[%s:%s:%s]", c, p, str));
		}
		
	}
	
}