You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
2.1 KiB
Java

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;
}
}