annotate src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteChildIndexEditor.java @ 135:6e9a8d26e0cf

refactor
author one
date Fri, 24 Oct 2014 18:49:48 +0900
parents f46a6e0e4594
children afbe19c98f53 72f454eb04ec
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 java.util.Iterator;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
4
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
5 import fj.F;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
6 import fj.Ord;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
7 import fj.P2;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
8 import fj.data.List;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
9 import fj.data.Option;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
10 import fj.data.TreeMap;
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
8067fec660ab remove Error
one
parents: 128
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
8067fec660ab remove Error
one
parents: 128
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TransactionManager;
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
129
8067fec660ab remove Error
one
parents: 128
diff changeset
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
23
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
24 public class DeleteChildIndexEditor implements IndexEditor {
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
25
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
26 NodePath editNodePath;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
27
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
28 public DeleteChildIndexEditor(int pos, NodePath path) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
29 this.editNodePath = path.add(pos);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
30 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
31
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
32 @Override
130
bb53330364f1 add putIndexEditor and deleteIndexEditor
one
parents: 129
diff changeset
33 public Either<Error, IndexJungleTreeEditor> edit(
129
8067fec660ab remove Error
one
parents: 128
diff changeset
34 TreeNode root,
8067fec660ab remove Error
one
parents: 128
diff changeset
35 TransactionManager txManager,
8067fec660ab remove Error
one
parents: 128
diff changeset
36 TreeEditor editor,
8067fec660ab remove Error
one
parents: 128
diff changeset
37 TreeOperationLog log,
8067fec660ab remove Error
one
parents: 128
diff changeset
38 TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index) {
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
39
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
40 TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> newIndex = editIndex(index);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
41 IndexJungleTreeEditor newEditor = new IndexJungleTreeEditor(root, txManager, editor, newIndex);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
42 return DefaultEither.newB(newEditor);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
43 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
44
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
45 public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> editIndex(
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
46 TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> index) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
47
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
48 if (!index.isEmpty()) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
49 List<String> keyList = index.keys();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
50 TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> newIndex = TreeMap.empty(Ord.stringOrd);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
51 TreeMap<String, List<Pair<TreeNode, NodePath>>> newInnerIndex = TreeMap.empty(Ord.stringOrd);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
52
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
53 for (String indexKey : keyList) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
54 TreeMap<String, List<Pair<TreeNode, NodePath>>> innerIndex = index.get(indexKey).some();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
55 List<String> innerIndexKeyList = innerIndex.keys();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
56
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
57 for (String innerIndexKey : innerIndexKeyList) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
58 List<Pair<TreeNode, NodePath>> pairList = innerIndex.get(innerIndexKey).some();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
59 List<Pair<TreeNode, NodePath>> list = checkPath(pairList);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
60 if (!list.isEmpty()){
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
61 System.out.println(new String(list.head().left().getAttributes().get("KEY").array()));
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
62 newInnerIndex = newInnerIndex.set(innerIndexKey, list);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
63 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
64 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
65 newIndex = newIndex.set(indexKey, newInnerIndex);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
66 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
67 return newIndex;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
68 } else {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
69 return index;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
70 }
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
71 }
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
72
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
73 public List<Pair<TreeNode, NodePath>> checkPath(List<Pair<TreeNode, NodePath>> pairList){
129
8067fec660ab remove Error
one
parents: 128
diff changeset
74
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
75 List<Pair<TreeNode, NodePath>> list = List.nil();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
76 for (Pair<TreeNode, NodePath> pair : pairList) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
77
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
78 NodePath path = pair.right();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
79 System.out.println("oldPath = " + path.toString());
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
80 NodePath newPath = new DefaultNodePath();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
81
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
82 if (path.toString().equals(editNodePath.toString())) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
83 continue;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
84 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
85
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
86 if (editNodePath.size() > path.size()) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
87 list = list.cons(pair);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
88 continue;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
89 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
90
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
91 Pair<Integer, NodePath> editNodePathCopy = editNodePath.pop();
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
92 int loopCount = 0;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
93
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
94 for (Integer pathInt : path) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
95 loopCount++;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
96
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
97 if (pathInt == -1)
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
98 continue;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
99 if (editNodePathCopy.right().size() > 0) {
135
6e9a8d26e0cf refactor
one
parents: 134
diff changeset
100
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
101 editNodePathCopy = editNodePathCopy.right().pop();
135
6e9a8d26e0cf refactor
one
parents: 134
diff changeset
102 if (loopCount == editNodePath.size() && editNodePathCopy.left() < pathInt) {
134
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
103 newPath = newPath.add(pathInt - 1);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
104 continue;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
105 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
106
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
107 if (!(editNodePathCopy.left() == pathInt)) {
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
108 newPath = path;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
109 break;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
110 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
111 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
112
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
113 newPath = newPath.add(pathInt);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
114
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
115 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
116
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
117 System.out.println("newPath = " + newPath.toString());
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
118 Pair<TreeNode, NodePath> newPair = new Pair<TreeNode, NodePath>(
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
119 pair.left(), newPath);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
120 list = list.cons(newPair);
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
121 }
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
122
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
123 return list;
f46a6e0e4594 add deleteIndexEditor
one
parents: 130
diff changeset
124 }
129
8067fec660ab remove Error
one
parents: 128
diff changeset
125
128
9c46e5c2ffac edit PutIndexEditor
one
parents:
diff changeset
126 }