1 | /** |
---|
2 | * Author : Samuel Souk aloun |
---|
3 | * |
---|
4 | * Copyright (c) 2014 GeoLabs SARL |
---|
5 | * |
---|
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
---|
7 | * of this software and associated documentation files (the "Software"), to deal |
---|
8 | * in the Software without restriction, including without limitation the rights |
---|
9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
---|
10 | * copies of the Software, and to permit persons to whom the Software is |
---|
11 | * furnished to do so, subject to the following conditions: |
---|
12 | * |
---|
13 | * The above copyright notice and this permission notice shall be included in |
---|
14 | * all copies or substantial portions of the Software. |
---|
15 | * |
---|
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
---|
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
---|
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
---|
19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
---|
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
---|
21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
---|
22 | * THE SOFTWARE. |
---|
23 | */ |
---|
24 | |
---|
25 | define([ |
---|
26 | 'jquery', 'utils' |
---|
27 | ], function($, utils) { |
---|
28 | |
---|
29 | /** |
---|
30 | * The wpsPayload module is using the |
---|
31 | * [Hogan.js]{@link http://twitter.github.io/hogan.js/} templating engine to |
---|
32 | * generate XML requests to be sent to a WPS Server. |
---|
33 | * In the ZOO-Client API, the Hogan.js templates have to be compiled before |
---|
34 | * you can use them from you application. Please refer to the ZOO-Client |
---|
35 | * installation documentation for more informations. |
---|
36 | * |
---|
37 | * @module wpsPayload |
---|
38 | * @requires payloads |
---|
39 | * @requires jquery |
---|
40 | * @requires utils |
---|
41 | */ |
---|
42 | |
---|
43 | return { |
---|
44 | |
---|
45 | /** @exports wpsPayload */ |
---|
46 | |
---|
47 | /** |
---|
48 | * The getPayload function uses the mustache |
---|
49 | * templates and the parameters provided to generate a valid WPS XML |
---|
50 | * request. |
---|
51 | * |
---|
52 | * @static |
---|
53 | * @param {Object} params - The object representing the request. |
---|
54 | * @returns {string} - The corresponding XML request |
---|
55 | * @example |
---|
56 | * // GetCapabilities |
---|
57 | * var request_params = { |
---|
58 | * request: 'GetCapabilities', |
---|
59 | * language: 'en-US' |
---|
60 | * }; |
---|
61 | * console.wpsPayload.getPayload(request_params)); |
---|
62 | * @example |
---|
63 | * // DescribeProcess with Identifier value set to "all". |
---|
64 | * var request_params = { |
---|
65 | * request: 'DescribeProcess', |
---|
66 | * identifier: ["all"] |
---|
67 | * }; |
---|
68 | * console.log(wpsPayload.getPayload(request_params)); |
---|
69 | * @example |
---|
70 | * // |
---|
71 | * var request_params = { |
---|
72 | * request: 'Execute', |
---|
73 | * Identifier: "Buffer", |
---|
74 | * DataInputs: [{"identifier":"InputPolygon","href":"http://features.org/toto.xml","mimeType":"text/xml"}], |
---|
75 | * DataOutputs: [{"identifier":"Result","mimeType":"application/json"}], |
---|
76 | * language: 'en-US' |
---|
77 | * }; |
---|
78 | * console.log(wpsPayload.getPayload(request_params)); |
---|
79 | */ |
---|
80 | getPayload: function(params) { |
---|
81 | if (params.request == 'DescribeProcess') { |
---|
82 | return this.getPayload_DescribeProcess(params); |
---|
83 | } else if (params.request == 'GetCapabilities') { |
---|
84 | return this.getPayload_GetCapabilities(params); |
---|
85 | } else if (params.request == 'Execute') { |
---|
86 | return this.getPayload_Execute(params); |
---|
87 | } else { |
---|
88 | console.log("#### UNKNOWN REQUEST ####"); |
---|
89 | } |
---|
90 | }, |
---|
91 | |
---|
92 | /** |
---|
93 | * The getPayload_GetCapabilities function is used to generate a valid |
---|
94 | * WPS XML GetCapabilities request using the |
---|
95 | * [payload_GetCapabilities.mustache]{@link http://zoo-project.org/trac/browser/trunk/zoo-project/zoo-client/lib/tpl/payload_GetCapabilities.mustache} |
---|
96 | * template. |
---|
97 | * |
---|
98 | * @static |
---|
99 | * @param {Object} params - The object representing the request. |
---|
100 | * @returns {string} - The corresponding XML request |
---|
101 | * @example |
---|
102 | * // log the XML request in console |
---|
103 | * var request_params = { |
---|
104 | * language: 'en-US' |
---|
105 | * }; |
---|
106 | * console.log(wpsPayload.getPayload_GetCapabilities(request_params)); |
---|
107 | */ |
---|
108 | getPayload_GetCapabilities: function(params) { |
---|
109 | return templates["payload_GetCapabilities"].render(params); |
---|
110 | }, |
---|
111 | |
---|
112 | /** |
---|
113 | * The getPayload_DescribeProcess function is used to generate a valid |
---|
114 | * WPS XML DescribeProcess request using the |
---|
115 | * [payload_DescribeProcess.mustache]{@link http://zoo-project.org/trac/browser/trunk/zoo-project/zoo-client/lib/tpl/payload_DescribeProcess.mustache} |
---|
116 | * template. |
---|
117 | * |
---|
118 | * @static |
---|
119 | * @param {Object} params - The object representing the request. |
---|
120 | * @returns {string} - The corresponding XML request |
---|
121 | * @example |
---|
122 | * // log the XML request in console |
---|
123 | * var request_params = { |
---|
124 | * Identifier: ["Buffer","Centroid"], |
---|
125 | * language: 'en-US' |
---|
126 | * }; |
---|
127 | * console.log(wpsPayload.getPayload_DescribeProcess(request_params)); |
---|
128 | */ |
---|
129 | getPayload_DescribeProcess: function(params) { |
---|
130 | if (params.Identifier) { |
---|
131 | if ($.isArray(params.Identifier)) { |
---|
132 | return templates["payload_DescribeProcess"].render({identifiers: params.Identifier,language: params.language}); |
---|
133 | } |
---|
134 | else { |
---|
135 | return templates["payload_DescribeProcess"].render({identifiers: [params.Identifier],language: params.language}); |
---|
136 | } |
---|
137 | } |
---|
138 | // TODO: no Identifier |
---|
139 | }, |
---|
140 | |
---|
141 | /** |
---|
142 | * The getPayload_Execute function is used to generate a valid WPS XML |
---|
143 | * Excute request using the |
---|
144 | * [payload_Execute.mustache]{@link http://zoo-project.org/trac/browser/trunk/zoo-project/zoo-client/lib/tpl/payload_Execute.mustache} |
---|
145 | * template. |
---|
146 | * |
---|
147 | * @static |
---|
148 | * @param {Object} params - The object representing the request. |
---|
149 | * @returns {string} - The corresponding XML request |
---|
150 | * @example |
---|
151 | * // log the XML request in console |
---|
152 | * var request_params = { |
---|
153 | * Identifier: "Buffer", |
---|
154 | * DataInputs: [{"identifier":"InputPolygon","href":"http://features.org/toto.xml","mimeType":"text/xml"}], |
---|
155 | * DataOutputs: [{"identifier":"Result","mimeType":"application/json"}], |
---|
156 | * language: 'en-US' |
---|
157 | * }; |
---|
158 | * console.log(wpsPayload.getPayload_Execute(request_params)); |
---|
159 | */ |
---|
160 | getPayload_Execute: function(params) { |
---|
161 | if (params.DataInputs) { |
---|
162 | for (var i = 0; i < params.DataInputs.length; i++) { |
---|
163 | /** |
---|
164 | * Define inputs type depending on presence of mimeType, |
---|
165 | * dataType and crs or dimension for ComplexData, |
---|
166 | * LiteralData and BoundingBox data respectively |
---|
167 | */ |
---|
168 | var hasType=false; |
---|
169 | var lp={"data":"literal","mime":"complex"}; |
---|
170 | for(j in lp){ |
---|
171 | if (params.DataInputs[i][j+"Type"]) { |
---|
172 | params.DataInputs[i]['is_'+lp[j]] = true; |
---|
173 | params.DataInputs[i].type=lp[j]; |
---|
174 | if(j=="mime"){ |
---|
175 | params.DataInputs[i].is_XML=(params.DataInputs[i][j+"Type"]=="text/xml"); |
---|
176 | if(!params.DataInputs[i].is_XML){ |
---|
177 | var tmp=params.DataInputs[i][j+"Type"].split(";"); |
---|
178 | params.DataInputs[i].is_XML=(tmp[0]=="text/xml"); |
---|
179 | } |
---|
180 | } |
---|
181 | hasType=true; |
---|
182 | } |
---|
183 | } |
---|
184 | if(!hasType){ |
---|
185 | if (params.DataInputs[i]["type"]=="bbox" || |
---|
186 | params.DataInputs[i]["dimension"] || |
---|
187 | params.DataInputs[i]["crs"]){ |
---|
188 | |
---|
189 | params.DataInputs[i]['is_bbox'] = true; |
---|
190 | params.DataInputs[i].type='bbox'; |
---|
191 | hasType=true; |
---|
192 | |
---|
193 | } |
---|
194 | if(!hasType){ |
---|
195 | params.DataInputs[i]['is_literal'] = true; |
---|
196 | params.DataInputs[i].type = "literal"; |
---|
197 | } |
---|
198 | } |
---|
199 | /* |
---|
200 | * Set some default values and flags. |
---|
201 | */ |
---|
202 | if (params.DataInputs[i].type == 'bbox') { |
---|
203 | if (!params.DataInputs[i].crs) { |
---|
204 | params.DataInputs[i].crs = "EPSG:4326"; |
---|
205 | } |
---|
206 | if (!params.DataInputs[i].dimension) { |
---|
207 | params.DataInputs[i].dimension = 2; |
---|
208 | } |
---|
209 | } |
---|
210 | |
---|
211 | // Complex data from payload callback. |
---|
212 | console.log("CALLBACK"); |
---|
213 | console.log(params.DataInputs[i]); |
---|
214 | if (params.DataInputs[i].complexPayload_callback) { |
---|
215 | params.DataInputs[i].value = window[params.DataInputs[i].complexPayload_callback]; |
---|
216 | console.log(params.DataInputs[i].value); |
---|
217 | } |
---|
218 | |
---|
219 | // Complex data from reference. |
---|
220 | if (params.DataInputs[i].href) { |
---|
221 | params.DataInputs[i].is_reference = true; |
---|
222 | //params.DataInputs[i].href = utils.encodeXML(params.DataInputs[i].href); |
---|
223 | if (params.DataInputs[i].method == 'POST') { |
---|
224 | params.DataInputs[i].is_post = true; |
---|
225 | } else { |
---|
226 | params.DataInputs[i].is_get = true; |
---|
227 | } |
---|
228 | } |
---|
229 | else { |
---|
230 | // Complex data, embeded |
---|
231 | } |
---|
232 | } // for i loop |
---|
233 | } |
---|
234 | |
---|
235 | //console.log("==== OUTPUTS ===="); |
---|
236 | if (params.DataOutputs || params.storeExecuteResponse || params.status || params.lineage) { |
---|
237 | |
---|
238 | for (var i = 0; i < params.DataOutputs.length; i++) { |
---|
239 | //console.log(params.DataOutputs[i]); |
---|
240 | |
---|
241 | if (params.DataOutputs[i].type) { |
---|
242 | params.DataOutputs[i]['is_'+params.DataOutputs[i].type] = true; |
---|
243 | } |
---|
244 | } |
---|
245 | } |
---|
246 | |
---|
247 | return templates["payload_Execute"].render(params); |
---|
248 | }, |
---|
249 | |
---|
250 | |
---|
251 | }; |
---|
252 | |
---|
253 | }); |
---|