comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/datacage/Datacage.java @ 990:e573c4715d81

Add artifacts data into datacage db at initial scan. flys-artifacts/trunk@2422 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 29 Jul 2011 08:40:11 +0000
parents f3be883325ce
children c675b4a87201
comparison
equal deleted inserted replaced
989:f3be883325ce 990:e573c4715d81
1 package de.intevation.flys.artifacts.datacage; 1 package de.intevation.flys.artifacts.datacage;
2 2
3 import java.util.Collection;
4
3 import java.sql.SQLException; 5 import java.sql.SQLException;
6 import java.sql.Types;
4 7
5 import de.intevation.artifacts.GlobalContext; 8 import de.intevation.artifacts.GlobalContext;
6 9
7 import de.intevation.artifactdatabase.db.SQL; 10 import de.intevation.artifactdatabase.db.SQL;
8 import de.intevation.artifactdatabase.db.SQLExecutor; 11 import de.intevation.artifactdatabase.db.SQLExecutor;
9 12
10 import de.intevation.artifactdatabase.LifetimeListener; 13 import de.intevation.artifactdatabase.LifetimeListener;
14
15 import de.intevation.artifactdatabase.data.StateData;
11 16
12 import de.intevation.artifacts.Artifact; 17 import de.intevation.artifacts.Artifact;
13 import de.intevation.artifacts.ArtifactDatabase; 18 import de.intevation.artifacts.ArtifactDatabase;
14 import de.intevation.artifacts.ArtifactDatabaseException; 19 import de.intevation.artifacts.ArtifactDatabaseException;
15 20
40 private String SQL_COLLECTION_ITEM_ID_NEXTVAL = 45 private String SQL_COLLECTION_ITEM_ID_NEXTVAL =
41 "collection.item.id.nextval"; 46 "collection.item.id.nextval";
42 private String SQL_INSERT_COLLECTION_ITEM = "insert.collection.item"; 47 private String SQL_INSERT_COLLECTION_ITEM = "insert.collection.item";
43 private String SQL_ARTIFACT_ID_NEXTVAL = "artifact.id.nextval"; 48 private String SQL_ARTIFACT_ID_NEXTVAL = "artifact.id.nextval";
44 private String SQL_INSERT_ARTIFACT = "insert.artifact"; 49 private String SQL_INSERT_ARTIFACT = "insert.artifact";
50 private String SQL_ARTIFACT_DATA_ID_NEXT_VAL = "artifact.data.id.nextval";
51 private String SQL_INSERT_ARTIFACT_DATA = "insert.artifact.data";
45 52
46 53
47 protected SQLExecutor sqlExecutor; 54 protected SQLExecutor sqlExecutor;
48 55
49 public class InitialScan 56 public class InitialScan
143 prepareStatement(SQL_INSERT_ARTIFACT); 150 prepareStatement(SQL_INSERT_ARTIFACT);
144 stmnt.setInt (1, res[0]); 151 stmnt.setInt (1, res[0]);
145 stmnt.setString(2, artifactId); 152 stmnt.setString(2, artifactId);
146 stmnt.setString(3, artifact.getCurrentStateId()); 153 stmnt.setString(3, artifact.getCurrentStateId());
147 stmnt.execute(); 154 stmnt.execute();
155 conn.commit();
148 return true; 156 return true;
149 } 157 }
150 }; 158 };
151 159
152 if (!exec.runWrite()) { 160 if (!exec.runWrite()) {
156 164
157 artifacts.put(artifactId, aId = res[0]); 165 artifacts.put(artifactId, aId = res[0]);
158 166
159 storeCollectionItem(collectionId, aId); 167 storeCollectionItem(collectionId, aId);
160 168
169 storeData(aId, artifact);
170
161 // store data, outs and facets 171 // store data, outs and facets
162 // TODO: Implement me! 172 // TODO: Implement me!
173 }
174
175 protected void storeData(
176 final int artifactId,
177 FLYSArtifact artifact
178 ) {
179 final Collection<StateData> data = artifact.getAllData();
180
181 if (data.isEmpty()) {
182 return;
183 }
184
185 SQLExecutor.Instance exec = sqlExecutor.new Instance() {
186 @Override
187 public boolean doIt() throws SQLException {
188 int [] ids = new int[data.size()];
189 prepareStatement(SQL_ARTIFACT_DATA_ID_NEXT_VAL);
190
191 for (int i = 0; i < ids.length; ++i) {
192 result = stmnt.executeQuery();
193 if (!result.next()) {
194 log.error("generating id for artifact data failed");
195 return false;
196 }
197 ids[i] = result.getInt(1);
198 result.close(); result = null;
199 }
200 reset();
201 prepareStatement(SQL_INSERT_ARTIFACT_DATA);
202
203 int i = 0;
204 for (StateData sd: data) {
205 int id = ids[i++];
206 stmnt.setInt(1, id);
207 stmnt.setInt(2, artifactId);
208 stmnt.setString(3, sd.getType());
209 stmnt.setString(4, sd.getName());
210 Object value = sd.getValue();
211 if (value == null) {
212 stmnt.setNull(5, Types.VARCHAR);
213 }
214 else {
215 stmnt.setString(5, value.toString());
216 }
217 stmnt.execute();
218 }
219
220 conn.commit();
221 return true;
222 }
223 };
224
225 if (!exec.runWrite()) {
226 log.error("storing artifact data failed");
227 }
163 } 228 }
164 229
165 protected void storeCollectionItem( 230 protected void storeCollectionItem(
166 final Integer collectionId, 231 final Integer collectionId,
167 final Integer artifactId 232 final Integer artifactId
179 prepareStatement(SQL_INSERT_COLLECTION_ITEM); 244 prepareStatement(SQL_INSERT_COLLECTION_ITEM);
180 stmnt.setInt(1, ciId); 245 stmnt.setInt(1, ciId);
181 stmnt.setInt(2, collectionId); 246 stmnt.setInt(2, collectionId);
182 stmnt.setInt(3, artifactId); 247 stmnt.setInt(3, artifactId);
183 stmnt.execute(); 248 stmnt.execute();
249 conn.commit();
184 return true; 250 return true;
185 } 251 }
186 }; 252 };
187 253
188 if (!exec.runWrite()) { 254 if (!exec.runWrite()) {
217 stmnt.setInt (1, res[0]); 283 stmnt.setInt (1, res[0]);
218 stmnt.setString(2, collectionId); 284 stmnt.setString(2, collectionId);
219 stmnt.setInt (3, ownerId); 285 stmnt.setInt (3, ownerId);
220 stmnt.setString(4, collectionName); 286 stmnt.setString(4, collectionName);
221 stmnt.execute(); 287 stmnt.execute();
288 conn.commit();
222 return true; 289 return true;
223 } 290 }
224 }; 291 };
225 292
226 if (exec.runWrite()) { 293 if (exec.runWrite()) {
253 reset(); 320 reset();
254 prepareStatement(SQL_INSERT_USER); 321 prepareStatement(SQL_INSERT_USER);
255 stmnt.setInt (1, res[0]); 322 stmnt.setInt (1, res[0]);
256 stmnt.setString(2, userId); 323 stmnt.setString(2, userId);
257 stmnt.execute(); 324 stmnt.execute();
325 conn.commit();
258 return true; 326 return true;
259 } 327 }
260 }; 328 };
261 329
262 if (exec.runWrite()) { 330 if (exec.runWrite()) {
304 sql.get(SQL_COLLECTION_ITEM_ID_NEXTVAL); 372 sql.get(SQL_COLLECTION_ITEM_ID_NEXTVAL);
305 SQL_INSERT_COLLECTION_ITEM = 373 SQL_INSERT_COLLECTION_ITEM =
306 sql.get(SQL_INSERT_COLLECTION_ITEM); 374 sql.get(SQL_INSERT_COLLECTION_ITEM);
307 SQL_ARTIFACT_ID_NEXTVAL = sql.get(SQL_ARTIFACT_ID_NEXTVAL); 375 SQL_ARTIFACT_ID_NEXTVAL = sql.get(SQL_ARTIFACT_ID_NEXTVAL);
308 SQL_INSERT_ARTIFACT = sql.get(SQL_INSERT_ARTIFACT); 376 SQL_INSERT_ARTIFACT = sql.get(SQL_INSERT_ARTIFACT);
377 SQL_ARTIFACT_DATA_ID_NEXT_VAL = sql.get(SQL_ARTIFACT_DATA_ID_NEXT_VAL);
378 SQL_INSERT_ARTIFACT_DATA = sql.get(SQL_INSERT_ARTIFACT_DATA);
309 } 379 }
310 380
311 @Override 381 @Override
312 public void systemUp(GlobalContext context) { 382 public void systemUp(GlobalContext context) {
313 log.debug("systemUp"); 383 log.debug("systemUp");
345 return sqlExecutor.new Instance() { 415 return sqlExecutor.new Instance() {
346 @Override 416 @Override
347 public boolean doIt() throws SQLException { 417 public boolean doIt() throws SQLException {
348 prepareStatement(SQL_DELETE_ALL_USERS); 418 prepareStatement(SQL_DELETE_ALL_USERS);
349 stmnt.execute(); 419 stmnt.execute();
420 conn.commit();
350 return true; 421 return true;
351 } 422 }
352 }.runWrite(); 423 }.runWrite();
353 } 424 }
354 425

http://dive4elements.wald.intevation.org