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=ff26bfd21f30a6b67f683607924b366ef32a1011;hb=refs%2Fchanges%2F49%2F1149%2F2;hp=3ba1eb18435612565e8c6f68c125d75bb951420c;hpb=144cfa4b4a926b7d0c3d5f60ada050c609762699;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 3ba1eb1843..ff26bfd21f 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 @@ -17,7 +17,7 @@ import java.util.concurrent.ConcurrentMap; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; -import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -52,11 +52,7 @@ import org.opendaylight.controller.topologymanager.TopologyUserLinkConfig; * 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("/") @@ -66,7 +62,7 @@ public class TopologyNorthboundJAXRS { @Context public void setSecurityContext(SecurityContext context) { - username = context.getUserPrincipal().getName(); + if (context != null && context.getUserPrincipal() != null) username = context.getUserPrincipal().getName(); } protected String getUserName() { @@ -78,12 +74,13 @@ public class TopologyNorthboundJAXRS { * Retrieve the Topology * * @param containerName - * The container for which we want to retrieve the topology (Eg. 'default') + * The container for which we want to retrieve the topology (Eg. + * 'default') * - * @return A List of EdgeProps each EdgeProp represent an Edge of the grap + * @return A List of EdgeProps each EdgeProp represent an Edge of the graph * with the corresponding properties attached to it. * - *
+     *         
      *
      * Example:
      *
@@ -91,10 +88,87 @@ public class TopologyNorthboundJAXRS {
      * http://localhost:8080/controller/nb/v2/topology/default
      *
      * Response in XML:
-     * <?xml version="1.0" encoding="UTF-8" standalone="yes"?><topology><edgeProperties><edge><tailNodeConnector id="2" type="OF"><node id="00:00:00:00:00:00:00:02" type="OF"/></tailNodeConnector><headNodeConnector id="2" type="OF"><node id="00:00:00:00:00:00:00:51" type="OF"/></headNodeConnector></edge><properties><state><value>1</value></state><config><value>1</value></config><name><value>C1_2-L2_2</value></name><timeStamp><value>1377279422032</value><name>creation</name></timeStamp></properties></edgeProperties><edgeProperties><edge><tailNodeConnector id="2" type="OF"><node id="00:00:00:00:00:00:00:51" type="OF"/></tailNodeConnector><headNodeConnector id="2" type="OF"><node id="00:00:00:00:00:00:00:02" type="OF"/></headNodeConnector></edge><properties><state><value>1</value></state><name><value>L2_2-C1_2</value></name><config><value>1</value></config><timeStamp><value>1377279423564</value><name>creation</name></timeStamp></properties></edgeProperties></topology>
+     * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+     * <topology>
+     *     <edgeProperties>
+     *         <edge>
+     *             <tailNodeConnector>
+     *                 <node>
+     *                     <id>00:00:00:00:00:00:00:02</id>
+     *                     <type>OF</type>
+     *                 </node>
+     *                 <id>2</id>
+     *                 <type>OF</type>
+     *             </tailNodeConnector>
+     *             <headNodeConnector>
+     *                 <node>
+     *                     <id>00:00:00:00:00:00:00:51</id>
+     *                     <type>OF</type>
+     *                 </node>
+     *                 <id>2</id>
+     *                 <type>OF</type>
+     *             </headNodeConnector>
+     *         </edge>
+     *         <properties>
+     *             <state>
+     *                 <value>1</value>
+     *             </state>
+     *             <config>
+     *                 <value>1</value>
+     *             </config>
+     *             <name>
+     *                 <value>C1_2-L2_2</value>
+     *             </name>
+     *             <timeStamp>
+     *                 <value>1377279422032</value>
+     *                 <name>creation</name>
+     *             </timeStamp>
+     *         </properties>
+     *     </edgeProperties>
+     *     <edgeProperties>
+     *         <edge>
+     *             <tailNodeConnector>
+     *                 <node>
+     *                     <id>00:00:00:00:00:00:00:51</id>
+     *                     <type>OF</type>
+     *                 </node>
+     *                 <id>2</id>
+     *                 <type>OF</type>
+     *             </tailNodeConnector>
+     *             <headNodeConnector>
+     *                 <node>
+     *                     <id>00:00:00:00:00:00:00:02</id>
+     *                     <type>OF</type>
+     *                 </node>
+     *                 <id>2</id>
+     *                 <type>OF</type>
+     *             </headNodeConnector>
+     *         </edge>
+     *         <properties>
+     *             <state>
+     *                 <value>1</value>
+     *             </state>
+     *             <name>
+     *                 <value>L2_2-C1_2</value>
+     *             </name>
+     *             <config>
+     *                 <value>1</value>
+     *             </config>
+     *             <timeStamp>
+     *                 <value>1377279423564</value>
+     *                 <name>creation</name>
+     *             </timeStamp>
+     *         </properties>
+     *     </edgeProperties>
+     * </topology>
      *
      * Response in JSON:
-     * {"edgeProperties":[{"edge":{"tailNodeConnector":{"@id":"2","@type":"OF","node":{"@id":"00:00:00:00:00:00:00:02","@type":"OF"}},"headNodeConnector":{"@id":"2","@type":"OF","node":{"@id":"00:00:00:00:00:00:00:51","@type":"OF"}}},"properties":{"timeStamp":{"value":"1377278961017","name":"creation"}}},{"edge":{"tailNodeConnector":{"@id":"2","@type":"OF","node":{"@id":"00:00:00:00:00:00:00:51","@type":"OF"}},"headNodeConnector":{"@id":"2","@type":"OF","node":{"@id":"00:00:00:00:00:00:00:02","@type":"OF"}}},"properties":{"timeStamp":{"value":"1377278961018","name":"creation"}}}]}
+     * {"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"}}}]}
      *
      * 
