package org.opendaylight.controller.containermanager.northbound;
-import java.security.Principal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
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.ws.rs.core.UriInfo;
+import javax.ws.rs.ext.ContextResolver;
import org.codehaus.enunciate.jaxrs.ResponseCode;
import org.codehaus.enunciate.jaxrs.StatusCodes;
import org.opendaylight.controller.northbound.commons.exception.ResourceForbiddenException;
import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException;
import org.opendaylight.controller.northbound.commons.exception.UnauthorizedException;
+import org.opendaylight.controller.northbound.commons.query.QueryContext;
import org.opendaylight.controller.northbound.commons.utils.NorthboundUtils;
import org.opendaylight.controller.sal.authorization.Privilege;
import org.opendaylight.controller.sal.authorization.UserLevel;
@Path("/")
public class ContainerManagerNorthbound {
private String username;
+ private QueryContext queryContext;
+
+ @Context
+ public void setQueryContext(ContextResolver<QueryContext> queryCtxResolver) {
+ if (queryCtxResolver != null) {
+ queryContext = queryCtxResolver.getContext(QueryContext.class);
+ }
+ }
@Context
public void setSecurityContext(SecurityContext context) {
* http://localhost:8080/controller/nb/v2/containermanager/containers
*
* Response body in XML:
- * <container-config-list>
- *    <container-config>
+ * <containerConfig-list>
+ *    <containerConfig>
*       <container>black</container>
*       <staticVlan>10</staticVlan>
*       <nodeConnectors>OF|1@OF|00:00:00:00:00:00:00:01</nodeConnectors>
*        <name>tcp</name>
*        <protocol>TCP</protocol>
*       </flowSpecs>
- *     </container-config>
- *     <container-config>
+ *     </containerConfig>
+ *     <containerConfig>
*       <container>red</container>
*       <staticVlan>20</staticVlan>
*       <nodeConnectors>OF|1@OF|00:00:00:00:00:00:00:01</nodeConnectors>
*        <name>udp</name>
*        <protocol>UDP</protocol>
*       </flowSpecs>
- *     </container-config>
- * </container-config-list>
+ *     </containerConfig>
+ * </containerConfig-list>
*
* Response body in JSON:
- * { "container-config" : [
+ * { "containerConfig" : [
* { "container" : "black",
* "nodeConnectors" : [
* "OF|1@OF|00:00:00:00:00:00:00:01", "OF|23@OF|00:00:00:00:00:00:20:21"
@StatusCodes({ @ResponseCode(code = 200, condition = "Operation successful"),
@ResponseCode(code = 401, condition = "User is not authorized to perform this operation"),
@ResponseCode(code = 503, condition = "One or more of Controller Services are unavailable") })
- public ContainerConfigs viewAllContainers() {
+ public ContainerConfigs viewAllContainers(@QueryParam("_q") String queryString) {
handleNetworkAuthorization(getUserName());
IContainerManager containerManager = getContainerManager();
-
- return new ContainerConfigs(containerManager.getContainerConfigList());
+ ContainerConfigs result = new ContainerConfigs(
+ containerManager.getContainerConfigList());
+ if (queryString != null) {
+ queryContext.createQuery(queryString, ContainerConfigs.class)
+ .filter(result, ContainerConfig.class);
+ }
+ return result;
}
/**
* http://localhost:8080/controller/nb/v2/containermanager/container/blue
*
* Response body in XML:
- * <container-config>
+ * <containerConfig>
*     <container>blue</container>
*     <staticVlan>10</staticVlan>
*     <nodeConnectors>OF|1@OF|00:00:00:00:00:00:00:01</nodeConnectors>
*     <nodeConnectors>OF|23@OF|00:00:00:00:00:00:20:21</nodeConnectors>
- * </container-config>
+ * </containerConfig>
*
* Response body in JSON:
* {
- * "container-config": [
+ * "containerConfig": [
* {
* "container": "yellow",
* "staticVlan": "10",
* http://localhost:8080/controller/nb/v2/containermanager/container/yellow
*
* Request body in XML:
- * <container-config>
+ * <containerConfig>
*     <container>yellow</container>
*     <staticVlan>10</staticVlan>
*     <nodeConnectors></nodeConnectors>
- * </container-config>
+ * </containerConfig>
*
* Request body in JSON:
* {
* Response body in XML:
* <flow-spec-config>
*     <name>ssh</name>
+ *     <dlVlan>52</dlVlan>
*     <nwSrc>10.0.0.101</nwSrc>
*     <nwDst>10.0.0.102</nwDst>
*     <protocol>IPv4</protocol>
* Response body in JSON:
* {
* "protocol" : "IPv4",
+ * "dlVlan" : "52",
* "nwDst" : "10.0.0.102",
* "name" : "ssh",
* "nwSrc" : "10.0.0.101",
* <flow-spec-configs>
*     <flow-spec-config>
*       <name>ssh</name>
+ *       <dlVlan>52</dlVlan>
*       <nwSrc>10.0.0.101</nwSrc>
*       <nwDst>10.0.0.102</nwDst>
*       <protocol>IPv4</protocol>
*     </flow-spec-config>
*     <flow-spec-config>
*       <name>http2</name>
+ *       <dlVlan>123</dlVlan>
*       <nwSrc>10.0.0.201</nwSrc>
*       <nwDst>10.0.0.202</nwDst>
*       <protocol></protocol>
* "flow-spec-config": [
* {
* "name": "http",
+ * "dlVlan" : "52",
* "nwSrc": "10.0.0.201",
* "nwDst": "10.0.0.202",
* "protocol": "",
* },
* {
* "name": "ssh",
+ * "dlVlan" : "123",
* "nwSrc": "10.0.0.101",
* "nwDst": "10.0.0.102",
* "protocol": "IPv4",
@StatusCodes({ @ResponseCode(code = 200, condition = "Operation successful"),
@ResponseCode(code = 404, condition = "The container is not found"),
@ResponseCode(code = 503, condition = "One or more of Controller Services are unavailable") })
- public FlowSpecConfigs viewContainerFlowSpecs(@PathParam(value = "container") String container) {
+ public FlowSpecConfigs viewContainerFlowSpecs(@PathParam(value = "container") String container,
+ @QueryParam("_q") String queryString) {
handleContainerAuthorization(container, getUserName());
handleForbiddenOnDefault(container);
handleContainerNotExists(container);
IContainerManager containerManager = getContainerManager();
-
- return new FlowSpecConfigs(containerManager.getContainerFlows(container));
+ FlowSpecConfigs result = new FlowSpecConfigs(
+ containerManager.getContainerFlows(container));
+ if (queryString != null) {
+ queryContext.createQuery(queryString, FlowSpecConfigs.class)
+ .filter(result, ContainerFlowConfig.class);
+ }
+ return result;
}
/**
* Request body in XML:
* <flow-spec-config>
*     <name>http</name>
+ *     <dlVlan>25</dlVlan>
*     <nwSrc>10.0.0.101</nwSrc>
*     <nwDst>10.0.0.102</nwDst>
*     <protocol></protocol>
*
* Request body in JSON:
* {
- * "protocol" : "",
- * "nwDst" : "10.0.0.102",
* "name" : "http",
+ * "dlVlan" : "25",
* "nwSrc" : "10.0.0.101",
+ * "nwDst" : "10.0.0.102",
+ * "protocol" : "",
* "tpSrc" : "80",
* "tpDst" : "100"
* }