view src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/IndexPushThread.java @ 127:b2c1fd513feb

push index thread add read log
author one
date Mon, 13 Oct 2014 03:22:16 +0900
parents src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/query/IndexPushThread.java@f81ec544a155
children ba5370090393
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index;

import java.nio.ByteBuffer;

import javax.swing.tree.DefaultTreeCellEditor.EditorContainer;

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.store.ChangeSet;
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.TreeNode;
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.transaction.IndexJungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
import fj.data.List;
import fj.data.TreeMap;

public class IndexPushThread extends Thread {

	TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index;
	JungleTree tree;
	IndexJungleTreeEditor editor;
	int logSize;

	public IndexPushThread(
			TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index,
			JungleTree tree,IndexJungleTreeEditor editor, int logSize) {
		this.index = index;
		this.tree = tree;
		this.editor = editor;
		this.logSize = logSize;
	}

	public void run() {
		while (true) {
			
			if (logSize == tree.getLogSize()) {
				editor.setIndex(index);
				if (editor.success().isB())
					break;
			} else {
				editor =  tree.getIndexTreeEditor();
				 Iterable<TreeOperation> Changeset = tree.getLog();
				 int loopCount = 0;
				 
				 for(TreeOperation treeOp : Changeset) {
					loopCount++;
					if (loopCount >= logSize) {
						NodePath path = treeOp.getNodePath();
						NodeOperation NodeOperation = treeOp.getNodeOperation();
						Command c = NodeOperation.getCommand();

						switch (c) {
						case PUT_ATTRIBUTE://ここ以下でIndexEditorを使ってindexの更新を行う
							String key = NodeOperation.getKey();
							ByteBuffer value = NodeOperation.getValue();
							
							//return editor.putAttribute(path, key, value);
						case DELETE_ATTRIBUTE:
							key = NodeOperation.getKey();
							//return editor.deleteAttribute(path, key);
						case APPEND_CHILD:
							//return editor.addNewChildAt(path, pos);
						case DELETE_CHILD:
							//return editor.deleteChildAt(path, 0);
						}
					}
				 }
				 
				 logSize = loopCount;
				 editor.setIndex(index);
				 if (editor.success().isB())
						break;
				 
			}
			editor = tree.getIndexTreeEditor();
		}
	}
	
}