package eu.fusepool.datalifecycle.core;
import java.io.InputStream;
import java.security.AccessController;
import java.security.AllPermission;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import org.apache.clerezza.rdf.core.MGraph;
import org.apache.clerezza.rdf.core.access.TcManager;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.core.serializedform.Parser;
import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
@Property(name = "javax.ws.rs", boolValue = true)
@Service(Object.class)
@Path("dlcupload")
public class DlcUploader {
private static final Logger log = LoggerFactory.getLogger(DlcUploader.class);
@Reference
private Parser parser;
/**
* This service allows accessing and creating persistent triple collections
*/
@Reference
private TcManager tcManager;
@GET
@Produces("text/plain")
public String serviceEntry(@Context final UriInfo uriInfo,
@HeaderParam("user-agent") String userAgent) throws Exception {
AccessController.checkPermission(new AllPermission());
//String uriInfoStr = uriInfo.getRequestUri().toString();
return userAgent;
}
/**
* Load RDF data sent by HTTP POST. Use the Dataset custom header
* to address the dataset in which to store the rdf data.
* Use this service with the following curl command:
* curl -X POST -u admin: -H "Content-Type: application/rdf+xml"
* -H "Dataset: mydataset" -T <rdf_file> http://localhost:8080/dlcupload/rdf
*/
@POST
@Path("rdf")
@Produces("text/plain")
public String uploadRdf(@Context final UriInfo uriInfo,
@HeaderParam("Content-Type") String mediaType,
@HeaderParam("Dataset") String dataset,
final InputStream stream) throws Exception {
AccessController.checkPermission(new AllPermission());
final MGraph graph = new SimpleMGraph();
String message = "";
if(mediaType.equals(SupportedFormat.RDF_XML)) {
parser.parse(graph, stream, SupportedFormat.RDF_XML);
}
else {
message = "Add header Content-Type: application/rdf+xml ";
}
return message + "Added " + graph.size() + " triples to dataset " + dataset + "\n";
}
@Activate
protected void activate(ComponentContext context) {
log.info("Uploader service is being activated");
}
@Deactivate
protected void deactivate(ComponentContext context) {
log.info("Uploader service is being deactivated");
}
}