diff flys-backend/src/main/java/de/intevation/flys/importer/ImportSQRelation.java @ 3329:cc8fc6b29649

Store sq relations into database after parsing. flys-backend/trunk@4647 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 13 Jun 2012 08:12:00 +0000
parents a41f279a66e2
children 0d27d02b1208
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportSQRelation.java	Wed Jun 13 06:22:04 2012 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportSQRelation.java	Wed Jun 13 08:12:00 2012 +0000
@@ -6,10 +6,13 @@
 
 import org.apache.log4j.Logger;
 
+import org.hibernate.Query;
+import org.hibernate.Session;
 import org.hibernate.exception.ConstraintViolationException;
 
 import de.intevation.flys.model.River;
 import de.intevation.flys.model.SQRelation;
+import de.intevation.flys.model.TimeInterval;
 
 
 public class ImportSQRelation {
@@ -19,6 +22,8 @@
 
     private ImportTimeInterval timeInterval;
 
+    private String description;
+
     private List<ImportSQRelationValue> values;
 
     private SQRelation peer;
@@ -33,21 +38,76 @@
     throws SQLException, ConstraintViolationException
     {
         log.info("store dependencies");
-        log.warn("TODO: IMPLEMENT 'storeDependencies()'");
+
+        SQRelation peer = getPeer(river);
+
+        timeInterval.getPeer();
+
+        int count = 0;
+
+        for (ImportSQRelationValue value: values) {
+            try {
+                value.storeDependencies(peer);
+                count++;
+            }
+            catch (SQLException sqle) {
+                log.warn("Unable to store sq relation value.", sqle);
+            }
+            catch (ConstraintViolationException cve) {
+                log.warn("Unable to store sq relation value.", cve);
+            }
+        }
+
+        log.info("stored " + count + " sq relation values.");
     }
 
 
-    public SQRelation getPeer() {
+    public SQRelation getPeer(River river) {
         log.debug("getPeer()");
 
         if (peer == null) {
-            // TODO
+            TimeInterval timeInter = timeInterval.getPeer();
+
+            if (timeInter == null) {
+                log.warn("Cannot determine sq relation without time interval");
+                return null;
+            }
+
+            Session session = ImporterSession.getInstance().getDatabaseSession();
+
+            Query query = session.createQuery(
+                "FROM SQRelation WHERE river=:river AND timeInterval=:timeInter"
+            );
+
+            query.setParameter("river", river);
+            query.setParameter("timeInter", timeInter);
+
+            List<SQRelation> sq = query.list();
+
+            if (sq.isEmpty()) {
+                log.info("create new SQ relation '" + description + "'");
+
+                peer = new SQRelation(
+                    river,
+                    timeInter,
+                    description
+                );
+                session.save(peer);
+            }
+            else {
+                peer = sq.get(0);
+            }
         }
 
         return peer;
     }
 
 
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+
     public void setTimeInterval(ImportTimeInterval timeInterval) {
         this.timeInterval = timeInterval;
     }

http://dive4elements.wald.intevation.org