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.codehaus.enunciate.jaxrs.TypeHint;
+import org.opendaylight.controller.configuration.IConfigurationService;
import org.opendaylight.controller.containermanager.IContainerManager;
import org.opendaylight.controller.northbound.commons.RestMessages;
import org.opendaylight.controller.northbound.commons.exception.BadRequestException;
import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException;
import org.opendaylight.controller.northbound.commons.exception.ServiceUnavailableException;
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.core.Property;
public class ControllerManagerNorthbound {
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) {
@ResponseCode(code = 404, condition = "The containerName or property is not found"),
@ResponseCode(code = 503, condition = "One or more of Controller Services are unavailable") })
public ControllerProperties getControllerProperties(@PathParam("containerName") String containerName,
- @QueryParam("propertyName") String propertyName) {
+ @QueryParam("propertyName") String propertyName,
+ @QueryParam("_q") String queryString) {
if (!isValidContainer(containerName)) {
throw new ResourceNotFoundException("Container " + containerName + " does not exist.");
throw new ResourceNotFoundException("Unable to find property with name: " + propertyName);
}
properties.add(property);
-
- return new ControllerProperties(properties);
+ ControllerProperties result = new ControllerProperties(properties);
+ if (queryString != null) {
+ queryContext.createQuery(queryString, ControllerProperties.class)
+ .filter(result, Property.class);
+ }
+ return result;
}
return NorthboundUtils.getResponse(status);
}
+ /**
+ * Save controller configuration
+ *
+ * Request URL:
+ * http://localhost:8080/controller/nb/v2/controllermanager/configuration
+ *
+ * Request body is empty
+ */
+ @Path("/configuration")
+ @PUT
+ @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
+ @StatusCodes({
+ @ResponseCode(code = 204, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "User not authorized to perform this operation"),
+ @ResponseCode(code = 503, condition = "Configuration service is unavailable.")
+ })
+ public Response saveConfiguration() {
+
+ if (!NorthboundUtils.isAuthorized(getUserName(), "default", Privilege.WRITE, this)) {
+ throw new UnauthorizedException("User is not authorized to perform this operation");
+ }
+
+ IConfigurationService configService = (IConfigurationService)
+ ServiceHelper.getGlobalInstance(IConfigurationService.class, this);
+
+ if (configService == null) {
+ throw new ServiceUnavailableException("Configuration Service " +
+ RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ Status status = configService.saveConfigurations();
+ if (status.isSuccess()) {
+ NorthboundUtils.auditlog("Controller Configuration", username,
+ "save", "configuration");
+ return Response.noContent().build();
+ }
+ return NorthboundUtils.getResponse(status);
+ }
+
private boolean isValidContainer(String containerName) {
if (containerName.equals(GlobalConstants.DEFAULT.toString())) {
return true;