diff pkg/wfs/download.go @ 1619:3093bab05c81

WFS downloader: Dump features to stdout for testing purposes.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 18 Dec 2018 13:26:26 +0100
parents f59550310143
children 943823d03d50
line wrap: on
line diff
--- a/pkg/wfs/download.go	Tue Dec 18 12:57:43 2018 +0100
+++ b/pkg/wfs/download.go	Tue Dec 18 13:26:26 2018 +0100
@@ -94,37 +94,42 @@
 	return *result.NumberMatched, nil
 }
 
-func GetFeaturesGET(caps *Capabilities, featureTypeName, outputFormat string) error {
+func GetFeaturesGET(
+	caps *Capabilities,
+	featureTypeName,
+	outputFormat string,
+	sortBy string,
+) ([]string, error) {
 
 	feature := caps.FindFeatureType(featureTypeName)
 	if feature == nil {
-		return ErrNoSuchFeatureType
+		return nil, ErrNoSuchFeatureType
 	}
 	op := caps.FindOperation("GetFeature")
 	if op == nil {
-		return ErrGetFeatureNotSupported
+		return nil, ErrGetFeatureNotSupported
 	}
 
 	if op.DCP.HTTP.Get == nil {
-		return ErrMethodGetNotSupported
+		return nil, ErrMethodGetNotSupported
 	}
 
 	getRaw := op.DCP.HTTP.Get.HRef
 	getU, err := url.Parse(getRaw)
 	if err != nil {
-		return err
+		return nil, err
 	}
 	// The URL could be relative so resolve against Capabilities URL.
 	if !getU.IsAbs() {
 		base, err := url.Parse(caps.BaseURL)
 		if err != nil {
-			return err
+			return nil, err
 		}
 		getU = getU.ResolveReference(base)
 	}
 
 	if !op.SupportsOutputFormat(outputFormat) {
-		return ErrOutputFormatNotSupported
+		return nil, ErrOutputFormatNotSupported
 	}
 
 	wfsVersion := caps.HighestWFSVersion(WFS2_0_0)
@@ -172,6 +177,12 @@
 		}
 	}
 
+	addSortBy := func(v url.Values) {
+		if sortBy != "" {
+			v.Set("sortBy", sortBy)
+		}
+	}
+
 	if supportsPaging {
 		pagedURL := func(ofs, count int) string {
 			v := url.Values{}
@@ -187,6 +198,7 @@
 			v.Set("TYPENAMES", featureTypeName)
 			addNS(v)
 			addOutputFormat(v)
+			addSortBy(v)
 			q := *getU
 			q.RawQuery = v.Encode()
 			return q.String()
@@ -215,14 +227,11 @@
 		v.Set("TYPENAMES", featureTypeName)
 		addNS(v)
 		addOutputFormat(v)
+		addSortBy(v)
 		q := *getU
 		q.RawQuery = v.Encode()
 		downloadURLs = []string{q.String()}
 	}
 
-	// TODO: Implement me!
-
-	log.Printf("%v\n", downloadURLs)
-
-	return nil
+	return downloadURLs, nil
 }