# HG changeset patch # User mschaefer # Date 1571033698 -7200 # Node ID 07f02019065ebefd09cb83f92d1606bd02dea983 # Parent 02ca823ec9c6400b66dbe45204713f404357190d Nachtrag Pos. 20: infrastructure query added, calculation updated for extended access class diff -r 02ca823ec9c6 -r 07f02019065e artifacts/doc/conf/meta-data.xml --- a/artifacts/doc/conf/meta-data.xml Fri Oct 11 18:30:36 2019 +0200 +++ b/artifacts/doc/conf/meta-data.xml Mon Oct 14 08:14:58 2019 +0200 @@ -1418,23 +1418,84 @@ - - SELECT * - FROM infrastructure - WHERE river_id = ${river_id} - - - - - - - - - - + + + + + + + + + + + + + + + + + + + SELECT s.id, MIN(s.filename) AS filename, MIN(s.group_id) AS group_id, MIN(g.name) AS group_label, + MIN(s.annotation_type_id) AS type_id, MIN(t.name) AS type_label + FROM (((infrastructure AS s INNER JOIN infrastructure_values AS v ON v.infrastructure_id = s.id) + INNER JOIN annotation_types AS g ON s.group_id = g.id) + INNER JOIN annotation_types AS t ON s.annotation_type_id = t.id) + INNER JOIN attributes AS rs ON v.attribute_id = rs.id + WHERE (s.river_id = ${river_id}) + AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001) + AND (lower(rs.value) = 'links') + GROUP BY s.id + ORDER BY MIN(g.name), MIN(t.name) + + + + + + SELECT s.id, MIN(s.filename) AS filename, MIN(s.group_id) AS group_id, MIN(g.name) AS group_label, + MIN(s.annotation_type_id) AS type_id, MIN(t.name) AS type_label + FROM (((infrastructure AS s INNER JOIN infrastructure_values AS v ON v.infrastructure_id = s.id) + INNER JOIN annotation_types AS g ON s.group_id = g.id) + INNER JOIN annotation_types AS t ON s.annotation_type_id = t.id) + INNER JOIN attributes AS rs ON v.attribute_id = rs.id + WHERE (s.river_id = ${river_id}) + AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001) + AND (lower(rs.value) = 'rechts') + GROUP BY s.id + ORDER BY MIN(g.name), MIN(t.name) + + + + + + SELECT s.id, MIN(s.filename) AS filename, MIN(s.group_id) AS group_id, MIN(g.name) AS group_label, + MIN(s.annotation_type_id) AS type_id, MIN(t.name) AS type_label + FROM (((infrastructure AS s INNER JOIN infrastructure_values AS v ON v.infrastructure_id = s.id) + INNER JOIN annotation_types AS g ON s.group_id = g.id) + INNER JOIN annotation_types AS t ON s.annotation_type_id = t.id) + INNER JOIN attributes AS rs ON v.attribute_id = rs.id + WHERE (s.river_id = ${river_id}) + AND (v.station BETWEEN ${fromkm}-0.0001 AND ${tokm}+0.0001) + GROUP BY s.id + ORDER BY MIN(g.name), MIN(t.name) + + diff -r 02ca823ec9c6 -r 07f02019065e artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java Fri Oct 11 18:30:36 2019 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java Mon Oct 14 08:14:58 2019 +0200 @@ -10,7 +10,6 @@ package org.dive4elements.river.artifacts.sinfo.flood_duration; import java.util.List; -import java.util.Set; import org.apache.commons.lang.math.DoubleRange; import org.dive4elements.artifacts.CallContext; @@ -26,7 +25,6 @@ import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; import org.dive4elements.river.model.River; -import org.dive4elements.river.model.sinfo.Infrastructure; /** * Calculation of the flood durations of the infrastructures of the km range of a river @@ -78,14 +76,13 @@ final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, riverInfoProvider); - // FIXME: fetch from access (fetchInfrastructureTypes only for test purposes) - final List infrastructureChoicesnew = access.getInfrastructureChoices(); - // int groupID =; - // int annottionTypeId =; + final List infrastructureChoices = access.getInfrastructureChoices(); - // Deprecated denke ich. - final Set infrastructureChoices = Infrastructure.fetchInfrastructureTypes(riverInfoProvider.getRiver(), calcRange.getMinimumDouble(), - calcRange.getMaximumDouble(), access.getRiverside().getAttributeKey()); + /* + * zum testen: + * final Set infrastructureChoicesTest = Infrastructure.fetchInfrastructureTypes(riverInfoProvider.getRiver(), + * calcRange.getMinimumDouble(), calcRange.getMaximumDouble(), access.getRiverside().getAttributeKey()); + */ calculator.execute(problems, label, calcRange, access.getRiverside().getAttributeKey(), infrastructureChoices, access.getIsWspl(), winfo, results); } diff -r 02ca823ec9c6 -r 07f02019065e artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java Fri Oct 11 18:30:36 2019 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java Mon Oct 14 08:14:58 2019 +0200 @@ -33,6 +33,7 @@ import org.dive4elements.river.artifacts.model.river.RiverInfoProvider; import org.dive4elements.river.artifacts.sinfo.common.GaugeDurationValuesFinder; import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; +import org.dive4elements.river.artifacts.sinfo.flood_duration.InfrastructureServerClientXChange.Element; import org.dive4elements.river.exports.WaterlevelDescriptionBuilder; import org.dive4elements.river.model.Attribute.AttributeKey; import org.dive4elements.river.model.Gauge; @@ -67,7 +68,7 @@ * Calculate the infrastructures flood duration result rows */ public void execute(final Calculation problems, final String label, final DoubleRange calcRange, final AttributeKey riverside, - final Set infrastructureChoices, final boolean withWspl, final WINFOArtifact winfo, final FloodDurationCalculationResults results) { + final List infrastructureChoices, final boolean withWspl, final WINFOArtifact winfo, final FloodDurationCalculationResults results) { // Find all gauges of the calc range, and create the duration finders final Map durFinders = new HashMap<>(); @@ -76,8 +77,11 @@ } // Find all infrastructures within the calc range + final Set choices = new HashSet<>(); + for (final Element ifch : infrastructureChoices) + choices.add(ifch.getGroupLabel() + "\t" + ifch.getTypeLabel()); final List infras = InfrastructureValue.getValues(this.riverInfoProvider.getRiver(), calcRange.getMinimumDouble(), - calcRange.getMaximumDouble(), riverside, infrastructureChoices); + calcRange.getMaximumDouble(), riverside, choices); // Merge all stations (range/step, borders of gauge ranges, infrastructures) // final Map allStations = new HashMap<>(); diff -r 02ca823ec9c6 -r 07f02019065e backend/src/main/java/org/dive4elements/river/model/sinfo/Infrastructure.java --- a/backend/src/main/java/org/dive4elements/river/model/sinfo/Infrastructure.java Fri Oct 11 18:30:36 2019 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/sinfo/Infrastructure.java Mon Oct 14 08:14:58 2019 +0200 @@ -71,11 +71,13 @@ private List values; + /***** CONSTRUCTORS *****/ public Infrastructure() { } + public Infrastructure(final River river, final String filename, final String kmrange_info, final String notes, final AnnotationType type, final AnnotationType group, final Integer year, final String dataprovider, final String evaluation_by) { this.river = river; @@ -90,6 +92,7 @@ this.values = new ArrayList<>(); } + /***** METHODS *****/ @Id @@ -230,8 +233,8 @@ * Fetches from the database the infrastructure groups and types of a river's km range and river side(s) * as tab-separated strings ordered by the infrastructure group, then the type */ - @Deprecated - public static Set fetchInfrastructureTypes(final River river, final double kmLo, final double kmHi, final AttributeKey riverside) { + public static Set fetchInfrastructureTypes(final River river, final double kmLo, final double kmHi, + final AttributeKey riverside) { final Set groupTypes = new HashSet<>(); for (final Infrastructure ifs : fetchInfrastructureTypeList(river, kmLo, kmHi, riverside)) groupTypes.add(ifs.getGroup().getName() + "\t" + ifs.getType().getName()); @@ -242,13 +245,18 @@ * Fetches from the database the list of infrastructure types of a river's km range and river side(s) * ordered by type group */ - private static List fetchInfrastructureTypeList(final River river, final double kmLo, final double kmHi, final AttributeKey riverside) { + private static List fetchInfrastructureTypeList(final River river, final double kmLo, final double kmHi, + final AttributeKey riverside) { final Session session = SessionHolder.HOLDER.get(); - final Query query = session.createQuery("FROM Infrastructure" + " WHERE (river=:river)" - + " AND (id IN (SELECT v.infrastructure.id FROM InfrastructureValue v" + " WHERE (v.station BETWEEN (:kmLo - 0.0001) AND (:kmHi + 0.0001))" - + InfrastructureValue.getRiversideClause(riverside, "v.", "attr_id") + "))" + " ORDER BY group, type"); + final Query query = session.createQuery("FROM Infrastructure" + + " WHERE (river=:river)" + + " AND (id IN (SELECT v.infrastructure.id FROM InfrastructureValue v" + + " WHERE (v.station BETWEEN (:kmLo - 0.0001) AND (:kmHi + 0.0001))" + + InfrastructureValue.getRiversideClause(riverside, "v.", "attr_id") + + "))" + + " ORDER BY group, type"); query.setParameter("river", river); query.setParameter("kmLo", new Double(kmLo)); query.setParameter("kmHi", new Double(kmHi)); diff -r 02ca823ec9c6 -r 07f02019065e backend/src/main/java/org/dive4elements/river/model/sinfo/InfrastructureValue.java --- a/backend/src/main/java/org/dive4elements/river/model/sinfo/InfrastructureValue.java Fri Oct 11 18:30:36 2019 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/sinfo/InfrastructureValue.java Mon Oct 14 08:14:58 2019 +0200 @@ -32,6 +32,7 @@ import org.hibernate.Query; import org.hibernate.Session; + /** * Hibernate binding for the DB table infrastructure_values * @@ -56,6 +57,7 @@ private Double height; + /***** CONSTRUCTORS *****/ public InfrastructureValue() { @@ -75,6 +77,7 @@ this(infrastructure, Double.valueOf(km), attribute, Double.valueOf(height)); } + /***** METHODS *****/ @Id @@ -137,8 +140,8 @@ */ public static List getValues(final Infrastructure parent, final double kmLo, final double kmHi) { final Session session = SessionHolder.HOLDER.get(); - final Query query = session - .createQuery("FROM InfrastructureValue WHERE (infrastructure=:parent)" + " AND (station >= :kmLo - 0.0001) AND (station <= :kmHi + 0.0001)"); + final Query query = session.createQuery("FROM InfrastructureValue WHERE (infrastructure=:parent)" + + " AND (station >= :kmLo - 0.0001) AND (station <= :kmHi + 0.0001)"); query.setParameter("parent", parent); query.setParameter("kmLo", new Double(kmLo)); query.setParameter("kmHi", new Double(kmHi)); @@ -151,9 +154,12 @@ public static List getValues(final River river, final double kmLo, final double kmHi, final AttributeKey riverside, final Set groupTypes) { final Session session = SessionHolder.HOLDER.get(); - final Query query = session - .createQuery("FROM InfrastructureValue" + " WHERE (infrastructure.river=:river)" + " AND (station BETWEEN :kmLo - 0.0001 AND :kmHi + 0.0001)" - + getRiversideClause(riverside, "", "attr_id") + getGroupTypeClause(groupTypes, "") + " ORDER BY station, attribute.id"); + final Query query = session.createQuery("FROM InfrastructureValue" + + " WHERE (infrastructure.river=:river)" + + " AND (station BETWEEN :kmLo - 0.0001 AND :kmHi + 0.0001)" + + getRiversideClause(riverside, "", "attr_id") + + getGroupTypeClause(groupTypes, "") + + " ORDER BY station, attribute.id"); query.setParameter("river", river); query.setParameter("kmLo", new Double(kmLo)); query.setParameter("kmHi", new Double(kmHi)); @@ -171,8 +177,8 @@ String clause = " AND ("; String sep = ""; for (final String groupType : groupTypes) { - clause += sep + "(" + tableprefix + "infrastructure.group.name='" + groupType.split("\t")[0] + "'" + " AND " + tableprefix - + "infrastructure.type.name='" + groupType.split("\t")[1] + "')"; + clause += sep + "(" + tableprefix + "infrastructure.group.name='" + groupType.split("\t")[0] + "'" + + " AND " + tableprefix + "infrastructure.type.name='" + groupType.split("\t")[1] + "')"; sep = " OR "; } if (sep.length() >= 1)