Mercurial > gemma
diff pkg/wfs/capabilities.go @ 1596:74413d52c439
Started with WFS Capabilities parser.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 14 Dec 2018 18:35:09 +0100 |
parents | |
children | 5e16d1fbe91f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/wfs/capabilities.go Fri Dec 14 18:35:09 2018 +0100 @@ -0,0 +1,99 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package wfs + +import ( + "encoding/xml" + "io" + + "golang.org/x/net/html/charset" +) + +type ServiceIdentification struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 ServiceIdentification"` + + Title string + ServiceType string + ServiceTypeVersion string +} + +type Get struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 Get"` + HRef string `xml:"http://www.w3.org/1999/xlink href,attr"` +} + +type Post struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 Post"` + HRef string `xml:"http://www.w3.org/1999/xlink href,attr"` +} + +type HTTP struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 HTTP"` + Get *Get `xml:"Get"` + Post *Post `xml:"Post"` +} + +type DCP struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 DCP"` + HTTP HTTP `xml:"HTTP"` +} + +type AllowedValue struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 Value"` + Value string `xml:",cdata"` +} + +type AllowedValues struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 AllowedValues"` + AllowedValues []AllowedValue `xml:"Value"` +} + +type Parameter struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 Parameter"` + Name string `xml:"name,attr"` + AllowedValues AllowedValues `xml:"AllowedValues"` +} + +type Operation struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 Operation"` + Name string `xml:"name,attr"` + DCP DCP `xml:"DCP"` + Parameters []*Parameter `xml:"Parameter"` +} + +type OperationsMetadata struct { + XMLName xml.Name `xml:"http://www.opengis.net/ows/1.1 OperationsMetadata"` + Operations []*Operation `xml:"http://www.opengis.net/ows/1.1 Operation"` +} + +type Capabilities struct { + XMLName xml.Name `xml:"http://www.opengis.net/wfs/2.0 WFS_Capabilities"` + + ServiceIdentification ServiceIdentification + OperationsMetadata OperationsMetadata +} + +func ParseCapabilities(r io.Reader) (*Capabilities, error) { + + decoder := xml.NewDecoder(r) + decoder.CharsetReader = charset.NewReaderLabel + + var capabilities Capabilities + + if err := decoder.Decode(&capabilities); err != nil { + return nil, err + } + + return &capabilities, nil +}