Author: fchrist
Date: Wed Jul 13 07:28:04 2011
New Revision: 1145892
URL: http://svn.apache.org/viewvc?rev=1145892&view=rev
Log:
STANBOL-244 Implemented Query for Single Fact, STANBOL-252 Added context element
Added:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactContext.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResult.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResultSet.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/model/Fact.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactSchema.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/FactStoreWebFragment.java
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/QueryResource.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/derby/DerbyFactStoreTest.java
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/QueryTest.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=1145892&r1=1145891&r2=1145892&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
Wed Jul 13 07:28:04 2011
@@ -5,7 +5,7 @@ import java.util.Set;
import org.apache.stanbol.factstore.model.Fact;
import org.apache.stanbol.factstore.model.FactSchema;
import org.apache.stanbol.factstore.model.Query;
-import org.apache.stanbol.factstore.model.ResultSet;
+import org.apache.stanbol.factstore.model.FactResultSet;
public interface FactStore {
@@ -21,6 +21,6 @@ public interface FactStore {
public void addFacts(Set<Fact> factSet) throws Exception;
- public ResultSet query(Query query);
+ public FactResultSet query(Query query) 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=1145892&r1=1145891&r2=1145892&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
Wed Jul 13 07:28:04 2011
@@ -19,14 +19,18 @@ import org.apache.felix.scr.annotations.
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.FactResult;
+import org.apache.stanbol.factstore.model.FactResultSet;
import org.apache.stanbol.factstore.model.FactSchema;
import org.apache.stanbol.factstore.model.Query;
+import org.apache.stanbol.factstore.model.WhereClause;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Implementation of the FactStore interface based on an Apache Derby
relational database.
+ * Implementation of the FactStore interface based on an Apache Derby
relational
+ * database.
*
* @author Fabian Christ
*/
@@ -34,407 +38,579 @@ import org.slf4j.LoggerFactory;
@Service
public class DerbyFactStore implements FactStore {
- private static Logger logger =
LoggerFactory.getLogger(DerbyFactStore.class);
+ private static Logger logger = LoggerFactory
+ .getLogger(DerbyFactStore.class);
- private static int MAX_FACTSCHEMAURN_LENGTH = 96;
+ private static int MAX_FACTSCHEMAURN_LENGTH = 96;
- private static final String CreateTableFactSchemata = "CREATE TABLE
factschemata ( id INT GENERATED ALWAYS AS IDENTITY CONSTRAINT factschema_id
PRIMARY KEY, name VARCHAR(128) NOT NULL )";
- private static final String CreateTableFactRoles = "CREATE TABLE factroles
( id INT GENERATED ALWAYS AS IDENTITY CONSTRAINT factrole_id PRIMARY KEY,
factschema_id INT NOT NULL CONSTRAINT factschema_foreign_key REFERENCES
factschemata ON DELETE CASCADE ON UPDATE RESTRICT, name VARCHAR(128) NOT NULL,
type VARCHAR(512) NOT NULL )";
-
- public static final String DB_URL = "jdbc:derby:factstore;create=true";
-
- @Activate
- protected void activate(ComponentContext cc) throws Exception {
- logger.info("Activating FactStore...");
-
- logger.info("Connecting to Derby DB {}", DB_URL);
- Connection con = null;
- try {
- con = DriverManager.getConnection(DB_URL);
-
- if (con != null) {
- logger.info("Derby connection established.");
-
- try {
- if (!existsTable("factschemata", con)) {
- List<String> sqls = new ArrayList<String>();
- sqls.add(CreateTableFactSchemata);
- sqls.add(CreateTableFactRoles);
-
- this.executeUpdate(sqls, con);
-
- logger.info("Created FactStore meta tables.");
- }
- } catch (Exception e) {
- throw new Exception("Error creating meta data tables", e);
- }
- }
- } catch (Exception e) {
- throw new Exception("Derby DB error. Can't activate.", e);
- } finally {
- if (con != null) {
- try {
- con.close();
- } catch (SQLException e) {
- /* ignore */
- }
- }
- }
-
- logger.info("FactStore activated.");
- }
-
- @Override
- public int getMaxFactSchemaURNLength() {
- return MAX_FACTSCHEMAURN_LENGTH;
- }
-
- @Override
- public boolean existsFactSchema(String factSchemaURN) throws Exception {
- String factSchemaB64 =
Base64.encodeBase64URLSafeString(factSchemaURN.getBytes());
- boolean tableExists = false;
- Connection con = null;
- try {
- con = DriverManager.getConnection(DB_URL);
- tableExists = this.existsTable(factSchemaB64, con);
- } catch (Exception e) {
- throw new Exception("Error checking table existence", e);
- } finally {
- if (con != null) {
- try {
- con.close();
- } catch (SQLException e) {
- /* ignore */
- }
- }
- }
-
- return tableExists;
- }
-
- private boolean existsTable(String tableName, Connection con) throws
Exception {
- boolean exists = false;
-
- ResultSet res = null;
- try {
- con = DriverManager.getConnection(DB_URL);
- DatabaseMetaData meta = con.getMetaData();
- res = meta.getTables(null, null, null, new String[] {"TABLE"});
- while (res.next()) {
- if (res.getString("TABLE_NAME").equalsIgnoreCase(tableName)) {
- exists = true;
- break;
- }
- }
- } catch (SQLException e) {
- logger.error("Error while reading tables' metadata to check if
table '{}' exists", tableName);
- throw new Exception("Error while reading tables' metadata", e);
- } finally {
- try {
- res.close();
- } catch (Throwable t) { /* ignore */}
- }
-
- return exists;
- }
-
- @Override
- public FactSchema getFactSchema(String factSchemaURN) {
- FactSchema factSchema = null;
-
- Connection con = null;
- try {
- con = DriverManager.getConnection(DB_URL);
- factSchema = loadFactSchema(factSchemaURN, con);
- } catch (Exception 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;
- }
-
- @Override
- public void createFactSchema(FactSchema factSchema) throws Exception {
- // TODO Implement roll back behavior (transaction)
-
- String factSchemaB64 =
Base64.encodeBase64URLSafeString(factSchema.getFactSchemaURN().getBytes());
-
- List<String> createFactSchemaTable =
this.toSQLfromSchema(factSchemaB64, factSchema);
-
- Connection con = null;
- try {
- con = DriverManager.getConnection(DB_URL);
- this.executeUpdate(createFactSchemaTable, con);
- this.insertFactSchemaMetadata(factSchema, con);
- } catch (Exception e) {
- throw new Exception("Error while creating fact schema", e);
- } finally {
- try {
- con.close();
- } catch (Throwable t) { /* ignore */}
- }
-
- logger.info("Fact schema {} created as {}",
factSchema.getFactSchemaURN(), factSchemaB64);
- }
-
- private void insertFactSchemaMetadata(FactSchema factSchema, Connection
con) throws Exception {
- PreparedStatement ps = null;
- try {
- String insertFactSchema = "INSERT INTO factschemata (name) VALUES
( ? )";
- ps = con.prepareStatement(insertFactSchema,
PreparedStatement.RETURN_GENERATED_KEYS);
- ps.setString(1, factSchema.getFactSchemaURN());
- ps.executeUpdate();
- ResultSet rs = ps.getGeneratedKeys();
-
- int factSchemaId = -1;
- if (rs.next()) {
- factSchemaId = rs.getInt(1);
- }
- if (factSchemaId < 0) {
- throw new Exception("Could not obtain fact schema ID after
insert");
- }
-
- logger
- .info("Inserted new fact schema {} with ID {}",
factSchema.getFactSchemaURN(),
- factSchemaId);
-
- String insertFactRoles = "INSERT INTO factroles (factschema_id,
name, type) VALUES ( ?, ?, ? )";
- ps = con.prepareStatement(insertFactRoles);
- 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)) {
- if (!first) {
- typeList.append(",");
- }
- typeList.append(type);
- first = false;
- }
- ps.setString(3, typeList.toString());
-
- ps.addBatch();
- }
- ps.executeBatch();
- } catch (SQLException e) {
- throw new Exception("Error while inserting fact schema meta data",
e);
- } finally {
- if (ps != null) {
- try {
- ps.close();
- } catch (SQLException e) {
- /* ignore */
- }
- }
- }
- }
-
- protected List<String> toSQLfromSchema(String factSchemaB64, FactSchema
factSchema) throws Exception {
- List<String> sqls = new ArrayList<String>();
-
- // TODO Add SQL command for index creation
-
- StringBuilder createTableSQL = new StringBuilder("CREATE TABLE ");
- createTableSQL.append(factSchemaB64).append(' ');
- createTableSQL.append('(');
- createTableSQL.append("id INT GENERATED ALWAYS AS IDENTITY");
-
- for (String role : factSchema.getRoles()) {
- createTableSQL.append(", ");
- createTableSQL.append(role);
- createTableSQL.append(" VARCHAR(1024)");
- }
- createTableSQL.append(')');
-
- sqls.add(createTableSQL.toString());
-
- return sqls;
- }
-
- private void executeUpdate(List<String> sqls, Connection con) throws
Exception {
- for (String sql : sqls) {
- int res = -1;
- Statement statement = null;
- try {
- statement = con.createStatement();
- res = statement.executeUpdate(sql);
- if (res < 0) {
- logger.error("Negative result after executing SQL '{}'",
sql);
- throw new Exception("Negative result after executing SQL");
- }
- } catch (SQLException e) {
- logger.error("Error executing SQL '{}'", sql, e);
- throw new Exception("Error executing SQL", e);
- } finally {
- try {
- statement.close();
- } catch (Throwable t) { /* ignore */}
- }
- }
- }
-
- @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 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 */}
- }
- }
-
- @Override
- public org.apache.stanbol.factstore.model.ResultSet query(Query query) {
- // TODO Auto-generated method stub
- return null;
- }
+ private static final String CreateTableFactSchemata = "CREATE TABLE
factschemata ( id INT GENERATED ALWAYS AS IDENTITY CONSTRAINT factschema_id
PRIMARY KEY, name VARCHAR(128) NOT NULL )";
+ private static final String CreateTableFactRoles = "CREATE TABLE
factroles ( id INT GENERATED ALWAYS AS IDENTITY CONSTRAINT factrole_id PRIMARY
KEY, factschema_id INT NOT NULL CONSTRAINT factschema_foreign_key REFERENCES
factschemata ON DELETE CASCADE ON UPDATE RESTRICT, name VARCHAR(128) NOT NULL,
type VARCHAR(512) NOT NULL )";
+ private static final String CreateTableFactContexts = "CREATE TABLE
factcontexts ( id INT GENERATED ALWAYS AS IDENTITY CONSTRAINT context_id
PRIMARY KEY, validFrom TIMESTAMP, validTo TIMESTAMP, contextURN VARCHAR(1024)
)";
+
+ public static final String DB_URL = "jdbc:derby:factstore;create=true";
+
+ @Activate
+ protected void activate(ComponentContext cc) throws Exception {
+ logger.info("Activating FactStore...");
+
+ logger.info("Connecting to Derby DB {}", DB_URL);
+ Connection con = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+
+ if (con != null) {
+ logger.info("Derby connection established.");
+
+ try {
+ if (!existsTable("factschemata", con)) {
+ List<String> sqls = new
ArrayList<String>();
+
sqls.add(CreateTableFactSchemata);
+ sqls.add(CreateTableFactRoles);
+
sqls.add(CreateTableFactContexts);
+
+ this.executeUpdate(sqls, con);
+
+ logger.info("Created FactStore
meta tables.");
+ }
+ } catch (Exception e) {
+ throw new Exception("Error creating
meta data tables", e);
+ }
+ }
+ } catch (Exception e) {
+ throw new Exception("Derby DB error. Can't activate.",
e);
+ } finally {
+ if (con != null) {
+ try {
+ con.close();
+ } catch (SQLException e) {
+ /* ignore */
+ }
+ }
+ }
+
+ logger.info("FactStore activated.");
+ }
+
+ @Override
+ public int getMaxFactSchemaURNLength() {
+ return MAX_FACTSCHEMAURN_LENGTH;
+ }
+
+ @Override
+ public boolean existsFactSchema(String factSchemaURN) throws Exception {
+ String factSchemaB64 =
Base64.encodeBase64URLSafeString(factSchemaURN
+ .getBytes());
+ boolean tableExists = false;
+ Connection con = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ tableExists = this.existsTable(factSchemaB64, con);
+ } catch (Exception e) {
+ throw new Exception("Error checking table existence",
e);
+ } finally {
+ if (con != null) {
+ try {
+ con.close();
+ } catch (SQLException e) {
+ /* ignore */
+ }
+ }
+ }
+
+ return tableExists;
+ }
+
+ private boolean existsTable(String tableName, Connection con)
+ throws Exception {
+ boolean exists = false;
+
+ ResultSet res = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ DatabaseMetaData meta = con.getMetaData();
+ res = meta.getTables(null, null, null, new String[] {
"TABLE" });
+ while (res.next()) {
+ if
(res.getString("TABLE_NAME").equalsIgnoreCase(tableName)) {
+ exists = true;
+ break;
+ }
+ }
+ } catch (SQLException e) {
+ logger
+ .error(
+ "Error while reading
tables' metadata to check if table '{}' exists",
+ tableName);
+ throw new Exception("Error while reading tables'
metadata", e);
+ } finally {
+ try {
+ res.close();
+ } catch (Throwable t) { /* ignore */
+ }
+ }
+
+ return exists;
+ }
+
+ @Override
+ public FactSchema getFactSchema(String factSchemaURN) {
+ FactSchema factSchema = null;
+
+ Connection con = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ factSchema = loadFactSchema(factSchemaURN, con);
+ } catch (Exception 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;
+ }
+
+ @Override
+ public void createFactSchema(FactSchema factSchema) throws Exception {
+ // TODO Implement roll back behavior (transaction)
+
+ String factSchemaB64 =
Base64.encodeBase64URLSafeString(factSchema
+ .getFactSchemaURN().getBytes());
+
+ List<String> createFactSchemaTable = this.toSQLfromSchema(
+ factSchemaB64, factSchema);
+
+ Connection con = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+ this.executeUpdate(createFactSchemaTable, con);
+ this.insertFactSchemaMetadata(factSchema, con);
+ } catch (Exception e) {
+ throw new Exception("Error while creating fact schema",
e);
+ } finally {
+ try {
+ con.close();
+ } catch (Throwable t) { /* ignore */
+ }
+ }
+
+ logger.info("Fact schema {} created as {}", factSchema
+ .getFactSchemaURN(), factSchemaB64);
+ }
+
+ protected List<String> toSQLfromSchema(String factSchemaB64,
+ FactSchema factSchema) throws Exception {
+ List<String> sqls = new ArrayList<String>();
+
+ // TODO Add SQL command for index creation
+
+ StringBuilder createTableSQL = new StringBuilder("CREATE TABLE
");
+ createTableSQL.append(factSchemaB64).append(' ');
+ createTableSQL.append('(');
+ createTableSQL.append("id INT GENERATED ALWAYS AS IDENTITY");
+ createTableSQL.append(", context_id INT CONSTRAINT ");
+ createTableSQL.append(factSchemaB64).append("_CFK");
+ createTableSQL
+ .append(" REFERENCES factcontexts ON DELETE
CASCADE ON UPDATE RESTRICT");
+
+ for (String role : factSchema.getRoles()) {
+ createTableSQL.append(", ");
+ createTableSQL.append(role);
+ createTableSQL.append(" VARCHAR(1024)");
+ }
+
+ // Append created time stamp
+ createTableSQL
+ .append(", created TIMESTAMP NOT NULL WITH
DEFAULT CURRENT TIMESTAMP)");
+
+ sqls.add(createTableSQL.toString());
+
+ return sqls;
+ }
+
+ private void insertFactSchemaMetadata(FactSchema factSchema, Connection
con)
+ throws Exception {
+ PreparedStatement ps = null;
+ try {
+ String insertFactSchema = "INSERT INTO factschemata
(name) VALUES ( ? )";
+ ps = con.prepareStatement(insertFactSchema,
+
PreparedStatement.RETURN_GENERATED_KEYS);
+ ps.setString(1, factSchema.getFactSchemaURN());
+ ps.executeUpdate();
+ ResultSet rs = ps.getGeneratedKeys();
+
+ int factSchemaId = -1;
+ if (rs.next()) {
+ factSchemaId = rs.getInt(1);
+ }
+ if (factSchemaId < 0) {
+ throw new Exception(
+ "Could not obtain fact schema
ID after insert");
+ }
+
+ logger.info("Inserted new fact schema {} with ID {}",
factSchema
+ .getFactSchemaURN(), factSchemaId);
+
+ String insertFactRoles = "INSERT INTO factroles
(factschema_id, name, type) VALUES ( ?, ?, ? )";
+ ps = con.prepareStatement(insertFactRoles);
+ 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)) {
+ if (!first) {
+ typeList.append(",");
+ }
+ typeList.append(type);
+ first = false;
+ }
+ ps.setString(3, typeList.toString());
+
+ ps.addBatch();
+ }
+ ps.executeBatch();
+ } catch (SQLException e) {
+ throw new Exception("Error while inserting fact schema
meta data",
+ e);
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException e) {
+ /* ignore */
+ }
+ }
+ }
+ }
+
+ private void executeUpdate(List<String> sqls, Connection con)
+ throws Exception {
+ for (String sql : sqls) {
+ int res = -1;
+ Statement statement = null;
+ try {
+ statement = con.createStatement();
+ res = statement.executeUpdate(sql);
+ if (res < 0) {
+ logger.error("Negative result after
executing SQL '{}'",
+ sql);
+ throw new Exception("Negative result
after executing SQL");
+ }
+ } catch (SQLException e) {
+ logger.error("Error executing SQL '{}'", sql,
e);
+ throw new Exception("Error executing SQL", e);
+ } finally {
+ try {
+ statement.close();
+ } catch (Throwable t) { /* ignore */
+ }
+ }
+ }
+ }
+
+ @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 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) {
+ if (fact.getContext() != null) {
+ // TODO Create the context if present
+ }
+
+ // Create the fact
+ String factSchemaB64 =
Base64.encodeBase64URLSafeString(fact
+ .getFactSchemaURN().getBytes());
+
+ StringBuilder insertFact = 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) {
+ insertFact.append(',');
+ valueSB.append(',');
+ }
+ insertFact.append(role);
+ valueSB.append('?');
+ firstRole = false;
+
+ roleIndex++;
+ roleIndexMap.put(role, roleIndex);
+ }
+ insertFact.append(')').append(valueSB).append(')');
+
+ PreparedStatement ps = null;
+ try {
+ ps = con.prepareStatement(insertFact.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,
fact.getValueOfRole(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 */
+ }
+ }
+ }
+
+ @Override
+ public FactResultSet query(Query query) throws Exception {
+ FactResultSet frs = null;
+ if (query != null) {
+
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = DriverManager.getConnection(DB_URL);
+
+ validateQuery(query, con);
+
+ // from here on we have valid data
+
+ String factSchemaB64 =
Base64.encodeBase64URLSafeString(query
+ .getFromSchemaURN().getBytes());
+
+ StringBuilder querySql = new
StringBuilder("SELECT ");
+
+ boolean firstRole = true;
+ for (String role : query.getRoles()) {
+ if (!firstRole) {
+ querySql.append(",");
+ }
+ querySql.append(role);
+ firstRole = false;
+ }
+
+ querySql.append(" FROM ").append(factSchemaB64);
+
+ List<String> queryParams = new
ArrayList<String>();
+ querySql.append(" WHERE ");
+ for (WhereClause wc : query.getWhereClauses()) {
+ querySql.append('(');
+ querySql.append(wc.getComparedRole());
+ switch (wc.getCompareOperator()) {
+ case EQ:
+ querySql.append(" =
").append('?');
+
queryParams.add(wc.getSearchedValue());
+ break;
+ }
+ }
+ querySql.append(')');
+
+
+ logger.info("performing query {}", querySql);
+
+ ps = con.prepareStatement(querySql.toString());
+ for (int i = 0; i < queryParams.size(); i++) {
+ ps.setString(i + 1, queryParams.get(i));
+ }
+
+ rs = ps.executeQuery();
+ if (rs != null) {
+ List<String> header = new
ArrayList<String>();
+ for (int i = 1; i <=
rs.getMetaData().getColumnCount(); i++) {
+
header.add(rs.getMetaData().getColumnName(i));
+ }
+
+ frs = new FactResultSet();
+ frs.setHeader(header);
+
+ while (rs.next()) {
+ FactResult result = new
FactResult();
+ List<String> values = new
ArrayList<String>();
+ for (String head : header) {
+
values.add(rs.getString(head));
+ }
+ result.setValues(values);
+ frs.addFactResult(result);
+ }
+ }
+
+ } catch (Exception e) {
+ throw e;
+ } finally {
+ if (rs != null) {
+ try {
+ rs.close();
+ } catch (Throwable t) {
+ // ignore
+ }
+ }
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (Throwable t) {
+ // ignore
+ }
+
+ }
+ if (con != null) {
+ try {
+ con.close();
+ } catch (Throwable t) {
+ // ignore
+ }
+ }
+ }
+
+ }
+
+ return frs;
+ }
+
+ private void validateQuery(Query query, Connection con) throws
Exception {
+ FactSchema schema =
this.loadFactSchema(query.getFromSchemaURN(), con);
+
+ if (schema == null) {
+ throw new Exception("Fact schema " +
query.getFromSchemaURN()
+ + " does not exist.");
+ }
+
+ StringBuilder unknownRoles = new StringBuilder();
+ for (String role : query.getRoles()) {
+ if (!schema.hasRole(role)) {
+ if (!unknownRoles.toString().isEmpty()) {
+ unknownRoles.append(',');
+ }
+ unknownRoles.append("role");
+ }
+ }
+ if (!unknownRoles.toString().isEmpty()) {
+ throw new Exception(
+ "The following roles are unknown for
the fact schema '"
+ +
query.getFromSchemaURN() + "': "
+ +
unknownRoles.toString());
+ }
+ }
}
Modified:
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=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/Fact.java
Wed Jul 13 07:28:04 2011
@@ -1,9 +1,7 @@
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;
@@ -14,8 +12,8 @@ import org.apache.stanbol.commons.jsonld
public class Fact {
private String factSchemaURN;
-
- private Map<String, List<String>> roleMap = new
HashMap<String,List<String>>();
+ private Map<String, String> roleMap = new HashMap<String,String>();
+ private FactContext context;
public String getFactSchemaURN() {
return factSchemaURN;
@@ -25,23 +23,27 @@ public class Fact {
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 void addRole(String role, String value) {
+ this.roleMap.put(role, value);
}
public Set<String> getRoles() {
return this.roleMap.keySet();
}
- public List<String> getTypesOfRole(String role) {
+ public String getValueOfRole(String role) {
return this.roleMap.get(role);
}
+
+ public FactContext getContext() {
+ return context;
+ }
+
+ public void setContext(FactContext context) {
+ this.context = context;
+ }
- public static Fact factFromJsonLd(JsonLd jsonLd) {
+ public static Fact factFromJsonLd(JsonLd jsonLd) {
Fact fact = null;
if (jsonLd.getResourceSubjects().size() == 1) {
@@ -94,4 +96,5 @@ public class Fact {
return fact;
}
+
}
Added:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactContext.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactContext.java?rev=1145892&view=auto
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactContext.java
(added)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactContext.java
Wed Jul 13 07:28:04 2011
@@ -0,0 +1,12 @@
+package org.apache.stanbol.factstore.model;
+
+import java.util.Date;
+
+public class FactContext {
+
+ private int id;
+ private Date validFrom;
+ private Date vaildTo;
+ private String contextURN;
+
+}
Added:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResult.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResult.java?rev=1145892&view=auto
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResult.java
(added)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResult.java
Wed Jul 13 07:28:04 2011
@@ -0,0 +1,17 @@
+package org.apache.stanbol.factstore.model;
+
+import java.util.List;
+
+public class FactResult {
+
+ private List<String> values;
+
+ public void setValues(List<String> values) {
+ this.values = values;
+ }
+
+ public List<String> getValues() {
+ return values;
+ }
+
+}
Added:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResultSet.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResultSet.java?rev=1145892&view=auto
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResultSet.java
(added)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactResultSet.java
Wed Jul 13 07:28:04 2011
@@ -0,0 +1,65 @@
+package org.apache.stanbol.factstore.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.stanbol.commons.jsonld.JsonLd;
+import org.apache.stanbol.commons.jsonld.JsonLdResource;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FactResultSet {
+ private static Logger logger =
LoggerFactory.getLogger(FactResultSet.class);
+
+ private List<String> header;
+ private List<FactResult> rows;
+
+ public List<String> getHeader() {
+ return header;
+ }
+
+ public List<FactResult> getRows() {
+ return rows;
+ }
+
+ public void setHeader(List<String> header) {
+ this.header = header;
+ }
+
+ public void addFactResult(FactResult result) {
+ if (this.rows == null) {
+ rows = new ArrayList<FactResult>();
+ }
+ rows.add(result);
+ }
+
+ public String toJSON() {
+ JsonLd root = new JsonLd();
+
+ JsonLdResource subject = new JsonLdResource();
+ JSONArray resultset = new JSONArray();
+
+ if (rows != null && !rows.isEmpty()) {
+ for (FactResult result : rows) {
+ JSONObject value = new JSONObject();
+ for (int i = 0; i < header.size(); i++) {
+ try {
+ value.put(header.get(i),
result.getValues().get(i));
+ } catch (JSONException e) {
+ logger.warn("Error creating
JSON from FactResultSet. {}", e
+ .getMessage());
+ }
+ }
+ resultset.put(value);
+ }
+ }
+
+ subject.putProperty("resultset", resultset);
+ root.put(subject);
+
+ return root.toString();
+ }
+}
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactSchema.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactSchema.java?rev=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactSchema.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/model/FactSchema.java
Wed Jul 13 07:28:04 2011
@@ -67,5 +67,9 @@ public class FactSchema {
return factSchema;
}
+
+ public boolean hasRole(String role) {
+ return this.roleMap.keySet().contains(role);
+ }
}
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/FactStoreWebFragment.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/FactStoreWebFragment.java?rev=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/FactStoreWebFragment.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/FactStoreWebFragment.java
Wed Jul 13 07:28:04 2011
@@ -17,6 +17,7 @@ import org.apache.stanbol.commons.web.ba
import org.apache.stanbol.factstore.api.FactStore;
import org.apache.stanbol.factstore.web.resource.FactStoreRootResource;
import org.apache.stanbol.factstore.web.resource.FactsResource;
+import org.apache.stanbol.factstore.web.resource.QueryResource;
import org.osgi.framework.BundleContext;
import org.osgi.service.component.ComponentContext;
@@ -59,6 +60,7 @@ public class FactStoreWebFragment implem
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(FactStoreRootResource.class);
classes.add(FactsResource.class);
+ classes.add(QueryResource.class);
return classes;
}
Modified:
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/QueryResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/QueryResource.java?rev=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/QueryResource.java
(original)
+++
incubator/stanbol/trunk/factstore/src/main/java/org/apache/stanbol/factstore/web/resource/QueryResource.java
Wed Jul 13 07:28:04 2011
@@ -16,57 +16,69 @@ import org.apache.stanbol.commons.web.ba
import org.apache.stanbol.commons.web.base.resource.BaseStanbolResource;
import org.apache.stanbol.factstore.api.FactStore;
import org.apache.stanbol.factstore.model.Query;
-import org.apache.stanbol.factstore.model.ResultSet;
+import org.apache.stanbol.factstore.model.FactResultSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Path("factstore/query")
public class QueryResource extends BaseStanbolResource {
- private static Logger logger =
LoggerFactory.getLogger(QueryResource.class);
+ private static Logger logger =
LoggerFactory.getLogger(QueryResource.class);
- private final FactStore factStore;
+ private final FactStore factStore;
- public QueryResource(@Context ServletContext context) {
- this.factStore = ContextHelper.getServiceFromContext(FactStore.class,
context);
- }
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public Response query(@QueryParam("q") String q) {
- if (this.factStore == null) {
- return Response.status(Status.INTERNAL_SERVER_ERROR).entity(
- "The FactStore is not configured properly").build();
- }
-
- if (q == null || q.isEmpty()) {
- return Response.status(Status.BAD_REQUEST).entity("No query
sent.").build();
- }
-
- JsonLd jsonLdQuery = null;
- try {
- jsonLdQuery = JsonLdParser.parse(q);
- } catch (Exception e) {
- logger.info("Could not parse query", e);
- return Response.status(Status.BAD_REQUEST).entity("Could not parse
query: " + e.getMessage())
- .build();
- }
-
- Query query = null;
- try {
- query = Query.toQueryFromJsonLd(jsonLdQuery);
- } catch (Exception e) {
- logger.info("Could not extract Query from JSON-LD", e);
- return Response.status(Status.BAD_REQUEST).entity(
- "Could not extract FactStore query from JSON-LD: " +
e.getMessage()).build();
- }
-
- ResultSet rs = this.factStore.query(query);
- if (rs != null) {
- return Response.ok(rs.toJSON()).build();
- }
- else {
- return Response.ok().build();
- }
- }
+ public QueryResource(@Context ServletContext context) {
+ this.factStore =
ContextHelper.getServiceFromContext(FactStore.class,
+ context);
+ }
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response query(@QueryParam("q") String q) {
+ logger.info("Query for fact: {}", q);
+
+ if (this.factStore == null) {
+ return
Response.status(Status.INTERNAL_SERVER_ERROR).entity(
+ "The FactStore is not configured
properly").build();
+ }
+
+ if (q == null || q.isEmpty()) {
+ return Response.status(Status.BAD_REQUEST).entity("No
query sent.")
+ .build();
+ }
+
+ JsonLd jsonLdQuery = null;
+ try {
+ jsonLdQuery = JsonLdParser.parse(q);
+ } catch (Exception e) {
+ logger.info("Could not parse query", e);
+ return Response.status(Status.BAD_REQUEST).entity(
+ "Could not parse query: " +
e.getMessage()).build();
+ }
+
+ Query query = null;
+ try {
+ query = Query.toQueryFromJsonLd(jsonLdQuery);
+ } catch (Exception e) {
+ logger.info("Could not extract Query from JSON-LD", e);
+ return Response.status(Status.BAD_REQUEST).entity(
+ "Could not extract FactStore query from
JSON-LD: "
+ +
e.getMessage()).build();
+ }
+
+ FactResultSet rs = null;
+ try {
+ rs = this.factStore.query(query);
+ } catch (Exception e) {
+ logger.info("Error while performing the query.", e);
+ return
Response.status(Status.INTERNAL_SERVER_ERROR).entity(
+ "Error while performing the query. " +
e.getMessage()).build();
+ }
+
+ if (rs != null) {
+ return Response.ok(rs.toJSON()).build();
+ } else {
+ return Response.ok().build();
+ }
+ }
}
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=1145892&r1=1145891&r2=1145892&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
Wed Jul 13 07:28:04 2011
@@ -7,7 +7,7 @@ import org.apache.stanbol.factstore.api.
import org.apache.stanbol.factstore.model.Fact;
import org.apache.stanbol.factstore.model.FactSchema;
import org.apache.stanbol.factstore.model.Query;
-import org.apache.stanbol.factstore.model.ResultSet;
+import org.apache.stanbol.factstore.model.FactResultSet;
public class FactStoreMock implements FactStore {
@@ -47,7 +47,7 @@ public class FactStoreMock implements Fa
}
@Override
- public ResultSet query(Query query) {
+ public FactResultSet query(Query query) {
// TODO Auto-generated method stub
return null;
}
Modified:
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/derby/DerbyFactStoreTest.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/derby/DerbyFactStoreTest.java?rev=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/derby/DerbyFactStoreTest.java
(original)
+++
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/derby/DerbyFactStoreTest.java
Wed Jul 13 07:28:04 2011
@@ -22,7 +22,7 @@ public class DerbyFactStoreTest {
String profile = "http://iks-project.eu/ont/employeeOf";
String profileB64 =
Base64.encodeBase64URLSafeString(profile.getBytes());
- String expected = "CREATE TABLE
aHR0cDovL2lrcy1wcm9qZWN0LmV1L29udC9lbXBsb3llZU9m (id INT GENERATED ALWAYS AS
IDENTITY, person VARCHAR(1024), organization VARCHAR(1024))";
+ String expected = "CREATE TABLE
aHR0cDovL2lrcy1wcm9qZWN0LmV1L29udC9lbXBsb3llZU9m (id INT GENERATED ALWAYS AS
IDENTITY, context_id INT CONSTRAINT
aHR0cDovL2lrcy1wcm9qZWN0LmV1L29udC9lbXBsb3llZU9m_CFK REFERENCES factcontexts ON
DELETE CASCADE ON UPDATE RESTRICT, person VARCHAR(1024), organization
VARCHAR(1024), created TIMESTAMP NOT NULL WITH DEFAULT CURRENT TIMESTAMP)";
List<String> sqls = fs.toSQLfromSchema(profileB64,
FactSchema.fromJsonLdProfile(profile, jsonLd));
Assert.assertEquals(1, sqls.size());
Assert.assertEquals(expected, sqls.get(0));
Modified:
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=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
(original)
+++
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/FactTest.java
Wed Jul 13 07:28:04 2011
@@ -31,13 +31,11 @@ public class FactTest {
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));
+ assertEquals("http://upb.de/persons/bnagel",
fact.getValueOfRole(role));
rolePersonOK = true;
}
if (role.equals("organization")) {
- assertEquals(1, fact.getTypesOfRole(role).size());
- assertEquals("http://uni-paderborn.de",
fact.getTypesOfRole(role).get(0));
+ assertEquals("http://uni-paderborn.de",
fact.getValueOfRole(role));
roleOrgaOK = true;
}
}
@@ -100,13 +98,11 @@ public class FactTest {
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/"));
+
assertTrue(fact.getValueOfRole(role).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));
+ assertEquals("http://uni-paderborn.de",
fact.getValueOfRole(role));
roleOrgaOK = true;
}
}
@@ -149,13 +145,11 @@ public class FactTest {
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));
+ assertEquals("http://upb.de/persons/bnagel",
fact.getValueOfRole(role));
rolePersonOK = true;
}
if (role.equals("organization")) {
- assertEquals(1, fact.getTypesOfRole(role).size());
- assertEquals("http://uni-paderborn.de",
fact.getTypesOfRole(role).get(0));
+ assertEquals("http://uni-paderborn.de",
fact.getValueOfRole(role));
roleOrgaOK = true;
}
}
@@ -171,13 +165,11 @@ public class FactTest {
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));
+ assertEquals("http://upb.de/persons/bnagel",
fact.getValueOfRole(role));
rolePersonOK = true;
}
if (role.equals("friend")) {
- assertEquals(1, fact.getTypesOfRole(role).size());
- assertEquals("http://upb.de/persons/fchrist",
fact.getTypesOfRole(role).get(0));
+ assertEquals("http://upb.de/persons/fchrist",
fact.getValueOfRole(role));
roleFriendOK = true;
}
}
Modified:
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/QueryTest.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/QueryTest.java?rev=1145892&r1=1145891&r2=1145892&view=diff
==============================================================================
---
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/QueryTest.java
(original)
+++
incubator/stanbol/trunk/factstore/src/test/java/org/apache/stanbol/factstore/model/QueryTest.java
Wed Jul 13 07:28:04 2011
@@ -1,12 +1,16 @@
package org.apache.stanbol.factstore.model;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.apache.stanbol.commons.jsonld.JsonLd;
import org.apache.stanbol.commons.jsonld.JsonLdIRI;
import org.apache.stanbol.commons.jsonld.JsonLdResource;
-import org.codehaus.jettison.json.JSONArray;
-import org.codehaus.jettison.json.JSONObject;
import org.junit.Test;
public class QueryTest {
@@ -17,19 +21,19 @@ public class QueryTest {
jldq.addNamespacePrefix("http://iks-project.eu/ont/", "iks");
JsonLdResource subject = new JsonLdResource();
- JSONArray select = new JSONArray();
- select.put("person");
+ List<String> select = new ArrayList<String>();
+ select.add("person");
subject.putProperty("select", select);
subject.putProperty("from", "iks:employeeOf");
- JSONObject orga = new JSONObject();
+ Map<String, Object> orga = new HashMap<String, Object>();
orga.put("organization", new JsonLdIRI("http://upb.de"));
- JSONObject eq = new JSONObject();
+ Map<String, Object> eq = new HashMap<String, Object>();
eq.put("=", orga);
- JSONArray where = new JSONArray();
- where.put(eq);
+ List<Object> where = new ArrayList<Object>();
+ where.add(eq);
subject.putProperty("where", where);
@@ -62,19 +66,19 @@ public class QueryTest {
jldq.addNamespacePrefix("http://upd.de/persons/", "upb");
JsonLdResource subject = new JsonLdResource();
- JSONArray select = new JSONArray();
- select.put("person");
+ List<String> select = new ArrayList<String>();
+ select.add("person");
subject.putProperty("select", select);
subject.putProperty("from", "iks:employeeOf");
- JSONObject orga = new JSONObject();
+ Map<String, Object> orga = new HashMap<String, Object>();
orga.put("person", new JsonLdIRI("upb:fchrist"));
- JSONObject eq = new JSONObject();
+ Map<String, Object> eq = new HashMap<String, Object>();
eq.put("=", orga);
- JSONArray where = new JSONArray();
- where.put(eq);
+ List<Object> where = new ArrayList<Object>();
+ where.add(eq);
subject.putProperty("where", where);