var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var ServiceJsonDeserializationException_1 = require("../../Exceptions/ServiceJsonDeserializationException");
var Strings_1 = require("../../Strings");
var EwsLogging_1 = require("../EwsLogging");
var XmlElementNames_1 = require("../XmlElementNames");
var ServiceResult_1 = require("../../Enumerations/ServiceResult");
var ServiceErrorHandling_1 = require("../../Enumerations/ServiceErrorHandling");
var ServiceResponseCollection_1 = require("../Responses/ServiceResponseCollection");
var ServiceResponseException_1 = require("../../Exceptions/ServiceResponseException");
var ServiceXmlDeserializationException_1 = require("../../Exceptions/ServiceXmlDeserializationException");
var RenderingMode_1 = require("../../Enumerations/RenderingMode");
var ExtensionMethods_1 = require("../../ExtensionMethods");
var PromiseFactory_1 = require("../../PromiseFactory");
var SimpleServiceRequestBase_1 = require("./SimpleServiceRequestBase");
var MultiResponseServiceRequest = (function (_super) {
__extends(MultiResponseServiceRequest, _super);
function MultiResponseServiceRequest(service, errorHandlingMode) {
_super.call(this, service);
this.errorHandlingMode = errorHandlingMode;
}
Object.defineProperty(MultiResponseServiceRequest.prototype, "ErrorHandlingMode", {
get: function () { return this.errorHandlingMode; },
enumerable: true,
configurable: true
});
MultiResponseServiceRequest.prototype.CreateServiceResponse = function (service, responseIndex) { throw new Error("abstract; must implemented."); };
//EndExecute(asyncResult: any/*System.IAsyncResult*/): ServiceResponseCollection<TResponse> { throw new Error("MultiResponseServiceRequest.ts - EndExecute : Not implemented."); }
MultiResponseServiceRequest.prototype.Execute = function () {
var _this = this;
return PromiseFactory_1.PromiseFactory.create(function (successDelegate, errorDelegate, progressDelegate) {
_this.InternalExecute().then(function (value) {
var serviceResponses = value;
if (_this.ErrorHandlingMode == ServiceErrorHandling_1.ServiceErrorHandling.ThrowOnError) {
EwsLogging_1.EwsLogging.Assert(serviceResponses.Count == 1, "MultiResponseServiceRequest.Execute", "ServiceErrorHandling.ThrowOnError error handling is only valid for singleton request");
serviceResponses.__thisIndexer(0).ThrowIfNecessary();
}
//return serviceResponses; //no return succedssdelegates take care of returning
if (successDelegate)
successDelegate(serviceResponses);
else {
if (errorDelegate)
errorDelegate(value);
}
}, function (resperr) {
debugger;
if (errorDelegate)
errorDelegate(resperr);
});
});
};
MultiResponseServiceRequest.prototype.GetExpectedResponseMessageCount = function () { throw new Error("Abstract; must implemented."); };
MultiResponseServiceRequest.prototype.GetResponseMessageXmlElementName = function () { throw new Error("Abstract; must implemented."); };
MultiResponseServiceRequest.prototype.ParseResponseXMLJsObject = function (jsObject) {
var serviceResponses = new ServiceResponseCollection_1.ServiceResponseCollection();
//set context to XmlElementNames.ResponseMessages
//todo: this can have multiple reponse messages.
var jsResponseMessages = jsObject[XmlElementNames_1.XmlElementNames.ResponseMessages];
if (!Array.isArray(jsResponseMessages)) {
jsResponseMessages = [jsResponseMessages];
}
var responseMessageXmlElementName = this.GetResponseMessageXmlElementName();
//for (var i = 0; i < responses.length; i++) {
for (var i = 0; i < this.GetExpectedResponseMessageCount(); i++) {
var response = this.CreateServiceResponse(this.Service, i);
//ref: check need for responseMessageXmlElementName
var jsResponseMessage = jsResponseMessages[i];
response.LoadFromXmlJsObject(jsResponseMessage[responseMessageXmlElementName], this.Service); //, responseMessageXmlElementName, this.Service);
// Add the response to the list after it has been deserialized because the response
// list updates an overall result as individual responses are added to it.
serviceResponses.Add(response);
}
// If there's a general error in batch processing,
// the server will return a single response message containing the error
// (for example, if the SavedItemFolderId is bogus in a batch CreateItem
// call). In this case, throw a ServiceResponsException. Otherwise this
// is an unexpected server error.
if (serviceResponses.Count < this.GetExpectedResponseMessageCount()) {
if ((serviceResponses.Count >= 1) && (serviceResponses.__thisIndexer(0).Result == ServiceResult_1.ServiceResult.Error)) {
throw new ServiceResponseException_1.ServiceResponseException(serviceResponses.__thisIndexer(0));
}
else {
throw new ServiceXmlDeserializationException_1.ServiceXmlDeserializationException(ExtensionMethods_1.StringHelper.Format(Strings_1.Strings.TooFewServiceReponsesReturned, this.GetResponseMessageXmlElementName(), this.GetExpectedResponseMessageCount(), serviceResponses.Count));
}
}
return serviceResponses;
};
MultiResponseServiceRequest.prototype.ParseResponse = function (jsonBody) {
if (this.Service.RenderingMethod === RenderingMode_1.RenderingMode.JSON) {
throw new Error("not implemented");
var serviceResponses = new ServiceResponseCollection_1.ServiceResponseCollection();
var jsonResponseMessages = jsonBody[XmlElementNames_1.XmlElementNames.ResponseMessages][XmlElementNames_1.XmlElementNames.Items];
var responseCtr = 0;
for (var _i = 0; _i < jsonResponseMessages.length; _i++) {
var jsonResponseObject = jsonResponseMessages[_i];
var response = this.CreateServiceResponse(this.Service, responseCtr);
response.LoadFromXmlJsObject(jsonResponseObject, this.Service);
// Add the response to the list after it has been deserialized because the response
// list updates an overall result as individual responses are added to it.
serviceResponses.Add(response);
responseCtr++;
}
if (serviceResponses.Count < this.GetExpectedResponseMessageCount()) {
if ((serviceResponses.Count == 1) && (serviceResponses[0].Result == ServiceResult_1.ServiceResult.Error)) {
throw new ServiceResponseException_1.ServiceResponseException(serviceResponses[0]);
}
else {
throw new ServiceJsonDeserializationException_1.ServiceJsonDeserializationException();
}
}
return serviceResponses;
}
else {
return this.ParseResponseXMLJsObject(jsonBody);
}
};
return MultiResponseServiceRequest;
})(SimpleServiceRequestBase_1.SimpleServiceRequestBase);
exports.MultiResponseServiceRequest = MultiResponseServiceRequest;