package tr.com.srdc.mdr.web.rest.api;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tr.com.srdc.mdr.core.impl.Repository;
import tr.com.srdc.mdr.core.impl.RepositoryManager;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.ParameterizedSparqlString;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
@Path("/de")
public class DataElementService {
private static final Logger logger = LoggerFactory
.getLogger(DataElementService.class);
private static final String QUERY_FILE_GET_EXTRACTIONS = "../web/src/main/resources/rest/resources-dataelement-get-extractions.rq";
@GET
@Path("/{deid}/es")
@Produces(MediaType.APPLICATION_JSON)
public Response getExtractionSpec(
@QueryParam("specification-format") String specificationFormat,
@QueryParam("content-model") String contentModel,
@PathParam("deid") String deid) {
Repository repository = RepositoryManager.getInstance().getRepository();
OntModel ontModel = repository.getMDRDatabase().getOntModel();
List<String> extractionSpecifications = new ArrayList<String>();
if (specificationFormat == null || contentModel == null) {
throw new WebApplicationException(Status.NOT_ACCEPTABLE);
}
File getExtractionFile = new File(QUERY_FILE_GET_EXTRACTIONS);
String queryString = "";
try {
queryString = FileUtils.readFileToString(getExtractionFile);
} catch (IOException e) {
logger.error("File with context serialization query could not be found ");
return Response.serverError().build();
}
ParameterizedSparqlString query = new ParameterizedSparqlString(
queryString);
query.setLiteral("uuid", ResourceFactory.createTypedLiteral(deid));
query.setLiteral("specFormat",
ResourceFactory.createTypedLiteral(specificationFormat));
query.setLiteral("contentModel",
ResourceFactory.createTypedLiteral(contentModel));
QueryExecution qe = QueryExecutionFactory.create(query.asQuery(),
ontModel);
String spec = "";
ResultSet rs = qe.execSelect();
while (rs.hasNext()) {
QuerySolution qs = rs.next();
spec = qs.getLiteral("extractionSpec").getString();
if (spec != null && !spec.equals("")) {
extractionSpecifications.add(spec);
}
}
return Response.ok(extractionSpecifications).build();
}
}