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

move child
author tatsuki
date Tue, 02 Aug 2016 17:46:03 +0900
parents 5acde010c6db
children 36f0f18ce6a8
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;
5
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.InterfaceTraverser;
4
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
5
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
20 import plparser.Property;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
21 import plparser.jungle.PropertyJungleTreeFactoryImpl;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
22 import plparser.jungle.PropertyListJungleNodeFactory;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
23 import plparser.jungle.PropertyListParserCreateTree;
4
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
24
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
25 import java.nio.ByteBuffer;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
26 import java.util.Iterator;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
27
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
28 public class JungleBrowsingBulletinBoard implements
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
29 BrowsingBulletinBoard {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
30 private final Jungle jungle;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
31
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
32 public JungleBrowsingBulletinBoard() {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
33 jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
34 new DefaultTraverser()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
35 jungle.createNewTree("boards");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
36 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
37
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
38 public Iterable<String> getBoards() {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
39 JungleTree tree = jungle.getTreeByName("boards");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
40 TreeNode node = tree.getRootNode();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
41 Children chs = node.getChildren();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
42
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
43 IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
44 public String conv(TreeNode _b) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
45 ByteBuffer e = _b.getAttributes().get("name");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
46 return new String(e.array());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
47 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
48 };
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
49
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
50 return new IterableConverter<String, TreeNode>(chs, converter);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
51 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
52
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
53 public void createBoards(final String _name) {
5
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
54 createBoards(_name, new DefaultTreeNode());
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
55 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
56 public void createBoards(final String _name, TreeNode rootNode) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
57 if (null == jungle.createNewTree(_name, rootNode)) {
4
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
58 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
59 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
60 JungleTree tree = jungle.getTreeByName("boards");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
61 JungleTreeEditor editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
62 DefaultNodePath root = new DefaultNodePath();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
63 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(root, 0);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
64 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
65 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
66 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
67 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
68
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
69 either = editor.putAttribute(root.add(0), "name", ByteBuffer.wrap(_name.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
70 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
71 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
72 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
73 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
74 Either<Error, JungleTreeEditor> result = editor.success();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
75 if (result.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
76 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
77 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
78
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
79 tree = jungle.getTreeByName(_name);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
80 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
81 either = editor.putAttribute(root, "NodeName", ByteBuffer.wrap("root".getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
82 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
83 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
84 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
85 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
86 editor.success();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
87 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
88
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
89 public void createBoardMessage(final String boardName, final String key,
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
90 final String attribute, final String pathStr) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
91 if (key.equals("") | attribute.equals(""))
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
92 return ;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
93 NodePath path = createNodePath(pathStr);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
94 JungleTree tree = jungle.getTreeByName(boardName);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
95 if (tree == null) {
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
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
99 JungleTreeEditor editor;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
100 do {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
101 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
102 Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
103 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
104 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
105 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
106 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
107 } while (editor.success().isA());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
108 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
109
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
110 @Override
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
111 public void createChild(String bname, String nodeName, String pathStr) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
112 NodePath path = createNodePath(pathStr);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
113 JungleTree tree = jungle.getTreeByName(bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
114 if (tree == null) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
115 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
116 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
117 Either<Error,TreeNode> getNodeEither = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
118 if (getNodeEither.isA())
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
119 return ;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
120 TreeNode currentNode = getNodeEither.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
121 int childCount = currentNode.getChildren().size();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
122
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
123 JungleTreeEditor editor;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
124 do {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
125 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
126 Either<Error,JungleTreeEditor> either = editor.addNewChildAt(path, childCount);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
127 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
128 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
129 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
130 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
131
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
132 either = editor.putAttribute(path.add(childCount),"NodeName",ByteBuffer.wrap(nodeName.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
133 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
134 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
135 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
136 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
137
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
138 } while (editor.success().isA());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
139 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
140
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
141 public void editMessage(String bname, String key, final String attribute,
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
142 final String pathStr) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
143 NodePath path = createNodePath(pathStr);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
144
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
145 JungleTreeEditor editor = null;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
146
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
147 do {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
148 JungleTree tree = jungle.getTreeByName(bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
149 editor = tree.getTreeEditor();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
150
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
151 Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes()));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
152
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
153 if (either.isA()) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
154 throw new IllegalStateException();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
155 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
156 editor = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
157 } while (editor.success().isA());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
158 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
159
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
160 public String sanitize(String str) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
161 if (str == null) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
162 return str;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
163 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
164 str = str.replaceAll("&", "&amp;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
165 str = str.replaceAll("<", "&lt;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
166 str = str.replaceAll(">", "&gt;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
167 str = str.replaceAll("\"", "&quot;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
168 str = str.replaceAll("'", "&#39;");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
169 return str;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
170 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
171
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
172 public GetAttributeImp getAttribute(String _bname, String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
173
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
174 DefaultNodePath path = createNodePath(nodePath);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
175 JungleTree tree = jungle.getTreeByName(_bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
176 Either<Error, TreeNode> either = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
177 if (either.isA())
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
178 return new GetAttributeImp(new DefaultTreeNode());
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
179 TreeNode currentNode = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
180 return new GetAttributeImp(currentNode);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
181 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
182
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
183 @Override
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
184 public Iterator<TreeNode> getChildren(String bname, String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
185 DefaultNodePath path = createNodePath(nodePath);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
186 JungleTree tree = jungle.getTreeByName(bname);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
187 Either<Error, TreeNode> either = tree.getNodeOfPath(path);
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
188 if (either.isA())
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
189 return new NulIterator<TreeNode>();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
190 TreeNode currentNode = either.b();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
191 TreeNodeChildren children = currentNode.getChildren();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
192 return children.iterator();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
193 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
194
5
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
195 @Override
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
196 public void importLayout(String boardName, String path) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
197 PropertyListParserCreateTree<Property> jp;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
198 PropertyListJungleNodeFactory jlf = new PropertyJungleTreeFactoryImpl();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
199 jp = new PropertyListParserCreateTree<Property>(jlf);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
200 TreeNode root = jp.parseFile(path);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
201 createBoards(boardName, root);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
202 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
203
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
204 @Override
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
205 public Iterator<TreeNode> findNode(String bname, String key, String value) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
206 JungleTree tree = jungle.getTreeByName(bname);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
207 InterfaceTraverser traverser = tree.getTraverser(true);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
208 return traverser.find((TreeNode node) -> {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
209 return true;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
210 },key,value);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
211 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
212
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
213 @Override
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
214 public String getNodePath(String bname, TreeNode node) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
215 JungleTree tree = jungle.getTreeByName(bname);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
216 NodePath path = tree.getNodePath(node);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
217 return path.toString();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
218 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
219
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
220 @Override
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
221 public boolean childMove(String bname, String pathString, String childNumString, String move) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
222 int childNum = Integer.parseInt(childNumString);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
223 JungleTree tree = jungle.getTreeByName(bname);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
224 DefaultNodePath path = createNodePath(pathString);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
225 TreeNode node = tree.getNodeOfPath(path).b();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
226 int childrenCount = node.getChildren().size();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
227 TreeNode child = node.getChildren().at(childNum).b();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
228 TreeNodeChildren grandsons = child.getChildren();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
229 JungleTreeEditor editor = tree.getTreeEditor();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
230 editor = editor.deleteChildAt(path,childNum).b();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
231 if (move.equals("up") && childNum != 0)
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
232 childNum--;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
233 else if (move.equals("down") && childNum != childrenCount)
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
234 childNum++;
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
235 editor = editor.addNewChildAt(path,childNum).b();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
236
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
237 Iterator<String> keys = child.getAttributes().getKeys();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
238 NodePath newChildPath = path.add(childNum);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
239 while (keys.hasNext()) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
240 String key = keys.next();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
241 ByteBuffer value = child.getAttributes().get(key);
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
242 editor = editor.putAttribute(newChildPath,key,value).b();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
243 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
244
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
245 for (TreeNode grandson : grandsons) {
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
246
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
247 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
248 return editor.success().isB();
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
249 }
2b3542c5be34 move child
tatsuki
parents: 4
diff changeset
250
4
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
251 private DefaultNodePath createNodePath(String nodePath) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
252 DefaultNodePath path = new DefaultNodePath();
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
253 String[] nums = nodePath.split(",");
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
254 for (String num : nums) {
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
255 if (num.equals("-1"))
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
256 continue;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
257 path = path.add(Integer.parseInt(num));
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
258 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
259 return path;
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
260 }
5acde010c6db add jungle browsing system
tatsuki
parents:
diff changeset
261 }