package eu.lod2.rsine.registrationservice; import org.openrdf.model.Model; import org.openrdf.model.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @Component public class RegistrationService { private final Logger logger = LoggerFactory.getLogger(RegistrationService.class); private Collection<Subscription> subscriptions = new HashSet<Subscription>(); public RegistrationService() { } public synchronized void register(Subscription subscription, boolean deleteOthers) { if (deleteOthers) { subscriptions.clear(); } subscriptions.add(subscription); } public synchronized Resource register(Model subscriptionData) { return register(subscriptionData, false); } public synchronized Resource register(Model subscriptionData, boolean overwriteIfExisting) { Subscription subscription = new SubscriptionParser(subscriptionData).createSubscription(); if (subscriptions.contains(subscription)) { if (overwriteIfExisting) { subscriptions.remove(subscription); } else throw new SubscriptionExistsException("Subscription already registered"); } subscriptions.add(subscription); logger.info("Successfully registered subscription " +subscription.getId()); return subscription.getId(); } public synchronized void unregister(Resource subscriptionId) { subscriptions.remove(getSubscription(subscriptionId)); } public synchronized Iterator<Subscription> getSubscriptionIterator() { return subscriptions.iterator(); } public synchronized Subscription getSubscription(Resource subscriptionId) { for (Subscription subscription : subscriptions) { if (subscription.getId().equals(subscriptionId)) return subscription; } throw new SubscriptionNotFoundException(); } }