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 }

http://dive4elements.wald.intevation.org