ews javascript api

__extends

declaration
 __extends 

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;