view src/test/alice/jungle/codesegment/DoubleJungleManager.java @ 47:686057add8a4

confirmed LogUpdateCodeSegment
author one
date Fri, 12 Jul 2013 11:45:12 +0900
parents ed4c2e6ab5d1
children
line wrap: on
line source

package test.alice.jungle.codesegment;

import java.nio.ByteBuffer;

import alice.jungle.core.NetworkDefaultJungle;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
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.impl.DefaultTreeEditor;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
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 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 DoubleJungleManager {

	static Jungle jungle1 = new NetworkDefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()), "");
	static Jungle jungle2 = new NetworkDefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()), "");
	
	
	public DoubleJungleManager() {
		
	}
	
	public Jungle getJungle1() {
		return jungle1;
	}
	
	public Jungle getJungle2() {
		return jungle2;
	}
	
	
	public Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
		JungleTreeEditor editor = _editor;
		Either<Error, JungleTreeEditor> either = null;
		for (TreeOperation op : _log) { 
			either = _edit(editor, op);
			if(either.isA()) {
				return either;
			}
			editor = either.b();
		}
		return either;
	}
	
	private Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
			TreeOperation op) {
		NodePath path = op.getNodePath();
		NodeOperation nodeOp = op.getNodeOperation();
		Command c = nodeOp.getCommand();
		String key = "";
		switch (c) {
		case PUT_ATTRIBUTE:
			key = nodeOp.getKey();
			ByteBuffer value = nodeOp.getValue();
			return editor.putAttribute(path, key, value);
		case DELETE_ATTRIBUTE:
			key = nodeOp.getKey();
			return editor.deleteAttribute(path, key);
		case APPEND_CHILD:
			return editor.addNewChildAt(path, 0);
		case DELETE_CHILD:
			return editor.deleteChildAt(path, 0);
		}
		return null;
	}
}