annotate src/main/java/app/bbs/PersistentJungleBulletinBoard.java @ 130:652a6dff6288

Fixed
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Sat, 11 Jan 2014 09:10:02 +0900
parents 6104702a1880
children a6fa10e42601
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
124
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
1 package app.bbs;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
2
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
3 import java.io.File;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
4 import java.io.FileNotFoundException;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
5 import java.io.IOException;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
6 import java.nio.ByteBuffer;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
7 import java.util.Date;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
8 import java.util.concurrent.atomic.AtomicInteger;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
9
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
125
6104702a1880 Added dependency bulletinboard in pom.xml
one
parents: 124
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
124
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
23 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
24 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
25 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
26 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
27 import alice.jungle.core.NetworkDefaultJungle;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
28 import alice.jungle.persistent.PersistentJournal;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
29 import alice.jungle.transaction.JungleUpdater;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
30
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
31 public class PersistentJungleBulletinBoard implements NetworkBulletinBoard
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
32 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
33 private final Jungle jungle;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
34 private final PersistentJournal journal;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
35 private final String LOG_DIR = "./log";
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
36
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
37 public PersistentJungleBulletinBoard(String _uuid) throws FileNotFoundException
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
38 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
39 journal = new PersistentJournal();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
40 jungle = new NetworkDefaultJungle(journal, _uuid,new DefaultTreeEditor(new DefaultTraverser()));
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
41 BullentInBoardJungleManager.setJungle(jungle);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
42 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
43
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
44 public void init() {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
45 checkAndCreateLogDirectory();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
46 try {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
47 commitLogRecover();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
48 } catch (IOException e) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
49 e.printStackTrace();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
50 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
51 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
52
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
53 public void checkAndCreateLogDirectory() {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
54 File logFile = new File(LOG_DIR);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
55 if(!logFile.exists()) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
56 logFile.mkdir();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
57 return;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
58 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
59 if (logFile.isFile()) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
60 logFile.delete();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
61 logFile.mkdir();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
62 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
63 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
64
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
65 public void commitLogRecover() throws IOException {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
66 File[] logFiles = new File(LOG_DIR).listFiles();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
67 for(File logFile : logFiles) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
68 commitLogRecover(logFile);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
69 logFile.delete();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
70 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
71 if(jungle.getTreeByName("boards") == null) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
72 jungle.createNewTree("boards");
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
73 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
74 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
75
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
76 private void commitLogRecover(File logFile) throws IOException {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
77 journal.setInputFile(logFile);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
78 ChangeListReader reader = journal.getReader();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
79 if (reader == null) return;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
80 for (ChangeList chList : reader) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
81 String treeName = chList.getTreeName();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
82 JungleTree tree = jungle.getTreeByName(treeName);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
83 if(tree == null) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
84 tree = jungle.createNewTree(treeName);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
85 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
86 JungleTreeEditor editor = tree.getLocalTreeEditor();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
87 Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, chList);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
88 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
89 if(either.isA()) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
90 throw new IOException("Failed commit log recovery");
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
91 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
92 editor.success();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
93 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
94 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
95
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
96 public Iterable<String> getBoards()
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
97 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
98 JungleTree tree = jungle.getTreeByName("boards");
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
99 Node node = tree.getRootNode();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
100 Children<Node> chs = node.getChildren();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
101
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
102 IterableConverter.Converter<String,Node> converter = new IterableConverter.Converter<String,Node>(){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
103 public String conv(Node _b) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
104 ByteBuffer e = _b.getAttributes().get("name");
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
105 return new String(e.array());
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
106 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
107 };
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
108
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
109 return new IterableConverter<String,Node>(chs,converter);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
110 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
111
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
112 public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
113 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
114 if(null == jungle.createNewTree(_name)){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
115 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
116 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
117
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
118 JungleTree tree = jungle.getTreeByName("boards");
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
119 JungleTreeEditor editor = tree.getTreeEditor();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
120 DefaultNodePath root = new DefaultNodePath();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
121 Either<Error,JungleTreeEditor> either = editor.addNewChildAt(root,0);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
122 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
123 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
124 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
125 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
126
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
127 either = editor.putAttribute(root.add(0),"name",ByteBuffer.wrap(_name.getBytes()));
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
128 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
129 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
130 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
131 editor = either.b();
130
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
132 final long timestamp = new Date().getTime();
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
133 ByteBuffer tBuffer = ByteBuffer.allocate(16);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
134 either = editor.putAttribute(root.add(0),"timestamp", tBuffer.putLong(timestamp));
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
135 if(either.isA()){
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
136 throw new IllegalStateException();
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
137 }
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
138 editor = either.b();
124
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
139 Either<Error,JungleTreeEditor> result = editor.success();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
140 if(result.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
141 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
142 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
143
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
144
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
145 tree = jungle.getTreeByName(_name);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
146 editor = tree.getTreeEditor();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
147 either = editor.addNewChildAt(root,0);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
148 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
149 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
150 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
151 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
152
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
153 NodeEditor e = new NodeEditor(){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
154 public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
155 _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
156 _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
157 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
130
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
158 ByteBuffer tBuffer2 = ByteBuffer.allocate(16);
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 125
diff changeset
159 _e = _e.getAttributes().put("timestamp",tBuffer2.putLong(timestamp)).b();
124
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
160 return DefaultEither.newB(_e);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
161 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
162 };
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
163
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
164 either = editor.edit(root.add(0),e);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
165 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
166 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
167 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
168 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
169 editor.success();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
170 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
171
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
172 public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
173 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
174 JungleTree tree = jungle.getTreeByName(_board);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
175 if(tree == null){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
176 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
177 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
178
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
179 Either<Error, JungleTreeEditor> either;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
180 do{
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
181 Node node = tree.getRootNode();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
182 int size = node.getChildren().size();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
183 DefaultNodePath path = new DefaultNodePath();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
184
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
185 JungleTreeEditor editor = tree.getTreeEditor();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
186 either = editor.addNewChildAt(path,size);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
187 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
188 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
189 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
190 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
191 final long timestamp = new Date().getTime();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
192 NodeEditor e = new NodeEditor(){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
193 public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
194 _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
195 _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
196 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
197 ByteBuffer tBuffer = ByteBuffer.allocate(16);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
198 _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
199 return DefaultEither.newB(_e);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
200 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
201 };
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
202 path = path.add(size);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
203 either = editor.edit(path,e);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
204 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
205 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
206 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
207 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
208 either = editor.success();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
209
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
210 }while(either.isA());
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
211 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
212
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
213 public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
214 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
215 for(;;) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
216 DefaultNodePath path = new DefaultNodePath();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
217 path = path.add(Integer.parseInt(_uuid));
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
218
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
219 JungleTree tree = jungle.getTreeByName(_board);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
220 JungleTreeEditor editor = tree.getTreeEditor();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
221 final long timestamp = new Date().getTime();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
222 NodeEditor e = new NodeEditor(){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
223 public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
224 _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
225 _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
226 _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
227 ByteBuffer tBuffer = ByteBuffer.allocate(16);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
228 _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
229 return DefaultEither.newB(_e);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
230 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
231 };
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
232
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
233 Either<Error, JungleTreeEditor> either = editor.edit(path,e);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
234 if(either.isA()){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
235 throw new IllegalStateException();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
236 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
237 editor = either.b();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
238 either = editor.success();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
239 if(!either.isA()) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
240 return;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
241 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
242 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
243
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
244 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
245
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
246 public Iterable<BoardMessage> getMessages(String _boardName)
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
247 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
248 JungleTree tree = jungle.getTreeByName(_boardName);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
249 Node node = tree.getRootNode();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
250 Children<Node> chs = node.getChildren();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
251
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
252 final AtomicInteger counter = new AtomicInteger(0);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
253 IterableConverter.Converter<BoardMessage,Node> converter = new IterableConverter.Converter<BoardMessage,Node>(){
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
254 public BoardMessage conv(Node _b) {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
255 String uuid = Integer.toString(counter.get());
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
256 String author = new String(_b.getAttributes().get("author").array());
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
257 String message = new String(_b.getAttributes().get("mes").array());
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
258 counter.incrementAndGet();
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
259 return new BoardMessageImpl(author,message,uuid);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
260 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
261 };
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
262 return new IterableConverter<BoardMessage,Node>(chs,converter);
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
263 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
264
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
265
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
266
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
267 private static class BoardMessageImpl implements BoardMessage
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
268 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
269 private final String author;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
270 private final String message;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
271 private final String uuid;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
272
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
273 public BoardMessageImpl(String _author,String _message,String _uuid)
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
274 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
275 author = _author;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
276 message = _message;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
277 uuid = _uuid;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
278 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
279
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
280 public String getAuthor()
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
281 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
282 return author;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
283 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
284
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
285 public String getMessage()
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
286 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
287 return message;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
288 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
289
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
290 public String getUUID()
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
291 {
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
292 return uuid;
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
293 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
294 }
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
295
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
296
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
297
dacfa7eba841 To select persistent mode "-persistent"
one
parents:
diff changeset
298 }