Skip to content

Commit e8d7edf

Browse files
authored
Merge pull request #10 from PDOK/PDOK-17800-wms-capabilities-generator-input
Pdok 17800 wms capabilities generator input
2 parents 27774e1 + d61bcc9 commit e8d7edf

File tree

10 files changed

+1019
-23
lines changed

10 files changed

+1019
-23
lines changed

api/v2beta1/wms_conversion.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ func (src *WMS) ConvertTo(dstRaw conversion.Hub) error {
4343
dst := dstRaw.(*pdoknlv3.WMS)
4444
log.Printf("ConvertTo: Converting WMS from Spoke version v2beta1 to Hub version v3;"+
4545
"source: %s/%s, target: %s/%s", src.Namespace, src.Name, dst.Namespace, dst.Name)
46+
V3HubFromV2(src, dst)
47+
48+
return nil
49+
}
50+
51+
func V3HubFromV2(src *WMS, target *pdoknlv3.WMS) {
52+
dst := target
4653

4754
dst.ObjectMeta = src.ObjectMeta
4855
dst.Annotations[SERVICE_METADATA_IDENTIFIER_ANNOTATION] = src.Spec.Service.MetadataIdentifier
@@ -126,8 +133,6 @@ func (src *WMS) ConvertTo(dstRaw conversion.Hub) error {
126133
}
127134

128135
dst.Spec.Service = service
129-
130-
return nil
131136
}
132137

133138
// ConvertFrom converts the Hub version (v3) to this WMS (v2beta1).

