Mercurial > dive4elements > river
changeset 9463:80800fe126cd
Niemals Objekte mit == vergleichen!!!
author | gernotbelger |
---|---|
date | Wed, 29 Aug 2018 18:34:10 +0200 |
parents | e28303971812 |
children | c77255da734b |
files | backend/src/main/java/org/dive4elements/river/model/CrossSection.java |
diffstat | 1 files changed, 86 insertions(+), 132 deletions(-) [+] |
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/model/CrossSection.java Wed Aug 29 17:58:02 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/model/CrossSection.java Wed Aug 29 18:34:10 2018 +0200 @@ -8,152 +8,120 @@ package org.dive4elements.river.model; -import java.io.Serializable; - -import java.util.List; -import java.util.ArrayList; - import java.awt.geom.Point2D; +import java.io.Serializable; +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.ArrayList; +import java.util.List; +import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; import javax.persistence.GeneratedValue; -import javax.persistence.Column; -import javax.persistence.SequenceGenerator; import javax.persistence.GenerationType; -import javax.persistence.OneToOne; -import javax.persistence.OneToMany; -import javax.persistence.OrderBy; +import javax.persistence.Id; import javax.persistence.JoinColumn; - -import java.math.MathContext; -import java.math.BigDecimal; - -import org.hibernate.Session; -import org.hibernate.SQLQuery; -import org.hibernate.Query; - -import org.hibernate.type.StandardBasicTypes; - -import org.dive4elements.river.backend.SessionHolder; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.OrderBy; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; import org.apache.log4j.Logger; +import org.dive4elements.river.backend.SessionHolder; +import org.hibernate.Query; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.type.StandardBasicTypes; @Entity @Table(name = "cross_sections") -public class CrossSection -implements Serializable -{ - private static Logger log = - Logger.getLogger(CrossSection.class); +public class CrossSection implements Serializable { + private static Logger log = Logger.getLogger(CrossSection.class); private static final MathContext PRECISION = new MathContext(6); - private static final String SQL_FAST_CROSS_SECTION_LINES = - "SELECT km, x, y, csl.id AS csl_id " + - "FROM cross_section_lines csl JOIN cross_section_points csp " + - "ON csp.cross_section_line_id = csl.id " + - "WHERE csl.cross_section_id = :cs_id AND " + - "km between :from_km AND :to_km " + - "ORDER BY csl.km, csl.id, csp.col_pos"; + private static final String SQL_FAST_CROSS_SECTION_LINES = "SELECT km, x, y, csl.id AS csl_id " + + "FROM cross_section_lines csl JOIN cross_section_points csp " + "ON csp.cross_section_line_id = csl.id " + + "WHERE csl.cross_section_id = :cs_id AND " + "km between :from_km AND :to_km " + "ORDER BY csl.km, csl.id, csp.col_pos"; - private static final String SQL_MIN_MAX = - "SELECT * FROM ( "+ - "SELECT cross_section_id, MIN(km) AS minkm, MAX(km) AS maxkm " + - "FROM cross_section_lines " + - "WHERE cross_section_id IN " + - " (SELECT id FROM cross_sections WHERE river_id = :river_id) " + - " GROUP BY cross_section_id" + - ") cs_ranges " + - "JOIN cross_sections cs ON cs_ranges.cross_section_id = cs.id " + - "LEFT OUTER JOIN time_intervals " + - " ON cs.time_interval_id = time_intervals.id " + - "WHERE :km BETWEEN minkm AND maxkm " + - "ORDER BY stop_time desc, start_time desc, :km - minkm"; + private static final String SQL_MIN_MAX = "SELECT * FROM ( " + "SELECT cross_section_id, MIN(km) AS minkm, MAX(km) AS maxkm " + "FROM cross_section_lines " + + "WHERE cross_section_id IN " + " (SELECT id FROM cross_sections WHERE river_id = :river_id) " + " GROUP BY cross_section_id" + ") cs_ranges " + + "JOIN cross_sections cs ON cs_ranges.cross_section_id = cs.id " + "LEFT OUTER JOIN time_intervals " + + " ON cs.time_interval_id = time_intervals.id " + "WHERE :km BETWEEN minkm AND maxkm " + + "ORDER BY stop_time desc, start_time desc, :km - minkm"; // Order by time interval missing. - private Integer id; - private River river; - private TimeInterval timeInterval; - private String description; + private Integer id; + private River river; + private TimeInterval timeInterval; + private String description; private List<CrossSectionLine> lines; public CrossSection() { } - public CrossSection( - River river, - TimeInterval timeInterval, - String description - ) { - this.river = river; + public CrossSection(final River river, final TimeInterval timeInterval, final String description) { + this.river = river; this.timeInterval = timeInterval; - this.description = description; + this.description = description; } @Id - @SequenceGenerator( - name = "SEQUENCE_CROSS_SECTIONS_ID_SEQ", - sequenceName = "CROSS_SECTIONS_ID_SEQ", - allocationSize = 1) - @GeneratedValue( - strategy = GenerationType.SEQUENCE, - generator = "SEQUENCE_CROSS_SECTIONS_ID_SEQ") + @SequenceGenerator(name = "SEQUENCE_CROSS_SECTIONS_ID_SEQ", sequenceName = "CROSS_SECTIONS_ID_SEQ", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE_CROSS_SECTIONS_ID_SEQ") @Column(name = "id") public Integer getId() { - return id; + return this.id; } - public void setId(Integer id) { + public void setId(final Integer id) { this.id = id; } @OneToOne @JoinColumn(name = "river_id") public River getRiver() { - return river; + return this.river; } - public void setRiver(River river) { + public void setRiver(final River river) { this.river = river; } @OneToOne @JoinColumn(name = "time_interval_id") public TimeInterval getTimeInterval() { - return timeInterval; + return this.timeInterval; } - public void setTimeInterval(TimeInterval timeInterval) { + public void setTimeInterval(final TimeInterval timeInterval) { this.timeInterval = timeInterval; } @Column(name = "description") public String getDescription() { - return description; + return this.description; } - public void setDescription(String description) { + public void setDescription(final String description) { this.description = description; } @OneToMany @OrderBy("km") - @JoinColumn(name="cross_section_id") + @JoinColumn(name = "cross_section_id") public List<CrossSectionLine> getLines() { - return lines; + return this.lines; } - public void setLines(List<CrossSectionLine> lines) { + public void setLines(final List<CrossSectionLine> lines) { this.lines = lines; } - public List<CrossSectionLine> getLines(double startKm, double endKm) { - Session session = SessionHolder.HOLDER.get(); - Query query = session.createQuery( - "from CrossSectionLine where crossSection=:crossSection " + - "and km between :startKm and :endKm order by km"); + public List<CrossSectionLine> getLines(final double startKm, final double endKm) { + final Session session = SessionHolder.HOLDER.get(); + final Query query = session.createQuery("from CrossSectionLine where crossSection=:crossSection " + "and km between :startKm and :endKm order by km"); query.setParameter("crossSection", this); query.setParameter("startKm", new BigDecimal(startKm, PRECISION)); query.setParameter("endKm", new BigDecimal(endKm, PRECISION)); @@ -162,45 +130,33 @@ } /** Get Lines from startkm to endkm, fast because direct usage of sql. */ - public List<FastCrossSectionLine> getFastLines( - double startKm, - double endKm - ) { - Session session = SessionHolder.HOLDER.get(); + public List<FastCrossSectionLine> getFastLines(final double startKm, final double endKm) { + final Session session = SessionHolder.HOLDER.get(); - SQLQuery sqlQuery = session.createSQLQuery( - SQL_FAST_CROSS_SECTION_LINES) - .addScalar("km", StandardBasicTypes.DOUBLE) - .addScalar("x", StandardBasicTypes.DOUBLE) - .addScalar("y", StandardBasicTypes.DOUBLE) - .addScalar("csl_id", StandardBasicTypes.INTEGER); + final SQLQuery sqlQuery = session.createSQLQuery(SQL_FAST_CROSS_SECTION_LINES).addScalar("km", StandardBasicTypes.DOUBLE) + .addScalar("x", StandardBasicTypes.DOUBLE).addScalar("y", StandardBasicTypes.DOUBLE).addScalar("csl_id", StandardBasicTypes.INTEGER); - sqlQuery - .setInteger("cs_id", getId()) - .setDouble("from_km", startKm) - .setDouble("to_km", endKm); + sqlQuery.setInteger("cs_id", getId()).setDouble("from_km", startKm).setDouble("to_km", endKm); - List<Object []> results = sqlQuery.list(); + final List<Object[]> results = sqlQuery.list(); - ArrayList<Point2D> points = new ArrayList<Point2D>(500); - ArrayList<FastCrossSectionLine> lines = - new ArrayList<FastCrossSectionLine>(); + ArrayList<Point2D> points = new ArrayList<>(500); + final ArrayList<FastCrossSectionLine> lines = new ArrayList<>(); Integer lastId = null; - Double lastKm = null; + Double lastKm = null; - for (Object [] result: results) { - Double km = (Double)result[0]; - Double x = (Double)result[1]; - Double y = (Double)result[2]; - Integer id = (Integer)result[3]; + for (final Object[] result : results) { + final Double km = (Double) result[0]; + final Double x = (Double) result[1]; + final Double y = (Double) result[2]; + final Integer id = (Integer) result[3]; if (lastId != null && !lastId.equals(id)) { points.trimToSize(); - FastCrossSectionLine line = - new FastCrossSectionLine(lastKm, points); + final FastCrossSectionLine line = new FastCrossSectionLine(lastKm, points); lines.add(line); - points = new ArrayList<Point2D>(500); + points = new ArrayList<>(500); } points.add(new Point2D.Double(x, y)); @@ -211,8 +167,7 @@ if (lastId != null) { points.trimToSize(); - FastCrossSectionLine line = - new FastCrossSectionLine(lastKm, points); + final FastCrossSectionLine line = new FastCrossSectionLine(lastKm, points); lines.add(line); } @@ -224,34 +179,33 @@ /** * True if the given section is the "newest" for that river * and has values at km. - * @param km Given station. + * + * @param km + * Given station. * @return true if the section has the most advanced end of its validity * interval or the most advanced start of its validity interval. */ - public boolean shouldBeMaster(double km) { - Session session = SessionHolder.HOLDER.get(); - - SQLQuery sqlQuery = session.createSQLQuery(SQL_MIN_MAX) - .addScalar("cross_section_id", StandardBasicTypes.INTEGER); - - sqlQuery - .setInteger("river_id", getRiver().getId()) - .setDouble("km", km); + public boolean shouldBeMaster(final double km) { + final Session session = SessionHolder.HOLDER.get(); - List<Integer> results = sqlQuery.list(); - final StringBuilder builder = new StringBuilder(); - - + final SQLQuery sqlQuery = session.createSQLQuery(SQL_MIN_MAX).addScalar("cross_section_id", StandardBasicTypes.INTEGER); + + sqlQuery.setInteger("river_id", getRiver().getId()).setDouble("km", km); + + final List<Integer> results = sqlQuery.list(); + if (results.size() >= 1) { - final String resultIds = results.toString(); - builder.append("CrossSection line 243 ID = ").append(getId()).append(", Result SIZE = ").append(results.size()).append( ", Result_Ids = ").append(resultIds); + final String resultIds = results.toArray().toString(); + final StringBuilder builder = new StringBuilder(); + builder.append("CrossSection line 243 ID = ").append(getId()).append(", Result SIZE = ").append(results.size()).append(", Result_Ids = ") + .append(resultIds); log.debug(builder.toString()); - Integer result = results.get(0); - if (result == getId()) { + + final Integer result = results.get(0); + if (result.equals(getId())) { return true; } - } - else { + } else { log.warn("No CS found that could be master."); }