annotate src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/LoggingIndexAttributes.java @ 105:78ef456c98a0

add Query Status but has error
author one
date Fri, 12 Sep 2014 19:47:25 +0900
parents f9a0e7069811
children 5b7e45464bb8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
103
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
2
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
3 import java.nio.ByteBuffer;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
4
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
5 import fj.Ord;
103
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
6 import fj.data.List;
104
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
7 import fj.data.Option;
103
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
8 import fj.data.TreeMap;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingAttributes;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
20
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
21 public class LoggingIndexAttributes extends LoggingAttributes {
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
22
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
23 private final TreeNode wrap;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
24 private final OperationLog log;
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
25 private TreeMap<String,TreeMap<String, List<TreeNode>>> index;
103
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
26
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
27 public LoggingIndexAttributes(TreeNode _wrap, OperationLog _log, TreeMap<String,TreeMap<String, List<TreeNode>>> index) {
103
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
28 super(_wrap, _log);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
29 this.wrap = _wrap;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
30 this.log = _log;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
31 this.index = index;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
32 }
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
33
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
34 private Either<Error,Logging> edit(NodeOperation _op)
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
35 {
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
36 Either<Error,TreeNode> either = _op.invoke(wrap);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
37 if(either.isA()){
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
38 return DefaultEither.newA(either.a());
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
39 }
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
40
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
41 TreeNode newNode = either.b();
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
42 OperationLog newLog = log.add(_op);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
43 Logging newLogNode = new LoggingNode(newNode,newLog);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
44
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
45 return DefaultEither.newB(newLogNode);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
46 }
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
47
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
48 public Either<Error,Logging> delete(final String key)
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
49 {
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
50 DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(key);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
51 Either<Error, Logging> either = edit(deleteAttribute);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
52
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
53 if(either.isA())
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
54 return either;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
55
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
56 Logging logNode = either.b();
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
57 TreeNode node = logNode.getWrap();
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
58 OperationLog log = logNode.getOperationLog();
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
59 index = index.delete(key);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
60 Logging logIndexNode = new LoggingIndexNode(node, log, index);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
61 return DefaultEither.newB(logIndexNode);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
62 }
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
63
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
64 public Either<Error,Logging> put(final String key,final ByteBuffer value)
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
65 {
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
66 PutAttributeOperation putAttribute = new PutAttributeOperation(key,value);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
67 Either<Error, Logging> either = edit(putAttribute);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
68 if(either.isA())
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
69 return either;
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
70
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
71 Logging logNode = either.b();
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
72 TreeNode newNode = logNode.getWrap();
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
73 OperationLog newLog = logNode.getOperationLog();
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
74 Option<TreeMap<String, TreeNode>> opAttributeIndex = index.get(key);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
75 String indexKey = new String(value.array());
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
76 TreeMap<String, TreeNode> list = TreeMap.empty(Ord.stringOrd);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
77
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
78 if (opAttributeIndex.isNone()) {
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
79 TreeMap<String, TreeNode> newAttributeindex = TreeMap.empty(Ord.stringOrd);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
80 list = list.set(indexKey,newNode);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
81 } else {
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
82 Option<TreeNode> oplist = opAttributeIndex.some().get(indexKey);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
83 list = opAttributeIndex.some();
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
84 list = list.cons(newNode);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
85 }
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
86
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
87
104
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
88 if (opList.isNone()) {
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
89 list = list.set(,newNode);
104
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
90 } else {
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
91 list = opList.some();
104
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
92 list = list.cons(newNode);
f9a0e7069811 delete worning halfway
one
parents: 103
diff changeset
93 }
105
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
94 TreeMap<String,List<TreeNode>> newIndex = index.set(indexKey,list);
78ef456c98a0 add Query Status but has error
one
parents: 104
diff changeset
95 Logging logIndexNode = new LoggingIndexNode(newNode, newLog, newIndex);
103
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
96 return DefaultEither.newB(logIndexNode);
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
97 }
bed3afd5c2e2 add Index but Not use
one
parents:
diff changeset
98 }