api/v2beta1/wms_conversion_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package v2beta1
2+
3+
import (
4+
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
5+
"github.com/stretchr/testify/assert"
6+
"sigs.k8s.io/yaml"
7+
"testing"
8+
)
9+
10+
func TestV2ToV3(t *testing.T) {
11+
input := "apiVersion: pdok.nl/v2beta1\nkind: WMS\nmetadata:\n name: rws-nwbwegen-v1-0\n labels:\n dataset-owner: rws\n dataset: nwbwegen\n service-version: v1_0\n service-type: wms\n annotations:\n lifecycle-phase: prod\n service-bundle-id: b39c152b-393b-52f5-a50c-e1ffe904b6fb\nspec:\n general:\n datasetOwner: rws\n dataset: nwbwegen\n serviceVersion: v1_0\n kubernetes:\n healthCheck:\n boundingbox: 135134.89,457152.55,135416.03,457187.82\n resources:\n limits:\n ephemeralStorage: 1535Mi\n memory: 4G\n requests:\n cpu: 2000m\n ephemeralStorage: 1535Mi\n memory: 4G\n options:\n automaticCasing: true\n disableWebserviceProxy: false\n includeIngress: true\n validateRequests: true\n service:\n title: NWB - Wegen WMS\n abstract:\n Dit is de web map service van het Nationaal Wegen Bestand (NWB) - wegen.\n Deze dataset bevat alleen de wegvakken en hectometerpunten. Het Nationaal Wegen\n Bestand - Wegen is een digitaal geografisch bestand van alle wegen in Nederland.\n Opgenomen zijn alle wegen die worden beheerd door wegbeheerders als het Rijk,\n provincies, gemeenten en waterschappen, echter alleen voor zover deze zijn voorzien\n van een straatnaam of nummer.\n authority:\n name: rws\n url: https://www.rijkswaterstaat.nl\n dataEPSG: EPSG:28992\n extent: -59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961\n inspire: true\n keywords:\n - Vervoersnetwerken\n - Menselijke gezondheid en veiligheid\n - Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai)\n - Nationaal\n - Voertuigen\n - Verkeer\n - Wegvakken\n - Hectometerpunten\n - HVD\n - Mobiliteit\n stylingAssets:\n configMapRefs:\n - name: includes\n keys:\n - nwb_wegen_hectopunten.symbol\n - hectopunten.style\n - wegvakken.style\n blobKeys:\n - resources/fonts/liberation-sans.ttf\n layers:\n - abstract:\n Deze laag bevat de wegvakken uit het Nationaal Wegen bestand (NWB)\n en geeft gedetailleerde informatie per wegvak zoals straatnaam, wegnummer,\n routenummer, wegbeheerder, huisnummers, enz. weer.\n data:\n gpkg:\n columns:\n - objectid\n - wvk_id\n - wvk_begdat\n - jte_id_beg\n - jte_id_end\n - wegbehsrt\n - wegnummer\n - wegdeelltr\n - hecto_lttr\n - bst_code\n - rpe_code\n - admrichtng\n - rijrichtng\n - stt_naam\n - stt_bron\n - wpsnaam\n - gme_id\n - gme_naam\n - hnrstrlnks\n - hnrstrrhts\n - e_hnr_lnks\n - e_hnr_rhts\n - l_hnr_lnks\n - l_hnr_rhts\n - begafstand\n - endafstand\n - beginkm\n - eindkm\n - pos_tv_wol\n - wegbehcode\n - wegbehnaam\n - distrcode\n - distrnaam\n - dienstcode\n - dienstnaam\n - wegtype\n - wgtype_oms\n - routeltr\n - routenr\n - routeltr2\n - routenr2\n - routeltr3\n - routenr3\n - routeltr4\n - routenr4\n - wegnr_aw\n - wegnr_hmp\n - geobron_id\n - geobron_nm\n - bronjaar\n - openlr\n - bag_orl\n - frc\n - fow\n - alt_naam\n - alt_nr\n - rel_hoogte\n - st_lengthshape\n geometryType: MultiLineString\n blobKey: geopackages/rws/nwbwegen/410a6d1e-e767-41b4-ba8d-9e1e955dd013/1/nwb_wegen.gpkg\n table: wegvakken\n datasetMetadataIdentifier: a9b7026e-0a81-4813-93bd-ba49e6f28502\n keywords:\n - Vervoersnetwerken\n - Menselijke gezondheid en veiligheid\n - Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai)\n - Nationaal\n - Voertuigen\n - Verkeer\n - Wegvakken\n maxScale: 50000.0\n minScale: 1.0\n name: wegvakken\n sourceMetadataIdentifier: 8f0497f0-dbd7-4bee-b85a-5fdec484a7ff\n styles:\n - name: wegvakken\n title: NWB - Wegvakken\n visualization: wegvakken.style\n title: Wegvakken\n visible: true\n - abstract:\n Deze laag bevat de hectopunten uit het Nationaal Wegen Bestand (NWB)\n en geeft gedetailleerde informatie per hectopunt zoals hectometrering, afstand,\n zijde en hectoletter weer.\n data:\n gpkg:\n columns:\n - objectid\n - hectomtrng\n - afstand\n - wvk_id\n - wvk_begdat\n - zijde\n - hecto_lttr\n geometryType: MultiPoint\n blobKey: geopackages/rws/nwbwegen/410a6d1e-e767-41b4-ba8d-9e1e955dd013/1/nwb_wegen.gpkg\n table: hectopunten\n datasetMetadataIdentifier: a9b7026e-0a81-4813-93bd-ba49e6f28502\n keywords:\n - Vervoersnetwerken\n - Menselijke gezondheid en veiligheid\n - Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai)\n - Nationaal\n - Voertuigen\n - Verkeer\n - Hectometerpunten\n maxScale: 50000.0\n minScale: 1.0\n name: hectopunten\n sourceMetadataIdentifier: 8f0497f0-dbd7-4bee-b85a-5fdec484a7ff\n styles:\n - name: hectopunten\n title: NWB - Hectopunten\n visualization: hectopunten.style\n title: Hectopunten\n visible: true\n metadataIdentifier: f2437a92-ddd3-4777-a1bc-fdf4b4a7fcb8\n"
12+
var v2wms WMS
13+
err := yaml.Unmarshal([]byte(input), &v2wms)
14+
assert.NoError(t, err)
15+
var target pdoknlv3.WMS
16+
V3HubFromV2(&v2wms, &target)
17+
assert.Equal(t, "NWB - Wegen WMS", target.Spec.Service.Title)
18+
a := 0
19+
_ = a
20+
}

api/v3/shared_types.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ type WMSWFS interface {
3535
HasPostgisData() bool
3636
// Sha1 hash of the objects name
3737
ID() string
38+
URLPath() string
3839
}
3940

