comparison src/main/java/app/bbs/BulletinBoardJungleManager.java @ 147:202ea963ec20

Added requestCounter in BulletinBoardJungleManager
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 28 Jan 2014 09:16:39 +0900
parents 29734d7d6521
children 7d248be1d3e4
comparison
equal deleted inserted replaced
146:29734d7d6521 147:202ea963ec20
1 package app.bbs; 1 package app.bbs;
2 2
3 import java.nio.ByteBuffer; 3 import java.nio.ByteBuffer;
4 import java.util.Date; 4 import java.util.Date;
5 import java.util.concurrent.atomic.AtomicInteger;
5 6
6 import javax.naming.directory.Attribute;
7 7
8 import alice.jungle.operations.NetworkTreeOperationLog; 8 import alice.jungle.operations.NetworkTreeOperationLog;
9 import alice.jungle.transaction.JungleUpdater; 9 import alice.jungle.transaction.JungleUpdater;
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; 19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
22 20
23 public class BulletinBoardJungleManager { 21 public class BulletinBoardJungleManager {
24 private static BulletinBoardJungleManager instance = new BulletinBoardJungleManager(); 22 private static BulletinBoardJungleManager instance = new BulletinBoardJungleManager();
25 private Jungle jungle; 23 private Jungle jungle;
24 private static AtomicInteger requestCounter = new AtomicInteger(0);
26 25
27 private BulletinBoardJungleManager() { 26 private BulletinBoardJungleManager() {
28 jungle = new DefaultJungle(null,"default",new DefaultTreeEditor(new DefaultTraverser())); 27 jungle = new DefaultJungle(null,"default",new DefaultTreeEditor(new DefaultTraverser()));
28 }
29
30 public static int requestGetAndIncrement() {
31 return requestCounter.getAndIncrement();
32 }
33
34 public static int requestIncrementAndGet() {
35 return requestCounter.incrementAndGet();
29 } 36 }
30 37
31 public static BulletinBoardJungleManager getInstantce() { 38 public static BulletinBoardJungleManager getInstantce() {
32 return instance; 39 return instance;
33 } 40 }
34 41
35 public static void setJungle(Jungle _j) { 42 public static void setJungle(Jungle _j) {
36 instance.jungle = _j; 43 instance.jungle = _j;
44 }
45 public static AtomicInteger getRequestCounter() {
46 return requestCounter;
37 } 47 }
38 48
39 public static Jungle getJungle() { 49 public static Jungle getJungle() {
40 return instance.jungle; 50 return instance.jungle;
41 } 51 }
50 if (jungle.getTreeByName(treeName) == null) { 60 if (jungle.getTreeByName(treeName) == null) {
51 if(null == jungle.createNewTree(treeName)){ 61 if(null == jungle.createNewTree(treeName)){
52 throw new IllegalStateException(); 62 throw new IllegalStateException();
53 } 63 }
54 } 64 }
55
56
57 Either<Error, JungleTreeEditor> either = null; 65 Either<Error, JungleTreeEditor> either = null;
58 JungleTree tree = jungle.getTreeByName(treeName); 66 JungleTree tree = jungle.getTreeByName(treeName);
59 67
60 do { 68 do {
61 JungleTreeEditor editor = tree.getLocalTreeEditor(); 69 JungleTreeEditor editor = tree.getLocalTreeEditor();
71 editor = either.b(); 79 editor = either.b();
72 either = editor.success(); 80 either = editor.success();
73 }while(either.isA()); 81 }while(either.isA());
74 82
75 renewBoardTimeStamp(tree); 83 renewBoardTimeStamp(tree);
84 requestCounter.incrementAndGet();
76 return either; 85 return either;
77 } 86 }
78 87
79 private static void renewBoardTimeStamp(JungleTree tree) { 88 private static void renewBoardTimeStamp(JungleTree tree) {
80 JungleTreeEditor editor = tree.getLocalTreeEditor(); 89 JungleTreeEditor editor = tree.getLocalTreeEditor();
84 tBuffer.putLong(timestamp); 93 tBuffer.putLong(timestamp);
85 94
86 Either<Error, JungleTreeEditor> either = null; 95 Either<Error, JungleTreeEditor> either = null;
87 do { 96 do {
88 either = editor.putAttribute(root, "renewtime", tBuffer); 97 either = editor.putAttribute(root, "renewtime", tBuffer);
98 if(either.isA()) {
99 throw new IllegalStateException();
100 }
89 editor = either.b(); 101 editor = either.b();
90 either = editor.success(); 102 either = editor.success();
91 }while(either.isA()); 103 }while(either.isA());
92
93 } 104 }
94 105
95 private static int calculatePosition(Node node, long newNodeTimeStamp) { 106 private static int calculatePosition(Node node, long newNodeTimeStamp) {
96 int count = 0; 107 int count = 0;
97 long childTimeStamp = 0; 108 long childTimeStamp = 0;