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;