4041
type Mapfile struct {
@@ -112,18 +113,7 @@ func GetHost() string {
112113
}
113114

114115
func GetBaseURLPath[T WMSWFS](o T) string {
115-
var serviceURL string
116-
switch any(o).(type) {
117-
case *WFS:
118-
if WFS, ok := any(o).(*WFS); ok {
119-
serviceURL = WFS.Spec.Service.URL
120-
}
121-
case *WMS:
122-
if WMS, ok := any(o).(*WMS); ok {
123-
serviceURL = WMS.Spec.Service.URL
124-
}
125-
}
126-
116+
serviceURL := o.URLPath()
127117
parsed, _ := url.Parse(serviceURL)
128118
return strings.TrimPrefix(parsed.Path, "/")
129119
}

api/v3/wfs_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,7 @@ func (wfs *WFS) Options() *Options {
150150
func (wfs *WFS) ID() string {
151151
return Sha1HashOfName(wfs)
152152
}
153+
154+
func (wfs *WFS) URLPath() string {
155+
return wfs.Spec.Service.URL
156+
}

api/v3/wms_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,3 +267,7 @@ func (wms *WMS) Options() *Options {
267267
func (wms *WMS) ID() string {
268268
return Sha1HashOfName(wms)
269269
}
270+
271+
func (wms *WMS) URLPath() string {
272+
return wms.Spec.Service.URL
273+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/onsi/ginkgo/v2 v2.22.2
1212
github.com/onsi/gomega v1.36.2
1313
github.com/pdok/ogc-capabilities-generator v1.0.0-beta5
14-
github.com/pdok/ogc-specifications v1.0.0-beta4
14+
github.com/pdok/ogc-specifications v1.0.0-beta5
1515
github.com/pdok/smooth-operator v0.0.9
1616
github.com/traefik/traefik/v3 v3.3.4
1717
k8s.io/api v0.32.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,8 @@ github.com/pdok/ogc-capabilities-generator v1.0.0-beta5 h1:nwkIbFcUW4FIYnf6fLfzp
362362
github.com/pdok/ogc-capabilities-generator v1.0.0-beta5/go.mod h1:qG2auFy7MDL8Zp1eOfdaUJat+jNW5oLGVd+g7Mbth4Q=
363363
github.com/pdok/ogc-specifications v1.0.0-beta4 h1:/Dgi6ArgR0YPCkErpNyCQTCYMkH/cIfWe+VCoUUZZN0=
364364
github.com/pdok/ogc-specifications v1.0.0-beta4/go.mod h1:YDngwkwrWOfc5MYnEYseiv97K1Y9bZXlVzwi/8EaIl8=
365+
github.com/pdok/ogc-specifications v1.0.0-beta5 h1:j7JrXUeW55mVU9ZmJ67r8V6DhbKdgTDiGE1YKFpRWx4=
366+
github.com/pdok/ogc-specifications v1.0.0-beta5/go.mod h1:YDngwkwrWOfc5MYnEYseiv97K1Y9bZXlVzwi/8EaIl8=
365367
github.com/pdok/smooth-operator v0.0.9 h1:UaOPc23BaHDWzBatSWnOxEjffV0WMiy1LPUkRdqdIGI=
366368
github.com/pdok/smooth-operator v0.0.9/go.mod h1:oZWFuIKJGjN/C6ocgMNfMZ7SbLQi+N0qaWj7j95Wdec=
367369
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=

internal/controller/capabilitiesgenerator/capabilities_generator.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package capabilitiesgenerator
22

33
import (
4-
"errors"
54
"fmt"
65

76
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
@@ -37,8 +36,8 @@ func GetInput[W pdoknlv3.WMSWFS](webservice W, ownerInfo *smoothoperatorv1.Owner
3736
return createInputForWFS(WFS, ownerInfo)
3837
}
3938
case *pdoknlv3.WMS:
40-
if _, ok := any(webservice).(*pdoknlv3.WMS); ok {
41-
return "", errors.New("not implemented for WMS")
39+
if WMS, ok := any(webservice).(*pdoknlv3.WMS); ok {
40+
return createInputForWMS(WMS, ownerInfo)
4241
}
4342
default:
4443
return "", fmt.Errorf("unexpected input, webservice should be of type WFS or WMS, webservice: %v", webservice)
@@ -58,3 +57,16 @@ func createInputForWFS(wfs *pdoknlv3.WFS, ownerInfo *smoothoperatorv1.OwnerInfo)
5857

5958
return string(yamlInput), nil
6059
}
60+
61+
func createInputForWMS(wms *pdoknlv3.WMS, ownerInfo *smoothoperatorv1.OwnerInfo) (config string, err error) {
62+
input, err := MapWMSToCapabilitiesGeneratorInput(wms, ownerInfo)
63+
if err != nil {
64+
return "", err
65+
}
66+
yamlInput, err := yaml.Marshal(input)
67+
if err != nil {
68+
return "", fmt.Errorf("failed to marshal the capabilities generator input to yaml: %w", err)
69+
}
70+
71+
return string(yamlInput), nil
72+
}

0 commit comments

Comments
 (0)