http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/indexingSailExample/src/main/java/RyaDirectExample.java
----------------------------------------------------------------------
diff --git a/extras/indexingSailExample/src/main/java/RyaDirectExample.java 
b/extras/indexingSailExample/src/main/java/RyaDirectExample.java
new file mode 100644
index 0000000..947164c
--- /dev/null
+++ b/extras/indexingSailExample/src/main/java/RyaDirectExample.java
@@ -0,0 +1,681 @@
+
+import java.util.List;
+
+import mvm.rya.accumulo.AccumuloRdfConfiguration;
+import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.indexing.RyaSailFactory;
+import mvm.rya.indexing.accumulo.ConfigUtils;
+import mvm.rya.indexing.accumulo.geo.GeoConstants;
+import mvm.rya.indexing.external.tupleSet.AccumuloIndexSet;
+
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.Connector;
+import org.apache.accumulo.core.client.MutationsRejectedException;
+import org.apache.accumulo.core.client.TableExistsException;
+import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.core.client.mock.MockInstance;
+import org.apache.accumulo.core.client.security.tokens.PasswordToken;
+import org.apache.commons.lang.Validate;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.log4j.Logger;
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.LiteralImpl;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.model.vocabulary.RDFS;
+import org.openrdf.query.BindingSet;
+import org.openrdf.query.MalformedQueryException;
+import org.openrdf.query.QueryEvaluationException;
+import org.openrdf.query.QueryLanguage;
+import org.openrdf.query.QueryResultHandlerException;
+import org.openrdf.query.TupleQuery;
+import org.openrdf.query.TupleQueryResultHandler;
+import org.openrdf.query.TupleQueryResultHandlerException;
+import org.openrdf.query.Update;
+import org.openrdf.query.UpdateExecutionException;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.sail.SailRepository;
+import org.openrdf.repository.sail.SailRepositoryConnection;
+import org.openrdf.sail.Sail;
+import org.openrdf.sail.SailException;
+
+public class RyaDirectExample {
+    private static final Logger log = Logger.getLogger(RyaDirectExample.class);
+
+    //
+    // Connection configuration parameters
+    //
+
+    private static final boolean USE_MOCK_INSTANCE = true;
+    private static final boolean PRINT_QUERIES = true;
+    private static final String INSTANCE = "instance";
+    private static final String RYA_TABLE_PREFIX = "x_test_triplestore_";
+    private static final String AUTHS = "";
+    
+    
+    
+    public static void main(String[] args) throws Exception {
+        Configuration conf = getConf();
+        conf.setBoolean(ConfigUtils.DISPLAY_QUERY_PLAN, PRINT_QUERIES);
+        
+        log.info("Creating the tables as root.");
+//        createTables(addRootConf(conf), conf);
+
+        SailRepository repository = null;
+        SailRepositoryConnection conn = null;
+      
+        try {
+            log.info("Connecting to Indexing Sail Repository.");
+            
+            Sail extSail = RyaSailFactory.getInstance(conf);
+            repository = new SailRepository(extSail);
+            repository.initialize();
+            conn = repository.getConnection();
+            
+            createPCJ(conn);
+
+            long start = System.currentTimeMillis();
+            log.info("Running SPARQL Example: Add and Delete");
+            testAddAndDelete(conn);
+            log.info("Running SAIL/SPARQL Example: PCJ Search");
+            testPCJSearch(conn);
+            log.info("Running SAIL/SPARQL Example: Add and Temporal Search");
+            testAddAndTemporalSearchWithPCJ(conn);
+            log.info("Running SAIL/SPARQL Example: Add and Free Text Search 
with PCJ");
+            testAddAndFreeTextSearchWithPCJ(conn);
+            log.info("Running SPARQL Example: Add Point and Geo Search with 
PCJ");
+            testAddPointAndWithinSearchWithPCJ(conn);
+            log.info("Running SPARQL Example: Temporal, Freetext, and Geo 
Search");
+            testTemporalFreeGeoSearch(conn);
+            log.info("Running SPARQL Example: Geo, Freetext, and PCJ Search");
+            testGeoFreetextWithPCJSearch(conn);
+
+            log.info("TIME: " + (System.currentTimeMillis() - start) / 1000.);
+        } finally {
+            log.info("Shutting down");
+            closeQuietly(conn);
+            closeQuietly(repository);
+        }
+    }
+
+    private static void closeQuietly(SailRepository repository) {
+        if (repository != null) {
+            try {
+                repository.shutDown();
+            } catch (RepositoryException e) {
+                // quietly absorb this exception
+            }
+        }
+    }
+
+    private static void closeQuietly(SailRepositoryConnection conn) {
+        if (conn != null) {
+            try {
+                conn.close();
+            } catch (RepositoryException e) {
+                // quietly absorb this exception
+            }
+        }
+    }
+
+    private static Configuration getConf() {
+
+        AccumuloRdfConfiguration conf = new AccumuloRdfConfiguration();
+
+        conf.setBoolean(ConfigUtils.USE_MOCK_INSTANCE, USE_MOCK_INSTANCE);
+        conf.set(ConfigUtils.USE_PCJ, "true");
+        conf.set(ConfigUtils.USE_GEO, "true");
+        conf.set(ConfigUtils.USE_FREETEXT, "true");
+        conf.set(ConfigUtils.USE_TEMPORAL, "true");
+        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, 
RYA_TABLE_PREFIX);
+        conf.set(ConfigUtils.CLOUDBASE_USER, "root");
+        conf.set(ConfigUtils.CLOUDBASE_PASSWORD, "");
+        conf.set(ConfigUtils.CLOUDBASE_INSTANCE, INSTANCE);
+        conf.setInt(ConfigUtils.NUM_PARTITIONS, 3);
+        conf.set(ConfigUtils.CLOUDBASE_AUTHS, AUTHS);
+
+        // only geo index statements with geo:asWKT predicates
+        conf.set(ConfigUtils.GEO_PREDICATES_LIST, 
GeoConstants.GEO_AS_WKT.stringValue());
+        return conf;
+    }
+
+    public static void testAddAndDelete(SailRepositoryConnection conn) throws 
MalformedQueryException,
+            RepositoryException, UpdateExecutionException, 
QueryEvaluationException, TupleQueryResultHandlerException,
+            AccumuloException, AccumuloSecurityException, 
TableNotFoundException {
+
+        // Add data
+        String query = "INSERT DATA\n"//
+                + "{ GRAPH <http://updated/test> {\n"//
+                + "  <http://acme.com/people/Mike> " //
+                + "       <http://acme.com/actions/likes> \"A new book\" ;\n"//
+                + "       <http://acme.com/actions/likes> \"Avocados\" .\n" + 
"} }";
+
+        log.info("Performing Query");
+
+        Update update = conn.prepareUpdate(QueryLanguage.SPARQL, query);
+        update.execute();
+
+        query = "select ?p ?o { GRAPH <http://updated/test> 
{<http://acme.com/people/Mike> ?p ?o . }}";
+        CountingResultHandler resultHandler = new CountingResultHandler();
+        TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, 
query);
+        tupleQuery.evaluate(resultHandler);
+        log.info("Result count : " + resultHandler.getCount());
+
+        Validate.isTrue(resultHandler.getCount() == 2);
+        resultHandler.resetCount();
+
+        // Delete Data
+        query = "DELETE DATA\n" //
+                + "{ GRAPH <http://updated/test> {\n"
+                + "  <http://acme.com/people/Mike> 
<http://acme.com/actions/likes> \"A new book\" ;\n"
+                + "   <http://acme.com/actions/likes> \"Avocados\" .\n" + "}}";
+
+        update = conn.prepareUpdate(QueryLanguage.SPARQL, query);
+        update.execute();
+
+        query = "select ?p ?o { GRAPH <http://updated/test> 
{<http://acme.com/people/Mike> ?p ?o . }}";
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, query);
+        tupleQuery.evaluate(resultHandler);
+        log.info("Result count : " + resultHandler.getCount());
+
+        Validate.isTrue(resultHandler.getCount() == 0);
+    }
+    
+    
+    private static void testPCJSearch(SailRepositoryConnection conn) throws 
Exception {
+        
+        String queryString;
+        TupleQuery tupleQuery;
+        CountingResultHandler tupleHandler;
+
+     // ///////////// search for bob
+        queryString = "SELECT ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "}";//
+
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+           
+     // ///////////// search for bob
+        queryString = "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "SELECT ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?c a ?e . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "}";//
+
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 2);    
+        
+    }
+    
+
+    
+    
+    private static void 
testAddAndTemporalSearchWithPCJ(SailRepositoryConnection conn) throws Exception 
{
+
+        // create some resources and literals to make statements out of
+
+        String sparqlInsert = "PREFIX time: <http://www.w3.org/2006/time#>\n"
+                + "INSERT DATA {\n" //
+                + "_:eventz       a       time:Instant ;\n"
+                + "     time:inXSDDateTime '2001-01-01T01:01:01-08:00' ;\n" // 
 one second
+                + "     time:inXSDDateTime 
'2001-01-01T04:01:02.000-05:00'^^<http://www.w3.org/2001/XMLSchema#dateTime> 
;\n" //   2 seconds
+                + "     time:inXSDDateTime \"2001-01-01T01:01:03-08:00\" ;\n" 
//   3 seconds
+                + "     time:inXSDDateTime '2001-01-01T01:01:04-08:00' ;\n" // 
  4 seconds
+                + "     time:inXSDDateTime '2001-01-01T09:01:05Z' ;\n"   
+                + "     time:inXSDDateTime '2006-01-01' ;\n" 
+                + "     time:inXSDDateTime '2007-01-01' ;\n" 
+                + "     time:inXSDDateTime '2008-01-01' ; .\n"
+                + "}";
+
+        Update update = conn.prepareUpdate(QueryLanguage.SPARQL, sparqlInsert);
+        update.execute();
+
+        // Find all stored dates.
+        String queryString = "PREFIX time: <http://www.w3.org/2006/time#> \n"//
+                + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n"//
+                + "SELECT ?event ?time \n" //
+                + "WHERE { \n"
+                + "  ?event time:inXSDDateTime ?time . \n"//
+                + "  FILTER(tempo:after(?time, '2001-01-01T01:01:03-08:00') ) 
\n"// after 3 seconds
+                + "}";//
+       
+        
+
+        TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, 
queryString);
+        CountingResultHandler tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 5);
+        
+        // Find all stored dates.
+        queryString = "PREFIX time: <http://www.w3.org/2006/time#> \n"//
+                + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n"//
+                + "SELECT ?event ?time \n" //
+                + "WHERE { \n"
+                + "  ?event time:inXSDDateTime ?time . \n"//
+                + "  ?event a  time:Instant . \n"//
+                + "  FILTER(tempo:after(?time, '2001-01-01T01:01:03-08:00') ) 
\n"// after 3 seconds
+                + "}";//
+
+
+
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 5);
+
+
+        // Find all stored dates.
+        queryString = "PREFIX time: <http://www.w3.org/2006/time#> \n"//
+                + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> \n"//
+                + "SELECT ?event ?time ?e ?c ?l ?o \n" //
+                + "WHERE { \n"
+                + "  ?e a ?c . \n"//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . \n"//
+                + "  ?e <uri:talksTo> ?o . \n"//
+                + "  ?event a  time:Instant . \n"//
+                + "  ?event time:inXSDDateTime ?time . \n"//
+                + "  FILTER(tempo:after(?time, '2001-01-01T01:01:03-08:00') ) 
\n"// after 3 seconds
+                + "}";//
+
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 5);
+    }
+
+
+
+
+
+
+    private static void 
testAddAndFreeTextSearchWithPCJ(SailRepositoryConnection conn) throws Exception 
{
+        // add data to the repository using the SailRepository add methods
+        ValueFactory f = conn.getValueFactory();
+        URI person = f.createURI("http://example.org/ontology/Person";);
+
+        String uuid;
+
+        uuid = "urn:people:alice";
+        conn.add(f.createURI(uuid), RDF.TYPE, person);
+        conn.add(f.createURI(uuid), RDFS.LABEL, f.createLiteral("Alice Palace 
Hose", f.createURI("xsd:string")));
+
+        uuid = "urn:people:bobss";
+        conn.add(f.createURI(uuid), RDF.TYPE, person);
+        conn.add(f.createURI(uuid), RDFS.LABEL, f.createLiteral("Bob Snob 
Hose", "en"));
+        
+        String queryString;
+        TupleQuery tupleQuery;
+        CountingResultHandler tupleHandler;
+
+        // ///////////// search for alice
+        queryString = "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "SELECT ?person ?match ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?person <http://www.w3.org/2000/01/rdf-schema#label> 
?match . "//
+                + "  FILTER(fts:text(?match, \"pal*\")) " //
+                + "}";//
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+        
+
+        // ///////////// search for alice and bob
+        queryString = "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "SELECT ?person ?match " //
+                + "{" //
+                + "  ?person <http://www.w3.org/2000/01/rdf-schema#label> 
?match . "//
+                  + "  ?person a <http://example.org/ontology/Person> . "//
+                + "  FILTER(fts:text(?match, \"(alice | bob) *SE\")) " //
+                + "}";//
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 2);
+        
+     // ///////////// search for alice and bob
+        queryString = "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "SELECT ?person ?match " //
+                + "{" //
+                + "  ?person a <http://example.org/ontology/Person> . "//
+                + "  ?person <http://www.w3.org/2000/01/rdf-schema#label> 
?match . "//
+                + "  FILTER(fts:text(?match, \"(alice | bob) *SE\")) " //
+                + "  FILTER(fts:text(?match, \"pal*\")) " //
+                + "}";//
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+        
+        
+        // ///////////// search for bob
+        queryString = "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "SELECT ?person ?match ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "  ?person a <http://example.org/ontology/Person> . "//
+                + "  ?person <http://www.w3.org/2000/01/rdf-schema#label> 
?match . "//
+                + "  FILTER(fts:text(?match, \"!alice & hose\")) " //
+                + "}";//
+
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+    }
+
+
+
+    private static void 
testAddPointAndWithinSearchWithPCJ(SailRepositoryConnection conn) throws 
Exception {
+
+        String update = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  
"//
+                + "INSERT DATA { " //
+                + "  <urn:feature> a geo:Feature ; " //
+                + "    geo:hasGeometry [ " //
+                + "      a geo:Point ; " //
+                + "      geo:asWKT \"Point(-77.03524 
38.889468)\"^^geo:wktLiteral "//
+                + "    ] . " //
+                + "}";
+
+        Update u = conn.prepareUpdate(QueryLanguage.SPARQL, update);
+        u.execute();
+        
+        String queryString;
+        TupleQuery tupleQuery;
+        CountingResultHandler tupleHandler;
+        
+        // point outside search ring
+        queryString = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "SELECT ?feature ?point ?wkt " //
+                + "{" //
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-77 39, -76 39, -76 
38, -77 38, -77 39))\"^^geo:wktLiteral)) " //
+                + "}";//
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 0);
+        
+        // point inside search ring
+        queryString = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "SELECT ?feature ?point ?wkt ?e ?l ?o" //
+                + "{" //
+                + "  ?feature a ?e . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-78 39, -77 39, -77 
38, -78 38, -78 39))\"^^geo:wktLiteral)) " //
+                + "}";//
+         
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+        
+             
+        // point inside search ring with Pre-Computed Join
+        queryString = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "SELECT ?feature ?point ?wkt ?e ?l ?o" //
+                + "{" //
+                + "  ?feature a ?e . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-78 39, -77 39, -77 
38, -78 38, -78 39))\"^^geo:wktLiteral)) " //
+                + "}";//
+         
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() >= 1); // may see points from 
during previous runs
+
+        // point outside search ring with PCJ
+        queryString = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "SELECT ?feature ?point ?wkt ?e ?l ?o " //
+                + "{" //
+                + "  ?feature a ?e . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-77 39, -76 39, -76 
38, -77 38, -77 39))\"^^geo:wktLiteral)) " //
+                + "}";//
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 0);
+        
+        // point inside search ring with different Pre-Computed Join
+        queryString = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "SELECT ?feature ?point ?wkt ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-78 39, -77 39, -77 
38, -78 38, -78 39))\"^^geo:wktLiteral)) " //
+                + "}";//
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+    }
+    
+    
+    private static void testTemporalFreeGeoSearch(SailRepositoryConnection 
conn) throws MalformedQueryException, 
+    RepositoryException, UpdateExecutionException, 
TupleQueryResultHandlerException, QueryEvaluationException {
+        
+        
+        String queryString;
+        TupleQuery tupleQuery;
+        CountingResultHandler tupleHandler;
+
+        // ring containing point
+        queryString = "PREFIX geo: <http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "PREFIX time: <http://www.w3.org/2006/time#> "//
+                + "PREFIX tempo: <tag:rya-rdf.org,2015:temporal#> "//
+                + "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "SELECT ?feature ?point ?wkt ?event ?time ?person ?match" //
+                + "{" //
+                + "  ?event a  time:Instant . \n"//
+                + "  ?event time:inXSDDateTime ?time . \n"//
+                + "  FILTER(tempo:after(?time, '2001-01-01T01:01:03-08:00') ) 
\n"// after 3 seconds
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-78 39, -77 39, -77 
38, -78 38, -78 39))\"^^geo:wktLiteral)). " //
+                + "  ?person a <http://example.org/ontology/Person> . "//
+                + "  ?person <http://www.w3.org/2000/01/rdf-schema#label> 
?match . "//
+                + "  FILTER(fts:text(?match, \"pal*\")) " //
+                + "}";//
+        
+        
+        
+        tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
+
+        tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 5); 
+        
+    }
+    
+    
+    
+    private static void testGeoFreetextWithPCJSearch(SailRepositoryConnection 
conn) throws MalformedQueryException, 
+    RepositoryException, TupleQueryResultHandlerException, 
QueryEvaluationException {
+     // ring outside point
+        String queryString = "PREFIX geo: 
<http://www.opengis.net/ont/geosparql#>  "//
+                + "PREFIX fts: <http://rdf.useekm.com/fts#>  "//
+                + "PREFIX geof: 
<http://www.opengis.net/def/function/geosparql/>  "//
+                + "SELECT ?feature ?point ?wkt ?e ?c ?l ?o ?person ?match " //
+                + "{" //
+                + "  ?person a <http://example.org/ontology/Person> . "//
+                + "  ?person <http://www.w3.org/2000/01/rdf-schema#label> 
?match . "//
+                + "  FILTER(fts:text(?match, \"!alice & hose\")) " //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "  ?feature a geo:Feature . "//
+                + "  ?feature geo:hasGeometry ?point . "//
+                + "  ?point a geo:Point . "//
+                + "  ?point geo:asWKT ?wkt . "//
+                + "  FILTER(geof:sfWithin(?wkt, \"POLYGON((-78 39, -77 39, -77 
38, -78 38, -78 39))\"^^geo:wktLiteral)) " //
+                + "}";//
+        TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, 
queryString);
+        CountingResultHandler tupleHandler = new CountingResultHandler();
+        tupleQuery.evaluate(tupleHandler);
+        log.info("Result count : " + tupleHandler.getCount());
+        Validate.isTrue(tupleHandler.getCount() == 1);
+    }
+    
+    
+    
+    private static void createPCJ(SailRepositoryConnection conn) 
+            throws RepositoryException, AccumuloException, 
AccumuloSecurityException, TableExistsException {
+        
+        String queryString1 = ""//
+                + "SELECT ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?c a ?e . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "}";//
+        
+        String queryString2 = ""//
+                + "SELECT ?e ?c ?l ?o " //
+                + "{" //
+                + "  ?e a ?c . "//
+                + "  ?e <http://www.w3.org/2000/01/rdf-schema#label> ?l . "//
+                + "  ?e <uri:talksTo> ?o . "//
+                + "}";//
+        
+        
+        URI obj,subclass,talksTo;
+        URI person = new URIImpl("urn:people:alice");
+        URI feature = new URIImpl("urn:feature");
+        URI sub = new URIImpl("uri:entity");
+        subclass = new URIImpl("uri:class");
+        obj = new URIImpl("uri:obj");
+        talksTo = new URIImpl("uri:talksTo");
+
+        conn.add(person, RDF.TYPE, sub);
+        conn.add(feature, RDF.TYPE, sub);
+        conn.add(sub, RDF.TYPE, subclass);
+        conn.add(sub, RDFS.LABEL, new LiteralImpl("label"));
+        conn.add(sub, talksTo, obj);
+       
+        AccumuloIndexSet ais1 = null; 
+        AccumuloIndexSet ais2 = null; 
+        String tablename1 = RYA_TABLE_PREFIX + "INDEX_1";
+        String tablename2 = RYA_TABLE_PREFIX + "INDEX_2";
+
+        Connector accCon = new MockInstance(INSTANCE).getConnector("root", new 
PasswordToken("".getBytes()));
+        accCon.tableOperations().create(tablename1);
+        accCon.tableOperations().create(tablename2);
+        
+        try {
+            ais1 = new AccumuloIndexSet(queryString1, conn, accCon, 
tablename1);
+            ais2 = new AccumuloIndexSet(queryString2, conn, accCon, 
tablename2);
+        } catch (MalformedQueryException e) {
+            e.printStackTrace();
+        } catch (SailException e) {
+            e.printStackTrace();
+        } catch (QueryEvaluationException e) {
+            e.printStackTrace();
+        } catch (MutationsRejectedException e) {
+            e.printStackTrace();
+        } catch (TableNotFoundException e) {
+            e.printStackTrace();
+        }
+        
+    }
+    
+
+    private static class CountingResultHandler implements 
TupleQueryResultHandler {
+        private int count = 0;
+
+        public int getCount() {
+            return count;
+        }
+
+        public void resetCount() {
+            this.count = 0;
+        }
+
+        @Override
+        public void startQueryResult(List<String> arg0) throws 
TupleQueryResultHandlerException {
+        }
+
+        @Override
+        public void handleSolution(BindingSet arg0) throws 
TupleQueryResultHandlerException {
+            count++;
+            System.out.println(arg0);
+        }
+
+        @Override
+        public void endQueryResult() throws TupleQueryResultHandlerException {
+        }
+
+        @Override
+        public void handleBoolean(boolean arg0) throws 
QueryResultHandlerException {
+          // TODO Auto-generated method stub
+          
+        }
+
+        @Override
+        public void handleLinks(List<String> arg0) throws 
QueryResultHandlerException {
+          // TODO Auto-generated method stub
+          
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/indexingSailExample/src/main/scripts/RunRyaDirectExample.bat
----------------------------------------------------------------------
diff --git 
a/extras/indexingSailExample/src/main/scripts/RunRyaDirectExample.bat 
b/extras/indexingSailExample/src/main/scripts/RunRyaDirectExample.bat
new file mode 100644
index 0000000..3a75f71
--- /dev/null
+++ b/extras/indexingSailExample/src/main/scripts/RunRyaDirectExample.bat
@@ -0,0 +1,25 @@
+@echo off
+SET CP=
+
+REM Check to see if javac is on the path
+where /Q javac
+IF %ERRORLEVEL% NEQ 0 goto :NO_JAVAC
+
+
+for /f %%f in ('DIR /b .\lib\*.jar') do call :append .\lib\%%f
+
+javac -cp "%CP%" RyaDirectExample.java
+java -cp "%CP%" RyaDirectExample
+
+goto :end
+
+:append
+@echo off
+SET CP=%CP%%1;
+goto :end
+
+:NO_JAVAC
+echo ERROR: Could not find javac
+goto :end
+
+:end
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/pom.xml
----------------------------------------------------------------------
diff --git a/extras/pom.xml b/extras/pom.xml
new file mode 100644
index 0000000..eb7f652
--- /dev/null
+++ b/extras/pom.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>mvm.rya</groupId>
+        <artifactId>parent</artifactId>
+        <version>3.2.9</version>
+    </parent>
+    <artifactId>rya.extras</artifactId>
+    <packaging>pom</packaging>
+    <name>${project.groupId}.${project.artifactId}</name>
+    <modules>
+        <module>rya.prospector</module>
+        <module>rya.manual</module>
+        <module>tinkerpop.rya</module>
+    </modules>
+    <profiles>
+        <profile>
+            <id>indexing</id>
+            <modules>
+                <module>indexing</module>
+                <module>indexingSailExample</module>
+            </modules>
+        </profile>
+    </profiles>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/.gitignore
----------------------------------------------------------------------
diff --git a/extras/rya.console/.gitignore b/extras/rya.console/.gitignore
new file mode 100644
index 0000000..5d1172a
--- /dev/null
+++ b/extras/rya.console/.gitignore
@@ -0,0 +1,8 @@
+/.classpath
+/.project
+.settings/
+target/
+/log.roo
+*.log
+
+/bin/

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/pom.xml
----------------------------------------------------------------------
diff --git a/extras/rya.console/pom.xml b/extras/rya.console/pom.xml
new file mode 100644
index 0000000..adb4997
--- /dev/null
+++ b/extras/rya.console/pom.xml
@@ -0,0 +1,146 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>mvm.rya</groupId>
+        <artifactId>rya.extras</artifactId>
+        <version>3.2.5-SNAPSHOT</version>
+    </parent>
+    <artifactId>rya.console</artifactId>
+    <packaging>jar</packaging>
+
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <spring.shell.version>1.0.0.M1</spring.shell.version>
+        <jar.mainclass>org.springframework.shell.Bootstrap</jar.mainclass>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>mvm.rya</groupId>
+            <artifactId>rya.api</artifactId>
+        </dependency>
+          <dependency>
+            <groupId>mvm.rya</groupId>
+            <artifactId>accumulo.rya</artifactId>
+               <exclusions>
+                <exclusion>
+                    <groupId>jline</groupId>
+                    <artifactId>jline</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.shell</groupId>
+            <artifactId>spring-shell</artifactId>
+            <version>${spring.shell.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            
<outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <overWriteReleases>true</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <!--<useUniqueVersions>false</useUniqueVersions>-->
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <mainClass>${jar.mainclass}</mainClass>
+                        </manifest>
+                        <manifestEntries>
+                            <version>${project.version}</version>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+
+    </build>
+
+    <profiles>
+        <profile>
+            <id>accumulo</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.apache.accumulo</groupId>
+                    <artifactId>accumulo-core</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>mvm.rya</groupId>
+                    <artifactId>accumulo.iterators</artifactId>
+                </dependency>
+            </dependencies>
+        </profile>
+        <profile>
+            <id>cloudbase</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>com.texeltek</groupId>
+                    <artifactId>accumulo-cloudbase-shim</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>mvm.rya</groupId>
+                    <artifactId>cloudbase.iterators</artifactId>
+                </dependency>
+            </dependencies>
+        </profile>
+               
+    </profiles>
+
+    <repositories>
+        <!-- jline 1.0.S2-B is here 
http://shrub.appspot.com/spring-roo-repository.springsource.org/release/net/sourceforge/jline/jline/1.0.S2-B/
 -->
+        <repository>
+            <id>spring-roo-repository</id>
+            <name>Spring Roo Maven Repository</name>
+            <url>http://spring-roo-repository.springsource.org/release</url>
+        </repository>
+
+        <repository>
+            <id>spring-maven-snapshot</id>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+            <name>Springframework Maven SNAPSHOT Repository</name>
+            <url>http://repo.springsource.org/libs-snapshot</url>
+        </repository>
+    </repositories>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/src/main/java/mvm/rya/console/RyaBannerProvider.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.console/src/main/java/mvm/rya/console/RyaBannerProvider.java 
b/extras/rya.console/src/main/java/mvm/rya/console/RyaBannerProvider.java
new file mode 100644
index 0000000..23c028c
--- /dev/null
+++ b/extras/rya.console/src/main/java/mvm/rya/console/RyaBannerProvider.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2011-2012 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package mvm.rya.console;
+
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.shell.support.util.StringUtils;
+import org.springframework.shell.core.CommandMarker;
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.plugin.support.DefaultBannerProvider;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Jarred Li
+ */
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class RyaBannerProvider extends DefaultBannerProvider
+        implements CommandMarker {
+
+    @CliCommand(value = {"version"}, help = "Displays current CLI version")
+    public String getBanner() {
+        StringBuffer buf = new StringBuffer();
+        buf.append("" +
+                "________                    _________                         
______     \n" +
+                "___  __ \\____  _______ _    __  
____/____________________________  /____ \n" +
+                "__  /_/ /_  / / /  __ `/    _  /    _  __ \\_  __ \\_  ___/  
__ \\_  /_  _ \\\n" +
+                "_  _, _/_  /_/ // /_/ /     / /___  / /_/ /  / / /(__  )/ /_/ 
/  / /  __/\n" +
+                "/_/ |_| _\\__, / \\__,_/      \\____/  \\____//_/ /_//____/ 
\\____//_/  \\___/ \n" +
+                "        /____/ " + StringUtils.LINE_SEPARATOR);
+        buf.append("Version:" + this.getVersion());
+        return buf.toString();
+
+    }
+
+    public String getVersion() {
+        return "3.0.0";
+    }
+
+    public String getWelcomeMessage() {
+        return "Welcome to the Rya Console";
+    }
+
+    @Override
+    public String name() {
+        return "rya";
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/src/main/java/mvm/rya/console/RyaConsoleCommands.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.console/src/main/java/mvm/rya/console/RyaConsoleCommands.java 
b/extras/rya.console/src/main/java/mvm/rya/console/RyaConsoleCommands.java
new file mode 100644
index 0000000..2882b21
--- /dev/null
+++ b/extras/rya.console/src/main/java/mvm/rya/console/RyaConsoleCommands.java
@@ -0,0 +1,211 @@
+package mvm.rya.console;
+
+
+import info.aduna.iteration.CloseableIteration;
+
+import java.io.FileInputStream;
+import java.io.StringReader;
+import java.util.Formatter;
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import mvm.rya.accumulo.AccumuloRdfConfiguration;
+import mvm.rya.accumulo.AccumuloRyaDAO;
+import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.domain.RyaURI;
+import mvm.rya.api.persist.RyaDAO;
+import mvm.rya.api.persist.RyaDAOException;
+import mvm.rya.api.persist.query.RyaQueryEngine;
+import mvm.rya.api.resolver.RdfToRyaConversions;
+import mvm.rya.api.resolver.RyaContext;
+
+import org.apache.accumulo.core.client.Connector;
+import org.apache.accumulo.core.client.ZooKeeperInstance;
+import org.apache.accumulo.core.client.mock.MockInstance;
+import org.openrdf.model.Statement;
+import org.openrdf.rio.RDFHandler;
+import org.openrdf.rio.RDFHandlerException;
+import org.openrdf.rio.RDFParser;
+import org.openrdf.rio.ntriples.NTriplesParserFactory;
+import org.springframework.shell.core.CommandMarker;
+import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
+import org.springframework.shell.core.annotation.CliCommand;
+import org.springframework.shell.core.annotation.CliOption;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RyaConsoleCommands implements CommandMarker {
+
+    private static final NTriplesParserFactory N_TRIPLES_PARSER_FACTORY = new 
NTriplesParserFactory();
+
+    protected final Logger LOG = Logger.getLogger(getClass().getName());
+
+    private RyaContext ryaContext = RyaContext.getInstance();
+    private RyaDAO ryaDAO;
+    private RDFParser ntrips_parser = null;
+
+    public RyaConsoleCommands() {
+        ntrips_parser = N_TRIPLES_PARSER_FACTORY.getParser();
+        ntrips_parser.setRDFHandler(new RDFHandler() {
+
+            public void startRDF() throws RDFHandlerException {
+
+            }
+
+            public void endRDF() throws RDFHandlerException {
+
+            }
+
+            public void handleNamespace(String s, String s1) throws 
RDFHandlerException {
+
+            }
+
+            public void handleStatement(Statement statement) throws 
RDFHandlerException {
+                try {
+                    RyaStatement ryaStatement = 
RdfToRyaConversions.convertStatement(statement);
+                    ryaDAO.add(ryaStatement);
+                } catch (Exception e) {
+                    throw new RDFHandlerException(e);
+                }
+            }
+
+            public void handleComment(String s) throws RDFHandlerException {
+
+            }
+        });
+    }
+
+    /**
+     * commands:
+     * 1. connect(instance, user, password, zk)
+     * 1.a. disconnect
+     * 2. query
+     * 3. add
+     */
+
+    @CliAvailabilityIndicator({"connect"})
+    public boolean isConnectAvailable() {
+        return true;
+    }
+
+    @CliAvailabilityIndicator({"qt", "add", "load", "disconnect"})
+    public boolean isCommandAvailable() {
+        return ryaDAO != null;
+    }
+
+    @CliCommand(value = "qt", help = "Query with Triple Pattern")
+    public String queryTriple(
+            @CliOption(key = {"subject"}, mandatory = false, help = "Subject") 
final String subject,
+            @CliOption(key = {"predicate"}, mandatory = false, help = 
"Predicate") final String predicate,
+            @CliOption(key = {"object"}, mandatory = false, help = "Object") 
final String object,
+            @CliOption(key = {"context"}, mandatory = false, help = "Context") 
final String context,
+            @CliOption(key = {"maxResults"}, mandatory = false, help = 
"Maximum Number of Results", unspecifiedDefaultValue = "100") final String 
maxResults
+    ) {
+        try {
+            RdfCloudTripleStoreConfiguration conf = ryaDAO.getConf().clone();
+            if (maxResults != null) {
+                conf.setLimit(Long.parseLong(maxResults));
+            }
+            RyaQueryEngine queryEngine = ryaDAO.getQueryEngine();
+            CloseableIteration<RyaStatement, RyaDAOException> query =
+                    queryEngine.query(new RyaStatement(
+                            (subject != null) ? (new RyaURI(subject)) : null,
+                            (predicate != null) ? (new RyaURI(predicate)) : 
null,
+                            (object != null) ? (new RyaURI(object)) : null,
+                            (context != null) ? (new RyaURI(context)) : null), 
conf);
+            StringBuilder sb = new StringBuilder();
+            Formatter formatter = new Formatter(sb, Locale.US);
+            String format = "%-40s %-40s %-40s %-40s\n";
+            formatter.format(format, "Subject", "Predicate",
+                    "Object", "Context");
+            while (query.hasNext()) {
+                RyaStatement next = query.next();
+                formatter.format(format, next.getSubject().getData(), 
next.getPredicate().getData(),
+                        next.getObject().getData(), (next.getContext() != 
null) ? (next.getContext().getData()) : (null));
+                sb.append("\n");
+            }
+            return sb.toString();
+        } catch (Exception e) {
+            LOG.log(Level.SEVERE, "", e);
+        }
+        return "";
+    }
+
+    @CliCommand(value = "load", help = "Load file")
+    public void load(
+            @CliOption(key = {"", "file"}, mandatory = true, help = "File of 
ntriples rdf to load") final String file
+    ) {
+        //diff formats?
+        //diff types of urls
+        try {
+            ntrips_parser.parse(new FileInputStream(file), "");
+        } catch (Exception e) {
+            LOG.log(Level.SEVERE, "", e);
+        }
+    }
+
+    @CliCommand(value = "add", help = "Add Statement")
+    public void add(
+            @CliOption(key = {"", "statement"}, mandatory = true, help = 
"Statement in NTriples format") final String statement) {
+        try {
+            ntrips_parser.parse(new StringReader(statement), "");
+        } catch (Exception e) {
+            LOG.log(Level.SEVERE, "", e);
+        }
+    }
+
+    @CliCommand(value = "connect", help = "Connect to Rya Triple Store")
+    public String connect(
+            @CliOption(key = {"instance"}, mandatory = true, help = "Accumulo 
Instance") final String instance,
+            @CliOption(key = {"user"}, mandatory = true, help = "Accumulo 
User") final String user,
+            @CliOption(key = {"pwd"}, mandatory = true, help = "Accumulo Pwd") 
final String pwd,
+            @CliOption(key = {"zk"}, mandatory = true, help = "Accumulo Zk 
(zk=mock for the mock instance)") final String zk,
+            @CliOption(key = {"pre"}, mandatory = false, help = "Accumulo 
table prefix", unspecifiedDefaultValue = "rya_") final String pre) {
+        try {
+            //using Cloudbase
+            Connector connector = null;
+            AccumuloRyaDAO cryaDao = new AccumuloRyaDAO();
+            if ("mock".equals(zk)) {
+                //mock instance
+                connector = new MockInstance(instance).getConnector(user, pwd);
+            } else {
+                connector = new ZooKeeperInstance(instance, 
zk).getConnector(user, pwd);
+            }
+
+            cryaDao.setConnector(connector);
+            AccumuloRdfConfiguration configuration = new 
AccumuloRdfConfiguration();
+            configuration.setTablePrefix(pre);
+            cryaDao.setConf(configuration);
+            cryaDao.init();
+            this.ryaDAO = cryaDao;
+            return "Connected to Accumulo";
+        } catch (Exception e) {
+            LOG.log(Level.SEVERE, "", e);
+        }
+        return "";
+    }
+
+    @CliCommand(value = "disconnect", help = "Disconnect from Rya Store")
+    public String disconnect() {
+        if (ryaDAO == null) {
+            return "Command is not available because Rya is not connected. 
Please 'connect' first.";
+        }
+        try {
+            this.ryaDAO.destroy();
+            this.ryaDAO = null;
+        } catch (RyaDAOException e) {
+            LOG.log(Level.SEVERE, "", e);
+        }
+        return "";
+    }
+
+    public RyaDAO getRyaDAO() {
+        return ryaDAO;
+    }
+
+    public void setRyaDAO(RyaDAO ryaDAO) {
+        this.ryaDAO = ryaDAO;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/src/main/java/mvm/rya/console/RyaHistoryFileNameProvider.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.console/src/main/java/mvm/rya/console/RyaHistoryFileNameProvider.java
 
b/extras/rya.console/src/main/java/mvm/rya/console/RyaHistoryFileNameProvider.java
new file mode 100644
index 0000000..e09bda6
--- /dev/null
+++ 
b/extras/rya.console/src/main/java/mvm/rya/console/RyaHistoryFileNameProvider.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2011-2012 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package mvm.rya.console;
+
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.shell.plugin.support.DefaultHistoryFileNameProvider;
+import org.springframework.stereotype.Component;
+
+/**
+ * 
+ * @author Jarred Li
+ *
+ */
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class RyaHistoryFileNameProvider extends DefaultHistoryFileNameProvider{
+
+       public String getHistoryFileName() {
+               return "ryaconsole.log";
+       }
+
+       @Override
+       public String name() {
+               return "Rya Console History Log";
+       }
+       
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/src/main/java/mvm/rya/console/RyaPromptProvider.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.console/src/main/java/mvm/rya/console/RyaPromptProvider.java 
b/extras/rya.console/src/main/java/mvm/rya/console/RyaPromptProvider.java
new file mode 100644
index 0000000..90c9199
--- /dev/null
+++ b/extras/rya.console/src/main/java/mvm/rya/console/RyaPromptProvider.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2011-2012 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package mvm.rya.console;
+
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.shell.plugin.support.DefaultPromptProvider;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author Jarred Li
+ *
+ */
+@Component
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class RyaPromptProvider extends DefaultPromptProvider {
+
+       @Override
+       public String getPrompt() {
+               return "rya>";
+       }
+
+       
+       @Override
+       public String name() {
+               return "Rya Console Prompt";
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.console/src/main/resources/META-INF/spring/spring-shell-plugin.xml
----------------------------------------------------------------------
diff --git 
a/extras/rya.console/src/main/resources/META-INF/spring/spring-shell-plugin.xml 
b/extras/rya.console/src/main/resources/META-INF/spring/spring-shell-plugin.xml
new file mode 100644
index 0000000..d21543d
--- /dev/null
+++ 
b/extras/rya.console/src/main/resources/META-INF/spring/spring-shell-plugin.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:context="http://www.springframework.org/schema/context";
+       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+               http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.1.xsd";>
+
+       <context:component-scan base-package="mvm.rya.console" />
+
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/pom.xml
----------------------------------------------------------------------
diff --git a/extras/rya.geo/pom.xml b/extras/rya.geo/pom.xml
new file mode 100644
index 0000000..8b36e7d
--- /dev/null
+++ b/extras/rya.geo/pom.xml
@@ -0,0 +1,25 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>mvm.rya</groupId>
+               <artifactId>rya.extras</artifactId>
+               <version>3.2.5-SNAPSHOT</version>
+       </parent>
+
+       <artifactId>rya.geo</artifactId>
+       
+       <dependencies>
+               <dependency>
+                       <groupId>mvm.rya</groupId>
+                       <artifactId>rya.api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.openrdf.sesame</groupId>
+                       <artifactId>sesame-queryalgebra-evaluation</artifactId>
+                       <version>${openrdf.sesame.version}</version>
+               </dependency>
+       </dependencies>
+       
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/java/mvm/rya/geo/GeoDistance.java
----------------------------------------------------------------------
diff --git a/extras/rya.geo/src/main/java/mvm/rya/geo/GeoDistance.java 
b/extras/rya.geo/src/main/java/mvm/rya/geo/GeoDistance.java
new file mode 100644
index 0000000..277d7f6
--- /dev/null
+++ b/extras/rya.geo/src/main/java/mvm/rya/geo/GeoDistance.java
@@ -0,0 +1,34 @@
+package mvm.rya.geo;
+
+/**
+ * Distance functions for geographic points
+ */
+public class GeoDistance
+{
+       private static final double EARTH_RADIUS_KM = 6366.0;
+       private static final double DEG2RAD = Math.PI / 180;
+
+       /**
+        * Calculates distance between two geographic points in km
+        * 
+        * @param lat1
+        * @param lon1
+        * @param lat2
+        * @param lon2
+        * @return distance in kilometers
+        */
+       public static double calculate(double lat1, double lon1, double lat2, 
double lon2)
+       {
+               double a1 = lat1 * DEG2RAD;
+               double a2 = lon1 * DEG2RAD;
+               double b1 = lat2 * DEG2RAD;
+               double b2 = lon2 * DEG2RAD;
+
+               double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * 
Math.cos(b2);
+               double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * 
Math.sin(b2);
+               double t3 = Math.sin(a1) * Math.sin(b1);
+               double tt = Math.acos(t1 + t2 + t3);
+
+               return EARTH_RADIUS_KM * tt;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/java/mvm/rya/geo/GeoRyaTypeResolver.java
----------------------------------------------------------------------
diff --git a/extras/rya.geo/src/main/java/mvm/rya/geo/GeoRyaTypeResolver.java 
b/extras/rya.geo/src/main/java/mvm/rya/geo/GeoRyaTypeResolver.java
new file mode 100644
index 0000000..1d31c0b
--- /dev/null
+++ b/extras/rya.geo/src/main/java/mvm/rya/geo/GeoRyaTypeResolver.java
@@ -0,0 +1,16 @@
+package mvm.rya.geo;
+
+import mvm.rya.api.resolver.impl.RyaTypeResolverImpl;
+
+/**
+ * Type resolver for rya geo location type
+ */
+public class GeoRyaTypeResolver extends RyaTypeResolverImpl
+{
+       public static final int GEO_LITERAL_MARKER = 11;
+
+       public GeoRyaTypeResolver()
+       {
+               super((byte) GEO_LITERAL_MARKER, RyaGeoSchema.GEOPOINT);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/java/mvm/rya/geo/RyaGeoSchema.java
----------------------------------------------------------------------
diff --git a/extras/rya.geo/src/main/java/mvm/rya/geo/RyaGeoSchema.java 
b/extras/rya.geo/src/main/java/mvm/rya/geo/RyaGeoSchema.java
new file mode 100644
index 0000000..06befc2
--- /dev/null
+++ b/extras/rya.geo/src/main/java/mvm/rya/geo/RyaGeoSchema.java
@@ -0,0 +1,16 @@
+package mvm.rya.geo;
+
+import org.openrdf.model.URI;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+
+/**
+ * Rya GEO RDF Constants
+ */
+public class RyaGeoSchema
+{
+       private static final ValueFactory VF = ValueFactoryImpl.getInstance();
+
+       public static final URI NAMESPACE = VF.createURI("urn:mvm.rya/geo#");
+       public static final URI GEOPOINT = VF.createURI(NAMESPACE.toString(), 
"geopoint");
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/java/mvm/rya/geo/Verify.java
----------------------------------------------------------------------
diff --git a/extras/rya.geo/src/main/java/mvm/rya/geo/Verify.java 
b/extras/rya.geo/src/main/java/mvm/rya/geo/Verify.java
new file mode 100644
index 0000000..752793e
--- /dev/null
+++ b/extras/rya.geo/src/main/java/mvm/rya/geo/Verify.java
@@ -0,0 +1,68 @@
+package mvm.rya.geo;
+
+import org.openrdf.model.Literal;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.query.algebra.evaluation.ValueExprEvaluationException;
+
+/**
+ * Utility for verifying function arguments
+ */
+public class Verify
+{
+       private final Value[] args;
+
+       /**
+        * Entry point for creating a Verify
+        * 
+        * @param args
+        * @return verify
+        */
+       public static Verify that(Value... args)
+       {
+               return new Verify(args);
+       }
+
+       private Verify(Value... args)
+       {
+               this.args = args;
+       }
+
+       /**
+        * verifies the number of arguments
+        * 
+        * @param numArgs
+        * @throws ValueExprEvaluationException
+        */
+       public void hasLength(int numArgs) throws ValueExprEvaluationException
+       {
+               if (args.length != numArgs)
+               {
+                       throw new ValueExprEvaluationException("expected " + 
numArgs + " but received " + args.length);
+               }
+       }
+
+       /**
+        * verifies the arguments are of the specified type
+        * 
+        * @param type
+        * @throws ValueExprEvaluationException
+        */
+       public void isLiteralOfType(URI type) throws 
ValueExprEvaluationException
+       {
+               for (Value arg : args)
+               {
+                       if (!(arg instanceof Literal))
+                       {
+                               throw new ValueExprEvaluationException(arg + " 
is not a literal");
+                       }
+
+                       Literal l = (Literal) arg;
+
+                       if (!type.equals(l.getDatatype()))
+                       {
+                               throw new 
ValueExprEvaluationException("expected type " + type + " but received " + 
l.getDatatype());
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/java/mvm/rya/geo/WithinRange.java
----------------------------------------------------------------------
diff --git a/extras/rya.geo/src/main/java/mvm/rya/geo/WithinRange.java 
b/extras/rya.geo/src/main/java/mvm/rya/geo/WithinRange.java
new file mode 100644
index 0000000..55bce4a
--- /dev/null
+++ b/extras/rya.geo/src/main/java/mvm/rya/geo/WithinRange.java
@@ -0,0 +1,69 @@
+package mvm.rya.geo;
+
+import java.util.Arrays;
+
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.query.algebra.evaluation.ValueExprEvaluationException;
+import org.openrdf.query.algebra.evaluation.function.Function;
+
+/**
+ * Custom function for check a lat/lon is ithin a certain range of another
+ * 
+ * Example SPARQL Usage:
+ * 
+ * <pre>
+ * # Give me all cities that are within 50 km of lat/lon 20.00,-30.00
+ * 
+ * PREFIX geo: <urn:mvm.rya/geo#>
+ * SELECT ?city
+ * WHERE 
+ * {
+ *   ?city geo:locatedAt ?latLon .
+ *   FILTER( geo:withinRange(?latLon, "20.00,-30.00"^^geo:geopoint, 50 )
+ * }
+ * </pre>
+ */
+public class WithinRange implements Function
+{
+       private static final String FUN_NAME = "withinRange";
+
+       @Override
+       public Value evaluate(ValueFactory vf, Value... args) throws 
ValueExprEvaluationException
+       {
+               System.out.println("running with args: " + 
Arrays.toString(args));
+
+               Verify.that(args).hasLength(3);
+               Verify.that(args[0], 
args[1]).isLiteralOfType(RyaGeoSchema.GEOPOINT);
+
+               GeoPoint testPt = new GeoPoint(args[0]);
+               GeoPoint targetPt = new GeoPoint(args[1]);
+               double radius = Double.parseDouble(args[2].stringValue());
+
+               double dist = GeoDistance.calculate(testPt.lat, testPt.lon, 
targetPt.lat, targetPt.lon);
+
+               System.out.println("distance from (" + testPt.lat + "," + 
testPt.lon + ") to (" + targetPt.lat + "," + targetPt.lon
+                               + ") is " + dist);
+
+               return vf.createLiteral(dist <= radius);
+       }
+
+       @Override
+       public String getURI()
+       {
+               return RyaGeoSchema.NAMESPACE.toString() + FUN_NAME;
+       }
+
+       private class GeoPoint
+       {
+               public double lat;
+               public double lon;
+
+               public GeoPoint(Value val)
+               {
+                       String[] tokens = val.stringValue().split(",");
+                       lat = Double.parseDouble(tokens[0]);
+                       lon = Double.parseDouble(tokens[1]);
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/resources/META-INF/services/mvm.rya.api.resolver.RyaTypeResolver
----------------------------------------------------------------------
diff --git 
a/extras/rya.geo/src/main/resources/META-INF/services/mvm.rya.api.resolver.RyaTypeResolver
 
b/extras/rya.geo/src/main/resources/META-INF/services/mvm.rya.api.resolver.RyaTypeResolver
new file mode 100644
index 0000000..028b525
--- /dev/null
+++ 
b/extras/rya.geo/src/main/resources/META-INF/services/mvm.rya.api.resolver.RyaTypeResolver
@@ -0,0 +1 @@
+mvm.rya.geo.GeoRyaTypeResolver
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/main/resources/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function
----------------------------------------------------------------------
diff --git 
a/extras/rya.geo/src/main/resources/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function
 
b/extras/rya.geo/src/main/resources/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function
new file mode 100644
index 0000000..5f853fe
--- /dev/null
+++ 
b/extras/rya.geo/src/main/resources/META-INF/services/org.openrdf.query.algebra.evaluation.function.Function
@@ -0,0 +1 @@
+mvm.rya.geo.WithinRange
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/test/java/mvm/rya/geo/GeoRyaTypeResolverTest.java
----------------------------------------------------------------------
diff --git 
a/extras/rya.geo/src/test/java/mvm/rya/geo/GeoRyaTypeResolverTest.java 
b/extras/rya.geo/src/test/java/mvm/rya/geo/GeoRyaTypeResolverTest.java
new file mode 100644
index 0000000..c3284c7
--- /dev/null
+++ b/extras/rya.geo/src/test/java/mvm/rya/geo/GeoRyaTypeResolverTest.java
@@ -0,0 +1,25 @@
+package mvm.rya.geo;
+
+import mvm.rya.api.domain.RyaType;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class GeoRyaTypeResolverTest
+{
+       private final GeoRyaTypeResolver resolver = new GeoRyaTypeResolver();
+
+       @Test
+       public void testSerialization_andBack() throws Exception
+       {
+               String latLon = "20.00,30.00";
+               RyaType orig = new RyaType(RyaGeoSchema.GEOPOINT, latLon);
+
+               byte[] bytes = resolver.serialize(orig);
+               RyaType copy = resolver.deserialize(bytes);
+
+               Assert.assertEquals(latLon, copy.getData());
+               Assert.assertEquals(orig, copy);
+               Assert.assertEquals(RyaGeoSchema.GEOPOINT, copy.getDataType());
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.geo/src/test/java/mvm/rya/geo/WithinRangeTest.java
----------------------------------------------------------------------
diff --git a/extras/rya.geo/src/test/java/mvm/rya/geo/WithinRangeTest.java 
b/extras/rya.geo/src/test/java/mvm/rya/geo/WithinRangeTest.java
new file mode 100644
index 0000000..2e1c2a7
--- /dev/null
+++ b/extras/rya.geo/src/test/java/mvm/rya/geo/WithinRangeTest.java
@@ -0,0 +1,43 @@
+package mvm.rya.geo;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.ValueFactoryImpl;
+import org.openrdf.query.algebra.evaluation.ValueExprEvaluationException;
+
+public class WithinRangeTest
+{
+       private static final double MI2KM = 1.60934;
+
+       private static final ValueFactory VF = ValueFactoryImpl.getInstance();
+       private static final Value TRUE = VF.createLiteral(true);
+       private static final Value FALSE = VF.createLiteral(false);
+
+       // Distance between Washington, DC and Atlanta is roughly 600 miles
+       private static final Value WASHINGTON_DC = 
VF.createLiteral("40.15999984741211,-80.25", RyaGeoSchema.GEOPOINT);
+       private static final Value ATLANTA = VF.createLiteral("33.75,-84.383", 
RyaGeoSchema.GEOPOINT);
+
+       private WithinRange fun = new WithinRange();
+
+       @Test
+       public void testWithinRange() throws ValueExprEvaluationException
+       {
+               double miles = 900;
+               Value distance = VF.createLiteral(miles * MI2KM);
+
+               Assert.assertEquals(TRUE, fun.evaluate(VF, ATLANTA, 
WASHINGTON_DC, distance));
+               Assert.assertEquals(TRUE, fun.evaluate(VF, WASHINGTON_DC, 
WASHINGTON_DC, distance));
+       }
+
+       @Test
+       public void testWithinRange_notWithinRange() throws 
ValueExprEvaluationException
+       {
+               double miles = 200;
+               Value distance = VF.createLiteral(miles * MI2KM);
+
+               Assert.assertEquals(FALSE, fun.evaluate(VF, ATLANTA, 
WASHINGTON_DC, distance));
+               Assert.assertEquals(TRUE, fun.evaluate(VF, WASHINGTON_DC, 
WASHINGTON_DC, distance));
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.manual/pom.xml
----------------------------------------------------------------------
diff --git a/extras/rya.manual/pom.xml b/extras/rya.manual/pom.xml
new file mode 100644
index 0000000..1a6307b
--- /dev/null
+++ b/extras/rya.manual/pom.xml
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>mvm.rya</groupId>
+        <artifactId>rya.extras</artifactId>
+        <version>3.2.9</version>
+    </parent>
+
+    <artifactId>rya.manual</artifactId>
+    <name>RYA Manual</name>
+    <packaging>war</packaging>
+
+    <properties>
+        <must-succeed>false</must-succeed>
+        
<manual.dir>${project.build.directory}/${project.artifactId}</manual.dir>
+        <manual>${manual.dir}/${project.artifactId}-${project.version}</manual>
+        <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
+        <jetty-port>8080</jetty-port>
+        <jetty-war-dir>${project.build.directory}/webapp/</jetty-war-dir>
+        <scalate.version>1.7.1</scalate.version>
+        <scala.version>2.11.1</scala.version>
+        <wikitext.version>1.3</wikitext.version>
+        <scalate.editor>${env.SCALATE_EDITOR}</scalate.editor>
+        <scalate.mode>production</scalate.mode>
+        
<scalate.workdir>${project.build.directory}/scalateWorkDir</scalate.workdir>
+        <maven.wagon.version>1.0-beta-6</maven.wagon.version>
+        
<remoteTomcatManager>http://10.40.190.248:8080/manager</remoteTomcatManager>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.scalatra.scalate</groupId>
+            <artifactId>scalate-wikitext_2.11</artifactId>
+            <version>${scalate.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>0.9.24</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.scala-lang</groupId>
+            <artifactId>scala-library</artifactId>
+            <version>${scala.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.scala-lang</groupId>
+            <artifactId>scala-compiler</artifactId>
+            <version>${scala.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>filter</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            
<outputDirectory>${project.build.directory}/webapp</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/webapp</directory>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>1.7</version>
+                <executions>
+                    <execution>
+                        <id>add-source</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                
<source>${project.build.directory}/webapp</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                    <!--execution>
+                        <id>attach-artifacts</id>
+                        <phase>install</phase>
+                        <goals>
+                            <goal>attach-artifact</goal>
+                        </goals>
+                        <configuration>
+                            <artifacts>
+                                <artifact>
+                                    <file>${manual}.html</file>
+                                    <type>html</type>
+                                </artifact>
+                            </artifacts>
+                        </configuration>
+                    </execution-->
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.scalatra.scalate</groupId>
+                <artifactId>maven-scalate-plugin_2.11</artifactId>
+                <version>${scalate.version}</version>
+                <executions>
+                    <execution>
+                        <id>generate-htmls</id>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>sitegen</goal>
+                        </goals>
+                        <configuration>
+                            
<webappDirectory>${project.build.directory}/webapp</webappDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+                <configuration>
+                    <target>${basedir}/src/main/webapp</target>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.maven.wagon</groupId>
+                        <artifactId>wagon-ssh</artifactId>
+                        <version>${maven.wagon.version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.fusesource.wikitext</groupId>
+                        <artifactId>confluence-core</artifactId>
+                        <version>${wikitext.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                    <webResources>
+                        <resource>
+                            
<directory>${project.build.directory}/webapp/</directory>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>tomcat-maven-plugin</artifactId>
+                <version>1.1</version>
+                <configuration>
+                    <url>${remoteTomcatManager}</url>
+                </configuration>
+                <!--executions>
+                    <execution>
+                        <id>redeploy-war</id>
+                        <phase>deploy</phase>
+                        <goals>
+                            <goal>redeploy</goal>
+                        </goals>
+                    </execution>
+                </executions-->
+            </plugin>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>7.1.5.v20100705</version>
+                <configuration>
+                    <!--webAppConfig>
+                        <contextPath>${project.artifactId}</contextPath>
+                    </webAppConfig-->
+                    <!-- When editing the conf files, you can comment this 
line to run
+                        mvn jetty:run
+                       to have a live web site
+                    -->
+                    
<webAppSourceDirectory>${jetty-war-dir}</webAppSourceDirectory>
+
+                    <systemProperties>
+                        <systemProperty>
+                            <name>scalate.editor</name>
+                            <value>${scalate.editor}</value>
+                        </systemProperty>
+                        <systemProperty>
+                            <name>scalate.workdir</name>
+                            <value>${scalate.workdir}</value>
+                        </systemProperty>
+                        <systemProperty>
+                            <name>scalate.mode</name>
+                            <value>${scalate.mode}</value>
+                        </systemProperty>
+                    </systemProperties>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.scalatra.scalate</groupId>
+                <artifactId>maven-scalate-plugin</artifactId>
+                <version>${scalate.version}</version>
+            </plugin>
+        </plugins>
+    </reporting>
+
+    <profiles>
+        <profile>
+            <id>live</id>
+            <properties>
+                <jetty-war-dir>${basedir}/src/main/webapp/</jetty-war-dir>
+                <scalate.mode>development</scalate.mode>
+            </properties>
+        </profile>
+        <profile>
+            <id>pdf-manual</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>attach-manual</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <tasks>
+                                        <mkdir dir="${manual.dir}" />
+                                        <move 
file="${project.build.directory}/sitegen/manual.html" tofile="${manual}.html" />
+                                        <echo message="Generating PDF using 
Prince XML (http://www.princexml.com/)" />
+                                        <exec executable="prince">
+                                            <arg value="${manual}.html" />
+                                            <arg value="${manual}.pdf" />
+                                            <arg value="--log" />
+                                            <arg 
value="${project.build.directory}/prince.log" />
+                                        </exec>
+                                    </tasks>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>build-helper-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>attach-artifacts</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>attach-artifact</goal>
+                                </goals>
+                                <configuration>
+                                    <artifacts>
+                                        <artifact>
+                                            <file>${manual}.pdf</file>
+                                            <type>pdf</type>
+                                        </artifact>
+                                    </artifacts>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>release</id>
+            <properties>
+                <must-succeed>true</must-succeed>
+            </properties>
+        </profile>
+    </profiles>
+
+</project>
+

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.manual/src/main/java/temp/TempJ.java
----------------------------------------------------------------------
diff --git a/extras/rya.manual/src/main/java/temp/TempJ.java 
b/extras/rya.manual/src/main/java/temp/TempJ.java
new file mode 100644
index 0000000..be473e4
--- /dev/null
+++ b/extras/rya.manual/src/main/java/temp/TempJ.java
@@ -0,0 +1,29 @@
+package temp;
+
+/*
+ * #%L
+ * RYA Manual
+ * %%
+ * Copyright (C) 2014 Rya
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+/**
+* Marker class so that target/classes directory gets generated
+* and the bundle plugin does not fail
+*/
+public class TempJ {
+       
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.manual/src/main/webapp/.livereload
----------------------------------------------------------------------
diff --git a/extras/rya.manual/src/main/webapp/.livereload 
b/extras/rya.manual/src/main/webapp/.livereload
new file mode 100644
index 0000000..b185045
--- /dev/null
+++ b/extras/rya.manual/src/main/webapp/.livereload
@@ -0,0 +1,19 @@
+# Lines starting with pound sign (#) are ignored.
+
+# additional extensions to monitor
+#config.exts << 'haml'
+
+# exclude files with NAMES matching this mask
+#config.exclusions << '~*'
+# exclude files with PATHS matching this mask (if the mask contains a slash)
+#config.exclusions << '/excluded_dir/*'
+# exclude files with PATHS matching this REGEXP
+#config.exclusions << /somedir.*(ab){2,4}.(css|js)$/
+
+# reload the whole page when .js changes
+#config.apply_js_live = false
+# reload the whole page when .css changes
+#config.apply_css_live = false
+
+# wait 100ms for more changes before reloading a page
+#config.grace_period = 0.1

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/92ddfa59/extras/rya.manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
----------------------------------------------------------------------
diff --git 
a/extras/rya.manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml 
b/extras/rya.manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
new file mode 100644
index 0000000..8b27470
--- /dev/null
+++ b/extras/rya.manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
@@ -0,0 +1,97 @@
+
+-@ var body: String
+-@ var title : String = "Rya Manual"
+- response.setContentType("text/html")
+
+-# Only include the console if it's available and the engine is in dev mode.
+- val include_console = engine.isDevelopmentMode && 
engine.resourceLoader.exists("/org/fusesource/scalate/console/console_head.scaml")
+
+!!! Basic
+%html(lang="en")
+  %head
+    %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
+    %meta(name="description" content="description goes here")
+    %meta(name="keywords" content="keywords,goes,here")
+    %meta(name="author" content="The Team")
+
+    - if (include_console)
+      = include("/org/fusesource/scalate/console/console_head.scaml")
+
+    %link(href={uri("/css/style.css")} rel="stylesheet" type="text/css")
+    %link(href={uri("/css/pygmentize.css")} rel="stylesheet" type="text/css")
+
+    - if (include_console)
+      %link(href={uri("/css/scalate/console.css")} rel="stylesheet" 
type="text/css")
+
+    %title
+      = title
+  
+  %body
+    %table{:width => "100%", :cellpadding => "0", :cellspacing => "0"}
+      %tr{:width => "100%"}
+        %td#cell-0-0{:colspan => "2"}
+          &nbsp;
+        %td#cell-0-1
+          &nbsp;
+        %td#cell-0-2{:colspan => "2"}
+          &nbsp;
+      %tr{:width => "100%"}
+        %td#cell-1-0
+          &nbsp;
+        %td#cell-1-1
+          &nbsp;
+        %td#cell-1-2
+          %div{:style => "padding: 5px;"}
+            #banner
+              = include("/_banner.ssp")
+            #top-menu
+              %table{:border => "0", :cellpadding => "1", :cellspacing => "0", 
:width => "100%"}
+                %tr
+                  %td
+                    %div{:align => "left"}
+                  %td
+                    %div{:align => "right"}
+                      = include("/_quicklinks.ssp")
+        %td#cell-1-3
+          &nbsp;
+        %td#cell-1-4
+          &nbsp;
+      %tr{:width => "100%"}
+        %td#cell-2-0{:colspan => "2"}
+          &nbsp;
+        %td#cell-2-1
+          %table
+            %tr{:height => "100%", :valign => "top"}
+              %td{:height => "100%"}
+                #wrapper-menu-page-right
+                  #wrapper-menu-page-top
+                    #wrapper-menu-page-bottom
+                      #menu-page
+                        = include("_navigation.conf")
+              %td{:height =>"100%", :width => "100%"}
+                .wiki-content
+                  !~~ body
+        %td#cell-2-2{:colspan => "2"}
+          &nbsp;
+      %tr{:width => "100%"}
+        %td#cell-3-0
+          &nbsp;
+        %td#cell-3-1
+          &nbsp;
+        %td#cell-3-2
+          #footer
+            #site-footer
+              %br
+        %td#cell-3-3
+          &nbsp;
+        %td#cell-3-4
+          &nbsp;
+      %tr{:width => "100%"}
+        %td#cell-4-0{:colspan => "2"}
+          &nbsp;
+        %td#cell-4-1
+          &nbsp;
+        %td#cell-4-2{:colspan => "2"}
+          &nbsp;
+    - if (include_console)
+      = include("/org/fusesource/scalate/console/console.scaml")

Reply via email to