*/ @@ -122,8 +196,7 @@ public class TopologyNorthboundJAXRS { if (topo != null) { List res = new ArrayList(); for (Map.Entry> entry : topo.entrySet()) { - EdgeProperties el = new EdgeProperties(entry.getKey(), - entry.getValue()); + EdgeProperties el = new EdgeProperties(entry.getKey(), entry.getValue()); res.add(el); } return new Topology(res); @@ -145,17 +218,26 @@ public class TopologyNorthboundJAXRS { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/topology/default/user-link + * http://localhost:8080/controller/nb/v2/topology/default/userLinks * * Response in XML: - * <?xml version="1.0" encoding="UTF-8" standalone="yes"?><topologyUserLinks><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> + * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> + * <topologyUserLinks> + * <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> * * 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"}} + * {"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"}} * *
*/ - @Path("/{containerName}/user-link") + @Path("/{containerName}/userLinks") @GET @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @TypeHint(TopologyUserLinks.class) @@ -192,6 +274,8 @@ public class TopologyNorthboundJAXRS { * * @param containerName * Name of the Container (Eg. 'default') + * @param name + * Name of the user link * @param TopologyUserLinkConfig * in JSON or XML format * @return Response as dictated by the HTTP Response Status code @@ -201,18 +285,24 @@ public class TopologyNorthboundJAXRS { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/topology/default/user-link/config1-content + * http://localhost:8080/controller/nb/v2/topology/default/userLink/link1 * * Request in XML: - * <?xml version="1.0" encoding="UTF-8" standalone="yes"?><topologyUserLinks><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> + * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> + * <topologyUserLinks> + * <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> * * 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"} * * */ - @Path("/{containerName}/user-link") - @POST + @Path("/{containerName}/userLink/{name}") + @PUT @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @StatusCodes({ @@ -223,7 +313,8 @@ public class TopologyNorthboundJAXRS { @ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") }) public Response addUserLink( @PathParam(value = "containerName") String containerName, - @TypeHint(TopologyUserLinkConfig.class) JAXBElement userLinkConfig) { + @PathParam(value = "name") String name, + @TypeHint(TopologyUserLinkConfig.class) TopologyUserLinkConfig userLinkConfig) { if (!NorthboundUtils.isAuthorized( getUserName(), containerName, Privilege.WRITE, this)) { @@ -238,9 +329,9 @@ public class TopologyNorthboundJAXRS { RestMessages.NOCONTAINER.toString()); } - Status status = topologyManager.addUserLink(userLinkConfig.getValue()); + Status status = topologyManager.addUserLink(userLinkConfig); if (status.isSuccess()) { - NorthboundUtils.auditlog("User Link", username, "added", userLinkConfig.getValue().getName(), containerName); + NorthboundUtils.auditlog("User Link", username, "added", userLinkConfig.getName(), containerName); return Response.status(Response.Status.CREATED).build(); } throw new InternalServerErrorException(status.getDescription()); @@ -260,16 +351,16 @@ public class TopologyNorthboundJAXRS { * Example: * * RequestURL: - * http://localhost:8080/controller/nb/v2/topology/default/user-link/config1 + * http://localhost:8080/controller/nb/v2/topology/default/userLink/config1 * * */ - @Path("/{containerName}/user-link/{name}") + @Path("/{containerName}/userLink/{name}") @DELETE @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @StatusCodes({ - @ResponseCode(code = 200, condition = "Operation successful"), + @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( @@ -292,8 +383,8 @@ public class TopologyNorthboundJAXRS { Status ret = topologyManager.deleteUserLink(name); if (ret.isSuccess()) { NorthboundUtils.auditlog("User Link", username, "removed", name, containerName); - return Response.ok().build(); + return Response.noContent().build(); } - throw new ResourceNotFoundException(ret.getDescription()); + return NorthboundUtils.getResponse(ret); } }