From b9498fc5f76c1e632353457297e5844a66b4765a Mon Sep 17 00:00:00 2001 From: ass92 Date: Thu, 22 Jul 2010 22:48:01 +0000 Subject: [PATCH] NIHVIVO-934,935 code corrections for Merge Individual tool. --- .../controller/jena/JenaIngestController.java | 77 +++++++++++++------ 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java index f18a5dd23..bfea6c89c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/jena/JenaIngestController.java @@ -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("".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; }