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