ingo@2806: package de.intevation.flys.importer; ingo@2806: ingo@2810: import java.util.ArrayList; ingo@2810: import java.util.List; ingo@2810: ingo@2810: import java.sql.SQLException; ingo@2810: ingo@2806: import org.apache.log4j.Logger; ingo@2806: ingo@2810: import org.hibernate.Session; ingo@2810: import org.hibernate.Query; ingo@2810: import org.hibernate.exception.ConstraintViolationException; ingo@2810: ingo@2810: import de.intevation.flys.model.BedHeightEpoch; ingo@2810: import de.intevation.flys.model.ElevationModel; ingo@2810: import de.intevation.flys.model.Range; ingo@2806: import de.intevation.flys.model.River; ingo@2810: import de.intevation.flys.model.TimeInterval; ingo@2806: ingo@2806: ingo@2811: public class ImportBedHeightEpoch implements ImportBedHeight ingo@2806: { ingo@2806: private static Logger log = Logger.getLogger(ImportBedHeightEpoch.class); ingo@2806: ingo@2810: protected String evaluationBy; ingo@2806: protected String description; ingo@2806: ingo@2810: protected ImportTimeInterval timeInterval; ingo@2810: protected ImportRange range; ingo@2810: protected ImportElevationModel curElevationModel; ingo@2810: protected ImportElevationModel oldElevationModel; ingo@2810: ingo@2810: protected List values; ingo@2810: ingo@2810: protected BedHeightEpoch peer; ingo@2810: ingo@2806: ingo@2806: public ImportBedHeightEpoch(String description) { ingo@2806: this.description = description; ingo@2810: this.values = new ArrayList(); ingo@2806: } ingo@2806: ingo@2806: ingo@2806: public String getDescription() { ingo@2806: return description; ingo@2806: } ingo@2806: ingo@2806: ingo@2811: public int getValueCount() { ingo@2811: return values.size(); ingo@2811: } ingo@2811: ingo@2811: public void setTimeInterval(ImportTimeInterval timeInterval) { ingo@2811: this.timeInterval = timeInterval; ingo@2810: } ingo@2810: ingo@2810: ingo@2810: public void setEvaluationBy(String evaluationBy) { ingo@2810: this.evaluationBy = evaluationBy; ingo@2810: } ingo@2810: ingo@2810: public void setDescription(String description) { ingo@2810: this.description = description; ingo@2810: } ingo@2810: ingo@2810: public void setRange(ImportRange range) { ingo@2810: this.range = range; ingo@2810: } ingo@2810: ingo@2810: public void setCurElevationModel(ImportElevationModel curElevationModel) { ingo@2810: this.curElevationModel = curElevationModel; ingo@2810: } ingo@2810: ingo@2810: public void setOldElevationModel(ImportElevationModel oldElevationModel) { ingo@2810: this.oldElevationModel = oldElevationModel; ingo@2810: } ingo@2810: ingo@2811: public void setYear(int year) { ingo@2811: // do nothing ingo@2811: } ingo@2811: ingo@2811: public void setSoundingWidth(int soundingWidth) { ingo@2811: // do nothing ingo@2811: } ingo@2811: ingo@2811: public void setLocationSystem(ImportLocationSystem locationSystem) { ingo@2811: // do nothing ingo@2811: } ingo@2811: ingo@2811: public void setType(ImportBedHeightType type) { ingo@2811: // do nothing ingo@2811: } ingo@2811: ingo@2811: @Override ingo@2811: public void addValue(ImportBedHeightValue value) { ingo@2811: values.add((ImportBedHeightEpochValue) value); ingo@2810: } ingo@2810: ingo@2810: ingo@2811: @Override ingo@2810: public void storeDependencies(River river) ingo@2810: throws SQLException, ConstraintViolationException ingo@2810: { ingo@2806: log.info("Store dependencies for epoch: '" + getDescription() + "'"); ingo@2810: ingo@2810: if (curElevationModel != null) { ingo@2810: curElevationModel.storeDependencies(); ingo@2810: } ingo@2810: ingo@2810: if (oldElevationModel != null) { ingo@2810: oldElevationModel.storeDependencies(); ingo@2810: } ingo@2810: ingo@2810: BedHeightEpoch peer = getPeer(river); ingo@2810: ingo@2810: log.debug("store values now..."); ingo@2810: ingo@2810: for (ImportBedHeightEpochValue value: values) { ingo@2810: value.storeDependencies(peer); ingo@2810: } ingo@2811: ingo@2811: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@2811: session.flush(); ingo@2810: } ingo@2810: ingo@2810: ingo@2811: @Override ingo@2810: public BedHeightEpoch getPeer(River river) { ingo@2810: if (peer == null) { ingo@2810: ElevationModel theCurModel = curElevationModel != null ingo@2810: ? curElevationModel.getPeer() ingo@2810: : null; ingo@2810: ingo@2811: if (theCurModel == null) { ingo@2811: log.warn("Skip file - invalid current elevation model."); ingo@2811: return null; ingo@2811: } ingo@2811: ingo@2810: TimeInterval theTime = timeInterval != null ingo@2810: ? timeInterval.getPeer() ingo@2810: : null; ingo@2810: ingo@2811: if (theTime == null) { ingo@2811: log.warn("Skip file - invalid time range."); ingo@2811: return null; ingo@2811: } ingo@2811: ingo@2810: Range theRange = range != null ? range.getPeer(river) : null; ingo@2810: ingo@2811: if (theRange == null) { ingo@2811: log.warn("Skip file - invalid km range."); ingo@2810: return null; ingo@2810: } ingo@2810: ingo@2810: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@2810: ingo@2810: Query query = session.createQuery( ingo@2810: "from BedHeightEpoch where " + ingo@2810: " river=:river and " + ingo@2810: " timeInterval=:timeInterval and " + ingo@2810: " curElevationModel=:curElevationModel and " + ingo@2810: " range=:range and " + ingo@2811: " evaluationBy=:evaluationBy and " + ingo@2810: " description=:description"); ingo@2810: ingo@2810: query.setParameter("river", river); ingo@2810: query.setParameter("timeInterval", theTime); ingo@2810: query.setParameter("curElevationModel", theCurModel); ingo@2810: query.setParameter("range", theRange); ingo@2810: query.setParameter("evaluationBy", evaluationBy); ingo@2810: query.setParameter("description", description); ingo@2810: ingo@2810: List bedHeights = query.list(); ingo@2810: ingo@2810: if (bedHeights.isEmpty()) { ingo@2810: log.info("Create new BedHeightEpoch DB instance."); ingo@2810: ingo@2810: peer = new BedHeightEpoch( ingo@2810: river, ingo@2810: theTime, ingo@2810: theRange, ingo@2810: theCurModel, ingo@2810: oldElevationModel != null ? oldElevationModel.getPeer() : null, ingo@2810: evaluationBy, ingo@2810: description ingo@2810: ); ingo@2811: ingo@2811: session.save(peer); ingo@2810: } ingo@2810: else { ingo@2810: peer = bedHeights.get(0); ingo@2810: } ingo@2810: } ingo@2810: ingo@2810: return peer; ingo@2806: } ingo@2806: } ingo@2806: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :