Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java @ 148:a2c374a2686b
Merge with 0854f9a9e81db5db639f02a126ebabf1d004b98e
author | one |
---|---|
date | Fri, 21 Nov 2014 12:49:28 +0900 |
parents | 371b6ddb78f2 0854f9a9e81d |
children | 8a0aa8fc137c |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; import java.nio.ByteBuffer; import java.util.Iterator; import fj.data.List; import fj.data.Option; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NulIterator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; public class DefaultTreeNodeAttribute implements TreeNodeAttributes { public List<TreeNode> children; public TreeMap<String, List<ByteBuffer>> attrs; OperationLog log; public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<String, List<ByteBuffer>> _attrs) { children = _children; attrs = _attrs; log = new DefaultOperationLog(); } public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<String, List<ByteBuffer>> _attrs, OperationLog _log) { children = _children; attrs = _attrs; log = _log; } @Override public TreeMap<String, List<ByteBuffer>> getAttributesAsRawMap() { return attrs; } @Override public Either<Error, TreeNode> delete(String _key) { if (_key == null) { return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED); } if (!attrs.contains(_key)) { return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND); } TreeMap<String, List<ByteBuffer>> newMap = attrs.delete(_key); TreeNode newNode = new DefaultTreeNode(children, newMap); return DefaultEither.newB(newNode); } @Override public Either<Error, TreeNode> put(String _key, ByteBuffer _value) { if (_key == null || _value == null) { return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED); } Option<List<ByteBuffer>> attrsListOp = attrs.get(_key); List<ByteBuffer> newAttrsList; if (attrsListOp.isNone()) { List<ByteBuffer> attrsList = List.nil(); newAttrsList = attrsList.cons(_value); } else { List<ByteBuffer> attrsList = attrsListOp.some(); newAttrsList = attrsList.cons(_value); } TreeMap<String, List<ByteBuffer>> newMap = attrs.set(_key, newAttrsList); TreeNode newNode = new DefaultTreeNode(children, newMap); return DefaultEither.newB(newNode); } @Override public List<ByteBuffer> get(String _key) { if (_key == null) { return List.nil(); } Option<List<ByteBuffer>> result = attrs.get(_key); return result.isSome() ? result.some() : List.nil(); } @Override public Iterator<String> getString(String key) { List<ByteBuffer> attributeList = get(key); if (attributeList == null) return new NulIterator<>(); return new Iterator<String>() { List<ByteBuffer> iteratorAttributeList = attributeList; ByteBuffer attribute; @Override public boolean hasNext() { if (!iteratorAttributeList.isEmpty()) { attribute = iteratorAttributeList.head(); iteratorAttributeList = iteratorAttributeList.tail(); return true; } return false; } @Override public String next() { return new String(attribute.array()); } }; } @Override public List<String> getKeys() { return attrs.keys(); } }