Mercurial > hg > Database > jungle-network
annotate src/main/java/app/bbs/BullentInBoardJungleManager.java @ 123:495ac60d7f5f
Modified JungleUpdater
author | one |
---|---|
date | Fri, 27 Dec 2013 20:13:37 +0900 |
parents | src/main/java/app/bbs/JungleManager.java@895ab2907db3 |
children | 292538b1de32 |
rev | line source |
---|---|
112 | 1 package app.bbs; |
39 | 2 |
3 import java.nio.ByteBuffer; | |
15 | 4 |
96 | 5 import alice.jungle.operations.NetworkTreeOperationLog; |
123 | 6 import alice.jungle.transaction.JungleUpdater; |
93 | 7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; |
15 | 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | |
39 | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; |
93 | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; | |
39 | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
15 | 16 |
123 | 17 public class BullentInBoardJungleManager { |
18 private static BullentInBoardJungleManager instance = new BullentInBoardJungleManager(); | |
43 | 19 private Jungle jungle; |
20 | |
123 | 21 private BullentInBoardJungleManager() { |
116 | 22 jungle = new DefaultJungle(null,"default",new DefaultTreeEditor(new DefaultTraverser())); |
15 | 23 } |
24 | |
123 | 25 public static BullentInBoardJungleManager getInstantce() { |
115 | 26 return instance; |
113 | 27 } |
28 | |
45 | 29 public static void setJungle(Jungle _j) { |
115 | 30 instance.jungle = _j; |
15 | 31 } |
32 | |
43 | 33 public static Jungle getJungle() { |
115 | 34 return instance.jungle; |
43 | 35 } |
36 | |
37 public static JungleTree createNewTree(String name) { | |
116 | 38 return instance.jungle.createNewTree(name); |
15 | 39 } |
40 | |
96 | 41 public static Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) { |
42 String treeName = netLog.getTreeName(); | |
123 | 43 Jungle jungle = BullentInBoardJungleManager.getJungle(); |
93 | 44 if (jungle.getTreeByName(treeName) == null) { |
45 if(null == jungle.createNewTree(treeName)){ | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
46 throw new IllegalStateException(); |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
47 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
48 } |
93 | 49 JungleTree tree = jungle.getTreeByName(treeName); |
95
dcd767b76f8d
Modified putDataSement for to use NetworkTreeOperationLog
one
parents:
93
diff
changeset
|
50 JungleTreeEditor editor = tree.getLocalTreeEditor(); |
96 | 51 |
123 | 52 int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); |
53 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, netLog, pos); | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
54 if(either.isA()) { |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
55 throw new IllegalStateException(); |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
56 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
57 editor = either.b(); |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
58 either = editor.success(); |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
59 if(either.isA()) { |
67 | 60 throw new IllegalStateException(); |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
61 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
62 return either; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
63 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
64 |
90 | 65 private static int calculatePosition(Node node, long newNodeTimeStamp) { |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
66 int count = 0; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
67 long childTimeStamp = 0; |
123 | 68 for(Node n : node.getChildren()) { |
69 ByteBuffer timestamp = n.getAttributes().get("timestamp"); | |
70 if(timestamp == null) { | |
71 return count; | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
72 } |
123 | 73 childTimeStamp = timestamp.getLong(); |
74 if (newNodeTimeStamp < childTimeStamp) { | |
75 break; | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
76 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
77 count++; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
78 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
79 return count; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
80 } |
15 | 81 } |