# HG changeset patch # User Sascha L. Teichmann # Date 1308129720 0 # Node ID 8076f6a689d00c725caed7e456e3b6d9dffafd4d # Parent 23fe9ac1c3b45d2868949de4fa076d199023039b First part of flys/issue18 flys-backend/trunk@2124 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/ChangeLog --- a/flys-backend/ChangeLog Tue Jun 14 17:30:09 2011 +0000 +++ b/flys-backend/ChangeLog Wed Jun 15 09:22:00 2011 +0000 @@ -1,3 +1,38 @@ +2011-06-14 Sascha L. Teichmann + + First part of flys/issue18 + + * doc/schema/postgresql.sql: Add new table 'annotation_types'. + To update existing databases: + BEGIN; + CREATE SEQUENCE ANNOTATION_TYPES_ID_SEQ; + CREATE TABLE annotation_types ( + id int PRIMARY KEY NOT NULL, + name VARCHAR(256) NOT NULL UNIQUE + ); + ALTER TABLE annotations ADD COLUMN type_id int REFERENCES annotation_types(id); + COMMIT; + + * doc/schema/postgresql-cleanup.sql: Removed. Hopeless out-dated. + + * src/main/java/de/intevation/flys/model/AnnotationType.java: + New. Hibernate model to access the type. + + * src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java: + Register the new backend type. + + * src/main/java/de/intevation/flys/model/Annotation.java: + References the annotation type. + + * src/main/java/de/intevation/flys/importer/ImportAnnotationType.java: + New. Model to help import the annotation type. + + * src/main/java/de/intevation/flys/importer/ImportAnnotation.java: + Uses the import type. + + * src/main/java/de/intevation/flys/importer/AnnotationsParser.java: + Set the annotation type to 'null'. TODO: Do the classification! + 2011-06-14 Sascha L. Teichmann * src/main/java/de/intevation/flys/importer/AtFileParser.java: diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/doc/schema/postgresql-cleanup.sql --- a/flys-backend/doc/schema/postgresql-cleanup.sql Tue Jun 14 17:30:09 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -BEGIN; - -DROP VIEW wst_value_table; - -DROP TABLE wst_column_q_ranges; -DROP TABLE wst_q_ranges; -DROP TABLE wst_column_values; -DROP TABLE wst_column; -DROP TABLE wst; - -DROP TABLE discharge_table_values; -DROP TABLE discharge_tables; - -DROP TABLE main_values CASCADE; -DROP TABLE time_intervals CASCADE; -DROP TABLE named_main_values CASCADE; -DROP TABLE main_value_types CASCADE; - -DROP TABLE gauges CASCADE; - -DROP TABLE annotations CASCADE; -DROP TABLE positions CASCADE; -DROP TABLE ranges CASCADE; -DROP TABLE attributes CASCADE; - -DROP TABLE rivers CASCADE; - -DROP SEQUENCE WST_COLUMN_Q_RANGES_ID_SEQ; -DROP SEQUENCE WST_Q_RANGES_ID_SEQ; -DROP SEQUENCE WST_COLUMN_VALUES_ID_SEQ; -DROP SEQUENCE WST_COLUMNS_ID_SEQ; -DROP SEQUENCE WSTS_ID_SEQ; -DROP SEQUENCE DISCHARGE_TABLE_VALUES_ID_SEQ; -DROP SEQUENCE DISCHARGE_TABLES_ID_SEQ; -DROP SEQUENCE MAIN_VALUES_ID_SEQ; -DROP SEQUENCE TIME_INTERVALS_ID_SEQ; -DROP SEQUENCE NAMED_MAIN_VALUES_ID_SEQ; -DROP SEQUENCE MAIN_VALUE_TYPES_ID_SEQ; -DROP SEQUENCE GAUGES_ID_SEQ; -DROP SEQUENCE ANNOTATIONS_ID_SEQ; -DROP SEQUENCE POSITIONS_ID_SEQ; -DROP SEQUENCE RANGES_ID_SEQ; -DROP SEQUENCE ATTRIBUTES_ID_SEQ; -DROP SEQUENCE RIVERS_ID_SEQ; - -COMMIT; diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/doc/schema/postgresql.sql --- a/flys-backend/doc/schema/postgresql.sql Tue Jun 14 17:30:09 2011 +0000 +++ b/flys-backend/doc/schema/postgresql.sql Wed Jun 15 09:22:00 2011 +0000 @@ -45,6 +45,14 @@ bottom NUMERIC ); +-- Types of annotatations (Hafen, Bruecke, Zufluss, ...) +CREATE SEQUENCE ANNOTATION_TYPES_ID_SEQ; + +CREATE TABLE annotation_types ( + id int PRIMARY KEY NOT NULL, + name VARCHAR(256) NOT NULL UNIQUE +); + -- Some object (eg. Hafen) at a segment of river -- plus its position. CREATE SEQUENCE ANNOTATIONS_ID_SEQ; @@ -54,7 +62,8 @@ range_id int NOT NULL REFERENCES ranges(id), attribute_id int NOT NULL REFERENCES attributes(id), position_id int REFERENCES positions(id), - edge_id int REFERENCES edges(id) + edge_id int REFERENCES edges(id), + type_id int REFERENCES annotation_types(id) ); -- Pegel diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java --- a/flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java Tue Jun 14 17:30:09 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java Wed Jun 15 09:22:00 2011 +0000 @@ -10,6 +10,7 @@ import org.hibernate.cfg.Environment; import de.intevation.flys.model.Annotation; +import de.intevation.flys.model.AnnotationType; import de.intevation.flys.model.Attribute; import de.intevation.flys.model.DischargeTable; import de.intevation.flys.model.DischargeTableValue; @@ -114,6 +115,7 @@ // TODO: Use package reflection here. cfg.addAnnotatedClass(Annotation.class); + cfg.addAnnotatedClass(AnnotationType.class); cfg.addAnnotatedClass(Attribute.class); cfg.addAnnotatedClass(DischargeTable.class); cfg.addAnnotatedClass(DischargeTableValue.class); diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/src/main/java/de/intevation/flys/importer/AnnotationsParser.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/AnnotationsParser.java Tue Jun 14 17:30:09 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/AnnotationsParser.java Wed Jun 15 09:22:00 2011 +0000 @@ -124,8 +124,10 @@ ImportRange range = new ImportRange(from, to); + ImportAnnotationType type = null; // TODO: do classification + ImportAnnotation annotation = new ImportAnnotation( - attribute, position, range, edge); + attribute, position, range, edge, type); if (!annotations.add(annotation)) { log.debug("duplicated annotation in line " diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/src/main/java/de/intevation/flys/importer/ImportAnnotation.java --- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportAnnotation.java Tue Jun 14 17:30:09 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportAnnotation.java Wed Jun 15 09:22:00 2011 +0000 @@ -1,6 +1,7 @@ package de.intevation.flys.importer; import de.intevation.flys.model.Annotation; +import de.intevation.flys.model.AnnotationType; import de.intevation.flys.model.Range; import de.intevation.flys.model.Position; import de.intevation.flys.model.Attribute; @@ -15,10 +16,11 @@ public class ImportAnnotation implements Comparable { - protected ImportAttribute attribute; - protected ImportPosition position; - protected ImportRange range; - protected ImportEdge edge; + protected ImportAttribute attribute; + protected ImportPosition position; + protected ImportRange range; + protected ImportEdge edge; + protected ImportAnnotationType type; protected Annotation peer; @@ -26,15 +28,17 @@ } public ImportAnnotation( - ImportAttribute attribute, - ImportPosition position, - ImportRange range, - ImportEdge edge + ImportAttribute attribute, + ImportPosition position, + ImportRange range, + ImportEdge edge, + ImportAnnotationType type ) { this.attribute = attribute; this.position = position; this.range = range; this.edge = edge; + this.type = type; } public int compareTo(ImportAnnotation other) { @@ -55,7 +59,15 @@ if (edge != null && other.edge == null) return +1; if (edge == null && other.edge == null) return 0; - return edge.compareTo(other.edge); + if ((d = edge.compareTo(other.edge)) != 0) { + return d; + } + + if (type == null && other.type != null) return -1; + if (type != null && other.type == null) return +1; + if (type == null && other.type == null) return 0; + + return type.compareTo(other.type); } public ImportAttribute getAttribute() { @@ -82,26 +94,46 @@ this.range = range; } + public ImportEdge getEdge() { + return edge; + } + + public void setEdge(ImportEdge edge) { + this.edge = edge; + } + + public ImportAnnotationType getType() { + return type; + } + + public void setType(ImportAnnotationType type) { + this.type = type; + } + public Annotation getPeer(River river) { if (peer == null) { - Range r = range.getPeer(river); - Attribute a = attribute.getPeer(); - Position p = position.getPeer(); - Edge e = edge != null ? edge.getPeer() : null; + Range r = range.getPeer(river); + Attribute a = attribute.getPeer(); + Position p = position.getPeer(); + Edge e = edge != null ? edge.getPeer() : null; + AnnotationType t = type != null ? type.getPeer() : null; + Session session = ImporterSession.getInstance().getDatabaseSession(); Query query = session.createQuery( "from Annotation where " + "range=:range and " + "attribute=:attribute and " + "position=:position and " + - "edge=:edge"); + "edge=:edge and " + + "type=:type"); query.setParameter("range", r); query.setParameter("attribute", a); query.setParameter("position", p); query.setParameter("edge", e); + query.setParameter("type", t); List annotations = query.list(); if (annotations.isEmpty()) { - peer = new Annotation(r, a, p, e); + peer = new Annotation(r, a, p, e, t); session.save(peer); } else { diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/src/main/java/de/intevation/flys/importer/ImportAnnotationType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportAnnotationType.java Wed Jun 15 09:22:00 2011 +0000 @@ -0,0 +1,45 @@ +package de.intevation.flys.importer; + +import de.intevation.flys.model.AnnotationType; + +import org.hibernate.Session; +import org.hibernate.Query; + +import java.util.List; + +public class ImportAnnotationType +implements Comparable +{ + protected String name; + protected AnnotationType peer; + + public ImportAnnotationType() { + } + + public ImportAnnotationType(String name) { + this.name = name; + } + + public int compareTo(ImportAnnotationType other) { + return name.compareTo(other.name); + } + + public AnnotationType getPeer() { + if (peer == null) { + Session session = ImporterSession.getInstance().getDatabaseSession(); + Query query = session.createQuery( + "from AnnotationType where name=:name"); + query.setParameter("name", name); + List types = query.list(); + if (types.isEmpty()) { + peer = new AnnotationType(name); + session.save(peer); + } + else { + peer = types.get(0); + } + } + return peer; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/src/main/java/de/intevation/flys/model/Annotation.java --- a/flys-backend/src/main/java/de/intevation/flys/model/Annotation.java Tue Jun 14 17:30:09 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/model/Annotation.java Wed Jun 15 09:22:00 2011 +0000 @@ -17,29 +17,28 @@ public class Annotation implements Serializable { - private Integer id; - private Range range; - private Attribute attribute; - private Position position; - private Edge edge; + private Integer id; + private Range range; + private Attribute attribute; + private Position position; + private Edge edge; + private AnnotationType type; public Annotation() { } - public Annotation(Range range, Attribute attribute, Position position) { - this(range, attribute, position, null); - } - public Annotation( - Range range, - Attribute attribute, - Position position, - Edge edge + Range range, + Attribute attribute, + Position position, + Edge edge, + AnnotationType type ) { this.range = range; this.attribute = attribute; this.position = position; this.edge = edge; + this.type = type; } @Id @@ -98,5 +97,15 @@ public void setEdge(Edge edge) { this.edge = edge; } + + @OneToOne + @JoinColumn(name = "type_id") + public AnnotationType getType() { + return type; + } + + public void setType(AnnotationType type) { + this.type = type; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 23fe9ac1c3b4 -r 8076f6a689d0 flys-backend/src/main/java/de/intevation/flys/model/AnnotationType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/model/AnnotationType.java Wed Jun 15 09:22:00 2011 +0000 @@ -0,0 +1,54 @@ +package de.intevation.flys.model; + +import java.io.Serializable; + +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; + +@Entity +@Table(name = "annotation_types") +public class AnnotationType +implements Serializable +{ + private Integer id; + private String name; + + public AnnotationType() { + } + + public AnnotationType(String name) { + this.name = name; + } + + @Id + @SequenceGenerator( + name = "SEQUENCE_ANNOTATION_TYPES_ID_SEQ", + sequenceName = "ANNOTATION_TYPES_ID_SEQ", + allocationSize = 1) + @GeneratedValue( + strategy = GenerationType.SEQUENCE, + generator = "SEQUENCE_ANNOTATION_TYPES_ID_SEQ") + @Column(name = "id") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :