annotate src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java @ 4:5acde010c6db

add jungle browsing system
author tatsuki
date Tue, 28 Jun 2016 19:45:55 +0900
parents
children 2b3542c5be34
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.bbs.browsing;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
2
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
3
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
4 import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.jungle.core.Children;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.jungle.store.NulIterator;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeChildren;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
19
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
20 import java.nio.ByteBuffer;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
21 import java.util.Iterator;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
22
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
23 public class JungleBrowsingBulletinBoard implements
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
24 BrowsingBulletinBoard {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
25 private final Jungle jungle;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
26
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
27 public JungleBrowsingBulletinBoard() {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
28 jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
29 new DefaultTraverser()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
30 jungle.createNewTree("boards");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
31 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
32
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
33 public Iterable<String> getBoards() {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
34 JungleTree tree = jungle.getTreeByName("boards");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
35 TreeNode node = tree.getRootNode();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
36 Children chs = node.getChildren();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
37
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
38 IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
39 public String conv(TreeNode _b) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
40 ByteBuffer e = _b.getAttributes().get("name");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
41 return new String(e.array());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
42 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
43 };
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
44
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
45 return new IterableConverter<String, TreeNode>(chs, converter);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
46 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
47
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
48 public void createBoards(final String _name) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
49 if (null == jungle.createNewTree(_name)) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
50 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
51 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
52 JungleTree tree = jungle.getTreeByName("boards");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
53 JungleTreeEditor editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
54 DefaultNodePath root = new DefaultNodePath();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
55 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(root, 0);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
56 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
57 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
58 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
59 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
60
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
61 either = editor.putAttribute(root.add(0), "name", ByteBuffer.wrap(_name.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
62 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
63 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
64 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
65 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
66 Either<Error, JungleTreeEditor> result = editor.success();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
67 if (result.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
68 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
69 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
70
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
71 tree = jungle.getTreeByName(_name);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
72 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
73 either = editor.putAttribute(root, "NodeName", ByteBuffer.wrap("root".getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
74 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
75 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
76 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
77 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
78 editor.success();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
79 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
80
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
81 public void createBoardMessage(final String boardName, final String key,
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
82 final String attribute, final String pathStr) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
83 if (key.equals("") | attribute.equals(""))
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
84 return ;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
85 NodePath path = createNodePath(pathStr);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
86 JungleTree tree = jungle.getTreeByName(boardName);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
87 if (tree == null) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
88 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
89 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
90
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
91 JungleTreeEditor editor;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
92 do {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
93 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
94 Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
95 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
96 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
97 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
98 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
99 } while (editor.success().isA());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
100 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
101
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
102 @Override
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
103 public void createChild(String bname, String nodeName, String pathStr) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
104 NodePath path = createNodePath(pathStr);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
105 JungleTree tree = jungle.getTreeByName(bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
106 if (tree == null) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
107 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
108 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
109 Either<Error,TreeNode> getNodeEither = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
110 if (getNodeEither.isA())
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
111 return ;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
112 TreeNode currentNode = getNodeEither.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
113 int childCount = currentNode.getChildren().size();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
114
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
115 JungleTreeEditor editor;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
116 do {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
117 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
118 Either<Error,JungleTreeEditor> either = editor.addNewChildAt(path, childCount);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
119 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
120 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
121 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
122 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
123
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
124 either = editor.putAttribute(path.add(childCount),"NodeName",ByteBuffer.wrap(nodeName.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
125 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
126 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
127 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
128 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
129
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
130 } while (editor.success().isA());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
131 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
132
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
133 public void editMessage(String bname, String key, final String attribute,
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
134 final String pathStr) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
135 NodePath path = createNodePath(pathStr);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
136
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
137 JungleTreeEditor editor = null;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
138
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
139 do {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
140 JungleTree tree = jungle.getTreeByName(bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
141 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
142
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
143 Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
144
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
145 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
146 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
147 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
148 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
149 } while (editor.success().isA());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
150 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
151
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
152 public String sanitize(String str) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
153 if (str == null) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
154 return str;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
155 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
156 str = str.replaceAll("&", "&amp;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
157 str = str.replaceAll("<", "&lt;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
158 str = str.replaceAll(">", "&gt;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
159 str = str.replaceAll("\"", "&quot;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
160 str = str.replaceAll("'", "&#39;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
161 return str;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
162 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
163
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
164 public GetAttributeImp getAttribute(String _bname, String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
165
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
166 DefaultNodePath path = createNodePath(nodePath);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
167 JungleTree tree = jungle.getTreeByName(_bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
168 Either<Error, TreeNode> either = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
169 if (either.isA())
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
170 return new GetAttributeImp(new DefaultTreeNode());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
171 TreeNode currentNode = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
172 return new GetAttributeImp(currentNode);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
173 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
174
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
175 @Override
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
176 public Iterator<TreeNode> getChildren(String bname, String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
177 DefaultNodePath path = createNodePath(nodePath);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
178 JungleTree tree = jungle.getTreeByName(bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
179 Either<Error, TreeNode> either = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
180 if (either.isA())
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
181 return new NulIterator<TreeNode>();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
182 TreeNode currentNode = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
183 TreeNodeChildren children = currentNode.getChildren();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
184 return children.iterator();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
185 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
186
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
187 private DefaultNodePath createNodePath(String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
188 DefaultNodePath path = new DefaultNodePath();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
189 String[] nums = nodePath.split(",");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
190 for (String num : nums) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
191 if (num.equals("-1"))
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
192 continue;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
193 path = path.add(Integer.parseInt(num));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
194 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
195 return path;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
196 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
197 }