Mercurial > hg > Members > nobuyasu > jungle-network
comparison src/main/java/app/bbs/NetworkJungleBulletinBoard.java @ 177:6f104ab4eb81
fit jungle core but editMessage is not work
author | tatsuki |
---|---|
date | Mon, 01 Sep 2014 00:04:32 +0900 |
parents | ac7d1070f449 |
children | d6944d788121 |
comparison
equal
deleted
inserted
replaced
176:ac7d1070f449 | 177:6f104ab4eb81 |
---|---|
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage; | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage; |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; | 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; | |
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; | 19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; |
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; | 20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; |
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; | 21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; |
23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; | 22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; |
24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TraversableNodeWrapper; | 23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
25 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; | 24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog; |
25 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; | |
26 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation; | |
26 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; | 27 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; |
27 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; | 28 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; |
28 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; | 29 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; |
29 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; | 30 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; |
30 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | 31 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
41 private AtomicInteger requestCounter; | 42 private AtomicInteger requestCounter; |
42 private long renewTime; | 43 private long renewTime; |
43 | 44 |
44 private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) { | 45 private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) { |
45 journal = _journal; | 46 journal = _journal; |
46 jungle = new NetworkDefaultJungle(journal, _uuid, new DefaultTreeEditor(new DefaultTraverser())); | 47 jungle = new NetworkDefaultJungle(journal, _uuid, |
48 new DefaultTreeEditor(new DefaultTraverser())); | |
47 BulletinBoardJungleManager.setJungle(jungle); | 49 BulletinBoardJungleManager.setJungle(jungle); |
48 persistentFlag = false; | 50 persistentFlag = false; |
49 requestCounter = BulletinBoardJungleManager.getRequestCounter(); | 51 requestCounter = BulletinBoardJungleManager.getRequestCounter(); |
50 LOG_DIR = "./log"; | 52 LOG_DIR = "./log"; |
51 renewTime = 0; | 53 renewTime = 0; |
55 this(_uuid, new AliceJournal()); | 57 this(_uuid, new AliceJournal()); |
56 jungle.createNewTree("boards"); | 58 jungle.createNewTree("boards"); |
57 } | 59 } |
58 | 60 |
59 public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { | 61 public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { |
60 NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard( _uuid, new PersistentJournal()); | 62 NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard( |
63 _uuid, new PersistentJournal()); | |
61 board.persistentFlag = true; | 64 board.persistentFlag = true; |
62 return board; | 65 return board; |
63 } | 66 } |
64 | 67 |
65 public void init() { | 68 public void init() { |
107 JungleTree tree = jungle.getTreeByName(treeName); | 110 JungleTree tree = jungle.getTreeByName(treeName); |
108 if (tree == null) { | 111 if (tree == null) { |
109 tree = jungle.createNewTree(treeName); | 112 tree = jungle.createNewTree(treeName); |
110 } | 113 } |
111 JungleTreeEditor editor = tree.getLocalTreeEditor(); | 114 JungleTreeEditor editor = tree.getLocalTreeEditor(); |
112 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, chList); | 115 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, |
116 chList); | |
113 editor = either.b(); | 117 editor = either.b(); |
114 if (either.isA()) { | 118 if (either.isA()) { |
115 throw new IOException("Failed commit log recovery"); | 119 throw new IOException("Failed commit log recovery"); |
116 } | 120 } |
117 editor.success(); | 121 editor.success(); |
118 } | 122 } |
119 } | 123 } |
120 | 124 |
121 public Iterable<String> getBoards() { | 125 public Iterable<String> getBoards() { |
122 JungleTree tree = jungle.getTreeByName("boards"); | 126 JungleTree tree = jungle.getTreeByName("boards"); |
123 Node node = tree.getRootNode(); | 127 TreeNode node = tree.getRootNode(); |
124 Children<Node> chs = node.getChildren(); | 128 Children<TreeNode> chs = node.getChildren(); |
125 | 129 |
126 IterableConverter.Converter<String, Node> converter = new IterableConverter.Converter<String, Node>() { | 130 IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() { |
127 public String conv(Node _b) { | 131 public String conv(TreeNode _b) { |
128 ByteBuffer e = _b.getAttributes().get("name"); | 132 ByteBuffer e = _b.getAttributes().get("name"); |
129 System.out.println(new String(e.array())); | 133 System.out.println(new String(e.array())); |
130 return new String(e.array()); | 134 return new String(e.array()); |
131 } | 135 } |
132 }; | 136 }; |
133 | 137 |
134 return new IterableConverter<String, Node>(chs, converter); | 138 return new IterableConverter<String, TreeNode>(chs, converter); |
135 } | 139 } |
136 | 140 |
137 public long getRenewTime(String _boardName) { | 141 public long getRenewTime(String _boardName) { |
138 return renewTime; | 142 return renewTime; |
139 } | 143 } |
151 if (either.isA()) { | 155 if (either.isA()) { |
152 throw new IllegalStateException(); | 156 throw new IllegalStateException(); |
153 } | 157 } |
154 editor = either.b(); | 158 editor = either.b(); |
155 | 159 |
156 either = editor.putAttribute(root.add(0), "name",ByteBuffer.wrap(_name.getBytes())); | 160 either = editor.putAttribute(root.add(0), "name", |
161 ByteBuffer.wrap(_name.getBytes())); | |
157 if (either.isA()) { | 162 if (either.isA()) { |
158 throw new IllegalStateException(); | 163 throw new IllegalStateException(); |
159 } | 164 } |
160 editor = either.b(); | 165 editor = either.b(); |
161 final long timestamp = System.currentTimeMillis(); | 166 final long timestamp = System.currentTimeMillis(); |
177 throw new IllegalStateException(); | 182 throw new IllegalStateException(); |
178 } | 183 } |
179 editor = either.b(); | 184 editor = either.b(); |
180 | 185 |
181 NodeEditor e = new NodeEditor() { | 186 NodeEditor e = new NodeEditor() { |
182 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 187 ByteBuffer tBuffer2 = ByteBuffer.allocate(16); |
183 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | 188 |
184 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b(); | 189 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
185 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | 190 TreeNode node = _e; |
186 ByteBuffer tBuffer2 = ByteBuffer.allocate(16); | 191 node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); |
192 node = node.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b(); | |
193 node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | |
187 tBuffer2.putLong(timestamp); | 194 tBuffer2.putLong(timestamp); |
188 _e = _e.getAttributes().put("timestamp", tBuffer2).b(); | 195 node = node.getAttributes().put("timestamp", tBuffer2).b(); |
189 return DefaultEither.newB(_e); | 196 return DefaultEither.newB(node); |
197 } | |
198 | |
199 @Override | |
200 public OperationLog getLog() { | |
201 OperationLog op = new DefaultOperationLog(); | |
202 op = op.add(new PutAttributeOperation("author", ByteBuffer.wrap(_author.getBytes()))); | |
203 op = op.add(new PutAttributeOperation("mes", ByteBuffer.wrap(_initMessage.getBytes()))); | |
204 op = op.add(new PutAttributeOperation("key", ByteBuffer.wrap(_editKey.getBytes()))); | |
205 op = op.add(new PutAttributeOperation("timestamp", tBuffer2)); | |
206 return op; | |
190 } | 207 } |
191 }; | 208 }; |
192 | 209 |
193 either = editor.edit(root.add(0), e); | 210 either = editor.edit(root.add(0), e); |
194 if (either.isA()) { | 211 if (either.isA()) { |
201 public void createFolder(final String _board, final String _author, final String _message, final String _editKey, String _nodeNum) { | 218 public void createFolder(final String _board, final String _author, final String _message, final String _editKey, String _nodeNum) { |
202 JungleTree tree = jungle.getTreeByName(_board); | 219 JungleTree tree = jungle.getTreeByName(_board); |
203 if (tree == null) { | 220 if (tree == null) { |
204 throw new IllegalStateException(); | 221 throw new IllegalStateException(); |
205 } | 222 } |
206 | 223 |
207 DefaultNodePath path = new DefaultNodePath(); | 224 DefaultNodePath path = new DefaultNodePath(); |
208 try { | 225 try { |
209 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { | 226 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { |
210 if (!_nodeNum.substring(count, count + 1).equals("/")) | 227 if (!_nodeNum.substring(count, count + 1).equals("/")) |
211 path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1))); | 228 path = path.add(Integer.parseInt(_nodeNum.substring(count, |
229 count + 1))); | |
212 } | 230 } |
213 } catch (Exception _e) { | 231 } catch (Exception _e) { |
214 } | 232 } |
215 requestCounter.incrementAndGet(); | 233 requestCounter.incrementAndGet(); |
216 Either<Error, JungleTreeEditor> either; | 234 Either<Error, JungleTreeEditor> either; |
217 final long timestamp = System.currentTimeMillis(); | 235 final long timestamp = System.currentTimeMillis(); |
218 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | 236 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
219 tBuffer.putLong(timestamp); | 237 tBuffer.putLong(timestamp); |
220 | 238 |
221 do { | 239 do { |
222 Node node = tree.getRootNode(); | 240 TreeNode node = tree.getRootNode(); |
223 DefaultTraverser traverser = new DefaultTraverser(); | 241 DefaultTraverser traverser = new DefaultTraverser(); |
224 TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node); | 242 // TraversableNodeWrapper<Node> traversable = new |
243 // TraversableNodeWrapper<Node>(node); | |
225 DefaultEvaluator evaluator = new DefaultEvaluator(path); | 244 DefaultEvaluator evaluator = new DefaultEvaluator(path); |
226 Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator); | 245 Either<Error, Traversal<TreeNode>> ret = traverser.traverse(node, |
246 evaluator); | |
227 if (ret.isA()) { | 247 if (ret.isA()) { |
228 Assert.fail(); | 248 Assert.fail(); |
229 } | 249 } |
230 | 250 |
231 Traversal<TraversableNodeWrapper<Node>> traversal = ret.b(); | 251 Traversal<TreeNode> traversal = ret.b(); |
232 TraversableNodeWrapper<Node> target = traversal.destination(); | 252 TreeNode target = traversal.destination(); |
233 int size = target.getWrapped().getChildren().size(); | 253 int size = target.getChildren().size(); |
234 JungleTreeEditor editor = tree.getTreeEditor(); | 254 JungleTreeEditor editor = tree.getTreeEditor(); |
235 either = editor.addNewChildAt(path, size); | 255 either = editor.addNewChildAt(path, size); |
236 if (either.isA()) { | 256 if (either.isA()) { |
237 throw new IllegalStateException(); | 257 throw new IllegalStateException(); |
238 } | 258 } |
239 editor = either.b(); | 259 editor = either.b(); |
240 | 260 |
241 NodeEditor e = new NodeEditor() { | 261 NodeEditor e = new NodeEditor() { |
242 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 262 |
243 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | 263 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
244 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | 264 TreeNode node = _e; |
245 return DefaultEither.newB(_e); | 265 node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); |
266 node = node.getAttributes().put("timestamp", tBuffer).b(); | |
267 return DefaultEither.newB(node); | |
268 } | |
269 | |
270 @Override | |
271 public OperationLog getLog() { | |
272 OperationLog op = new DefaultOperationLog(); | |
273 op = op.add(new PutAttributeOperation("mes", ByteBuffer.wrap(_message.getBytes()))); | |
274 op = op.add(new PutAttributeOperation("timestamp", tBuffer)); | |
275 return op; | |
246 } | 276 } |
247 }; | 277 }; |
248 path = path.add(size); | 278 path = path.add(size); |
249 either = editor.edit(path, e); | 279 either = editor.edit(path, e); |
250 if (either.isA()) { | 280 if (either.isA()) { |
266 Either<Error, JungleTreeEditor> either; | 296 Either<Error, JungleTreeEditor> either; |
267 final long timestamp = System.currentTimeMillis(); | 297 final long timestamp = System.currentTimeMillis(); |
268 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | 298 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
269 tBuffer.putLong(timestamp); | 299 tBuffer.putLong(timestamp); |
270 do { | 300 do { |
271 | 301 |
272 Node node = tree.getRootNode(); | 302 TreeNode node = tree.getRootNode(); |
273 int size = node.getChildren().size(); | 303 int size = node.getChildren().size(); |
274 DefaultNodePath path = new DefaultNodePath(); | 304 DefaultNodePath path = new DefaultNodePath(); |
275 | 305 |
276 JungleTreeEditor editor = tree.getTreeEditor(); | 306 JungleTreeEditor editor = tree.getTreeEditor(); |
277 either = editor.addNewChildAt(path, size); | 307 either = editor.addNewChildAt(path, size); |
279 throw new IllegalStateException(); | 309 throw new IllegalStateException(); |
280 } | 310 } |
281 editor = either.b(); | 311 editor = either.b(); |
282 | 312 |
283 NodeEditor e = new NodeEditor() { | 313 NodeEditor e = new NodeEditor() { |
284 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 314 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
285 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | 315 TreeNode node = _e; |
286 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | 316 node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); |
287 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | 317 node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); |
288 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | 318 node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); |
289 return DefaultEither.newB(_e); | 319 node = node.getAttributes().put("timestamp", tBuffer).b(); |
320 return DefaultEither.newB(node); | |
321 } | |
322 | |
323 @Override | |
324 public OperationLog getLog() { | |
325 OperationLog op = new DefaultOperationLog(); | |
326 op = op.add(new PutAttributeOperation("author", ByteBuffer.wrap(_author.getBytes()))); | |
327 op = op.add(new PutAttributeOperation("mes", ByteBuffer.wrap(_message.getBytes()))); | |
328 op = op.add(new PutAttributeOperation("key", ByteBuffer.wrap(_editKey.getBytes()))); | |
329 op = op.add(new PutAttributeOperation("timestamp", tBuffer)); | |
330 return op; | |
290 } | 331 } |
291 }; | 332 }; |
292 path = path.add(size); | 333 path = path.add(size); |
293 either = editor.edit(path, e); | 334 either = editor.edit(path, e); |
294 if (either.isA()) { | 335 if (either.isA()) { |
298 either = editor.success(); | 339 either = editor.success(); |
299 } while (either.isA()); | 340 } while (either.isA()); |
300 | 341 |
301 } | 342 } |
302 | 343 |
303 public void editMessage(String _board, String _nodeNum, final String _author, final String _message, final String _editKey) { | 344 public void editMessage(String _board, String _nodeNum,final String _author, final String _message, final String _editKey) { |
304 requestCounter.incrementAndGet(); | 345 requestCounter.incrementAndGet(); |
305 final long timestamp = System.currentTimeMillis(); | 346 final long timestamp = System.currentTimeMillis(); |
306 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | 347 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
307 tBuffer.putLong(timestamp); | 348 tBuffer.putLong(timestamp); |
308 JungleTree tree = jungle.getTreeByName(_board); | 349 JungleTree tree = jungle.getTreeByName(_board); |
309 Either<Error, JungleTreeEditor> either = null; | 350 Either<Error, JungleTreeEditor> either = null; |
310 | 351 |
311 do { | 352 do { |
312 DefaultNodePath path = new DefaultNodePath(); | 353 DefaultNodePath path = new DefaultNodePath(); |
313 try { | 354 try { |
314 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { | 355 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { |
315 if (!_nodeNum.substring(count, count + 1).equals("/")) | 356 if (!_nodeNum.substring(count, count + 1).equals("/")) |
316 path = path.add(Integer.parseInt(_nodeNum.substring(count,count + 1))); | 357 path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1))); |
317 } | 358 } |
318 } catch (Exception _e) { | 359 } catch (Exception _e) { |
319 } | 360 } |
320 JungleTreeEditor editor = tree.getTreeEditor(); | 361 JungleTreeEditor editor = tree.getTreeEditor(); |
321 NodeEditor e = new NodeEditor() { | 362 NodeEditor e = new NodeEditor() { |
322 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 363 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
323 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | 364 TreeNode node = _e; |
324 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | 365 System.out.println(new String(node.getAttributes().get("mes").array())); |
325 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | 366 node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); |
326 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | 367 node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); |
327 return DefaultEither.newB(_e); | 368 node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); |
369 node = node.getAttributes().put("timestamp", tBuffer).b(); | |
370 System.out.println(new String(node.getAttributes().get("mes").array())); | |
371 return DefaultEither.newB(node); | |
372 } | |
373 | |
374 @Override | |
375 public OperationLog getLog() { | |
376 OperationLog op = new DefaultOperationLog(); | |
377 op = op.add(new PutAttributeOperation("author", ByteBuffer.wrap(_author.getBytes()))); | |
378 op = op.add(new PutAttributeOperation("mes", ByteBuffer.wrap(_message.getBytes()))); | |
379 op = op.add(new PutAttributeOperation("key", ByteBuffer.wrap(_editKey.getBytes()))); | |
380 op = op.add(new PutAttributeOperation("timestamp", tBuffer)); | |
381 return op; | |
328 } | 382 } |
329 }; | 383 }; |
330 either = editor.edit(path, e); | 384 either = editor.edit(path, e); |
331 if (either.isA()) { | 385 if (either.isA()) { |
332 throw new IllegalStateException(); | 386 throw new IllegalStateException(); |
347 DefaultNodePath path = new DefaultNodePath(); | 401 DefaultNodePath path = new DefaultNodePath(); |
348 do { | 402 do { |
349 try { | 403 try { |
350 for (int count = 0; _uuid.substring(count, count + 1) != null; count++) { | 404 for (int count = 0; _uuid.substring(count, count + 1) != null; count++) { |
351 if (!_uuid.substring(count, count + 1).equals("/")) | 405 if (!_uuid.substring(count, count + 1).equals("/")) |
352 path = path.add(Integer.parseInt(_uuid.substring(count, count + 1))); | 406 path = path.add(Integer.parseInt(_uuid.substring(count, |
407 count + 1))); | |
353 } | 408 } |
354 } catch (Exception _e) { | 409 } catch (Exception _e) { |
355 } | 410 } |
356 | 411 |
357 JungleTreeEditor editor = tree.getTreeEditor(); | 412 JungleTreeEditor editor = tree.getTreeEditor(); |
358 NodeEditor e = new NodeEditor() { | 413 NodeEditor e = new NodeEditor() { |
359 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 414 String str; |
360 String str = "0"; | 415 |
416 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { | |
417 TreeNode node = _e; | |
418 str = "0"; | |
361 int count = 0; | 419 int count = 0; |
362 for (; _e.getAttributes().get("mes" + String.valueOf(count)) != null; count++) { | 420 for (; _e.getAttributes().get("mes" + String.valueOf(count)) != null; count++) { |
363 } | 421 } |
364 str = String.valueOf(count); | 422 str = String.valueOf(count); |
365 _e = _e.getAttributes().put("mes" + str, ByteBuffer.wrap(_message.getBytes())).b(); | 423 node = node.getAttributes().put("mes" + str,ByteBuffer.wrap(_message.getBytes())).b(); |
366 _e = _e.getAttributes().put("timestamp" + str, tBuffer).b(); | 424 node = node.getAttributes().put("timestamp" + str, tBuffer).b(); |
367 return DefaultEither.newB(_e); | 425 return DefaultEither.newB(node); |
426 } | |
427 | |
428 @Override | |
429 public OperationLog getLog() { | |
430 OperationLog op = new DefaultOperationLog(); | |
431 op = op.add(new PutAttributeOperation("mes" + str,ByteBuffer.wrap(_message.getBytes()))); | |
432 op = op.add(new PutAttributeOperation("timestamp" + str,tBuffer)); | |
433 return op; | |
368 } | 434 } |
369 }; | 435 }; |
370 either = editor.edit(path, e); | 436 either = editor.edit(path, e); |
371 if (either.isA()) { | 437 if (either.isA()) { |
372 throw new IllegalStateException(); | 438 throw new IllegalStateException(); |
386 DefaultNodePath path = new DefaultNodePath(); | 452 DefaultNodePath path = new DefaultNodePath(); |
387 do { | 453 do { |
388 try { | 454 try { |
389 for (int count = 0; _path.substring(count, count + 1) != null; count++) { | 455 for (int count = 0; _path.substring(count, count + 1) != null; count++) { |
390 if (!_path.substring(count, count + 1).equals("/")) | 456 if (!_path.substring(count, count + 1).equals("/")) |
391 path = path.add(Integer.parseInt(_path.substring(count, count + 1))); | 457 path = path.add(Integer.parseInt(_path.substring(count, |
458 count + 1))); | |
392 } | 459 } |
393 } catch (Exception _e) { | 460 } catch (Exception _e) { |
394 } | 461 } |
395 | 462 |
396 JungleTreeEditor editor = tree.getTreeEditor(); | 463 JungleTreeEditor editor = tree.getTreeEditor(); |
397 NodeEditor e = new NodeEditor() { | 464 NodeEditor e = new NodeEditor() { |
398 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 465 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
466 TreeNode node = _e; | |
399 // EnableNodeWrapper<T> node = _e.getWrap(); | 467 // EnableNodeWrapper<T> node = _e.getWrap(); |
400 _e = _e.getAttributes().put("mes" + id, ByteBuffer.wrap(_message.getBytes())).b(); | 468 node = node.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b(); |
401 _e = _e.getAttributes().put("timestamp" + id, tBuffer).b(); | 469 node = node.getAttributes().put("timestamp" + id, tBuffer).b(); |
402 return DefaultEither.newB(_e); | 470 return DefaultEither.newB(node); |
471 } | |
472 | |
473 @Override | |
474 public OperationLog getLog() { | |
475 OperationLog op = new DefaultOperationLog(); | |
476 op = op.add(new PutAttributeOperation("mes"+ id, ByteBuffer.wrap(_message.getBytes()))); | |
477 op = op.add(new PutAttributeOperation("timestamp"+ id, tBuffer)); | |
478 return op; | |
403 } | 479 } |
404 }; | 480 }; |
405 either = editor.edit(path, e); | 481 either = editor.edit(path, e); |
406 if (either.isA()) { | 482 if (either.isA()) { |
407 throw new IllegalStateException(); | 483 throw new IllegalStateException(); |
408 } | 484 } |
409 editor = either.b(); | 485 editor = either.b(); |
410 either = editor.success(); | 486 either = editor.success(); |
411 } while (either.isA()); | 487 } while (either.isA()); |
412 } | 488 } |
413 | 489 |
414 | |
415 public void deleteNode(String _board, String _path, String _id) { | 490 public void deleteNode(String _board, String _path, String _id) { |
416 requestCounter.incrementAndGet(); | 491 requestCounter.incrementAndGet(); |
417 int id = Integer.parseInt(_id); | 492 int id = Integer.parseInt(_id); |
418 final long timestamp = System.currentTimeMillis(); | 493 final long timestamp = System.currentTimeMillis(); |
419 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | 494 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
423 DefaultNodePath path = new DefaultNodePath(); | 498 DefaultNodePath path = new DefaultNodePath(); |
424 do { | 499 do { |
425 try { | 500 try { |
426 for (int count = 0; _path.substring(count, count + 1) != null; count++) { | 501 for (int count = 0; _path.substring(count, count + 1) != null; count++) { |
427 if (!_path.substring(count, count + 1).equals("/")) | 502 if (!_path.substring(count, count + 1).equals("/")) |
428 path = path.add(Integer.parseInt(_path.substring(count, count + 1))); | 503 path = path.add(Integer.parseInt(_path.substring(count,count + 1))); |
429 } | 504 } |
430 } catch (Exception _e) { | 505 } catch (Exception _e) { |
431 } | 506 } |
432 | 507 |
433 JungleTreeEditor editor = tree.getTreeEditor(); | 508 JungleTreeEditor editor = tree.getTreeEditor(); |
434 | 509 |
435 either = editor.deleteChildAt(path, id); | 510 either = editor.deleteChildAt(path, id); |
436 if (either.isA()) { | 511 if (either.isA()) { |
437 throw new IllegalStateException(); | 512 throw new IllegalStateException(); |
438 } | 513 } |
439 editor = either.b(); | 514 editor = either.b(); |
440 either = editor.success(); | 515 either = editor.success(); |
441 } while (either.isA()); | 516 } while (either.isA()); |
442 | 517 |
443 } | 518 } |
444 public void deleteAttribute(String _board, String _path ,final String id) { | 519 |
520 public void deleteAttribute(String _board, String _path, final String id) { | |
445 requestCounter.incrementAndGet(); | 521 requestCounter.incrementAndGet(); |
446 final long timestamp = System.currentTimeMillis(); | 522 final long timestamp = System.currentTimeMillis(); |
447 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | 523 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
448 tBuffer.putLong(timestamp); | 524 tBuffer.putLong(timestamp); |
449 JungleTree tree = jungle.getTreeByName(_board); | 525 JungleTree tree = jungle.getTreeByName(_board); |
451 DefaultNodePath path = new DefaultNodePath(); | 527 DefaultNodePath path = new DefaultNodePath(); |
452 do { | 528 do { |
453 try { | 529 try { |
454 for (int count = 0; _path.substring(count, count + 1) != null; count++) { | 530 for (int count = 0; _path.substring(count, count + 1) != null; count++) { |
455 if (!_path.substring(count, count + 1).equals("/")) | 531 if (!_path.substring(count, count + 1).equals("/")) |
456 path = path.add(Integer.parseInt(_path.substring(count, count + 1))); | 532 path = path.add(Integer.parseInt(_path.substring(count, |
533 count + 1))); | |
457 } | 534 } |
458 } catch (Exception _e) { | 535 } catch (Exception _e) { |
459 System.out.println("屑"); | 536 System.out.println("屑"); |
460 } | 537 } |
461 | 538 |
462 JungleTreeEditor editor = tree.getTreeEditor(); | 539 JungleTreeEditor editor = tree.getTreeEditor(); |
463 NodeEditor e = new NodeEditor() { | 540 NodeEditor e = new NodeEditor() { |
464 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 541 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
465 _e = _e.getAttributes().delete("mes" + id ).b(); | 542 TreeNode node = _e; |
466 _e = _e.getAttributes().delete("timestamp" + id ).b(); | 543 node = node.getAttributes().delete("mes" + id).b(); |
544 node = node.getAttributes().delete("timestamp" + id).b(); | |
467 int count = Integer.parseInt(id); | 545 int count = Integer.parseInt(id); |
468 for (; _e.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) { | 546 for (; node.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) { |
469 _e = _e.getAttributes().put("mes" + count, _e.getAttributes().get("mes" + String.valueOf(count + 1))).b(); | 547 node = node.getAttributes().put("mes" + count,_e.getAttributes().get("mes"+ String.valueOf(count + 1))).b(); |
470 _e = _e.getAttributes().put("timestamp" + count, tBuffer).b(); | 548 node = node.getAttributes().put("timestamp" + count, tBuffer).b(); |
471 count++; | 549 count++; |
472 } | |
473 if(count != Integer.parseInt(id)){ | |
474 _e = _e.getAttributes().delete("timestamp" + count ).b(); | |
475 _e = _e.getAttributes().delete("mes" + count ).b(); | |
476 } | 550 } |
477 | 551 if (count != Integer.parseInt(id)) { |
478 return DefaultEither.newB(_e); | 552 node = node.getAttributes().delete("timestamp" + count).b(); |
553 node = node.getAttributes().delete("mes" + count).b(); | |
554 } | |
555 | |
556 return DefaultEither.newB(node); | |
557 } | |
558 | |
559 @Override | |
560 public OperationLog getLog() { | |
561 return new DefaultOperationLog(); | |
479 } | 562 } |
480 }; | 563 }; |
481 either = editor.edit(path, e); | 564 either = editor.edit(path, e); |
482 if (either.isA()) { | 565 if (either.isA()) { |
483 throw new IllegalStateException(); | 566 throw new IllegalStateException(); |
484 } | 567 } |
485 editor = either.b(); | 568 editor = either.b(); |
486 either = editor.success(); | 569 either = editor.success(); |
487 } while (either.isA()); | 570 } while (either.isA()); |
488 } | 571 } |
489 | 572 |
490 | 573 public void editMatrixMessage(String _board, String _uuid, |
491 | 574 final String _author, final String _message, final String _editKey) { |
492 public void editMatrixMessage(String _board, String _uuid, final String _author, final String _message, final String _editKey) { | |
493 requestCounter.incrementAndGet(); | 575 requestCounter.incrementAndGet(); |
494 final long timestamp = System.currentTimeMillis(); | 576 final long timestamp = System.currentTimeMillis(); |
495 final ByteBuffer tBuffer = ByteBuffer.allocate(16); | 577 final ByteBuffer tBuffer = ByteBuffer.allocate(16); |
496 tBuffer.putLong(timestamp); | 578 tBuffer.putLong(timestamp); |
497 JungleTree tree = jungle.getTreeByName(_board); | 579 JungleTree tree = jungle.getTreeByName(_board); |
500 DefaultNodePath path = new DefaultNodePath(); | 582 DefaultNodePath path = new DefaultNodePath(); |
501 path = path.add(Integer.parseInt(_uuid)); | 583 path = path.add(Integer.parseInt(_uuid)); |
502 | 584 |
503 JungleTreeEditor editor = tree.getTreeEditor(); | 585 JungleTreeEditor editor = tree.getTreeEditor(); |
504 NodeEditor e = new NodeEditor() { | 586 NodeEditor e = new NodeEditor() { |
505 public <T extends EditableNode<T>> Either<Error, T> edit(T _e) { | 587 public <T extends TreeNode> Either<Error, TreeNode> edit(T _e) { |
506 _e = _e.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); | 588 TreeNode node = _e; |
507 _e = _e.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); | 589 node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); |
508 _e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); | 590 node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); |
509 _e = _e.getAttributes().put("timestamp", tBuffer).b(); | 591 node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); |
510 return DefaultEither.newB(_e); | 592 node = node.getAttributes().put("timestamp", tBuffer).b(); |
593 return DefaultEither.newB(node); | |
594 } | |
595 | |
596 @Override | |
597 public OperationLog getLog() { | |
598 OperationLog op = new DefaultOperationLog(); | |
599 op = op.add(new PutAttributeOperation("author", ByteBuffer.wrap(_author.getBytes()))); | |
600 op = op.add(new PutAttributeOperation("mes", ByteBuffer.wrap(_message.getBytes()))); | |
601 op = op.add(new PutAttributeOperation("key", ByteBuffer.wrap(_editKey.getBytes()))); | |
602 op = op.add(new PutAttributeOperation("timestamp", tBuffer)); | |
603 return op; | |
511 } | 604 } |
512 }; | 605 }; |
513 either = editor.edit(path, e); | 606 either = editor.edit(path, e); |
514 if (either.isA()) { | 607 if (either.isA()) { |
515 throw new IllegalStateException(); | 608 throw new IllegalStateException(); |
521 } | 614 } |
522 | 615 |
523 public Iterable<BoardMessage> getMessages(String _boardName) { | 616 public Iterable<BoardMessage> getMessages(String _boardName) { |
524 requestCounter.incrementAndGet(); | 617 requestCounter.incrementAndGet(); |
525 JungleTree tree = jungle.getTreeByName(_boardName); | 618 JungleTree tree = jungle.getTreeByName(_boardName); |
526 Node node = tree.getRootNode(); | 619 TreeNode node = tree.getRootNode(); |
527 Children<Node> chs = node.getChildren(); | 620 Children<TreeNode> chs = node.getChildren(); |
528 final AtomicInteger counter = new AtomicInteger(0); | 621 final AtomicInteger counter = new AtomicInteger(0); |
529 IterableConverter.Converter<BoardMessage, Node> converter = new IterableConverter.Converter<BoardMessage, Node>() { | 622 IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() { |
530 public BoardMessage conv(Node _b) { | 623 public BoardMessage conv(TreeNode _b) { |
531 String uuid = Integer.toString(counter.get()); | 624 String uuid = Integer.toString(counter.get()); |
532 String author = new String(_b.getAttributes().get("author") .array()); | 625 String author = new String(_b.getAttributes().get("author").array()); |
533 String message = new String(_b.getAttributes().get("mes").array()); | 626 String message = new String(_b.getAttributes().get("mes").array()); |
534 counter.incrementAndGet(); | 627 counter.incrementAndGet(); |
535 return new BoardMessageImpl(author, message, uuid); | 628 return new BoardMessageImpl(author, message, uuid); |
536 } | 629 } |
537 }; | 630 }; |
538 return new IterableConverter<BoardMessage, Node>(chs, converter); | 631 return new IterableConverter<BoardMessage, TreeNode>(chs, converter); |
539 } | 632 } |
540 | 633 |
541 public Iterable<BoardMessage> getFolder(String _boardName, String _nodeNum) { | 634 public Iterable<BoardMessage> getFolder(String _boardName, String _nodeNum) { |
542 | 635 |
543 DefaultNodePath path = new DefaultNodePath(); | 636 DefaultNodePath path = new DefaultNodePath(); |
548 } | 641 } |
549 } catch (Exception _e) { | 642 } catch (Exception _e) { |
550 } | 643 } |
551 requestCounter.incrementAndGet(); | 644 requestCounter.incrementAndGet(); |
552 JungleTree tree = jungle.getTreeByName(_boardName); | 645 JungleTree tree = jungle.getTreeByName(_boardName); |
553 Node node = tree.getRootNode(); | 646 TreeNode node = tree.getRootNode(); |
554 | 647 |
555 DefaultTraverser traverser = new DefaultTraverser(); | 648 DefaultTraverser traverser = new DefaultTraverser(); |
556 TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node); | 649 // TraversableNodeWrapper<Node> traversable = new |
650 // TraversableNodeWrapper<Node>(node); | |
557 DefaultEvaluator evaluator = new DefaultEvaluator(path); | 651 DefaultEvaluator evaluator = new DefaultEvaluator(path); |
558 Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator); | 652 Either<Error, Traversal<TreeNode>> ret = traverser.traverse(node, |
653 evaluator); | |
559 if (ret.isA()) { | 654 if (ret.isA()) { |
560 Assert.fail(); | 655 Assert.fail(); |
561 } | 656 } |
562 | 657 |
563 Traversal<TraversableNodeWrapper<Node>> traversal = ret.b(); | 658 Traversal<TreeNode> traversal = ret.b(); |
564 TraversableNodeWrapper<Node> target = traversal.destination(); | 659 TreeNode target = traversal.destination(); |
565 Children<Node> chs = target.getWrapped().getChildren(); | 660 Children<TreeNode> chs = target.getChildren(); |
566 | 661 |
567 final AtomicInteger counter = new AtomicInteger(0); | 662 final AtomicInteger counter = new AtomicInteger(0); |
568 IterableConverter.Converter<BoardMessage, Node> converter = new IterableConverter.Converter<BoardMessage, Node>() { | 663 IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() { |
569 public BoardMessage conv(Node _b) { | 664 public BoardMessage conv(TreeNode _b) { |
570 String uuid = Integer.toString(counter.get()); | 665 String uuid = Integer.toString(counter.get()); |
571 String message = new String(_b.getAttributes().get("mes").array()); | 666 String message = new String(_b.getAttributes().get("mes") |
667 .array()); | |
572 counter.incrementAndGet(); | 668 counter.incrementAndGet(); |
573 return new BoardMessageImpl(null, message, uuid); | 669 return new BoardMessageImpl(null, message, uuid); |
574 } | 670 } |
575 }; | 671 }; |
576 return new IterableConverter<BoardMessage, Node>(chs, converter); | 672 return new IterableConverter<BoardMessage, TreeNode>(chs, converter); |
577 } | 673 } |
578 | |
579 | 674 |
580 public getAttributeImp getAttribute(String _boardName, String _nodeNum) { | 675 public getAttributeImp getAttribute(String _boardName, String _nodeNum) { |
581 | 676 |
582 DefaultNodePath path = new DefaultNodePath(); | 677 DefaultNodePath path = new DefaultNodePath(); |
583 try { | 678 try { |
584 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { | 679 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { |
585 if (!_nodeNum.substring(count, count + 1).equals("/")) | 680 if (!_nodeNum.substring(count, count + 1).equals("/")) |
586 path = path.add(Integer.parseInt(_nodeNum.substring(count,count + 1))); | 681 path = path.add(Integer.parseInt(_nodeNum.substring(count, |
682 count + 1))); | |
587 } | 683 } |
588 } catch (Exception _e) { | 684 } catch (Exception _e) { |
589 } | 685 } |
590 requestCounter.incrementAndGet(); | 686 requestCounter.incrementAndGet(); |
591 JungleTree tree = jungle.getTreeByName(_boardName); | 687 JungleTree tree = jungle.getTreeByName(_boardName); |
592 Node node = tree.getRootNode(); | 688 TreeNode node = tree.getRootNode(); |
593 | 689 |
594 DefaultTraverser traverser = new DefaultTraverser(); | 690 DefaultTraverser traverser = new DefaultTraverser(); |
595 TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node); | 691 // TraversableNodeWrapper<Node> traversable = new |
692 // TraversableNodeWrapper<Node>(node); | |
596 DefaultEvaluator evaluator = new DefaultEvaluator(path); | 693 DefaultEvaluator evaluator = new DefaultEvaluator(path); |
597 Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator); | 694 Either<Error, Traversal<TreeNode>> ret = traverser.traverse(node, |
695 evaluator); | |
598 if (ret.isA()) { | 696 if (ret.isA()) { |
599 Assert.fail(); | 697 Assert.fail(); |
600 } | 698 } |
601 | 699 |
602 Traversal<TraversableNodeWrapper<Node>> traversal = ret.b(); | 700 Traversal<TreeNode> traversal = ret.b(); |
603 TraversableNodeWrapper<Node> target = traversal.destination(); | 701 TreeNode target = traversal.destination(); |
604 return new getAttributeImp(target.getWrapped()); | 702 return new getAttributeImp(target); |
605 } | 703 } |
606 | 704 |
607 public int getRequestNum() { | 705 public int getRequestNum() { |
608 return requestCounter.get(); | 706 return requestCounter.get(); |
609 } | 707 } |
630 public String getUUID() { | 728 public String getUUID() { |
631 return uuid; | 729 return uuid; |
632 } | 730 } |
633 | 731 |
634 } | 732 } |
635 | 733 |
636 public String sanitize( String str ) { | 734 public String sanitize(String str) { |
637 if(str==null) { | 735 if (str == null) { |
638 return str; | 736 return str; |
639 } | 737 } |
640 str = str.replaceAll("&" , "&" ); | 738 str = str.replaceAll("&", "&"); |
641 str = str.replaceAll("<" , "<" ); | 739 str = str.replaceAll("<", "<"); |
642 str = str.replaceAll(">" , ">" ); | 740 str = str.replaceAll(">", ">"); |
643 str = str.replaceAll("\"", """); | 741 str = str.replaceAll("\"", """); |
644 str = str.replaceAll("'" , "'" ); | 742 str = str.replaceAll("'", "'"); |
645 return str; | 743 return str; |
646 } | 744 } |
647 | |
648 | 745 |
649 } | 746 } |