Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Datacage.java @ 991:c675b4a87201
Store outs of artifacts into datacage db at initial scan.
flys-artifacts/trunk@2423 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 29 Jul 2011 11:24:41 +0000 |
parents | e573c4715d81 |
children | 5b467bc27eda |
comparison
equal
deleted
inserted
replaced
990:e573c4715d81 | 991:c675b4a87201 |
---|---|
1 package de.intevation.flys.artifacts.datacage; | 1 package de.intevation.flys.artifacts.datacage; |
2 | 2 |
3 import java.util.Collection; | 3 import java.util.Collection; |
4 import java.util.List; | |
4 | 5 |
5 import java.sql.SQLException; | 6 import java.sql.SQLException; |
7 import java.sql.PreparedStatement; | |
6 import java.sql.Types; | 8 import java.sql.Types; |
7 | 9 |
8 import de.intevation.artifacts.GlobalContext; | 10 import de.intevation.artifacts.GlobalContext; |
9 | 11 |
10 import de.intevation.artifactdatabase.db.SQL; | 12 import de.intevation.artifactdatabase.db.SQL; |
11 import de.intevation.artifactdatabase.db.SQLExecutor; | 13 import de.intevation.artifactdatabase.db.SQLExecutor; |
12 | 14 |
13 import de.intevation.artifactdatabase.LifetimeListener; | 15 import de.intevation.artifactdatabase.LifetimeListener; |
14 | 16 |
15 import de.intevation.artifactdatabase.data.StateData; | 17 import de.intevation.artifactdatabase.data.StateData; |
18 | |
19 import de.intevation.artifactdatabase.state.Output; | |
16 | 20 |
17 import de.intevation.artifacts.Artifact; | 21 import de.intevation.artifacts.Artifact; |
18 import de.intevation.artifacts.ArtifactDatabase; | 22 import de.intevation.artifacts.ArtifactDatabase; |
19 import de.intevation.artifacts.ArtifactDatabaseException; | 23 import de.intevation.artifacts.ArtifactDatabaseException; |
20 | 24 |
45 private String SQL_COLLECTION_ITEM_ID_NEXTVAL = | 49 private String SQL_COLLECTION_ITEM_ID_NEXTVAL = |
46 "collection.item.id.nextval"; | 50 "collection.item.id.nextval"; |
47 private String SQL_INSERT_COLLECTION_ITEM = "insert.collection.item"; | 51 private String SQL_INSERT_COLLECTION_ITEM = "insert.collection.item"; |
48 private String SQL_ARTIFACT_ID_NEXTVAL = "artifact.id.nextval"; | 52 private String SQL_ARTIFACT_ID_NEXTVAL = "artifact.id.nextval"; |
49 private String SQL_INSERT_ARTIFACT = "insert.artifact"; | 53 private String SQL_INSERT_ARTIFACT = "insert.artifact"; |
50 private String SQL_ARTIFACT_DATA_ID_NEXT_VAL = "artifact.data.id.nextval"; | 54 private String SQL_ARTIFACT_DATA_ID_NEXTVAL = "artifact.data.id.nextval"; |
51 private String SQL_INSERT_ARTIFACT_DATA = "insert.artifact.data"; | 55 private String SQL_INSERT_ARTIFACT_DATA = "insert.artifact.data"; |
56 private String SQL_OUT_ID_NEXTVALUE = "out.id.nextval"; | |
57 private String SQL_INSERT_OUT = "insert.out"; | |
52 | 58 |
53 | 59 |
54 protected SQLExecutor sqlExecutor; | 60 protected SQLExecutor sqlExecutor; |
55 | 61 |
56 public class InitialScan | 62 public class InitialScan |
58 { | 64 { |
59 protected LRUCache<String, Integer> users; | 65 protected LRUCache<String, Integer> users; |
60 protected LRUCache<String, Integer> collections; | 66 protected LRUCache<String, Integer> collections; |
61 protected LRUCache<String, Integer> artifacts; | 67 protected LRUCache<String, Integer> artifacts; |
62 | 68 |
69 protected GlobalContext context; | |
70 | |
63 public InitialScan() { | 71 public InitialScan() { |
64 users = new LRUCache<String, Integer>(); | 72 users = new LRUCache<String, Integer>(); |
65 collections = new LRUCache<String, Integer>(); | 73 collections = new LRUCache<String, Integer>(); |
66 artifacts = new LRUCache<String, Integer>(); | 74 artifacts = new LRUCache<String, Integer>(); |
75 } | |
76 | |
77 public InitialScan(GlobalContext context) { | |
78 this(); | |
79 this.context = context; | |
67 } | 80 } |
68 | 81 |
69 @Override | 82 @Override |
70 public void artifactLoaded( | 83 public void artifactLoaded( |
71 String userId, | 84 String userId, |
166 | 179 |
167 storeCollectionItem(collectionId, aId); | 180 storeCollectionItem(collectionId, aId); |
168 | 181 |
169 storeData(aId, artifact); | 182 storeData(aId, artifact); |
170 | 183 |
171 // store data, outs and facets | 184 storeOuts(aId, artifact); |
172 // TODO: Implement me! | 185 } |
186 | |
187 protected void storeOuts( | |
188 final int artifactId, | |
189 final FLYSArtifact artifact | |
190 ) { | |
191 final List<Output> outs = artifact.getCurrentOutputs(context); | |
192 | |
193 if (outs.isEmpty()) { | |
194 return; | |
195 } | |
196 | |
197 final int [] ids = new int[outs.size()]; | |
198 | |
199 //final Map<Integer, List<Facet>> facets = | |
200 //new TreeMap<Integer, List<Facet>>(); | |
201 | |
202 SQLExecutor.Instance exec = sqlExecutor.new Instance() { | |
203 @Override | |
204 public boolean doIt() throws SQLException { | |
205 prepareStatement(SQL_OUT_ID_NEXTVALUE); | |
206 for (int i = 0; i < ids.length; ++i) { | |
207 result = stmnt.executeQuery(); | |
208 if (!result.next()) { | |
209 log.error("generation of out ids failed"); | |
210 return false; | |
211 } | |
212 ids[i] = result.getInt(1); | |
213 result.close(); result = null; | |
214 } | |
215 reset(); | |
216 prepareStatement(SQL_INSERT_OUT); | |
217 for (int i = 0; i < ids.length; ++i) { | |
218 Output out = outs.get(i); | |
219 stmnt.setInt(1, ids[i]); | |
220 stmnt.setInt(2, artifactId); | |
221 stmnt.setString(3, out.getName()); | |
222 setString(stmnt, 4, out.getDescription()); | |
223 setString(stmnt, 5, out.getType()); | |
224 stmnt.execute(); | |
225 } | |
226 conn.commit(); | |
227 return true; | |
228 } | |
229 }; | |
230 | |
231 if (!exec.runWrite()) { | |
232 log.error("storing artifact outs/facets failed"); | |
233 } | |
234 | |
235 // TODO: Store facets | |
173 } | 236 } |
174 | 237 |
175 protected void storeData( | 238 protected void storeData( |
176 final int artifactId, | 239 final int artifactId, |
177 FLYSArtifact artifact | 240 FLYSArtifact artifact |
184 | 247 |
185 SQLExecutor.Instance exec = sqlExecutor.new Instance() { | 248 SQLExecutor.Instance exec = sqlExecutor.new Instance() { |
186 @Override | 249 @Override |
187 public boolean doIt() throws SQLException { | 250 public boolean doIt() throws SQLException { |
188 int [] ids = new int[data.size()]; | 251 int [] ids = new int[data.size()]; |
189 prepareStatement(SQL_ARTIFACT_DATA_ID_NEXT_VAL); | 252 prepareStatement(SQL_ARTIFACT_DATA_ID_NEXTVAL); |
190 | 253 |
191 for (int i = 0; i < ids.length; ++i) { | 254 for (int i = 0; i < ids.length; ++i) { |
192 result = stmnt.executeQuery(); | 255 result = stmnt.executeQuery(); |
193 if (!result.next()) { | 256 if (!result.next()) { |
194 log.error("generating id for artifact data failed"); | 257 log.error("generating id for artifact data failed"); |
205 int id = ids[i++]; | 268 int id = ids[i++]; |
206 stmnt.setInt(1, id); | 269 stmnt.setInt(1, id); |
207 stmnt.setInt(2, artifactId); | 270 stmnt.setInt(2, artifactId); |
208 stmnt.setString(3, sd.getType()); | 271 stmnt.setString(3, sd.getType()); |
209 stmnt.setString(4, sd.getName()); | 272 stmnt.setString(4, sd.getName()); |
210 Object value = sd.getValue(); | 273 setString(stmnt, 5, sd); |
211 if (value == null) { | |
212 stmnt.setNull(5, Types.VARCHAR); | |
213 } | |
214 else { | |
215 stmnt.setString(5, value.toString()); | |
216 } | |
217 stmnt.execute(); | 274 stmnt.execute(); |
218 } | 275 } |
219 | 276 |
220 conn.commit(); | 277 conn.commit(); |
221 return true; | 278 return true; |
372 sql.get(SQL_COLLECTION_ITEM_ID_NEXTVAL); | 429 sql.get(SQL_COLLECTION_ITEM_ID_NEXTVAL); |
373 SQL_INSERT_COLLECTION_ITEM = | 430 SQL_INSERT_COLLECTION_ITEM = |
374 sql.get(SQL_INSERT_COLLECTION_ITEM); | 431 sql.get(SQL_INSERT_COLLECTION_ITEM); |
375 SQL_ARTIFACT_ID_NEXTVAL = sql.get(SQL_ARTIFACT_ID_NEXTVAL); | 432 SQL_ARTIFACT_ID_NEXTVAL = sql.get(SQL_ARTIFACT_ID_NEXTVAL); |
376 SQL_INSERT_ARTIFACT = sql.get(SQL_INSERT_ARTIFACT); | 433 SQL_INSERT_ARTIFACT = sql.get(SQL_INSERT_ARTIFACT); |
377 SQL_ARTIFACT_DATA_ID_NEXT_VAL = sql.get(SQL_ARTIFACT_DATA_ID_NEXT_VAL); | 434 SQL_ARTIFACT_DATA_ID_NEXTVAL = sql.get(SQL_ARTIFACT_DATA_ID_NEXTVAL); |
378 SQL_INSERT_ARTIFACT_DATA = sql.get(SQL_INSERT_ARTIFACT_DATA); | 435 SQL_INSERT_ARTIFACT_DATA = sql.get(SQL_INSERT_ARTIFACT_DATA); |
436 SQL_OUT_ID_NEXTVALUE = sql.get(SQL_OUT_ID_NEXTVALUE); | |
437 SQL_INSERT_OUT = sql.get(SQL_INSERT_OUT); | |
438 } | |
439 | |
440 private static void setString( | |
441 PreparedStatement stmnt, | |
442 int index, | |
443 Object value | |
444 ) | |
445 throws SQLException | |
446 { | |
447 if (value == null) { | |
448 stmnt.setNull(index, Types.VARCHAR); | |
449 } | |
450 else { | |
451 stmnt.setString(index, value.toString()); | |
452 } | |
379 } | 453 } |
380 | 454 |
381 @Override | 455 @Override |
382 public void systemUp(GlobalContext context) { | 456 public void systemUp(GlobalContext context) { |
383 log.debug("systemUp"); | 457 log.debug("systemUp"); |
399 if (!cleanDatabase()) { | 473 if (!cleanDatabase()) { |
400 log.error("cleaning database failed"); | 474 log.error("cleaning database failed"); |
401 return; | 475 return; |
402 } | 476 } |
403 | 477 |
404 InitialScan is = new InitialScan(); | 478 InitialScan is = new InitialScan(context); |
405 | 479 |
406 if (!is.scan(adb)) { | 480 if (!is.scan(adb)) { |
407 log.error("initial scan failed"); | 481 log.error("initial scan failed"); |
408 return; | 482 return; |
409 } | 483 } |