comparison src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java @ 31:418088ca2b30

added Generics parameters to EditableNode framework
author Shoshi TAMAKI
date Wed, 16 Jan 2013 03:23:57 +0900
parents 5f4172d6fb8b
children cf958638a471
comparison
equal deleted inserted replaced
30:592ee5f27ad2 31:418088ca2b30
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableWrapper; 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableWrapper;
15 15
16 public class LoggingChildren implements EditableChildren 16 public class LoggingChildren<T extends EditableNode<T>>
17 implements EditableChildren<LoggingNode<T>>
17 { 18 {
18 private final EditableChildren wrap; 19 private final EditableChildren<T> wrap;
19 private final Logger log; 20 private final Logger log;
20 21
21 public LoggingChildren(EditableChildren _wrap,Logger _log) 22 public LoggingChildren(EditableChildren<T> _wrap,Logger _log)
22 { 23 {
23 wrap = _wrap; 24 wrap = _wrap;
24 log = _log; 25 log = _log;
25 } 26 }
26 27
36 IterableWrapper<Node> wrapper = new IterableWrapper<Node>(this); 37 IterableWrapper<Node> wrapper = new IterableWrapper<Node>(this);
37 return wrapper.iterator(); 38 return wrapper.iterator();
38 } 39 }
39 40
40 @Override 41 @Override
41 public Either<Error,EditableNode> addNewChildAt(final int _pos) 42 public Either<Error,LoggingNode<T>> addNewChildAt(final int _pos)
42 { 43 {
43 Either<Error,EditableNode> either = wrap.addNewChildAt(_pos); 44 Either<Error,T> either = wrap.addNewChildAt(_pos);
44 if(either.isA()){ 45 if(either.isA()){
45 return either; 46 return DefaultEither.newA(either.a());
46 } 47 }
47 48
48 Operation opAddChild = new AppendChildAtOperation(){ 49 Operation opAddChild = new AppendChildAtOperation(){
49 @Override 50 @Override
50 public int position(){ 51 public int position(){
51 return _pos; 52 return _pos;
52 } 53 }
53 }; 54 };
54 55
55 Logger newLog = log.add(opAddChild); 56 Logger newLog = log.add(opAddChild);
56 EditableNode newWrap = either.b(); 57 T newWrap = either.b();
57 EditableNode newLoggingNode = new LoggingNode(newWrap,newLog); 58 LoggingNode<T> newLoggingNode = new LoggingNode<T>(newWrap,newLog);
58 59
59 return DefaultEither.newB(newLoggingNode); 60 return DefaultEither.newB(newLoggingNode);
60 } 61 }
61 62
62 @Override 63 @Override
63 public Either<Error,EditableNode> deleteChildAt(final int _pos) 64 public Either<Error,LoggingNode<T>> deleteChildAt(final int _pos)
64 { 65 {
65 Either<Error,EditableNode> either = wrap.deleteChildAt(_pos); 66 Either<Error,T> either = wrap.deleteChildAt(_pos);
66 if(either.isA()){ 67 if(either.isA()){
67 return either; 68 return DefaultEither.newA(either.a());
68 } 69 }
69 70
70 Operation opDeleteChild = new DeleteChildAtOperation(){ 71 Operation opDeleteChild = new DeleteChildAtOperation(){
71 @Override 72 @Override
72 public int position(){ 73 public int position(){
73 return _pos; 74 return _pos;
74 } 75 }
75 }; 76 };
76 77
77 Logger newLog = log.add(opDeleteChild); 78 Logger newLog = log.add(opDeleteChild);
78 EditableNode newLoggingNode = new LoggingNode(either.b(),newLog); 79 LoggingNode<T> newLoggingNode = new LoggingNode<T>(either.b(),newLog);
79 80
80 return DefaultEither.newB(newLoggingNode); 81 return DefaultEither.newB(newLoggingNode);
81 } 82 }
82 } 83 }