From 9c6d22dce4b22debacfb82e601e4b0603f426634 Mon Sep 17 00:00:00 2001 From: damienmulder Date: Fri, 17 Jul 2026 13:07:07 +0200 Subject: [PATCH 1/3] Use depth first layer order for OGC webservice proxy config --- api/v3/wms_types.go | 12 +++ .../ogc_webservice_proxy.go | 2 +- .../ogc_webservice_proxy_test.go | 2 +- .../expected/named-toplayer-varied-depth.yaml | 16 ++++ .../input/named-toplayer-varied-depth.yaml | 76 +++++++++++++++++++ 5 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 internal/controller/ogcwebserviceproxy/test_data/expected/named-toplayer-varied-depth.yaml create mode 100644 internal/controller/ogcwebserviceproxy/test_data/input/named-toplayer-varied-depth.yaml diff --git a/api/v3/wms_types.go b/api/v3/wms_types.go index 43062af..fae8471 100644 --- a/api/v3/wms_types.go +++ b/api/v3/wms_types.go @@ -438,6 +438,18 @@ func (layer *Layer) GetAllSublayers() []Layer { return layers } +// GetAllSublayersDepthFirst - get all sublayers of a layer depth first, the result does not include the layer itself +func (layer *Layer) GetAllSublayersDepthFirst() []Layer { + layers := make([]Layer, 0) + + for _, childLayer := range layer.Layers { + layers = append(layers, childLayer) + layers = append(layers, childLayer.GetAllSublayers()...) + } + + return layers +} + func (wmsService *WMSService) GetParentLayer(layer Layer) *Layer { if wmsService.Layer.Layers == nil { return nil diff --git a/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy.go b/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy.go index 408d83d..62dc2b5 100644 --- a/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy.go +++ b/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy.go @@ -68,7 +68,7 @@ func GetConfig(wms *pdoknlv3.WMS) (config string, err error) { func MapWMSToOgcWebserviceProxyConfig(wms *pdoknlv3.WMS) (config Config, err error) { dataLayersForGroupLayer := func(l pdoknlv3.Layer) []string { var dataLayers []string - for _, childLayer := range l.GetAllSublayers() { + for _, childLayer := range l.GetAllSublayersDepthFirst() { if childLayer.IsDataLayer() { dataLayers = append(dataLayers, *childLayer.Name) } diff --git a/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy_test.go b/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy_test.go index 3cda6b2..3edc809 100644 --- a/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy_test.go +++ b/internal/controller/ogcwebserviceproxy/ogc_webservice_proxy_test.go @@ -11,7 +11,7 @@ import ( ) func TestGetConfig(t *testing.T) { - tests := []string{"named-toplayer", "unnamed-toplayer"} + tests := []string{"named-toplayer", "unnamed-toplayer", "named-toplayer-varied-depth"} for _, tt := range tests { input, err := os.ReadFile("test_data/input/" + tt + ".yaml") diff --git a/internal/controller/ogcwebserviceproxy/test_data/expected/named-toplayer-varied-depth.yaml b/internal/controller/ogcwebserviceproxy/test_data/expected/named-toplayer-varied-depth.yaml new file mode 100644 index 0000000..7607eb3 --- /dev/null +++ b/internal/controller/ogcwebserviceproxy/test_data/expected/named-toplayer-varied-depth.yaml @@ -0,0 +1,16 @@ +grouplayers: + grouplayer-1: + - datalayer-1 + - datalayer-2 + grouplayer-2: + - datalayer-1 + - datalayer-2 + - datalayer-3 + - datalayer-4 + - datalayer-5 + - datalayer-6 + - datalayer-7 + grouplayer-3: + - datalayer-4 + - datalayer-5 + - datalayer-6 \ No newline at end of file diff --git a/internal/controller/ogcwebserviceproxy/test_data/input/named-toplayer-varied-depth.yaml b/internal/controller/ogcwebserviceproxy/test_data/input/named-toplayer-varied-depth.yaml new file mode 100644 index 0000000..8f8e79d --- /dev/null +++ b/internal/controller/ogcwebserviceproxy/test_data/input/named-toplayer-varied-depth.yaml @@ -0,0 +1,76 @@ +metadata: +spec: + service: + abstract: "" + dataEPSG: "" + keywords: null + layer: + layers: + - layers: + - data: + gpkg: + blobKey: blob-1 + columns: null + geometryType: "" + tableName: "" + name: datalayer-1 + visible: false + - data: + gpkg: + blobKey: blob-2 + columns: null + geometryType: "" + tableName: "" + name: datalayer-2 + visible: false + name: grouplayer-1 + visible: false + - data: + gpkg: + blobKey: blob-3 + columns: null + geometryType: "" + tableName: "" + name: datalayer-3 + visible: false + - layers: + - data: + gpkg: + blobKey: blob-4 + columns: null + geometryType: "" + tableName: "" + name: datalayer-4 + visible: false + - data: + gpkg: + blobKey: blob-5 + columns: null + geometryType: "" + tableName: "" + name: datalayer-5 + visible: false + - data: + gpkg: + blobKey: blob-6 + columns: null + geometryType: "" + tableName: "" + name: datalayer-6 + visible: false + name: grouplayer-3 + visible: false + - data: + gpkg: + blobKey: blob-7 + columns: null + geometryType: "" + tableName: "" + name: datalayer-7 + visible: false + name: grouplayer-2 + visible: false + ownerInfoRef: "" + prefix: "" + title: "" + url: "http://test.test/test" \ No newline at end of file From 8609e7f5287bb674563a460df02b4d88214a80a3 Mon Sep 17 00:00:00 2001 From: damienmulder Date: Fri, 17 Jul 2026 13:21:27 +0200 Subject: [PATCH 2/3] Fix tests --- .../wms/complete/expected/configmap-ogc-webservice-proxy.yaml | 2 +- .../controller/test_data/wms/complete/expected/deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/controller/test_data/wms/complete/expected/configmap-ogc-webservice-proxy.yaml b/internal/controller/test_data/wms/complete/expected/configmap-ogc-webservice-proxy.yaml index 06d367d..983afc9 100644 --- a/internal/controller/test_data/wms/complete/expected/configmap-ogc-webservice-proxy.yaml +++ b/internal/controller/test_data/wms/complete/expected/configmap-ogc-webservice-proxy.yaml @@ -21,7 +21,7 @@ metadata: service-type: wms service-version: v1_0 theme: '2016' - name: complete-wms-ogc-webservice-proxy-8d98h664bh + name: complete-wms-ogc-webservice-proxy-527f8545k9 namespace: default ownerReferences: - apiVersion: pdok.nl/v3 diff --git a/internal/controller/test_data/wms/complete/expected/deployment.yaml b/internal/controller/test_data/wms/complete/expected/deployment.yaml index bbdb514..c7b637b 100644 --- a/internal/controller/test_data/wms/complete/expected/deployment.yaml +++ b/internal/controller/test_data/wms/complete/expected/deployment.yaml @@ -374,7 +374,7 @@ spec: defaultMode: 420 name: mapserver - configMap: - name: complete-wms-ogc-webservice-proxy-8d98h664bh + name: complete-wms-ogc-webservice-proxy-527f8545k9 defaultMode: 420 name: ogc-webservice-proxy-config - configMap: From 55cdc58cb0f6d204fa0b97bca4e1c38a061a98dc Mon Sep 17 00:00:00 2001 From: damienmulder Date: Mon, 20 Jul 2026 09:44:11 +0200 Subject: [PATCH 3/3] Same ordering for nested sublayers --- api/v3/wms_types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v3/wms_types.go b/api/v3/wms_types.go index fae8471..a6024ab 100644 --- a/api/v3/wms_types.go +++ b/api/v3/wms_types.go @@ -444,7 +444,7 @@ func (layer *Layer) GetAllSublayersDepthFirst() []Layer { for _, childLayer := range layer.Layers { layers = append(layers, childLayer) - layers = append(layers, childLayer.GetAllSublayers()...) + layers = append(layers, childLayer.GetAllSublayersDepthFirst()...) } return layers