X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnorthbound%2Fflowprogrammer%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fflowprogrammer%2Fnorthbound%2FFlowProgrammerNorthbound.java;h=ea3f748dcc02e820c6b88aab5f2a10a73fef0cdf;hb=refs%2Fchanges%2F49%2F1149%2F2;hp=2d270b44f98e23d65c0f03bddab1f913aabda7d5;hpb=6806719ffe0a4ac6d0585faeadc86fc947e8095b;p=controller.git diff --git a/opendaylight/northbound/flowprogrammer/src/main/java/org/opendaylight/controller/flowprogrammer/northbound/FlowProgrammerNorthbound.java b/opendaylight/northbound/flowprogrammer/src/main/java/org/opendaylight/controller/flowprogrammer/northbound/FlowProgrammerNorthbound.java index 2d270b44f9..ea3f748dcc 100644 --- a/opendaylight/northbound/flowprogrammer/src/main/java/org/opendaylight/controller/flowprogrammer/northbound/FlowProgrammerNorthbound.java +++ b/opendaylight/northbound/flowprogrammer/src/main/java/org/opendaylight/controller/flowprogrammer/northbound/FlowProgrammerNorthbound.java @@ -48,7 +48,7 @@ import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.switchmanager.ISwitchManager; /** - * Flow Configuration Northbound API + * Flow Configuration Northbound API provides capabilities to program flows. * *
*
@@ -56,11 +56,7 @@ import org.opendaylight.controller.switchmanager.ISwitchManager; * Authentication realm : opendaylight
* Transport : HTTP and HTTPS
*
- * HTTPS Authentication is disabled by default. Administrator can enable it in - * tomcat-server.xml after adding a proper keystore / SSL certificate from a - * trusted authority.
- * More info : - * http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration + * HTTPS Authentication is disabled by default. * */ @Path("/") @@ -158,7 +154,7 @@ public class FlowProgrammerNorthbound { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/flow/default + * http://localhost:8080/controller/nb/v2/flowprogrammer/default * * Response in XML: * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> @@ -223,7 +219,7 @@ public class FlowProgrammerNorthbound { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/flow/default/node/OF/00:00:00:00:00:00:00:01 + * http://localhost:8080/controller/nb/v2/flowprogrammer/default/node/OF/00:00:00:00:00:00:00:01 * * Response in XML: * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> @@ -296,7 +292,7 @@ public class FlowProgrammerNorthbound { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/flow/default/node/OF/00:00:00:00:00:00:00:01/static-flow/flow1 + * http://localhost:8080/controller/nb/v2/flowprogrammer/default/node/OF/00:00:00:00:00:00:00:01/staticFlow/flow1 * * Response in XML: * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> @@ -320,7 +316,7 @@ public class FlowProgrammerNorthbound { * * */ - @Path("/{containerName}/node/{nodeType}/{nodeId}/static-flow/{name}") + @Path("/{containerName}/node/{nodeType}/{nodeId}/staticFlow/{name}") @GET @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @TypeHint(FlowConfig.class) @@ -357,7 +353,8 @@ public class FlowProgrammerNorthbound { } /** - * Add a flow configuration + * Add a flow configuration. If a flow by the given name already + * exists, this method will respond with a non-successful status response. * * @param containerName * Name of the Container (Eg. 'default') @@ -376,7 +373,7 @@ public class FlowProgrammerNorthbound { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/flow/default/node/OF/00:00:00:00:00:00:00:01/static-flow/flow1 + * http://localhost:8080/controller/nb/v2/flowprogrammer/default/node/OF/00:00:00:00:00:00:00:01/staticFlow/flow1 * * Request in XML: * <flowConfig> @@ -400,7 +397,7 @@ public class FlowProgrammerNorthbound { * */ - @Path("/{containerName}/node/{nodeType}/{nodeId}/static-flow/{name}") + @Path("/{containerName}/node/{nodeType}/{nodeId}/staticFlow/{name}") @PUT @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @StatusCodes({ @@ -417,7 +414,7 @@ public class FlowProgrammerNorthbound { @PathParam(value = "name") String name, @PathParam("nodeType") String nodeType, @PathParam(value = "nodeId") String nodeId, - @TypeHint(FlowConfig.class) JAXBElement flowConfig) { + @TypeHint(FlowConfig.class) FlowConfig flowConfig) { if (!NorthboundUtils.isAuthorized( getUserName(), containerName, Privilege.WRITE, this)) { @@ -425,8 +422,13 @@ public class FlowProgrammerNorthbound { "User is not authorized to perform this operation on container " + containerName); } - handleResourceCongruence(name, flowConfig.getValue().getName()); - handleResourceCongruence(nodeId, flowConfig.getValue().getNode().getNodeIDString()); + + if (flowConfig.getNode() == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("Invalid Configuration. Node is null or empty") + .build(); + } + handleResourceCongruence(name, flowConfig.getName()); + handleResourceCongruence(nodeId, flowConfig.getNode().getNodeIDString()); handleDefaultDisabled(containerName); IForwardingRulesManager frm = getForwardingRulesManagerService(containerName); @@ -444,7 +446,7 @@ public class FlowProgrammerNorthbound { + RestMessages.RESOURCECONFLICT.toString()); } - Status status = frm.addStaticFlow(flowConfig.getValue()); + Status status = frm.addStaticFlow(flowConfig); if (status.isSuccess()) { NorthboundUtils.auditlog("Flow", username, "added", name, containerName); @@ -471,16 +473,16 @@ public class FlowProgrammerNorthbound { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/flow/default/node/OF/00:00:00:00:00:00:00:01/static-flow/flow1 + * http://localhost:8080/controller/nb/v2/flowprogrammer/default/node/OF/00:00:00:00:00:00:00:01/staticFlow/flow1 * * */ - @Path("/{containerName}/node/{nodeType}/{nodeId}/static-flow/{name}") + @Path("/{containerName}/node/{nodeType}/{nodeId}/staticFlow/{name}") @DELETE @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @StatusCodes({ - @ResponseCode(code = 200, condition = "Flow Config deleted successfully"), + @ResponseCode(code = 204, condition = "Flow Config deleted successfully"), @ResponseCode(code = 401, condition = "User not authorized to perform this operation"), @ResponseCode(code = 404, condition = "The Container Name or Node-id or Flow Name passed is not found"), @ResponseCode(code = 406, condition = "Failed to delete Flow config due to invalid operation. Failure details included in HTTP Error response"), @@ -518,6 +520,7 @@ public class FlowProgrammerNorthbound { Status status = frm.removeStaticFlow(name, node); if (status.isSuccess()) { NorthboundUtils.auditlog("Flow", username, "removed", name, containerName); + return Response.noContent().build(); } return NorthboundUtils.getResponse(status); } @@ -540,11 +543,11 @@ public class FlowProgrammerNorthbound { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/flow/default/node/OF/00:00:00:00:00:00:00:01/static-flow/flow1 + * http://localhost:8080/controller/nb/v2/flowprogrammer/default/node/OF/00:00:00:00:00:00:00:01/staticFlow/flow1 * * */ - @Path("/{containerName}/node/{nodeType}/{nodeId}/static-flow/{name}") + @Path("/{containerName}/node/{nodeType}/{nodeId}/staticFlow/{name}") @POST @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @StatusCodes({