isc.defineClass("GeRestDataSource", "RestDataSource"); isc.GeRestDataSource.addProperties({ dataFormat: "json", dataUrlPrefix: null, sendMetaData: true, fieldsOnly: false, // Additionally supply meta data to the transformed request transformRequest : function (dsRequest) { var transformedRequest = this.Super("transformRequest", arguments); if (this.sendMetaData) { if (this.fieldsOnly) { var fieldNames = []; for (var field in this.fields) { fieldNames.push(field); } if (fieldNames.length > 0) { transformedRequest[this.metaDataPrefix + "fieldsOnly"] = this.fieldsOnly; transformedRequest[this.metaDataPrefix + "fields"] = fieldNames; } } } return transformedRequest; }, // Additionally supply warnings to the transformed response transformResponse : function (dsResponse, dsRequest, data) { var transformedResponse = this.Super("transformResponse", arguments); transformedResponse.warnings = []; var warnings; if (this.dataFormat == "json") { var rawResponse = data.response || {}; warnings = rawResponse.warnings; } else { warnings = isc.xml.toJS(data.selectNodes("//warnings")); } if (isc.isAn.Array(warnings)) { for (var i = 0; i < warnings.length; i++) { transformedResponse.warnings[i] = warnings[i]; } } return transformedResponse; }, // Build data URLs automatically if a data URL prefix has been supplied getDataURL : function (dsRequest) { if (isc.isA.String(this.dataUrlPrefix)) { var type = dsRequest.operationType; var dataUrl = null; var dataUrlPrefix = this.dataUrlPrefix; if (!dataUrlPrefix.endsWith("/")) { dataUrlPrefix += "/"; } if (type == "fetch") { dataUrl = this.fetchDataURL; if (!isc.isA.String(dataUrl)) { dataUrl = dataUrlPrefix + "/" + type + "." + this.dataFormat; } } else if (type == "update") { dataUrl = this.updateDataURL; if (!isc.isA.String(dataUrl)) { dataUrl = dataUrlPrefix + "/" + type + "." + this.dataFormat; } } else if (type == "add") { dataUrl = this.addDataURL; if (!isc.isA.String(dataUrl)) { dataUrl = dataUrlPrefix + "/" + type + "." + this.dataFormat; } } else if (type == "remove") { dataUrl = this.removeDataURL; if (!isc.isA.String(dataUrl)) { dataUrl = dataUrlPrefix + "/" + type + "." + this.dataFormat; } } if (isc.isA.String(dataUrl)) { return dataUrl.replace(/[/]+/g, "/"); } } return this.Super("getDataURL", arguments); } });