comparison 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
comparison
equal deleted inserted replaced
4:5acde010c6db 5:2b3542c5be34
12 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; 12 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor;
13 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; 13 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
14 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeChildren; 14 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeChildren;
15 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode; 15 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
16 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; 16 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
17 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.InterfaceTraverser;
17 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; 18 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
18 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; 19 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
20 import plparser.Property;
21 import plparser.jungle.PropertyJungleTreeFactoryImpl;
22 import plparser.jungle.PropertyListJungleNodeFactory;
23 import plparser.jungle.PropertyListParserCreateTree;
19 24
20 import java.nio.ByteBuffer; 25 import java.nio.ByteBuffer;
21 import java.util.Iterator; 26 import java.util.Iterator;
22 27
23 public class JungleBrowsingBulletinBoard implements 28 public class JungleBrowsingBulletinBoard implements
44 49
45 return new IterableConverter<String, TreeNode>(chs, converter); 50 return new IterableConverter<String, TreeNode>(chs, converter);
46 } 51 }
47 52
48 public void createBoards(final String _name) { 53 public void createBoards(final String _name) {
49 if (null == jungle.createNewTree(_name)) { 54 createBoards(_name, new DefaultTreeNode());
55 }
56 public void createBoards(final String _name, TreeNode rootNode) {
57 if (null == jungle.createNewTree(_name, rootNode)) {
50 throw new IllegalStateException(); 58 throw new IllegalStateException();
51 } 59 }
52 JungleTree tree = jungle.getTreeByName("boards"); 60 JungleTree tree = jungle.getTreeByName("boards");
53 JungleTreeEditor editor = tree.getTreeEditor(); 61 JungleTreeEditor editor = tree.getTreeEditor();
54 DefaultNodePath root = new DefaultNodePath(); 62 DefaultNodePath root = new DefaultNodePath();
182 TreeNode currentNode = either.b(); 190 TreeNode currentNode = either.b();
183 TreeNodeChildren children = currentNode.getChildren(); 191 TreeNodeChildren children = currentNode.getChildren();
184 return children.iterator(); 192 return children.iterator();
185 } 193 }
186 194
195 @Override
196 public void importLayout(String boardName, String path) {
197 PropertyListParserCreateTree<Property> jp;
198 PropertyListJungleNodeFactory jlf = new PropertyJungleTreeFactoryImpl();
199 jp = new PropertyListParserCreateTree<Property>(jlf);
200 TreeNode root = jp.parseFile(path);
201 createBoards(boardName, root);
202 }
203
204 @Override
205 public Iterator<TreeNode> findNode(String bname, String key, String value) {
206 JungleTree tree = jungle.getTreeByName(bname);
207 InterfaceTraverser traverser = tree.getTraverser(true);
208 return traverser.find((TreeNode node) -> {
209 return true;
210 },key,value);
211 }
212
213 @Override
214 public String getNodePath(String bname, TreeNode node) {
215 JungleTree tree = jungle.getTreeByName(bname);
216 NodePath path = tree.getNodePath(node);
217 return path.toString();
218 }
219
220 @Override
221 public boolean childMove(String bname, String pathString, String childNumString, String move) {
222 int childNum = Integer.parseInt(childNumString);
223 JungleTree tree = jungle.getTreeByName(bname);
224 DefaultNodePath path = createNodePath(pathString);
225 TreeNode node = tree.getNodeOfPath(path).b();
226 int childrenCount = node.getChildren().size();
227 TreeNode child = node.getChildren().at(childNum).b();
228 TreeNodeChildren grandsons = child.getChildren();
229 JungleTreeEditor editor = tree.getTreeEditor();
230 editor = editor.deleteChildAt(path,childNum).b();
231 if (move.equals("up") && childNum != 0)
232 childNum--;
233 else if (move.equals("down") && childNum != childrenCount)
234 childNum++;
235 editor = editor.addNewChildAt(path,childNum).b();
236
237 Iterator<String> keys = child.getAttributes().getKeys();
238 NodePath newChildPath = path.add(childNum);
239 while (keys.hasNext()) {
240 String key = keys.next();
241 ByteBuffer value = child.getAttributes().get(key);
242 editor = editor.putAttribute(newChildPath,key,value).b();
243 }
244
245 for (TreeNode grandson : grandsons) {
246
247 }
248 return editor.success().isB();
249 }
250
187 private DefaultNodePath createNodePath(String nodePath) { 251 private DefaultNodePath createNodePath(String nodePath) {
188 DefaultNodePath path = new DefaultNodePath(); 252 DefaultNodePath path = new DefaultNodePath();
189 String[] nums = nodePath.split(","); 253 String[] nums = nodePath.split(",");
190 for (String num : nums) { 254 for (String num : nums) {
191 if (num.equals("-1")) 255 if (num.equals("-1"))