NIHVIVO-934,935 code corrections for Merge Individual tool.
This commit is contained in:
parent
c2ad9176d0
commit
b9498fc5f7
1 changed files with 53 additions and 24 deletions
|
@ -1024,56 +1024,85 @@ public class JenaIngestController extends BaseEditController {
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
private String doMerge(String uri1, String uri2,HttpServletResponse response,HttpServletRequest request){
|
private String doMerge(String uri1, String uri2,HttpServletResponse response,HttpServletRequest request){
|
||||||
OntModel vitroJenaModel = (OntModel) getServletContext().getAttribute("baseOntModel");
|
OntModel baseOntModel = (OntModel) getServletContext().getAttribute("baseOntModel");
|
||||||
Resource res1 = vitroJenaModel.getResource(uri1);
|
OntModel ontModel = (OntModel)
|
||||||
Resource res2 = vitroJenaModel.getResource(uri2);
|
getServletContext().getAttribute("jenaOntModel");
|
||||||
|
OntModel infOntModel = (OntModel)
|
||||||
|
getServletContext().getAttribute(JenaBaseDao.INFERENCE_ONT_MODEL_ATTRIBUTE_NAME);
|
||||||
|
boolean functionalPresent = false;
|
||||||
|
Resource res1 = baseOntModel.getResource(uri1);
|
||||||
|
Resource res2 = baseOntModel.getResource(uri2);
|
||||||
String result = null;
|
String result = null;
|
||||||
vitroJenaModel.enterCriticalSection(Lock.WRITE);
|
baseOntModel.enterCriticalSection(Lock.WRITE);
|
||||||
StmtIterator stmtItr1 = vitroJenaModel.listStatements(res1,(Property)null,(RDFNode)null);
|
|
||||||
StmtIterator stmtItr2 = vitroJenaModel.listStatements(res2,(Property)null,(RDFNode)null);
|
StmtIterator stmtItr1 = baseOntModel.listStatements(res1,(Property)null,(RDFNode)null);
|
||||||
|
StmtIterator stmtItr2 = baseOntModel.listStatements(res2,(Property)null,(RDFNode)null);
|
||||||
|
StmtIterator stmtItr3 = baseOntModel.listStatements((Resource)null,(Property)null,(RDFNode)res2);
|
||||||
|
|
||||||
if(!stmtItr1.hasNext()){
|
if(!stmtItr1.hasNext()){
|
||||||
result = "resource 1 not present";
|
result = "resource 1 not present";
|
||||||
res1.removeAll((Property)null);
|
res1.removeAll((Property)null);
|
||||||
vitroJenaModel.leaveCriticalSection();
|
baseOntModel.leaveCriticalSection();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else if(!stmtItr2.hasNext()){
|
else if(!stmtItr2.hasNext()){
|
||||||
result = "resource 2 not present";
|
result = "resource 2 not present";
|
||||||
res2.removeAll((Property)null);
|
res2.removeAll((Property)null);
|
||||||
vitroJenaModel.leaveCriticalSection();
|
baseOntModel.leaveCriticalSection();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
Model leftoverModel = ModelFactory.createDefaultModel();
|
Model leftoverModel = ModelFactory.createDefaultModel();
|
||||||
|
ontModel.enterCriticalSection(Lock.WRITE);
|
||||||
|
infOntModel.enterCriticalSection(Lock.WRITE);
|
||||||
|
try{
|
||||||
|
|
||||||
while(stmtItr2.hasNext()){
|
while(stmtItr2.hasNext()){
|
||||||
|
|
||||||
Statement stmt = stmtItr2.next();
|
Statement stmt = stmtItr2.next();
|
||||||
Property prop = stmt.getPredicate();
|
Property prop = stmt.getPredicate();
|
||||||
OntProperty oprop = vitroJenaModel.getOntProperty(prop.getURI());
|
OntProperty oprop = baseOntModel.getOntProperty(prop.getURI());
|
||||||
if(oprop!=null && oprop.isFunctionalProperty()){
|
if(oprop!=null && oprop.isFunctionalProperty()){
|
||||||
leftoverModel.add(res2,stmt.getPredicate(),stmt.getObject());
|
leftoverModel.add(res2,stmt.getPredicate(),stmt.getObject());
|
||||||
|
functionalPresent = true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
vitroJenaModel.add(res1,stmt.getPredicate(),stmt.getObject());
|
baseOntModel.add(res1,stmt.getPredicate(),stmt.getObject());
|
||||||
|
ontModel.add(res1,stmt.getPredicate(),stmt.getObject());
|
||||||
|
infOntModel.add(res1,stmt.getPredicate(),stmt.getObject());
|
||||||
counter++;
|
counter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res2.removeAll((Property)null);
|
|
||||||
vitroJenaModel.leaveCriticalSection();
|
while(stmtItr3.hasNext()){
|
||||||
/*response.setContentType("RDF/XML-ABBREV");
|
Statement stmt = stmtItr3.nextStatement();
|
||||||
try{
|
Resource sRes = stmt.getSubject();
|
||||||
OutputStream outStream = response.getOutputStream();
|
Property sProp = stmt.getPredicate();
|
||||||
outStream.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>".getBytes());
|
baseOntModel.add(sRes,sProp,res1);
|
||||||
leftoverModel.write( outStream,"RDF/XML-ABBREV");
|
ontModel.add(sRes,sProp,res1);
|
||||||
outStream.flush();
|
infOntModel.add(sRes,sProp,res1);
|
||||||
outStream.close();
|
}
|
||||||
|
Resource ontRes = ontModel.getResource(res2.getURI());
|
||||||
|
Resource infRes = infOntModel.getResource(res2.getURI());
|
||||||
|
baseOntModel.removeAll((Resource)null,(Property)null,(RDFNode)res2);
|
||||||
|
ontModel.removeAll((Resource)null,(Property)null,(RDFNode)res2);
|
||||||
|
infOntModel.removeAll((Resource)null,(Property)null,(RDFNode)res2);
|
||||||
|
res2.removeAll((Property)null);
|
||||||
|
ontRes.removeAll((Property)null);
|
||||||
|
infRes.removeAll((Property)null);
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
baseOntModel.leaveCriticalSection();
|
||||||
|
infOntModel.leaveCriticalSection();
|
||||||
|
ontModel.leaveCriticalSection();
|
||||||
}
|
}
|
||||||
catch(IOException ioe){
|
|
||||||
throw new RuntimeException(ioe);
|
|
||||||
}*/
|
|
||||||
request.getSession().setAttribute("leftoverModel", leftoverModel);
|
request.getSession().setAttribute("leftoverModel", leftoverModel);
|
||||||
result = "merging done for " + counter + " statements.";
|
if(counter>0 && functionalPresent)
|
||||||
|
result = "merged " + counter + " statements. Some statements could not be merged.";
|
||||||
|
else if(counter>0 && !functionalPresent)
|
||||||
|
result = "merged " + counter + " statements.";
|
||||||
|
else if(counter==0)
|
||||||
|
result = "No statements merged";
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue