package com.sap.research.fiware.ngsi10.simple.subscriptionmanagement; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; import noNamespace.ContextAttribute; import com.sap.research.fiware.ngsi10.simple.wrappers.EntityIdWrapper; /** * Holds references to all subscriptions requested by NGSI clients. * Manages the subscription IDs * Informs all subscriptions when a context attribute changed. * * */ public class SubscriptionManager { private static final Logger LOG = Logger.getLogger(SubscriptionManager.class.getName()); private static SubscriptionManager instance; private SubscriptionManager() { subscriptions = new HashMap<String, Subscription>(); } private Integer currentID = 0; private Map<String, Subscription> subscriptions; /** * @return the singleton instance of SubscriptionManager */ public static SubscriptionManager get() { if(instance == null) return (instance = new SubscriptionManager()); return instance; } /** * Adds a new subscription. Assigns an unused subscription ID to it. * @param subscription * @return the subscription ID */ public String add(Subscription subscription) { String id = nextID(); subscription.setSubscriptionID(id); subscriptions.put(id, subscription); subscription.activate(); LOG.info("Added new "+subscription.getInfo()); return id; } private String nextID() { currentID++; return currentID.toString(); } /** * Removes a known subscription * @param subscription */ public void remove(Subscription subscription) { subscriptions.remove(subscription.getSubscriptionID()); LOG.info("Removed subscription "+subscription.getInfo()); } /** * Indicates an attribute value has changed in order for the clients to be notified * @param entity entity * @param contextAttributes the entity's changed context attribute */ public void valueUpdateReceivedFromTo(EntityIdWrapper entity, ContextAttribute oldAttribute, ContextAttribute newAttribute) { for(Subscription subscription : subscriptions.values()) { subscription.valueUpdateReceivedFromTo(entity, oldAttribute, newAttribute); } } }