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