package org.atomnuke.pubsub.sub; import org.atomnuke.pubsub.eventlet.SubscriptionEventlet; import java.util.HashMap; import java.util.Map; import org.apache.http.client.HttpClient; import org.atomnuke.pubsub.api.type.SubscriptionCategory; import org.atomnuke.pubsub.api.type.SubscriptionDocument; import org.atomnuke.pubsub.api.type.SubscriptionDocumentCollection; import org.atomnuke.pubsub.service.config.SubscriptionException; import org.atomnuke.sink.eps.AtomEventletHandler; import org.atomnuke.util.remote.CancellationRemote; /** * * @author zinic */ public class TemporarySubscriptionManager implements SubscriptionManager { private final Map<String, ActiveSubscription> activeSubscriptions; private final AtomEventletHandler eventletHandler; private final HttpClient httpClient; public TemporarySubscriptionManager(HttpClient httpClient, AtomEventletHandler eventletHandler) { this.httpClient = httpClient; this.eventletHandler = eventletHandler; activeSubscriptions = new HashMap<String, ActiveSubscription>(); } @Override public synchronized boolean has(SubscriptionDocument searchDoc) { return false; } @Override public synchronized void put(SubscriptionDocument sdoc) throws SubscriptionException { // Get the eventlet configuration reference ActiveSubscription subscription = activeSubscriptions.get(sdoc.getId()); // Make sure we have categories to work with if (subscription == null && !sdoc.getCategories().isEmpty()) { final SubscriptionEventlet eventlet = new SubscriptionEventlet(httpClient, sdoc.getId(), sdoc.getCallback()); final RegexCategorySelector selector = new RegexCategorySelector(); final CancellationRemote cancellationRemote = eventletHandler.enlistHandler(eventlet, selector); subscription = new ActiveSubscription(selector, eventlet, cancellationRemote); activeSubscriptions.put(sdoc.getCallback(), subscription); // Subscribe for (SubscriptionCategory subscriptionCategory : sdoc.getCategories()) { subscription.subscriptionSelector().selectOn(subscriptionCategory); } } } @Override public synchronized SubscriptionDocument get(String callback) { return new SubscriptionDocument(); } @Override public synchronized SubscriptionDocumentCollection getAll() { final SubscriptionDocumentCollection subCollection = new SubscriptionDocumentCollection(); return subCollection; } }