annotate src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JungleBulletinBoard.java @ 41:037731e99d6e

fit JungleCore 144
author one
date Mon, 17 Nov 2014 18:47:10 +0900
parents 22edfb7f47ad
children 1bdd50e26fac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
tatsuki
parents:
diff changeset
1 package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
tatsuki
parents:
diff changeset
2
tatsuki
parents:
diff changeset
3 import java.io.FileInputStream;
tatsuki
parents:
diff changeset
4 import java.nio.ByteBuffer;
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
5 import java.util.Iterator;
1
tatsuki
parents:
diff changeset
6 import java.util.concurrent.atomic.AtomicInteger;
tatsuki
parents:
diff changeset
7
tatsuki
parents:
diff changeset
8 import javax.xml.parsers.SAXParser;
tatsuki
parents:
diff changeset
9 import javax.xml.parsers.SAXParserFactory;
tatsuki
parents:
diff changeset
10
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
11 import fj.data.List;
1
tatsuki
parents:
diff changeset
12 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.ReadXmlHandler;
tatsuki
parents:
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
tatsuki
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
tatsuki
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
tatsuki
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
tatsuki
parents:
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
tatsuki
parents:
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
tatsuki
parents:
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
tatsuki
parents:
diff changeset
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
tatsuki
parents:
diff changeset
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
tatsuki
parents:
diff changeset
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog;
tatsuki
parents:
diff changeset
23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
tatsuki
parents:
diff changeset
24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
tatsuki
parents:
diff changeset
25 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
tatsuki
parents:
diff changeset
26 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator;
tatsuki
parents:
diff changeset
27 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
tatsuki
parents:
diff changeset
28 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal;
tatsuki
parents:
diff changeset
29 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
tatsuki
parents:
diff changeset
30 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
tatsuki
parents:
diff changeset
31 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
tatsuki
parents:
diff changeset
32 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
tatsuki
parents:
diff changeset
33 import junit.framework.Assert;
tatsuki
parents:
diff changeset
34
tatsuki
parents:
diff changeset
35 public class JungleBulletinBoard implements XmlBulletinBoard {
tatsuki
parents:
diff changeset
36
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
37 private final Jungle jungle;
1
tatsuki
parents:
diff changeset
38
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
39 public JungleBulletinBoard() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
40 jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
41 jungle.createNewTree("boards");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
42 }
1
tatsuki
parents:
diff changeset
43
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
44 public IterableConverter<String, TreeNode> getBoards() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
45 JungleTree tree = jungle.getTreeByName("boards");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
46 TreeNode node = tree.getRootNode();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
47 Children chs = node.getChildren();
1
tatsuki
parents:
diff changeset
48
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
49 IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() {
1
tatsuki
parents:
diff changeset
50
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
51 public String conv(TreeNode _b) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
52 List<ByteBuffer> byteBufferList = _b.getAttributes().get("name");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
53 if (byteBufferList.isNotEmpty())
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
54 return byteBufferList.head().toString();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
55 return "";
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
56 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
57 };
1
tatsuki
parents:
diff changeset
58
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
59 return new IterableConverter<String, TreeNode>(chs, converter);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
60 }
1
tatsuki
parents:
diff changeset
61
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
62 public void createBoards(final String _name) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
63 if (null == jungle.createNewTree(_name)) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
64 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
65 }
1
tatsuki
parents:
diff changeset
66
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
67 JungleTree tree = jungle.getTreeByName("boards");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
68 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
69 DefaultNodePath root = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
70 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(root, 0);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
71 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
72 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
73 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
74 editor = either.b();
1
tatsuki
parents:
diff changeset
75
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
76 either = editor.putAttribute(root.add(0), "name", ByteBuffer.wrap(_name.getBytes()));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
77 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
78 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
79 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
80 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
81 either = either.b().success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
82 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
83 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
84 }
1
tatsuki
parents:
diff changeset
85
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
86 }
1
tatsuki
parents:
diff changeset
87
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
88 public void createFolder(final String _board, final String _author, final String _message, final String _editKey,
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
89 String _nodeNum) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
90 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
91 if (tree == null) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
92 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
93 }
1
tatsuki
parents:
diff changeset
94
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
95 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
96 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
97 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
98 if (!_nodeNum.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
99 path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
100 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
101 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
102 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
103 Either<Error, JungleTreeEditor> either;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
104 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
105 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
106 tBuffer.putLong(timestamp);
1
tatsuki
parents:
diff changeset
107
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
108 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
109 TreeNode node = tree.getRootNode();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
110 DefaultTraverser traverser = new DefaultTraverser();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
111 // TraversableNodeWrapper<Node> traversable = new
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
112 // TraversableNodeWrapper<Node>(node);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
113 DefaultEvaluator evaluator = new DefaultEvaluator(path);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
114 Either<Error, Traversal> ret = traverser.traverse(node, evaluator);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
115 if (ret.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
116 Assert.fail();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
117 }
1
tatsuki
parents:
diff changeset
118
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
119 Traversal traversal = ret.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
120 TreeNode target = traversal.destination();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
121 int size = target.getChildren().size();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
122 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
123 either = editor.addNewChildAt(path, size);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
124 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
125 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
126 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
127 editor = either.b();
1
tatsuki
parents:
diff changeset
128
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
129 NodeEditor e = new NodeEditor() {
1
tatsuki
parents:
diff changeset
130
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
131 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
132 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
133 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
134 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
135 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
136 }
1
tatsuki
parents:
diff changeset
137
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
138 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
139 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
140 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
141 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
142 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
143 path = path.add(size);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
144 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
145 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
146 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
147 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
148 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
149 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
150 } while (either.isA());
1
tatsuki
parents:
diff changeset
151
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
152 }
1
tatsuki
parents:
diff changeset
153
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
154 public void createBoardMessage(final String _board, final String _author, final String _message, final String _editKey) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
155 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
156 if (tree == null) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
157 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
158 }
1
tatsuki
parents:
diff changeset
159
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
160 Either<Error, JungleTreeEditor> either;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
161 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
162 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
163 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
164 do {
1
tatsuki
parents:
diff changeset
165
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
166 TreeNode node = tree.getRootNode();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
167 int size = node.getChildren().size();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
168 DefaultNodePath path = new DefaultNodePath();
1
tatsuki
parents:
diff changeset
169
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
170 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
171 either = editor.addNewChildAt(path, size);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
172 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
173 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
174 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
175 editor = either.b();
1
tatsuki
parents:
diff changeset
176
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
177 NodeEditor e = new NodeEditor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
178 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
179 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
180 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
181 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
182 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
183 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
184 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
185 }
1
tatsuki
parents:
diff changeset
186
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
187 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
188 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
189 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
190 }
1
tatsuki
parents:
diff changeset
191
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
192 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
193 path = path.add(size);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
194 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
195 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
196 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
197 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
198 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
199 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
200 } while (either.isA());
1
tatsuki
parents:
diff changeset
201
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
202 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
203
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
204 public void editMessage(String _board, String _nodeNum, final String _author, final String _message,
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
205 final String _editKey) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
206 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
207 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
208 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
209 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
210 Either<Error, JungleTreeEditor> either = null;
1
tatsuki
parents:
diff changeset
211
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
212 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
213 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
214 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
215 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
216 if (!_nodeNum.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
217 path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
218 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
219 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
220 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
221 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
222 NodeEditor e = new NodeEditor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
223 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
224 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
225 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
226 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
227 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
228 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
229 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
230 }
1
tatsuki
parents:
diff changeset
231
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
232 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
233 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
234 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
235 }
1
tatsuki
parents:
diff changeset
236
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
237 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
238 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
239 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
240 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
241 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
242 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
243 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
244 } while (either.isA());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
245 }
1
tatsuki
parents:
diff changeset
246
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
247 public void createAttribute(String _board, String _uuid, final String _author, final String _message,
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
248 final String _editKey) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
249 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
250 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
251 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
252 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
253 Either<Error, JungleTreeEditor> either = null;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
254 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
255 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
256 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
257 for (int count = 0; _uuid.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
258 if (!_uuid.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
259 path = path.add(Integer.parseInt(_uuid.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
260 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
261 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
262 }
1
tatsuki
parents:
diff changeset
263
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
264 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
265 NodeEditor e = new NodeEditor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
266 String str;
1
tatsuki
parents:
diff changeset
267
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
268 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
269 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
270 str = "0";
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
271 int count = 0;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
272 for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
273 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
274 str = String.valueOf(count);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
275 logNode = logNode.getAttributes().put("mes" + str, ByteBuffer.wrap(_message.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
276 logNode = logNode.getAttributes().put("timestamp" + str, tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
277 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
278 }
1
tatsuki
parents:
diff changeset
279
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
280 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
281 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
282 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
283 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
284 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
285 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
286 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
287 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
288 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
289 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
290 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
291 } while (either.isA());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
292 }
1
tatsuki
parents:
diff changeset
293
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
294 public void editAttribute(String boardName, String _path, final String id, final String _message) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
295 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
296 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
297 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
298 JungleTree tree = jungle.getTreeByName(boardName);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
299 Either<Error, JungleTreeEditor> either = null;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
300 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
301 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
302 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
303 for (int count = 0; _path.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
304 if (!_path.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
305 path = path.add(Integer.parseInt(_path.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
306 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
307 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
308 }
1
tatsuki
parents:
diff changeset
309
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
310 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
311 NodeEditor e = new NodeEditor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
312 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
313 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
314 // EnableNodeWrapper<T> node = _e.getWrap();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
315 logNode = logNode.getAttributes().put("mes" + id, ByteBuffer.wrap(_message.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
316 logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
317 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
318 }
1
tatsuki
parents:
diff changeset
319
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
320 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
321 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
322 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
323 }
1
tatsuki
parents:
diff changeset
324
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
325 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
326 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
327 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
328 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
329 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
330 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
331 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
332 } while (either.isA());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
333 }
1
tatsuki
parents:
diff changeset
334
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
335 public void deleteNode(String _board, String _path, String _id) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
336 int id = Integer.parseInt(_id);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
337 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
338 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
339 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
340 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
341 Either<Error, JungleTreeEditor> either = null;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
342 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
343 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
344 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
345 for (int count = 0; _path.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
346 if (!_path.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
347 path = path.add(Integer.parseInt(_path.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
348 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
349 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
350 }
1
tatsuki
parents:
diff changeset
351
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
352 JungleTreeEditor editor = tree.getTreeEditor();
1
tatsuki
parents:
diff changeset
353
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
354 either = editor.deleteChildAt(path, id);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
355 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
356 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
357 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
358 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
359 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
360 } while (either.isA());
1
tatsuki
parents:
diff changeset
361
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
362 }
1
tatsuki
parents:
diff changeset
363
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
364 public void deleteAttribute(String _board, String _path, final String id) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
365 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
366 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
367 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
368 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
369 Either<Error, JungleTreeEditor> either = null;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
370 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
371 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
372 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
373 for (int count = 0; _path.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
374 if (!_path.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
375 path = path.add(Integer.parseInt(_path.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
376 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
377 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
378 System.out.println("屑");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
379 }
1
tatsuki
parents:
diff changeset
380
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
381 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
382 NodeEditor e = new NodeEditor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
383 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
384 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
385 logNode = logNode.getAttributes().delete("mes" + id).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
386 logNode = logNode.getAttributes().delete("timestamp" + id).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
387 int count = Integer.parseInt(id);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
388 for (; logNode.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
389 logNode = logNode.getAttributes()
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
390 .put("mes" + count, node.getAttributes().get("mes" + String.valueOf(count + 1)).head()).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
391 logNode = logNode.getAttributes().put("timestamp" + count, tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
392 count++;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
393 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
394 if (count != Integer.parseInt(id)) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
395 logNode = logNode.getAttributes().delete("timestamp" + count).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
396 logNode = logNode.getAttributes().delete("mes" + count).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
397 }
1
tatsuki
parents:
diff changeset
398
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
399 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
400 }
1
tatsuki
parents:
diff changeset
401
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
402 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
403 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
404 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
405 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
406 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
407 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
408 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
409 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
410 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
411 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
412 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
413 } while (either.isA());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
414 }
1
tatsuki
parents:
diff changeset
415
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
416 public void editMatrixMessage(String _board, String _uuid, final String _author, final String _message,
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
417 final String _editKey) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
418 final long timestamp = System.currentTimeMillis();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
419 final ByteBuffer tBuffer = ByteBuffer.allocate(16);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
420 tBuffer.putLong(timestamp);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
421 JungleTree tree = jungle.getTreeByName(_board);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
422 Either<Error, JungleTreeEditor> either = null;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
423 do {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
424 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
425 path = path.add(Integer.parseInt(_uuid));
1
tatsuki
parents:
diff changeset
426
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
427 JungleTreeEditor editor = tree.getTreeEditor();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
428 NodeEditor e = new NodeEditor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
429 public Either<Error, LoggingNode> edit(TreeNode node) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
430 LoggingNode logNode = wrap(node, new DefaultOperationLog());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
431 logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
432 logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
433 logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
434 logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
435 return DefaultEither.newB(logNode);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
436 }
1
tatsuki
parents:
diff changeset
437
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
438 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
439 public LoggingNode wrap(TreeNode node, OperationLog op) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
440 return new LoggingNode(node, op);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
441 }
1
tatsuki
parents:
diff changeset
442
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
443 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
444 either = editor.edit(path, e);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
445 if (either.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
446 throw new IllegalStateException();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
447 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
448 editor = either.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
449 either = editor.success();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
450 } while (either.isA());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
451 }
1
tatsuki
parents:
diff changeset
452
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
453 public Iterable<BoardMessage> getMessages(String _boardName) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
454 JungleTree tree = jungle.getTreeByName(_boardName);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
455 TreeNode node = tree.getRootNode();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
456 Children chs = node.getChildren();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
457 final AtomicInteger counter = new AtomicInteger(0);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
458 IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
459 public BoardMessage conv(TreeNode _b) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
460 String uuid = Integer.toString(counter.get());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
461 String author = new String(_b.getAttributes().get("author").head().array());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
462 String message = new String(_b.getAttributes().get("mes").head().array());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
463 counter.incrementAndGet();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
464 return new BoardMessageImpl(author, message, uuid);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
465 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
466 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
467 return new IterableConverter<BoardMessage, TreeNode>(chs, converter);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
468 }
1
tatsuki
parents:
diff changeset
469
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
470 public Iterable<BoardMessage> getFolder(String _boardName, String _nodeNum) {
1
tatsuki
parents:
diff changeset
471
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
472 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
473 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
474 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
475 if (!_nodeNum.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
476 path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
477 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
478 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
479 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
480 JungleTree tree = jungle.getTreeByName(_boardName);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
481 TreeNode node = tree.getRootNode();
1
tatsuki
parents:
diff changeset
482
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
483 DefaultTraverser traverser = new DefaultTraverser();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
484 DefaultEvaluator evaluator = new DefaultEvaluator(path);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
485 Either<Error, Traversal> ret = traverser.traverse(node, evaluator);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
486 if (ret.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
487 Assert.fail();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
488 }
1
tatsuki
parents:
diff changeset
489
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
490 Traversal traversal = ret.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
491 TreeNode target = traversal.destination();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
492 Children chs = target.getChildren();
1
tatsuki
parents:
diff changeset
493
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
494 final AtomicInteger counter = new AtomicInteger(0);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
495 IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
496 public BoardMessage conv(TreeNode _b) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
497 String uuid = Integer.toString(counter.get());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
498 String message = new String(_b.getAttributes().get("element").head().array());
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
499 counter.incrementAndGet();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
500 return new BoardMessageImpl(null, message, uuid);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
501 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
502 };
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
503 return new IterableConverter<BoardMessage, TreeNode>(chs, converter);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
504 }
1
tatsuki
parents:
diff changeset
505
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
506 public GetAttributeImp getAttribute(String _boardName, String _nodeNum) {
1
tatsuki
parents:
diff changeset
507
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
508 DefaultNodePath path = new DefaultNodePath();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
509 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
510 for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
511 if (!_nodeNum.substring(count, count + 1).equals("/"))
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
512 path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1)));
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
513 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
514 } catch (Exception _e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
515 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
516 JungleTree tree = jungle.getTreeByName(_boardName);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
517 TreeNode node = tree.getRootNode();
1
tatsuki
parents:
diff changeset
518
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
519 DefaultTraverser traverser = new DefaultTraverser();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
520 DefaultEvaluator evaluator = new DefaultEvaluator(path);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
521 Either<Error, Traversal> ret = traverser.traverse(node, evaluator);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
522 if (ret.isA()) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
523 Assert.fail();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
524 }
1
tatsuki
parents:
diff changeset
525
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
526 Traversal traversal = ret.b();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
527 TreeNode target = traversal.destination();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
528 return new GetAttributeImp(target);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
529 }
1
tatsuki
parents:
diff changeset
530
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
531 private static class BoardMessageImpl implements BoardMessage {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
532 private final String author;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
533 private final String message;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
534 private final String uuid;
1
tatsuki
parents:
diff changeset
535
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
536 public BoardMessageImpl(String _author, String _message, String _uuid) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
537 author = _author;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
538 message = _message;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
539 uuid = _uuid;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
540 }
1
tatsuki
parents:
diff changeset
541
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
542 public String getAuthor() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
543 return author;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
544 }
1
tatsuki
parents:
diff changeset
545
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
546 public String getMessage() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
547 return message;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
548 }
1
tatsuki
parents:
diff changeset
549
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
550 public String getUUID() {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
551 return uuid;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
552 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
553
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
554 }
1
tatsuki
parents:
diff changeset
555
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
556 public void readXml(String xmlPath) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
557 try {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
558 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
559 SAXParser saxParser = saxParserFactory.newSAXParser();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
560 createBoards(xmlPath);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
561 JungleTree tree = jungle.getTreeByName(xmlPath);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
562 ReadXmlHandler readXmlHandler = new ReadXmlHandler(tree);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
563 saxParser.parse(new FileInputStream("xml/" + xmlPath), readXmlHandler);
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
564 } catch (Exception e) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
565 e.printStackTrace();
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
566 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
567 }
1
tatsuki
parents:
diff changeset
568
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
569 public String sanitize(String str) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
570 if (str == null) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
571 return str;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
572 }
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
573 str = str.replaceAll("&", "&amp;");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
574 str = str.replaceAll("<", "&lt;");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
575 str = str.replaceAll(">", "&gt;");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
576 str = str.replaceAll("\"", "&quot;");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
577 str = str.replaceAll("'", "&#39;");
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
578 return str;
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
579 }
1
tatsuki
parents:
diff changeset
580
41
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
581 @Override
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
582 public void createBoards(String _name, String _author, String _initMessage, String _editKey) {
037731e99d6e fit JungleCore 144
one
parents: 39
diff changeset
583 }
1
tatsuki
parents:
diff changeset
584
tatsuki
parents:
diff changeset
585 }