view cmd/wfs/main.go @ 1599:5e16d1fbe91f

WFS Capabilities parser: Parse constraints, too.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 17 Dec 2018 11:13:11 +0100
parents 74413d52c439
children 658c1ebc1707
line wrap: on
line source

// 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 main

import (
	"bufio"
	"flag"
	"fmt"
	"log"
	"os"

	"gemma.intevation.de/gemma/pkg/wfs"
)

func loadCapabilities(fname string) (*wfs.Capabilities, error) {
	f, err := os.Open(fname)
	if err != nil {
		return nil, err
	}
	defer f.Close()
	return wfs.ParseCapabilities(bufio.NewReader(f))
}

func main() {
	flag.Parse()

	for _, arg := range flag.Args() {
		caps, err := loadCapabilities(arg)
		if err != nil {
			log.Fatalf("error: %v\n", err)
		}

		fmt.Printf("title: %s\n", caps.ServiceIdentification.Title)
		fmt.Printf("type: %s\n", caps.ServiceIdentification.ServiceType)
		fmt.Printf("version: %s\n", caps.ServiceIdentification.ServiceTypeVersion)
		if len(caps.OperationsMetadata.Operations) > 0 {
			fmt.Println("operations:")
			for _, operation := range caps.OperationsMetadata.Operations {
				fmt.Printf("\t%s\n", operation.Name)
				if operation.DCP.HTTP.Get != nil {
					fmt.Printf("\t\tGet: %s\n", operation.DCP.HTTP.Get.HRef)
				}
				if operation.DCP.HTTP.Post != nil {
					fmt.Printf("\t\tPost: %s\n", operation.DCP.HTTP.Post.HRef)
				}

				if len(operation.Parameters) > 0 {
					fmt.Println("\t\tparameters:")
					for _, p := range operation.Parameters {
						fmt.Printf("\t\t\tparameter: %s\n", p.Name)
						for _, av := range p.AllowedValues.Values {
							fmt.Printf("\t\t\t\t%s\n", av.Value)
						}
					}
				}
				if len(operation.Constraints) > 0 {
					fmt.Println("\t\tconstraints:")
					for _, c := range operation.Constraints {
						fmt.Printf("\t\t\tname: %s\n", c.Name)
						if c.DefaultValue != nil {
							fmt.Printf("\t\t\t\tdefault: %s\n", c.DefaultValue.Value)
						}
						if len(c.AllowedValues.Values) > 0 {
							fmt.Println("\t\t\tallowed values:")
							for _, av := range c.AllowedValues.Values {
								fmt.Printf("\t\t\t\t%s", av.Value)
							}
						}
					}
				}
			}
		}
		if len(caps.OperationsMetadata.Constraints) > 0 {
			fmt.Println("constraints:")
			for _, c := range caps.OperationsMetadata.Constraints {
				fmt.Printf("\tname: %s\n", c.Name)
				if c.DefaultValue != nil {
					fmt.Printf("\t\tdefault: %s\n", c.DefaultValue.Value)
				}
				if len(c.AllowedValues.Values) > 0 {
					fmt.Println("\tallowed values:")
					for _, av := range c.AllowedValues.Values {
						fmt.Printf("\t\t%s\n", av.Value)
					}
				}
			}
		}
	}
}