import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
import org.codehaus.enunciate.jaxrs.ResponseCode;
import org.codehaus.enunciate.jaxrs.StatusCodes;
@Context
public void setSecurityContext(SecurityContext context) {
- username = context.getUserPrincipal().getName();
+ if (context != null && context.getUserPrincipal() != null) {
+ username = context.getUserPrincipal().getName();
+ }
}
protected String getUserName() {
* Example:
*
* RequestURL:
- * http://.../default/nodes
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/nodes
*
* Response in XML:
+ * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
* <list>
*    <nodeProperties>
- *       <node type="OF" id="00:00:00:00:00:00:00:02"/>
+ *       <node>
+ *          <id>00:00:00:00:00:00:00:02</id>
+ *          <type>OF</type>
+ *       </node>
*       <properties>
*          <tables>
*             <value>-1</value>
* </list>
*
* Response in JSON:
- * {"nodeProperties":[{"node":{"@type":"OF","@id":"00:00:00:00:00:00:00:02"},"properties":{"tables":{"value":"-1"},
+ * {"nodeProperties":[{"node":{"id":"00:00:00:00:00:00:00:02","type":"OF"},"properties":{"tables":{"value":"-1"},
* "description":{"value":"None"},"actions":{"value":"4095"},"macAddress":{"value":"00:00:00:00:00:02"},"capabilities"
* :{"value":"199"},"timeStamp":{"value":"1377291227877","name":"connectedSince"},"buffers":{"value":"256"}}}]}
*
List<NodeProperties> res = new ArrayList<NodeProperties>();
Set<Node> nodes = switchManager.getNodes();
if (nodes == null) {
- return null;
+ return new Nodes(res);
}
for (Node node : nodes) {
}
/**
- * Add a Description, Tier and Forwarding mode property to a node.
+ * Add a Description, Tier and Forwarding mode property to a node. This
+ * method returns a non-successful response if a node by that name already
+ * exists.
*
* @param containerName
* Name of the Container (Eg. 'default')
* Type of the node being programmed (Eg. 'OF')
* @param nodeId
* Node Identifier as specified by
- * {@link org.opendaylight.controller.sal.core.Node}
- * (Eg. '00:00:00:00:00:00:00:03')
+ * {@link org.opendaylight.controller.sal.core.Node} (Eg.
+ * '00:00:00:00:00:00:00:03')
* @param propertyName
- * Name of the Property. Properties that can be
- * configured are: description, forwarding(only for default
- * container) and tier
+ * Name of the Property. Properties that can be configured are:
+ * description, forwarding(only for default container) and tier
* @param propertyValue
- * Value of the Property. Description can be any string (Eg. 'Node1'),
- * valid values for tier are 0, 1 and 2, and valid values for forwarding are 0 for
- * reactive and 1 for proactive forwarding.
+ * Value of the Property. Description can be any string (Eg.
+ * 'Node1'), valid values for tier are non negative numbers, and
+ * valid values for forwarding are 0 for reactive and 1 for
+ * proactive forwarding.
* @return Response as dictated by the HTTP Response Status code
*
- * <pre>
+ * <pre>
*
* Example:
*
* RequestURL:
- * http://.../default/node/OF/00:00:00:00:00:00:00:03/property/description/Switch3
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/node/OF/00:00:00:00:00:00:00:03/property/description/Switch3
*
* </pre>
*/
@ResponseCode(code = 409, condition = "Unable to update configuration due to cluster conflict or conflicting description property"),
@ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") })
public Response addNodeProperty(
+ @Context UriInfo uriInfo,
@PathParam("containerName") String containerName,
@PathParam("nodeType") String nodeType,
@PathParam("nodeId") String nodeId,
SwitchConfig newSwitchConfig = new SwitchConfig(node.toString(), nodeProperties);
Status status = switchManager.updateNodeConfig(newSwitchConfig);
if (status.isSuccess()) {
- return Response.status(Response.Status.CREATED).build();
+ return Response.created(uriInfo.getRequestUri()).build();
}
return NorthboundUtils.getResponse(status);
}
* Example:
*
* RequestURL:
- * http://.../default/node/OF/00:00:00:00:00:00:00:03/property/forwarding
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/node/OF/00:00:00:00:00:00:00:03/property/forwarding
*
* </pre>
*/
@DELETE
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@StatusCodes({
- @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 204, condition = "Property removed successfully"),
@ResponseCode(code = 400, condition = "The nodeId or configuration is invalid"),
@ResponseCode(code = 401, condition = "User not authorized to perform this operation"),
@ResponseCode(code = 404, condition = "The Container Name or nodeId or configuration name is not found"),
SwitchConfig newSwitchConfig = new SwitchConfig(node.toString(), nodeProperties);
status = switchManager.updateNodeConfig(newSwitchConfig);
if(status.isSuccess()){
- NorthboundUtils.auditlog("Static Route", username, "updated", nodeId, containerName);
+ NorthboundUtils.auditlog("Node Property", username, "removed", propertyName + " from " + nodeId, containerName);
+ return Response.noContent().build();
}
}
}
/**
*
- * Retrieve a list of all the nodeconnectors and their properties in a
- * given node
+ * Retrieve a list of all the nodeconnectors and their properties in a given
+ * node
*
* @param containerName
* The container for which we want to retrieve the list (Eg.
* Example:
*
* RequestURL:
- * http://.../default/node/OF/00:00:00:00:00:00:00:01
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/node/OF/00:00:00:00:00:00:00:01
*
* Response in XML:
+ * <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
* <list>
*    <nodeConnectorProperties>
- *       <nodeconnector type="OF" id="2">
- *          <node type="OF" id="00:00:00:00:00:00:00:01"/>
+ *       <nodeconnector>
+ *          <node>
+ *             <id>00:00:00:00:00:00:00:01</id>
+ *             <type>OF</type>
+ *          </node>
+ *          <id>2</id>
+ *          <type>OF</type>
*       </nodeconnector>
*       <properties>
*          <state>
* </list>
*
* Response in JSON:
- * {"nodeConnectorProperties":[{"nodeconnector":{"@type":"OF","@id":"2","node":{"@type":"OF","@id":"00:00:00:00:00:00:00:01"}},
+ * {"nodeConnectorProperties":[{"nodeconnector":{"node":{"id":"00:00:00:00:00:00:00:01","type":"OF"},"id":"2","type":"OF"},
* "properties":{"state":{"value":"1"},"config":{"value":"1"},"name":{"value":"L1_2-C2_1"}}}]}
*
* </pre>
}
/**
- * Add Bandwidth property to a node connector
+ * Add node-connector property to a node connector. This method returns a
+ * non-successful response if a node connector by the given name already
+ * exists.
*
* @param containerName
* Name of the Container (Eg. 'default')
* Example:
*
* RequestURL:
- * http://.../default/nodeconnector/OF/00:00:00:00:00:00:00:01/OF/2/property/bandwidth/1
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/nodeconnector/OF/00:00:00:00:00:00:00:01/OF/2/property/bandwidth/1
*
* </pre>
*/
@ResponseCode(code = 409, condition = "Unable to add property due to cluster conflict"),
@ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") })
public Response addNodeConnectorProperty(
+ @Context UriInfo uriInfo,
@PathParam("containerName") String containerName,
@PathParam("nodeType") String nodeType,
@PathParam("nodeId") String nodeId,
Status ret = switchManager.addNodeConnectorProp(nc, prop);
if (ret.isSuccess()) {
- return Response.status(Response.Status.CREATED).build();
+ return Response.created(uriInfo.getRequestUri()).build();
}
throw new InternalServerErrorException(ret.getDescription());
}
* Example:
*
* RequestURL:
- * http://.../default/nodeconnector/OF/00:00:00:00:00:00:00:01/OF/2/property/bandwidth
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/nodeconnector/OF/00:00:00:00:00:00:00:01/OF/2/property/bandwidth
*
* </pre>
*/
@DELETE
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@StatusCodes({
- @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 204, condition = "Property removed successfully"),
@ResponseCode(code = 401, condition = "User not authorized to perform this operation"),
@ResponseCode(code = 404, condition = "The Container Name or nodeId or configuration name is not found"),
@ResponseCode(code = 503, condition = "One or more of Controller services are unavailable") })
Status ret = switchManager.removeNodeConnectorProp(nc, propertyName);
if (ret.isSuccess()) {
NorthboundUtils.auditlog("Node Connector Property", username, "removed", nc + " from " + nodeConnectorId, containerName);
- return Response.ok().build();
+ return Response.noContent().build();
}
throw new ResourceNotFoundException(ret.getDescription());
}
* Example:
*
* RequestURL:
- * http://.../default/switch-config
+ * http://localhost:8080/controller/nb/v2/switchmanager/default/save
*
* </pre>
*/
- @Path("/{containerName}/switch-config")
+ @Path("/{containerName}/save")
@POST
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@StatusCodes({