Skip to content

Commit 70f20f2

Browse files
authored
Merge pull request #31 from PDOK/jd/wms-types
WMS types
2 parents 11e15d7 + 80ec57c commit 70f20f2

34 files changed

+660
-360
lines changed

api/v2beta1/shared_conversion.go

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,51 +5,42 @@ import (
55

66
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
77
shared_model "github.com/pdok/smooth-operator/model"
8+
smoothoperatorutils "github.com/pdok/smooth-operator/pkg/util"
89
autoscalingv2 "k8s.io/api/autoscaling/v2"
910
corev1 "k8s.io/api/core/v1"
1011
)
1112

12-
func Pointer[T interface{}](val T) *T {
13-
return &val
14-
}
15-
16-
func PointerVal[T interface{}](val *T, def T) T {
17-
if val == nil {
18-
return def
19-
}
20-
21-
return *val
22-
}
13+
func ConvertOptionsV2ToV3(src WMSWFSOptions) pdoknlv3.Options {
14+
defaults := pdoknlv3.GetDefaultOptions()
2315

24-
func ConvertOptionsV2ToV3(src WMSWFSOptions) *pdoknlv3.Options {
25-
return &pdoknlv3.Options{
16+
return pdoknlv3.Options{
2617
AutomaticCasing: src.AutomaticCasing,
2718
IncludeIngress: src.IncludeIngress,
28-
PrefetchData: src.PrefetchData,
29-
ValidateRequests: src.ValidateRequests,
30-
RewriteGroupToDataLayers: src.RewriteGroupToDataLayers,
31-
DisableWebserviceProxy: src.DisableWebserviceProxy,
32-
ValidateChildStyleNameEqual: src.ValidateChildStyleNameEqual,
19+
PrefetchData: smoothoperatorutils.PointerVal(src.PrefetchData, defaults.PrefetchData),
20+
ValidateRequests: smoothoperatorutils.PointerVal(src.ValidateRequests, defaults.ValidateRequests),
21+
RewriteGroupToDataLayers: smoothoperatorutils.PointerVal(src.RewriteGroupToDataLayers, defaults.RewriteGroupToDataLayers),
22+
DisableWebserviceProxy: smoothoperatorutils.PointerVal(src.DisableWebserviceProxy, defaults.DisableWebserviceProxy),
23+
ValidateChildStyleNameEqual: smoothoperatorutils.PointerVal(src.ValidateChildStyleNameEqual, defaults.ValidateChildStyleNameEqual),
3324
}
3425
}
3526

36-
func ConvertOptionsV3ToV2(src *pdoknlv3.Options) WMSWFSOptions {
27+
func ConvertOptionsV3ToV2(src pdoknlv3.Options) WMSWFSOptions {
3728
return WMSWFSOptions{
3829
AutomaticCasing: src.AutomaticCasing,
39-
PrefetchData: src.PrefetchData,
4030
IncludeIngress: src.IncludeIngress,
41-
ValidateRequests: src.ValidateRequests,
42-
RewriteGroupToDataLayers: src.RewriteGroupToDataLayers,
43-
DisableWebserviceProxy: src.DisableWebserviceProxy,
44-
ValidateChildStyleNameEqual: src.ValidateChildStyleNameEqual,
31+
PrefetchData: &src.PrefetchData,
32+
ValidateRequests: &src.ValidateRequests,
33+
RewriteGroupToDataLayers: &src.RewriteGroupToDataLayers,
34+
DisableWebserviceProxy: &src.DisableWebserviceProxy,
35+
ValidateChildStyleNameEqual: &src.ValidateChildStyleNameEqual,
4536
}
4637
}
4738

4839
func ConvertAutoscaling(src Autoscaling) *pdoknlv3.HorizontalPodAutoscalerPatch {
4940
var minReplicas *int32
5041
if src.MinReplicas != nil {
5142
//nolint:gosec
52-
minReplicas = Pointer(int32(*src.MinReplicas))
43+
minReplicas = smoothoperatorutils.Pointer(int32(*src.MinReplicas))
5344
}
5445

5546
var maxReplicas int32
@@ -65,7 +56,7 @@ func ConvertAutoscaling(src Autoscaling) *pdoknlv3.HorizontalPodAutoscalerPatch
6556
Name: corev1.ResourceCPU,
6657
Target: autoscalingv2.MetricTarget{
6758
Type: autoscalingv2.UtilizationMetricType,
68-
AverageUtilization: Pointer(int32(*src.AverageCPUUtilization)),
59+
AverageUtilization: smoothoperatorutils.Pointer(int32(*src.AverageCPUUtilization)),
6960
},
7061
},
7162
})
@@ -164,7 +155,7 @@ func ConvertV2DataToV3(v2 Data) pdoknlv3.Data {
164155
BlobKey: v2.Tif.BlobKey,
165156
Resample: v2.Tif.Resample,
166157
Offsite: v2.Tif.Offsite,
167-
GetFeatureInfoIncludesClass: v2.Tif.GetFeatureInfoIncludesClass,
158+
GetFeatureInfoIncludesClass: smoothoperatorutils.PointerVal(v2.Tif.GetFeatureInfoIncludesClass, false),
168159
}
169160
}
170161

