annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java @ 99:92d0c6e4655c

refactoring to IteratorPathNode
author one
date Wed, 10 Sep 2014 18:54:52 +0900
parents 95000ff9064d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
2
98
95000ff9064d Create Query
one
parents: 97
diff changeset
3 import java.util.Iterator;
95000ff9064d Create Query
one
parents: 97
diff changeset
4
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
5 import fj.data.List;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
6 import fj.data.TreeMap;
98
95000ff9064d Create Query
one
parents: 97
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
98
95000ff9064d Create Query
one
parents: 97
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
13
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
14 public class BruteForceTraverser {
98
95000ff9064d Create Query
one
parents: 97
diff changeset
15 BruteForceTraverser traverser;
95000ff9064d Create Query
one
parents: 97
diff changeset
16 TreeNode node;
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
17 TreeMap<String,TreeNode> nodeIndex;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
18 TreeMap<String,String> attributeIndex;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
19
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
20 public BruteForceTraverser(TreeNode _root) {
98
95000ff9064d Create Query
one
parents: 97
diff changeset
21 node = _root;
95000ff9064d Create Query
one
parents: 97
diff changeset
22 //pathNodes = this.traverse(_root,new DefaultNodePath(),-1);
95000ff9064d Create Query
one
parents: 97
diff changeset
23 }
95000ff9064d Create Query
one
parents: 97
diff changeset
24
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
25 public BruteForceTraverser getTraverser(JungleTree tree) {
98
95000ff9064d Create Query
one
parents: 97
diff changeset
26 return new BruteForceTraverser(tree.getRootNode());
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
27 }
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
28
98
95000ff9064d Create Query
one
parents: 97
diff changeset
29
95000ff9064d Create Query
one
parents: 97
diff changeset
30 /*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
31
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
32 Children children = _node.getChildren();
98
95000ff9064d Create Query
one
parents: 97
diff changeset
33 Either<Error,TreeNode> either = children.at(0);
95000ff9064d Create Query
one
parents: 97
diff changeset
34 IteratorPathNode list = new IteratorPathNodeImpl();
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
35 int pathCount = _pos;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
36 if(children.size() == 0){
98
95000ff9064d Create Query
one
parents: 97
diff changeset
37 list = list.add(new Pair<TreeNode, NodePath>(node, _path.add(_pos)));
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
38 return list;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
39 }
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
40
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
41 for(TreeNode child : children){
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
42 list = list.append(traverse(child,_path,pathCount));
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
43 pathCount++;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
44 }
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
45
98
95000ff9064d Create Query
one
parents: 97
diff changeset
46 list = list.add(new Pair<TreeNode,NodePath>(_node, _path.add(_pos)));
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
47 return list;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
48 }
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
49
98
95000ff9064d Create Query
one
parents: 97
diff changeset
50 public int count(Query _query, String _key, String _attribute){
95000ff9064d Create Query
one
parents: 97
diff changeset
51 return this.find(_query,_key,_attribute);
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
52 }
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
53
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
54 public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
55 return null;
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
56 }
98
95000ff9064d Create Query
one
parents: 97
diff changeset
57 */
99
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
58 public Iterator<Pair<TreeNode, NodePath>> find(final Query query) {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
59 final PathNodeIterator itNode = new PathNodeIterator(node);
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
60
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
61 return new Iterator<Pair<TreeNode, NodePath>>() {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
62
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
63 private Pair<TreeNode,NodePath> matchPair = nextmatch(itNode);
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
64
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
65 private Pair<TreeNode, NodePath> nextmatch(PathNodeIterator itNode) {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
66 for (;itNode.hasNext();) {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
67 Pair<TreeNode, NodePath> pathNode = itNode.next();
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
68 if (query.condition(pathNode.left()))
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
69 return pathNode;
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
70 }
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
71 return null;
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
72 }
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
73
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
74 @Override
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
75 public boolean hasNext() {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
76 // TODO Auto-generated method stub
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
77 return matchPair != null;
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
78 }
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
79
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
80 @Override
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
81 public Pair<TreeNode, NodePath> next() {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
82 Pair<TreeNode,NodePath> currentPair = matchPair;
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
83 matchPair = nextmatch(itNode);
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
84 return currentPair;
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
85 }
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
86
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
87 @Override
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
88 public void remove() {
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
89 // TODO Auto-generated method stub
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
90
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
91 }
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
92
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
93 };
92d0c6e4655c refactoring to IteratorPathNode
one
parents: 98
diff changeset
94
98
95000ff9064d Create Query
one
parents: 97
diff changeset
95 }
95000ff9064d Create Query
one
parents: 97
diff changeset
96
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
97
a1e20a440ddd add BruteForceTraverser
one
parents:
diff changeset
98 }