ckan-connector/src/main/java/org/gcube/data/access/ckanconnector/OrganizationManager.java

85 lines
3.2 KiB
Java

package org.gcube.data.access.ckanconnector;
import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import lombok.extern.slf4j.Slf4j;
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
import org.gcube.common.scope.api.ScopeProvider;
import com.google.gson.Gson;
import eu.trentorise.opendata.jackan.CkanClient;
import eu.trentorise.opendata.jackan.exceptions.CkanNotFoundException;
import eu.trentorise.opendata.jackan.model.CkanOrganization;
@Path("organization")
@Slf4j
public class OrganizationManager {
@Context ServletContext context;
@PUT
@Path("/{name}")
public Response create(@PathParam("name") String organizationName) {
log.info("create called");
try{
if (AuthorizationProvider.instance.get()==null || AuthorizationProvider.instance.get().getUserName() == null ) return Response.status(Status.UNAUTHORIZED).build();
String ckanKey = context.getInitParameter("ckanKey");
int internalPort = Integer.parseInt(context.getInitParameter("internalPort"));
CkanClient ckanClient = new CkanClient("http://127.0.0.1:"+internalPort, ckanKey);
CkanOrganization org = new CkanOrganization(organizationName.replaceAll(" ", "_").replace(".", "_").toLowerCase());
org.setDisplayName(organizationName);
org.setTitle(organizationName);
ckanClient.createOrganization(org);
log.info("create organizzation {} called from user {} in scope {}",organizationName, AuthorizationProvider.instance.get().getUserName(), ScopeProvider.instance.get());
return Response.ok().build();
}catch(Exception e){
log.error("error trying to create organization "+organizationName,e);
return Response.serverError().entity(e.getMessage()).build();
}
}
@GET
@Path("/{name}")
@Produces(MediaType.APPLICATION_JSON)
public String get(@PathParam("name") String organizationName) {
log.info("get called with name {}", organizationName);
if (AuthorizationProvider.instance.get()==null || AuthorizationProvider.instance.get().getUserName() == null ) throw new WebApplicationException("user authentication needed",Response.Status.UNAUTHORIZED);
String ckanKey = context.getInitParameter("ckanKey");
int internalPort = Integer.parseInt(context.getInitParameter("internalPort"));
try{
CkanClient ckanClient = new CkanClient("http://127.0.0.1:"+internalPort, ckanKey);
CkanOrganization org = ckanClient.getOrganization(organizationName.replaceAll(" ", "_").replace(".", "_").toLowerCase());
log.trace("organization {} found",organizationName);
return new Gson().toJson(org);
}catch(CkanNotFoundException e){
log.error("organization {} doesn't exist",organizationName);
throw new WebApplicationException("organization "+organizationName+" doesn't exist",Response.Status.NOT_FOUND);
} catch (Exception e) {
log.error("error trying to contect ckan",e);
throw new WebApplicationException("error trying to contect ckan",Response.Status.INTERNAL_SERVER_ERROR);
}
}
}