@@ -200,7 +191,7 @@ func ConvertV3DataToV2(v3 pdoknlv3.Data) Data {
200191
BlobKey: v3.TIF.BlobKey,
201192
Offsite: v3.TIF.Offsite,
202193
Resample: v3.TIF.Resample,
203-
GetFeatureInfoIncludesClass: v3.TIF.GetFeatureInfoIncludesClass,
194+
GetFeatureInfoIncludesClass: &v3.TIF.GetFeatureInfoIncludesClass,
204195
}
205196
}
206197

@@ -212,7 +203,7 @@ func NewV2KubernetesObject(lifecycle *shared_model.Lifecycle, podSpecPatch *core
212203

213204
if lifecycle != nil && lifecycle.TTLInDays != nil {
214205
kub.Lifecycle = &Lifecycle{
215-
TTLInDays: Pointer(int(*lifecycle.TTLInDays)),
206+
TTLInDays: smoothoperatorutils.Pointer(int(*lifecycle.TTLInDays)),
216207
}
217208
}
218209

@@ -223,15 +214,15 @@ func NewV2KubernetesObject(lifecycle *shared_model.Lifecycle, podSpecPatch *core
223214

224215
if scalingSpec != nil {
225216
kub.Autoscaling = &Autoscaling{
226-
MaxReplicas: Pointer(int(scalingSpec.MaxReplicas)),
217+
MaxReplicas: smoothoperatorutils.Pointer(int(scalingSpec.MaxReplicas)),
227218
}
228219

229220
if scalingSpec.MinReplicas != nil {
230-
kub.Autoscaling.MinReplicas = Pointer(int(*scalingSpec.MinReplicas))
221+
kub.Autoscaling.MinReplicas = smoothoperatorutils.Pointer(int(*scalingSpec.MinReplicas))
231222
}
232223

233224
if scalingSpec.Metrics != nil {
234-
kub.Autoscaling.AverageCPUUtilization = Pointer(
225+
kub.Autoscaling.AverageCPUUtilization = smoothoperatorutils.Pointer(
235226
int(*scalingSpec.Metrics[0].Resource.Target.AverageUtilization),
236227
)
237228
}

api/v2beta1/shared_types.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,15 @@ type Lifecycle struct {
9090

9191
// WMSWFSOptions is the struct with options available in the operator
9292
type WMSWFSOptions struct {
93-
IncludeIngress bool `json:"includeIngress"`
94-
AutomaticCasing bool `json:"automaticCasing"`
95-
ValidateRequests *bool `json:"validateRequests,omitempty"`
96-
RewriteGroupToDataLayers *bool `json:"rewriteGroupToDataLayers,omitempty"`
97-
DisableWebserviceProxy *bool `json:"disableWebserviceProxy,omitempty"`
93+
// +kubebuilder:default:=true
94+
IncludeIngress bool `json:"includeIngress"`
95+
// +kubebuilder:default:=true
96+
AutomaticCasing bool `json:"automaticCasing"`
97+
// +kubebuilder:default:=true
98+
ValidateRequests *bool `json:"validateRequests,omitempty"`
99+
RewriteGroupToDataLayers *bool `json:"rewriteGroupToDataLayers,omitempty"`
100+
DisableWebserviceProxy *bool `json:"disableWebserviceProxy,omitempty"`
101+
// +kubebuilder:default:=true
98102
PrefetchData *bool `json:"prefetchData,omitempty"`
99103
ValidateChildStyleNameEqual *bool `json:"validateChildStyleNameEqual,omitempty"`
100104
}

api/v2beta1/wfs_conversion.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ SOFTWARE.
2525
package v2beta1
2626

2727
import (
28+
smoothoperatorutils "github.com/pdok/smooth-operator/pkg/util"
2829
"log"
2930

3031
sharedModel "github.com/pdok/smooth-operator/model"
@@ -49,7 +50,7 @@ func (src *WFS) ToV3(dst *pdoknlv3.WFS) error {
4950
// Set LifeCycle if defined
5051
if src.Spec.Kubernetes.Lifecycle != nil && src.Spec.Kubernetes.Lifecycle.TTLInDays != nil {
5152
dst.Spec.Lifecycle = &sharedModel.Lifecycle{
52-
TTLInDays: Pointer(int32(*src.Spec.Kubernetes.Lifecycle.TTLInDays)),
53+
TTLInDays: smoothoperatorutils.Pointer(int32(*src.Spec.Kubernetes.Lifecycle.TTLInDays)),
5354
}
5455
}
5556

@@ -62,7 +63,7 @@ func (src *WFS) ToV3(dst *pdoknlv3.WFS) error {
6263
dst.Spec.PodSpecPatch = ConvertResources(*src.Spec.Kubernetes.Resources)
6364
}
6465

65-
dst.Spec.Options = *ConvertOptionsV2ToV3(src.Spec.Options)
66+
dst.Spec.Options = ConvertOptionsV2ToV3(src.Spec.Options)
6667

6768
service := pdoknlv3.WFSService{
6869
// TODO what is prefix, Geonovum subdomain?
@@ -162,7 +163,7 @@ func (dst *WFS) ConvertFrom(srcRaw conversion.Hub) error {
162163

163164
dst.Spec.Kubernetes = NewV2KubernetesObject(src.Spec.Lifecycle, src.Spec.PodSpecPatch, src.Spec.HorizontalPodAutoscalerPatch)
164165

165-
dst.Spec.Options = ConvertOptionsV3ToV2(&src.Spec.Options)
166+
dst.Spec.Options = ConvertOptionsV3ToV2(src.Spec.Options)
166167

167168
service := WFSService{
168169
Title: src.Spec.Service.Title,
@@ -178,9 +179,9 @@ func (dst *WFS) ConvertFrom(srcRaw conversion.Hub) error {
178179
}
179180

180181
if src.Spec.Service.Bbox != nil {
181-
service.Extent = Pointer(src.Spec.Service.Bbox.DefaultCRS.ToExtent())
182+
service.Extent = smoothoperatorutils.Pointer(src.Spec.Service.Bbox.DefaultCRS.ToExtent())
182183
} else {
183-
service.Extent = Pointer("-25000 250000 280000 860000")
184+
service.Extent = smoothoperatorutils.Pointer("-25000 250000 280000 860000")
184185
}
185186

186187
if src.Spec.Service.Mapfile != nil {
@@ -213,7 +214,7 @@ func (dst *WFS) ConvertFrom(srcRaw conversion.Hub) error {
213214
}
214215

215216
if featureType.Bbox != nil {
216-
featureTypeV2.Extent = Pointer(featureType.Bbox.DefaultCRS.ToExtent())
217+
featureTypeV2.Extent = smoothoperatorutils.Pointer(featureType.Bbox.DefaultCRS.ToExtent())
217218
}
218219

219220
service.FeatureTypes = append(service.FeatureTypes, featureTypeV2)

api/v2beta1/wms_conversion.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (src *WMS) ToV3(target *pdoknlv3.WMS) {
5959
// Set LifeCycle if defined
6060
if src.Spec.Kubernetes.Lifecycle != nil && src.Spec.Kubernetes.Lifecycle.TTLInDays != nil {
6161
dst.Spec.Lifecycle = &sharedModel.Lifecycle{
62-
TTLInDays: Pointer(int32(*src.Spec.Kubernetes.Lifecycle.TTLInDays)),
62+
TTLInDays: smoothoperatorutils.Pointer(int32(*src.Spec.Kubernetes.Lifecycle.TTLInDays)),
6363
}
6464
}
6565

@@ -72,16 +72,15 @@ func (src *WMS) ToV3(target *pdoknlv3.WMS) {
7272
dst.Spec.PodSpecPatch = ConvertResources(*src.Spec.Kubernetes.Resources)
7373
}
7474

75-
dst.Spec.Options = *ConvertOptionsV2ToV3(src.Spec.Options)
75+
dst.Spec.Options = ConvertOptionsV2ToV3(src.Spec.Options)
7676

7777
service := pdoknlv3.WMSService{
7878
URL: CreateBaseURL("https://service.pdok.nl", "wms", src.Spec.General),
7979
OwnerInfoRef: "pdok",
8080
Title: src.Spec.Service.Title,
8181
Abstract: src.Spec.Service.Abstract,
8282
Keywords: src.Spec.Service.Keywords,
83-
Fees: nil,
84-
AccessConstraints: src.Spec.Service.AccessConstraints,
83+
AccessConstraints: smoothoperatorutils.PointerVal(src.Spec.Service.AccessConstraints, "https://creativecommons.org/publicdomain/zero/1.0/deed.nl"),
8584
MaxSize: nil,
8685
Resolution: nil,
8786
DefResolution: nil,
@@ -91,15 +90,15 @@ func (src *WMS) ToV3(target *pdoknlv3.WMS) {
9190
}
9291

9392
if src.Spec.Service.Maxsize != nil {
94-
service.MaxSize = Pointer(int32(*src.Spec.Service.Maxsize))
93+
service.MaxSize = smoothoperatorutils.Pointer(int32(*src.Spec.Service.Maxsize))
9594
}
9695

9796
if src.Spec.Service.Resolution != nil {
98-
service.Resolution = Pointer(int32(*src.Spec.Service.Resolution))
97+
service.Resolution = smoothoperatorutils.Pointer(int32(*src.Spec.Service.Resolution))
9998
}
10099

101100
if src.Spec.Service.DefResolution != nil {
102-
service.DefResolution = Pointer(int32(*src.Spec.Service.DefResolution))
101+
service.DefResolution = smoothoperatorutils.Pointer(int32(*src.Spec.Service.DefResolution))
103102
}
104103

105104
if src.Spec.Service.Mapfile != nil {
@@ -154,13 +153,13 @@ func (dst *WMS) ConvertFrom(srcRaw conversion.Hub) error {
154153

155154
dst.Spec.Kubernetes = NewV2KubernetesObject(src.Spec.Lifecycle, src.Spec.PodSpecPatch, src.Spec.HorizontalPodAutoscalerPatch)
156155

157-
dst.Spec.Options = ConvertOptionsV3ToV2(&src.Spec.Options)
156+
dst.Spec.Options = ConvertOptionsV3ToV2(src.Spec.Options)
158157

159158
service := WMSService{
160159
Title: src.Spec.Service.Title,
161160
Abstract: src.Spec.Service.Abstract,
162161
Keywords: src.Spec.Service.Keywords,
163-
AccessConstraints: src.Spec.Service.AccessConstraints,
162+
AccessConstraints: &src.Spec.Service.AccessConstraints,
164163
Extent: nil,
165164
DataEPSG: src.Spec.Service.DataEPSG,
166165
Layers: []WMSLayer{},
@@ -187,11 +186,11 @@ func (dst *WMS) ConvertFrom(srcRaw conversion.Hub) error {
187186
}
188187

189188
if src.Spec.Service.DefResolution != nil {
190-
service.DefResolution = Pointer(int(*src.Spec.Service.DefResolution))
189+
service.DefResolution = smoothoperatorutils.Pointer(int(*src.Spec.Service.DefResolution))
191190
}
192191

193192
if src.Spec.Service.Resolution != nil {
194-
service.Resolution = Pointer(int(*src.Spec.Service.Resolution))
193+
service.Resolution = smoothoperatorutils.Pointer(int(*src.Spec.Service.Resolution))
195194
}
196195

197196
if src.Spec.Service.StylingAssets != nil {
@@ -216,7 +215,7 @@ func (dst *WMS) ConvertFrom(srcRaw conversion.Hub) error {
216215
}
217216

218217
if src.Spec.Service.MaxSize != nil {
219-
service.Maxsize = Pointer(float64(*src.Spec.Service.MaxSize))
218+
service.Maxsize = smoothoperatorutils.Pointer(float64(*src.Spec.Service.MaxSize))
220219
}
221220

222221
service.Layers = mapV3LayerToV2Layers(src.Spec.Service.Layer, nil, src.Spec.Service.DataEPSG)
@@ -227,9 +226,9 @@ func (dst *WMS) ConvertFrom(srcRaw conversion.Hub) error {
227226
if service.Extent == nil {
228227
service.Extent = l.Extent
229228
} else {
230-
bbox := Pointer(sharedModel.ExtentToBBox(*service.Extent)).DeepCopy()
229+
bbox := smoothoperatorutils.Pointer(sharedModel.ExtentToBBox(*service.Extent)).DeepCopy()
231230
bbox.Combine(sharedModel.ExtentToBBox(*l.Extent))
232-
service.Extent = Pointer(bbox.ToExtent())
231+
service.Extent = smoothoperatorutils.Pointer(bbox.ToExtent())
233232
}
234233
}
235234
}
@@ -322,7 +321,7 @@ func (v2Service WMSService) MapLayersToV3() pdoknlv3.Layer {
322321
Keywords: v2Service.Keywords,
323322
Layers: []pdoknlv3.Layer{},
324323
BoundingBoxes: boundingBoxes,
325-
Visible: smoothoperatorutils.Pointer(true),
324+
Visible: true,
326325
}
327326

328327
// adding the bottom layers to the middle layers they are grouped by
@@ -361,7 +360,7 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
361360
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
362361
MinScaleDenominator: nil,
363362
MaxScaleDenominator: nil,
364-
Visible: v2Layer.Visible,
363+
Visible: smoothoperatorutils.PointerVal(v2Layer.Visible, true),
365364
}
366365

367366
if v2Layer.SourceMetadataIdentifier != nil {
@@ -393,11 +392,11 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
393392
}
394393

395394
if v2Layer.MinScale != nil {
396-
layer.MinScaleDenominator = Pointer(strconv.FormatFloat(*v2Layer.MinScale, 'f', -1, 64))
395+
layer.MinScaleDenominator = smoothoperatorutils.Pointer(strconv.FormatFloat(*v2Layer.MinScale, 'f', -1, 64))
397396
}
398397

399398
if v2Layer.MaxScale != nil {
400-
layer.MaxScaleDenominator = Pointer(strconv.FormatFloat(*v2Layer.MaxScale, 'f', -1, 64))
399+
layer.MaxScaleDenominator = smoothoperatorutils.Pointer(strconv.FormatFloat(*v2Layer.MaxScale, 'f', -1, 64))
401400
}
402401

403402
for _, style := range v2Layer.Styles {
@@ -418,7 +417,7 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
418417
}
419418

420419
if v2Layer.Data != nil {
421-
layer.Data = Pointer(ConvertV2DataToV3(*v2Layer.Data))
420+
layer.Data = smoothoperatorutils.Pointer(ConvertV2DataToV3(*v2Layer.Data))
422421
}
423422

424423
return layer
@@ -444,7 +443,7 @@ func mapV3LayerToV2Layers(v3Layer pdoknlv3.Layer, parent *pdoknlv3.Layer, servic
444443
Styles: []Style{},
445444
}
446445

447-
v2Layer.Visible = v3Layer.Visible
446+
v2Layer.Visible = &v3Layer.Visible
448447

449448
if parent != nil {
450449
v2Layer.Group = parent.Name
@@ -460,7 +459,7 @@ func mapV3LayerToV2Layers(v3Layer pdoknlv3.Layer, parent *pdoknlv3.Layer, servic
460459

461460
for _, bb := range v3Layer.BoundingBoxes {
462461
if bb.CRS == serviceEPSG {
463-
v2Layer.Extent = Pointer(bb.BBox.ToExtent())
462+
v2Layer.Extent = smoothoperatorutils.Pointer(bb.BBox.ToExtent())
464463
}
465464
}
466465

@@ -498,7 +497,7 @@ func mapV3LayerToV2Layers(v3Layer pdoknlv3.Layer, parent *pdoknlv3.Layer, servic
498497
}
499498

500499
if v3Layer.Data != nil {
501-
v2Layer.Data = Pointer(ConvertV3DataToV2(*v3Layer.Data))
500+
v2Layer.Data = smoothoperatorutils.Pointer(ConvertV3DataToV2(*v3Layer.Data))
502501
}
503502

504503
layers = append(layers, v2Layer)

0 commit comments

Comments
 (0)