annotate src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java @ 21:ee82133f619f default tip

import LogUpdateCodeSegment
author suruga
date Mon, 28 Aug 2017 19:50:18 +0900
parents 7164db5bc76f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.bbs.network;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
3
3
f3d30646c863 fix error
tatsuki
parents: 2
diff changeset
4 import jp.ac.u_ryukyu.ie.cr.bbs.local.BoardMessage;
f3d30646c863 fix error
tatsuki
parents: 2
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.bbs.local.GetAttributeImp;
f3d30646c863 fix error
tatsuki
parents: 2
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.bbs.local.IterableConverter;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.jungle.core.Children;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListReader;
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.DefaultOperationLog;
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.LoggingNode;
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.OperationLog;
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditor;
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default.DefaultTreeNode;
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultEvaluator;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
20 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
21 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traversal;
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
22 import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
23 import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
24 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
25 import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error;
20
7164db5bc76f fix BulltinBoardJungleamanager singleton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
26 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.codesegment.JungleDistributedUpdator;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
27 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.core.NetworkDefaultJungle;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
28 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.AliceJournal;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
29 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.NetworkJournal;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
30 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJournal;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
31 import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
32
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
33 import java.io.File;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
34 import java.io.IOException;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
35 import java.nio.ByteBuffer;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
36 import java.util.concurrent.atomic.AtomicInteger;
10
suruga
parents: 9
diff changeset
37 import static org.junit.Assert.*;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
38
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
39 public class NetworkJungleBulletinBoard implements NetworkBulletinBoard {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
40 protected final Jungle jungle;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
41 private final NetworkJournal journal;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
42 private final String LOG_DIR;
20
7164db5bc76f fix BulltinBoardJungleamanager singleton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
43 private final BulletinBoardJungleManager bm;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
44 private Boolean persistentFlag;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
45 private AtomicInteger requestCounter;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
46 private long renewTime;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
47
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
48 private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
49 journal = _journal;
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
50 jungle = new NetworkDefaultJungle(journal, _uuid);
20
7164db5bc76f fix BulltinBoardJungleamanager singleton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
51 bm = new BulletinBoardJungleManager(jungle);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
52 persistentFlag = false;
20
7164db5bc76f fix BulltinBoardJungleamanager singleton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
53 requestCounter = bm.getRequestCounter();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
54 LOG_DIR = "./log";
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
55 renewTime = 0;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
56 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
57
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
58 public NetworkJungleBulletinBoard(String _uuid) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
59 this(_uuid, new AliceJournal());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
60 jungle.createNewTree("boards");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
61 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
62
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
63 public static NetworkBulletinBoard NewPersistentJungle(String _uuid) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
64 NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard(_uuid, new PersistentJournal());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
65 board.persistentFlag = true;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
66 return board;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
67 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
68
21
ee82133f619f import LogUpdateCodeSegment
suruga
parents: 20
diff changeset
69 public JungleDistributedUpdator getUpdator() { return bm; }
20
7164db5bc76f fix BulltinBoardJungleamanager singleton
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
70
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
71 public void init() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
72 if (!persistentFlag) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
73 return;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
74 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
75 checkAndCreateLogDirectory();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
76 try {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
77 commitLogRecover();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
78 } catch (IOException e) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
79 e.printStackTrace();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
80 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
81 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
82
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
83 public void checkAndCreateLogDirectory() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
84 File logFile = new File(LOG_DIR);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
85 if (!logFile.exists()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
86 logFile.mkdir();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
87 return;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
88 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
89 if (logFile.isFile()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
90 logFile.delete();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
91 logFile.mkdir();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
92 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
93 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
94
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
95 public void commitLogRecover() throws IOException {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
96 File[] logFiles = new File(LOG_DIR).listFiles();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
97 for (File logFile : logFiles) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
98 commitLogRecover(logFile);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
99 logFile.delete();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
100 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
101 if (jungle.getTreeByName("boards") == null) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
102 jungle.createNewTree("boards");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
103 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
104 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
105
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
106 private void commitLogRecover(File logFile) throws IOException {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
107 journal.setInputFile(logFile);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
108 ChangeListReader reader = journal.getReader();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
109 if (reader == null)
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
110 return;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
111 for (ChangeList chList : reader) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
112 String treeName = chList.getTreeName();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
113 JungleTree tree = jungle.getTreeByName(treeName);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
114 if (tree == null) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
115 tree = jungle.createNewTree(treeName);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
116 }
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
117 JungleTreeEditor editor = tree.getLocalJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
118 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, chList);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
119 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
120 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
121 throw new IOException("Failed commit log recovery");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
122 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
123 editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
124 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
125 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
126
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
127 public Iterable<String> getBoards() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
128 JungleTree tree = jungle.getTreeByName("boards");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
129 TreeNode node = tree.getRootNode();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
130 Children chs = node.getChildren();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
131
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
132 IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
133 public String conv(TreeNode _b) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
134 ByteBuffer e = _b.getAttributes().get("name");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
135 System.out.println(new String(e.array()));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
136 return new String(e.array());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
137 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
138 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
139
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
140 return new IterableConverter<String, TreeNode>(chs, converter);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
141 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
142
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
143 public long getRenewTime(String _boardName) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
144 return renewTime;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
145 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
146
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
147 public void createBoards(final String _name, final String _author, final String _initMessage, final String _editKey) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
148 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
149 if (null == jungle.createNewTree(_name)) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
150 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
151 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
152
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
153 JungleTree tree = jungle.getTreeByName("boards");
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
154 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
155 DefaultNodePath root = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
156 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(root, 0);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
157 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
158 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
159 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
160 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
161
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
162 either = editor.putAttribute(root.add(0), "name", ByteBuffer.wrap(_name.getBytes()));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
163 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
164 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
165 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
166 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
167 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
168 ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
169 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
170 either = editor.putAttribute(root.add(0), "timestamp", tBuffer);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
171 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
172 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
173 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
174 either = either.b().success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
175 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
176 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
177 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
178
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
179 tree = jungle.getTreeByName(_name);
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
180 editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
181 either = editor.addNewChildAt(root, 0);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
182 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
183 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
184 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
185 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
186
9
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
187 jungleTransaction(editor, root,0, timestamp, logNode -> {
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
188 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
189 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b();
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
190 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
191 return logNode;
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
192 });
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
193 }
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
194
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
195 private Either<Error, JungleTreeEditor> jungleTransaction(JungleTreeEditor editor, DefaultNodePath path, int size, final long timestamp, JungleTransaction getLoggingNode) {
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
196 Either<Error, JungleTreeEditor> either;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
197 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
198
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
199 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
200 LoggingNode logNode = wrap(node,null, new DefaultOperationLog());
9
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
201 ByteBuffer tBuffer2 = ByteBuffer.allocate(16);
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
202 logNode = getLoggingNode.transaction(logNode);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
203 tBuffer2.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
204 logNode = logNode.getAttributes().put("timestamp", tBuffer2).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
205 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
206 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
207 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
208 public LoggingNode wrap(TreeNode treeNode, TreeNode treeNode1, OperationLog operationLog) {
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
209 return new LoggingNode(treeNode, operationLog);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
210 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
211 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
212
9
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
213 either = editor.edit(path.add(size), e);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
214 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
215 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
216 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
217 either.b().success();
9
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
218 return either;
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
219 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
220
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
221 public void createFolder(final String _board, final String _author, final String _message, final String _editKey,
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
222 String _path) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
223 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
224 if (tree == null) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
225 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
226 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
227
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
228 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
229 String[] nums = _path.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
230 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
231 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
232 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
233 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
234
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
235 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
236 Either<Error, JungleTreeEditor> either;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
237 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
238 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
239 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
240
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
241 do {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
242 TreeNode node = tree.getRootNode();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
243 DefaultTraverser traverser = new DefaultTraverser();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
244 DefaultEvaluator evaluator = new DefaultEvaluator(path);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
245 Either<Error, Traversal> ret = traverser.traverse(node, evaluator);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
246 if (ret.isA()) {
10
suruga
parents: 9
diff changeset
247 assertEquals(1,0);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
248 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
249
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
250 Traversal traversal = ret.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
251 TreeNode target = traversal.destination();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
252 int size = target.getChildren().size();
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
253 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
254 either = editor.addNewChildAt(path, size);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
255 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
256 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
257 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
258 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
259
9
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
260 either = jungleTransaction(editor, path,size, timestamp, logNode -> {
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
261 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
262 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
263 return logNode;
d9a9154a075e JungleTransaction
suruga
parents: 8
diff changeset
264 });
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
265 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
266
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
267 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
268
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
269 public void createBoardMessage(final String _board, final String _author, final String _message, final String _editKey) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
270 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
271 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
272 if (tree == null) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
273 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
274 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
275
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
276 Either<Error, JungleTreeEditor> either;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
277 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
278 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
279 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
280 do {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
281
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
282 TreeNode node = tree.getRootNode();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
283 int size = node.getChildren().size();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
284 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
285
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
286 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
287 either = editor.addNewChildAt(path, size);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
288 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
289 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
290 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
291 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
292
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
293 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
294 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
295 LoggingNode logNode = wrap(node, null, new DefaultOperationLog());
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
296 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
297 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
298 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
299 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
300 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
301 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
302
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
303 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
304 public LoggingNode wrap(TreeNode node,TreeNode node1, OperationLog op) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
305 return new LoggingNode(node, op);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
306 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
307 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
308 path = path.add(size);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
309 either = editor.edit(path, e);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
310 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
311 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
312 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
313 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
314 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
315 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
316
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
317 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
318
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
319 public void editMessage(String _board, String _path, final String _author, final String _message,
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
320 final String _editKey) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
321 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
322 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
323 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
324 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
325 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
326 Either<Error, JungleTreeEditor> either = null;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
327 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
328 String[] nums = _path.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
329 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
330 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
331 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
332 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
333 do {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
334
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
335 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
336 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
337 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
338 LoggingNode logNode = wrap(node,null,new DefaultOperationLog());
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
339 System.out.println(new String(node.getAttributes().get("mes").array()));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
340 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
341 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
342 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
343 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
344 System.out.println(new String(node.getAttributes().get("mes").array()));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
345 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
346 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
347
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
348 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
349 public LoggingNode wrap(TreeNode node,TreeNode node1, OperationLog op) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
350 return new LoggingNode(node, op);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
351 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
352 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
353 either = editor.edit(path, e);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
354 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
355 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
356 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
357 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
358 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
359 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
360 renewTime = timestamp;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
361 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
362
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
363 public void createAttribute(String _board, String _path, final String _author, final String _message,
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
364 final String _editKey) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
365 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
366 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
367 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
368 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
369 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
370 Either<Error, JungleTreeEditor> either = null;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
371 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
372 String[] nums = _path.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
373 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
374 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
375 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
376 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
377
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
378 do {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
379 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
380 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
381 String str;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
382
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
383 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
384 LoggingNode logNode = wrap(node, null,new DefaultOperationLog());
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
385 str = "0";
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
386 int count = 0;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
387 for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
388 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
389 str = String.valueOf(count);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
390 logNode = logNode.getAttributes().put("mes" + str, ByteBuffer.wrap(_message.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
391 logNode = logNode.getAttributes().put("timestamp" + str, tBuffer).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
392 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
393 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
394
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
395 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
396 public LoggingNode wrap(TreeNode node, TreeNode node1,OperationLog op) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
397 return new LoggingNode(node, op);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
398 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
399 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
400 either = editor.edit(path, e);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
401 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
402 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
403 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
404 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
405 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
406 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
407 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
408
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
409 public void editAttribute(String _bname, String _path, final String id, final String _message) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
410 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
411 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
412 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
413 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
414 JungleTree tree = jungle.getTreeByName(_bname);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
415 Either<Error, JungleTreeEditor> either = null;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
416 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
417 String[] nums = _path.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
418 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
419 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
420 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
421 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
422
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
423 do {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
424 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
425 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
426 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
427 LoggingNode logNode = wrap(node, null,new DefaultOperationLog());
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
428 logNode = logNode.getAttributes().put("mes" + id, ByteBuffer.wrap(_message.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
429 logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
430 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
431 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
432
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
433 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
434 public LoggingNode wrap(TreeNode node,TreeNode node1, OperationLog op) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
435 return new LoggingNode(node, op);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
436 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
437 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
438 either = editor.edit(path, e);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
439 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
440 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
441 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
442 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
443 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
444 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
445 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
446
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
447 public void deleteNode(String _board, String _path, String _id) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
448 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
449 int id = Integer.parseInt(_id);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
450 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
451 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
452 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
453 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
454 Either<Error, JungleTreeEditor> either = null;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
455 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
456 String[] nums = _path.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
457 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
458 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
459 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
460 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
461
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
462 do {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
463 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
464
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
465 either = editor.deleteChildAt(path, id);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
466 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
467 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
468 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
469 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
470 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
471 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
472
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
473 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
474
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
475 public void deleteAttribute(String _board, String _path, final String id) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
476 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
477 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
478 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
479 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
480 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
481 Either<Error, JungleTreeEditor> either = null;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
482 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
483 String[] nums = _path.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
484 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
485 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
486 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
487 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
488
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
489 do {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
490 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
491 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
492 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
493 LoggingNode logNode = wrap(node,null, new DefaultOperationLog());
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
494 logNode = logNode.getAttributes().delete("mes" + id).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
495 logNode = logNode.getAttributes().delete("timestamp" + id).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
496 int count = Integer.parseInt(id);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
497 for (; logNode.getAttributes().get("mes" + String.valueOf(count + 1)) != null; ) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
498 logNode = logNode.getAttributes()
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
499 .put("mes" + count, node.getAttributes().get("mes" + String.valueOf(count + 1))).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
500 logNode = logNode.getAttributes().put("timestamp" + count, tBuffer).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
501 count++;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
502 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
503 if (count != Integer.parseInt(id)) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
504 logNode = logNode.getAttributes().delete("timestamp" + count).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
505 logNode = logNode.getAttributes().delete("mes" + count).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
506 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
507
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
508 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
509 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
510
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
511 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
512 public LoggingNode wrap(TreeNode node, TreeNode node1,OperationLog op) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
513 return new LoggingNode(node, op);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
514 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
515 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
516 either = editor.edit(path, e);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
517 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
518 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
519 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
520 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
521 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
522 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
523 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
524
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
525 public void editMatrixMessage(String _board, String _uuid, final String _author, final String _message,
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
526 final String _editKey) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
527 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
528 final long timestamp = System.currentTimeMillis();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
529 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
530 tBuffer.putLong(timestamp);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
531 JungleTree tree = jungle.getTreeByName(_board);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
532 Either<Error, JungleTreeEditor> either = null;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
533 do {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
534 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
535 path = path.add(Integer.parseInt(_uuid));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
536
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
537 JungleTreeEditor editor = tree.getJungleTreeEditor();
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
538 NodeEditor e = new NodeEditor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
539 public Either<Error, LoggingNode> edit(TreeNode node) {
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
540 LoggingNode logNode = wrap(node, null,new DefaultOperationLog());
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
541 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
542 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
543 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
544 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
545 return DefaultEither.newB(logNode);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
546 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
547
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
548 @Override
8
4a66328f0141 fix Loggingnode
suruga
parents: 4
diff changeset
549 public LoggingNode wrap(TreeNode node, TreeNode node1,OperationLog op) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
550 return new LoggingNode(node, op);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
551 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
552 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
553 either = editor.edit(path, e);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
554 if (either.isA()) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
555 throw new IllegalStateException();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
556 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
557 editor = either.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
558 either = editor.success();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
559 } while (either.isA());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
560 renewTime = timestamp;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
561 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
562
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
563 public Iterable<BoardMessage> getFolder(String _boardName, String _nodeNum) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
564 DefaultNodePath path = new DefaultNodePath();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
565 System.out.println(_nodeNum.substring(0, 1));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
566 String[] nums = _nodeNum.split(",");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
567 for (String num : nums) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
568 if (!num.equals("-1"))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
569 path = path.add(Integer.parseInt(num));
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
570 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
571 JungleTree tree = jungle.getTreeByName(_boardName);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
572 TreeNode node = tree.getRootNode();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
573 requestCounter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
574
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
575 DefaultTraverser traverser = new DefaultTraverser();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
576 DefaultEvaluator evaluator = new DefaultEvaluator(path);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
577 Either<Error, Traversal> ret = traverser.traverse(node, evaluator);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
578 if (ret.isA()) {
10
suruga
parents: 9
diff changeset
579 assertEquals(1,0);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
580 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
581
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
582 Traversal traversal = ret.b();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
583 TreeNode target = traversal.destination();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
584 Children chs = target.getChildren();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
585
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
586 final AtomicInteger counter = new AtomicInteger(0);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
587 IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
588 public BoardMessage conv(TreeNode _b) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
589 String uuid = Integer.toString(counter.get());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
590 String message = new String(_b.getAttributes().get("mes").array());
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
591 counter.incrementAndGet();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
592 return new BoardMessageImpl(null, message, uuid);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
593 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
594 };
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
595 return new IterableConverter<BoardMessage, TreeNode>(chs, converter);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
596 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
597
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
598 public boolean compare(TreeNode compareNode, String compareAttribute) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
599 String labName = compareNode.getAttributes().getString("mes");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
600 if (labName.equals(compareAttribute))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
601 return true;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
602
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
603 for (int loopCount = 0; compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
604 labName = compareNode.getAttributes().getString("mes" + loopCount);
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
605 if (labName.equals(compareAttribute))
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
606 return true;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
607 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
608
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
609 return false;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
610 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
611
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
612 public int getRequestNum() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
613 return requestCounter.get();
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
614 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
615
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
616 private static class BoardMessageImpl implements BoardMessage {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
617 private final String author;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
618 private final String message;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
619 private final String uuid;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
620
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
621 public BoardMessageImpl(String _author, String _message, String _uuid) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
622 author = _author;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
623 message = _message;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
624 uuid = _uuid;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
625 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
626
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
627 public String getAuthor() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
628 return author;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
629 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
630
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
631 public String getMessage() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
632 return message;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
633 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
634
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
635 public String getUUID() {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
636 return uuid;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
637 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
638
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
639 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
640
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
641 public String sanitize(String str) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
642 if (str == null) {
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
643 return str;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
644 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
645 str = str.replaceAll("&", "&amp;");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
646 str = str.replaceAll("<", "&lt;");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
647 str = str.replaceAll(">", "&gt;");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
648 str = str.replaceAll("\"", "&quot;");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
649 str = str.replaceAll("'", "&#39;");
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
650 return str;
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
651 }
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
652
4
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
653 public GetAttributeImp getAttribute(String _bname, String nodePath,String revisionStr) {
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
654 Long revision = Long.parseLong(revisionStr);
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
655 DefaultNodePath path = createNodePath(nodePath);
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
656 JungleTree tree = jungle.getTreeByName(_bname);
4
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
657 JungleTree oldTree = tree.getOldTree(revision).b();
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
658 Either<Error, TreeNode> either = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
659 if (either.isA())
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
660 return new GetAttributeImp(new DefaultTreeNode());
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
661 TreeNode node = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
662 return new GetAttributeImp(node);
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
663 }
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
664
4
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
665 private DefaultNodePath createNodePath(String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
666 DefaultNodePath path = new DefaultNodePath();
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
667 try {
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
668 for (int count = 0; nodePath.substring(count, count + 1) != null; count++) {
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
669 if (!nodePath.substring(count, count + 1).equals("/"))
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
670 path = path.add(Integer.parseInt(nodePath.substring(count, count + 1)));
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
671 }
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
672 } catch (Exception _e) {
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
673 }
4
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
674 return path;
5acde010c6db add jungle browsing system
tatsuki
parents: 3
diff changeset
675 }
2
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
676
3c188a5b69ef add network bbs
tatsuki
parents:
diff changeset
677 }