@@ -2,6 +2,7 @@ package capabilitiesgenerator
22
33import (
44 "fmt"
5+ "slices"
56 "strconv"
67 "strings"
78
@@ -221,8 +222,6 @@ func MapWMSToCapabilitiesGeneratorInput(wms *pdoknlv3.WMS, ownerInfo *smoothoper
221222
222223 abstract := mapperutils .EscapeQuotes (wms .Spec .Service .Abstract )
223224
224- maxWidth := 4000
225- maxHeight := 4000
226225 serviceVersion := mapperutils .GetLabelValueByKey (wms .ObjectMeta .Labels , "service-version" )
227226 if serviceVersion == nil {
228227 serviceVersion = mapperutils .GetLabelValueByKey (wms .ObjectMeta .Labels , "pdok.nl/service-version" )
@@ -251,8 +250,8 @@ func MapWMSToCapabilitiesGeneratorInput(wms *pdoknlv3.WMS, ownerInfo *smoothoper
251250 Fees : smoothoperatorutils .Pointer ("NONE" ),
252251 AccessConstraints : & wms .Spec .Service .AccessConstraints ,
253252 OptionalConstraints : & wms130.OptionalConstraints {
254- MaxWidth : maxWidth ,
255- MaxHeight : maxHeight ,
253+ MaxWidth : int ( smoothoperatorutils . PointerVal ( wms . Spec . Service . MaxSize , 4000 )) ,
254+ MaxHeight : int ( smoothoperatorutils . PointerVal ( wms . Spec . Service . MaxSize , 4000 )) ,
256255 },
257256 },
258257 Capabilities : wms130.Capabilities {
@@ -377,60 +376,63 @@ func getDcpType(url string, fillPost bool) *wms130.DCPType {
377376}
378377
379378func getLayers (wms * pdoknlv3.WMS , canonicalURL string ) []wms130.Layer {
380- result := make ([]wms130.Layer , 0 )
381- referenceLayer := wms .Spec .Service .Layer
382-
383- var authorityURL * wms130.AuthorityURL
384- var identifier * wms130.Identifier
379+ return []wms130.Layer {
380+ mapLayer (wms .Spec .Service .Layer , canonicalURL , nil , nil , nil ),
381+ }
382+ }
385383
386- if referenceLayer .Authority != nil {
384+ func mapLayer (layer pdoknlv3.Layer , canonicalURL string , authorityURL * wms130.AuthorityURL , identifier * wms130.Identifier , parentStyleNames []string ) wms130.Layer {
385+ if layer .Authority != nil {
387386 authorityURL = & wms130.AuthorityURL {
388- Name : referenceLayer .Authority .Name ,
387+ Name : layer .Authority .Name ,
389388 OnlineResource : wms130.OnlineResource {
390389 Xlink : smoothoperatorutils .Pointer (XLinkURL ),
391390 Type : nil ,
392- Href : & referenceLayer .Authority .URL ,
391+ Href : & layer .Authority .URL ,
393392 },
394393 }
395394 identifier = & wms130.Identifier {
396- Authority : referenceLayer .Authority .Name ,
397- Value : referenceLayer .Authority .SpatialDatasetIdentifier ,
395+ Authority : layer .Authority .Name ,
396+ Value : layer .Authority .SpatialDatasetIdentifier ,
398397 }
399398 }
400- topLayer := getTopLayer (wms , referenceLayer , authorityURL , identifier )
401-
402- for _ , layer := range referenceLayer .Layers {
403- nestedLayer := getNestedLayer (layer , authorityURL , canonicalURL )
404399
405- topLayer .Layer = append (topLayer .Layer , & nestedLayer )
400+ l := wms130.Layer {
401+ Queryable : smoothoperatorutils .Pointer (1 ),
402+ Opaque : nil ,
403+ Name : layer .Name ,
404+ Title : mapperutils .EscapeQuotes (smoothoperatorutils .PointerVal (layer .Title , "" )),
405+ Abstract : smoothoperatorutils .Pointer (mapperutils .EscapeQuotes (smoothoperatorutils .PointerVal (layer .Abstract , "" ))),
406+ KeywordList : & wms130.Keywords {Keyword : layer .Keywords },
407+ //CRS: defaultCrs,
408+ //EXGeographicBoundingBox: &defaultBoundingBox,
409+ //BoundingBox: allDefaultBoundingBoxes,
410+ Dimension : nil ,
411+ Attribution : nil ,
412+ AuthorityURL : authorityURL ,
413+ Identifier : identifier ,
414+ DataURL : nil ,
415+ FeatureListURL : nil ,
416+ Style : getLayerStyles (layer , canonicalURL , parentStyleNames ),
417+ Layer : []* wms130.Layer {},
406418 }
407419
408- result = append (result , topLayer )
409- return result
410- }
411-
412- func getNestedLayer (layer pdoknlv3.Layer , authorityURL * wms130.AuthorityURL , canonicalURL string ) wms130.Layer {
413- var minScaleDenom * float64
414- var maxScaleDenom * float64
415- var innerIdentifier * wms130.Identifier
416- metadataUrls := make ([]* wms130.MetadataURL , 0 )
417-
418420 if layer .MinScaleDenominator != nil {
419421 float , err := strconv .ParseFloat (* layer .MinScaleDenominator , 64 )
420422 if err == nil {
421- minScaleDenom = & float
423+ l . MinScaleDenominator = & float
422424 }
423425 }
424426
425427 if layer .MaxScaleDenominator != nil {
426428 float , err := strconv .ParseFloat (* layer .MaxScaleDenominator , 64 )
427429 if err == nil {
428- maxScaleDenom = & float
430+ l . MaxScaleDenominator = & float
429431 }
430432 }
431433
432434 if layer .DatasetMetadataURL != nil {
433- metadataUrls = append (metadataUrls , & wms130.MetadataURL {
435+ l . MetadataURL = append (l . MetadataURL , & wms130.MetadataURL {
434436 Type : smoothoperatorutils .Pointer ("TC211" ),
435437 Format : smoothoperatorutils .Pointer ("text/plain" ),
436438 OnlineResource : wms130.OnlineResource {
@@ -441,46 +443,26 @@ func getNestedLayer(layer pdoknlv3.Layer, authorityURL *wms130.AuthorityURL, can
441443 })
442444 }
443445
444- if layer .Authority != nil {
445- authorityURL = & wms130.AuthorityURL {
446- Name : layer .Authority .Name ,
447- OnlineResource : wms130.OnlineResource {
448- Xlink : smoothoperatorutils .Pointer (XLinkURL ),
449- Type : nil ,
450- Href : & layer .Authority .URL ,
451- },
452- }
453- innerIdentifier = & wms130.Identifier {
454- Authority : layer .Authority .Name ,
455- Value : layer .Authority .SpatialDatasetIdentifier ,
456- }
446+ layerStyleNames := []string {}
447+ for _ , s := range l .Style {
448+ layerStyleNames = append (layerStyleNames , s .Name )
457449 }
458450
459- nestedLayer := wms130.Layer {
460- Queryable : smoothoperatorutils .Pointer (1 ),
461- Opaque : nil ,
462- Name : layer .Name ,
463- Title : smoothoperatorutils .PointerVal (layer .Title , "" ),
464- Abstract : layer .Abstract ,
465- KeywordList : & wms130.Keywords {
466- Keyword : layer .Keywords ,
467- },
468- //CRS: defaultCrs,
469- //EXGeographicBoundingBox: &defaultBoundingBox,
470- //BoundingBox: allDefaultBoundingBoxes,
471- Dimension : nil ,
472- Attribution : nil ,
473- AuthorityURL : authorityURL ,
474- Identifier : innerIdentifier ,
475- MetadataURL : metadataUrls ,
476- DataURL : nil ,
477- FeatureListURL : nil ,
478- Style : []* wms130.Style {},
479- MinScaleDenominator : minScaleDenom ,
480- MaxScaleDenominator : maxScaleDenom ,
481- Layer : nil ,
451+ // Map sublayers
452+ for _ , sublayer := range layer .Layers {
453+ mapped := mapLayer (sublayer , canonicalURL , authorityURL , identifier , append (parentStyleNames , layerStyleNames ... ))
454+ l .Layer = append (l .Layer , & mapped )
482455 }
456+
457+ return l
458+ }
459+
460+ func getLayerStyles (layer pdoknlv3.Layer , canonicalURL string , parentStyleNames []string ) (styles []* wms130.Style ) {
483461 for _ , style := range layer .Styles {
462+ if slices .Contains (parentStyleNames , style .Name ) {
463+ continue
464+ }
465+
484466 newStyle := wms130.Style {
485467 Name : style .Name ,
486468 Title : smoothoperatorutils .PointerVal (style .Title , "" ),
@@ -497,38 +479,7 @@ func getNestedLayer(layer pdoknlv3.Layer, authorityURL *wms130.AuthorityURL, can
497479 },
498480 StyleSheetURL : nil ,
499481 }
500- nestedLayer .Style = append (nestedLayer .Style , & newStyle )
501- }
502- return nestedLayer
503- }
504-
505- func getTopLayer (wms * pdoknlv3.WMS , referenceLayer pdoknlv3.Layer , authorityURL * wms130.AuthorityURL , identifier * wms130.Identifier ) wms130.Layer {
506- title := referenceLayer .Title
507- if title != nil {
508- title = smoothoperatorutils .Pointer (mapperutils .EscapeQuotes (* referenceLayer .Title ))
509- } else {
510- title = smoothoperatorutils .Pointer ("" )
511- }
512- return wms130.Layer {
513- Queryable : smoothoperatorutils .Pointer (1 ),
514- Opaque : nil ,
515- Name : nil ,
516- Title : * title ,
517- Abstract : smoothoperatorutils .Pointer (mapperutils .EscapeQuotes (wms .Spec .Service .Abstract )),
518- KeywordList : & wms130.Keywords {Keyword : referenceLayer .Keywords },
519- //CRS: defaultCrs,
520- //EXGeographicBoundingBox: &defaultBoundingBox,
521- //BoundingBox: allDefaultBoundingBoxes,
522- Dimension : nil ,
523- Attribution : nil ,
524- AuthorityURL : authorityURL ,
525- Identifier : identifier ,
526- MetadataURL : nil ,
527- DataURL : nil ,
528- FeatureListURL : nil ,
529- Style : nil ,
530- MinScaleDenominator : nil ,
531- MaxScaleDenominator : nil ,
532- Layer : []* wms130.Layer {},
482+ styles = append (styles , & newStyle )
533483 }
484+ return
534485}
0 commit comments