X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnorthbound%2Ftopology%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ftopology%2Fnorthbound%2FTopologyNorthboundJAXRS.java;h=427aa1c1deaaf98c86fa3ecd072757bc6331892c;hb=494d528befd3908cc1b5f1c7706d34414819ef03;hp=ff26bfd21f30a6b67f683607924b366ef32a1011;hpb=d059b1faef43031951d426048974fa9b32dceba3;p=controller.git diff --git a/opendaylight/northbound/topology/src/main/java/org/opendaylight/controller/topology/northbound/TopologyNorthboundJAXRS.java b/opendaylight/northbound/topology/src/main/java/org/opendaylight/controller/topology/northbound/TopologyNorthboundJAXRS.java index ff26bfd21f..427aa1c1de 100644 --- a/opendaylight/northbound/topology/src/main/java/org/opendaylight/controller/topology/northbound/TopologyNorthboundJAXRS.java +++ b/opendaylight/northbound/topology/src/main/java/org/opendaylight/controller/topology/northbound/TopologyNorthboundJAXRS.java @@ -25,7 +25,6 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; -import javax.xml.bind.JAXBElement; import org.codehaus.enunciate.jaxrs.ResponseCode; import org.codehaus.enunciate.jaxrs.StatusCodes; @@ -37,6 +36,7 @@ import org.opendaylight.controller.northbound.commons.exception.UnauthorizedExce import org.opendaylight.controller.northbound.commons.utils.NorthboundUtils; import org.opendaylight.controller.sal.authorization.Privilege; import org.opendaylight.controller.sal.core.Edge; +import org.opendaylight.controller.sal.core.NodeConnector; import org.opendaylight.controller.sal.core.Property; import org.opendaylight.controller.sal.utils.ServiceHelper; import org.opendaylight.controller.sal.utils.Status; @@ -62,7 +62,9 @@ public class TopologyNorthboundJAXRS { @Context public void setSecurityContext(SecurityContext context) { - if (context != null && context.getUserPrincipal() != null) username = context.getUserPrincipal().getName(); + if (context != null && context.getUserPrincipal() != null) { + username = context.getUserPrincipal().getName(); + } } protected String getUserName() { @@ -84,10 +86,10 @@ public class TopologyNorthboundJAXRS { * * Example: * - * RequestURL: + * Request URL: * http://localhost:8080/controller/nb/v2/topology/default * - * Response in XML: + * Response body in XML: * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> * <topology> * <edgeProperties> @@ -162,14 +164,75 @@ public class TopologyNorthboundJAXRS { * </edgeProperties> * </topology> * - * Response in JSON: - * {"edgeProperties":[{"edge":{"tailNodeConnector":{"node":{"id":"00:00:00:00:00:00:00:02","type":"OF"}, - * "id":"2","type":"OF"},"headNodeConnector":{"node":{"id":"00:00:00:00:00:00:00:51","type":"OF"},"id": - * "2","type":"OF"}},"properties":{"timeStamp":{"value":"1377278961017","name":"creation"}}}, - * {"edge":{"tailNodeConnector":{"node":{"id":"00:00:00:00:00:00:00:51","type":"OF"},"id": - * "2","type":"OF"}},"headNodeConnector":{"node":{"id":"00:00:00:00:00:00:00:02","type":"OF"}, - * "id":"2","type":"OF"}},"properties":{"timeStamp":{"value":"1377278961018","name":"creation"}}}]} - * + * Response body in JSON: + * { + * "edgeProperties":[ + * { + * "edge":{ + * "tailNodeConnector":{ + * "node":{ + * "id":"00:00:00:00:00:00:00:02", + * "type":"OF" + * }, + * "id":"2", + * "type":"OF" + * }, + * "headNodeConnector":{ + * "node":{ + * "id":"00:00:00:00:00:00:00:51", + * "type":"OF" + * }, + * "id":"2", + * "type":"OF" + * } + * }, + * "properties":{ + * "timeStamp": { + * "value": 1379527162648, + * "name": "creation", + * }, + * "name": { + * "value": "s2-eth3" + * }, + * "state": { + * "value": 1 + * }, + * "config": { + * "value": 1 + * }, + * "bandwidth": { + * "value": 10000000000 + * } + * } + * }, + * { + * "edge":{ + * "tailNodeConnector":{ + * "node":{ + * "id":"00:00:00:00:00:00:00:51", + * "type":"OF" + * }, + * "id":"2", + * "type":"OF" + * }, + * "headNodeConnector":{ + * "node":{ + * "id":"00:00:00:00:00:00:00:02", + * "type":"OF" + * }, + * "id":"2", + * "type":"OF" + * } + * }, + * "properties":{ + * "timeStamp": { + * "value": 1379527162648, + * "name": "creation", + * } + * } + * } + * ] + * } * */ @Path("/{containerName}") @@ -179,17 +242,14 @@ public class TopologyNorthboundJAXRS { @StatusCodes({ @ResponseCode(code = 404, condition = "The Container Name was not found") }) public Topology getTopology(@PathParam("containerName") String containerName) { - if (!NorthboundUtils.isAuthorized( - getUserName(), containerName, Privilege.READ, this)) { - throw new UnauthorizedException( - "User is not authorized to perform this operation on container " - + containerName); + if (!NorthboundUtils.isAuthorized(getUserName(), containerName, Privilege.READ, this)) { + throw new UnauthorizedException("User is not authorized to perform this operation on container " + + containerName); } - ITopologyManager topologyManager = (ITopologyManager) ServiceHelper - .getInstance(ITopologyManager.class, containerName, this); + ITopologyManager topologyManager = (ITopologyManager) ServiceHelper.getInstance(ITopologyManager.class, + containerName, this); if (topologyManager == null) { - throw new ResourceNotFoundException( - RestMessages.NOCONTAINER.toString()); + throw new ResourceNotFoundException(RestMessages.NOCONTAINER.toString()); } Map> topo = topologyManager.getEdges(); @@ -209,31 +269,40 @@ public class TopologyNorthboundJAXRS { * Retrieve the user configured links * * @param containerName - * The container for which we want to retrieve the user links (Eg. 'default') + * The container for which we want to retrieve the user links + * (Eg. 'default') * * @return A List of user configured links * - *
+     *         
      *
      * Example:
      *
-     * RequestURL:
+     * Request URL:
      * http://localhost:8080/controller/nb/v2/topology/default/userLinks
      *
-     * Response in XML:
+     * Response body in XML:
      * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-     * <topologyUserLinks>
+     * <list>
      * <userLinks>
      * <status>Success</status>
      * <name>link1</name>
      * <srcNodeConnector>OF|2@OF|00:00:00:00:00:00:00:02</srcNodeConnector>
      * <dstNodeConnector>OF|2@OF|00:00:00:00:00:00:00:51</dstNodeConnector>
      * </userLinks>
-     * </topologyUserLinks>
+     * </list>
      *
-     * Response in JSON:
-     * {"userLinks":{"status":"Success","name":"link1","srcNodeConnector":
-     * "OF|2@OF|00:00:00:00:00:00:00:02","dstNodeConnector":"OF|2@OF|00:00:00:00:00:00:00:51"}}
+     * Response body in JSON:
+    * {
+     *   "userLinks": [
+     *    {
+     *      "status": "Success",
+     *      "name": "link1",
+     *      "srcNodeConnector": "OF|2@OF|00:00:00:00:00:00:00:02",
+     *      "dstNodeConnector": "OF|5@OF|00:00:00:00:00:00:00:05"
+     *    }
+     *  ]
+     * }
      *
      * 
*/ @@ -242,27 +311,21 @@ public class TopologyNorthboundJAXRS { @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @TypeHint(TopologyUserLinks.class) @StatusCodes({ @ResponseCode(code = 404, condition = "The Container Name was not found") }) - public TopologyUserLinks getUserLinks( - @PathParam("containerName") String containerName) { + public TopologyUserLinks getUserLinks(@PathParam("containerName") String containerName) { - if (!NorthboundUtils.isAuthorized( - getUserName(), containerName, Privilege.READ, this)) { - throw new UnauthorizedException( - "User is not authorized to perform this operation on container " - + containerName); + if (!NorthboundUtils.isAuthorized(getUserName(), containerName, Privilege.READ, this)) { + throw new UnauthorizedException("User is not authorized to perform this operation on container " + + containerName); } - ITopologyManager topologyManager = (ITopologyManager) ServiceHelper - .getInstance(ITopologyManager.class, containerName, this); + ITopologyManager topologyManager = (ITopologyManager) ServiceHelper.getInstance(ITopologyManager.class, + containerName, this); if (topologyManager == null) { - throw new ResourceNotFoundException( - RestMessages.NOCONTAINER.toString()); + throw new ResourceNotFoundException(RestMessages.NOCONTAINER.toString()); } - ConcurrentMap userLinks = topologyManager - .getUserLinks(); + ConcurrentMap userLinks = topologyManager.getUserLinks(); if ((userLinks != null) && (userLinks.values() != null)) { - List res = new ArrayList( - userLinks.values()); + List res = new ArrayList(userLinks.values()); return new TopologyUserLinks(res); } @@ -280,24 +343,29 @@ public class TopologyNorthboundJAXRS { * in JSON or XML format * @return Response as dictated by the HTTP Response Status code * - *
+     *         
      *
      * Example:
      *
-     * RequestURL:
+     * Request URL:
      * http://localhost:8080/controller/nb/v2/topology/default/userLink/link1
      *
-     * Request in XML:
+     * Request body in XML:
      * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-     * <topologyUserLinks>
+     * <topologyUserLinkConfig>
      * <status>Success</status>
      * <name>link1</name>
      * <srcNodeConnector>OF|2@OF|00:00:00:00:00:00:00:02</srcNodeConnector>
      * <dstNodeConnector>OF|2@OF|00:00:00:00:00:00:00:51</dstNodeConnector>
-     * </topologyUserLinks>
+     * </topologyUserLinkConfig>
      *
-     * Request in JSON:
-     * {"status":"Success","name":"link1","srcNodeConnector":"OF|2@OF|00:00:00:00:00:00:00:02","dstNodeConnector":"OF|2@OF|00:00:00:00:00:00:00:51"}
+     * Request body in JSON:
+     * {
+     *    "status":"Success",
+     *    "name":"link1",
+     *    "srcNodeConnector":"OF|2@OF|00:00:00:00:00:00:00:02",
+     *    "dstNodeConnector":"OF|2@OF|00:00:00:00:00:00:00:51"
+     * }
      *
      * 
*/ @@ -306,32 +374,34 @@ public class TopologyNorthboundJAXRS { @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @StatusCodes({ - @ResponseCode(code = 201, condition = "User Link added successfully"), - @ResponseCode(code = 404, condition = "The Container Name was not found"), - @ResponseCode(code = 409, condition = "Failed to add User Link due to Conflicting Name"), - @ResponseCode(code = 500, condition = "Failed to add User Link. Failure Reason included in HTTP Error response"), - @ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") }) - public Response addUserLink( - @PathParam(value = "containerName") String containerName, + @ResponseCode(code = 201, condition = "User Link added successfully"), + @ResponseCode(code = 404, condition = "The Container Name was not found"), + @ResponseCode(code = 409, condition = "Failed to add User Link due to Conflicting Name"), + @ResponseCode(code = 500, condition = "Failed to add User Link. Failure Reason included in HTTP Error response"), + @ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") }) + public Response addUserLink(@PathParam(value = "containerName") String containerName, @PathParam(value = "name") String name, @TypeHint(TopologyUserLinkConfig.class) TopologyUserLinkConfig userLinkConfig) { - if (!NorthboundUtils.isAuthorized( - getUserName(), containerName, Privilege.WRITE, this)) { - throw new UnauthorizedException( - "User is not authorized to perform this operation on container " - + containerName); + if (!NorthboundUtils.isAuthorized(getUserName(), containerName, Privilege.WRITE, this)) { + throw new UnauthorizedException("User is not authorized to perform this operation on container " + + containerName); } - ITopologyManager topologyManager = (ITopologyManager) ServiceHelper - .getInstance(ITopologyManager.class, containerName, this); + ITopologyManager topologyManager = (ITopologyManager) ServiceHelper.getInstance(ITopologyManager.class, + containerName, this); if (topologyManager == null) { - throw new ResourceNotFoundException( - RestMessages.NOCONTAINER.toString()); + throw new ResourceNotFoundException(RestMessages.NOCONTAINER.toString()); } Status status = topologyManager.addUserLink(userLinkConfig); if (status.isSuccess()) { - NorthboundUtils.auditlog("User Link", username, "added", userLinkConfig.getName(), containerName); + NorthboundUtils + .auditlog( + "User Link",username,"added", userLinkConfig.getName() + " from " + NorthboundUtils.getPortName( + NodeConnector.fromString(userLinkConfig.getSrcNodeConnector()), + containerName, this) + " to " + + NorthboundUtils.getPortName(NodeConnector.fromString + (userLinkConfig.getDstNodeConnector()),containerName, this), containerName); return Response.status(Response.Status.CREATED).build(); } throw new InternalServerErrorException(status.getDescription()); @@ -346,11 +416,11 @@ public class TopologyNorthboundJAXRS { * Name of the Link Configuration (Eg. 'config1') * @return Response as dictated by the HTTP Response Status code * - *
+     *         
      *
      * Example:
      *
-     * RequestURL:
+     * Request URL:
      * http://localhost:8080/controller/nb/v2/topology/default/userLink/config1
      *
      * 
@@ -359,25 +429,19 @@ public class TopologyNorthboundJAXRS { @DELETE @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - @StatusCodes({ - @ResponseCode(code = 204, condition = "User link removed successfully"), - @ResponseCode(code = 404, condition = "The Container Name or Link Configuration Name was not found"), - @ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") }) - public Response deleteUserLink( - @PathParam("containerName") String containerName, - @PathParam("name") String name) { + @StatusCodes({ @ResponseCode(code = 204, condition = "User link removed successfully"), + @ResponseCode(code = 404, condition = "The Container Name or Link Configuration Name was not found"), + @ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") }) + public Response deleteUserLink(@PathParam("containerName") String containerName, @PathParam("name") String name) { - if (!NorthboundUtils.isAuthorized( - getUserName(), containerName, Privilege.WRITE, this)) { - throw new UnauthorizedException( - "User is not authorized to perform this operation on container " - + containerName); + if (!NorthboundUtils.isAuthorized(getUserName(), containerName, Privilege.WRITE, this)) { + throw new UnauthorizedException("User is not authorized to perform this operation on container " + + containerName); } - ITopologyManager topologyManager = (ITopologyManager) ServiceHelper - .getInstance(ITopologyManager.class, containerName, this); + ITopologyManager topologyManager = (ITopologyManager) ServiceHelper.getInstance(ITopologyManager.class, + containerName, this); if (topologyManager == null) { - throw new ResourceNotFoundException( - RestMessages.NOCONTAINER.toString()); + throw new ResourceNotFoundException(RestMessages.NOCONTAINER.toString()); } Status ret = topologyManager.deleteUserLink(name);