changeset 16:35c661de095d

added Parameter ... etc..
author Shoshi TAMAKI
date Wed, 19 Dec 2012 23:20:00 +0900
parents 0d93a6edc1b7
children 6723c88cf525
files src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/Command.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/NodePath.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditResult.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditResultStatus.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditResult.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAt.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DefaultParameter.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttribute.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAt.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/Operation.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/Parameter.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/SetAttribute.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DefaultEditableAttributes.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DefaultEditableNode.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditCache.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultTraverseEvaluator.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraverseEvaluator.java
diffstat 18 files changed, 269 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/Command.java	Tue Dec 18 17:13:58 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/Command.java	Wed Dec 19 23:20:00 2012 +0900
@@ -2,5 +2,5 @@
 
 public enum Command
 {
-	APPEND_CHILD_BEHIND,APPEND_CHILD_INFRONT,DELETE_CHILD,PUT_ATTRIBUTE,DELETE_ATTRIBUTE;
-}
+	APPEND_CHILD,DELETE_CHILD,PUT_ATTRIBUTE,DELETE_ATTRIBUTE;
+}
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/NodePath.java	Tue Dec 18 17:13:58 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/NodePath.java	Wed Dec 19 23:20:00 2012 +0900
@@ -1,8 +1,9 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.TraverseEvaluator;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
-public interface NodePath extends Iterable<Integer> , TraverseEvaluator
+public interface NodePath extends Iterable<Integer>
 {
-	public NodePath appendPath(int _pos);
+	public NodePath add(int _pos);
+	public Pair<Integer,NodePath> pop();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditResult.java	Tue Dec 18 17:13:58 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditResult.java	Wed Dec 19 23:20:00 2012 +0900
@@ -3,4 +3,5 @@
 public interface TreeEditResult
 {
 	public TreeEditor getNewEditor();
+	public TreeEditResultStatus getStatus();
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditResultStatus.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,6 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store;
+
+public enum TreeEditResultStatus
+{
+	NODEPATH_NOTFOUND;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditResult.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,29 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditResult;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditResultStatus;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
+
+public class DefaultTreeEditResult implements TreeEditResult
+{
+	private final TreeEditor editor;
+	private final TreeEditResultStatus status;
+	
+	public DefaultTreeEditResult(TreeEditor _editor,TreeEditResultStatus _status)
+	{
+		editor = _editor;
+		status = _status;
+	}
+
+	@Override
+	public TreeEditor getNewEditor()
+	{
+		return editor;
+	}
+
+	@Override
+	public TreeEditResultStatus getStatus()
+	{
+		return status;
+	}
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java	Tue Dec 18 17:13:58 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java	Wed Dec 19 23:20:00 2012 +0900
@@ -1,18 +1,22 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 import java.nio.ByteBuffer;
+import java.util.Iterator;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Tree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TraversableTree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditResult;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditResultStatus;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.SetAttribute;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverseEvaluator;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.TraverseResult;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser;
@@ -70,8 +74,29 @@
 	{
 		Tree t = tip.getTree();
 		Traverser traverser = new DefaultTraverser();
-		Iterable<TraverseResult> result = traverser.traverse(t,_path);
+		DefaultTraverseEvaluator te = new DefaultTraverseEvaluator(_path);
+		Iterable<TraverseResult> result = traverser.traverse(t,te);
+		Iterator<TraverseResult> itr = result.iterator();
+		if(itr.hasNext()){
+			TraverseResult r = itr.next();
+			cloneAndApplyToNodeEditorFromRoot(r,_editor);
+		}
 		
-		return null;
+		return new DefaultTreeEditResult(null,TreeEditResultStatus.NODEPATH_NOTFOUND);
 	}
+	
+	public void cloneAndApplyToNodeEditorFromRoot(TraverseResult _r,NodeEditor _editor)
+	{
+		Iterator<Node> nodes = _r.iterator();
+		
+		//root
+		if(!nodes.hasNext()){
+			return;
+		}
+		
+		DefaultNode root = (DefaultNode)nodes.next();
+		
+	}
+	
+	
 }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAt.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,6 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+public final class AppendChildAt
+{
+	public static final Parameter<Integer> POSITION = new DefaultParameter<Integer>();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DefaultParameter.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,5 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+public class DefaultParameter<T> implements Parameter<T>
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttribute.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,6 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+public final class DeleteAttribute
+{
+	public static final Parameter<String> KEY = new DefaultParameter<String>();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAt.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,6 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+public final class DeleteChildAt
+{
+	public static final Parameter<Integer> POSITION = new DefaultParameter<Integer>();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/Operation.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,11 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+
+public interface Operation
+{
+	public Command getCommand();
+	public ? getParameter(Parameter<?> _param);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/Parameter.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,5 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+public interface Parameter<T>
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/SetAttribute.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,9 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations;
+
+import java.nio.ByteBuffer;
+
+public final class SetAttribute
+{
+	public static final Parameter<String> KEY = new DefaultParameter<String>();
+	public static final Parameter<ByteBuffer> VALUE = new DefaultParameter<ByteBuffer>();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DefaultEditableAttributes.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,33 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
+
+import java.nio.ByteBuffer;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
+
+public class DefaultEditableAttributes implements EditableAttributes
+{
+	private Attributes attrs;
+	
+	public DefaultEditableAttributes(Attributes _attrs,EditCache _cache)
+	{
+		attrs = _attrs;
+	}
+
+	@Override
+	public ByteBuffer get(String _key)
+	{
+		return null;
+	}
+
+	@Override
+	public EditableNode delete(String _key)
+	{
+		return null;
+	}
+
+	@Override
+	public EditableNode put(String _key, ByteBuffer _value)
+	{
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DefaultEditableNode.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,22 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+
+public class DefaultEditableNode implements EditableNode
+{
+	public DefaultEditableNode(Node _target)
+	{
+	}
+	
+	@Override
+	public EditableAttributes getAttributes()
+	{
+		return null;
+	}
+
+	@Override
+	public EditableChildren getChildren()
+	{
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditCache.java	Wed Dec 19 23:20:00 2012 +0900
@@ -0,0 +1,86 @@
+package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
+
+import java.nio.ByteBuffer;
+
+import fj.Ord;
+import fj.data.List;
+import fj.data.Option;
+import fj.data.TreeMap;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.Operation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.Parameter;
+
+public class EditCache
+{
+	private final List<Operation> operations;
+	private final TreeMap<String,Operation> attrCache;
+	private final List<Operation> childrenCache;
+	
+	public EditCache()
+	{
+		operations = List.nil();
+		attrCache = TreeMap.empty(Ord.stringOrd);
+		childrenCache = List.nil();
+	}
+	
+	private EditCache(List<Operation> _operations,TreeMap<String,Operation> _attrCache,List<Operation> _childrenCache)
+	{
+		operations = _operations;
+		attrCache = _attrCache;
+		childrenCache = _childrenCache;
+	}
+	
+	public EditCache setAttribute(final String _key,final ByteBuffer _value)
+	{
+		Operation op = new Operation(){
+			@Override
+			public Command getCommand(){
+				return Command.PUT_ATTRIBUTE;
+			}
+
+			@Override
+			public <T> T getParameter(Parameter<T> _param){
+				if(_param == jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.SetAttribute.KEY){
+					return _key;
+				}
+				return ;
+			}
+		};
+	}
+	
+	public EditCache deleteAttribute(String _key)
+	{
+		
+	}
+	
+	public EditCache appendChildAt(int _pos)
+	{
+		
+	}
+	
+	public EditCache deleteChildAt(int _pos)
+	{
+		
+	}
+	
+	public Operation getAttribute(String _key)
+	{
+		Option<Operation> result = attrCache.get(_key);
+		if(result.isSome()){
+			return result.some();
+		}
+		
+		return null;
+	}
+	
+	public List<Operation> operations()
+	{
+		return operations;
+	}
+	
+	public List<Operation> childrenOperations()
+	{
+		return childrenCache;
+	}
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultTraverseEvaluator.java	Tue Dec 18 17:13:58 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultTraverseEvaluator.java	Wed Dec 19 23:20:00 2012 +0900
@@ -1,36 +1,24 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
-import java.util.Iterator;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
-import fj.data.List;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-
-public class DefaultTraverseEvaluator implements TraverseEvaluator , Iterable<Integer>
+public class DefaultTraverseEvaluator implements TraverseEvaluator
 {
-	public List<Integer> path;
-	public static List<Integer> EMPTY = List.nil();
+	private final NodePath path;
 	
-	public DefaultTraverseEvaluator()
-	{
-		this(EMPTY);
-	}
-	
-	private DefaultTraverseEvaluator(List<Integer> _path)
+	public DefaultTraverseEvaluator(NodePath _path)
 	{
 		path = _path;
 	}
 	
-	public DefaultTraverseEvaluator add(Integer _next)
-	{
-		List<Integer> newPath = path.snoc(_next);
-		return new DefaultTraverseEvaluator(newPath);
-	}
-
 	@Override
 	public Evaluation eval(Iterable<Node> _currentPosition,Node _child,int _pos)
 	{
-		int head = path.head();
-		DefaultTraverseEvaluator nextEvaluator = new DefaultTraverseEvaluator(path.tail());
+		Pair<Integer,NodePath> pop = path.pop();
+		DefaultTraverseEvaluator nextEvaluator = new DefaultTraverseEvaluator(pop.right());
+		int head = pop.left();
 		
 		Evaluation.Result result = Evaluation.Result.DENY_CONTINUE;
 		if(head == _pos){
@@ -39,10 +27,4 @@
 		
 		return new DefaultEvaluation(result,nextEvaluator);
 	}
-
-	@Override
-	public Iterator<Integer> iterator()
-	{
-		return path.iterator();
-	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraverseEvaluator.java	Tue Dec 18 17:13:58 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraverseEvaluator.java	Wed Dec 19 23:20:00 2012 +0900
@@ -1,5 +1,7 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
+import java.util.Iterator;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 
 public interface TraverseEvaluator