Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions api/v2beta1/wfs_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,16 @@
log.Printf("ConvertTo: Converting WFS from Spoke version v2beta1 to Hub version v3;"+
"source: %s/%s, target: %s/%s", src.Namespace, src.Name, dst.Namespace, dst.Name)

return src.ToV3(dst)
}

func (src *WFS) ToV3(dst *pdoknlv3.WFS) error {
dst.ObjectMeta = src.ObjectMeta

// Set LifeCycle if defined
if src.Spec.Kubernetes.Lifecycle != nil && src.Spec.Kubernetes.Lifecycle.TTLInDays != nil {
dst.Spec.Lifecycle = &sharedModel.Lifecycle{
TTLInDays: Pointer(int32(*src.Spec.Kubernetes.Lifecycle.TTLInDays)),

Check failure on line 52 in api/v2beta1/wfs_conversion.go

View workflow job for this annotation

GitHub Actions / Run on Ubuntu

G115: integer overflow conversion int -> int32 (gosec)

Check failure on line 52 in api/v2beta1/wfs_conversion.go

View workflow job for this annotation

GitHub Actions / Run on Ubuntu

G115: integer overflow conversion int -> int32 (gosec)
}
}

Expand Down
18 changes: 9 additions & 9 deletions api/v2beta1/wms_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ func (src *WMS) ConvertTo(dstRaw conversion.Hub) error {
dst := dstRaw.(*pdoknlv3.WMS)
log.Printf("ConvertTo: Converting WMS from Spoke version v2beta1 to Hub version v3;"+
"source: %s/%s, target: %s/%s", src.Namespace, src.Name, dst.Namespace, dst.Name)
V3HubFromV2(src, dst)
src.ToV3(dst)

return nil
}

func V3HubFromV2(src *WMS, target *pdoknlv3.WMS) {
func (src *WMS) ToV3(target *pdoknlv3.WMS) {
dst := target

dst.ObjectMeta = src.ObjectMeta
Expand Down Expand Up @@ -319,15 +319,15 @@ func (v2Service WMSService) MapLayersToV3() pdoknlv3.Layer {
Title: &v2Service.Title,
Abstract: &v2Service.Abstract,
Keywords: v2Service.Keywords,
Layers: &[]pdoknlv3.Layer{},
Layers: []pdoknlv3.Layer{},
BoundingBoxes: boundingBoxes,
Visible: smoothoperatorutils.Pointer(true),
}

// adding the bottom layers to the middle layers they are grouped by
for _, layer := range notGroupedLayers {
bottomLayers := groupedLayers[*layer.Name]
layer.Layers = &bottomLayers
layer.Layers = bottomLayers
middleLayers = append(middleLayers, layer)
}
}
Expand All @@ -339,11 +339,11 @@ func (v2Service WMSService) MapLayersToV3() pdoknlv3.Layer {
if topLayer.Name != nil {
for _, layer := range groupedLayers[*topLayer.Name] {
bottomLayers := groupedLayers[*layer.Name]
layer.Layers = &bottomLayers
layer.Layers = bottomLayers
middleLayers = append(middleLayers, layer)
}
}
topLayer.Layers = &middleLayers
topLayer.Layers = middleLayers

return *topLayer
}
Expand All @@ -356,7 +356,7 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
Keywords: v2Layer.Keywords,
LabelNoClip: v2Layer.LabelNoClip,
Styles: []pdoknlv3.Style{},
Layers: &[]pdoknlv3.Layer{},
Layers: []pdoknlv3.Layer{},
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
MinScaleDenominator: nil,
MaxScaleDenominator: nil,
Expand Down Expand Up @@ -429,7 +429,7 @@ func mapV3LayerToV2Layers(v3Layer pdoknlv3.Layer, parent *pdoknlv3.Layer, servic
if parent == nil && v3Layer.Name == nil {
// Default top layer, do not include in v2 layers
if v3Layer.Layers != nil {
for _, childLayer := range *v3Layer.Layers {
for _, childLayer := range v3Layer.Layers {
layers = append(layers, mapV3LayerToV2Layers(childLayer, nil, serviceEPSG)...)
}
}
Expand Down Expand Up @@ -503,7 +503,7 @@ func mapV3LayerToV2Layers(v3Layer pdoknlv3.Layer, parent *pdoknlv3.Layer, servic
layers = append(layers, v2Layer)

if v3Layer.Layers != nil {
for _, childLayer := range *v3Layer.Layers {
for _, childLayer := range v3Layer.Layers {
layers = append(layers, mapV3LayerToV2Layers(childLayer, &v3Layer, serviceEPSG)...)
}
}
Expand Down
6 changes: 3 additions & 3 deletions api/v2beta1/wms_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import (
func TestV2ToV3(t *testing.T) {
//nolint:misspell
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"
var v2wms WMS
err := yaml.Unmarshal([]byte(input), &v2wms)
v2wms := &WMS{}
err := yaml.Unmarshal([]byte(input), v2wms)
assert.NoError(t, err)
var target pdoknlv3.WMS
V3HubFromV2(&v2wms, &target)
v2wms.ToV3(&target)
assert.Equal(t, "NWB - Wegen WMS", target.Spec.Service.Title)
a := 0
_ = a
Expand Down
1 change: 1 addition & 0 deletions api/v3/wfs_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ type WFSService struct {
// AccessConstraints URL
// +kubebuilder:validation:Pattern:="https?://"
// +kubebuilder:default="https://creativecommons.org/publicdomain/zero/1.0/deed.nl"

// +kubebuilder:validation:MinLength:=1
AccessConstraints string `json:"accessConstraints"`

Expand Down
6 changes: 3 additions & 3 deletions api/v3/wfs_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func (wfs *WFS) ValidateCreate() ([]string, error) {
reasons = append(reasons, fmt.Sprintf("%v", err))
}

validateWFS(wfs, &warnings, &reasons)
ValidateWFS(wfs, &warnings, &reasons)

if len(reasons) > 0 {
return warnings, fmt.Errorf("%s", strings.Join(reasons, ". "))
Expand All @@ -41,7 +41,7 @@ func (wfs *WFS) ValidateUpdate(wfsOld *WFS) ([]string, error) {
reasons = append(reasons, "services cannot change from inspire to not inspire or the other way around")
}

validateWFS(wfs, &warnings, &reasons)
ValidateWFS(wfs, &warnings, &reasons)

if len(reasons) > 0 {
return warnings, fmt.Errorf("%s", strings.Join(reasons, ". "))
Expand All @@ -50,7 +50,7 @@ func (wfs *WFS) ValidateUpdate(wfsOld *WFS) ([]string, error) {
return warnings, nil
}

func validateWFS(wfs *WFS, warnings *[]string, reasons *[]string) {
func ValidateWFS(wfs *WFS, warnings *[]string, reasons *[]string) {
if strings.Contains(wfs.GetName(), "wfs") {
*warnings = append(*warnings, sharedValidation.FormatValidationWarning("name should not contain wfs", wfs.GroupVersionKind(), wfs.GetName()))
}
Expand Down
41 changes: 20 additions & 21 deletions api/v3/wms_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,9 @@ type WMSService struct {
Fees *string `json:"fees,omitempty"`

// AccessConstraints (licence) that are applicable to the service
// +kubebuilder:validation:Pattern:=`https?://.*`
// +kubebuilder:default="https://creativecommons.org/publicdomain/zero/1.0/deed.nl"
AccessConstraints string `json:"accessConstraints"`
AccessConstraints string `json:"accessConstraints,omitempty"`

// TODO??
MaxSize *int32 `json:"maxSize,omitempty"`
Expand Down Expand Up @@ -137,7 +138,7 @@ type ConfigMapRef struct {
Keys []string `json:"keys,omitempty"`
}

// +kubebuilder:validation:XValidation:message="A layer can only have data or layers, not both.", rule="has(self.data) || has(self.layers)"
// +kubebuilder:validation:XValidation:message="A layer should have sublayers or data, not both", rule="(has(self.data) || has(self.layers)) && !(has(self.data) && has(self.layers))"
type Layer struct {
// Name of the layer, required for layers on the 2nd or 3rd level
// +kubebuilder:validations:MinLength:=1
Expand Down Expand Up @@ -187,7 +188,7 @@ type Layer struct {
Data *Data `json:"data,omitempty"`

// Sublayers of the layer
Layers *[]Layer `json:"layers,omitempty"`
Layers []Layer `json:"layers,omitempty"`
}

type WMSBoundingBox struct {
Expand Down Expand Up @@ -322,9 +323,9 @@ func (wmsService *WMSService) GetAnnotatedLayers() []AnnotatedLayer {
}
result = append(result, annotatedTopLayer)

for _, topLayerChild := range *topLayer.Layers {
for _, topLayerChild := range topLayer.Layers {
groupName := topLayer.Name
isGroupLayer := topLayerChild.Layers != nil && len(*topLayerChild.Layers) > 0
isGroupLayer := topLayerChild.Layers != nil && len(topLayerChild.Layers) > 0
isDataLayer := !isGroupLayer
result = append(result, AnnotatedLayer{
GroupName: groupName,
Expand All @@ -334,8 +335,8 @@ func (wmsService *WMSService) GetAnnotatedLayers() []AnnotatedLayer {
Layer: topLayerChild,
})

if topLayerChild.Layers != nil && len(*topLayerChild.Layers) > 0 {
for _, middleLayerChild := range *topLayerChild.Layers {
if len(topLayerChild.Layers) > 0 {
for _, middleLayerChild := range topLayerChild.Layers {
groupName = topLayerChild.Name
result = append(result, AnnotatedLayer{
GroupName: groupName,
Expand All @@ -357,10 +358,8 @@ func (wmsService *WMSService) GetAllLayers() (layers []Layer) {

func (layer *Layer) GetAllLayers() (layers []Layer) {
layers = append(layers, *layer)
if layer.Layers != nil {
for _, childLayer := range *layer.Layers {
layers = append(layers, childLayer.GetAllLayers()...)
}
for _, childLayer := range layer.Layers {
layers = append(layers, childLayer.GetAllLayers()...)
}
return
}
Expand All @@ -370,7 +369,7 @@ func (layer *Layer) GetParent(candidateLayer *Layer) *Layer {
return nil
}

for _, childLayer := range *candidateLayer.Layers {
for _, childLayer := range candidateLayer.Layers {
if childLayer.Name == layer.Name {
return candidateLayer
}
Expand Down Expand Up @@ -417,11 +416,11 @@ func (layer *Layer) GetLayerType(service *WMSService) (layerType string) {
}

func (layer *Layer) IsDataLayer() bool {
return layer.hasData() && (layer.Layers == nil || len(*layer.Layers) == 0)
return layer.hasData() && len(layer.Layers) == 0
}

func (layer *Layer) IsGroupLayer() bool {
return layer.Layers != nil && len(*layer.Layers) > 0
return len(layer.Layers) > 0
}

func (layer *Layer) IsTopLayer(service *WMSService) bool {
Expand All @@ -438,12 +437,12 @@ func (layer *Layer) hasBoundingBoxForCRS(crs string) bool {
}

func (layer *Layer) setInheritedBoundingBoxes() {
if layer.Layers == nil || len(*layer.Layers) == 0 {
if len(layer.Layers) == 0 {
return
}

var updatedLayers []Layer
for _, childLayer := range *layer.Layers {
for _, childLayer := range layer.Layers {
// Inherit parent boundingboxes
for _, boundingBox := range layer.BoundingBoxes {
if !childLayer.hasBoundingBoxForCRS(boundingBox.CRS) {
Expand All @@ -453,7 +452,7 @@ func (layer *Layer) setInheritedBoundingBoxes() {
childLayer.setInheritedBoundingBoxes()
updatedLayers = append(updatedLayers, childLayer)
}
*layer.Layers = updatedLayers
layer.Layers = updatedLayers
}

func (wms *WMS) GetAllLayersWithLegend() (layers []Layer) {
Expand Down Expand Up @@ -488,11 +487,11 @@ func (wms *WMS) GetAuthority() *Authority {
return wms.Spec.Service.Layer.Authority
}

for _, childLayer := range *wms.Spec.Service.Layer.Layers {
for _, childLayer := range wms.Spec.Service.Layer.Layers {
if childLayer.Authority != nil {
return childLayer.Authority
} else if childLayer.Layers != nil {
for _, grandChildLayer := range *childLayer.Layers {
for _, grandChildLayer := range childLayer.Layers {
if grandChildLayer.Authority != nil {
return grandChildLayer.Authority
}
Expand Down Expand Up @@ -544,13 +543,13 @@ func (wms *WMS) GeoPackages() []*Gpkg {
gpkgs := make([]*Gpkg, 0)

if wms.Spec.Service.Layer.Layers != nil {
for _, layer := range *wms.Spec.Service.Layer.Layers {
for _, layer := range wms.Spec.Service.Layer.Layers {
if layer.Data != nil {
if layer.Data.Gpkg != nil {
gpkgs = append(gpkgs, layer.Data.Gpkg)
}
} else if layer.Layers != nil {
for _, childLayer := range *layer.Layers {
for _, childLayer := range layer.Layers {
if childLayer.Data != nil && childLayer.Data.Gpkg != nil {
gpkgs = append(gpkgs, childLayer.Data.Gpkg)
}
Expand Down
12 changes: 6 additions & 6 deletions api/v3/wms_types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@ func TestLayer_setInheritedBoundingBoxes(t *testing.T) {
layer: Layer{
Name: controller.Pointer("toplayer"),
BoundingBoxes: []WMSBoundingBox{first28992BoundingBox},
Layers: &[]Layer{
Layers: []Layer{
{
Name: controller.Pointer("grouplayer-1"),
BoundingBoxes: []WMSBoundingBox{first4326BoundingBox},
Layers: &[]Layer{
Layers: []Layer{
{
Name: controller.Pointer("datalayer-1"),
BoundingBoxes: []WMSBoundingBox{first4258BoundingBox},
Expand Down Expand Up @@ -93,9 +93,9 @@ func TestLayer_setInheritedBoundingBoxes(t *testing.T) {
layer := tt.layer
layer.setInheritedBoundingBoxes()

topChildLayers := *layer.Layers
topChildLayers := layer.Layers
groupLayer1 := topChildLayers[0]
groupChildLayers := *groupLayer1.Layers
groupChildLayers := groupLayer1.Layers
dataLayer1 := groupChildLayers[0]
dataLayer2 := groupChildLayers[1]

Expand Down Expand Up @@ -129,8 +129,8 @@ func TestLayer_setInheritedBoundingBoxes(t *testing.T) {

func TestLayer_GetParent(t *testing.T) {
childLayer2 := Layer{Name: controller.Pointer("childlayer-2")}
childLayer1 := Layer{Name: controller.Pointer("childlayer-1"), Layers: &[]Layer{childLayer2}}
topLayer := Layer{Name: controller.Pointer("toplayer"), Layers: &[]Layer{childLayer1}}
childLayer1 := Layer{Name: controller.Pointer("childlayer-1"), Layers: []Layer{childLayer2}}
topLayer := Layer{Name: controller.Pointer("toplayer"), Layers: []Layer{childLayer1}}

type args struct {
candidateLayer *Layer
Expand Down
10 changes: 5 additions & 5 deletions api/v3/wms_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func (wms *WMS) ValidateCreate() ([]string, error) {
reasons = append(reasons, fmt.Sprintf("%v", err))
}

validateWMS(wms, &warnings, &reasons)
ValidateWMS(wms, &warnings, &reasons)

if len(reasons) > 0 {
return warnings, fmt.Errorf("%s", strings.Join(reasons, ". "))
Expand All @@ -42,7 +42,7 @@ func (wms *WMS) ValidateUpdate(wmsOld *WMS) ([]string, error) {
reasons = append(reasons, "services cannot change from inspire to not inspire or the other way around")
}

validateWMS(wms, &warnings, &reasons)
ValidateWMS(wms, &warnings, &reasons)

if len(reasons) > 0 {
return warnings, fmt.Errorf("%s", strings.Join(reasons, ". "))
Expand All @@ -51,7 +51,7 @@ func (wms *WMS) ValidateUpdate(wmsOld *WMS) ([]string, error) {
return warnings, nil
}

func validateWMS(wms *WMS, warnings *[]string, reasons *[]string) {
func ValidateWMS(wms *WMS, warnings *[]string, reasons *[]string) {
if strings.Contains(wms.GetName(), "wms") {
*warnings = append(*warnings, sharedValidation.FormatValidationWarning("name should not contain wms", wms.GroupVersionKind(), wms.GetName()))
}
Expand Down Expand Up @@ -209,11 +209,11 @@ func validateWMS(wms *WMS, warnings *[]string, reasons *[]string) {
}

func findEqualChildStyleNames(layer *Layer, equalStyleNames *map[string][]string) {
if layer.Layers == nil || len(*layer.Layers) == 0 {
if len(layer.Layers) == 0 {
return
}
equalChildStyleNames := map[string][]string{}
for _, childLayer := range *layer.Layers {
for _, childLayer := range layer.Layers {
if childLayer.Name == nil {
// Name check is done elsewhere
// To prevent errors here we just continue
Expand Down
Loading
Loading