From bf8e2b477813d2302525e06fdf1eca4dabecf5f4 Mon Sep 17 00:00:00 2001 From: tworrall Date: Mon, 11 Nov 2013 15:28:35 -0500 Subject: [PATCH 1/3] editLink macro was referencing displayNames rather than rangeURIs --- .../templates/freemarker/lib/lib-properties.ftl | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/webapp/web/templates/freemarker/lib/lib-properties.ftl b/webapp/web/templates/freemarker/lib/lib-properties.ftl index d5b5ec9c2..efb98f2a8 100644 --- a/webapp/web/templates/freemarker/lib/lib-properties.ftl +++ b/webapp/web/templates/freemarker/lib/lib-properties.ftl @@ -171,22 +171,22 @@ name will be used as the label. --> <#macro editingLinks propertyLocalName propertyName statement editable rangeUri=""> <#if editable > <#if (!rangeUri?contains("Authorship") && !rangeUri?contains("URL") && !rangeUri?contains("Editorship") && propertyLocalName != "hasResearchArea")> - <@editLink propertyLocalName propertyName statement /> + <@editLink propertyLocalName propertyName statement rangeUri/> <@deleteLink propertyLocalName propertyName statement /> -<#macro editLink propertyLocalName propertyName statement> +<#macro editLink propertyLocalName propertyName statement rangeUri=""> <#if propertyLocalName?contains("ARG_2000028")> - <#if propertyName?contains("mailing address")> + <#if rangeUri?contains("Address")> <#local url = statement.editUrl + "&addressUri=" + "${statement.address!}"> - <#elseif propertyName?contains("phone") || propertyName?contains("fax")> + <#elseif rangeUri?contains("Telephone") || rangeUri?contains("Fax")> <#local url = statement.editUrl + "&phoneUri=" + "${statement.phone!}"> - <#elseif propertyName?contains("primary email") || propertyName?contains("additional emails")> + <#elseif rangeUri?contains("Work") || rangeUri?contains("Email")> <#local url = statement.editUrl + "&emailUri=" + "${statement.email!}"> - <#elseif propertyName?contains("full name")> + <#elseif rangeUri?contains("Name")> <#local url = statement.editUrl + "&fullNameUri=" + "${statement.fullName!}"> - <#elseif propertyName?contains("preferred title")> + <#elseif rangeUri?contains("Title")> <#local url = statement.editUrl + "&titleUri=" + "${statement.title!}"> <#else> From fc90df70f3ad8709e87cc8b479a4de1e23b9c5ab Mon Sep 17 00:00:00 2001 From: brianjlowe Date: Mon, 11 Nov 2013 16:03:46 -0500 Subject: [PATCH 2/3] VIVO-511 allowing only 1 complete migration --- .../vitro/webapp/ontology/update/KnowledgeBaseUpdater.java | 4 +++- .../vitro/webapp/servlet/setup/UpdateKnowledgeBase.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) 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); From 769b53e919bc50806661019ac04b11bbe777d615 Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Mon, 11 Nov 2013 18:28:11 -0500 Subject: [PATCH 3/3] Updates to enable deletion of object individuals for vcard editing --- .../freemarker/DeletePropertyController.java | 32 +++++++++++++------ .../edit/EditConfigurationTemplateModel.java | 4 +++ .../edit/forms/confirmDeletePropertyForm.ftl | 2 +- .../freemarker/lib/lib-properties.ftl | 14 ++++++++ 4 files changed, 42 insertions(+), 10 deletions(-) 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/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 d5b5ec9c2..815fd9e20 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!}"> + + <@showDeleteLink propertyLocalName url />