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;
|
||||
}
|
||||
private String doMerge(String uri1, String uri2,HttpServletResponse response,HttpServletRequest request){
|
||||
OntModel vitroJenaModel = (OntModel) getServletContext().getAttribute("baseOntModel");
|
||||
Resource res1 = vitroJenaModel.getResource(uri1);
|
||||
Resource res2 = vitroJenaModel.getResource(uri2);
|
||||
OntModel baseOntModel = (OntModel) getServletContext().getAttribute("baseOntModel");
|
||||
OntModel ontModel = (OntModel)
|
||||
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;
|
||||
vitroJenaModel.enterCriticalSection(Lock.WRITE);
|
||||
StmtIterator stmtItr1 = vitroJenaModel.listStatements(res1,(Property)null,(RDFNode)null);
|
||||
StmtIterator stmtItr2 = vitroJenaModel.listStatements(res2,(Property)null,(RDFNode)null);
|
||||
baseOntModel.enterCriticalSection(Lock.WRITE);
|
||||
|
||||
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()){
|
||||
result = "resource 1 not present";
|
||||
res1.removeAll((Property)null);
|
||||
vitroJenaModel.leaveCriticalSection();
|
||||
baseOntModel.leaveCriticalSection();
|
||||
return result;
|
||||
}
|
||||
else if(!stmtItr2.hasNext()){
|
||||
result = "resource 2 not present";
|
||||
res2.removeAll((Property)null);
|
||||
vitroJenaModel.leaveCriticalSection();
|
||||
baseOntModel.leaveCriticalSection();
|
||||
return result;
|
||||
}
|
||||
|
||||
int counter = 0;
|
||||
Model leftoverModel = ModelFactory.createDefaultModel();
|
||||
ontModel.enterCriticalSection(Lock.WRITE);
|
||||
infOntModel.enterCriticalSection(Lock.WRITE);
|
||||
try{
|
||||
|
||||
while(stmtItr2.hasNext()){
|
||||
|
||||
Statement stmt = stmtItr2.next();
|
||||
Property prop = stmt.getPredicate();
|
||||
OntProperty oprop = vitroJenaModel.getOntProperty(prop.getURI());
|
||||
OntProperty oprop = baseOntModel.getOntProperty(prop.getURI());
|
||||
if(oprop!=null && oprop.isFunctionalProperty()){
|
||||
leftoverModel.add(res2,stmt.getPredicate(),stmt.getObject());
|
||||
functionalPresent = true;
|
||||
}
|
||||
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++;
|
||||
}
|
||||
}
|
||||
res2.removeAll((Property)null);
|
||||
vitroJenaModel.leaveCriticalSection();
|
||||
/*response.setContentType("RDF/XML-ABBREV");
|
||||
try{
|
||||
OutputStream outStream = response.getOutputStream();
|
||||
outStream.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>".getBytes());
|
||||
leftoverModel.write( outStream,"RDF/XML-ABBREV");
|
||||
outStream.flush();
|
||||
outStream.close();
|
||||
|
||||
while(stmtItr3.hasNext()){
|
||||
Statement stmt = stmtItr3.nextStatement();
|
||||
Resource sRes = stmt.getSubject();
|
||||
Property sProp = stmt.getPredicate();
|
||||
baseOntModel.add(sRes,sProp,res1);
|
||||
ontModel.add(sRes,sProp,res1);
|
||||
infOntModel.add(sRes,sProp,res1);
|
||||
}
|
||||
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);
|
||||
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;
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue