view src/jungle/test/datasegment/store/operations/DefaultTreeOperationContainer.java @ 4:2900e0b1d7e6

add DefaultTreeOperation
author one
date Mon, 10 Jun 2013 01:43:02 +0900
parents
children 8f4fe96dc8e4
line wrap: on
line source

package jungle.test.datasegment.store.operations;

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

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.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 org.msgpack.MessagePack;
import org.msgpack.annotation.Message;
import org.msgpack.type.Value;

@Message
public class DefaultTreeOperationContainer {

	Value pathValue;
	Value opValue;

	public static void main(String[] args) throws IOException {
		String key = "hoge";
		ByteBuffer b = ByteBuffer.wrap("messagepack value".getBytes());
		PutAttributeOperation op = new PutAttributeOperation(key, b);
		DefaultNodeOperationContainer opContainer = new DefaultNodeOperationContainer();
		opContainer.unconvert(op);

		DefaultNodePath p = new DefaultNodePath();
		p = p.add(1).add(2).add(3);
		DefaultNodePathContainer pathContainer = new DefaultNodePathContainer();
		pathContainer.unconvert(p);

		DefaultTreeOperationContainer treeOperationContainer = new DefaultTreeOperationContainer();
		treeOperationContainer.unconvert(opContainer, pathContainer);
		TreeOperation treeOperation = treeOperationContainer.convert();
		NodePath nodePath = treeOperation.getNodePath();
		NodeOperation nodeOp = treeOperation.getNodeOperation();
		Command c = nodeOp.getCommand();
		String str = "";
		switch (c) {
		case PUT_ATTRIBUTE:
			String k = nodeOp.getKey();
			ByteBuffer value = nodeOp.getValue();
			if (value.limit() < 100) {
				str = String.format("key:%s,value:%s", k,
						new String(value.array()));
			} else {
				str = String.format("key:%s,value:%d", k, value.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, nodePath, str));
	}

	public DefaultTreeOperationContainer() {

	}

	public void unconvert(DefaultNodeOperationContainer _op,
			DefaultNodePathContainer _path) throws IOException {
		MessagePack msgpack = new MessagePack();
		pathValue = msgpack.unconvert(_path);
		opValue = msgpack.unconvert(_op);
	}

	public TreeOperation convert() throws IOException {
		MessagePack msgpack = new MessagePack();
		DefaultNodePathContainer pathContainer = msgpack.convert(pathValue, DefaultNodePathContainer.class);
		DefaultNodeOperationContainer opContainer = msgpack.convert(opValue, DefaultNodeOperationContainer.class);
		return new DefaultTreeOperation(pathContainer.convert(), opContainer.convert());
	}

}