Mercurial > hg > Members > nobuyasu > jungle-network
annotate src/main/java/app/bbs/NetworkJungleBulletinBoard.java @ 166:b3d5fbe95b9a
Create Folder Method
author | tatsuki |
---|---|
date | Mon, 28 Jul 2014 14:09:54 +0900 |
parents | eef85b5faa15 |
children | 564f683b7aef |
rev | line source |
---|---|
112 | 1 package app.bbs; |
38 | 2 |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
3 import java.io.File; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
4 import java.io.IOException; |
38 | 5 import java.nio.ByteBuffer; |
6 import java.util.concurrent.atomic.AtomicInteger; | |
39 | 7 |
8 import alice.jungle.core.NetworkDefaultJungle; | |
124 | 9 import alice.jungle.persistent.AliceJournal; |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
10 import alice.jungle.persistent.NetworkJournal; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
11 import alice.jungle.persistent.PersistentJournal; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
12 import alice.jungle.transaction.JungleUpdater; |
38 | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; | |
125 | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage; |
38 | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; |
38 | 21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; |
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; | |
166 | 23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TraversableNodeWrapper; |
38 | 24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; |
25 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; | |
166 | 26 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; |
38 | 27 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; |
166 | 28 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; |
38 | 29 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
30 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
31 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
32 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; | |
166 | 33 import junit.framework.Assert; |
38 | 34 |
166 | 35 public class NetworkJungleBulletinBoard implements NetworkBulletinBoard { |
38 | 36 private final Jungle jungle; |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
37 private final NetworkJournal journal; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
38 private final String LOG_DIR; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
39 private Boolean persistentFlag; |
166 | 40 private AtomicInteger requestCounter; |
150
eef85b5faa15
Removed renew atribute
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
41 private long renewTime; |
166 | 42 |
43 private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) { | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
44 journal = _journal; |
166 | 45 jungle = new NetworkDefaultJungle(journal, _uuid, |
46 new DefaultTreeEditor(new DefaultTraverser())); | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
47 BulletinBoardJungleManager.setJungle(jungle); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
48 persistentFlag = false; |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
49 requestCounter = BulletinBoardJungleManager.getRequestCounter(); |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
50 LOG_DIR = "./log"; |
150
eef85b5faa15
Removed renew atribute
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
51 renewTime = 0; |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
52 } |
166 | 53 |
54 public NetworkJungleBulletinBoard(String _uuid) { | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
55 this(_uuid, new AliceJournal()); |
124 | 56 jungle.createNewTree("boards"); |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
57 } |
166 | 58 |
59 public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { | |
60 NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard( | |
61 _uuid, new PersistentJournal()); | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
62 board.persistentFlag = true; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
63 return board; |
38 | 64 } |
166 | 65 |
124 | 66 public void init() { |
166 | 67 if (!persistentFlag) { |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
68 return; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
69 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
70 checkAndCreateLogDirectory(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
71 try { |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
72 commitLogRecover(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
73 } catch (IOException e) { |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
74 e.printStackTrace(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
75 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
76 } |
166 | 77 |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
78 public void checkAndCreateLogDirectory() { |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
79 File logFile = new File(LOG_DIR); |
166 | 80 if (!logFile.exists()) { |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
81 logFile.mkdir(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
82 return; |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
83 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
84 if (logFile.isFile()) { |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
85 logFile.delete(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
86 logFile.mkdir(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
87 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
88 } |
166 | 89 |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
90 public void commitLogRecover() throws IOException { |
166 | 91 File[] logFiles = new File(LOG_DIR).listFiles(); |
92 for (File logFile : logFiles) { | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
93 commitLogRecover(logFile); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
94 logFile.delete(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
95 } |
166 | 96 if (jungle.getTreeByName("boards") == null) { |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
97 jungle.createNewTree("boards"); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
98 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
99 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
100 |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
101 private void commitLogRecover(File logFile) throws IOException { |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
102 journal.setInputFile(logFile); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
103 ChangeListReader reader = journal.getReader(); |
166 | 104 if (reader == null) |
105 return; | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
106 for (ChangeList chList : reader) { |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
107 String treeName = chList.getTreeName(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
108 JungleTree tree = jungle.getTreeByName(treeName); |
166 | 109 if (tree == null) { |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
110 tree = jungle.createNewTree(treeName); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
111 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
112 JungleTreeEditor editor = tree.getLocalTreeEditor(); |
166 | 113 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, |
114 chList); | |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
115 editor = either.b(); |
166 | 116 if (either.isA()) { |
135
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
117 throw new IOException("Failed commit log recovery"); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
118 } |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
119 editor.success(); |
2e8034524259
Added NetworkJournal and SingletonMessageFromAlice class
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
133
diff
changeset
|
120 } |
118
f64ff5bd66f5
Implements persistent for bbs app and Fixed bug JungleUpdater
one
parents:
112
diff
changeset
|
121 } |
38 | 122 |
166 | 123 public Iterable<String> getBoards() { |
38 | 124 JungleTree tree = jungle.getTreeByName("boards"); |
125 Node node = tree.getRootNode(); | |
126 Children<Node> chs = node.getChildren(); | |
166 | 127 |
128 IterableConverter.Converter<String, Node> converter = new IterableConverter.Converter<String, Node>() { | |
38 | 129 public String conv(Node _b) { |
130 ByteBuffer e = _b.getAttributes().get("name"); | |
131 return new String(e.array()); | |
132 } | |
133 }; | |
166 | 134 |
135 return new IterableConverter<String, Node>(chs, converter); | |
38 | 136 } |
166 | 137 |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
138 public long getRenewTime(String _boardName) { |
150
eef85b5faa15
Removed renew atribute
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
139 return renewTime; |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
140 } |
38 | 141 |
166 | 142 public void createBoards(final String _name, final String _author, |
143 final String _initMessage, final String _editKey) { | |
143
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
144 requestCounter.incrementAndGet(); |
166 | 145 if (null == jungle.createNewTree(_name)) { |
38 | 146 throw new IllegalStateException(); |
147 } | |
166 | 148 |
38 | 149 JungleTree tree = jungle.getTreeByName("boards"); |
150 JungleTreeEditor editor = tree.getTreeEditor(); | |
151 DefaultNodePath root = new DefaultNodePath(); | |
166 | 152 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(root, 0); |
153 if (either.isA()) { | |
38 | 154 throw new IllegalStateException(); |
155 } | |
156 editor = either.b(); | |
166 | 157 |
158 either = editor.putAttribute(root.add(0), "name", | |
159 ByteBuffer.wrap(_name.getBytes())); | |
160 if (either.isA()) { | |
38 | 161 throw new IllegalStateException(); |
162 } | |
163 editor = either.b(); | |
149
06cddf529325
Modified lates renew time
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
164 final long timestamp = System.currentTimeMillis(); |
129
1a3edba05f50
Fixed bug NetworkJungleBulletinBoard
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
126
diff
changeset
|
165 ByteBuffer tBuffer = ByteBuffer.allocate(16); |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
166 tBuffer.putLong(timestamp); |
166 | 167 either = editor.putAttribute(root.add(0), "timestamp", tBuffer); |
168 if (either.isA()) { | |
129
1a3edba05f50
Fixed bug NetworkJungleBulletinBoard
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
126
diff
changeset
|
169 throw new IllegalStateException(); |
1a3edba05f50
Fixed bug NetworkJungleBulletinBoard
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
126
diff
changeset
|
170 } |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
171 either = either.b().success(); |
166 | 172 if (either.isA()) { |
38 | 173 throw new IllegalStateException(); |
174 } | |
166 | 175 |
38 | 176 tree = jungle.getTreeByName(_name); |
177 editor = tree.getTreeEditor(); | |
166 | 178 either = editor.addNewChildAt(root, 0); |
179 if (either.isA()) { | |
38 | 180 throw new IllegalStateException(); |
181 } | |
182 editor = either.b(); | |
166 | 183 |
184 NodeEditor e = new NodeEditor() { | |
185 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | |
186 _e = _e.getAttributes() | |
187 .put("author", ByteBuffer.wrap(_author.getBytes())).b(); | |
188 _e = _e.getAttributes() | |
189 .put("mes", ByteBuffer.wrap(_initMessage.getBytes())) | |
190 .b(); | |
191 _e = _e.getAttributes() | |
192 .put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | |
130 | 193 ByteBuffer tBuffer2 = ByteBuffer.allocate(16); |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
194 tBuffer2.putLong(timestamp); |
166 | 195 _e = _e.getAttributes().put("timestamp", tBuffer2).b(); |
38 | 196 return DefaultEither.newB(_e); |
197 } | |
198 }; | |
166 | 199 |
200 either = editor.edit(root.add(0), e); | |
201 if (either.isA()) { | |
38 | 202 throw new IllegalStateException(); |
203 } | |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
204 either.b().success(); |
147
202ea963ec20
Added requestCounter in BulletinBoardJungleManager
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
146
diff
changeset
|
205 |
38 | 206 } |
207 | |
166 | 208 public void createFolder(final String _board, final String _author, |
209 final String _message, final String _editKey, String _nodeNum) { | |
38 | 210 JungleTree tree = jungle.getTreeByName(_board); |
166 | 211 if (tree == null) { |
38 | 212 throw new IllegalStateException(); |
213 } | |
166 | 214 // //--------------------------------------------------------------------------------- |
215 DefaultNodePath path = new DefaultNodePath(); | |
216 try { | |
217 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { | |
218 if (!_nodeNum.substring(count, count + 1).equals("/")) | |
219 path = path.add(Integer.parseInt(_nodeNum.substring(count,count + 1))); | |
220 } | |
221 } catch (Exception _e) { | |
222 } | |
223 requestCounter.incrementAndGet(); | |
46 | 224 Either<Error, JungleTreeEditor> either; |
149
06cddf529325
Modified lates renew time
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
225 final long timestamp = System.currentTimeMillis(); |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
226 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
227 tBuffer.putLong(timestamp); |
166 | 228 do { |
38 | 229 Node node = tree.getRootNode(); |
166 | 230 |
231 | |
232 DefaultTraverser traverser = new DefaultTraverser(); | |
233 TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node); | |
234 DefaultEvaluator evaluator = new DefaultEvaluator(path); | |
235 Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator); | |
236 if (ret.isA()) { | |
237 Assert.fail(); | |
238 } | |
239 | |
240 Traversal<TraversableNodeWrapper<Node>> traversal = ret.b(); | |
241 TraversableNodeWrapper<Node> target = traversal.destination(); | |
242 int size = target.getWrapped().getChildren().size() ; | |
65 | 243 JungleTreeEditor editor = tree.getTreeEditor(); |
166 | 244 either = editor.addNewChildAt(path, size); |
245 if (either.isA()) { | |
38 | 246 throw new IllegalStateException(); |
247 } | |
248 editor = either.b(); | |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
249 |
166 | 250 NodeEditor e = new NodeEditor() { |
251 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | |
252 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | |
253 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | |
254 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | |
255 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | |
38 | 256 return DefaultEither.newB(_e); |
257 } | |
258 }; | |
259 path = path.add(size); | |
166 | 260 either = editor.edit(path, e); |
261 if (either.isA()) { | |
38 | 262 throw new IllegalStateException(); |
263 } | |
264 editor = either.b(); | |
46 | 265 either = editor.success(); |
166 | 266 } while (either.isA()); |
93 | 267 |
38 | 268 } |
269 | |
166 | 270 public void createBoardMessage(final String _board, final String _author, |
271 final String _message, final String _editKey) { | |
272 requestCounter.incrementAndGet(); | |
273 JungleTree tree = jungle.getTreeByName(_board); | |
274 if (tree == null) { | |
275 throw new IllegalStateException(); | |
276 } | |
277 | |
278 Either<Error, JungleTreeEditor> either; | |
279 final long timestamp = System.currentTimeMillis(); | |
280 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | |
281 tBuffer.putLong(timestamp); | |
282 do { | |
283 Node node = tree.getRootNode(); | |
284 int size = node.getChildren().size(); | |
285 DefaultNodePath path = new DefaultNodePath(); | |
286 | |
287 JungleTreeEditor editor = tree.getTreeEditor(); | |
288 either = editor.addNewChildAt(path, size); | |
289 if (either.isA()) { | |
290 throw new IllegalStateException(); | |
291 } | |
292 editor = either.b(); | |
293 | |
294 NodeEditor e = new NodeEditor() { | |
295 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | |
296 _e = _e.getAttributes() | |
297 .put("author", ByteBuffer.wrap(_author.getBytes())) | |
298 .b(); | |
299 _e = _e.getAttributes() | |
300 .put("mes", ByteBuffer.wrap(_message.getBytes())) | |
301 .b(); | |
302 _e = _e.getAttributes() | |
303 .put("key", ByteBuffer.wrap(_editKey.getBytes())) | |
304 .b(); | |
305 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | |
306 return DefaultEither.newB(_e); | |
307 } | |
308 }; | |
309 path = path.add(size); | |
310 either = editor.edit(path, e); | |
311 if (either.isA()) { | |
312 throw new IllegalStateException(); | |
313 } | |
314 editor = either.b(); | |
315 either = editor.success(); | |
316 } while (either.isA()); | |
317 | |
318 } | |
319 | |
320 public void editMessage(String _board, String _uuid, final String _author, | |
321 final String _message, final String _editKey) { | |
143
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
322 requestCounter.incrementAndGet(); |
149
06cddf529325
Modified lates renew time
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
147
diff
changeset
|
323 final long timestamp = System.currentTimeMillis(); |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
324 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
325 tBuffer.putLong(timestamp); |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
326 JungleTree tree = jungle.getTreeByName(_board); |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
327 Either<Error, JungleTreeEditor> either = null; |
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
328 do { |
38 | 329 DefaultNodePath path = new DefaultNodePath(); |
330 path = path.add(Integer.parseInt(_uuid)); | |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
331 |
65 | 332 JungleTreeEditor editor = tree.getTreeEditor(); |
166 | 333 NodeEditor e = new NodeEditor() { |
334 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | |
335 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | |
336 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | |
337 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | |
338 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | |
339 return DefaultEither.newB(_e); | |
38 | 340 } |
341 }; | |
166 | 342 either = editor.edit(path, e); |
343 if (either.isA()) { | |
38 | 344 throw new IllegalStateException(); |
345 } | |
346 editor = either.b(); | |
46 | 347 either = editor.success(); |
166 | 348 } while (either.isA()); |
349 renewTime = timestamp; | |
350 } | |
351 | |
352 public void createAttribute(String _board, String _uuid, final String _author, | |
353 final String _message, final String _editKey) { | |
354 requestCounter.incrementAndGet(); | |
355 final long timestamp = System.currentTimeMillis(); | |
356 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | |
357 tBuffer.putLong(timestamp); | |
358 JungleTree tree = jungle.getTreeByName(_board); | |
359 Either<Error, JungleTreeEditor> either = null; | |
360 DefaultNodePath path = new DefaultNodePath(); | |
361 do { | |
362 try { | |
363 for (int count = 0; _uuid.substring(count, count + 1) != null; count++) { | |
364 if (!_uuid.substring(count, count + 1).equals("/")) | |
365 path = path.add(Integer.parseInt(_uuid.substring(count,count + 1))); | |
366 } | |
367 } catch (Exception _e) { | |
368 } | |
369 Node node = tree.getRootNode(); | |
370 | |
371 | |
372 DefaultTraverser traverser = new DefaultTraverser(); | |
373 TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node); | |
374 DefaultEvaluator evaluator = new DefaultEvaluator(path); | |
375 Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator); | |
376 if (ret.isA()) { | |
377 Assert.fail(); | |
378 } | |
379 | |
380 Traversal<TraversableNodeWrapper<Node>> traversal = ret.b(); | |
381 TraversableNodeWrapper<Node> target = traversal.destination(); | |
382 final Node cheakNode = target.getWrapped(); | |
383 System.out.println(cheakNode.getAttributes().get("attribute")); | |
384 | |
385 | |
386 JungleTreeEditor editor = tree.getTreeEditor(); | |
387 NodeEditor e = new NodeEditor() { | |
388 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | |
389 // EnableNodeWrapper<T> node = _e.getWrap(); | |
390 _e = _e.getAttributes().put("author" , ByteBuffer.wrap(_author.getBytes())).b(); | |
391 _e = _e.getAttributes().put("mes" , ByteBuffer.wrap(_message.getBytes())).b(); | |
392 _e = _e.getAttributes().put("key" , ByteBuffer.wrap(_editKey.getBytes())).b(); | |
393 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | |
394 | |
395 return DefaultEither.newB(_e); | |
396 } | |
397 }; | |
398 either = editor.edit(path, e); | |
399 if (either.isA()) { | |
400 throw new IllegalStateException(); | |
401 } | |
402 editor = either.b(); | |
403 either = editor.success(); | |
404 } while (either.isA()); | |
405 } | |
406 | |
407 public void editMatrixMessage(String _board, String _uuid, final String _author, | |
408 final String _message, final String _editKey) { | |
409 requestCounter.incrementAndGet(); | |
410 final long timestamp = System.currentTimeMillis(); | |
411 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | |
412 tBuffer.putLong(timestamp); | |
413 JungleTree tree = jungle.getTreeByName(_board); | |
414 Either<Error, JungleTreeEditor> either = null; | |
415 do { | |
416 DefaultNodePath path = new DefaultNodePath(); | |
417 path = path.add(Integer.parseInt(_uuid)); | |
418 | |
419 JungleTreeEditor editor = tree.getTreeEditor(); | |
420 NodeEditor e = new NodeEditor() { | |
421 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | |
422 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | |
423 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | |
424 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | |
425 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | |
426 return DefaultEither.newB(_e); | |
427 } | |
428 }; | |
429 either = editor.edit(path, e); | |
430 if (either.isA()) { | |
431 throw new IllegalStateException(); | |
432 } | |
433 editor = either.b(); | |
434 either = editor.success(); | |
435 } while (either.isA()); | |
150
eef85b5faa15
Removed renew atribute
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
436 renewTime = timestamp; |
38 | 437 } |
438 | |
166 | 439 public Iterable<BoardMessage> getMessages(String _boardName) { |
143
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
440 requestCounter.incrementAndGet(); |
38 | 441 JungleTree tree = jungle.getTreeByName(_boardName); |
442 Node node = tree.getRootNode(); | |
443 Children<Node> chs = node.getChildren(); | |
444 final AtomicInteger counter = new AtomicInteger(0); | |
166 | 445 IterableConverter.Converter<BoardMessage, Node> converter = new IterableConverter.Converter<BoardMessage, Node>() { |
446 public BoardMessage conv(Node _b) { | |
447 String uuid = Integer.toString(counter.get()); | |
448 String author = new String(_b.getAttributes().get("author") | |
449 .array()); | |
450 String message = new String(_b.getAttributes().get("mes") | |
451 .array()); | |
452 counter.incrementAndGet(); | |
453 return new BoardMessageImpl(author, message, uuid); | |
454 } | |
455 }; | |
456 return new IterableConverter<BoardMessage, Node>(chs, converter); | |
457 } | |
458 | |
459 public Iterable<BoardMessage> getFolder(String _boardName, String _nodeNum) { | |
460 | |
461 DefaultNodePath path = new DefaultNodePath(); | |
462 try { | |
463 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { | |
464 if (!_nodeNum.substring(count, count + 1).equals("/")) | |
465 path = path.add(Integer.parseInt(_nodeNum.substring(count,count + 1))); | |
466 } | |
467 } catch (Exception _e) { | |
468 } | |
469 requestCounter.incrementAndGet(); | |
470 JungleTree tree = jungle.getTreeByName(_boardName); | |
471 Node node = tree.getRootNode(); | |
472 | |
473 DefaultTraverser traverser = new DefaultTraverser(); | |
474 TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node); | |
475 DefaultEvaluator evaluator = new DefaultEvaluator(path); | |
476 Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator); | |
477 if (ret.isA()) { | |
478 Assert.fail(); | |
479 } | |
480 | |
481 Traversal<TraversableNodeWrapper<Node>> traversal = ret.b(); | |
482 TraversableNodeWrapper<Node> target = traversal.destination(); | |
483 Children<Node> chs = target.getWrapped().getChildren(); | |
484 | |
485 final AtomicInteger counter = new AtomicInteger(0); | |
486 IterableConverter.Converter<BoardMessage, Node> converter = new IterableConverter.Converter<BoardMessage, Node>() { | |
38 | 487 public BoardMessage conv(Node _b) { |
488 String uuid = Integer.toString(counter.get()); | |
489 String author = new String(_b.getAttributes().get("author").array()); | |
490 String message = new String(_b.getAttributes().get("mes").array()); | |
491 counter.incrementAndGet(); | |
166 | 492 return new BoardMessageImpl(author, message, uuid); |
38 | 493 } |
494 }; | |
166 | 495 return new IterableConverter<BoardMessage, Node>(chs, converter); |
38 | 496 } |
166 | 497 |
143
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
498 public int getRequestNum() { |
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
499 return requestCounter.get(); |
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
500 } |
146
29734d7d6521
Added ShowMessageWithTimeStampServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
143
diff
changeset
|
501 |
166 | 502 private static class BoardMessageImpl implements BoardMessage { |
38 | 503 private final String author; |
504 private final String message; | |
505 private final String uuid; | |
166 | 506 |
507 public BoardMessageImpl(String _author, String _message, String _uuid) { | |
38 | 508 author = _author; |
509 message = _message; | |
510 uuid = _uuid; | |
511 } | |
512 | |
166 | 513 public String getAuthor() { |
38 | 514 return author; |
515 } | |
516 | |
166 | 517 public String getMessage() { |
38 | 518 return message; |
519 } | |
520 | |
166 | 521 public String getUUID() { |
38 | 522 return uuid; |
523 } | |
143
7a7bac51a3cc
Added RequestNumCheckServlet
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
139
diff
changeset
|
524 |
38 | 525 } |
124 | 526 |
38 | 527 } |