// // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // limitations under the License. // // Module dependencies. var azureCommon = require('./../../../common/common.core'); var azureutil = azureCommon.util; var xmlbuilder = azureCommon.xmlbuilder; var Constants = azureCommon.Constants; var HeaderConstants = Constants.HeaderConstants; /** * Creates a new QueueMessageResult object. * @class * The QueueMessageResult class is used to store the queue message information. * * @property {string} queue The queue name. * @property {string} messageId The message id. * @property {string} popReceipt The pop receipt. * @property {string} messageText The message text. * @property {string} timeNextVisible The time next visible. * @property {string} insertionTime The insertion time. * @property {string} expirationTime The expiration time. * @property {number} dequeueCount The dequeue count. * * @constructor * @param {string} [queue] The queue name. * @param {string} [messageId] The message id. * @param {string} [popReceipt] The pop receipt. */ function QueueMessageResult(queue, messageId, popReceipt) { if (queue) { this.queue = queue; } if (messageId) { this.messageId = messageId; } if (popReceipt) { this.popReceipt = popReceipt; } } /** * Builds an XML representation for a queue message * * @param {string} messageJs The queue message. * @param {QueueMessageEncoder} The message encoder. * @return {string} The XML queue message. */ QueueMessageResult.serialize = function (messageJs, encoder) { var doc = xmlbuilder.create(Constants.QueueConstants.QUEUE_MESSAGE_ELEMENT, { version: '1.0', encoding: 'utf-8' }); if (messageJs) { var message; if (encoder !== null && encoder !== undefined) { message = encoder.encode(messageJs); } else { message = messageJs; } doc.ele(Constants.QueueConstants.MESSAGE_TEXT_ELEMENT) .txt(message) .up(); } else { doc.ele(Constants.QueueConstants.MESSAGE_TEXT_ELEMENT).up(); } return doc.doc().toString(); }; /** * Pase the XML representation of a queue message to a QueueMessageResult object. * * @param {Object} messageXml The XML representation of the queue message. * @param {QueueMessageEncoder} The message encoder. * @return {QueueMessageResult} The QueueMessageResult object. */ QueueMessageResult.parse = function (messageXml, encoder) { var queueMessageResult = new QueueMessageResult(); for (var property in messageXml) { if (property === Constants.QueueConstants.MESSAGE_TEXT_ELEMENT) { if (encoder !== null && encoder !== undefined) { queueMessageResult.messageText = encoder.decode(messageXml[property]); } else { queueMessageResult.messageText = messageXml[property]; } } else { var resultPropertyName = azureutil.normalizePropertyNameFromXML(property); queueMessageResult[resultPropertyName] = messageXml[property]; } } // Convert dequeueCount to number if (queueMessageResult.dequeueCount) { queueMessageResult.dequeueCount = parseInt(queueMessageResult.dequeueCount); } return queueMessageResult; }; QueueMessageResult.prototype.getPropertiesFromHeaders = function (headers) { var self = this; var setmessagePropertyFromHeaders = function (messageProperty, headerProperty) { if (!self[messageProperty] && headers[headerProperty.toLowerCase()]) { self[messageProperty] = headers[headerProperty.toLowerCase()]; } }; setmessagePropertyFromHeaders('popReceipt', HeaderConstants.POP_RECEIPT); setmessagePropertyFromHeaders('timeNextVisible', HeaderConstants.TIME_NEXT_VISIBLE); }; module.exports = QueueMessageResult;