88 lines
2.3 KiB
Java
88 lines
2.3 KiB
Java
|
package org.gcube.gcat.rest;
|
||
|
|
||
|
import javax.ws.rs.InternalServerErrorException;
|
||
|
import javax.ws.rs.core.Response;
|
||
|
import javax.ws.rs.core.Response.ResponseBuilder;
|
||
|
import javax.ws.rs.core.Response.Status;
|
||
|
|
||
|
import org.gcube.gcat.ResourceInitializer;
|
||
|
import org.gcube.gcat.persistence.ckan.CKAN;
|
||
|
|
||
|
public class REST<C extends CKAN> extends BaseREST {
|
||
|
|
||
|
protected final String COLLECTION_PARAMETER;
|
||
|
protected final String ID_PARAMETER;
|
||
|
protected final Class<C> reference;
|
||
|
|
||
|
public REST(String collection_name, String id_name, Class<C> reference) {
|
||
|
this.COLLECTION_PARAMETER = collection_name;
|
||
|
this.ID_PARAMETER = id_name;
|
||
|
this.reference = reference;
|
||
|
}
|
||
|
|
||
|
protected C getInstance() {
|
||
|
try {
|
||
|
C ckan = reference.newInstance();
|
||
|
return ckan;
|
||
|
} catch(Exception e) {
|
||
|
throw new InternalServerErrorException();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public String list() {
|
||
|
setCalledMethod("GET /" + COLLECTION_PARAMETER);
|
||
|
C ckan = getInstance();
|
||
|
return ckan.list();
|
||
|
}
|
||
|
|
||
|
public Response create(String json) {
|
||
|
setCalledMethod("POST /" + COLLECTION_PARAMETER);
|
||
|
C ckan = getInstance();
|
||
|
String ret = ckan.create(json);
|
||
|
|
||
|
ResponseBuilder responseBuilder = Response.status(Status.CREATED).entity(ret);
|
||
|
responseBuilder = addLocation(responseBuilder, ckan.getName());
|
||
|
return responseBuilder.type(ResourceInitializer.APPLICATION_JSON_CHARSET_UTF_8).build();
|
||
|
}
|
||
|
|
||
|
public String read(String id) {
|
||
|
setCalledMethod("GET /" + COLLECTION_PARAMETER + "/{" + ID_PARAMETER + "}");
|
||
|
C ckan = getInstance();
|
||
|
ckan.setName(id);
|
||
|
return ckan.read();
|
||
|
}
|
||
|
|
||
|
public String update(String id, String json) {
|
||
|
setCalledMethod("PUT /" + COLLECTION_PARAMETER + "/{" + ID_PARAMETER + "}");
|
||
|
C ckan = getInstance();
|
||
|
ckan.setName(id);
|
||
|
return ckan.update(json);
|
||
|
}
|
||
|
|
||
|
|
||
|
public String patch(String id, String json) {
|
||
|
setCalledMethod("PATCH /" + COLLECTION_PARAMETER + "/{" + ID_PARAMETER + "}");
|
||
|
C ckan = getInstance();
|
||
|
ckan.setName(id);
|
||
|
return ckan.patch(json);
|
||
|
}
|
||
|
|
||
|
public Response delete(String id, Boolean purge) {
|
||
|
if(purge) {
|
||
|
setCalledMethod("PURGE /" + COLLECTION_PARAMETER + "/{" + ID_PARAMETER + "}");
|
||
|
} else {
|
||
|
setCalledMethod("DELETE /" + COLLECTION_PARAMETER + "/{" + ID_PARAMETER + "}");
|
||
|
}
|
||
|
C ckan = getInstance();
|
||
|
ckan.setName(id);
|
||
|
ckan.delete(purge);
|
||
|
return Response.status(Status.NO_CONTENT).build();
|
||
|
}
|
||
|
|
||
|
public Response purge(String id) {
|
||
|
return delete(id, true);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|