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 extends BaseREST { protected final String COLLECTION_PARAMETER; protected final String ID_PARAMETER; protected final Class reference; public REST(String collection_name, String id_name, Class 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); } }