QuerySolution qsol1 = results.get(0) ;
String entityField = qsol1.getLiteral("entityField").getLexicalForm() ;
String geoField = qsol1.getLiteral("geoField").getLexicalForm() ;
EntityDefinition docDef = new EntityDefinition(entityField, geoField) ;
String qs2 = StrUtils.strjoinNL("SELECT * { ?definition :hasSpatialPredicatePairs [ list:member [ :latitude ?latitude ; :longitude ?longitude ] ]}") ;
Query query2 = QueryFactory.create(prologue+" "+qs2) ;
QueryExecution qexec2 = QueryExecutionFactory.create(query2, model, qsol1) ;
ResultSet rs2 = qexec2.execSelect() ;
List<QuerySolution> mapEntries = ResultSetFormatter.toList(rs2) ;
for ( QuerySolution qsol : mapEntries ) {
Resource latitude = qsol.getResource("latitude") ;
Resource longitude = qsol.getResource("longitude") ;
docDef.addSpatialPredicatePair(latitude, longitude);
}
String qs3 = StrUtils.strjoinNL("SELECT * { ?definition :hasWKTPredicates [ list:member ?wkt ] }") ;
Query query3 = QueryFactory.create(prologue+" "+qs3) ;
QueryExecution qexec3 = QueryExecutionFactory.create(query3, model, qsol1) ;
ResultSet rs3 = qexec3.execSelect() ;
mapEntries = ResultSetFormatter.toList(rs3) ;
for ( QuerySolution qsol : mapEntries ) {
Resource wkt = qsol.getResource("wkt") ;
docDef.addWKTPredicate(wkt);
}
String qs4 = StrUtils.strjoinNL("SELECT * { ?definition :spatialContextFactory ?factory }") ;
Query query4 = QueryFactory.create(prologue+" "+qs4) ;
QueryExecution qexec4 = QueryExecutionFactory.create(query4, model, qsol1) ;
ResultSet rs4 = qexec4.execSelect() ;
List<QuerySolution> results4 = ResultSetFormatter.toList(rs4) ;
if (results4.size() ==0){
return docDef;
} else if ( results4.size() !=1 ) {
Log.warn(this, "Multiple matches for SpatialContextFactory for : "+root) ;
throw new SpatialIndexException("Multiple matches for SpatialContextFactory for : "+root) ;
} else {
QuerySolution qsol4 = results4.get(0);
String spatialContextFactory = qsol4.getLiteral("factory").getLexicalForm() ;
try {
docDef.setSpatialContextFactory(spatialContextFactory);
}catch (NoClassDefFoundError e){
Log.warn(this, "Custom SpatialContextFactory lib is not ready in classpath:"+ e.getMessage()) ;
}
return docDef ;
}