Hook up the Intent and Flow REST APIs to the modules/services.
This involved some slight changes to the way the intent service is registered
with the Floodlight module framework. Also FlowManagerModule is now registered
in the services file.
Change-Id: I6a97599e625c385a07996e03236fe94af4705650
diff --git a/src/main/java/net/floodlightcontroller/restserver/CustomSerializerHelper.java b/src/main/java/net/floodlightcontroller/restserver/CustomSerializerHelper.java
index 9810563..8f99be0 100644
--- a/src/main/java/net/floodlightcontroller/restserver/CustomSerializerHelper.java
+++ b/src/main/java/net/floodlightcontroller/restserver/CustomSerializerHelper.java
@@ -24,7 +24,6 @@
* used on the class in different contexts.
*/
public class CustomSerializerHelper {
- private final ObjectMapper mapper;
private final SimpleModule customSerializerModule;
private CustomSerializerFactory sf;
@@ -32,9 +31,7 @@
* Constructor.
*/
public CustomSerializerHelper() {
- mapper = new ObjectMapper();
customSerializerModule = new SimpleModule("custom-serializers", new Version(1, 0, 0, null));
- mapper.registerModule(customSerializerModule);
sf = new CustomSerializerFactory();
}
@@ -58,9 +55,12 @@
* @return a representation with the custom serializers applied
*/
public Representation applySerializers(JacksonRepresentation<?> jacksonRepresentation) {
+ ObjectMapper mapper = jacksonRepresentation.getObjectMapper();
+
mapper.registerModule(customSerializerModule);
- jacksonRepresentation.setObjectMapper(mapper);
mapper.setSerializerFactory(sf);
+ jacksonRepresentation.setObjectMapper(mapper);
+
return jacksonRepresentation;
}
}
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java b/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
index 83092eb..b1bb067 100644
--- a/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
+++ b/src/main/java/net/onrc/onos/core/flowmanager/FlowManagerModule.java
@@ -11,6 +11,7 @@
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
+import net.floodlightcontroller.restserver.IRestApiService;
import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
import net.onrc.onos.api.flowmanager.Flow;
import net.onrc.onos.api.flowmanager.FlowBatchHandle;
@@ -20,6 +21,7 @@
import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
import net.onrc.onos.api.flowmanager.FlowManagerListener;
import net.onrc.onos.core.datagrid.ISharedCollectionsService;
+import net.onrc.onos.core.flowmanager.web.FlowManagerWebRoutable;
import net.onrc.onos.core.matchaction.MatchActionFloodlightService;
import net.onrc.onos.core.matchaction.MatchActionService;
import net.onrc.onos.core.registry.IControllerRegistryService;
@@ -43,6 +45,7 @@
private FlowBatchMap flowBatchMap;
private FlowEventDispatcher flowEventDispatcher;
private FlowBatchOperationExecutor flowBatchOperationExecutor;
+ private IRestApiService restApi;
@Override
public Collection<Class<? extends IFloodlightService>> getModuleServices() {
@@ -65,7 +68,8 @@
return Arrays.asList(
MatchActionFloodlightService.class,
ISharedCollectionsService.class,
- IControllerRegistryService.class);
+ IControllerRegistryService.class,
+ IRestApiService.class);
}
@Override
@@ -73,6 +77,7 @@
matchActionService = context.getServiceImpl(MatchActionFloodlightService.class);
registryService = context.getServiceImpl(IControllerRegistryService.class);
sharedCollectionService = context.getServiceImpl(ISharedCollectionsService.class);
+ restApi = context.getServiceImpl(IRestApiService.class);
}
@Override
@@ -91,6 +96,8 @@
flowBatchOperationExecutor =
new FlowBatchOperationExecutor(matchActionService, flowMap, flowBatchMap);
flowBatchOperationExecutor.start();
+
+ restApi.addRestletRoutable(new FlowManagerWebRoutable());
}
/**
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/web/FlowManagerWebRoutable.java b/src/main/java/net/onrc/onos/core/flowmanager/web/FlowManagerWebRoutable.java
index e41b023..781b851 100644
--- a/src/main/java/net/onrc/onos/core/flowmanager/web/FlowManagerWebRoutable.java
+++ b/src/main/java/net/onrc/onos/core/flowmanager/web/FlowManagerWebRoutable.java
@@ -13,7 +13,7 @@
@Override
public Restlet getRestlet(Context context) {
- Router router = new Router();
+ Router router = new Router(context);
router.attach("", FlowResource.class);
return router;
}
diff --git a/src/main/java/net/onrc/onos/core/flowmanager/web/FlowResource.java b/src/main/java/net/onrc/onos/core/flowmanager/web/FlowResource.java
index 4079687..b1381e0 100644
--- a/src/main/java/net/onrc/onos/core/flowmanager/web/FlowResource.java
+++ b/src/main/java/net/onrc/onos/core/flowmanager/web/FlowResource.java
@@ -6,7 +6,7 @@
import net.floodlightcontroller.restserver.CustomSerializerHelper;
import net.onrc.onos.api.flowmanager.Flow;
import net.onrc.onos.api.flowmanager.FlowId;
-import net.onrc.onos.api.flowmanager.FlowManagerService;
+import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
@@ -22,7 +22,7 @@
*/
public class FlowResource extends ServerResource {
- private final CustomSerializerHelper flowSerializers;
+ private CustomSerializerHelper flowSerializers;
/**
* Constructs a FlowResource.
@@ -49,13 +49,14 @@
*/
@Get("json")
public Representation retrieve() {
- FlowManagerService flowService =
- (FlowManagerService) getContext().getAttributes()
- .get(FlowManagerService.class.getCanonicalName());
+ FlowManagerFloodlightService flowService =
+ (FlowManagerFloodlightService) getContext().getAttributes()
+ .get(FlowManagerFloodlightService.class.getCanonicalName());
Collection<Flow> flows = flowService.getFlows();
return flowSerializers.applySerializers(
(JacksonRepresentation<?>) toRepresentation(flows, null));
}
+
}
diff --git a/src/main/java/net/onrc/onos/core/newintent/IntentFloodlightModule.java b/src/main/java/net/onrc/onos/core/newintent/IntentFloodlightModule.java
index cf0e5e5..3ac9882 100644
--- a/src/main/java/net/onrc/onos/core/newintent/IntentFloodlightModule.java
+++ b/src/main/java/net/onrc/onos/core/newintent/IntentFloodlightModule.java
@@ -1,9 +1,17 @@
package net.onrc.onos.core.newintent;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
+import net.floodlightcontroller.restserver.IRestApiService;
import net.onrc.onos.api.flowmanager.FlowId;
import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
import net.onrc.onos.api.flowmanager.FlowManagerService;
@@ -21,18 +29,12 @@
import net.onrc.onos.api.newintent.PathIntent;
import net.onrc.onos.api.newintent.PointToPointIntent;
import net.onrc.onos.core.datagrid.ISharedCollectionsService;
+import net.onrc.onos.core.newintent.web.IntentWebRoutable;
import net.onrc.onos.core.registry.IControllerRegistryService;
import net.onrc.onos.core.topology.ITopologyService;
import net.onrc.onos.core.util.IdBlockAllocator;
import net.onrc.onos.core.util.IdGenerator;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
/**
* A Floodlight module for Intent Service.
*/
@@ -49,7 +51,7 @@
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
Map<Class<? extends IFloodlightService>, IFloodlightService> impls = new HashMap<>();
- impls.put(IFloodlightService.class, this);
+ impls.put(IntentFloodlightService.class, this);
return impls;
}
@@ -88,6 +90,9 @@
registerDefaultCompilers(intentIdGenerator, flowIdGenerator, topologyService);
registerDefaultInstallers(flowManagerService);
+
+ IRestApiService restApi = context.getServiceImpl(IRestApiService.class);
+ restApi.addRestletRoutable(new IntentWebRoutable());
}
private void registerDefaultCompilers(IdGenerator<IntentId> intentIdGenerator,
diff --git a/src/main/java/net/onrc/onos/core/newintent/web/IntentResource.java b/src/main/java/net/onrc/onos/core/newintent/web/IntentResource.java
index 4230298..b4cd133 100644
--- a/src/main/java/net/onrc/onos/core/newintent/web/IntentResource.java
+++ b/src/main/java/net/onrc/onos/core/newintent/web/IntentResource.java
@@ -5,8 +5,8 @@
import net.floodlightcontroller.restserver.CustomSerializerHelper;
import net.onrc.onos.api.newintent.Intent;
+import net.onrc.onos.api.newintent.IntentFloodlightService;
import net.onrc.onos.api.newintent.IntentId;
-import net.onrc.onos.api.newintent.IntentService;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
@@ -50,9 +50,9 @@
*/
@Get("json")
public Representation retrieve() {
- IntentService intentService =
- (IntentService) getContext().getAttributes()
- .get(IntentService.class.getCanonicalName());
+ IntentFloodlightService intentService =
+ (IntentFloodlightService) getContext().getAttributes()
+ .get(IntentFloodlightService.class.getCanonicalName());
Set<Intent> intents = intentService.getIntents();
diff --git a/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule b/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule
index d4743ca..ac2f6a7 100644
--- a/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule
+++ b/src/main/resources/META-INF/services/net.floodlightcontroller.core.module.IFloodlightModule
@@ -24,3 +24,4 @@
net.onrc.onos.core.metrics.OnosMetricsModule
net.onrc.onos.core.newintent.IntentFloodlightModule
net.onrc.onos.core.matchaction.MatchActionModule
+net.onrc.onos.core.flowmanager.FlowManagerModule
diff --git a/src/test/java/net/onrc/onos/core/flowmanager/web/FlowResourceTest.java b/src/test/java/net/onrc/onos/core/flowmanager/web/FlowResourceTest.java
index 37f6f5a..b112aa6 100644
--- a/src/test/java/net/onrc/onos/core/flowmanager/web/FlowResourceTest.java
+++ b/src/test/java/net/onrc/onos/core/flowmanager/web/FlowResourceTest.java
@@ -20,7 +20,7 @@
import net.onrc.onos.api.flowmanager.Flow;
import net.onrc.onos.api.flowmanager.FlowId;
import net.onrc.onos.api.flowmanager.FlowLink;
-import net.onrc.onos.api.flowmanager.FlowManagerService;
+import net.onrc.onos.api.flowmanager.FlowManagerFloodlightService;
import net.onrc.onos.api.flowmanager.OpticalPathFlow;
import net.onrc.onos.api.flowmanager.PacketPathFlow;
import net.onrc.onos.api.flowmanager.Path;
@@ -53,13 +53,15 @@
Set<Flow> flowSet = createFlows();
// Create a mock flow manager service that will return the flows
- FlowManagerService flowManager = createMock(FlowManagerService.class);
+ FlowManagerFloodlightService flowManager =
+ createMock(FlowManagerFloodlightService.class);
expect(flowManager.getFlows()).andReturn(flowSet);
replay(flowManager);
// Inject the flow manager service into a Restlet context
Map<String, Object> attributes = new HashMap<>();
- attributes.put(FlowManagerService.class.getCanonicalName(), flowManager);
+ attributes.put(FlowManagerFloodlightService.class.getCanonicalName(),
+ flowManager);
Context context = new Context();
context.setAttributes(attributes);
@@ -87,8 +89,8 @@
PacketPathFlow packetFlow = new PacketPathFlow(new FlowId(1L),
match, PortNumber.uint32(1), path,
- Collections.<Action>singletonList(new ModifyDstMacAction(MACAddress.valueOf(4L))),
- 0, 0);
+ Collections.<Action>singletonList(
+ new ModifyDstMacAction(MACAddress.valueOf(4L))), 0, 0);
OpticalPathFlow opticalFlow = new OpticalPathFlow(new FlowId(2L),
PortNumber.uint32(3), path,
diff --git a/src/test/java/net/onrc/onos/core/newintent/web/IntentResourceTest.java b/src/test/java/net/onrc/onos/core/newintent/web/IntentResourceTest.java
index 74ba5c1..860b0e1 100644
--- a/src/test/java/net/onrc/onos/core/newintent/web/IntentResourceTest.java
+++ b/src/test/java/net/onrc/onos/core/newintent/web/IntentResourceTest.java
@@ -15,8 +15,8 @@
import net.floodlightcontroller.util.MACAddress;
import net.onrc.onos.api.newintent.Intent;
+import net.onrc.onos.api.newintent.IntentFloodlightService;
import net.onrc.onos.api.newintent.IntentId;
-import net.onrc.onos.api.newintent.IntentService;
import net.onrc.onos.api.newintent.MultiPointToSinglePointIntent;
import net.onrc.onos.api.newintent.PointToPointIntent;
import net.onrc.onos.core.matchaction.action.ModifyDstMacAction;
@@ -45,13 +45,14 @@
Set<Intent> intentSet = createIntents();
// Create a mock intent service that will return the intents
- IntentService intentService = createMock(IntentService.class);
+ IntentFloodlightService intentService =
+ createMock(IntentFloodlightService.class);
expect(intentService.getIntents()).andReturn(intentSet).anyTimes();
replay(intentService);
// Inject the intent service into a Restlet context
Map<String, Object> attributes = new HashMap<>();
- attributes.put(IntentService.class.getCanonicalName(), intentService);
+ attributes.put(IntentFloodlightService.class.getCanonicalName(), intentService);
Context context = new Context();
context.setAttributes(attributes);