annotate src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/NetworkJungleBulletinBoard.java @ 8:766f7668521f

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