package org.gcube.resourcemanagement.manager.webapp.rs; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.gcube.informationsystem.model.entity.Context; import static org.gcube.resourcemanagement.manager.io.rs.RMContextPath.*; import org.gcube.resourcemanagement.manager.io.exceptions.CodeException; import org.gcube.resourcemanagement.manager.webapp.ResourceInitializer; import org.gcube.resourcemanagement.manager.webapp.context.CreateRequest; import org.gcube.resourcemanagement.manager.webapp.context.ResponseFromResourceRegistry; import org.gcube.resourcemanagement.manager.webapp.context.ContextHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Methods for manipulating {@link Context}s. * * @author Manuele Simi (ISTI-CNR) * */ @Path(CONTEXT_ROOT) public class RMContext { private static Logger logger = LoggerFactory.getLogger(RMContext.class); /* * e.g. POST /resource-manager/context/ */ @POST @Produces(ResourceInitializer.APPLICATION_JSON_CHARSET_UTF_8) public Response create(String json, @QueryParam(FORCE_RRURL_PARAM) String rrURL) throws CodeException { logger.info("Requested to create context {} with json {}", Context.NAME, json); logger.info("Force URL: " + rrURL); Response response; ContextHolder holder = new ContextHolder(json); ResponseFromResourceRegistry returned = CreateRequest.fromHolder(holder).forceURL(rrURL).submit(); logger.debug("Returned " + returned.wasSuccessful()); if (returned.wasSuccessful()) { response = Response.status(Status.CREATED) .entity(returned.getMessage().map(m -> m).orElse("Context successfully created.")) .type(ResourceInitializer.APPLICATION_JSON_CHARSET_UTF_8).build(); } else { if (returned.getException().isPresent()) throw returned.getException().get(); response = Response.status(Status.BAD_REQUEST) .entity(returned.getMessage().map(m -> m).orElse("Failed to create the context.")).build(); } return response; } }