package com.l7tech.server.wsdm.subscription;

import com.l7tech.gateway.common.service.MetricsSummaryBin;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityManager;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.server.wsdm.Aggregator;
import com.l7tech.server.wsdm.faults.ResourceUnknownFault;
import com.l7tech.server.wsdm.faults.UnacceptableTerminationTimeFault;
import com.l7tech.util.Pair;
import java.util.Collection;
import java.util.Map;
import org.springframework.transaction.annotation.Transactional;

@Transactional(rollbackFor = Throwable.class)
public interface SubscriptionManager extends EntityManager<Subscription, EntityHeader> {
   @Transactional(readOnly = true, rollbackFor = Throwable.class)
   Subscription findByUuid(String var1) throws FindException;

   void deleteByUuid(String var1) throws FindException, DeleteException, ResourceUnknownFault;

   void deleteExpiredSubscriptions() throws DeleteException;

   @Transactional(readOnly = true, rollbackFor = Throwable.class)
   void renewSubscription(String var1, long var2, String var4) throws FindException, UpdateException, ResourceUnknownFault, UnacceptableTerminationTimeFault;

   @Transactional(readOnly = true, rollbackFor = Throwable.class)
   Collection<Subscription> findByNodeAndServiceGoid(String var1, Goid var2) throws FindException;

   @Transactional(readOnly = true, rollbackFor = Throwable.class)
   Collection<Subscription> findBySubscriptionKey(SubscriptionKey var1) throws FindException;

   void notified(String var1) throws UpdateException;

   @Transactional(readOnly = true, rollbackFor = Throwable.class)
   Map<SubscriptionKey, Pair<Subscription, MetricsSummaryBin>> findNotifiableMetricsForNode(String var1, long var2) throws FindException;

   void stealSubscriptionsFromDeadNodes(String var1, long var2);

   void setAggregator(Aggregator var1);
}
