Added:
branches/stars/Caboto/caboto-web/src/main/webapp/WEB-INF/lib/
Modified:
branches/stars/Caboto/ (props changed)
branches/stars/Caboto/caboto-web/pom.xml
branches/stars/Caboto/caboto-web/src/main/webapp/index.jsp
branches/stars/Caboto/caboto-web/src/main/webapp/js/annotations.js
branches/stars/Caboto/database/pom.xml
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Data.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/DataException.java
(props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Database.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Results.java
(props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Utils.java
(props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/DatasourceDatabase.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/FileDatabase.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/RdfFileFilter.java
(props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBAbstractDatabase.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBDatabase.java
(contents, props changed)
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/Scratch.java
(props changed)
branches/stars/Caboto/database/src/test/java/org/caboto/jena/ (props
changed)
branches/stars/Caboto/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java
branches/stars/Caboto/database/src/test/resources/graphs/test/ (props
changed)
branches/stars/Caboto/pom.xml
Log:
ASSIGNED - # 236: Repeating properties per annotation
https://webfutures.ilrt.bris.ac.uk/stars/ticket/236
Modified: branches/stars/Caboto/caboto-web/pom.xml
==============================================================================
--- branches/stars/Caboto/caboto-web/pom.xml (original)
+++ branches/stars/Caboto/caboto-web/pom.xml Fri Jul 10 06:26:51 2009
@@ -3,14 +3,14 @@
<parent>
<artifactId>caboto-parent</artifactId>
<groupId>org.caboto</groupId>
- <version>0.6</version>
+ <version>0.9-STARS</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.caboto</groupId>
<artifactId>caboto-web</artifactId>
<packaging>war</packaging>
<name>caboto-web Maven Webapp</name>
- <version>0.6</version>
+ <version>0.9-STARS</version>
<url>http://maven.apache.org</url>
<build>
<plugins>
Modified: branches/stars/Caboto/caboto-web/src/main/webapp/index.jsp
==============================================================================
--- branches/stars/Caboto/caboto-web/src/main/webapp/index.jsp (original)
+++ branches/stars/Caboto/caboto-web/src/main/webapp/index.jsp Fri Jul 10
06:26:51 2009
@@ -2,7 +2,7 @@
<%@ taglib prefix="security"
uri="http://www.springframework.org/security/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:security="http://www.springframework.org/security/tags">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="caboto-annotation" content="http://caboto.org"/>
@@ -51,8 +51,11 @@
<p>
<label><strong>Title:</strong></label><br/>
<input id="annotation-title" type="text" name="title"
size="50"/><br/>
- <label><strong>Body:</strong></label><br/>
- <textarea id="annotation-body" rows="5" cols="50"
+ <label><strong>Description:</strong></label><br/>
+ <textarea id="annotation-description1" rows="5"
cols="50"
+ name="description"></textarea><br/>
+ <label><strong>Description (repeated
field):</strong></label><br/>
+ <textarea id="annotation-description2" rows="5"
cols="50"
name="description"></textarea><br/>
<input type="radio" name="privacy" value="public"
checked="checked"> Public
<input type="radio" name="privacy" value="private">
Private
Modified: branches/stars/Caboto/caboto-web/src/main/webapp/js/annotations.js
==============================================================================
--- branches/stars/Caboto/caboto-web/src/main/webapp/js/annotations.js
(original)
+++ branches/stars/Caboto/caboto-web/src/main/webapp/js/annotations.js Fri
Jul 10 06:26:51 2009
@@ -85,10 +85,15 @@
function formatAnnotation(annotation, uid, admin) {
- var date = parseDate(annotation.created);
+ var date = parseDate(annotation.created);
var author = parseAuthor(annotation.author);
- var body = annotation.body.description.replace(/\n|\r/g, "<br />\n");
+// var body = annotation.body.description.replace(/\n|\r/g, "<br />\n");
var type = findType(annotation.id);
+
+ var body = "";
+ for(i=0; i<annotation.body.description.length; i++) {
+ body += annotation.body.description[i] + "<br/>";
+ }
var output = "<div class='annotation-entry'>";
@@ -121,9 +126,10 @@
if (document.getElementById('annotation-comment-form')) {
Form.Element.enable('annotation-submit');
Form.Element.clear('annotation-title');
- Form.Element.clear('annotation-body');
+ Form.Element.clear('annotation-description1');
+ Form.Element.clear('annotation-description2');
}
-
+ document.getElementById("annotation-messages").innerHTML = "";
}
/*
@@ -216,17 +222,19 @@
message += "You need to provide a title.";
}
- if (!Form.Element.present("annotation-body")) {
- message += "You need to provide a body.";
+ if (!Form.Element.present("annotation-description1")
&& !Form.Element.present("annotation-description2")) {
+ message += "You need to provide at least one description.";
} else {
- var body = Form.Element.getValue("annotation-body");
+ for(i=1;i<3;i++) {
+ var desc = Form.Element.getValue("annotation-description" + i);
- //
<http://haacked.com/archive/2004/10/25/usingregularexpressionstomatchhtml.aspx>
- var matches = body.match(/<\/?\w+((\s+\w+(\s*=\s*(?:\".*?\"|
\'.*?\'|[^\'\">\s]+))?)+\s*|\s*)\/?>/);
+ //
<http://haacked.com/archive/2004/10/25/usingregularexpressionstomatchhtml.aspx>
+ var matches = desc.match(/<\/?\w+((\s+\w+(\s*=\s*(?:\".*?\"|\'.*?\'|
[^\'\">\s]+))?)+\s*|\s*)\/?>/);
- if (matches !== null) {
- message += "It looks like you have markup in your comment -
not supported, sorry!";
+ if (matches !== null) {
+ message += "It looks like you have markup in your comment #"+i+" -
not supported, sorry!";
+ }
}
}
Modified: branches/stars/Caboto/database/pom.xml
==============================================================================
--- branches/stars/Caboto/database/pom.xml (original)
+++ branches/stars/Caboto/database/pom.xml Fri Jul 10 06:26:51 2009
@@ -5,13 +5,13 @@
<parent>
<artifactId>caboto-parent</artifactId>
<groupId>org.caboto</groupId>
- <version>0.6</version>
+ <version>0.9-STARS</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.caboto</groupId>
<artifactId>database</artifactId>
<name>database</name>
- <version>0.6</version>
+ <version>0.9-STARS</version>
<packaging>jar</packaging>
<repositories>
<repository>
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/AbstractDatabase.java
Fri Jul 10 06:26:51 2009
@@ -31,10 +31,23 @@
* POSSIBILITY OF SUCH DAMAGE.
*
*/
+
package org.caboto.jena.db;
-import com.hp.hpl.jena.query.*;
-import com.hp.hpl.jena.rdf.model.*;
+import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.query.Query;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.QueryFactory;
+import com.hp.hpl.jena.query.QuerySolution;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Property;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+import com.hp.hpl.jena.rdf.model.Resource;
+import com.hp.hpl.jena.rdf.model.ResourceFactory;
+import com.hp.hpl.jena.sparql.util.Context;
+import com.hp.hpl.jena.sparql.util.Symbol;
/**
* A useful database abstraction that implements the details of the
queries,
@@ -45,7 +58,9 @@
*/
public abstract class AbstractDatabase implements Database {
- /**
+ private Context context;
+
+ /**
* Gets the data object of the database for querying
*
* @return The data object
@@ -69,7 +84,8 @@
} else {
queryExec = QueryExecutionFactory.create(sparql, dataset);
}
-
+ // Add context items, if there are any
+ if (getQueryContext() != null)
queryExec.getContext().setAll(getQueryContext());
return new Results(queryExec.execSelect(), queryExec, data);
} catch (DataException e) {
e.printStackTrace();
@@ -92,6 +108,8 @@
} else {
queryExec = QueryExecutionFactory.create(query, dataset);
}
+ // Add context items, if there are any
+ if (getQueryContext() != null)
queryExec.getContext().setAll(getQueryContext());
Model model = queryExec.execConstruct();
queryExec.close();
data.close();
@@ -202,4 +220,14 @@
return false;
}
}
+
+ /**
+ * Set context for queries
+ */
+ public void setQueryContext(Symbol symbol, Object object) {
+ if (this.context == null) context = new Context();
+ this.context.set(symbol, object);
+ }
+
+ public Context getQueryContext() { return this.context; }
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Data.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Data.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Data.java
Fri Jul 10 06:26:51 2009
@@ -35,6 +35,7 @@
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.sparql.util.Context;
/**
* Represents data that can be queried by the abstract database.
@@ -63,4 +64,10 @@
* Indicates that the data is finished with.
*/
void close();
+
+ /**
+ *
+ * @return Current query context (if any)
+ */
+ public Context getContext();
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Database.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Database.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/Database.java
Fri Jul 10 06:26:51 2009
@@ -31,6 +31,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*
*/
+
package org.caboto.jena.db;
import com.hp.hpl.jena.query.Query;
@@ -38,6 +39,8 @@
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
+import com.hp.hpl.jena.sparql.util.Context;
+import com.hp.hpl.jena.sparql.util.Symbol;
/**
* Hides access to the database (in case we change it later)
@@ -128,4 +131,17 @@
* @return true if the data was deleted
*/
boolean deleteAll(String uri);
+
+ /**
+ * Set query context for later executions
+ * @param indexKey
+ * @param value
+ */
+ void setQueryContext(Symbol indexKey, Object value);
+
+ /**
+ * Retrieve the context for this database
+ * @return
+ */
+ Context getQueryContext();
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/DatasourceDatabase.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/DatasourceDatabase.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/DatasourceDatabase.java
Fri Jul 10 06:26:51 2009
@@ -38,6 +38,8 @@
import com.hp.hpl.jena.sdb.SDBFactory;
import com.hp.hpl.jena.sdb.Store;
import com.hp.hpl.jena.sdb.StoreDesc;
+import com.hp.hpl.jena.sparql.util.Context;
+
import org.caboto.jena.db.Data;
import org.caboto.jena.db.DataException;
@@ -60,9 +62,11 @@
private class SDBData implements Data {
private Store store = null;
-
- private SDBData(Store store) {
+ private Context context;
+
+ private SDBData(Store store, Context context) {
this.store = store;
+ this.context = context;
}
public Dataset getDataset() {
@@ -81,6 +85,10 @@
store.getConnection().close();
store.close();
}
+
+ public Context getContext() {
+ return context;
+ }
}
/**
@@ -122,7 +130,7 @@
try {
Connection connection = dataSource.getConnection();
//System.out.println("Get -> " + connection.hashCode());
- return new SDBData(connectToStore(connection));
+ return new SDBData(connectToStore(connection),
getQueryContext());
} catch (SQLException e) {
throw new DataException(e);
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/FileDatabase.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/FileDatabase.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/FileDatabase.java
Fri Jul 10 06:26:51 2009
@@ -36,6 +36,8 @@
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.sparql.util.Context;
+
import org.caboto.jena.db.AbstractDatabase;
import org.caboto.jena.db.Data;
@@ -59,7 +61,13 @@
// A data implementation for the file dataset
private class FileData implements Data {
+
+ private Context context;
+ public FileData(Context context) {
+ this.context = context;
+ }
+
public Dataset getDataset() {
return dataset;
}
@@ -71,6 +79,10 @@
public void close() {
// Does Nothing
}
+
+ public Context getContext() {
+ return context;
+ }
}
/**
@@ -129,6 +141,6 @@
* @see org.caboto.jena.db.AbstractDatabase#getData()
*/
public Data getData() {
- return new FileData();
+ return new FileData(getQueryContext());
}
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/LarqIndexedDatabase.java
Fri Jul 10 06:26:51 2009
@@ -63,6 +63,8 @@
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.sparql.util.Context;
+import com.hp.hpl.jena.sparql.util.Symbol;
/**
*
@@ -95,6 +97,7 @@
throw new RuntimeException("Error opening lucene index", e);
}
ib = new IndexBuilderSubject(indexWriter);
+ setIndex(ib.getIndex());
if (createIndex) reindex();
}
@@ -173,7 +176,7 @@
wrappedRes.close();
larqBuilder.flushWriter();
ib = larqBuilder;
- LARQ.setDefaultIndex(cacheIfRequired(larqBuilder.getIndex()));
+ setIndex(larqBuilder.getIndex());
log.info("Finished indexing");
}
@@ -181,7 +184,7 @@
IndexBuilderModel larqBuilder = getIndexBuilder();
larqBuilder.indexStatements(model.listStatements());
larqBuilder.flushWriter();
- LARQ.setDefaultIndex(cacheIfRequired(larqBuilder.getIndex()));
+ setIndex(larqBuilder.getIndex());
}
/**
@@ -200,7 +203,7 @@
private IndexBuilderModel getIndexBuilder() {
if (ib == null) {
ib = new IndexBuilderSubject(indexDirectory);
- LARQ.setDefaultIndex(cacheIfRequired(ib.getIndex()));
+ setIndex(ib.getIndex());
}
return ib;
}
@@ -211,6 +214,10 @@
return new IndexLARQCacher(index);
}
+ private void setIndex(IndexLARQ index) {
+ database.setQueryContext(LARQ.indexKey, cacheIfRequired(index));
+ }
+
static class IndexLARQCacher extends IndexLARQ {
private final IndexLARQ index;
@@ -232,5 +239,13 @@
public void close() {
getIndexBuilder().closeWriter();
+ }
+
+ public void setQueryContext(Symbol indexKey, Object value) {
+ database.setQueryContext(indexKey, value);
+ }
+
+ public Context getQueryContext() {
+ return database.getQueryContext();
}
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBAbstractDatabase.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBAbstractDatabase.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBAbstractDatabase.java
Fri Jul 10 06:26:51 2009
@@ -33,12 +33,20 @@
*/
package org.caboto.jena.db.impl;
+import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.sdb.SDBFactory;
import com.hp.hpl.jena.sdb.Store;
import com.hp.hpl.jena.sdb.StoreDesc;
import com.hp.hpl.jena.sdb.sql.SDBConnection;
import org.caboto.jena.db.AbstractDatabase;
+import org.caboto.jena.db.DataException;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.SQLException;
@@ -79,5 +87,19 @@
*/
protected Store connectToStore(Connection conn) {
return SDBFactory.connectStore(conn, storeDesc);
+ }
+
+ /**
+ * Imports a graph from file(s) in the classpath
+ * @param files The name(s) of the file to import
+ */
+ public void setLoadedFiles(String... files) {
+ for (String filename : files) {
+ Model model = getUpdateModel();
+ InputStream input = getClass().getResourceAsStream(filename);
+ model.read(input, "RDF/XML");
+ URL url = getClass().getResource(filename);
+ addModel(url.toString(), model);
+ }
}
}
Modified:
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBDatabase.java
==============================================================================
---
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBDatabase.java
(original)
+++
branches/stars/Caboto/database/src/main/java/org/caboto/jena/db/impl/SDBDatabase.java
Fri Jul 10 06:26:51 2009
@@ -41,6 +41,8 @@
import com.hp.hpl.jena.sdb.sql.JDBC;
import com.hp.hpl.jena.sdb.sql.SDBConnectionDesc;
import com.hp.hpl.jena.sdb.store.DatabaseType;
+import com.hp.hpl.jena.sparql.util.Context;
+
import org.caboto.jena.db.Data;
import org.caboto.jena.db.DataException;
@@ -73,9 +75,11 @@
private class SDBData implements Data {
private Store store = null;
+ private Context context;
- private SDBData(Store store) {
+ private SDBData(Store store, Context context) {
this.store = store;
+ this.context = context;
}
public Dataset getDataset() {
@@ -93,6 +97,10 @@
store.close();
store.getConnection().close();
}
+
+ public Context getContext() {
+ return context;
+ }
}
/**
@@ -198,10 +206,17 @@
*/
public Data getData() throws DataException {
try {
- return new SDBData(getStore());
+ return new SDBData(getStore(), getQueryContext());
} catch (SQLException e) {
throw new DataException(e);
}
}
+ /**
+ * Removes everything from the database
+ * @throws SQLException
+ */
+ public void clean() throws SQLException {
+ getStore().getTableFormatter().format();
+ }
}
Modified:
branches/stars/Caboto/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java
==============================================================================
---
branches/stars/Caboto/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java
(original)
+++
branches/stars/Caboto/database/src/test/java/org/caboto/jena/db/impl/LarqIndexedDatabaseTest.java
Fri Jul 10 06:26:51 2009
@@ -63,6 +63,8 @@
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.sparql.core.DataSourceImpl;
+import com.hp.hpl.jena.sparql.util.Context;
+import com.hp.hpl.jena.sparql.util.Symbol;
import com.hp.hpl.jena.vocabulary.RDFS;
public class LarqIndexedDatabaseTest {
@@ -169,6 +171,7 @@
private static class SimpleDB implements Database {
private DataSource dataset = new DataSourceImpl();
+ private Context context;
public boolean addModel(String uri, Model model) {
dataset.addNamedModel(uri, model);
@@ -197,6 +200,7 @@
public Results executeSelectQuery(String sparql,
QuerySolution initialBindings) {
QueryExecution qef = QueryExecutionFactory.create(sparql, dataset);
+ if (context != null) qef.getContext().setAll(context);
return new Results(qef.execSelect(), qef, getData());
}
@@ -205,6 +209,7 @@
public void close() {}
public Dataset getDataset() { return null; }
public Model getModel(String uri) { return null; }
+ public Context getContext() { return null; }
};
}
@@ -215,6 +220,15 @@
public boolean updateProperty(String uri, String resourceUri,
Property property, RDFNode value) {
return false;
+ }
+
+ public void setQueryContext(Symbol indexKey, Object value) {
+ if (context == null) context = new Context();
+ context.set(indexKey, value);
+ }
+
+ public Context getQueryContext() {
+ return context;
}
}
Modified: branches/stars/Caboto/pom.xml
==============================================================================
--- branches/stars/Caboto/pom.xml (original)
+++ branches/stars/Caboto/pom.xml Fri Jul 10 06:26:51 2009
@@ -7,7 +7,7 @@
<groupId>org.caboto</groupId>
<artifactId>caboto-parent</artifactId>
<packaging>pom</packaging>
- <version>0.6</version>
+ <version>0.9-STARS</version>
<name>Caboto Parent</name>
<url>http://maven.apache.org</url>
<modules>
@@ -22,7 +22,7 @@
<sdb.version>1.3-SNAPSHOT</sdb.version>
<arq.version>2.6.0</arq.version>
<jersey.version>1.0</jersey.version>
- <caboto.version>0.6</caboto.version>
+ <caboto.version>0.9-STARS</caboto.version>
</properties>
<build>