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 }