Mercurial > dive4elements > river
diff flys-backend/src/main/java/de/intevation/flys/importer/ImportBedHeightSingle.java @ 2809:f283212966e8
Finished work on MINFO bed heights (single).
flys-backend/trunk@4221 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Thu, 12 Apr 2012 10:42:46 +0000 |
parents | b57c95094b68 |
children | 8926571e47fb |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportBedHeightSingle.java Wed Apr 11 13:12:52 2012 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportBedHeightSingle.java Thu Apr 12 10:42:46 2012 +0000 @@ -3,8 +3,18 @@ import java.util.ArrayList; import java.util.List; +import java.sql.SQLException; + import org.apache.log4j.Logger; +import org.hibernate.Session; +import org.hibernate.Query; +import org.hibernate.exception.ConstraintViolationException; + +import de.intevation.flys.model.BedHeightSingle; +import de.intevation.flys.model.BedHeightType; +import de.intevation.flys.model.ElevationModel; +import de.intevation.flys.model.Range; import de.intevation.flys.model.River; @@ -26,6 +36,8 @@ protected List<ImportBedHeightSingleValue> values; + protected BedHeightSingle peer; + public ImportBedHeightSingle(String description) { this.description = description; @@ -37,6 +49,10 @@ return description; } + public List<ImportBedHeightSingleValue> getValues() { + return values; + } + public void setYear(int year) { this.year = year; @@ -78,9 +94,86 @@ values.add(value); } - public void storeDependencies(River river) { + public void storeDependencies(River river) + throws SQLException, ConstraintViolationException + { log.info("Store dependencies for single: '" + getDescription() + "'"); - log.error("TODO: IMPLEMENT ME!"); + + if (type != null) { + type.storeDependencies(); + } + + if (locationSystem != null) { + locationSystem.storeDependencies(); + } + + if (curElevationModel != null) { + curElevationModel.storeDependencies(); + } + + if (oldElevationModel != null) { + oldElevationModel.storeDependencies(); + } + + BedHeightSingle peer = getPeer(river); + + for (ImportBedHeightSingleValue value: values) { + value.storeDependencies(peer); + } + } + + public BedHeightSingle getPeer(River river) { + if (peer == null) { + BedHeightType theType = type != null ? type.getPeer() : null; + ElevationModel theCurModel = curElevationModel.getPeer(); + Range theRange = range != null ? range.getPeer(river) : null; + + if (theType == null || theCurModel == null || theRange == null) { + log.warn("Skip invalid file '" + description + "'"); + return null; + } + + Session session = ImporterSession.getInstance().getDatabaseSession(); + + Query query = session.createQuery( + "from BedHeightSingle where " + + "river=:river and year=:year and soundingWidth=:soundingWidth " + + "and type=:type and locationSystem=:locationSystem and " + + "curElevationModel=:curElevationModel and range=:range"); + + query.setParameter("river", river); + query.setParameter("year", year); + query.setParameter("soundingWidth", soundingWidth); + query.setParameter("type", theType); + query.setParameter("locationSystem", locationSystem.getPeer()); + query.setParameter("curElevationModel", theCurModel); + query.setParameter("range", range.getPeer(river)); + + List<BedHeightSingle> bedHeights = query.list(); + if (bedHeights.isEmpty()) { + log.info("Create new BedHeightSingle DB instance."); + + peer = new BedHeightSingle( + river, + year, + soundingWidth, + theType, + locationSystem.getPeer(), + theCurModel, + oldElevationModel != null ? oldElevationModel.getPeer() : null, + range.getPeer(river), + evaluationBy, + description + ); + + session.save(peer); + } + else { + peer = bedHeights.get(0); + } + } + + return peer; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :