Mercurial > hg > Members > nobuyasu > jungle-network
comparison src/jungle/test/bbs/NetworkJungleBulletinBoard.java @ 46:fd3643699f83
modified pom.xml. fix conflict log4j libraries
author | one |
---|---|
date | Fri, 12 Jul 2013 11:27:00 +0900 |
parents | bf3dc481cc9b |
children | 686057add8a4 |
comparison
equal
deleted
inserted
replaced
45:bf3dc481cc9b | 46:fd3643699f83 |
---|---|
1 package jungle.test.bbs; | 1 package jungle.test.bbs; |
2 | 2 |
3 import java.io.IOException; | |
3 import java.nio.ByteBuffer; | 4 import java.nio.ByteBuffer; |
4 import java.util.concurrent.atomic.AtomicInteger; | 5 import java.util.concurrent.atomic.AtomicInteger; |
5 | 6 |
6 import alice.jungle.core.NetworkDefaultJungle; | 7 import alice.jungle.core.NetworkDefaultJungle; |
8 import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; | |
9 import alice.jungle.transaction.NetworkDefaultJungleTreeEditor; | |
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; | 16 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; | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; | |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; | 19 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; | 20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; | 21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | 22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | 23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | 24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; |
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; | 25 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; |
26 import jungle.test.bbs.codesegment.NullCodeSegmentForUpdate; | |
22 | 27 |
23 public class NetworkJungleBulletinBoard implements BulletinBoard | 28 public class NetworkJungleBulletinBoard implements BulletinBoard |
24 { | 29 { |
25 private JungleManager jm; | 30 private JungleManager jm; |
26 private final Jungle jungle; | 31 private final Jungle jungle; |
27 | 32 |
28 public NetworkJungleBulletinBoard(String _serverName) | 33 public NetworkJungleBulletinBoard(String _serverName) |
29 { | 34 { |
30 Jungle _j = new NetworkDefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()), _serverName); | 35 Jungle _j = new NetworkDefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()), _serverName); |
31 JungleManager.setJungle(_j); | 36 JungleManager.setJungle(_j); |
32 jungle = jm.getJungle(); | 37 jungle = JungleManager.getJungle(); |
33 jungle.createNewTree("boards"); | 38 jungle.createNewTree("boards"); |
34 } | 39 } |
35 | 40 |
36 public Iterable<String> getBoards() | 41 public Iterable<String> getBoards() |
37 { | 42 { |
70 } | 75 } |
71 editor = either.b(); | 76 editor = either.b(); |
72 Either<Error,JungleTreeEditor> result = editor.success(); | 77 Either<Error,JungleTreeEditor> result = editor.success(); |
73 if(result.isA()){ | 78 if(result.isA()){ |
74 throw new IllegalStateException(); | 79 throw new IllegalStateException(); |
80 } | |
81 /* Put DataSegment */ | |
82 try { | |
83 putTreeOperationLog((NetworkDefaultJungleTreeEditor)result.b()); | |
84 } catch (IOException e1) { | |
85 e1.printStackTrace(); | |
75 } | 86 } |
76 | 87 |
77 tree = jungle.getTreeByName(_name); | 88 tree = jungle.getTreeByName(_name); |
78 editor = tree.getTreeEditor(); | 89 editor = tree.getTreeEditor(); |
79 either = editor.addNewChildAt(root,0); | 90 either = editor.addNewChildAt(root,0); |
95 if(either.isA()){ | 106 if(either.isA()){ |
96 throw new IllegalStateException(); | 107 throw new IllegalStateException(); |
97 } | 108 } |
98 editor = either.b(); | 109 editor = either.b(); |
99 editor.success(); | 110 editor.success(); |
111 /* Put DataSegment */ | |
112 try { | |
113 putTreeOperationLog((NetworkDefaultJungleTreeEditor)result.b()); | |
114 } catch (IOException e1) { | |
115 e1.printStackTrace(); | |
116 } | |
117 | |
100 } | 118 } |
101 | 119 |
102 public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey) | 120 public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey) |
103 { | 121 { |
104 JungleTree tree = jungle.getTreeByName(_board); | 122 JungleTree tree = jungle.getTreeByName(_board); |
105 if(tree == null){ | 123 if(tree == null){ |
106 throw new IllegalStateException(); | 124 throw new IllegalStateException(); |
107 } | 125 } |
108 | 126 |
109 JungleTreeEditor editor; | 127 JungleTreeEditor editor; |
128 Either<Error, JungleTreeEditor> either; | |
110 do{ | 129 do{ |
111 Node node = tree.getRootNode(); | 130 Node node = tree.getRootNode(); |
112 int size = node.getChildren().size(); | 131 int size = node.getChildren().size(); |
113 DefaultNodePath path = new DefaultNodePath(); | 132 DefaultNodePath path = new DefaultNodePath(); |
114 | 133 |
115 editor = tree.getTreeEditor(); | 134 editor = tree.getTreeEditor(); |
116 Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path,size); | 135 either = editor.addNewChildAt(path,size); |
117 if(either.isA()){ | 136 if(either.isA()){ |
118 throw new IllegalStateException(); | 137 throw new IllegalStateException(); |
119 } | 138 } |
120 editor = either.b(); | 139 editor = either.b(); |
121 | 140 |
132 either = editor.edit(path,e); | 151 either = editor.edit(path,e); |
133 if(either.isA()){ | 152 if(either.isA()){ |
134 throw new IllegalStateException(); | 153 throw new IllegalStateException(); |
135 } | 154 } |
136 editor = either.b(); | 155 editor = either.b(); |
137 }while(editor.success().isA()); | 156 |
157 either = editor.success(); | |
158 /* Put DataSegment */ | |
159 try { | |
160 putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor); | |
161 } catch (IOException e1) { | |
162 e1.printStackTrace(); | |
163 } | |
164 }while(either.isA()); | |
138 } | 165 } |
139 | 166 |
140 public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey) | 167 public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey) |
141 { | 168 { |
142 JungleTreeEditor editor = null; | 169 JungleTreeEditor editor = null; |
170 Either<Error,JungleTreeEditor> either = null; | |
143 do{ | 171 do{ |
144 DefaultNodePath path = new DefaultNodePath(); | 172 DefaultNodePath path = new DefaultNodePath(); |
145 path = path.add(Integer.parseInt(_uuid)); | 173 path = path.add(Integer.parseInt(_uuid)); |
146 | 174 |
147 JungleTree tree = jungle.getTreeByName(_board); | 175 JungleTree tree = jungle.getTreeByName(_board); |
153 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); | 181 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); |
154 return DefaultEither.newB(_e); | 182 return DefaultEither.newB(_e); |
155 } | 183 } |
156 }; | 184 }; |
157 | 185 |
158 Either<Error,JungleTreeEditor> either = editor.edit(path,e); | 186 either = editor.edit(path,e); |
159 if(either.isA()){ | 187 if(either.isA()){ |
160 throw new IllegalStateException(); | 188 throw new IllegalStateException(); |
161 } | 189 } |
162 editor = either.b(); | 190 editor = either.b(); |
163 }while(editor.success().isA()); | 191 either = editor.success(); |
192 /* Put DataSegment */ | |
193 try { | |
194 putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor); | |
195 } catch (IOException e1) { | |
196 e1.printStackTrace(); | |
197 } | |
198 }while(either.isA()); | |
164 } | 199 } |
165 | 200 |
166 public Iterable<BoardMessage> getMessages(String _boardName) | 201 public Iterable<BoardMessage> getMessages(String _boardName) |
167 { | 202 { |
168 JungleTree tree = jungle.getTreeByName(_boardName); | 203 JungleTree tree = jungle.getTreeByName(_boardName); |
181 }; | 216 }; |
182 | 217 |
183 return new IterableConverter<BoardMessage,Node>(chs,converter); | 218 return new IterableConverter<BoardMessage,Node>(chs,converter); |
184 } | 219 } |
185 | 220 |
221 private void putTreeOperationLog(NetworkDefaultJungleTreeEditor editor) throws IOException { | |
222 String uuid = editor.getID(); | |
223 String treeName = editor.getTreeName(); | |
224 String serverName = editor.getServerName(); | |
225 long revision = Long.parseLong(editor.getRevision()); | |
226 Iterable<TreeOperation> log = editor.getTreeOperationLog(); | |
227 putDataSegment(uuid, treeName, serverName, log, revision); | |
228 } | |
229 | |
230 private void putDataSegment(String _uuid, String _treeName, String _serverName, Iterable<TreeOperation> _log, long nextRevision) throws IOException { | |
231 DefaultTreeOperationLogContainer container = new DefaultTreeOperationLogContainer(); | |
232 container.setTreeName(_treeName); | |
233 container.setUUID(_uuid); | |
234 container.setServerName(_serverName); | |
235 container.setRevision(nextRevision); | |
236 container.unconvert(_log); | |
237 NullCodeSegmentForUpdate cs = new NullCodeSegmentForUpdate(); | |
238 cs.ods.put("local", "log", container); | |
239 } | |
240 | |
241 | |
186 private static class BoardMessageImpl implements BoardMessage | 242 private static class BoardMessageImpl implements BoardMessage |
187 { | 243 { |
188 private final String author; | 244 private final String author; |
189 private final String message; | 245 private final String message; |
190 private final String uuid; | 246 private final String uuid; |