Mercurial > hg > Database > jungle-network
comparison src/jungle/test/bbs/JungleBulletinBoard.java @ 38:d8ee57a1c2c6
add pom.xml and bbs
author | one |
---|---|
date | Mon, 08 Jul 2013 20:25:58 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
37:ed4c2e6ab5d1 | 38:d8ee57a1c2c6 |
---|---|
1 package jungle.test.bbs; | |
2 | |
3 import java.nio.ByteBuffer; | |
4 import java.util.concurrent.atomic.AtomicInteger; | |
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; | |
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; | |
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; | |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; | |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; | |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; | |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; | |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; | |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; | |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; | |
20 | |
21 public class JungleBulletinBoard implements BulletinBoard | |
22 { | |
23 private final Jungle jungle; | |
24 | |
25 public JungleBulletinBoard() | |
26 { | |
27 jungle = new DefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser())); | |
28 jungle.createNewTree("boards"); | |
29 } | |
30 | |
31 public Iterable<String> getBoards() | |
32 { | |
33 JungleTree tree = jungle.getTreeByName("boards"); | |
34 Node node = tree.getRootNode(); | |
35 Children<Node> chs = node.getChildren(); | |
36 | |
37 IterableConverter.Converter<String,Node> converter = new IterableConverter.Converter<String,Node>(){ | |
38 public String conv(Node _b) { | |
39 ByteBuffer e = _b.getAttributes().get("name"); | |
40 return new String(e.array()); | |
41 } | |
42 }; | |
43 | |
44 return new IterableConverter<String,Node>(chs,converter); | |
45 } | |
46 | |
47 public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey) | |
48 { | |
49 if(null == jungle.createNewTree(_name)){ | |
50 throw new IllegalStateException(); | |
51 } | |
52 | |
53 JungleTree tree = jungle.getTreeByName("boards"); | |
54 JungleTreeEditor editor = tree.getTreeEditor(); | |
55 DefaultNodePath root = new DefaultNodePath(); | |
56 Either<Error,JungleTreeEditor> either = editor.addNewChildAt(root,0); | |
57 if(either.isA()){ | |
58 throw new IllegalStateException(); | |
59 } | |
60 editor = either.b(); | |
61 | |
62 either = editor.putAttribute(root.add(0),"name",ByteBuffer.wrap(_name.getBytes())); | |
63 if(either.isA()){ | |
64 throw new IllegalStateException(); | |
65 } | |
66 editor = either.b(); | |
67 Either<Error,JungleTreeEditor> result = editor.success(); | |
68 if(result.isA()){ | |
69 throw new IllegalStateException(); | |
70 } | |
71 | |
72 tree = jungle.getTreeByName(_name); | |
73 editor = tree.getTreeEditor(); | |
74 either = editor.addNewChildAt(root,0); | |
75 if(either.isA()){ | |
76 throw new IllegalStateException(); | |
77 } | |
78 editor = either.b(); | |
79 | |
80 NodeEditor e = new NodeEditor(){ | |
81 public <T extends EditableNode<T>> Either<Error, T> edit(T _e){ | |
82 _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); | |
83 _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b(); | |
84 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); | |
85 return DefaultEither.newB(_e); | |
86 } | |
87 }; | |
88 | |
89 either = editor.edit(root.add(0),e); | |
90 if(either.isA()){ | |
91 throw new IllegalStateException(); | |
92 } | |
93 editor = either.b(); | |
94 editor.success(); | |
95 } | |
96 | |
97 public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey) | |
98 { | |
99 JungleTree tree = jungle.getTreeByName(_board); | |
100 if(tree == null){ | |
101 throw new IllegalStateException(); | |
102 } | |
103 | |
104 JungleTreeEditor editor; | |
105 do{ | |
106 Node node = tree.getRootNode(); | |
107 int size = node.getChildren().size(); | |
108 DefaultNodePath path = new DefaultNodePath(); | |
109 | |
110 editor = tree.getTreeEditor(); | |
111 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path,size); | |
112 if(either.isA()){ | |
113 throw new IllegalStateException(); | |
114 } | |
115 editor = either.b(); | |
116 | |
117 NodeEditor e = new NodeEditor(){ | |
118 public <T extends EditableNode<T>> Either<Error, T> edit(T _e){ | |
119 _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); | |
120 _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); | |
121 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); | |
122 return DefaultEither.newB(_e); | |
123 } | |
124 }; | |
125 | |
126 path = path.add(size); | |
127 either = editor.edit(path,e); | |
128 if(either.isA()){ | |
129 throw new IllegalStateException(); | |
130 } | |
131 editor = either.b(); | |
132 }while(editor.success().isA()); | |
133 } | |
134 | |
135 public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey) | |
136 { | |
137 JungleTreeEditor editor = null; | |
138 do{ | |
139 DefaultNodePath path = new DefaultNodePath(); | |
140 path = path.add(Integer.parseInt(_uuid)); | |
141 | |
142 JungleTree tree = jungle.getTreeByName(_board); | |
143 editor = tree.getTreeEditor(); | |
144 NodeEditor e = new NodeEditor(){ | |
145 public <T extends EditableNode<T>> Either<Error, T> edit(T _e){ | |
146 _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); | |
147 _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); | |
148 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); | |
149 return DefaultEither.newB(_e); | |
150 } | |
151 }; | |
152 | |
153 Either<Error,JungleTreeEditor> either = editor.edit(path,e); | |
154 if(either.isA()){ | |
155 throw new IllegalStateException(); | |
156 } | |
157 editor = either.b(); | |
158 }while(editor.success().isA()); | |
159 } | |
160 | |
161 public Iterable<BoardMessage> getMessages(String _boardName) | |
162 { | |
163 JungleTree tree = jungle.getTreeByName(_boardName); | |
164 Node node = tree.getRootNode(); | |
165 Children<Node> chs = node.getChildren(); | |
166 | |
167 final AtomicInteger counter = new AtomicInteger(0); | |
168 IterableConverter.Converter<BoardMessage,Node> converter = new IterableConverter.Converter<BoardMessage,Node>(){ | |
169 public BoardMessage conv(Node _b) { | |
170 String uuid = Integer.toString(counter.get()); | |
171 String author = new String(_b.getAttributes().get("author").array()); | |
172 String message = new String(_b.getAttributes().get("mes").array()); | |
173 counter.incrementAndGet(); | |
174 return new BoardMessageImpl(author,message,uuid); | |
175 } | |
176 }; | |
177 | |
178 return new IterableConverter<BoardMessage,Node>(chs,converter); | |
179 } | |
180 | |
181 private static class BoardMessageImpl implements BoardMessage | |
182 { | |
183 private final String author; | |
184 private final String message; | |
185 private final String uuid; | |
186 | |
187 public BoardMessageImpl(String _author,String _message,String _uuid) | |
188 { | |
189 author = _author; | |
190 message = _message; | |
191 uuid = _uuid; | |
192 } | |
193 | |
194 public String getAuthor() | |
195 { | |
196 return author; | |
197 } | |
198 | |
199 public String getMessage() | |
200 { | |
201 return message; | |
202 } | |
203 | |
204 public String getUUID() | |
205 { | |
206 return uuid; | |
207 } | |
208 } | |
209 } |