joynr.dispatching.subscription.util.SubscriptionUtil.js Maven / Gradle / Ivy
/*global JSON: true */
/*
* #%L
* %%
* Copyright (C) 2011 - 2016 BMW Car IT GmbH
* %%
* 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.
* #L%
*/
define(
"joynr/dispatching/subscription/util/SubscriptionUtil",
[],
function() {
/**
* @exports SubscriptionUtil
*/
var SubscriptionUtil = {};
/**
* @param {Map.} subscriptions - Map<String,
* SubscriptionInformation> containing the subscriptions to be serialized
*
* @returns {String} serialized subscriptions
*/
SubscriptionUtil.serializeSubscriptions = function(subscriptions) {
var result = [], subscriptionId;
for (subscriptionId in subscriptions) {
if (subscriptions.hasOwnProperty(subscriptionId)) {
result[result.length] = subscriptions[subscriptionId];
}
}
return JSON.stringify(result);
};
/**
* @param {Map.} subscriptions - Map<String,
* SubscriptionInformation> containing the subscriptions to be serialized
*
* @returns {String} serialized subscriptionIds
*/
SubscriptionUtil.serializeSubscriptionIds = function(subscriptions) {
var result = [], subscriptionId;
for (subscriptionId in subscriptions) {
if (subscriptions.hasOwnProperty(subscriptionId)) {
result[result.length] = subscriptionId;
}
}
return JSON.stringify(result);
};
/**
* @param {String} subscriptions - serialized subscriptions as String
*
* @returns {Map.} deserialized subscriptions
* as Map.<String, SubscriptionInformation>
*/
SubscriptionUtil.deserializeSubscriptions = function(subscriptions) {
var array, result = {}, subscription;
if (JSON && JSON.parse) {
try {
array = JSON.parse(subscriptions);
} catch (err) {
throw new Error(err);
}
}
for (subscription in array) {
if (array.hasOwnProperty(subscription)) {
var object = array[subscription];
result[object.subscriptionId] = object;
}
}
return result;
};
/**
* @param {String} subscriptions - serialized subscriptions as String
*
* @returns {Array.} deserialized subscriptionIds as Array of String
*/
SubscriptionUtil.deserializeSubscriptionIds = function(subscriptions) {
var result = [];
if (JSON && JSON.parse) {
try {
result = JSON.parse(subscriptions);
} catch (err) {
throw new Error(err);
}
}
return result;
};
/**
* @param {Array} expectedFilterParameters - the expected filter parameters of a broadcast subscription
* @param {Array} actualFilterParameters - the actual filter parameters of a broadcast subscription
* @param {String} broadcastName - the name of the checked broadcast
*
* @returns {Object} an object containing possible caughtErrors if the actualFilterParameters do not match
* the expected filter parameters
*/
SubscriptionUtil.checkFilterParameters =
function(expectedFilterParameters, actualFilterParameters, broadcastName) {
var i, result = {
caughtErrors : []
};
if (actualFilterParameters === undefined
|| actualFilterParameters === null
|| Object.keys(actualFilterParameters).length === 0) {
return result;
}
var targetKeys = Object.keys(expectedFilterParameters);
var sourceKeys = Object.keys(actualFilterParameters);
for (i = 0; i < targetKeys.length; i++) {
if (sourceKeys.indexOf(targetKeys[i]) === -1) {
result.caughtErrors.push("Filter parameter "
+ targetKeys[i]
+ " for broadcast \""
+ broadcastName
+ "\" is not provided");
}
}
return result;
};
/**
* @param {String} providerParticipantId - provider's participant ID
* @param {String} multicastName - the name of the multicasts
* @param {Array} paritions - partitions of this multicast
*/
SubscriptionUtil.createMulticastId =
function(providerParticipantId, multicastName, partitions) {
var i, multicastId = providerParticipantId + "/" + multicastName;
if (partitions !== undefined) {
for (i = 0; i < partitions.length; i++) {
multicastId += ("/" + partitions[i]);
}
}
return multicastId;
};
/**
*
* validates if the provided partitions for multicast publications only contains valid characters
* @param {String} partition
* @throws {Error} if partitions contains invalid characters
*/
SubscriptionUtil.validatePartitions =
function(partitions) {
var i, partition;
if (partitions !== undefined) {
for (i = 0; i < partitions.length; i++) {
partition = partitions[i];
if (!partition.match(SubscriptionUtil.VALID_PARTITION_REGEX)
&& !(partition === SubscriptionUtil.SINGLE_POSITION_WILDCARD)
&& !((i + 1 === partitions.length) && partition === SubscriptionUtil.MULTI_LEVEL_WILDCARD)) {
throw new Error(
"Partition "
+ partitions[i]
+ " contains invalid characters.%n"
+ "Must only contain a-z A-Z 0-9, or by a single position wildcard (+),%n"
+ "or the last partition may be a multi-level wildcard (*).");
}
}
}
};
SubscriptionUtil.VALID_PARTITION_REGEX = /^[a-zA-Z0-9]+$/;
SubscriptionUtil.SINGLE_POSITION_WILDCARD = "+";
SubscriptionUtil.MULTI_LEVEL_WILDCARD = "*";
return SubscriptionUtil;
});
© 2015 - 2025 Weber Informatics LLC | Privacy Policy