QueryExecution qexec1 = QueryExecutionFactory.create(query1, model) ;
ResultSet rs1 = qexec1.execSelect() ;
List<QuerySolution> results = ResultSetFormatter.toList(rs1) ;
if ( results.size() == 0 ) {
Log.warn(this, "Failed to find a valid EntityMap for : "+root) ;
throw new TextIndexException("Failed to find a valid EntityMap for : "+root) ;
}
if ( results.size() !=1 ) {
Log.warn(this, "Multiple matches for EntityMap for : "+root) ;
throw new TextIndexException("Multiple matches for EntityMap for : "+root) ;
}
QuerySolution qsol1 = results.get(0) ;
String entityField = qsol1.getLiteral("entityField").getLexicalForm() ;
String graphField = qsol1.contains("graphField") ? qsol1.getLiteral("graphField").getLexicalForm() : null;
String defaultField = qsol1.contains("dftField") ? qsol1.getLiteral("dftField").getLexicalForm() : null ;
MultiMap<String, Node> mapDefs = MultiMap.createMapList() ;
Map<String, Analyzer> analyzerDefs = new HashMap<String, Analyzer>();
Statement listStmt = root.getProperty(TextVocab.pMap);
while (listStmt != null) {
RDFNode n = listStmt.getObject();
if (! n.isResource()) {
throw new TextIndexException("Text list node is not a resource : " + n);
}
Resource listResource = (Resource) n;
if (listResource.equals(RDF.nil)) {
break; // end of the list
}
Statement listEntryStmt = listResource.getProperty(RDF.first);
if (listEntryStmt == null) {
throw new TextIndexException("Text map list is not well formed. No rdf:first property");
}
n = listEntryStmt.getObject();
if (! n.isResource()) {
throw new TextIndexException("Text map list entry is not a resource : " + n);
}
Resource listEntry = (Resource) n;
Statement fieldStatement = listEntry.getProperty(TextVocab.pField);
if (fieldStatement == null) {
throw new TextIndexException("Text map entry has no field property");
}
n = fieldStatement.getObject();
if (! n.isLiteral()) {
throw new TextIndexException("Text map entry field property has no literal value : " + n);
}
String field = ((Literal)n).getLexicalForm();
Statement predicateStatement = listEntry.getProperty(TextVocab.pPredicate);
if (predicateStatement == null) {
throw new TextIndexException("Text map entry has no predicate property");
}
n = predicateStatement.getObject();
if (! n.isURIResource()) {
throw new TextIndexException("Text map entry predicate property has non resource value : " + n);
}
Resource predicate = (Resource) n;
mapDefs.put(field, predicate.asNode()) ;
Statement analyzerStatement = listEntry.getProperty(TextVocab.pAnalyzer);
if (analyzerStatement != null) {
n = analyzerStatement.getObject();
if (! n.isResource()) {
throw new TextIndexException("Text map entry analyzer property is not a resource : " + n);
}
Resource analyzerResource = (Resource) n;
Analyzer analyzer = (Analyzer) a.open(analyzerResource);
analyzerDefs.put(field, analyzer);
}
// move on to the next element in the list
listStmt = listResource.getProperty(RDF.rest);
}
// Primary field/predicate
if ( defaultField != null ) {
Collection<Node> c = mapDefs.get(defaultField) ;
if ( c == null )
throw new TextIndexException("No definition of primary field '"+defaultField+"'") ;
}
EntityDefinition docDef = new EntityDefinition(entityField, defaultField, graphField) ;
for ( String f : mapDefs.keys() ) {
for ( Node p : mapDefs.get(f))