# HG changeset patch # User mschaefer # Date 1534248146 -7200 # Node ID 361de818f76e354136bb7afaf990a4e4b741d81f # Parent 8e100593aec301af71f305c965ed30ad3d523b2d Added color fields to the vegetation zone database table and importer, max days field changed from exclusive to inclusive diff -r 8e100593aec3 -r 361de818f76e backend/doc/schema/oracle-sinfo-uinfo.sql --- a/backend/doc/schema/oracle-sinfo-uinfo.sql Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/doc/schema/oracle-sinfo-uinfo.sql Tue Aug 14 14:02:26 2018 +0200 @@ -461,11 +461,17 @@ vegetation_id NUMBER(9,0) NOT NULL CONSTRAINT cVegetationZoneVegetation REFERENCES vegetation(id) ON DELETE CASCADE, vegetation_type_id NUMBER(9,0) NOT NULL CONSTRAINT cVegetationZoneVegetationType REFERENCES vegetation_type(id) ON DELETE CASCADE, min_overflow_days NUMBER(3,0) NOT NULL, - max_overflow_days NUMBER(3,0) NOT NULL + max_overflow_days NUMBER(3,0) NOT NULL, + color_r NUMBER(3,0) NOT NULL, + color_g NUMBER(3,0) NOT NULL, + color_b NUMBER(3,0) NOT NULL ); COMMENT ON TABLE vegetation_zone IS 'Vegetation zone of a river station' ; COMMENT ON COLUMN vegetation_zone.min_overflow_days IS 'Minimum number (inclusive) of overflow days in a year for the zone type' ; -COMMENT ON COLUMN vegetation_zone.max_overflow_days IS 'Maximum number (exclusive) of overflow days in a year for the zone type' ; +COMMENT ON COLUMN vegetation_zone.max_overflow_days IS 'Maximum number (inclusive) of overflow days in a year for the zone type' ; +COMMENT ON COLUMN vegetation_zone.color_r IS 'Red value (0-255) of the zone color' ; +COMMENT ON COLUMN vegetation_zone.color_g IS 'Green value (0-255) of the zone color' ; +COMMENT ON COLUMN vegetation_zone.color_b IS 'Blue value (0-255) of the zone color' ; CREATE SEQUENCE VEGETATION_ZONE_ID_SEQ ; diff -r 8e100593aec3 -r 361de818f76e backend/doc/schema/postgresql-sinfo-uinfo.sql --- a/backend/doc/schema/postgresql-sinfo-uinfo.sql Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/doc/schema/postgresql-sinfo-uinfo.sql Tue Aug 14 14:02:26 2018 +0200 @@ -457,12 +457,18 @@ vegetation_id NUMERIC(9,0) NOT NULL CONSTRAINT cVegetationZoneVegetation REFERENCES vegetation(id) ON DELETE CASCADE, vegetation_type_id NUMERIC(9,0) NOT NULL CONSTRAINT cVegetationZoneVegetationType REFERENCES vegetation_type(id) ON DELETE CASCADE, min_overflow_days NUMERIC(3,0) NOT NULL, - max_overflow_days NUMERIC(3,0) NOT NULL + max_overflow_days NUMERIC(3,0) NOT NULL, + color_r NUMERIC(3,0) NOT NULL, + color_g NUMERIC(3,0) NOT NULL, + color_b NUMERIC(3,0) NOT NULL ); COMMENT ON TABLE vegetation_zone IS 'Vegetation zone of a river station' ; COMMENT ON COLUMN vegetation_zone.min_overflow_days IS 'Minimum number (inclusive) of overflow days in a year for the zone type' ; -COMMENT ON COLUMN vegetation_zone.max_overflow_days IS 'Maximum number (exclusive) of overflow days in a year for the zone type' ; +COMMENT ON COLUMN vegetation_zone.max_overflow_days IS 'Maximum number (inclusive) of overflow days in a year for the zone type' ; +COMMENT ON COLUMN vegetation_zone.color_r IS 'Red value (0-255) of the zone color' ; +COMMENT ON COLUMN vegetation_zone.color_g IS 'Green value (0-255) of the zone color' ; +COMMENT ON COLUMN vegetation_zone.color_b IS 'Blue value (0-255) of the zone color' ; CREATE SEQUENCE VEGETATION_ZONE_ID_SEQ ; diff -r 8e100593aec3 -r 361de818f76e backend/src/main/java/org/dive4elements/river/importer/uinfo/importitem/VegetationZoneImport.java --- a/backend/src/main/java/org/dive4elements/river/importer/uinfo/importitem/VegetationZoneImport.java Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/uinfo/importitem/VegetationZoneImport.java Tue Aug 14 14:02:26 2018 +0200 @@ -38,14 +38,23 @@ private final Integer maxOverflowDays; + private final Integer color_r; + + private final Integer color_g; + + private final Integer color_b; /***** CONSTRUCTOR *****/ - public VegetationZoneImport(final int vegetationTypeId, final Integer minOverflowDays, final Integer maxOverflowDays) { + public VegetationZoneImport(final int vegetationTypeId, final int minOverflowDays, final int maxOverflowDays, final int color_r, + final int color_g, final int color_b) { super(Double.NaN); this.vegetationType = new VegetationTypeImport(vegetationTypeId); - this.minOverflowDays = minOverflowDays; - this.maxOverflowDays = maxOverflowDays; + this.minOverflowDays = Integer.valueOf(minOverflowDays); + this.maxOverflowDays = Integer.valueOf(maxOverflowDays); + this.color_r = Integer.valueOf(color_r); + this.color_g = Integer.valueOf(color_g); + this.color_b = Integer.valueOf(color_b); } @@ -72,6 +81,6 @@ log.error("Unknown vegetation zone class " + this.vegetationType.getId()); return null; } - return new VegetationZone(parent, type, this.minOverflowDays, this.maxOverflowDays); + return new VegetationZone(parent, type, this.minOverflowDays, this.maxOverflowDays, this.color_r, this.color_g, this.color_b); } } diff -r 8e100593aec3 -r 361de818f76e backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/VegetationParser.java --- a/backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/VegetationParser.java Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/uinfo/parsers/VegetationParser.java Tue Aug 14 14:02:26 2018 +0200 @@ -45,7 +45,10 @@ private enum ColTitlePattern { OVERFLOW_LIMIT("((.)|(Ue))berflutungsdauer-bis\\s*\\[(.*)\\].*"), // - CLASSNO("Vegetationsklasse.*"); + CLASSNO("Vegetationsklasse.*"), // + COLOR_R("Rot"), // + COLOR_G("Gr((.)|(ue))n"), // + COLOR_B("Blau"); private final Pattern pattern; @@ -153,13 +156,13 @@ return true; } this.previousClassNo = 0; - this.previousDaysLimit = 0; + this.previousDaysLimit = -1; return true; } @Override protected VegetationZoneImport createKmLineImport(final Double km, final String[] values) { - int daysLimit = 365; + int daysLimit = 366; int classNo = 0; try { if (!values[this.cols.get(ColTitlePattern.OVERFLOW_LIMIT)].trim().isEmpty()) @@ -180,8 +183,11 @@ // return null; // } this.previousClassNo = classNo; - final Integer minDays = Integer.valueOf(this.previousDaysLimit); - this.previousDaysLimit = daysLimit + 1; - return new VegetationZoneImport(classNo, minDays, Integer.valueOf(this.previousDaysLimit)); + final int minDays = this.previousDaysLimit + 1; + this.previousDaysLimit = daysLimit; + final int red = (this.cols.get(ColTitlePattern.COLOR_R) >= 0) ? Integer.parseInt(values[this.cols.get(ColTitlePattern.COLOR_R)]) : 0; + final int green = (this.cols.get(ColTitlePattern.COLOR_G) >= 0) ? Integer.parseInt(values[this.cols.get(ColTitlePattern.COLOR_G)]) : 0; + final int blue = (this.cols.get(ColTitlePattern.COLOR_B) >= 0) ? Integer.parseInt(values[this.cols.get(ColTitlePattern.COLOR_B)]) : 0; + return new VegetationZoneImport(classNo, minDays, daysLimit, red, green, blue); } } diff -r 8e100593aec3 -r 361de818f76e backend/src/main/java/org/dive4elements/river/model/uinfo/Vegetation.java --- a/backend/src/main/java/org/dive4elements/river/model/uinfo/Vegetation.java Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/uinfo/Vegetation.java Tue Aug 14 14:02:26 2018 +0200 @@ -69,6 +69,7 @@ this.values = new ArrayList<>(); } + /***** METHODS *****/ @Id diff -r 8e100593aec3 -r 361de818f76e backend/src/main/java/org/dive4elements/river/model/uinfo/VegetationType.java --- a/backend/src/main/java/org/dive4elements/river/model/uinfo/VegetationType.java Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/uinfo/VegetationType.java Tue Aug 14 14:02:26 2018 +0200 @@ -71,8 +71,9 @@ public void setName(final String name) { this.name = name; } + /** - * Queries all salix ranks from the database, orders by id + * Queries all vegetation types from the database, ordered by id */ public static List getTypes() { final Session session = SessionHolder.HOLDER.get(); diff -r 8e100593aec3 -r 361de818f76e backend/src/main/java/org/dive4elements/river/model/uinfo/VegetationZone.java --- a/backend/src/main/java/org/dive4elements/river/model/uinfo/VegetationZone.java Tue Aug 14 11:06:00 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/uinfo/VegetationZone.java Tue Aug 14 14:02:26 2018 +0200 @@ -11,6 +11,7 @@ package org.dive4elements.river.model.uinfo; import java.io.Serializable; +import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; @@ -21,6 +22,12 @@ import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; +import javax.persistence.Transient; + +import org.dive4elements.river.backend.SessionHolder; +import org.dive4elements.river.model.River; +import org.hibernate.Query; +import org.hibernate.Session; /** @@ -47,17 +54,27 @@ private Integer max_overflow_days; + private Integer color_r; + + private Integer color_g; + + private Integer color_b; /***** CONSTRUCTORS *****/ public VegetationZone() { } - public VegetationZone(final Vegetation vegetation, final VegetationType vegetationType, final Integer min_overflow_days, final Integer max_overflow_days) { + public VegetationZone(final Vegetation vegetation, final VegetationType vegetationType, final Integer min_overflow_days, final Integer max_overflow_days, + final Integer color_r, + final Integer color_g, final Integer color_b) { this.vegetation = vegetation; this.vegetationType = vegetationType; this.min_overflow_days = min_overflow_days; this.max_overflow_days = max_overflow_days; + this.color_r = color_r; + this.color_g = color_g; + this.color_b = color_b; } @@ -112,4 +129,49 @@ public void setMax_overflow_days(final Integer max_overflow_days) { this.max_overflow_days = max_overflow_days; } + + @Column(name = "color_r") + public Integer getColor_r() { + return this.color_r; + } + + public void setColor_r(final Integer color_r) { + this.color_r = color_r; + } + + @Column(name = "color_g") + public Integer getColor_g() { + return this.color_g; + } + + public void setColor_g(final Integer color_g) { + this.color_g = color_g; + } + + @Column(name = "color_b") + public Integer getColor_b() { + return this.color_b; + } + + public void setColor_b(final Integer color_b) { + this.color_b = color_b; + } + + @Transient + public String getColor() { + return String.format("#%02x%02x%02x", getColor_r(), getColor_g(), getColor_b()); + } + + /** + * Selects from the database the vegetation zones of a river + */ + public static List getValues(final River river) { + final Session session = SessionHolder.HOLDER.get(); + final Query query = session.createQuery("SELECT v" + + " FROM VegetationZone AS v JOIN v.vegetation AS s" + + " WHERE (s.river.id=:riverid)" + + " ORDER BY v.vegetationType.id"); + query.setParameter("riverid", river.getId()); + return query.list(); + } }