From f6676d58b7002fcb01768dc85e5885eae4a5bdcb Mon Sep 17 00:00:00 2001 From: bjl23 Date: Sun, 16 Jan 2011 22:18:11 +0000 Subject: [PATCH] NIHVIVO-1752 bugix for backend object property editing (merge from nihvivo 1.2 maint branch) --- .../freemarker/SDBSetupController.java | 73 +++++++++++++++++++ .../jena/ObjectPropertyStatementDaoSDB.java | 9 +-- .../dao/jena/PropertyInstanceDaoJena.java | 53 ++++++++------ 3 files changed, 107 insertions(+), 28 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SDBSetupController.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SDBSetupController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SDBSetupController.java new file mode 100644 index 000000000..4c41336e6 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SDBSetupController.java @@ -0,0 +1,73 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ +package edu.cornell.mannlib.vitro.webapp.controller.freemarker; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RedirectResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; +import edu.cornell.mannlib.vitro.webapp.reasoner.SimpleReasoner; + +public class SDBSetupController extends FreemarkerHttpServlet { + + private static final Log log = LogFactory.getLog( + SimpleReasonerRecomputeController.class); + + protected ResponseValues processRequest(VitroRequest vreq) { + // Due to requiresLoginLevel(), we don't get here unless logged in as DBA + if (!LoginStatusBean.getBean(vreq) + .isLoggedInAtLeast(LoginStatusBean.DBA)) { + return new RedirectResponseValues(UrlBuilder.getUrl(Route.LOGIN)); + } + Map body = new HashMap(); + + String messageStr = ""; + try { + + if (false) { + + } else { + if (false) { + + } else { + new Thread(new SDBSetupRunner()).start(); + messageStr = "SDB setup started"; + } + } + + } catch (Exception e) { + log.error("Error setting up SDB store", e); + body.put("errorMessage", + "Error setting up SDB store: " + + e.getMessage()); + return new ExceptionResponseValues( + Template.ERROR_MESSAGE.toString(), body, e); + } + + body.put("message", messageStr); + return new TemplateResponseValues(Template.MESSAGE.toString(), body); + } + + private class SDBSetupRunner implements Runnable { + + private SimpleReasoner simpleReasoner; + + public SDBSetupRunner() { + + } + + public void run() { + + } + + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoSDB.java index a31cb4533..a93ab8ee0 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ObjectPropertyStatementDaoSDB.java @@ -52,10 +52,10 @@ public class ObjectPropertyStatementDaoSDB extends " ?o <" + RDFS.label.getURI() + "> ?oLabel . \n" + " ?o <" + VitroVocabulary.MONIKER + "> ?oMoniker \n" + "} WHERE { GRAPH ?g { \n" + - " <" + entity.getURI() + "> ?p ?o . \n" + - " ?o a ?oType \n" + - " OPTIONAL { ?o <" + RDFS.label.getURI() + "> ?oLabel } \n" + - " OPTIONAL { ?o <" + VitroVocabulary.MONIKER + "> ?oMoniker } \n" + + " <" + entity.getURI() + "> ?p ?o \n" + + " OPTIONAL { GRAPH ?h { ?o a ?oType } } \n" + + " OPTIONAL { GRAPH ?i { ?o <" + RDFS.label.getURI() + "> ?oLabel } } \n" + + " OPTIONAL { GRAPH ?j { ?o <" + VitroVocabulary.MONIKER + "> ?oMoniker } } \n" + "} }"; long startTime = System.currentTimeMillis(); Model m = null; @@ -85,7 +85,6 @@ public class ObjectPropertyStatementDaoSDB extends try { while (propIt.hasNext()) { Statement st = (Statement) propIt.next(); - if (st.getObject().isResource() && !(NONUSER_NAMESPACES.contains(st.getPredicate().getNameSpace()))) { try { ObjectPropertyStatement objPropertyStmt = new ObjectPropertyStatementImpl(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyInstanceDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyInstanceDaoJena.java index 2b52a24c4..245cf538c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyInstanceDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/PropertyInstanceDaoJena.java @@ -44,7 +44,7 @@ public class PropertyInstanceDaoJena extends JenaBaseDao implements } public void deleteObjectPropertyStatement(String subjectURI, String propertyURI, String objectURI) { - deleteObjectPropertyStatement(subjectURI, propertyURI, objectURI, getOntModelSelector().getABoxModel()); + deleteObjectPropertyStatement(subjectURI, propertyURI, objectURI, getOntModelSelector().getFullModel()); } public void deleteObjectPropertyStatement(String subjectURI, String propertyURI, String objectURI, OntModel ontModel) { @@ -316,35 +316,42 @@ public class PropertyInstanceDaoJena extends JenaBaseDao implements } public int insertProp(PropertyInstanceIface prop) { - return insertProp(prop, getOntModelSelector().getABoxModel()); + return insertProp(prop, getOntModelSelector()); } - public int insertProp(PropertyInstanceIface prop, OntModel ontModel) { + public int insertProp(PropertyInstanceIface prop, OntModelSelector oms) { + OntModel ontModel = oms.getABoxModel(); + OntModel tboxModel = oms.getTBoxModel(); ontModel.enterCriticalSection(Lock.WRITE); try { - Resource subjRes = ontModel.getResource(prop.getSubjectEntURI()); - OntProperty pred = ontModel.getOntProperty(prop.getPropertyURI()); - Resource objRes = ontModel.getResource(prop.getObjectEntURI()); - if ( (subjRes != null) && (pred != null) && (objRes != null) ) { - getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),true,prop.getSubjectEntURI())); - try { - ontModel.add(subjRes,pred,objRes); - updatePropertyDateTimeValue(subjRes,MODTIME,Calendar.getInstance().getTime(),getOntModel()); - } finally { - getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),false,prop.getSubjectEntURI())); - } - OntProperty invPred = pred.getInverse(); - if (invPred != null) { - getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),true,prop.getObjectEntURI())); - try { - ontModel.add(objRes,invPred,subjRes); - updatePropertyDateTimeValue(objRes,MODTIME,Calendar.getInstance().getTime(),getOntModel()); - } finally { - getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),false,prop.getSubjectEntURI())); + tboxModel.enterCriticalSection(Lock.READ); + try { + Resource subjRes = ontModel.getResource(prop.getSubjectEntURI()); + OntProperty pred = tboxModel.getOntProperty(prop.getPropertyURI()); + Resource objRes = ontModel.getResource(prop.getObjectEntURI()); + if ( (subjRes != null) && (pred != null) && (objRes != null) ) { + getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),true,prop.getSubjectEntURI())); + try { + ontModel.add(subjRes,pred,objRes); + updatePropertyDateTimeValue(subjRes,MODTIME,Calendar.getInstance().getTime(),getOntModel()); + } finally { + getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),false,prop.getSubjectEntURI())); + } + OntProperty invPred = pred.getInverse(); + if (invPred != null) { + getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),true,prop.getObjectEntURI())); + try { + ontModel.add(objRes,invPred,subjRes); + updatePropertyDateTimeValue(objRes,MODTIME,Calendar.getInstance().getTime(),getOntModel()); + } finally { + getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),false,prop.getSubjectEntURI())); + } } } + return 0; + } finally { + tboxModel.leaveCriticalSection(); } - return 0; } finally { ontModel.leaveCriticalSection(); }