package edu.isi.karma.web.services.rdf;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import org.junit.Test;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.core.ClassNamesResourceConfig;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.sun.jersey.spi.container.servlet.WebComponent;
import com.sun.jersey.test.framework.JerseyTest;
import com.sun.jersey.test.framework.WebAppDescriptor;
import com.sun.jersey.test.framework.spi.container.TestContainerFactory;
import com.sun.jersey.test.framework.spi.container.grizzly.web.GrizzlyWebTestContainerFactory;
public class TestRDFGeneratorServlet extends JerseyTest {
public TestRDFGeneratorServlet() throws Exception {
super();
}
@Override
public WebAppDescriptor configure() {
return new WebAppDescriptor.Builder()
.initParam(WebComponent.RESOURCE_CONFIG_CLASS,
ClassNamesResourceConfig.class.getName())
.initParam(
ClassNamesResourceConfig.PROPERTY_CLASSNAMES,
RDFGeneratorServlet.class.getName()) //Add more classnames Class1;Class2;Class3
.build();
}
@Override
public TestContainerFactory getTestContainerFactory() {
return new GrizzlyWebTestContainerFactory();
}
@Test
public void testR2RMLRDF() {
WebResource webRes = resource().path("r2rml/rdf");
MultivaluedMap<String, String> formParams = new MultivaluedMapImpl();
formParams.add(FormParameters.R2RML_URL,
getTestResource("metadata.json-model.ttl").toString());
formParams
.add(FormParameters.RAW_DATA,
"{\"metadata\":{\"GPSTimeStamp\":\"NOT_AVAILABLE\",\"ISOSpeedRatings\":\"100\",\"Orientation\":\"6\",\"Model\":\"GT-N7100\",\"WhiteBalance\":\"0\",\"GPSLongitude\":\"NOT_AVAILABLE\",\"ImageLength\":\"2448\",\"FocalLength\":\"3.7\",\"HasFaces\":\"1\",\"ImageName\":\"20140707_134558.jpg\",\"GPSDateStamp\":\"NOT_AVAILABLE\",\"Flash\":\"0\",\"DateTime\":\"2014:07:07 13:45:58\",\"NumberOfFaces\":\"1\",\"ExposureTime\":\"0.020\",\"GPSProcessingMethod\":\"NOT_AVAILABLE\",\"FNumber\":\"2.6\",\"ImageWidth\":\"3264\",\"GPSLatitude\":\"NOT_AVAILABLE\",\"GPSAltitudeRef\":\"-1\",\"Make\":\"SAMSUNG\",\"GPSAltitude\":\"-1.0\"}}");
formParams.add(FormParameters.CONTENT_TYPE, FormParameters.CONTENT_TYPE_JSON);
String response = webRes.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(String.class, formParams);
String sampleTriple = "<20140707_134558.jpg> <http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#make> \"SAMSUNG\" .";
int idx = response.indexOf(sampleTriple);
assert(idx != -1);
String[] lines = response.split("(\r\n|\n)");
assertEquals(17, lines.length);
}
@Test
public void testR2RMLJSON() {
WebResource webRes = resource().path("r2rml/json");
MultivaluedMap<String, String> formParams = new MultivaluedMapImpl();
formParams.add(FormParameters.R2RML_URL,
getTestResource("schedule-model.ttl").toString());
formParams
.add(FormParameters.DATA_URL,
getTestResource("schedule-tab.csv").toString());
formParams.add(FormParameters.CONTENT_TYPE, FormParameters.CONTENT_TYPE_CSV);
formParams.add(FormParameters.COLUMN_DELIMITER, "\t");
formParams.add(FormParameters.HEADER_START_INDEX, "1");
formParams.add(FormParameters.DATA_START_INDEX, "2");
String response = webRes.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(String.class, formParams);
String sampleRow = "\"uri\": \"http://lod.isi.edu/cs548/person/Szekely\"";
int idx = response.indexOf(sampleRow);
assert(idx != -1);
String[] lines = response.split("(\r\n|\n)");
assertEquals(564, lines.length);
}
@Test
public void testCSVInputTab() {
WebResource webRes = resource().path("r2rml/rdf");
MultivaluedMap<String, String> formParams = new MultivaluedMapImpl();
formParams.add(FormParameters.R2RML_URL,
getTestResource("schedule-model.ttl").toString());
formParams
.add(FormParameters.DATA_URL,
getTestResource("schedule-tab.csv").toString());
formParams.add(FormParameters.CONTENT_TYPE, FormParameters.CONTENT_TYPE_CSV);
formParams.add(FormParameters.COLUMN_DELIMITER, "\t");
formParams.add(FormParameters.HEADER_START_INDEX, "1");
formParams.add(FormParameters.DATA_START_INDEX, "2");
String response = webRes.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(String.class, formParams);
String sampleTriple = "<http://lod.isi.edu/cs548/person/Szekely> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://lod.isi.edu/ontology/syllabus/Person> .";
int idx = response.indexOf(sampleTriple);
assert(idx != -1);
String[] lines = response.split("(\r\n|\n)");
assertEquals(275, lines.length);
}
@Test
public void testCSVInputComma() {
WebResource webRes = resource().path("r2rml/rdf");
MultivaluedMap<String, String> formParams = new MultivaluedMapImpl();
formParams.add(FormParameters.R2RML_URL,
getTestResource("schedule-model.ttl").toString());
formParams
.add(FormParameters.DATA_URL,
getTestResource("schedule-comma.csv").toString());
formParams.add(FormParameters.CONTENT_TYPE, FormParameters.CONTENT_TYPE_CSV);
formParams.add(FormParameters.COLUMN_DELIMITER, ",");
formParams.add(FormParameters.HEADER_START_INDEX, "1");
formParams.add(FormParameters.DATA_START_INDEX, "2");
String response = webRes.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(String.class, formParams);
String sampleTriple = "<http://lod.isi.edu/cs548/person/Szekely> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://lod.isi.edu/ontology/syllabus/Person> .";
int idx = response.indexOf(sampleTriple);
assert(idx != -1);
String[] lines = response.split("(\r\n|\n)");
assertEquals(275, lines.length);
}
@Test
public void testExcelInput() {
WebResource webRes = resource().path("r2rml/rdf");
MultivaluedMap<String, String> formParams = new MultivaluedMapImpl();
formParams.add(FormParameters.R2RML_URL,
getTestResource("schedule-model.ttl").toString());
formParams
.add(FormParameters.DATA_URL,
getTestResource("schedule.xls").toString());
formParams.add(FormParameters.CONTENT_TYPE, FormParameters.CONTENT_TYPE_EXCEL);
formParams.add(FormParameters.WORKSHEET_INDEX, "2"); //Import the second worksheet. It has the correct data
formParams.add(FormParameters.HEADER_START_INDEX, "1");
formParams.add(FormParameters.DATA_START_INDEX, "2");
String response = webRes.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(String.class, formParams);
String sampleTriple = "<http://lod.isi.edu/cs548/person/Szekely> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://lod.isi.edu/ontology/syllabus/Person> .";
int idx = response.indexOf(sampleTriple);
assert(idx != -1);
String[] lines = response.split("(\r\n|\n)");
assertEquals(275, lines.length);
}
@Test
public void testR2RMLRDFVirtuoso() throws IOException,
MalformedURLException, ProtocolException {
URL url = new URL("http://fusion-sqid.isi.edu:8890");
try {
URLConnection connection = url.openConnection();
connection.setConnectTimeout(10000);
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
reader.read();
}catch(Exception e) {
return;
}
WebResource webRes = resource().path("r2rml/rdf/sparql");
MultivaluedMap<String, String> formParams = new MultivaluedMapImpl();
formParams.add(FormParameters.SPARQL_ENDPOINT,
"http://fusion-sqid.isi.edu:8890/sparql-graph-crud-auth/");
formParams.add(FormParameters.GRAPH_URI,
"http://fusion-sqid.isi.edu:8890/image-metadata");
formParams.add(FormParameters.TRIPLE_STORE,
FormParameters.TRIPLE_STORE_VIRTUOSO);
formParams.add(FormParameters.OVERWRITE, "True");
formParams.add(FormParameters.R2RML_URL,
getTestResource("metadata.json-model.ttl").toString());
// formParams.add("DataURL", "");
formParams
.add(FormParameters.RAW_DATA,
"{\"metadata\":{\"GPSTimeStamp\":\"NOT_AVAILABLE\",\"ISOSpeedRatings\":\"100\",\"Orientation\":\"6\",\"Model\":\"GT-N7100\",\"WhiteBalance\":\"0\",\"GPSLongitude\":\"NOT_AVAILABLE\",\"ImageLength\":\"2448\",\"FocalLength\":\"3.7\",\"HasFaces\":\"1\",\"ImageName\":\"20140707_134558.jpg\",\"GPSDateStamp\":\"NOT_AVAILABLE\",\"Flash\":\"0\",\"DateTime\":\"2014:07:07 13:45:58\",\"NumberOfFaces\":\"1\",\"ExposureTime\":\"0.020\",\"GPSProcessingMethod\":\"NOT_AVAILABLE\",\"FNumber\":\"2.6\",\"ImageWidth\":\"3264\",\"GPSLatitude\":\"NOT_AVAILABLE\",\"GPSAltitudeRef\":\"-1\",\"Make\":\"SAMSUNG\",\"GPSAltitude\":\"-1.0\"}}");
formParams.add(FormParameters.CONTENT_TYPE, FormParameters.CONTENT_TYPE_JSON);
formParams.add(FormParameters.USERNAME, "finimg");
formParams.add(FormParameters.PASSWORD, "isi");
String response = webRes.type(MediaType.APPLICATION_FORM_URLENCODED)
.post(String.class, formParams);
String sampleTriple = "<20140707_134558.jpg> <http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#make> \"SAMSUNG\" .";
int idx = response.indexOf(sampleTriple);
assert(idx != -1);
String[] lines = response.split("(\r\n|\n)");
assertEquals(17, lines.length);
}
// @Test
// public void testR2RMLRDFSesame() {
// //TODO: Add testcase for Sesame
// }
private URL getTestResource(String name) {
return getClass().getClassLoader().getResource(name);
}
}