Mercurial > hg > Members > tatsuki > bench > jungle-core
annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java @ 76:2fc0b0313dc0
Move to Bullet in Board
but has worning
author | one |
---|---|
date | Fri, 29 Aug 2014 03:16:27 +0900 |
parents | 240a385bf79d |
children | 540a27dde42f |
rev | line source |
---|---|
10 | 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl; |
2 | |
28 | 3 import fj.data.List; |
12 | 4 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; |
10 | 5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; |
14 | 6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; |
28 | 7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Direction; | |
23 | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; |
14 | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser; |
23 | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
10 | 14 |
49
e3a507fd57a4
modified TreeEditor and JungleTreeEditor (not done yet)
Shoshi TAMAKI
parents:
38
diff
changeset
|
15 public class DefaultTreeEditor implements TreeEditor |
10 | 16 { |
35 | 17 private final Traverser traverser; |
10 | 18 |
49
e3a507fd57a4
modified TreeEditor and JungleTreeEditor (not done yet)
Shoshi TAMAKI
parents:
38
diff
changeset
|
19 public DefaultTreeEditor(Traverser _traverser) |
10 | 20 { |
35 | 21 traverser = _traverser; |
22 } | |
23 | |
10 | 24 @Override |
52 | 25 public <T extends TreeNode<T>> Either<Error,T> edit(T _root,NodePath _path,NodeEditor _editor) |
12 | 26 { |
35 | 27 DefaultEvaluator e = new DefaultEvaluator(_path); |
68
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
28 //TraversableNodeWrapper<T> wrap = new TraversableNodeWrapper<T>(_root); |
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
29 Either<Error, Traversal<T>> either = traverser.traverse(_root,e); |
18 | 30 |
28 | 31 if(either.isA()){ |
32 return DefaultEither.newA(either.a()); | |
16 | 33 } |
14 | 34 |
68
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
35 Traversal<T> t = either.b(); |
49
e3a507fd57a4
modified TreeEditor and JungleTreeEditor (not done yet)
Shoshi TAMAKI
parents:
38
diff
changeset
|
36 Either<Error,T> ret = clone(t,_editor); |
28 | 37 |
38 return ret; | |
12 | 39 } |
16 | 40 |
68
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
41 private <T extends TreeNode<T>> Either<Error,T> clone(Traversal<T> _t,NodeEditor _editor) |
25 | 42 { |
29 | 43 // copying nodes from bottom to root |
44 | |
68
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
45 List<Direction<T>> path = List.nil(); |
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
46 for(Direction<T> direction : _t){ |
28 | 47 path = path.cons(direction); |
25 | 48 } |
28 | 49 |
50 // target | |
68
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
51 Direction<T> targetDirection = path.head(); |
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
52 T target = targetDirection.getTarget(); |
52 | 53 EditableNodeWrapper<T> wrapper = new EditableNodeWrapper<T>(target); |
54 Either<Error,EditableNodeWrapper<T>> either = _editor.edit(wrapper); | |
31
418088ca2b30
added Generics parameters to EditableNode framework
Shoshi TAMAKI
parents:
29
diff
changeset
|
55 if(either.isA()){ |
418088ca2b30
added Generics parameters to EditableNode framework
Shoshi TAMAKI
parents:
29
diff
changeset
|
56 return DefaultEither.newA(either.a()); |
418088ca2b30
added Generics parameters to EditableNode framework
Shoshi TAMAKI
parents:
29
diff
changeset
|
57 } |
418088ca2b30
added Generics parameters to EditableNode framework
Shoshi TAMAKI
parents:
29
diff
changeset
|
58 |
52 | 59 T newNode = either.b().getWrap(); |
28 | 60 |
29 | 61 // top |
62 int pos = targetDirection.getPosition(); | |
37 | 63 T child = newNode; |
68
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
64 for(Direction<T> parentDirection : path.tail()){ |
240a385bf79d
delete traversalNodewrapper but not change test source(error)
one
parents:
52
diff
changeset
|
65 TreeNodeChildren<T> chs = parentDirection.getTarget().getChildren(); |
76 | 66 |
37 | 67 Either<Error,T> ret = chs.replaceNode(pos,child); |
31
418088ca2b30
added Generics parameters to EditableNode framework
Shoshi TAMAKI
parents:
29
diff
changeset
|
68 if(ret.isA()){ |
418088ca2b30
added Generics parameters to EditableNode framework
Shoshi TAMAKI
parents:
29
diff
changeset
|
69 return DefaultEither.newA(ret.a()); |
29 | 70 } |
71 | |
37 | 72 T newParent = ret.b(); |
29 | 73 child = newParent; |
74 pos = parentDirection.getPosition(); | |
75 } | |
76 | |
37 | 77 T newRoot = child; |
49
e3a507fd57a4
modified TreeEditor and JungleTreeEditor (not done yet)
Shoshi TAMAKI
parents:
38
diff
changeset
|
78 return DefaultEither.newB(newRoot); |
29 | 79 } |
13 | 80 } |