http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/DirectionWithPointPFBase.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/DirectionWithPointPFBase.java
index 2f49963,2f49963..29bb81f
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/DirectionWithPointPFBase.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/DirectionWithPointPFBase.java
@@@ -1,146 -1,146 +1,146 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction;
--
--import java.util.List;
--
--import org.apache.jena.datatypes.xsd.XSDDatatype ;
--import org.apache.jena.graph.Node ;
--import org.apache.jena.graph.impl.LiteralLabel ;
--import org.apache.jena.query.QueryBuildException ;
--import org.apache.jena.query.spatial.SpatialIndexException;
--import org.apache.jena.query.spatial.SpatialValueUtil;
--import org.apache.jena.sparql.engine.ExecutionContext ;
--import org.apache.jena.sparql.pfunction.PropFuncArg ;
--import org.apache.jena.sparql.util.NodeFactoryExtra ;
--import org.apache.lucene.spatial.query.SpatialOperation;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
--
--public abstract class DirectionWithPointPFBase extends SpatialOperationPFBase 
{
--      
--      private static Logger log = 
LoggerFactory.getLogger(DirectionWithPointPFBase.class);
--
--      public DirectionWithPointPFBase() {
--              
--      }
--
--      @Override
--      public void build(PropFuncArg argSubject, Node predicate,
--                      PropFuncArg argObject, ExecutionContext execCxt) {
--              super.build(argSubject, predicate, argObject, execCxt);
--              
--              if (!argSubject.isNode())
--                      throw new QueryBuildException("Subject is not a single 
node: "
--                                      + argSubject);
--
--              if (argObject.isList()) {
--                      List<Node> list = argObject.getArgList();
--                      if (list.size() < 2)
--                              throw new QueryBuildException("Not enough 
arguments in list");
--
--                      if (list.size() > 3)
--                              throw new QueryBuildException("Too many 
arguments in list : "
--                                              + list);
--              }
--      }
--      
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--      @Override
--    protected SpatialMatch objectToStruct(PropFuncArg argObject) {
--              if (argObject.isNode()) {
--                      log.warn("Object not a List: " + argObject);
--                      return null;
--              }
--
--              List<Node> list = argObject.getArgList();
--
--              if (list.size() < 2 || list.size() > 3)
--                      throw new SpatialIndexException("Change in object list 
size");
--
--              int idx = 0;
--
--              Node x = list.get(idx);
--              if (!x.isLiteral()) {
--                      log.warn("Latitude is not a literal " + list);
--                      return null;
--              }
--              if (!SpatialValueUtil.isDecimal(x)) {
--                      log.warn("Latitude is not a decimal " + list);
--                      return null;
--              }
--              Double latitude = Double.parseDouble(x.getLiteralLexicalForm());
--
--              idx++;
--
--              x = list.get(idx);
--              if (!x.isLiteral()) {
--                      log.warn("Longitude is not a literal " + list);
--                      return null;
--              }
--              if (!SpatialValueUtil.isDecimal(x)) {
--                      log.warn("Longitude is not a decimal " + list);
--                      return null;
--              }
--              Double longitude = 
Double.parseDouble(x.getLiteralLexicalForm());
--
--              idx++;
--
--              int limit =-1;
--              
--              if (idx < list.size()) {
--                      x = list.get(idx);
--
--                      if (!x.isLiteral()) {
--                              log.warn("Limit is not a literal " + list);
--                              return null;
--                      }
--
--                      LiteralLabel lit = x.getLiteral();
--
--                      if (!XSDDatatype.XSDinteger.isValidLiteral(lit)) {
--                              log.warn("Limit is not an integer " + list);
--                              return null;
--                      }
--
--                      int v = NodeFactoryExtra.nodeToInt(x);
--                      limit = (v < 0) ? -1 : v;
--
--                      idx++;
--                      if (idx < list.size()) {
--                              log.warn("Limit is not the last parameter " + 
list);
--                              return null;
--                      }
--              }
--              
--              SpatialMatch match = this.getSpatialMatch(latitude, longitude, 
limit);
--              if (log.isDebugEnabled())
--                      log.debug("Trying SpatialMatch: " + match.toString());
--              return match;
--      }
--      
--      protected abstract SpatialMatch getSpatialMatch(Double latitude, Double 
longitude, int limit);
--
--      @Override
--      protected SpatialOperation getSpatialOperation() {
--              return SpatialOperation.IsWithin;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction;
++
++import java.util.List;
++
++import org.apache.jena.datatypes.xsd.XSDDatatype ;
++import org.apache.jena.graph.Node ;
++import org.apache.jena.graph.impl.LiteralLabel ;
++import org.apache.jena.query.QueryBuildException ;
++import org.apache.jena.query.spatial.SpatialIndexException;
++import org.apache.jena.query.spatial.SpatialValueUtil;
++import org.apache.jena.sparql.engine.ExecutionContext ;
++import org.apache.jena.sparql.pfunction.PropFuncArg ;
++import org.apache.jena.sparql.util.NodeFactoryExtra ;
++import org.apache.lucene.spatial.query.SpatialOperation;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public abstract class DirectionWithPointPFBase extends SpatialOperationPFBase 
{
++      
++      private static Logger log = 
LoggerFactory.getLogger(DirectionWithPointPFBase.class);
++
++      public DirectionWithPointPFBase() {
++              
++      }
++
++      @Override
++      public void build(PropFuncArg argSubject, Node predicate,
++                      PropFuncArg argObject, ExecutionContext execCxt) {
++              super.build(argSubject, predicate, argObject, execCxt);
++              
++              if (!argSubject.isNode())
++                      throw new QueryBuildException("Subject is not a single 
node: "
++                                      + argSubject);
++
++              if (argObject.isList()) {
++                      List<Node> list = argObject.getArgList();
++                      if (list.size() < 2)
++                              throw new QueryBuildException("Not enough 
arguments in list");
++
++                      if (list.size() > 3)
++                              throw new QueryBuildException("Too many 
arguments in list : "
++                                              + list);
++              }
++      }
++      
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++      @Override
++    protected SpatialMatch objectToStruct(PropFuncArg argObject) {
++              if (argObject.isNode()) {
++                      log.warn("Object not a List: " + argObject);
++                      return null;
++              }
++
++              List<Node> list = argObject.getArgList();
++
++              if (list.size() < 2 || list.size() > 3)
++                      throw new SpatialIndexException("Change in object list 
size");
++
++              int idx = 0;
++
++              Node x = list.get(idx);
++              if (!x.isLiteral()) {
++                      log.warn("Latitude is not a literal " + list);
++                      return null;
++              }
++              if (!SpatialValueUtil.isDecimal(x)) {
++                      log.warn("Latitude is not a decimal " + list);
++                      return null;
++              }
++              Double latitude = Double.parseDouble(x.getLiteralLexicalForm());
++
++              idx++;
++
++              x = list.get(idx);
++              if (!x.isLiteral()) {
++                      log.warn("Longitude is not a literal " + list);
++                      return null;
++              }
++              if (!SpatialValueUtil.isDecimal(x)) {
++                      log.warn("Longitude is not a decimal " + list);
++                      return null;
++              }
++              Double longitude = 
Double.parseDouble(x.getLiteralLexicalForm());
++
++              idx++;
++
++              int limit =-1;
++              
++              if (idx < list.size()) {
++                      x = list.get(idx);
++
++                      if (!x.isLiteral()) {
++                              log.warn("Limit is not a literal " + list);
++                              return null;
++                      }
++
++                      LiteralLabel lit = x.getLiteral();
++
++                      if (!XSDDatatype.XSDinteger.isValidLiteral(lit)) {
++                              log.warn("Limit is not an integer " + list);
++                              return null;
++                      }
++
++                      int v = NodeFactoryExtra.nodeToInt(x);
++                      limit = (v < 0) ? -1 : v;
++
++                      idx++;
++                      if (idx < list.size()) {
++                              log.warn("Limit is not the last parameter " + 
list);
++                              return null;
++                      }
++              }
++              
++              SpatialMatch match = this.getSpatialMatch(latitude, longitude, 
limit);
++              if (log.isDebugEnabled())
++                      log.debug("Trying SpatialMatch: " + match.toString());
++              return match;
++      }
++      
++      protected abstract SpatialMatch getSpatialMatch(Double latitude, Double 
longitude, int limit);
++
++      @Override
++      protected SpatialOperation getSpatialOperation() {
++              return SpatialOperation.IsWithin;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialMatch.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialMatch.java
index 10832ed,10832ed..0d8275c
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialMatch.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialMatch.java
@@@ -1,67 -1,67 +1,67 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction;
--
--import org.apache.jena.query.spatial.DistanceUnitsUtils;
--import org.apache.jena.query.spatial.SpatialQuery;
--import org.apache.lucene.spatial.query.SpatialOperation;
--
--import com.spatial4j.core.shape.Shape;
--
--public class SpatialMatch {
--
--      private final Shape shape;
--      private final int limit;
--      private final SpatialOperation operation;
--
--      public SpatialMatch(Double latitude, Double longitude, Double radius,
--                      String units, int limit, SpatialOperation operation) {
--
--              double degrees = DistanceUnitsUtils.dist2Degrees(radius, units);
--              this.shape = SpatialQuery.ctx.makeCircle(longitude, latitude, 
degrees);
--              //System.out.println( SpatialQuery.ctx.toString(shape) );
--              this.limit = limit;
--              this.operation = operation;
--      }
--
--      public SpatialMatch(Double latitude1, Double longitude1, Double 
latitude2,
--                      Double longitude2, int limit, SpatialOperation 
operation) {
--              this.shape = SpatialQuery.ctx.makeRectangle(longitude1, 
longitude2, latitude1, latitude2);
--              this.limit = limit;
--              this.operation = operation;
--      }
--
--      public Shape getShape() {
--              return shape;
--      }
--
--      public int getLimit() {
--              return limit;
--      }
--
--      public SpatialOperation getSpatialOperation() {
--              return operation;
--      }
--
--      @Override
--      public String toString() {
--              return "(" + shape + " " + limit + " " + operation + ")";
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction;
++
++import org.apache.jena.query.spatial.DistanceUnitsUtils;
++import org.apache.jena.query.spatial.SpatialQuery;
++import org.apache.lucene.spatial.query.SpatialOperation;
++
++import com.spatial4j.core.shape.Shape;
++
++public class SpatialMatch {
++
++      private final Shape shape;
++      private final int limit;
++      private final SpatialOperation operation;
++
++      public SpatialMatch(Double latitude, Double longitude, Double radius,
++                      String units, int limit, SpatialOperation operation) {
++
++              double degrees = DistanceUnitsUtils.dist2Degrees(radius, units);
++              this.shape = SpatialQuery.ctx.makeCircle(longitude, latitude, 
degrees);
++              //System.out.println( SpatialQuery.ctx.toString(shape) );
++              this.limit = limit;
++              this.operation = operation;
++      }
++
++      public SpatialMatch(Double latitude1, Double longitude1, Double 
latitude2,
++                      Double longitude2, int limit, SpatialOperation 
operation) {
++              this.shape = SpatialQuery.ctx.makeRectangle(longitude1, 
longitude2, latitude1, latitude2);
++              this.limit = limit;
++              this.operation = operation;
++      }
++
++      public Shape getShape() {
++              return shape;
++      }
++
++      public int getLimit() {
++              return limit;
++      }
++
++      public SpatialOperation getSpatialOperation() {
++              return operation;
++      }
++
++      @Override
++      public String toString() {
++              return "(" + shape + " " + limit + " " + operation + ")";
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationPFBase.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationPFBase.java
index 2f8b638,2f8b638..82d7b4f
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationPFBase.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationPFBase.java
@@@ -1,163 -1,163 +1,163 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction;
--
--import java.util.List ;
--
--import org.apache.jena.atlas.iterator.Iter ;
--import org.apache.jena.atlas.lib.InternalErrorException ;
--import org.apache.jena.atlas.logging.Log ;
--import org.apache.jena.graph.Node ;
--import org.apache.jena.query.spatial.DatasetGraphSpatial ;
--import org.apache.jena.query.spatial.SpatialIndex ;
--import org.apache.jena.query.spatial.SpatialQuery ;
--import org.apache.jena.sparql.core.DatasetGraph ;
--import org.apache.jena.sparql.core.Substitute ;
--import org.apache.jena.sparql.core.Var ;
--import org.apache.jena.sparql.engine.ExecutionContext ;
--import org.apache.jena.sparql.engine.QueryIterator ;
--import org.apache.jena.sparql.engine.binding.Binding ;
--import org.apache.jena.sparql.engine.iterator.QueryIterExtendByVar ;
--import org.apache.jena.sparql.engine.iterator.QueryIterSlice ;
--import org.apache.jena.sparql.pfunction.PropFuncArg ;
--import org.apache.jena.sparql.pfunction.PropertyFunctionBase ;
--import org.apache.jena.sparql.util.IterLib ;
--import org.apache.lucene.spatial.query.SpatialOperation ;
--import org.slf4j.Logger ;
--import org.slf4j.LoggerFactory ;
--
--public abstract class SpatialOperationPFBase extends PropertyFunctionBase {
--
--      private static Logger log = 
LoggerFactory.getLogger(SpatialOperationPFBase.class);
--
--      protected SpatialIndex server = null;
--      private boolean warningIssued = false;
--
--      public SpatialOperationPFBase() {
--      }
--      
--      @Override
--      public void build(PropFuncArg argSubject, Node predicate,
--                      PropFuncArg argObject, ExecutionContext execCxt) {
--              super.build(argSubject, predicate, argObject, execCxt);
--              DatasetGraph dsg = execCxt.getDataset();
--              server = chooseTextIndex(dsg);
--      }
--
--      protected SpatialIndex chooseTextIndex(DatasetGraph dsg) {
--              Object obj = dsg.getContext().get(SpatialQuery.spatialIndex);
--
--              if (obj != null) {
--                      try {
--                              return (SpatialIndex) obj;
--                      } catch (ClassCastException ex) {
--                              Log.warn(SpatialOperationWithCircleBase.class, 
"Context setting '"
--                                              + SpatialQuery.spatialIndex + 
"'is not a SpatialIndex");
--                      }
--              }
--
--              if (dsg instanceof DatasetGraphSpatial) {
--                      DatasetGraphSpatial x = (DatasetGraphSpatial) dsg;
--                      return x.getSpatialIndex();
--              }
--              Log.warn(
--                              SpatialOperationWithCircleBase.class,
--                              "Failed to find the spatial index : tried 
context and as a spatial-enabled dataset");
--              return null;
--      }
--
--      @Override
--      public QueryIterator exec(Binding binding, PropFuncArg argSubject,
--                      Node predicate, PropFuncArg argObject, ExecutionContext 
execCxt) {
--              if (server == null) {
--                      if (!warningIssued) {
--                              Log.warn(getClass(), "No spatial index - no 
spatial search performed");
--                              warningIssued = true;
--                      }
--                      // Not a text dataset - no-op
--                      return IterLib.result(binding, execCxt);
--              }
--
--              DatasetGraph dsg = execCxt.getDataset();
--              
--        argSubject = Substitute.substitute(argSubject, binding) ;
--        argObject = Substitute.substitute(argObject, binding) ;
--              
--              if (!argSubject.isNode())
--                      throw new InternalErrorException("Subject is not a node 
(it was earlier!)");
--
--              Node s = argSubject.getArg();
--
--              if (s.isLiteral())
--                      // Does not match
--                      return IterLib.noResults(execCxt);
--
--              SpatialMatch match = objectToStruct(argObject);
--
--              if (match == null) {
--                      // can't match
--                      return IterLib.noResults(execCxt);
--              }
--
--              // ----
--
--              QueryIterator qIter = (Var.isVar(s)) ? variableSubject(binding, 
s,
--                              match, execCxt) : concreteSubject(binding, s, 
match, execCxt);
--              if (match.getLimit() >= 0)
--                      qIter = new QueryIterSlice(qIter, 0, match.getLimit(), 
execCxt);
--              return qIter;
--      }
--
--      private QueryIterator variableSubject(Binding binding, Node s,
--                      SpatialMatch match, ExecutionContext execCxt) {
--
--              Var v = Var.alloc(s);
--              List<Node> r = query(match);
--              // Make distinct. Note interaction with limit is imperfect
--              r = Iter.iter(r).distinct().toList();
--              QueryIterator qIter = new QueryIterExtendByVar(binding, v,
--                              r.iterator(), execCxt);
--              return qIter;
--      }
--
--      private QueryIterator concreteSubject(Binding binding, Node s,
--                      SpatialMatch match, ExecutionContext execCxt) {
--              if (!s.isURI()) {
--                      log.warn("Subject not a URI: " + s);
--                      return IterLib.noResults(execCxt);
--              }
--
--              List<Node> x = query(match);
--              if (x == null || !x.contains(s))
--                      return IterLib.noResults(execCxt);
--              else
--                      return IterLib.result(binding, execCxt);
--      }
--
--      private List<Node> query(SpatialMatch match) {
--
--              return server.query(match.getShape(), match.getLimit(),
--                              match.getSpatialOperation());
--      }
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--      protected abstract SpatialMatch objectToStruct(PropFuncArg argObject);
--      
--      protected abstract SpatialOperation getSpatialOperation();
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction;
++
++import java.util.List ;
++
++import org.apache.jena.atlas.iterator.Iter ;
++import org.apache.jena.atlas.lib.InternalErrorException ;
++import org.apache.jena.atlas.logging.Log ;
++import org.apache.jena.graph.Node ;
++import org.apache.jena.query.spatial.DatasetGraphSpatial ;
++import org.apache.jena.query.spatial.SpatialIndex ;
++import org.apache.jena.query.spatial.SpatialQuery ;
++import org.apache.jena.sparql.core.DatasetGraph ;
++import org.apache.jena.sparql.core.Substitute ;
++import org.apache.jena.sparql.core.Var ;
++import org.apache.jena.sparql.engine.ExecutionContext ;
++import org.apache.jena.sparql.engine.QueryIterator ;
++import org.apache.jena.sparql.engine.binding.Binding ;
++import org.apache.jena.sparql.engine.iterator.QueryIterExtendByVar ;
++import org.apache.jena.sparql.engine.iterator.QueryIterSlice ;
++import org.apache.jena.sparql.pfunction.PropFuncArg ;
++import org.apache.jena.sparql.pfunction.PropertyFunctionBase ;
++import org.apache.jena.sparql.util.IterLib ;
++import org.apache.lucene.spatial.query.SpatialOperation ;
++import org.slf4j.Logger ;
++import org.slf4j.LoggerFactory ;
++
++public abstract class SpatialOperationPFBase extends PropertyFunctionBase {
++
++      private static Logger log = 
LoggerFactory.getLogger(SpatialOperationPFBase.class);
++
++      protected SpatialIndex server = null;
++      private boolean warningIssued = false;
++
++      public SpatialOperationPFBase() {
++      }
++      
++      @Override
++      public void build(PropFuncArg argSubject, Node predicate,
++                      PropFuncArg argObject, ExecutionContext execCxt) {
++              super.build(argSubject, predicate, argObject, execCxt);
++              DatasetGraph dsg = execCxt.getDataset();
++              server = chooseTextIndex(dsg);
++      }
++
++      protected SpatialIndex chooseTextIndex(DatasetGraph dsg) {
++              Object obj = dsg.getContext().get(SpatialQuery.spatialIndex);
++
++              if (obj != null) {
++                      try {
++                              return (SpatialIndex) obj;
++                      } catch (ClassCastException ex) {
++                              Log.warn(SpatialOperationWithCircleBase.class, 
"Context setting '"
++                                              + SpatialQuery.spatialIndex + 
"'is not a SpatialIndex");
++                      }
++              }
++
++              if (dsg instanceof DatasetGraphSpatial) {
++                      DatasetGraphSpatial x = (DatasetGraphSpatial) dsg;
++                      return x.getSpatialIndex();
++              }
++              Log.warn(
++                              SpatialOperationWithCircleBase.class,
++                              "Failed to find the spatial index : tried 
context and as a spatial-enabled dataset");
++              return null;
++      }
++
++      @Override
++      public QueryIterator exec(Binding binding, PropFuncArg argSubject,
++                      Node predicate, PropFuncArg argObject, ExecutionContext 
execCxt) {
++              if (server == null) {
++                      if (!warningIssued) {
++                              Log.warn(getClass(), "No spatial index - no 
spatial search performed");
++                              warningIssued = true;
++                      }
++                      // Not a text dataset - no-op
++                      return IterLib.result(binding, execCxt);
++              }
++
++              DatasetGraph dsg = execCxt.getDataset();
++              
++        argSubject = Substitute.substitute(argSubject, binding) ;
++        argObject = Substitute.substitute(argObject, binding) ;
++              
++              if (!argSubject.isNode())
++                      throw new InternalErrorException("Subject is not a node 
(it was earlier!)");
++
++              Node s = argSubject.getArg();
++
++              if (s.isLiteral())
++                      // Does not match
++                      return IterLib.noResults(execCxt);
++
++              SpatialMatch match = objectToStruct(argObject);
++
++              if (match == null) {
++                      // can't match
++                      return IterLib.noResults(execCxt);
++              }
++
++              // ----
++
++              QueryIterator qIter = (Var.isVar(s)) ? variableSubject(binding, 
s,
++                              match, execCxt) : concreteSubject(binding, s, 
match, execCxt);
++              if (match.getLimit() >= 0)
++                      qIter = new QueryIterSlice(qIter, 0, match.getLimit(), 
execCxt);
++              return qIter;
++      }
++
++      private QueryIterator variableSubject(Binding binding, Node s,
++                      SpatialMatch match, ExecutionContext execCxt) {
++
++              Var v = Var.alloc(s);
++              List<Node> r = query(match);
++              // Make distinct. Note interaction with limit is imperfect
++              r = Iter.iter(r).distinct().toList();
++              QueryIterator qIter = new QueryIterExtendByVar(binding, v,
++                              r.iterator(), execCxt);
++              return qIter;
++      }
++
++      private QueryIterator concreteSubject(Binding binding, Node s,
++                      SpatialMatch match, ExecutionContext execCxt) {
++              if (!s.isURI()) {
++                      log.warn("Subject not a URI: " + s);
++                      return IterLib.noResults(execCxt);
++              }
++
++              List<Node> x = query(match);
++              if (x == null || !x.contains(s))
++                      return IterLib.noResults(execCxt);
++              else
++                      return IterLib.result(binding, execCxt);
++      }
++
++      private List<Node> query(SpatialMatch match) {
++
++              return server.query(match.getShape(), match.getLimit(),
++                              match.getSpatialOperation());
++      }
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++      protected abstract SpatialMatch objectToStruct(PropFuncArg argObject);
++      
++      protected abstract SpatialOperation getSpatialOperation();
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationWithBoxPFBase.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationWithBoxPFBase.java
index ee44773,ee44773..e200134
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationWithBoxPFBase.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/SpatialOperationWithBoxPFBase.java
@@@ -1,164 -1,164 +1,164 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction;
--
--import java.util.List;
--
--import org.apache.jena.datatypes.xsd.XSDDatatype ;
--import org.apache.jena.graph.Node ;
--import org.apache.jena.graph.impl.LiteralLabel ;
--import org.apache.jena.query.QueryBuildException ;
--import org.apache.jena.query.spatial.SpatialIndexException;
--import org.apache.jena.query.spatial.SpatialValueUtil;
--import org.apache.jena.sparql.engine.ExecutionContext ;
--import org.apache.jena.sparql.pfunction.PropFuncArg ;
--import org.apache.jena.sparql.util.NodeFactoryExtra ;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
--
--public abstract class SpatialOperationWithBoxPFBase extends 
SpatialOperationPFBase {
--      private static Logger log = 
LoggerFactory.getLogger(SpatialOperationWithCircleBase.class);
--
--      public SpatialOperationWithBoxPFBase() {
--      }
--
--      @Override
--      public void build(PropFuncArg argSubject, Node predicate,
--                      PropFuncArg argObject, ExecutionContext execCxt) {
--              super.build(argSubject, predicate, argObject, execCxt);
--              
--              if (!argSubject.isNode())
--                      throw new QueryBuildException("Subject is not a single 
node: "
--                                      + argSubject);
--
--              if (argObject.isList()) {
--                      List<Node> list = argObject.getArgList();
--                      if (list.size() < 4)
--                              throw new QueryBuildException("Not enough 
arguments in list");
--
--                      if (list.size() > 5)
--                              throw new QueryBuildException("Too many 
arguments in list : "
--                                              + list);
--              }
--      }
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--      @Override
--      protected SpatialMatch objectToStruct(PropFuncArg argObject) {
--              
--              if (argObject.isNode()) {
--                      log.warn("Object not a List: " + argObject);
--                      return null;
--              }
--
--              List<Node> list = argObject.getArgList();
--
--              if (list.size() < 4 || list.size() > 5)
--                      throw new SpatialIndexException("Change in object list 
size");
--
--              int idx = 0;
--
--              Node x = list.get(idx);
--              if (!x.isLiteral()) {
--                      log.warn("Latitude 1 is not a literal " + list);
--                      return null;
--              }
--              if (!SpatialValueUtil.isDecimal(x)) {
--                      log.warn("Latitude 1 is not a decimal " + list);
--                      return null;
--              }
--              Double latitude1 = 
Double.parseDouble(x.getLiteralLexicalForm());
--
--              idx++;
--
--              x = list.get(idx);
--              if (!x.isLiteral()) {
--                      log.warn("Longitude 1 is not a literal " + list);
--                      return null;
--              }
--              if (!SpatialValueUtil.isDecimal(x)) {
--                      log.warn("Longitude 1 is not a decimal " + list);
--                      return null;
--              }
--              Double longtitude1 = 
Double.parseDouble(x.getLiteralLexicalForm());
--
--              idx++;
--
--              x = list.get(idx);
--              if (!x.isLiteral()) {
--                      log.warn("Latitude 2 is not a literal " + list);
--                      return null;
--              }
--              if (!SpatialValueUtil.isDecimal(x)) {
--                      log.warn("Latitude 2 is not a decimal " + list);
--                      return null;
--              }
--              Double latitude2 = 
Double.parseDouble(x.getLiteralLexicalForm());
--
--              idx++;
--
--              x = list.get(idx);
--              if (!x.isLiteral()) {
--                      log.warn("Longitude 2 is not a literal " + list);
--                      return null;
--              }
--              if (!SpatialValueUtil.isDecimal(x)) {
--                      log.warn("Longitude 2 is not a decimal " + list);
--                      return null;
--              }
--              Double longtitude2 = 
Double.parseDouble(x.getLiteralLexicalForm());
--
--              idx++;
--              int limit =-1;
--              
--              if (idx < list.size()) {
--                      x = list.get(idx);
--
--                      if (!x.isLiteral()) {
--                              log.warn("Limit is not a literal " + list);
--                              return null;
--                      }
--
--                      LiteralLabel lit = x.getLiteral();
--
--                      if (!XSDDatatype.XSDinteger.isValidLiteral(lit)) {
--                              log.warn("Limit is not an integer " + list);
--                              return null;
--                      }
--
--                      int v = NodeFactoryExtra.nodeToInt(x);
--                      limit = (v < 0) ? -1 : v;
--
--                      idx++;
--                      if (idx < list.size()) {
--                              log.warn("Limit is not the last parameter " + 
list);
--                              return null;
--                      }
--              }
--              
--              SpatialMatch match = new SpatialMatch(latitude1, longtitude1,
--                              latitude2, longtitude2, limit, 
getSpatialOperation());
--
--              if (log.isDebugEnabled())
--                      log.debug("Trying SpatialMatch: " + match.toString());
--              return match;
--      }
--
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction;
++
++import java.util.List;
++
++import org.apache.jena.datatypes.xsd.XSDDatatype ;
++import org.apache.jena.graph.Node ;
++import org.apache.jena.graph.impl.LiteralLabel ;
++import org.apache.jena.query.QueryBuildException ;
++import org.apache.jena.query.spatial.SpatialIndexException;
++import org.apache.jena.query.spatial.SpatialValueUtil;
++import org.apache.jena.sparql.engine.ExecutionContext ;
++import org.apache.jena.sparql.pfunction.PropFuncArg ;
++import org.apache.jena.sparql.util.NodeFactoryExtra ;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public abstract class SpatialOperationWithBoxPFBase extends 
SpatialOperationPFBase {
++      private static Logger log = 
LoggerFactory.getLogger(SpatialOperationWithCircleBase.class);
++
++      public SpatialOperationWithBoxPFBase() {
++      }
++
++      @Override
++      public void build(PropFuncArg argSubject, Node predicate,
++                      PropFuncArg argObject, ExecutionContext execCxt) {
++              super.build(argSubject, predicate, argObject, execCxt);
++              
++              if (!argSubject.isNode())
++                      throw new QueryBuildException("Subject is not a single 
node: "
++                                      + argSubject);
++
++              if (argObject.isList()) {
++                      List<Node> list = argObject.getArgList();
++                      if (list.size() < 4)
++                              throw new QueryBuildException("Not enough 
arguments in list");
++
++                      if (list.size() > 5)
++                              throw new QueryBuildException("Too many 
arguments in list : "
++                                              + list);
++              }
++      }
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++      @Override
++      protected SpatialMatch objectToStruct(PropFuncArg argObject) {
++              
++              if (argObject.isNode()) {
++                      log.warn("Object not a List: " + argObject);
++                      return null;
++              }
++
++              List<Node> list = argObject.getArgList();
++
++              if (list.size() < 4 || list.size() > 5)
++                      throw new SpatialIndexException("Change in object list 
size");
++
++              int idx = 0;
++
++              Node x = list.get(idx);
++              if (!x.isLiteral()) {
++                      log.warn("Latitude 1 is not a literal " + list);
++                      return null;
++              }
++              if (!SpatialValueUtil.isDecimal(x)) {
++                      log.warn("Latitude 1 is not a decimal " + list);
++                      return null;
++              }
++              Double latitude1 = 
Double.parseDouble(x.getLiteralLexicalForm());
++
++              idx++;
++
++              x = list.get(idx);
++              if (!x.isLiteral()) {
++                      log.warn("Longitude 1 is not a literal " + list);
++                      return null;
++              }
++              if (!SpatialValueUtil.isDecimal(x)) {
++                      log.warn("Longitude 1 is not a decimal " + list);
++                      return null;
++              }
++              Double longtitude1 = 
Double.parseDouble(x.getLiteralLexicalForm());
++
++              idx++;
++
++              x = list.get(idx);
++              if (!x.isLiteral()) {
++                      log.warn("Latitude 2 is not a literal " + list);
++                      return null;
++              }
++              if (!SpatialValueUtil.isDecimal(x)) {
++                      log.warn("Latitude 2 is not a decimal " + list);
++                      return null;
++              }
++              Double latitude2 = 
Double.parseDouble(x.getLiteralLexicalForm());
++
++              idx++;
++
++              x = list.get(idx);
++              if (!x.isLiteral()) {
++                      log.warn("Longitude 2 is not a literal " + list);
++                      return null;
++              }
++              if (!SpatialValueUtil.isDecimal(x)) {
++                      log.warn("Longitude 2 is not a decimal " + list);
++                      return null;
++              }
++              Double longtitude2 = 
Double.parseDouble(x.getLiteralLexicalForm());
++
++              idx++;
++              int limit =-1;
++              
++              if (idx < list.size()) {
++                      x = list.get(idx);
++
++                      if (!x.isLiteral()) {
++                              log.warn("Limit is not a literal " + list);
++                              return null;
++                      }
++
++                      LiteralLabel lit = x.getLiteral();
++
++                      if (!XSDDatatype.XSDinteger.isValidLiteral(lit)) {
++                              log.warn("Limit is not an integer " + list);
++                              return null;
++                      }
++
++                      int v = NodeFactoryExtra.nodeToInt(x);
++                      limit = (v < 0) ? -1 : v;
++
++                      idx++;
++                      if (idx < list.size()) {
++                              log.warn("Limit is not the last parameter " + 
list);
++                              return null;
++                      }
++              }
++              
++              SpatialMatch match = new SpatialMatch(latitude1, longtitude1,
++                              latitude2, longtitude2, limit, 
getSpatialOperation());
++
++              if (log.isDebugEnabled())
++                      log.debug("Trying SpatialMatch: " + match.toString());
++              return match;
++      }
++
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/EastPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/EastPF.java
index 96e5519,96e5519..6c40cfa
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/EastPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/EastPF.java
@@@ -1,44 -1,44 +1,44 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.SpatialQuery;
--import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
--import org.apache.jena.query.spatial.pfunction.SpatialMatch;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
--
--public class EastPF extends DirectionWithPointPFBase {
--
--      private static Logger log = LoggerFactory.getLogger(EastPF.class);
--
--      public EastPF() {
--              // TODO Auto-generated constructor stub
--      }
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--    @Override
--      protected SpatialMatch getSpatialMatch(Double latitude, Double 
longitude, int limit) {
--              SpatialMatch match = new 
SpatialMatch(SpatialQuery.ctx.getWorldBounds().getMinY(),
--                              longitude, 
SpatialQuery.ctx.getWorldBounds().getMaxY(), SpatialQuery.ctx.getWorldBounds()
--                                              .getMaxX(), limit, 
getSpatialOperation());
--              return match;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.SpatialQuery;
++import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
++import org.apache.jena.query.spatial.pfunction.SpatialMatch;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public class EastPF extends DirectionWithPointPFBase {
++
++      private static Logger log = LoggerFactory.getLogger(EastPF.class);
++
++      public EastPF() {
++              // TODO Auto-generated constructor stub
++      }
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++    @Override
++      protected SpatialMatch getSpatialMatch(Double latitude, Double 
longitude, int limit) {
++              SpatialMatch match = new 
SpatialMatch(SpatialQuery.ctx.getWorldBounds().getMinY(),
++                              longitude, 
SpatialQuery.ctx.getWorldBounds().getMaxY(), SpatialQuery.ctx.getWorldBounds()
++                                              .getMaxX(), limit, 
getSpatialOperation());
++              return match;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IntersectsBoxPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IntersectsBoxPF.java
index 8d6b426,8d6b426..d71f050
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IntersectsBoxPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IntersectsBoxPF.java
@@@ -1,35 -1,35 +1,35 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.pfunction.SpatialOperationWithBoxPFBase;
--import org.apache.lucene.spatial.query.SpatialOperation;
--
--public class IntersectsBoxPF extends SpatialOperationWithBoxPFBase {
--
--      public IntersectsBoxPF() {
--      }
--
--      
--      @Override
--      protected SpatialOperation getSpatialOperation() {
--              return SpatialOperation.Intersects;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.pfunction.SpatialOperationWithBoxPFBase;
++import org.apache.lucene.spatial.query.SpatialOperation;
++
++public class IntersectsBoxPF extends SpatialOperationWithBoxPFBase {
++
++      public IntersectsBoxPF() {
++      }
++
++      
++      @Override
++      protected SpatialOperation getSpatialOperation() {
++              return SpatialOperation.Intersects;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsNearByPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsNearByPF.java
index 75df1d1,75df1d1..a5a44d4
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsNearByPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsNearByPF.java
@@@ -1,23 -1,23 +1,23 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--public class IsNearByPF extends IsWithinCirclePF {
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++public class IsNearByPF extends IsWithinCirclePF {
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinBoxPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinBoxPF.java
index 048d0b2,048d0b2..078bd10
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinBoxPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinBoxPF.java
@@@ -1,34 -1,34 +1,34 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.pfunction.SpatialOperationWithBoxPFBase;
--import org.apache.lucene.spatial.query.SpatialOperation;
--
--public class IsWithinBoxPF extends SpatialOperationWithBoxPFBase {
--
--      public IsWithinBoxPF() {
--      }
--
--      @Override
--      protected SpatialOperation getSpatialOperation() {
--              return SpatialOperation.IsWithin;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.pfunction.SpatialOperationWithBoxPFBase;
++import org.apache.lucene.spatial.query.SpatialOperation;
++
++public class IsWithinBoxPF extends SpatialOperationWithBoxPFBase {
++
++      public IsWithinBoxPF() {
++      }
++
++      @Override
++      protected SpatialOperation getSpatialOperation() {
++              return SpatialOperation.IsWithin;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinCirclePF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinCirclePF.java
index 322e442,322e442..c10c4e2
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinCirclePF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/IsWithinCirclePF.java
@@@ -1,35 -1,35 +1,35 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.pfunction.SpatialOperationWithCircleBase;
--import org.apache.lucene.spatial.query.SpatialOperation;
--
--public class IsWithinCirclePF extends SpatialOperationWithCircleBase {
--
--      public IsWithinCirclePF() {
--              // TODO Auto-generated constructor stub
--      }
--
--      @Override
--      protected SpatialOperation getSpatialOperation() {
--              return SpatialOperation.IsWithin;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.pfunction.SpatialOperationWithCircleBase;
++import org.apache.lucene.spatial.query.SpatialOperation;
++
++public class IsWithinCirclePF extends SpatialOperationWithCircleBase {
++
++      public IsWithinCirclePF() {
++              // TODO Auto-generated constructor stub
++      }
++
++      @Override
++      protected SpatialOperation getSpatialOperation() {
++              return SpatialOperation.IsWithin;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/NorthPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/NorthPF.java
index 9576fe3,9576fe3..e2cfbb1
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/NorthPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/NorthPF.java
@@@ -1,45 -1,45 +1,45 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.SpatialQuery;
--import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
--import org.apache.jena.query.spatial.pfunction.SpatialMatch;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
--
--public class NorthPF extends DirectionWithPointPFBase {
--
--      private static Logger log = LoggerFactory.getLogger(NorthPF.class);
--
--      public NorthPF() {
--              // TODO Auto-generated constructor stub
--      }
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--    @Override
--    protected SpatialMatch getSpatialMatch(Double latitude, Double longitude, 
int limit) {
--        SpatialMatch match = new SpatialMatch(latitude, SpatialQuery.ctx
--                              .getWorldBounds().getMinX(), 
SpatialQuery.ctx.getWorldBounds()
--                              .getMaxY(), 
SpatialQuery.ctx.getWorldBounds().getMaxX(), limit,
--                              getSpatialOperation());
--              return match;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.SpatialQuery;
++import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
++import org.apache.jena.query.spatial.pfunction.SpatialMatch;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public class NorthPF extends DirectionWithPointPFBase {
++
++      private static Logger log = LoggerFactory.getLogger(NorthPF.class);
++
++      public NorthPF() {
++              // TODO Auto-generated constructor stub
++      }
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++    @Override
++    protected SpatialMatch getSpatialMatch(Double latitude, Double longitude, 
int limit) {
++        SpatialMatch match = new SpatialMatch(latitude, SpatialQuery.ctx
++                              .getWorldBounds().getMinX(), 
SpatialQuery.ctx.getWorldBounds()
++                              .getMaxY(), 
SpatialQuery.ctx.getWorldBounds().getMaxX(), limit,
++                              getSpatialOperation());
++              return match;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/SouthPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/SouthPF.java
index cf8a467,cf8a467..431531b
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/SouthPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/SouthPF.java
@@@ -1,43 -1,43 +1,43 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.SpatialQuery;
--import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
--import org.apache.jena.query.spatial.pfunction.SpatialMatch;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
--
--public class SouthPF extends DirectionWithPointPFBase {
--
--      private static Logger log = LoggerFactory.getLogger(SouthPF.class);
--
--      public SouthPF() {
--              // TODO Auto-generated constructor stub
--      }
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--    @Override
--    protected SpatialMatch getSpatialMatch(Double latitude, Double longitude, 
int limit) {            SpatialMatch match = new 
SpatialMatch(SpatialQuery.ctx.getWorldBounds().getMinY(),
--                              SpatialQuery.ctx.getWorldBounds().getMinX(), 
latitude, SpatialQuery.ctx.getWorldBounds()
--                                              .getMaxX(), limit, 
getSpatialOperation());
--              return match;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.SpatialQuery;
++import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
++import org.apache.jena.query.spatial.pfunction.SpatialMatch;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public class SouthPF extends DirectionWithPointPFBase {
++
++      private static Logger log = LoggerFactory.getLogger(SouthPF.class);
++
++      public SouthPF() {
++              // TODO Auto-generated constructor stub
++      }
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++    @Override
++    protected SpatialMatch getSpatialMatch(Double latitude, Double longitude, 
int limit) {            SpatialMatch match = new 
SpatialMatch(SpatialQuery.ctx.getWorldBounds().getMinY(),
++                              SpatialQuery.ctx.getWorldBounds().getMinX(), 
latitude, SpatialQuery.ctx.getWorldBounds()
++                                              .getMaxX(), limit, 
getSpatialOperation());
++              return match;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/WestPF.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/WestPF.java
index 5b3f568,5b3f568..9ddf6b7
--- 
a/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/WestPF.java
+++ 
b/jena-spatial/src/main/java/org/apache/jena/query/spatial/pfunction/library/WestPF.java
@@@ -1,44 -1,44 +1,44 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial.pfunction.library;
--
--import org.apache.jena.query.spatial.SpatialQuery;
--import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
--import org.apache.jena.query.spatial.pfunction.SpatialMatch;
--import org.slf4j.Logger;
--import org.slf4j.LoggerFactory;
--
--public class WestPF extends DirectionWithPointPFBase {
--
--      private static Logger log = LoggerFactory.getLogger(WestPF.class);
--
--      public WestPF() {
--              // TODO Auto-generated constructor stub
--      }
--
--      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
--    @Override
--    protected SpatialMatch getSpatialMatch(Double latitude, Double longitude, 
int limit) {
--        SpatialMatch match = new 
SpatialMatch(SpatialQuery.ctx.getWorldBounds().getMinY(),
--                              SpatialQuery.ctx.getWorldBounds().getMinX(), 
SpatialQuery.ctx.getWorldBounds().getMaxY(),
--                              longitude, limit, getSpatialOperation());
--              return match;
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial.pfunction.library;
++
++import org.apache.jena.query.spatial.SpatialQuery;
++import org.apache.jena.query.spatial.pfunction.DirectionWithPointPFBase;
++import org.apache.jena.query.spatial.pfunction.SpatialMatch;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public class WestPF extends DirectionWithPointPFBase {
++
++      private static Logger log = LoggerFactory.getLogger(WestPF.class);
++
++      public WestPF() {
++              // TODO Auto-generated constructor stub
++      }
++
++      /** Deconstruct the node or list object argument and make a 
SpatialMatch */
++    @Override
++    protected SpatialMatch getSpatialMatch(Double latitude, Double longitude, 
int limit) {
++        SpatialMatch match = new 
SpatialMatch(SpatialQuery.ctx.getWorldBounds().getMinY(),
++                              SpatialQuery.ctx.getWorldBounds().getMinX(), 
SpatialQuery.ctx.getWorldBounds().getMaxY(),
++                              longitude, limit, getSpatialOperation());
++              return match;
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/test/java/org/apache/jena/query/spatial/AbstractTestIndexingSpatialData.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/test/java/org/apache/jena/query/spatial/AbstractTestIndexingSpatialData.java
index 0780961,0780961..3fdeaca
--- 
a/jena-spatial/src/test/java/org/apache/jena/query/spatial/AbstractTestIndexingSpatialData.java
+++ 
b/jena-spatial/src/test/java/org/apache/jena/query/spatial/AbstractTestIndexingSpatialData.java
@@@ -1,93 -1,93 +1,93 @@@
--/**
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial;
--
--import java.util.Arrays;
--import java.util.HashSet;
--import java.util.Set;
--
--import org.apache.jena.atlas.lib.StrUtils;
--import org.junit.Test;
--import static org.junit.Assert.fail;
--
--import com.spatial4j.core.exception.InvalidShapeException;
--
--public class AbstractTestIndexingSpatialData extends
--              AbstractTestDatasetWithSpatialIndex {
--
--      @Test
--      public void testIndexingStringLiteral() {
--              final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
--                              + RESOURCE_BASE + "testIndexingStringLiteral>",
--                              "   geo:lat '51.3827' ;", "   geo:long 
'-2.71909' ", ".");
--              String queryString = StrUtils
--                              .strjoinNL(
--                                              QUERY_PROLOG,
--                                              "SELECT ?s",
--                                              "WHERE {",
--                                              " ?s spatial:nearby (51.3000 
-2.71000 100.0 'miles' -1) .",
--                                              "}");
--              Set<String> expectedURIs = (new HashSet<String>());
--              expectedURIs
--                              .addAll(Arrays
--                                              .asList((new String[] { 
"http://example.org/data/resource/testIndexingStringLiteral"; })));
--              doTestSearch(turtle, queryString, expectedURIs);
--      }
--
--      @Test
--      public void testIndexingWKTLiteral() {
--              boolean jts_context_ready = false;
--              try {
--                      SpatialIndex index = (SpatialIndex) 
dataset.getContext().get(
--                                      SpatialQuery.spatialIndex);
--                      index.getDocDef().setSpatialContextFactory(
--                                      
SpatialQuery.JTS_SPATIAL_CONTEXT_FACTORY_CLASS);
--                      jts_context_ready = true;
--              }catch (NoClassDefFoundError e){
--                      //Log.warn(this, "JTS lib is not on the classpath!");
--              }
--              
--              final String turtle = StrUtils
--                              .strjoinNL(
--                                              TURTLE_PROLOG,
--                                              "<" + RESOURCE_BASE + 
"testIndexingWKTLiteral>",
--                                              "   wkt:asWKT 'POINT(-1.74803 
52.4539)'^^wkt:wktLiteral  ",
--                                              ".");
--              String queryString = StrUtils
--                              .strjoinNL(
--                                              QUERY_PROLOG,
--                                              "SELECT ?s",
--                                              "WHERE {",
--                                              " ?s spatial:nearby (51.3000 
-2.71000 100.0 'miles' -1) .",
--                                              "}");
--              Set<String> expectedURIs = (new HashSet<String>());
--              expectedURIs
--                              .addAll(Arrays
--                                              .asList((new String[] { 
"http://example.org/data/resource/testIndexingWKTLiteral"; })));
--              
--              try {
--                      doTestSearch(turtle, queryString, expectedURIs);
--              }catch (InvalidShapeException e){
--                      if (jts_context_ready){
--                              fail("The exception is not supposed to be 
thrown: "+ e.getMessage());
--                      }
--              }
--      }
--
--}
++/**
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial;
++
++import java.util.Arrays;
++import java.util.HashSet;
++import java.util.Set;
++
++import org.apache.jena.atlas.lib.StrUtils;
++import org.junit.Test;
++import static org.junit.Assert.fail;
++
++import com.spatial4j.core.exception.InvalidShapeException;
++
++public class AbstractTestIndexingSpatialData extends
++              AbstractTestDatasetWithSpatialIndex {
++
++      @Test
++      public void testIndexingStringLiteral() {
++              final String turtle = StrUtils.strjoinNL(TURTLE_PROLOG, "<"
++                              + RESOURCE_BASE + "testIndexingStringLiteral>",
++                              "   geo:lat '51.3827' ;", "   geo:long 
'-2.71909' ", ".");
++              String queryString = StrUtils
++                              .strjoinNL(
++                                              QUERY_PROLOG,
++                                              "SELECT ?s",
++                                              "WHERE {",
++                                              " ?s spatial:nearby (51.3000 
-2.71000 100.0 'miles' -1) .",
++                                              "}");
++              Set<String> expectedURIs = (new HashSet<String>());
++              expectedURIs
++                              .addAll(Arrays
++                                              .asList((new String[] { 
"http://example.org/data/resource/testIndexingStringLiteral"; })));
++              doTestSearch(turtle, queryString, expectedURIs);
++      }
++
++      @Test
++      public void testIndexingWKTLiteral() {
++              boolean jts_context_ready = false;
++              try {
++                      SpatialIndex index = (SpatialIndex) 
dataset.getContext().get(
++                                      SpatialQuery.spatialIndex);
++                      index.getDocDef().setSpatialContextFactory(
++                                      
SpatialQuery.JTS_SPATIAL_CONTEXT_FACTORY_CLASS);
++                      jts_context_ready = true;
++              }catch (NoClassDefFoundError e){
++                      //Log.warn(this, "JTS lib is not on the classpath!");
++              }
++              
++              final String turtle = StrUtils
++                              .strjoinNL(
++                                              TURTLE_PROLOG,
++                                              "<" + RESOURCE_BASE + 
"testIndexingWKTLiteral>",
++                                              "   wkt:asWKT 'POINT(-1.74803 
52.4539)'^^wkt:wktLiteral  ",
++                                              ".");
++              String queryString = StrUtils
++                              .strjoinNL(
++                                              QUERY_PROLOG,
++                                              "SELECT ?s",
++                                              "WHERE {",
++                                              " ?s spatial:nearby (51.3000 
-2.71000 100.0 'miles' -1) .",
++                                              "}");
++              Set<String> expectedURIs = (new HashSet<String>());
++              expectedURIs
++                              .addAll(Arrays
++                                              .asList((new String[] { 
"http://example.org/data/resource/testIndexingWKTLiteral"; })));
++              
++              try {
++                      doTestSearch(turtle, queryString, expectedURIs);
++              }catch (InvalidShapeException e){
++                      if (jts_context_ready){
++                              fail("The exception is not supposed to be 
thrown: "+ e.getMessage());
++                      }
++              }
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithLucene.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithLucene.java
index 1a1a2bf,1a1a2bf..af3ad7a
--- 
a/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithLucene.java
+++ 
b/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithLucene.java
@@@ -1,42 -1,42 +1,42 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial;
--
--import java.io.File;
--import java.io.IOException;
--import org.junit.After;
--import org.junit.Before;
--
--public class TestIndexingSpatialDataWithLucene extends
--              AbstractTestIndexingSpatialData {
--      private static final String INDEX_PATH = 
"target/test/IsNearByPFWithLuceneSpatialIndex";
--      private static final File INDEX_DIR = new File(INDEX_PATH);
--
--      @Before
--      public void init() throws IOException {
--              dataset = SpatialSearchUtil
--                              
.initInMemoryDatasetWithLuceneSpatitalIndex(INDEX_DIR);
--      }
--
--      @After
--      public void destroy() {
--              SpatialSearchUtil.deleteOldFiles(INDEX_DIR);
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial;
++
++import java.io.File;
++import java.io.IOException;
++import org.junit.After;
++import org.junit.Before;
++
++public class TestIndexingSpatialDataWithLucene extends
++              AbstractTestIndexingSpatialData {
++      private static final String INDEX_PATH = 
"target/test/IsNearByPFWithLuceneSpatialIndex";
++      private static final File INDEX_DIR = new File(INDEX_PATH);
++
++      @Before
++      public void init() throws IOException {
++              dataset = SpatialSearchUtil
++                              
.initInMemoryDatasetWithLuceneSpatitalIndex(INDEX_DIR);
++      }
++
++      @After
++      public void destroy() {
++              SpatialSearchUtil.deleteOldFiles(INDEX_DIR);
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithSolr.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithSolr.java
index 3a94f55,3a94f55..d3f70cd
--- 
a/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithSolr.java
+++ 
b/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestIndexingSpatialDataWithSolr.java
@@@ -1,40 -1,40 +1,40 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial;
--
--import org.junit.After;
--import org.junit.Before;
--
--public class TestIndexingSpatialDataWithSolr extends
--              AbstractTestIndexingSpatialData {
--
--      @Before
--      public void init() {
--              dataset = 
SpatialSearchUtil.initInMemoryDatasetWithSolrSpatitalIndex();
--      }
--
--      @After
--      public void destroy() {
--              SpatialIndexSolr index = (SpatialIndexSolr) 
dataset.getContext().get(
--                              SpatialQuery.spatialIndex);
--              index.getServer().shutdown();
--              SpatialSearchUtil.deleteOldSolrDataDir();
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial;
++
++import org.junit.After;
++import org.junit.Before;
++
++public class TestIndexingSpatialDataWithSolr extends
++              AbstractTestIndexingSpatialData {
++
++      @Before
++      public void init() {
++              dataset = 
SpatialSearchUtil.initInMemoryDatasetWithSolrSpatitalIndex();
++      }
++
++      @After
++      public void destroy() {
++              SpatialIndexSolr index = (SpatialIndexSolr) 
dataset.getContext().get(
++                              SpatialQuery.spatialIndex);
++              index.getServer().shutdown();
++              SpatialSearchUtil.deleteOldSolrDataDir();
++      }
++
++}

http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestSpatialPredicatePairValue.java
----------------------------------------------------------------------
diff --cc 
jena-spatial/src/test/java/org/apache/jena/query/spatial/TestSpatialPredicatePairValue.java
index 6e01f71,6e01f71..e98f459
--- 
a/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestSpatialPredicatePairValue.java
+++ 
b/jena-spatial/src/test/java/org/apache/jena/query/spatial/TestSpatialPredicatePairValue.java
@@@ -1,59 -1,59 +1,59 @@@
--/*
-- * Licensed to the Apache Software Foundation (ASF) under one
-- * or more contributor license agreements.  See the NOTICE file
-- * distributed with this work for additional information
-- * regarding copyright ownership.  The ASF licenses this file
-- * to you 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 org.apache.jena.query.spatial;
--
--import junit.framework.TestCase;
--
--import org.junit.Test;
--
--public class TestSpatialPredicatePairValue {
--
--      @Test public void testEqualsAndHashcode(){
--              SpatialPredicatePair pair1 = new SpatialPredicatePair(
--                              EntityDefinition.geo_latitude.asNode(),
--                              EntityDefinition.geo_longitude.asNode());
--              SpatialPredicatePair pair2 = new SpatialPredicatePair(
--                              EntityDefinition.geo_latitude.asNode(),
--                              EntityDefinition.geo_longitude.asNode());
--              TestCase.assertTrue(pair1.equals(pair2));
--              TestCase.assertTrue(pair1.hashCode() == pair2.hashCode());
--
--              SpatialPredicatePairValue value1 = new 
SpatialPredicatePairValue(pair1);
--              value1.setValue(EntityDefinition.geo_latitude.asNode(), 12.0);
--              value1.setValue(EntityDefinition.geo_longitude.asNode(), 23.0);
--
--              SpatialPredicatePairValue value2 = new 
SpatialPredicatePairValue(pair2);
--              value2.setValue(EntityDefinition.geo_latitude.asNode(), 12.0);
--              value2.setValue(EntityDefinition.geo_longitude.asNode(), 23.0);
--
--              TestCase.assertTrue(value1.equals(value2));
--              TestCase.assertTrue(value1.hashCode() == value2.hashCode());
--              
--              value1.setValue(EntityDefinition.geo_latitude.asNode(),null);
--              value2.setValue(EntityDefinition.geo_latitude.asNode(),null);
--              
--              TestCase.assertTrue(value1.equals(value2));
--              TestCase.assertTrue(value1.hashCode() == value2.hashCode());
--              
--              value2.setValue(EntityDefinition.geo_latitude.asNode(),23.0);
--              TestCase.assertFalse(value1.equals(value2));
--              TestCase.assertFalse(value1.hashCode() == value2.hashCode());
--      }
--
--}
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you 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 org.apache.jena.query.spatial;
++
++import junit.framework.TestCase;
++
++import org.junit.Test;
++
++public class TestSpatialPredicatePairValue {
++
++      @Test public void testEqualsAndHashcode(){
++              SpatialPredicatePair pair1 = new SpatialPredicatePair(
++                              EntityDefinition.geo_latitude.asNode(),
++                              EntityDefinition.geo_longitude.asNode());
++              SpatialPredicatePair pair2 = new SpatialPredicatePair(
++                              EntityDefinition.geo_latitude.asNode(),
++                              EntityDefinition.geo_longitude.asNode());
++              TestCase.assertTrue(pair1.equals(pair2));
++              TestCase.assertTrue(pair1.hashCode() == pair2.hashCode());
++
++              SpatialPredicatePairValue value1 = new 
SpatialPredicatePairValue(pair1);
++              value1.setValue(EntityDefinition.geo_latitude.asNode(), 12.0);
++              value1.setValue(EntityDefinition.geo_longitude.asNode(), 23.0);
++
++              SpatialPredicatePairValue value2 = new 
SpatialPredicatePairValue(pair2);
++              value2.setValue(EntityDefinition.geo_latitude.asNode(), 12.0);
++              value2.setValue(EntityDefinition.geo_longitude.asNode(), 23.0);
++
++              TestCase.assertTrue(value1.equals(value2));
++              TestCase.assertTrue(value1.hashCode() == value2.hashCode());
++              
++              value1.setValue(EntityDefinition.geo_latitude.asNode(),null);
++              value2.setValue(EntityDefinition.geo_latitude.asNode(),null);
++              
++              TestCase.assertTrue(value1.equals(value2));
++              TestCase.assertTrue(value1.hashCode() == value2.hashCode());
++              
++              value2.setValue(EntityDefinition.geo_latitude.asNode(),23.0);
++              TestCase.assertFalse(value1.equals(value2));
++              TestCase.assertFalse(value1.hashCode() == value2.hashCode());
++      }
++
++}

Reply via email to