view src/test/alice/jungle/PersistentExample.java @ 83:b3ccefdf2b43

Added PersistentExample
author one
date Fri, 25 Oct 2013 18:44:29 +0900
parents
children
line wrap: on
line source

package test.alice.jungle;

import java.io.File;
import java.io.IOException;
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.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;
import alice.jungle.core.NetworkDefaultJungle;
import alice.jungle.operations.NetworkNodePath;
import alice.jungle.persistence.NetworkJournal;

/*
 * Hello World
 */

public class PersistentExample {

	public static void main(String[] args) throws IOException {
		NetworkJournal journal = new NetworkJournal(
				new File("./log/commit.log"));
		Jungle jungle = new NetworkDefaultJungle(journal, "uuid",
				new DefaultTreeEditor(new DefaultTraverser()), "node00");
		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();

		NetworkJournal journal2 = new NetworkJournal(new File("./log/commit.log"));
		ChangeListReader reader = journal2.getReader();
		ChangeList chList = reader.read();
		for (; chList != null; chList = reader.read()) {
			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 (value.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));
			}
		}

	}

}