annotate src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteChildIndexEditor.java @ 151:d9fbddf77bf6

add class Index
author one
date Sat, 22 Nov 2014 14:46:44 +0900
parents 371b6ddb78f2
children 8a0aa8fc137c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index;
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
2
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
3 import fj.Ord;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
4 import fj.data.List;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
5 import fj.data.Option;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
6 import fj.data.TreeMap;
8067fec660ab remove Error
one
parents: 128
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.PathNodeIterator;
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
13
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
14 public class DeleteChildIndexEditor implements IndexEditor {
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
15
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
16 Index index;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
17 int pos;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
18
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
19 public DeleteChildIndexEditor(int pos, Index index) {
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
20 this.index = index;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
21 this.pos = pos;
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
22 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
23
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
24 @Override
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
25 public IndexEditor delete(TreeNode node) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
26 TreeNodeAttributes attribute = node.getAttributes();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
27 List<String> keys = attribute.getKeys();
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
28 TreeMap<String, TreeMap<String, List<TreeNode>>> newIndexTreeMap = index;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
29 for (String key : keys) {
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
30 Option<TreeMap<String, List<TreeNode>>> indexOp = index.get(key);
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
31 if (indexOp.isSome()) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
32 TreeMap<String, List<TreeNode>> index = indexOp.some();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
33 String value = attribute.getString(key);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
34 Option<List<TreeNode>> nodeListOp = index.get(value);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
35 if (nodeListOp.isSome()) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
36 List<TreeNode> nodeList = nodeListOp.some();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
37 List<TreeNode> newNodeList = List.nil();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
38 for (TreeNode indexingNode : nodeList) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
39 if (indexingNode != node)
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
40 newNodeList = newNodeList.cons(indexingNode);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
41 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
42 TreeMap<String, List<TreeNode>> newIndex;
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
43 newIndex = index.set(value, newNodeList);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
44 newIndexTreeMap = newIndexTreeMap.set(key, newIndex);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
45 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
46
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
47 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
48 }
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
49
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
50 return new DefaultIndexEditor(newIndexTreeMap);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
51 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
52
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
53 @Override
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
54 public IndexEditor add(TreeNode node) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
55 TreeNodeAttributes attribute = node.getAttributes();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
56 List<String> keys = attribute.getKeys();
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
57 TreeMap<String, TreeMap<String, List<TreeNode>>> newIndexTreeMap = index;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
58 for (String key : keys) {
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
59 Option<TreeMap<String, List<TreeNode>>> indexOp = index.get(key);
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
60 if (indexOp.isSome()) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
61 TreeMap<String, List<TreeNode>> index = indexOp.some();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
62 String value = attribute.getString(key);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
63 Option<List<TreeNode>> nodeListOp = index.get(value);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
64 if (nodeListOp.isSome()) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
65 List<TreeNode> nodeList = nodeListOp.some();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
66 List<TreeNode> newNodeList = nodeList.cons(node);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
67 TreeMap<String, List<TreeNode>> newIndex = index.set(value, newNodeList);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
68 newIndexTreeMap = newIndexTreeMap.set(key, newIndex);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
69 } else { // test
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
70 List<TreeNode> nodeList = List.nil();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
71 value = attribute.getString(key);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
72 List<TreeNode> newNodeList = nodeList.cons(node);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
73 TreeMap<String, List<TreeNode>> newIndex = index.set(value, newNodeList);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
74 newIndexTreeMap = newIndexTreeMap.set(key, newIndex);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
75 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
76
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
77 } else { // test
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
78 TreeMap<String, List<TreeNode>> index = TreeMap.empty(Ord.stringOrd);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
79 List<TreeNode> nodeList = List.nil();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
80 String value = attribute.getString(key);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
81 List<TreeNode> newNodeList = nodeList.cons(node);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
82 TreeMap<String, List<TreeNode>> newIndex = index.set(value, newNodeList);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
83 newIndexTreeMap = newIndexTreeMap.set(key, newIndex);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
84 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
85 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
86
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
87 return new DefaultIndexEditor(newIndexTreeMap);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
88 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
89
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
90 @Override
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
91 public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
92 return index;
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
93 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
94
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
95 @Override
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
96 public IndexEditor edit(TreeNode node) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
97 PathNodeIterator nodeSearcher = new PathNodeIterator(new Pair<TreeNode, NodePath>(node, new DefaultNodePath()));
151
d9fbddf77bf6 add class Index
one
parents: 146
diff changeset
98 TreeMap<String, TreeMap<String, List<TreeNode>>> newIndexTreeMap = index;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
99
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
100 for (; nodeSearcher.hasNext();) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
101 TreeNode deleteNode = nodeSearcher.next().left();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
102 TreeNodeAttributes attribute = deleteNode.getAttributes();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
103 List<String> keys = attribute.getKeys();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
104 for (String key : keys) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
105 Option<TreeMap<String, List<TreeNode>>> indexOp = newIndexTreeMap.get(key);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
106 if (indexOp.isSome()) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
107 TreeMap<String, List<TreeNode>> index = indexOp.some();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
108 String value = attribute.getString(key);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
109 Option<List<TreeNode>> nodeListOp = index.get(value);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
110 if (nodeListOp.isSome()) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
111 List<TreeNode> nodeList = nodeListOp.some();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
112 List<TreeNode> newNodeList = List.nil();
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
113 for (TreeNode indexingNode : nodeList) {
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
114 if (indexingNode != deleteNode)
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
115 newNodeList = newNodeList.cons(indexingNode);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
116 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
117 TreeMap<String, List<TreeNode>> newIndex = index.set(value, newNodeList);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
118 newIndexTreeMap = newIndexTreeMap.set(key, newIndex);
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
119 }
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
120
146
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
121 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
122 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
123 }
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
124 return null;
371b6ddb78f2 repair putAttributeIndex and deleteAttributeIndex
one
parents: 145
diff changeset
125 }
129
8067fec660ab remove Error
one
parents: 128
diff changeset
126
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
127 }