All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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