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
+}