Iterator oldTemporaryStmtsIter = oldTemporaryStmtsSet.iterator();
Set brokenReificationsStmts = new HashSet();
Set processedStatements = new HashSet();
while (oldTemporaryStmtsIter.hasNext()) {
Statement current = (Statement) oldTemporaryStmtsIter.next();
ReifiedStatement reified;
try {
reified = (ReifiedStatement) current.getSubject().as(
ReifiedStatement.class);
} catch (DoesNotReifyException ex) {
log
.warn(current.getSubject()
+ " "
+ ex.toString()
+ " the model may have become corrupted by multiple instances running, trying to fix");
StmtIterator propIter = current.getSubject().listProperties();
while (propIter.hasNext()) {
Statement deletingStmt = propIter.nextStatement();
log.info("will delete (later): " + deletingStmt);
brokenReificationsStmts.add(deletingStmt);
}
continue;
}
Statement statement = reified.getStatement();
if (processedStatements.contains(statement)) {
log.warn("multiple reifications of th esame stmt");
// throw new RuntimeException("Statement still in model");
}
if (base.contains(statement)) {
if (log.isDebugEnabled()) {
StmtIterator reifProps = reified.listProperties();
while (reifProps.hasNext()) {
Statement currentRP = (Statement) reifProps
.nextStatement();
log.debug("will delete: " + currentRP);
}
reifProps.close();
}
base.removeReification(reified);
reified.removeProperties();
statement.remove();
} else {
deletedStatements.add(statement);
}
processedStatements.add(statement);
}
log.info("old temporary stmts removed");
for (Iterator iter = brokenReificationsStmts.iterator(); iter.hasNext();) {
Statement element = (Statement) iter.next();
element.remove();
}
if (base.supportsTransactions()) {
base.begin();
}
/*
* System.out.println("Model after cleaning"); base.write(System.out);
* try { Thread.sleep(10000); } catch (InterruptedException e) {
* e.printStackTrace();
*/
URL[] modelSectionURLs = getModelSectionURLs();
for (int i = 0; i < modelSectionURLs.length; i++) {
URL url = modelSectionURLs[i];
if (log.isInfoEnabled()) {
log.info("loading model-section: " + url);
}
if (log.isDebugEnabled()) {
log.debug("model size before insertion (base): " + base.size());
}
Model insertion = ModelFactory.createDefaultModel();
String urlString = url.toString();
if (urlString.endsWith(".n3")) {
insertion.read(urlString, "N3");
} else {
insertion.read(urlString);
}
if (log.isDebugEnabled()) {
log.debug("size of insertion (no added reifications): "
+ insertion.size());
}
StmtIterator statements = insertion.listStatements();
Set statementSet = new HashSet();
while (statements.hasNext()) {
statementSet.add(statements.nextStatement());
}
statements.close();
Iterator statementIterator = statementSet.iterator();
while (statementIterator.hasNext()) {
Statement statement = (Statement) statementIterator.next();
// is this really needed?
statement = base.createStatement(statement.getSubject(),
statement.getPredicate(), statement.getObject());
if (!resinsert && deletedStatements.contains(statement)) {
log.info("manually deleted statement " + statement
+ " not re-inserted");
} else {
ReifiedStatement rs = statement.createReifiedStatement();
base.add(statement);
/*
* System.err.println(rs.canAs(ReifiedStatement.class));
* StmtIterator propIter = rs.listProperties(); while
* (propIter.hasNext()) {