diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/DeletePropertyController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/DeletePropertyController.java
index 4f1bbd1c4..5586b8cb3 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/DeletePropertyController.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/DeletePropertyController.java
@@ -167,21 +167,21 @@ public class DeletePropertyController extends FreemarkerHttpServlet {
}
-
-
-
-
//process object property
private void processObjectProperty(VitroRequest vreq) {
ObjectProperty prop = EditConfigurationUtils.getObjectProperty(vreq);
//if this property is true, it means the object needs to be deleted along with statement
- if(prop.getStubObjectRelation())
+ //while the second test is to see if a different object uri (i.e. not the direct objet of the predicate)
+ //needs to be deleted
+ if(prop.getStubObjectRelation() || hasDeleteObjectUri(vreq))
{
deleteObjectIndividual(vreq);
}
- deleteObjectPropertyStatement(vreq);
+ if(!hasDeleteObjectUri(vreq)) {
+ deleteObjectPropertyStatement(vreq);
+ }
}
@@ -194,7 +194,7 @@ public class DeletePropertyController extends FreemarkerHttpServlet {
wdf.getPropertyInstanceDao().deleteObjectPropertyStatement(subjectUri, predicateUri, objectUri);
}
- private Individual getObjectIndividualForStubRelation(VitroRequest vreq, String objectUri) {
+ private Individual getObjectIndividualForDeletion(VitroRequest vreq, String objectUri) {
Individual object = EditConfigurationUtils.getIndividual(vreq, objectUri);
if(object == null) {
@@ -208,9 +208,13 @@ public class DeletePropertyController extends FreemarkerHttpServlet {
private void deleteObjectIndividual(VitroRequest vreq) {
String objectUri = EditConfigurationUtils.getObjectUri(vreq);
- Individual object = getObjectIndividualForStubRelation(vreq, objectUri);
+ if(hasDeleteObjectUri(vreq)) {
+ //if a different individual needs to be deleted, get that uri instead
+ objectUri = getDeleteObjectUri(vreq);
+ }
+ Individual object = getObjectIndividualForDeletion(vreq, objectUri);
if(object != null) {
- log.warn("Deleting individual " + object.getName() + "since property has been set to force range object deletion");
+ log.warn("Deleting individual " + object.getName() + "since property has been set to force range object deletion or has been set to delete a specific object");
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
wdf.getIndividualDao().deleteIndividual(object);
} else {
@@ -218,6 +222,16 @@ public class DeletePropertyController extends FreemarkerHttpServlet {
log.error("could not find object as request attribute or in model " + objectUri);
}
}
+
+ //This checks if the object uri is not the individual to be deleted but another individual connected
+ private String getDeleteObjectUri(VitroRequest vreq) {
+ return (String) vreq.getParameter("deleteObjectUri");
+ }
+
+ private boolean hasDeleteObjectUri(VitroRequest vreq) {
+ String deleteObjectUri = getDeleteObjectUri(vreq);
+ return (deleteObjectUri != null && !deleteObjectUri.isEmpty());
+ }
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java
index 3e685ed1e..a64025294 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/ontology/update/KnowledgeBaseUpdater.java
@@ -346,7 +346,9 @@ public class KnowledgeBaseUpdater {
}
public static boolean isUpdatableABoxGraph(String graphName) {
- return (!graphName.contains("tbox") && !graphName.contains("filegraph"));
+ return (graphName != null && !graphName.contains("tbox")
+ && !graphName.contains("filegraph")
+ && !graphName.contains("x-arq:UnionGraph"));
}
/**
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
index 0f739dd5d..8c8f53533 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java
@@ -141,7 +141,7 @@ public class UpdateKnowledgeBase implements ServletContextListener {
KnowledgeBaseUpdater ontologyUpdater = new KnowledgeBaseUpdater(settings);
boolean requiredUpdate = ontologyUpdater.updateRequired(ctx);
- if(!JenaDataSourceSetupBase.isFirstStartup()) {
+ if(requiredUpdate && !JenaDataSourceSetupBase.isFirstStartup()) {
try {
ctx.setAttribute(KBM_REQURIED_AT_STARTUP, Boolean.TRUE);
migrationChangesMade = ontologyUpdater.update(ctx);
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java
index cac4c484e..5df5485e1 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/edit/EditConfigurationTemplateModel.java
@@ -491,6 +491,10 @@ public class EditConfigurationTemplateModel extends BaseTemplateModel {
return getDataLiteralValuesFromParameter();
}
+ //Get a custom object uri for deletion if one exists, i.e. not the object uri for the property
+ public String getCustomDeleteObjectUri() {
+ return (String) vreq.getParameter("deleteObjectUri");
+ }
//Used for deletion in case there's a specific template to be employed
public String getDeleteTemplate() {
String templateName = vreq.getParameter("templateName");
diff --git a/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl b/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl
index 7e2f13cac..60c74c4e3 100644
--- a/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl
+++ b/webapp/web/templates/freemarker/edit/forms/confirmDeletePropertyForm.ftl
@@ -32,7 +32,7 @@
-
+
<#if editConfiguration.dataProperty = true>
diff --git a/webapp/web/templates/freemarker/lib/lib-properties.ftl b/webapp/web/templates/freemarker/lib/lib-properties.ftl
index efb98f2a8..16d950dad 100644
--- a/webapp/web/templates/freemarker/lib/lib-properties.ftl
+++ b/webapp/web/templates/freemarker/lib/lib-properties.ftl
@@ -205,6 +205,20 @@ name will be used as the label. -->
<#macro deleteLink propertyLocalName propertyName statement>
<#local url = statement.deleteUrl>
<#if url?has_content>
+ <#--We need to specify the actual object to be deleted as it is different from the object uri-->
+ <#if propertyLocalName?contains("ARG_2000028")>
+ <#if propertyName?contains("mailing address")>
+ <#local url = url + "&deleteObjectUri=" + "${statement.address!}">
+ <#elseif propertyName?contains("phone") || propertyName?contains("fax")>
+ <#local url = url + "&deleteObjectUri=" + "${statement.phone!}">
+ <#elseif propertyName?contains("primary email") || propertyName?contains("additional emails")>
+ <#local url = url + "&deleteObjectUri=" + "${statement.email!}">
+ <#elseif propertyName?contains("full name")>
+ <#local url = url + "&deleteObjectUri=" + "${statement.fullName!}">
+ <#elseif propertyName?contains("preferred title")>
+ <#local url = url + "&deleteObjectUri=" + "${statement.title!}">
+ #if>
+ #if>
<@showDeleteLink propertyLocalName url />
#if>
#macro>