# HG changeset patch # User one # Date 1416950587 -32400 # Node ID b8cef4b640a3c2831067065725c0f23dfaba51ab # Parent 20af7f25ef32a6bc476f6a4a3e5d1d7f72352284 update index for commit diff -r 20af7f25ef32 -r b8cef4b640a3 src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Tue Nov 25 17:52:41 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Wed Nov 26 06:23:07 2014 +0900 @@ -3,7 +3,6 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.IndexTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor; diff -r 20af7f25ef32 -r b8cef4b640a3 src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Tue Nov 25 17:52:41 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Wed Nov 26 06:23:07 2014 +0900 @@ -10,81 +10,85 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; +import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; -public class DefaultTransactionManager implements TransactionManager -{ - private final AtomicReservableReference repository; - private final TreeContext tip; - private final ChangeListWriter writer; - private final String uuid; - - public DefaultTransactionManager(ChangeListWriter _writer,TreeContext _tip, AtomicReservableReference _repository,String _uuid) - { - repository = _repository; - tip = _tip; - writer = _writer; - uuid = _uuid; - } - - @Override - public Either commit(TreeNode _newRoot,final TreeOperationLog _log) - { - ChangeSet cs = tip.getChangeSet(); - long currentRevision = cs.revision(); - long nextRevision = currentRevision + 1; - - final String _treeName = cs.getTreeName(); - ChangeList list = new ChangeList(){ - @Override - public Iterator iterator(){ - return _log.iterator(); - } - @Override - public String getTreeName(){ - return _treeName; - } - @Override - public String uuid(){ - return uuid; - } +public class DefaultTransactionManager implements TransactionManager { + private final AtomicReservableReference repository; + private final TreeContext tip; + private final ChangeListWriter writer; + private final String uuid; + + public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip, + AtomicReservableReference _repository, String _uuid) { + repository = _repository; + tip = _tip; + writer = _writer; + uuid = _uuid; + } + + @Override + public Either commit(TreeNode _newRoot, final TreeOperationLog _log) { + ChangeSet cs = tip.getChangeSet(); + long currentRevision = cs.revision(); + long nextRevision = currentRevision + 1; + + final String _treeName = cs.getTreeName(); + ChangeList list = new ChangeList() { + @Override + public Iterator iterator() { + return _log.iterator(); + } + + @Override + public String getTreeName() { + return _treeName; + } + + @Override + public String uuid() { + return uuid; + } - }; - - Index nulIndex = new Index(); - ParentIndex nulParentIndex = new ParentIndex(); - DefaultChangeSet newCs = new DefaultChangeSet(_newRoot,cs,list,uuid, _treeName, nextRevision, nulIndex, nulParentIndex); - DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs); - - @SuppressWarnings("rawtypes") - Reservation reservation = repository.makeReservation(tip,newContext); - if(reservation == null){ - return DefaultEither.newA((Error)new DefaultError()); - } - Result r = writer.write(list); - if(r == Result.SUCCESS){ - reservation.confirm(); - TransactionManager txManager = new DefaultTransactionManager(writer,newContext,repository,uuid); - return DefaultEither.newB(txManager); - } - return DefaultEither.newA((Error)new DefaultError()); - } + }; + + IndexManager indexManager = new IndexManager(repository.getReservation()); + InterfaceTraverser traverser = new InterfaceTraverser(_newRoot, indexManager, true); + traverser.createIndex(); + Index nulIndex = traverser.getIndex(); + ParentIndex nulParentIndex = traverser.getParentIndex(); + DefaultChangeSet newCs = new DefaultChangeSet(_newRoot, cs, list, uuid, _treeName, nextRevision, nulIndex, + nulParentIndex); + DefaultTreeContext newContext = new DefaultTreeContext(_newRoot, newCs); - @Override - public String getUUID() - { - return uuid; - } + @SuppressWarnings("rawtypes") + Reservation reservation = repository.makeReservation(tip, newContext); + if (reservation == null) { + return DefaultEither.newA((Error) new DefaultError()); + } + Result r = writer.write(list); + if (r == Result.SUCCESS) { + reservation.confirm(); + TransactionManager txManager = new DefaultTransactionManager(writer, newContext, repository, uuid); + return DefaultEither.newB(txManager); + } + return DefaultEither.newA((Error) new DefaultError()); + } - @Override - public long getRevision() - { - ChangeSet cs = tip.getChangeSet(); - return cs.revision(); - } + @Override + public String getUUID() { + return uuid; + } + + @Override + public long getRevision() { + ChangeSet cs = tip.getChangeSet(); + return cs.revision(); + } } diff -r 20af7f25ef32 -r b8cef4b640a3 src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java Tue Nov 25 17:52:41 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java Wed Nov 26 06:23:07 2014 +0900 @@ -18,11 +18,15 @@ ParentIndex parentIndex; boolean parentUpdateFlag; IndexManager indexManager; - boolean indexFlag; + boolean useIndex; - public InterfaceTraverser(TreeNode _root, Index index, ParentIndex parentIndex, IndexManager indexManager, - boolean indexFlag) { - this.node = _root; + public InterfaceTraverser(TreeNode root, IndexManager indexManager, boolean indexFlag) { + this(root, new Index(), new ParentIndex(), indexManager, indexFlag); + } + + public InterfaceTraverser(TreeNode root, Index index, ParentIndex parentIndex, IndexManager indexManager, + boolean useIndex) { + this.node = root; this.index = index; this.indexManager = indexManager; this.parentIndex = parentIndex; @@ -30,7 +34,7 @@ parentUpdateFlag = true; else parentUpdateFlag = false; - this.indexFlag = indexFlag; + this.useIndex = useIndex; } public Index getIndex() { @@ -50,51 +54,20 @@ this.index = index; } - public Iterator emptyQuery() { + public void createIndex() { final PathNodeIterator itNode = new PathNodeIterator(node); - return new Iterator() { - - private TreeNode matchNode = nextmatch(itNode); - - private TreeNode nextmatch(PathNodeIterator itNode) { - - for (; itNode.hasNext();) { - TreeNode targetNode = itNode.next(); - List keys = targetNode.getAttributes().getKeys(); - for (String key : keys) { - String value = targetNode.getAttributes().getString(key); - if (value != null) - index = index.set(key, value, targetNode); - if (parentUpdateFlag) - parentIndex = parentIndex.set(targetNode); - } - } - commit(); - return null; + for (; itNode.hasNext();) { + TreeNode targetNode = itNode.next(); + if (parentUpdateFlag) + parentIndex = parentIndex.set(targetNode); + List keys = targetNode.getAttributes().getKeys(); + for (String key : keys) { + String value = targetNode.getAttributes().getString(key); + if (value != null) + index = index.set(key, value, targetNode); } - - @Override - public boolean hasNext() { - if (matchNode == null) { - return false; - } - return true; - } - - @Override - public TreeNode next() { - TreeNode currentPair = matchNode; - matchNode = nextmatch(itNode); - return currentPair; - } - - @Override - public void remove() { - } - - }; - + } } /** @@ -112,7 +85,7 @@ * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す */ List nodeList = index.get(key, searchValue); - if (nodeList != null) { + if (nodeList != null && useIndex) { if (nodeList.isEmpty()) return new NulIterator();// 空のIteratorを返す @@ -187,7 +160,7 @@ * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す */ Iterator NodeIterator = index.getAll(key); - if (NodeIterator != null) { + if (NodeIterator != null && useIndex) { List filteredList = List.nil(); for (; NodeIterator.hasNext();) { TreeNode targetNode = NodeIterator.next(); @@ -243,7 +216,7 @@ public Iterator find(Query query, String key, String searchValue) { List nodeList = index.get(key, searchValue); - if (nodeList != null) { + if (nodeList != null && useIndex) { return nodeList.iterator(); } else { @@ -257,7 +230,7 @@ for (; itNode.hasNext();) { TreeNode targetNode = itNode.next(); String value = targetNode.getAttributes().getString(key); - if (indexFlag) { + if (useIndex) { if (value != null) index = index.set(key, value, targetNode); } @@ -266,7 +239,8 @@ if (query.condition(targetNode)) return targetNode; } - commit(); + if (useIndex || parentUpdateFlag) + commit(); return null; } @@ -296,7 +270,7 @@ public Iterator findAll(Query query, String key) { Iterator nodeList = index.getAll(key); - if (nodeList != null) { + if (nodeList != null && useIndex) { return nodeList; @@ -312,7 +286,7 @@ for (; itNode.hasNext();) { TreeNode targetNode = itNode.next(); String value = targetNode.getAttributes().getString(key); - if (indexFlag) { + if (useIndex) { if (value != null) index = index.set(key, value, targetNode); } @@ -321,7 +295,8 @@ if (query.condition(targetNode)) return targetNode; } - commit(); + if (useIndex || parentUpdateFlag) + commit(); return null; }