Mercurial > gemma
changeset 4964:58dc06e91c39 fairway-marks-import
Follow-up of rev. 1b309a8e7673 for BOYLAT
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 28 Feb 2020 13:43:52 +0100 |
parents | 1e47ba2a58f2 |
children | be713316b47a |
files | client/src/components/importconfiguration/types/Fairwaymarks.vue client/src/store/importschedule.js pkg/controllers/routes.go pkg/imports/fm.go pkg/imports/modelconvert.go schema/gemma.sql schema/updates/1407/01.distinguish_boylat_hydro_ienc.sql |
diffstat | 7 files changed, 171 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/client/src/components/importconfiguration/types/Fairwaymarks.vue Fri Feb 28 12:01:03 2020 +0100 +++ b/client/src/components/importconfiguration/types/Fairwaymarks.vue Fri Feb 28 13:43:52 2020 +0100 @@ -129,7 +129,8 @@ bcnlat_ienc: "Beacon, lateral (IENC feature)", BOYCAR: "Buoy, cardinal (MARITIME/Hydro feature)", BOYISD: "Buoy, isolated danger (MARITIME/Hydro feature)", - BOYLAT: "Buoy, lateral (MARITIME/Hydro feature)", + BOYLAT_hydro: "Buoy, lateral (MARITIME/Hydro feature)", + BOYLAT_ienc: "Buoy, lateral (IENC feature)", BOYSAW: "Buoy, safe water (MARITIME/Hydro feature)", BOYSPP: "Buoy, special purpose/general (MARITIME/Hydro feature)", DAYMAR: "Daymark (MARITIME/Hydro feature)",
--- a/client/src/store/importschedule.js Fri Feb 28 12:01:03 2020 +0100 +++ b/client/src/store/importschedule.js Fri Feb 28 13:43:52 2020 +0100 @@ -66,7 +66,8 @@ fm_bcnlat_ienc: "bcnlat_ienc", fm_boycar: "BOYCAR", fm_boyisd: "BOYISD", - fm_boylat: "BOYLAT", + fm_boylat_hydro: "BOYLAT_hydro", + fm_boylat_ienc: "boylat_ienc", fm_boysaw: "BOYSAW", fm_boyspp: "BOYSPP", fm_daymar: "DAYMAR",
--- a/pkg/controllers/routes.go Fri Feb 28 12:01:03 2020 +0100 +++ b/pkg/controllers/routes.go Fri Feb 28 13:43:52 2020 +0100 @@ -246,7 +246,8 @@ "fm_bcnlat_hydro", "fm_bcnlat_ienc", "fm_boycar", - "fm_boylat", + "fm_boylat_hydro", + "fm_boylat_ienc", "fm_boysaw", "fm_boyspp", "fm_daymar",
--- a/pkg/imports/fm.go Fri Feb 28 12:01:03 2020 +0100 +++ b/pkg/imports/fm.go Fri Feb 28 13:43:52 2020 +0100 @@ -61,14 +61,22 @@ boylatProperties struct { fairwayMarksProperties - Colour *string `json:"hydro_colour"` - Colpat *string `json:"hydro_colpat"` - Conrad *int `json:"hydro_conrad"` - HydroMarsys *int64 `json:"hydro_marsys,omitempty"` - IENCMarsys *int64 `json:"ienc_marsys,omitempty"` - Boyshp *int `json:"hydro_boyshp"` - HydroCatlam *int64 `json:"hydro_catlam,omitempty"` - IENCCatlam *int64 `json:"ienc_catlam,omitempty"` + Colour *string `json:"hydro_colour"` + Colpat *string `json:"hydro_colpat"` + Conrad *int `json:"hydro_conrad"` + Boyshp *int `json:"hydro_boyshp"` + } + + boylatHydroProperties struct { + boylatProperties + Marsys *int64 `json:"hydro_marsys"` + Catlam *int64 `json:"hydro_catlam"` + } + + boylatIencProperties struct { + boylatProperties + Marsys *int64 `json:"ienc_marsys"` + Catlam *int64 `json:"ienc_catlam"` } boycarProperties struct { @@ -165,7 +173,8 @@ const ( BCNLATHYDROJobKind JobKind = "fm_bcnlat_hydro" BCNLATIENCJobKind JobKind = "fm_bcnlat_ienc" - BOYLATJobKind JobKind = "fm_boylat" + BOYLATHYDROJobKind JobKind = "fm_boylat_hydro" + BOYLATIENCJobKind JobKind = "fm_boylat_ienc" BOYCARJobKind JobKind = "fm_boycar" BOYSAWJobKind JobKind = "fm_boysaw" BOYSPPJobKind JobKind = "fm_boyspp" @@ -208,19 +217,35 @@ ), }) - RegisterJobCreator(BOYLATJobKind, + RegisterJobCreator(BOYLATHYDROJobKind, &PointWFSJobCreator{ - description: "fairway marks boylat", - depends: [2][]string{{"fairway_marks_boylat"}, {}}, + description: "fairway marks boylat (HYDRO)", + depends: [2][]string{{"fairway_marks_boylat_hydro"}, {}}, newConsumer: newSQLConsumer( prepareStmnts( - createInsertFMSQL("boylat", + createInsertFMSQL("boylat_hydro", "colour", "colpat", "conrad", "marsys", "boyshp", "catlam"), ), - consumeBOYLAT, - createInvalidation("boylat"), - func() interface{} { return new(boylatProperties) }, + consumeBOYLATHydro, + createInvalidation("boylat_hydro"), + func() interface{} { return new(boylatHydroProperties) }, + ), + }) + + RegisterJobCreator(BOYLATIENCJobKind, + &PointWFSJobCreator{ + description: "fairway marks boylat (IENC)", + depends: [2][]string{{"fairway_marks_boylat_ienc"}, {}}, + newConsumer: newSQLConsumer( + prepareStmnts( + createInsertFMSQL("boylat_ienc", + "colour", "colpat", "conrad", + "marsys", "boyshp", "catlam"), + ), + consumeBOYLATIenc, + createInvalidation("boylat_ienc"), + func() interface{} { return new(boylatIencProperties) }, ), }) @@ -616,16 +641,13 @@ return nil } -func consumeBOYLAT( +func consumeBOYLATHydro( spc *SQLPointConsumer, points pointSlice, properties interface{}, epsg int, ) error { - props := properties.(*boylatProperties) - - marsys := coalesceInt64(props.HydroMarsys, props.IENCMarsys) - catlam := coalesceInt64(props.HydroCatlam, props.IENCCatlam) + props := properties.(*boylatHydroProperties) var fmid int64 err := spc.savepoint(func() error { @@ -649,9 +671,55 @@ props.Colour, props.Colpat, props.Conrad, - marsys, + props.Marsys, props.Boyshp, - catlam, + props.Catlam, + ).Scan(&fmid) + }) + switch { + case err == sql.ErrNoRows: + return ErrFeatureDuplicated + // ignore -> filtered by responsibility_areas + case err != nil: + spc.feedback.Error(pgxutils.ReadableError{Err: err}.Error()) + return ErrFeatureIgnored + } + return nil +} + +func consumeBOYLATIenc( + spc *SQLPointConsumer, + points pointSlice, + properties interface{}, + epsg int, +) error { + props := properties.(*boylatIencProperties) + + var fmid int64 + err := spc.savepoint(func() error { + return spc.stmts[0].QueryRowContext( + spc.ctx, + points.asWKB(), + epsg, + props.Datsta, + props.Datend, + props.Persta, + props.Perend, + props.Objnam, + props.Nobjnm, + props.Inform, + props.Ninfom, + props.Scamin, + props.Picrep, + props.Txtdsc, + props.Sordat, + props.Sorind, + props.Colour, + props.Colpat, + props.Conrad, + props.Marsys, + props.Boyshp, + props.Catlam, ).Scan(&fmid) }) switch {
--- a/pkg/imports/modelconvert.go Fri Feb 28 12:01:03 2020 +0100 +++ b/pkg/imports/modelconvert.go Fri Feb 28 13:43:52 2020 +0100 @@ -30,7 +30,8 @@ BCNLATHYDROJobKind: func() interface{} { return FindJobCreator(BCNLATHYDROJobKind).Create() }, BCNLATIENCJobKind: func() interface{} { return FindJobCreator(BCNLATIENCJobKind).Create() }, BOYCARJobKind: func() interface{} { return FindJobCreator(BOYCARJobKind).Create() }, - BOYLATJobKind: func() interface{} { return FindJobCreator(BOYLATJobKind).Create() }, + BOYLATHYDROJobKind: func() interface{} { return FindJobCreator(BOYLATHYDROJobKind).Create() }, + BOYLATIENCJobKind: func() interface{} { return FindJobCreator(BOYLATIENCJobKind).Create() }, BOYSAWJobKind: func() interface{} { return FindJobCreator(BOYSAWJobKind).Create() }, BOYSPPJobKind: func() interface{} { return FindJobCreator(BOYSPPJobKind).Create() }, DAYMARJobKind: func() interface{} { return FindJobCreator(DAYMARJobKind).Create() },
--- a/schema/gemma.sql Fri Feb 28 12:01:03 2020 +0100 +++ b/schema/gemma.sql Fri Feb 28 13:43:52 2020 +0100 @@ -943,7 +943,6 @@ -- Additional attributes for IENC feature BOYLAT CREATE TABLE fairway_marks_boylat ( - id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, colour varchar, colpat varchar, conrad int, @@ -951,15 +950,33 @@ boyshp int, catlam int ) INHERITS (fairway_marks) + + CREATE TABLE fairway_marks_boylat_hydro ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY + ) INHERITS (fairway_marks_boylat) -- Prevent identical entries using composite type comparison -- (i.e. considering two NULL values in a field equal): - CREATE UNIQUE INDEX fairway_marks_boylat_distinct_rows - ON fairway_marks_boylat + CREATE UNIQUE INDEX fairway_marks_boylat_hydro_distinct_rows + ON fairway_marks_boylat_hydro ((CAST((validity, last_found, geom, datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom, scamin, picrep, txtdsc, sordat, sorind, - 0, colour, colpat, conrad, marsys, boyshp, catlam - ) AS fairway_marks_boylat) + colour, colpat, conrad, marsys, boyshp, catlam, 0 + ) AS fairway_marks_boylat_hydro) + )) + + CREATE TABLE fairway_marks_boylat_ienc ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY + ) INHERITS (fairway_marks_boylat) + -- Prevent identical entries using composite type comparison + -- (i.e. considering two NULL values in a field equal): + CREATE UNIQUE INDEX fairway_marks_boylat_ienc_distinct_rows + ON fairway_marks_boylat_ienc + ((CAST((validity, last_found, geom, + datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom, + scamin, picrep, txtdsc, sordat, sorind, + colour, colpat, conrad, marsys, boyshp, catlam, 0 + ) AS fairway_marks_boylat_ienc) )) -- Additional attributes for IENC feature BOYSAW
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schema/updates/1407/01.distinguish_boylat_hydro_ienc.sql Fri Feb 28 13:43:52 2020 +0100 @@ -0,0 +1,50 @@ +CREATE TABLE waterway.fairway_marks_boylat_new ( + colour varchar, + colpat varchar, + conrad int, + marsys int, + boyshp int, + catlam int +) INHERITS (waterway.fairway_marks); + +CREATE TABLE waterway.fairway_marks_boylat_hydro ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY +) INHERITS (waterway.fairway_marks_boylat_new); +CREATE UNIQUE INDEX fairway_marks_boylat_hydro_distinct_rows + ON waterway.fairway_marks_boylat_hydro + ((CAST((validity, last_found, geom, + datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom, + scamin, picrep, txtdsc, sordat, sorind, + colour, colpat, conrad, marsys, boyshp, catlam, 0 + ) AS waterway.fairway_marks_boylat_hydro) + )); + +CREATE TABLE waterway.fairway_marks_boylat_ienc ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY +) INHERITS (waterway.fairway_marks_boylat_new); +CREATE UNIQUE INDEX fairway_marks_boylat_ienc_distinct_rows + ON waterway.fairway_marks_boylat_ienc + ((CAST((validity, last_found, geom, + datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom, + scamin, picrep, txtdsc, sordat, sorind, + colour, colpat, conrad, marsys, boyshp, catlam, 0 + ) AS waterway.fairway_marks_boylat_ienc) + )); + +-- Assume all features are IENC features, since there are currently only +-- very few features in the data source for HYDRO features +INSERT INTO waterway.fairway_marks_boylat_ienc + OVERRIDING USER VALUE + SELECT validity, last_found, geom, + datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom, + scamin, picrep, txtdsc, sordat, sorind, + colour, colpat, conrad, marsys, boyshp, catlam, id + FROM waterway.fairway_marks_boylat; + +-- Finally +DROP TABLE waterway.fairway_marks_boylat; +ALTER TABLE waterway.fairway_marks_boylat_new RENAME TO fairway_marks_boylat; + +GRANT SELECT on ALL tables in schema waterway TO waterway_user; +GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA waterway + TO waterway_admin;