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