Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/tree/DifferenceListJungleTree.java @ 317:d6b81870216b
Persisitent Differential Tree implement
author | tatsuki |
---|---|
date | Wed, 01 Feb 2017 04:04:17 +0900 |
parents | 0767620e6f5f |
children | 2a0cb1f0ba4e |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.jungle.tree; import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListWriter; import jp.ac.u_ryukyu.ie.cr.jungle.store.TreeContext; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.DifferenceJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.treeEditor.TreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.manager.DifferenceTransactionManager; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.manager.TransactionManager; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Differencial.DifferencialTreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.GetOldTreeError; import java.util.concurrent.atomic.AtomicReference; public class DifferenceListJungleTree extends DefaultJungleTree { public DifferenceListJungleTree(TreeContext tc, String uuid, ChangeListWriter writer, TreeEditor editor) { super(tc, uuid, writer, editor); } @Override public JungleTreeEditor getJungleTreeEditor() { AtomicReference<TreeContext> repository = super.getRepository(); TreeContext tc = repository.get(); ChangeListWriter writer = super.getWriter(); String uuid = super.getUuid(); TreeEditor treeEditor = super.getTreeEditor(); TransactionManager txManager = new DifferenceTransactionManager(writer, tc, repository, uuid); TreeNode subTreeRoot = new DifferencialTreeNode(); return new DifferenceJungleTreeEditor(subTreeRoot, txManager, treeEditor); } @Override public Either<Error, JungleTree> getOldTree(long revision) { AtomicReference<TreeContext> repository = super.getRepository(); TreeContext tc = repository.get(); for (; tc.revision() != revision; ) { tc = tc.prev(); if (tc == null) return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); } String uuid = super.getUuid(); String oldTreeUuid = uuid + revision; ChangeListWriter writer = super.getWriter(); TreeEditor treeEditor = super.getTreeEditor(); JungleTree oldTree = new DifferenceListJungleTree(tc, oldTreeUuid, writer, treeEditor); return DefaultEither.newB(oldTree); } //test用 method キャストして使ってね public TreeNode getEndNode() { AtomicReference<TreeContext> repository = super.getRepository(); TreeContext tc = repository.get(); return tc.getEndNode(); } }