Adding some base-classes to eliminate event and listener boiler-plate code throughout a number of subsystems.
Refactored all core components to take advantage of this; apps remain to be done.
Change-Id: Ib0935ba07ff81b0fa032534004ec9ac6187cbf22
diff --git a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java
index b92067f..b35002d 100644
--- a/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flow/impl/FlowRuleManager.java
@@ -32,12 +32,11 @@
import org.apache.felix.scr.annotations.Service;
import org.onlab.util.Tools;
import org.onosproject.cfg.ComponentConfigService;
+import org.onosproject.net.provider.AbstractListenerProviderRegistry;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.core.IdGenerator;
import org.onosproject.core.Permission;
-import org.onosproject.event.ListenerRegistry;
-import org.onosproject.event.EventDeliveryService;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.device.DeviceService;
@@ -60,7 +59,6 @@
import org.onosproject.net.flow.FlowRuleService;
import org.onosproject.net.flow.FlowRuleStore;
import org.onosproject.net.flow.FlowRuleStoreDelegate;
-import org.onosproject.net.provider.AbstractProviderRegistry;
import org.onosproject.net.provider.AbstractProviderService;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
@@ -77,8 +75,10 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static org.onlab.util.Tools.groupedThreads;
-import static org.slf4j.LoggerFactory.getLogger;
+import static org.onosproject.net.flow.FlowRuleEvent.Type.RULE_ADD_REQUESTED;
+import static org.onosproject.net.flow.FlowRuleEvent.Type.RULE_REMOVE_REQUESTED;
import static org.onosproject.security.AppGuard.checkPermission;
+import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -87,7 +87,8 @@
@Component(immediate = true, enabled = true)
@Service
public class FlowRuleManager
- extends AbstractProviderRegistry<FlowRuleProvider, FlowRuleProviderService>
+ extends AbstractListenerProviderRegistry<FlowRuleEvent, FlowRuleListener,
+ FlowRuleProvider, FlowRuleProviderService>
implements FlowRuleService, FlowRuleProviderRegistry {
public static final String FLOW_RULE_NULL = "FlowRule cannot be null";
@@ -99,9 +100,6 @@
private final Logger log = getLogger(getClass());
- private final ListenerRegistry<FlowRuleEvent, FlowRuleListener>
- listenerRegistry = new ListenerRegistry<>();
-
private final FlowRuleStoreDelegate delegate = new InternalStoreDelegate();
protected ExecutorService deviceInstallers =
@@ -119,9 +117,6 @@
protected FlowRuleStore store;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected EventDeliveryService eventDispatcher;
-
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected DeviceService deviceService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -171,14 +166,12 @@
@Override
public int getFlowRuleCount() {
checkPermission(Permission.FLOWRULE_READ);
-
return store.getFlowRuleCount();
}
@Override
public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
checkPermission(Permission.FLOWRULE_READ);
-
return store.getFlowEntries(deviceId);
}
@@ -207,7 +200,6 @@
@Override
public void removeFlowRulesById(ApplicationId id) {
checkPermission(Permission.FLOWRULE_WRITE);
-
removeFlowRules(Iterables.toArray(getFlowRulesById(id), FlowRule.class));
}
@@ -245,25 +237,10 @@
@Override
public void apply(FlowRuleOperations ops) {
checkPermission(Permission.FLOWRULE_WRITE);
-
operationsService.submit(new FlowOperationsProcessor(ops));
}
@Override
- public void addListener(FlowRuleListener listener) {
- checkPermission(Permission.FLOWRULE_EVENT);
-
- listenerRegistry.addListener(listener);
- }
-
- @Override
- public void removeListener(FlowRuleListener listener) {
- checkPermission(Permission.FLOWRULE_EVENT);
-
- listenerRegistry.removeListener(listener);
- }
-
- @Override
protected FlowRuleProviderService createProviderService(
FlowRuleProvider provider) {
return new InternalFlowRuleProviderService(provider);
@@ -408,13 +385,6 @@
return false;
}
- // Posts the specified event to the local event dispatcher.
- private void post(FlowRuleEvent event) {
- if (event != null) {
- eventDispatcher.post(event);
- }
- }
-
@Override
public void pushFlowMetrics(DeviceId deviceId, Iterable<FlowEntry> flowEntries) {
Set<FlowEntry> storedRules = Sets.newHashSet(store.getFlowEntries(deviceId));
@@ -473,16 +443,12 @@
switch (op.operator()) {
case ADD:
- eventDispatcher.post(
- new FlowRuleEvent(
- FlowRuleEvent.Type.RULE_ADD_REQUESTED,
- op.target()));
+ post(new FlowRuleEvent(RULE_ADD_REQUESTED,
+ op.target()));
break;
case REMOVE:
- eventDispatcher.post(
- new FlowRuleEvent(
- FlowRuleEvent.Type.RULE_REMOVE_REQUESTED,
- op.target()));
+ post(new FlowRuleEvent(RULE_REMOVE_REQUESTED,
+ op.target()));
break;
case MODIFY:
//TODO: do something here when the time comes.