Author: fchrist
Date: Tue Jun 28 13:15:21 2011
New Revision: 1140586
URL: http://svn.apache.org/viewvc?rev=1140586&view=rev
Log:
STANBOL-243 Initial implementation of 'Publish New Facts'
Added:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/api/FactStore.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/derby/DerbyFactStore.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/FactsResource.java
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/FactStoreMock.java
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/web/resource/FactsResourceTest.java
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/api/FactStore.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/api/FactStore.java?rev=1140586&r1=1140585&r2=1140586&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/api/FactStore.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/api/FactStore.java
Tue Jun 28 13:15:21 2011
@@ -1,5 +1,8 @@
package org.apache.stanbol.factstore.api;
+import java.util.Set;
+
+import org.apache.stanbol.factstore.model.Fact;
import org.apache.stanbol.factstore.model.FactSchema;
public interface FactStore {
@@ -12,4 +15,7 @@ public interface FactStore {
public void createFactSchema(FactSchema factSchema) throws Exception;
+ public void addFact(Fact fact) throws Exception;
+
+ public void addFacts(Set<Fact> factSet) throws Exception;
}
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/derby/DerbyFactStore.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/derby/DerbyFactStore.java?rev=1140586&r1=1140585&r2=1140586&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/derby/DerbyFactStore.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/derby/DerbyFactStore.java
Tue Jun 28 13:15:21 2011
@@ -8,13 +8,17 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.apache.commons.codec.binary.Base64;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.stanbol.factstore.api.FactStore;
+import org.apache.stanbol.factstore.model.Fact;
import org.apache.stanbol.factstore.model.FactSchema;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
@@ -132,67 +136,73 @@ public class DerbyFactStore implements F
return exists;
}
-
+
@Override
public FactSchema getFactSchema(String factSchemaURN) {
FactSchema factSchema = null;
-
+
Connection con = null;
try {
con = DriverManager.getConnection(DB_URL);
- PreparedStatement ps = null;
- ResultSet rs = null;
- try {
- String selectFactSchema = "SELECT factschemata.name AS
schemaURN, factroles.name AS role, factroles.type AS type FROM factroles JOIN
factschemata ON ( factschemata.id = factroles.factschema_id ) WHERE
factschemata.name = ?";
- ps = con.prepareStatement(selectFactSchema);
- ps.setString(1, factSchemaURN);
- rs = ps.executeQuery();
-
- boolean first = true;
- while (rs.next()) {
- if (first) {
- factSchema = new FactSchema();
- factSchema.setFactSchemaURN(rs.getString("schemaURN"));
- first = false;
- }
- String typeFromDB = rs.getString("type");
- String [] types = typeFromDB.split(",");
- if (types.length > 0) {
- for (String type : types) {
- factSchema.addRole(rs.getString("role"), type);
- }
- }
- else {
- factSchema.addRole(rs.getString("role"), typeFromDB);
- }
- }
- } catch (SQLException e) {
- throw new Exception("Error while selecting fact schema meta
data", e);
- } finally {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- /* ignore */
- }
- }
- if (ps != null) {
- try {
- ps.close();
- } catch (SQLException e) {
- /* ignore */
- }
- }
- }
+ factSchema = loadFactSchema(factSchemaURN, con);
} catch (Exception e) {
- logger.error("Error while creating fact schema", e);
+ logger.error("Error while loading fact schema", e);
factSchema = null;
} finally {
try {
con.close();
} catch (Throwable t) { /* ignore */}
}
-
+
+ return factSchema;
+ }
+
+ private FactSchema loadFactSchema(String factSchemaURN, Connection con)
throws Exception {
+ FactSchema factSchema = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ String selectFactSchema = "SELECT factschemata.name AS schemaURN,
factroles.name AS role, factroles.type AS type FROM factroles JOIN factschemata
ON ( factschemata.id = factroles.factschema_id ) WHERE factschemata.name = ?";
+ ps = con.prepareStatement(selectFactSchema);
+ ps.setString(1, factSchemaURN);
+ rs = ps.executeQuery();
+
+ boolean first = true;
+ while (rs.next()) {
+ if (first) {
+ factSchema = new FactSchema();
+ factSchema.setFactSchemaURN(rs.getString("schemaURN"));
+ first = false;
+ }
+ String typeFromDB = rs.getString("type");
+ String[] types = typeFromDB.split(",");
+ if (types.length > 0) {
+ for (String type : types) {
+ factSchema.addRole(rs.getString("role"), type);
+ }
+ } else {
+ factSchema.addRole(rs.getString("role"), typeFromDB);
+ }
+ }
+ } catch (SQLException e) {
+ throw new Exception("Error while selecting fact schema meta data",
e);
+ } finally {
+ if (rs != null) {
+ try {
+ rs.close();
+ } catch (SQLException e) {
+ /* ignore */
+ }
+ }
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException e) {
+ /* ignore */
+ }
+ }
+ }
+
return factSchema;
}
@@ -246,7 +256,7 @@ public class DerbyFactStore implements F
for (String role : factSchema.getRoles()) {
ps.setInt(1, factSchemaId);
ps.setString(2, role);
-
+
StringBuilder typeList = new StringBuilder();
boolean first = true;
for (String type : factSchema.getTypesOfRole(role)) {
@@ -318,4 +328,106 @@ public class DerbyFactStore implements F
}
}
+ @Override
+ public void addFact(Fact fact) throws Exception {
+ Connection con = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ this.addFact(fact, con);
+ } catch (Exception e) {
+ throw new Exception("Error while inserting new fact", e);
+ } finally {
+ try {
+ con.close();
+ } catch (Throwable t) { /* ignore */}
+ }
+
+ logger.info("Fact created for {}", fact.getFactSchemaURN());
+ }
+
+ private void addFact(Fact fact, Connection con) throws Exception {
+ FactSchema factSchema = this.loadFactSchema(fact.getFactSchemaURN(),
con);
+ if (factSchema != null) {
+ String factSchemaB64 =
Base64.encodeBase64URLSafeString(fact.getFactSchemaURN().getBytes());
+
+ StringBuilder insertSB = new StringBuilder("INSERT INTO
").append(factSchemaB64).append('(');
+ StringBuilder valueSB = new StringBuilder(" VALUES (");
+ Map<String,Integer> roleIndexMap = new HashMap<String,Integer>();
+ boolean firstRole = true;
+ int roleIndex = 0;
+ for (String role : factSchema.getRoles()) {
+ if (!firstRole) {
+ insertSB.append(',');
+ valueSB.append(',');
+ }
+ insertSB.append(role);
+ valueSB.append('?');
+ firstRole = false;
+
+ roleIndex++;
+ roleIndexMap.put(role, roleIndex);
+ }
+ insertSB.append(')').append(valueSB).append(')');
+
+ PreparedStatement ps = null;
+ try {
+ ps = con.prepareStatement(insertSB.toString(),
PreparedStatement.RETURN_GENERATED_KEYS);
+ for (String role : fact.getRoles()) {
+ Integer roleIdx = roleIndexMap.get(role);
+ if (roleIdx == null) {
+ throw new Exception("Unknown role '" + role + "' for
fact schema "
+ + fact.getFactSchemaURN());
+ } else {
+ ps.setString(roleIdx, role);
+ }
+ }
+ ps.executeUpdate();
+ ResultSet rs = ps.getGeneratedKeys();
+ int factId = -1;
+ if (rs.next()) {
+ factId = rs.getInt(1);
+ }
+ if (factId < 0) {
+ throw new Exception("Could not obtain fact ID after
insert");
+ }
+
+ logger.info("Inserted new fact with ID {} into fact schema
table {}", factId, factSchemaB64);
+ } catch (SQLException e) {
+ throw new Exception("Error while writing fact into database",
e);
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException e) {
+ /* ignore */
+ }
+ }
+ }
+
+ } else {
+ throw new Exception("Unknown fact schema " +
fact.getFactSchemaURN());
+ }
+ }
+
+ @Override
+ public void addFacts(Set<Fact> factSet) throws Exception {
+
+ // TODO Improve roll back behavior if single fact of set could not be
committed
+
+ Connection con = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ for (Fact fact : factSet) {
+ this.addFact(fact, con);
+ logger.info("Fact created for {}", fact.getFactSchemaURN());
+ }
+ } catch (Exception e) {
+ throw new Exception("Error while inserting new facts", e);
+ } finally {
+ try {
+ con.close();
+ } catch (Throwable t) { /* ignore */}
+ }
+ }
+
}
Added:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java?rev=1140586&view=auto
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java
(added)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java
Tue Jun 28 13:15:21 2011
@@ -0,0 +1,97 @@
+package org.apache.stanbol.factstore.model;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.stanbol.commons.jsonld.JsonLd;
+import org.apache.stanbol.commons.jsonld.JsonLdIRI;
+import org.apache.stanbol.commons.jsonld.JsonLdResource;
+
+public class Fact {
+
+ private String factSchemaURN;
+
+ private Map<String, List<String>> roleMap = new
HashMap<String,List<String>>();
+
+ public String getFactSchemaURN() {
+ return factSchemaURN;
+ }
+
+ public void setFactSchemaURN(String factSchemaURN) {
+ this.factSchemaURN = factSchemaURN;
+ }
+
+ public void addRole(String role, String type) {
+ if (this.roleMap.get(role) == null) {
+ this.roleMap.put(role, new ArrayList<String>());
+ }
+ List<String> types = this.roleMap.get(role);
+ types.add(type);
+ }
+
+ public Set<String> getRoles() {
+ return this.roleMap.keySet();
+ }
+
+ public List<String> getTypesOfRole(String role) {
+ return this.roleMap.get(role);
+ }
+
+ public static Fact factFromJsonLd(JsonLd jsonLd) {
+ Fact fact = null;
+
+ if (jsonLd.getResourceSubjects().size() == 1) {
+ String subject = jsonLd.getResourceSubjects().iterator().next();
+ fact = resourceToFact(jsonLd, jsonLd.getResource(subject));
+ }
+
+ return fact;
+ }
+
+ public static Set<Fact> factsFromJsonLd(JsonLd jsonLd) {
+ Set<Fact> facts = new HashSet<Fact>();
+
+ if (jsonLd.getResourceSubjects().size() > 1) {
+ for (String subject : jsonLd.getResourceSubjects()) {
+ Fact fact = resourceToFact(jsonLd,
jsonLd.getResource(subject));
+ if (fact != null) {
+ facts.add(fact);
+ }
+ }
+ }
+
+ return facts;
+ }
+
+ private static Fact resourceToFact(JsonLd jsonLd, JsonLdResource resource)
{
+ Fact fact = null;
+ String schemaURN = jsonLd.unCURIE(resource.getProfile());
+
+ if (schemaURN != null && !schemaURN.isEmpty()) {
+ Map<String, Object> propMap = resource.getPropertyMap();
+ if (propMap.size() > 1) {
+ fact = new Fact();
+ fact.setFactSchemaURN(schemaURN);
+ for (String role : propMap.keySet()) {
+ if (propMap.get(role) instanceof String) {
+ String strType = (String) propMap.get(role);
+ fact.addRole(role, strType);
+ }
+ else if (propMap.get(role) instanceof JsonLdIRI) {
+ JsonLdIRI iriType = (JsonLdIRI) propMap.get(role);
+ fact.addRole(role, jsonLd.unCURIE(iriType.getIRI()));
+ }
+ else {
+ fact.addRole(role, propMap.get(role).toString());
+ }
+ }
+ }
+ }
+
+ return fact;
+ }
+}
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/FactsResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/FactsResource.java?rev=1140586&r1=1140585&r2=1140586&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/FactsResource.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/FactsResource.java
Tue Jun 28 13:15:21 2011
@@ -2,9 +2,12 @@ package org.apache.stanbol.factstore.web
import static javax.ws.rs.core.MediaType.TEXT_HTML;
+import java.util.Set;
+
import javax.servlet.ServletContext;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@@ -14,11 +17,14 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
+import org.apache.stanbol.commons.jsonld.JsonLd;
+import org.apache.stanbol.commons.jsonld.JsonLdParser;
import org.apache.stanbol.commons.jsonld.JsonLdProfile;
import org.apache.stanbol.commons.jsonld.JsonLdProfileParser;
import org.apache.stanbol.commons.web.base.ContextHelper;
import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
import org.apache.stanbol.factstore.api.FactStore;
+import org.apache.stanbol.factstore.model.Fact;
import org.apache.stanbol.factstore.model.FactSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,7 +56,7 @@ public class FactsResource extends BaseS
if (validationResponse != null) {
return validationResponse;
}
-
+
logger.info("Request for getting existing fact schema {}",
factSchemaURN);
FactSchema factSchema = this.factStore.getFactSchema(factSchemaURN);
@@ -73,7 +79,7 @@ public class FactsResource extends BaseS
}
logger.info("Request for putting new fact schema {}", factSchemaURN);
-
+
JsonLdProfile profile = null;
try {
profile = JsonLdProfileParser.parseProfile(jsonLdProfileString);
@@ -105,6 +111,59 @@ public class FactsResource extends BaseS
return Response.status(Status.CREATED).build();
}
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response postFacts(String jsonLdFacts) {
+ JsonLd jsonLd = null;
+ try {
+ jsonLd = JsonLdParser.parse(jsonLdFacts);
+ } catch (Exception e) {
+ /* ignore here */
+ }
+
+ if (jsonLd == null) {
+ return Response.status(Status.BAD_REQUEST).entity("Could not parse
provided JSON-LD structure.")
+ .build();
+ }
+
+ if (jsonLd.getResourceSubjects().size() < 2) {
+ // post a single fact
+ Fact fact = Fact.factFromJsonLd(jsonLd);
+ if (fact != null) {
+ logger.info("Request for posting new fact for {}",
fact.getFactSchemaURN());
+ try {
+ this.factStore.addFact(fact);
+ } catch (Exception e) {
+ logger.error("Error adding new fact", e);
+ return
Response.status(Status.INTERNAL_SERVER_ERROR).entity(
+ "Error while adding new fact to the
database.").build();
+ }
+ } else {
+ return Response.status(Status.BAD_REQUEST).entity(
+ "Could not extract fact from JSON-LD input.").build();
+ }
+ } else {
+ // post multiple facts
+ Set<Fact> facts = Fact.factsFromJsonLd(jsonLd);
+ if (facts != null) {
+ logger.info("Request for posting a set of new facts");
+ try {
+ this.factStore.addFacts(facts);
+ } catch (Exception e) {
+ logger.error("Error adding new facts", e);
+ return
Response.status(Status.INTERNAL_SERVER_ERROR).entity(
+ "Error while adding new facts to the
database.").build();
+ }
+ } else {
+ return Response.status(Status.BAD_REQUEST).entity(
+ "Could not extract facts from JSON-LD input.").build();
+ }
+ }
+
+ return Response.status(Status.OK).build();
+ }
+
private Response standardValidation(String factSchemaURN) {
if (this.factStore == null) {
return Response.status(Status.INTERNAL_SERVER_ERROR).entity(
Modified:
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/FactStoreMock.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/FactStoreMock.java?rev=1140586&r1=1140585&r2=1140586&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/FactStoreMock.java
(original)
+++
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/FactStoreMock.java
Tue Jun 28 13:15:21 2011
@@ -1,7 +1,10 @@
package org.apache.stanbol.factstore;
+import java.util.Set;
+
import org.apache.stanbol.commons.jsonld.JsonLdCommon;
import org.apache.stanbol.factstore.api.FactStore;
+import org.apache.stanbol.factstore.model.Fact;
import org.apache.stanbol.factstore.model.FactSchema;
public class FactStoreMock implements FactStore {
@@ -29,4 +32,16 @@ public class FactStoreMock implements Fa
return null;
}
+ @Override
+ public void addFact(Fact fact) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void addFacts(Set<Fact> factSet) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
}
Added:
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java?rev=1140586&view=auto
==============================================================================
---
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
(added)
+++
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
Tue Jun 28 13:15:21 2011
@@ -0,0 +1,193 @@
+package org.apache.stanbol.factstore.model;
+
+import static org.junit.Assert.*;
+
+import java.util.Set;
+
+import org.apache.stanbol.commons.jsonld.JsonLd;
+import org.apache.stanbol.commons.jsonld.JsonLdIRI;
+import org.apache.stanbol.commons.jsonld.JsonLdResource;
+import org.junit.Test;
+
+public class FactTest {
+
+ @Test
+ public void testFactFromJsonLd() {
+ JsonLd jsonLd = new JsonLd();
+ jsonLd.addNamespacePrefix("http://iks-project.eu/ont/", "iks");
+ jsonLd.addNamespacePrefix("http://upb.de/persons/", "upb");
+
+ JsonLdResource factResource = new JsonLdResource();
+ factResource.setProfile("iks:employeeOf");
+ factResource.putProperty("person", new JsonLdIRI("upb:bnagel"));
+ factResource.putProperty("organization", new
JsonLdIRI("http://uni-paderborn.de"));
+ jsonLd.put(factResource);
+
+ Fact fact = Fact.factFromJsonLd(jsonLd);
+ assertEquals("http://iks-project.eu/ont/employeeOf",
fact.getFactSchemaURN());
+ assertEquals(2, fact.getRoles().size());
+
+ boolean rolePersonOK = false;
+ boolean roleOrgaOK = false;
+ for (String role : fact.getRoles()) {
+ if (role.equals("person")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://upb.de/persons/bnagel",
fact.getTypesOfRole(role).get(0));
+ rolePersonOK = true;
+ }
+ if (role.equals("organization")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://uni-paderborn.de",
fact.getTypesOfRole(role).get(0));
+ roleOrgaOK = true;
+ }
+ }
+ assertTrue(rolePersonOK);
+ assertTrue(roleOrgaOK);
+ }
+
+ @Test
+ public void testFactFromJsonLdMultiFacts() {
+ JsonLd jsonLd = new JsonLd();
+ jsonLd.addNamespacePrefix("http://iks-project.eu/ont/", "iks");
+ jsonLd.addNamespacePrefix("http://upb.de/persons/", "upb");
+
+ JsonLdResource fact1Resource = new JsonLdResource();
+ fact1Resource.setSubject("fact1");
+ fact1Resource.setProfile("iks:employeeOf");
+ fact1Resource.putProperty("person", new JsonLdIRI("upb:bnagel"));
+ fact1Resource.putProperty("organization", new
JsonLdIRI("http://uni-paderborn.de"));
+ jsonLd.put(fact1Resource);
+
+ JsonLdResource fact2Resource = new JsonLdResource();
+ fact2Resource.setSubject("fact2");
+ fact2Resource.setProfile("iks:employeeOf");
+ fact2Resource.putProperty("person", new JsonLdIRI("upb:fchrist"));
+ fact2Resource.putProperty("organization", new
JsonLdIRI("http://uni-paderborn.de"));
+ jsonLd.put(fact2Resource);
+
+ Fact fact = Fact.factFromJsonLd(jsonLd);
+ assertNull(fact);
+ }
+
+ @Test
+ public void testFactsFromJsonLdMultiFacts() {
+ JsonLd jsonLd = new JsonLd();
+ jsonLd.addNamespacePrefix("http://iks-project.eu/ont/", "iks");
+ jsonLd.addNamespacePrefix("http://upb.de/persons/", "upb");
+
+ JsonLdResource fact1Resource = new JsonLdResource();
+ fact1Resource.setSubject("fact1");
+ fact1Resource.setProfile("iks:employeeOf");
+ fact1Resource.putProperty("person", new JsonLdIRI("upb:bnagel"));
+ fact1Resource.putProperty("organization", new
JsonLdIRI("http://uni-paderborn.de"));
+ jsonLd.put(fact1Resource);
+
+ JsonLdResource fact2Resource = new JsonLdResource();
+ fact2Resource.setSubject("fact2");
+ fact2Resource.setProfile("iks:employeeOf");
+ fact2Resource.putProperty("person", new JsonLdIRI("upb:fchrist"));
+ fact2Resource.putProperty("organization", new
JsonLdIRI("http://uni-paderborn.de"));
+ jsonLd.put(fact2Resource);
+
+ Set<Fact> facts = Fact.factsFromJsonLd(jsonLd);
+ assertNotNull(facts);
+ assertEquals(2, facts.size());
+ for (Fact fact : facts) {
+ assertEquals("http://iks-project.eu/ont/employeeOf",
fact.getFactSchemaURN());
+ assertEquals(2, fact.getRoles().size());
+
+ boolean rolePersonOK = false;
+ boolean roleOrgaOK = false;
+ for (String role : fact.getRoles()) {
+ if (role.equals("person")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+
assertTrue(fact.getTypesOfRole(role).get(0).startsWith("http://upb.de/persons/"));
+ rolePersonOK = true;
+ }
+ if (role.equals("organization")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://uni-paderborn.de",
fact.getTypesOfRole(role).get(0));
+ roleOrgaOK = true;
+ }
+ }
+ assertTrue(rolePersonOK);
+ assertTrue(roleOrgaOK);
+ }
+ }
+
+ @Test
+ public void testFactsFromJsonLdMultiFactsMultiSchema() {
+ JsonLd jsonLd = new JsonLd();
+ jsonLd.addNamespacePrefix("http://iks-project.eu/ont/", "iks");
+ jsonLd.addNamespacePrefix("http://upb.de/persons/", "upb");
+
+ JsonLdResource fact1Resource = new JsonLdResource();
+ fact1Resource.setSubject("fact1");
+ fact1Resource.setProfile("iks:employeeOf");
+ fact1Resource.putProperty("person", new JsonLdIRI("upb:bnagel"));
+ fact1Resource.putProperty("organization", new
JsonLdIRI("http://uni-paderborn.de"));
+ jsonLd.put(fact1Resource);
+
+ JsonLdResource fact2Resource = new JsonLdResource();
+ fact2Resource.setSubject("fact2");
+ fact2Resource.setProfile("iks:friendOf");
+ fact2Resource.putProperty("person", new JsonLdIRI("upb:bnagel"));
+ fact2Resource.putProperty("friend", new JsonLdIRI("upb:fchrist"));
+ jsonLd.put(fact2Resource);
+
+ Set<Fact> facts = Fact.factsFromJsonLd(jsonLd);
+ assertNotNull(facts);
+ assertEquals(2, facts.size());
+ boolean fact1OK = false;
+ boolean fact2OK = false;
+ for (Fact fact : facts) {
+ if
(fact.getFactSchemaURN().equals("http://iks-project.eu/ont/employeeOf")) {
+ assertEquals("http://iks-project.eu/ont/employeeOf",
fact.getFactSchemaURN());
+ assertEquals(2, fact.getRoles().size());
+
+ boolean rolePersonOK = false;
+ boolean roleOrgaOK = false;
+ for (String role : fact.getRoles()) {
+ if (role.equals("person")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://upb.de/persons/bnagel",
fact.getTypesOfRole(role).get(0));
+ rolePersonOK = true;
+ }
+ if (role.equals("organization")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://uni-paderborn.de",
fact.getTypesOfRole(role).get(0));
+ roleOrgaOK = true;
+ }
+ }
+ assertTrue(rolePersonOK);
+ assertTrue(roleOrgaOK);
+ fact1OK = true;
+ }
+ if
(fact.getFactSchemaURN().equals("http://iks-project.eu/ont/friendOf")) {
+ assertEquals("http://iks-project.eu/ont/friendOf",
fact.getFactSchemaURN());
+ assertEquals(2, fact.getRoles().size());
+
+ boolean rolePersonOK = false;
+ boolean roleFriendOK = false;
+ for (String role : fact.getRoles()) {
+ if (role.equals("person")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://upb.de/persons/bnagel",
fact.getTypesOfRole(role).get(0));
+ rolePersonOK = true;
+ }
+ if (role.equals("friend")) {
+ assertEquals(1, fact.getTypesOfRole(role).size());
+ assertEquals("http://upb.de/persons/fchrist",
fact.getTypesOfRole(role).get(0));
+ roleFriendOK = true;
+ }
+ }
+ assertTrue(rolePersonOK);
+ assertTrue(roleFriendOK);
+ fact2OK = true;
+ }
+
+ }
+ assertTrue(fact1OK);
+ assertTrue(fact2OK);
+ }
+}
Modified:
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/web/resource/FactsResourceTest.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/web/resource/FactsResourceTest.java?rev=1140586&r1=1140585&r2=1140586&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/web/resource/FactsResourceTest.java
(original)
+++
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/web/resource/FactsResourceTest.java
Tue Jun 28 13:15:21 2011
@@ -78,4 +78,34 @@ public class FactsResourceTest {
"test2");
assertTrue(response.getStatus() == Status.CREATED.getStatusCode());
}
+
+ @Test
+ public void testPostSingleFact() {
+ FactsResource fr = new FactsResource(this.servletContext);
+
+ Response response = fr
+
.postFacts("{\"@context\":{\"iks\":\"http://iks-project.eu/ont/\",\"upb\":\"http://upb.de/persons/\"},\"@profile\":\"iks:employeeOf\",\"person\":{\"@iri\":\"upb:bnagel\"},\"organization\":{\"@iri\":\"http://uni-paderborn.de\"}}");
+
+ assertTrue(response.getStatus() == Status.OK.getStatusCode());
+ }
+
+ @Test
+ public void testPostMultiFacts() {
+ FactsResource fr = new FactsResource(this.servletContext);
+
+ Response response = fr
+
.postFacts("{\"@context\":{\"iks\":\"http://iks-project.eu/ont/\",\"upb\":\"http://upb.de/persons/\"},\"@profile\":\"iks:employeeOf\",\"@\":[{\"person\":{\"@iri\":\"upb:bnagel\"},\"organization\":{\"@iri\":\"http://uni-paderborn.de\"}},{\"person\":{\"@iri\":\"upb:fchrist\"},\"organization\":{\"@iri\":\"http://uni-paderborn.de\"}}]}");
+
+ assertTrue(response.getStatus() == Status.OK.getStatusCode());
+ }
+
+ @Test
+ public void testPostMultiFactsDifferentTypes() {
+ FactsResource fr = new FactsResource(this.servletContext);
+
+ Response response = fr
+
.postFacts("{\"@context\":{\"iks\":\"http://iks-project.eu/ont/\",\"upb\":\"http://upb.de/persons/\"},\"@\":[{\"@profile\":\"iks:employeeOf\",\"person\":{\"@iri\":\"upb:bnagel\"},\"organization\":{\"@iri\":\"http://uni-paderborn.de\"}},{\"@profile\":\"iks:friendOf\",\"person\":{\"@iri\":\"upb:bnagel\"},\"friend\":{\"@iri\":\"upb:fchrist\"}}]}");
+
+ assertTrue(response.getStatus() == Status.OK.getStatusCode());
+ }
}