comparison 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
comparison
equal deleted inserted replaced
1618:9f5090fe130f 1619:3093bab05c81
92 } 92 }
93 93
94 return *result.NumberMatched, nil 94 return *result.NumberMatched, nil
95 } 95 }
96 96
97 func GetFeaturesGET(caps *Capabilities, featureTypeName, outputFormat string) error { 97 func GetFeaturesGET(
98 caps *Capabilities,
99 featureTypeName,
100 outputFormat string,
101 sortBy string,
102 ) ([]string, error) {
98 103
99 feature := caps.FindFeatureType(featureTypeName) 104 feature := caps.FindFeatureType(featureTypeName)
100 if feature == nil { 105 if feature == nil {
101 return ErrNoSuchFeatureType 106 return nil, ErrNoSuchFeatureType
102 } 107 }
103 op := caps.FindOperation("GetFeature") 108 op := caps.FindOperation("GetFeature")
104 if op == nil { 109 if op == nil {
105 return ErrGetFeatureNotSupported 110 return nil, ErrGetFeatureNotSupported
106 } 111 }
107 112
108 if op.DCP.HTTP.Get == nil { 113 if op.DCP.HTTP.Get == nil {
109 return ErrMethodGetNotSupported 114 return nil, ErrMethodGetNotSupported
110 } 115 }
111 116
112 getRaw := op.DCP.HTTP.Get.HRef 117 getRaw := op.DCP.HTTP.Get.HRef
113 getU, err := url.Parse(getRaw) 118 getU, err := url.Parse(getRaw)
114 if err != nil { 119 if err != nil {
115 return err 120 return nil, err
116 } 121 }
117 // The URL could be relative so resolve against Capabilities URL. 122 // The URL could be relative so resolve against Capabilities URL.
118 if !getU.IsAbs() { 123 if !getU.IsAbs() {
119 base, err := url.Parse(caps.BaseURL) 124 base, err := url.Parse(caps.BaseURL)
120 if err != nil { 125 if err != nil {
121 return err 126 return nil, err
122 } 127 }
123 getU = getU.ResolveReference(base) 128 getU = getU.ResolveReference(base)
124 } 129 }
125 130
126 if !op.SupportsOutputFormat(outputFormat) { 131 if !op.SupportsOutputFormat(outputFormat) {
127 return ErrOutputFormatNotSupported 132 return nil, ErrOutputFormatNotSupported
128 } 133 }
129 134
130 wfsVersion := caps.HighestWFSVersion(WFS2_0_0) 135 wfsVersion := caps.HighestWFSVersion(WFS2_0_0)
131 136
132 featuresPerPage, supportsPaging := op.FeaturesPerPage() 137 featuresPerPage, supportsPaging := op.FeaturesPerPage()
167 } 172 }
168 173
169 addOutputFormat := func(v url.Values) { 174 addOutputFormat := func(v url.Values) {
170 if outputFormat != "" { 175 if outputFormat != "" {
171 v.Set("outputFormat", outputFormat) 176 v.Set("outputFormat", outputFormat)
177 }
178 }
179
180 addSortBy := func(v url.Values) {
181 if sortBy != "" {
182 v.Set("sortBy", sortBy)
172 } 183 }
173 } 184 }
174 185
175 if supportsPaging { 186 if supportsPaging {
176 pagedURL := func(ofs, count int) string { 187 pagedURL := func(ofs, count int) string {
185 v.Set("maxFeatures", strconv.Itoa(count)) 196 v.Set("maxFeatures", strconv.Itoa(count))
186 } 197 }
187 v.Set("TYPENAMES", featureTypeName) 198 v.Set("TYPENAMES", featureTypeName)
188 addNS(v) 199 addNS(v)
189 addOutputFormat(v) 200 addOutputFormat(v)
201 addSortBy(v)
190 q := *getU 202 q := *getU
191 q.RawQuery = v.Encode() 203 q.RawQuery = v.Encode()
192 return q.String() 204 return q.String()
193 } 205 }
194 if numFeatures <= featuresPerPage { 206 if numFeatures <= featuresPerPage {
213 v.Set("REQUEST", "GetFeature") 225 v.Set("REQUEST", "GetFeature")
214 v.Set("VERSION", wfsVersion) 226 v.Set("VERSION", wfsVersion)
215 v.Set("TYPENAMES", featureTypeName) 227 v.Set("TYPENAMES", featureTypeName)
216 addNS(v) 228 addNS(v)
217 addOutputFormat(v) 229 addOutputFormat(v)
230 addSortBy(v)
218 q := *getU 231 q := *getU
219 q.RawQuery = v.Encode() 232 q.RawQuery = v.Encode()
220 downloadURLs = []string{q.String()} 233 downloadURLs = []string{q.String()}
221 } 234 }
222 235
223 // TODO: Implement me! 236 return downloadURLs, nil
224
225 log.Printf("%v\n", downloadURLs)
226
227 return nil
228 } 237 }