Mercurial > dive4elements > river
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 |