Mercurial > hg > Database > jungle-network
annotate src/main/java/app/bbs/BulletinBoardJungleManager.java @ 176:6f104ab4eb81
fit jungle core but editMessage is not work
author | tatsuki |
---|---|
date | Mon, 01 Sep 2014 00:04:32 +0900 |
parents | 06cddf529325 |
children |
rev | line source |
---|---|
112 | 1 package app.bbs; |
39 | 2 |
3 import java.nio.ByteBuffer; | |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
4 import java.util.concurrent.atomic.AtomicInteger; |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
5 |
96 | 6 import alice.jungle.operations.NetworkTreeOperationLog; |
123 | 7 import alice.jungle.transaction.JungleUpdater; |
93 | 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; |
15 | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | |
39 | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; |
93 | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; |
176 | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
93 | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; |
39 | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
15 | 18 |
133
00fcb468de27
Rename to BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
132
diff
changeset
|
19 public class BulletinBoardJungleManager { |
00fcb468de27
Rename to BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
132
diff
changeset
|
20 private static BulletinBoardJungleManager instance = new BulletinBoardJungleManager(); |
43 | 21 private Jungle jungle; |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
22 private static AtomicInteger requestCounter = new AtomicInteger(0); |
43 | 23 |
133
00fcb468de27
Rename to BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
132
diff
changeset
|
24 private BulletinBoardJungleManager() { |
116 | 25 jungle = new DefaultJungle(null,"default",new DefaultTreeEditor(new DefaultTraverser())); |
15 | 26 } |
27 | |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
28 public static int requestGetAndIncrement() { |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
29 return requestCounter.getAndIncrement(); |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
30 } |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
31 |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
32 public static int requestIncrementAndGet() { |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
33 return requestCounter.incrementAndGet(); |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
34 } |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
35 |
133
00fcb468de27
Rename to BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
132
diff
changeset
|
36 public static BulletinBoardJungleManager getInstantce() { |
115 | 37 return instance; |
113 | 38 } |
39 | |
45 | 40 public static void setJungle(Jungle _j) { |
115 | 41 instance.jungle = _j; |
15 | 42 } |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
43 public static AtomicInteger getRequestCounter() { |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
44 return requestCounter; |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
45 } |
15 | 46 |
43 | 47 public static Jungle getJungle() { |
115 | 48 return instance.jungle; |
43 | 49 } |
50 | |
51 public static JungleTree createNewTree(String name) { | |
116 | 52 return instance.jungle.createNewTree(name); |
15 | 53 } |
54 | |
96 | 55 public static Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) { |
56 String treeName = netLog.getTreeName(); | |
133
00fcb468de27
Rename to BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
132
diff
changeset
|
57 Jungle jungle = BulletinBoardJungleManager.getJungle(); |
93 | 58 if (jungle.getTreeByName(treeName) == null) { |
59 if(null == jungle.createNewTree(treeName)){ | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
60 throw new IllegalStateException(); |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
61 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
62 } |
127
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
63 Either<Error, JungleTreeEditor> either = null; |
138
07106bbc6c17
Removed unnecessary class file
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
135
diff
changeset
|
64 JungleTree tree = jungle.getTreeByName(treeName); |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
65 |
149
06cddf529325
Modified lates renew time
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
148
diff
changeset
|
66 long timestamp = System.currentTimeMillis(); |
148 | 67 ByteBuffer tBuffer = ByteBuffer.allocate(16); |
68 DefaultNodePath root = new DefaultNodePath(); | |
69 tBuffer.putLong(timestamp); | |
127
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
70 do { |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
71 JungleTreeEditor editor = tree.getLocalTreeEditor(); |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
72 /* |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
73 * Merge. |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
74 */ |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
75 int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
76 either = JungleUpdater.edit(editor, netLog, pos); |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
77 if(either.isA()) { |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
78 throw new IllegalStateException(); |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
79 } |
292538b1de32
Fixed BulletinBoardJungleManager bug
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
123
diff
changeset
|
80 editor = either.b(); |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
81 either = editor.putAttribute(root, "renewtime", tBuffer); |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
82 if(either.isA()) { |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
83 throw new IllegalStateException(); |
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
84 } |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
85 editor = either.b(); |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
86 either = editor.success(); |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
87 }while(either.isA()); |
148 | 88 requestIncrementAndGet(); |
89 return either; | |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
90 } |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
91 |
176 | 92 private static int calculatePosition(TreeNode node, long newNodeTimeStamp) { |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
93 int count = 0; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
94 long childTimeStamp = 0; |
176 | 95 for(TreeNode n : node.getChildren()) { |
123 | 96 ByteBuffer timestamp = n.getAttributes().get("timestamp"); |
97 if(timestamp == null) { | |
98 return count; | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
99 } |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
100 childTimeStamp = timestamp.getLong(0); |
123 | 101 if (newNodeTimeStamp < childTimeStamp) { |
102 break; | |
59
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
103 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
104 count++; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
105 } |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
106 return count; |
8a532ca5df80
refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
one
parents:
56
diff
changeset
|
107 } |
15 | 108 } |