comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java @ 98:95000ff9064d

Create Query
author one
date Tue, 09 Sep 2014 16:23:01 +0900
parents a1e20a440ddd
children 92d0c6e4655c
comparison
equal deleted inserted replaced
97:a1e20a440ddd 98:95000ff9064d
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser; 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
2
3 import java.util.Iterator;
2 4
3 import fj.data.List; 5 import fj.data.List;
4 import fj.data.TreeMap; 6 import fj.data.TreeMap;
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
15 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNode;
16 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNodeImpl;
17 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
10 18
11 public class BruteForceTraverser { 19 public class BruteForceTraverser {
12 List<Pair<NodePath,TreeNode>> pathNodes; 20 BruteForceTraverser traverser;
21 TreeNode node;
13 TreeMap<String,TreeNode> nodeIndex; 22 TreeMap<String,TreeNode> nodeIndex;
14 TreeMap<String,String> attributeIndex; 23 TreeMap<String,String> attributeIndex;
15 24
16 BruteForceTraverser(TreeNode _root){ 25 public BruteForceTraverser(TreeNode _root){
17 pathNodes = this.traverse(_root,new DefaultNodePath(),-1); 26 node = _root;
27 //pathNodes = this.traverse(_root,new DefaultNodePath(),-1);
18 } 28 }
19 29
20 public List<Pair<NodePath,TreeNode>> traverse(TreeNode _node ,NodePath _path ,int _pos){ 30 public BruteForceTraverser getTraverser(JungleTree tree){
31 return new BruteForceTraverser(tree.getRootNode());
32 }
33
34
35 /*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){
21 36
22 Children children = _node.getChildren(); 37 Children children = _node.getChildren();
23 List<Pair<NodePath,TreeNode>> list = List.nil(); 38 Either<Error,TreeNode> either = children.at(0);
39 IteratorPathNode list = new IteratorPathNodeImpl();
24 int pathCount = _pos; 40 int pathCount = _pos;
25 if(children.size() == 0){ 41 if(children.size() == 0){
26 list = list.cons(new Pair<NodePath,TreeNode>(_path.add(_pos),_node)); 42 list = list.add(new Pair<TreeNode, NodePath>(node, _path.add(_pos)));
27 return list; 43 return list;
28 } 44 }
29 45
30 for(TreeNode child : children){ 46 for(TreeNode child : children){
31 list = list.append(traverse(child,_path,pathCount)); 47 list = list.append(traverse(child,_path,pathCount));
32 pathCount++; 48 pathCount++;
33 } 49 }
34 50
35 list = list.cons(new Pair<NodePath,TreeNode>(_path.add(_pos),_node)); 51 list = list.add(new Pair<TreeNode,NodePath>(_node, _path.add(_pos)));
36 return list; 52 return list;
37 } 53 }
38 54
39 public List<Pair<NodePath,TreeNode>> search(String _key, String _Attribute){ 55 public int count(Query _query, String _key, String _attribute){
40 List<Pair<NodePath,TreeNode>> pathNode = List.nil(); 56 return this.find(_query,_key,_attribute);
41 for(Pair<NodePath,TreeNode> searchNode : pathNodes){
42 if(searchNode.right().getAttributes().get(_key).equals(_Attribute))
43 pathNode = pathNode.cons(searchNode);
44 }
45 return pathNode;
46 }
47
48 public int count(String _key, String _attribute){
49 return this.search(_key,_attribute).length();
50 } 57 }
51 58
52 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){ 59 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){
53 return null; 60 return null;
54 } 61 }
62 */
63 public Iterator<Pair<TreeNode, NodePath>> find(Query _query){
64 IteratorPathNode itNode = new IteratorPathNodeImpl(node);
65 List<Pair<TreeNode, NodePath>> list = List.nil();;
66 for(;itNode.hasNext();){
67 Pair<TreeNode, NodePath> pathNode = itNode.next();
68 if(_query.condition(pathNode.left()))
69 list = list.cons(pathNode);//list.reverse();//= list.cons();
70 }
71 return list.iterator();
72 }
73
55 74
56 } 75 }