ComponentModelUtil.computeAsymmetricSetDifferences(
requiredSubscriptions, activeSubscriptions, newSubscriptions, removedSubscriptions,set);
if (exceededMaxSubscriptions(requiredSubscriptions, newSubscriptions)) return;
SubscriptionManager manager = getSubscriptionManager();
if (manager != null) {
for (FeedProvider feed:removedSubscriptions) {
LOGGER.debug("removing subscription for {0}", feed.getSubscriptionId());
manager.unsubscribe(feed.getSubscriptionId());
activeFeeds.remove(feed);
}
List<String> newlyAddedSubscriptionIds = new ArrayList<String> (newSubscriptions.size());
for (FeedProvider feed:newSubscriptions) {
LOGGER.debug("adding subscription for {0}", feed.getSubscriptionId());
newlyAddedSubscriptionIds.add(feed.getSubscriptionId());
activeFeeds.put(feed, feed.getTimeService().getCurrentTime());
}
assert newlyAddedSubscriptionIds.size() == newSubscriptions.size();
if (!newlyAddedSubscriptionIds.isEmpty()) {
manager.subscribe(newlyAddedSubscriptionIds.toArray(new String[newlyAddedSubscriptionIds.size()]));
}
activeSubscriptions = requiredSubscriptions;
} else {
LOGGER.warn("subscription manager not available, subscriptions not updated");