Mercurial > hg > Members > tatsuki > bench > jungle-core
comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java @ 144:0854f9a9e81d
change attrs form TreeMap<String , ByteBuffer> → TreeMap<String,List<ByteBuffer>>
author | one |
---|---|
date | Sun, 16 Nov 2014 06:40:48 +0900 |
parents | 3071b1a471fd |
children | a2c374a2686b |
comparison
equal
deleted
inserted
replaced
143:afbe19c98f53 | 144:0854f9a9e81d |
---|---|
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; | 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; |
2 | 2 |
3 import java.nio.ByteBuffer; | 3 import java.nio.ByteBuffer; |
4 import java.util.Iterator; | |
4 | 5 |
5 import fj.data.List; | 6 import fj.data.List; |
6 import fj.data.Option; | 7 import fj.data.Option; |
7 import fj.data.TreeMap; | 8 import fj.data.TreeMap; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator; | |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog; | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog; |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation; |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError; | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | 19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; |
18 | 20 |
19 public class DefaultTreeNodeAttribute implements TreeNodeAttributes | 21 public class DefaultTreeNodeAttribute implements TreeNodeAttributes { |
20 { | 22 public List<TreeNode> children; |
21 public List<TreeNode> children; | 23 public TreeMap<String, List<ByteBuffer>> attrs; |
22 public TreeMap<String,ByteBuffer> attrs; | 24 OperationLog log; |
23 OperationLog log ; | |
24 | |
25 public DefaultTreeNodeAttribute(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs) | |
26 { | |
27 children = _children; | |
28 attrs = _attrs; | |
29 log = new DefaultOperationLog(); | |
30 } | |
31 | |
32 public DefaultTreeNodeAttribute(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs,OperationLog _log) | |
33 { | |
34 children = _children; | |
35 attrs = _attrs; | |
36 log = _log; | |
37 } | |
38 | 25 |
39 @Override | 26 public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<String, List<ByteBuffer>> _attrs) { |
40 public TreeMap<String,ByteBuffer> getAttributesAsRawMap(){ | 27 children = _children; |
41 return attrs; | 28 attrs = _attrs; |
42 } | 29 log = new DefaultOperationLog(); |
43 | 30 } |
44 @Override | |
45 public Either<Error,TreeNode> delete(String _key) | |
46 { | |
47 if (_key == null) { | |
48 return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED); | |
49 } | |
50 | |
51 if (!attrs.contains(_key)) { | |
52 return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND); | |
53 } | |
54 | |
55 TreeMap<String,ByteBuffer> newMap = attrs.delete(_key); | |
56 TreeNode newNode = new DefaultTreeNode(children,newMap); | |
57 return DefaultEither.newB(newNode); | |
58 } | |
59 | 31 |
60 @Override | 32 public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<String, List<ByteBuffer>> _attrs, OperationLog _log) { |
61 public Either<Error,TreeNode> put(String _key, ByteBuffer _value) | 33 children = _children; |
62 { | 34 attrs = _attrs; |
63 if (_key == null || _value == null) { | 35 log = _log; |
64 return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED); | 36 } |
65 } | |
66 | |
67 TreeMap<String,ByteBuffer> newMap = attrs.set(_key,_value); | |
68 TreeNode newNode = new DefaultTreeNode(children,newMap); | |
69 return DefaultEither.newB(newNode); | |
70 } | |
71 | 37 |
72 @Override | 38 @Override |
73 public ByteBuffer get(String _key) | 39 public TreeMap<String, List<ByteBuffer>> getAttributesAsRawMap() { |
74 { | 40 return attrs; |
75 if (_key == null) { | 41 } |
76 return null; | |
77 } | |
78 | |
79 Option<ByteBuffer> result = attrs.get(_key); | |
80 return result.isSome() ? result.some() : null; | |
81 } | |
82 | 42 |
83 @Override | 43 @Override |
84 public String getString(String key) { | 44 public Either<Error, TreeNode> delete(String _key) { |
85 ByteBuffer attribute = get(key); | 45 if (_key == null) { |
86 if (attribute != null) | 46 return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED); |
87 return new String(attribute.array()); | |
88 return null; | |
89 } | 47 } |
90 | 48 |
91 @Override | 49 if (!attrs.contains(_key)) { |
92 public List<String> getKeys() { | 50 return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND); |
93 return attrs.keys(); | |
94 } | 51 } |
52 | |
53 TreeMap<String, List<ByteBuffer>> newMap = attrs.delete(_key); | |
54 TreeNode newNode = new DefaultTreeNode(children, newMap); | |
55 return DefaultEither.newB(newNode); | |
56 } | |
57 | |
58 @Override | |
59 public Either<Error, TreeNode> put(String _key, ByteBuffer _value) { | |
60 if (_key == null || _value == null) { | |
61 return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED); | |
62 } | |
63 Option<List<ByteBuffer>> attrsListOp = attrs.get(_key); | |
64 | |
65 List<ByteBuffer> newAttrsList; | |
66 if (attrsListOp.isNone()) { | |
67 List<ByteBuffer> attrsList = List.nil(); | |
68 newAttrsList = attrsList.cons(_value); | |
69 } else { | |
70 List<ByteBuffer> attrsList = attrsListOp.some(); | |
71 newAttrsList = attrsList.cons(_value); | |
72 } | |
73 | |
74 TreeMap<String, List<ByteBuffer>> newMap = attrs.set(_key, newAttrsList); | |
75 TreeNode newNode = new DefaultTreeNode(children, newMap); | |
76 return DefaultEither.newB(newNode); | |
77 } | |
78 | |
79 @Override | |
80 public List<ByteBuffer> get(String _key) { | |
81 if (_key == null) { | |
82 return List.nil(); | |
83 } | |
84 | |
85 Option<List<ByteBuffer>> result = attrs.get(_key); | |
86 return result.isSome() ? result.some() : List.nil(); | |
87 } | |
88 | |
89 @Override | |
90 public Iterator<String> getString(String key) { | |
91 List<ByteBuffer> attributeList = get(key); | |
92 if (attributeList == null) | |
93 return new NulIterator<>(); | |
94 | |
95 return new Iterator<String>() { | |
96 | |
97 List<ByteBuffer> iteratorAttributeList = attributeList; | |
98 ByteBuffer attribute; | |
99 | |
100 @Override | |
101 public boolean hasNext() { | |
102 if (!iteratorAttributeList.isEmpty()) { | |
103 attribute = iteratorAttributeList.head(); | |
104 iteratorAttributeList = iteratorAttributeList.tail(); | |
105 return true; | |
106 } | |
107 return false; | |
108 } | |
109 | |
110 @Override | |
111 public String next() { | |
112 return new String(attribute.array()); | |
113 } | |
114 | |
115 }; | |
116 } | |
117 | |
118 @Override | |
119 public List<String> getKeys() { | |
120 return attrs.keys(); | |
121 } | |
95 } | 122 } |