diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index 2a005730dc..7a31fd1b76 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -641,4 +641,11 @@ parent="rmBaseWebscript"> + + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationship.delete.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationship.delete.desc.xml new file mode 100644 index 0000000000..2b16d435ac --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationship.delete.desc.xml @@ -0,0 +1,8 @@ + + Delete records management relationship + Deletes the specified relationship. + /api/node/{store_type}/{store_id}/{id}/targetnode/{target_store_type}/{target_store_id}/{target_id}/uniqueName/{uniqueName} + + user + required + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationship.delete.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationship.delete.json.ftl new file mode 100644 index 0000000000..3b7961a392 --- /dev/null +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationship.delete.json.ftl @@ -0,0 +1,3 @@ +{ + "success": ${success?string} +} \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationshiplabels.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationshiplabels.get.desc.xml index 6518ea45a2..4d34693449 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationshiplabels.get.desc.xml +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationshiplabels.get.desc.xml @@ -5,5 +5,4 @@ user required - internal \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationships.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationships.get.desc.xml index 2e9204be3a..ea306912b1 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationships.get.desc.xml +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/relationships.get.desc.xml @@ -5,5 +5,4 @@ user required - internal \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipDelete.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipDelete.java new file mode 100644 index 0000000000..93237056f6 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipDelete.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.module.org_alfresco_module_rm.script; + +import static org.alfresco.util.WebScriptUtils.getRequestParameterValue; +import static org.alfresco.util.WebScriptUtils.getTemplateVars; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.alfresco.module.org_alfresco_module_rm.relationship.RelationshipService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptException; +import org.springframework.extensions.webscripts.WebScriptRequest; + +/** + * Implementation for Java backed webscript to delete a relationship from a node. + * + * @author Tuna Aksoy + * @since 2.3 + */ +public class RelationshipDelete extends AbstractRmWebScript +{ + /** Constants */ + private static final String STORE_TYPE = "target_store_type"; + private static final String STORE_ID = "target_store_id"; + private static final String ID = "target_id"; + private static final String UNIQUE_NAME = "uniqueName"; + + /** Relationship service */ + private RelationshipService relationshipService; + + /** + * Gets the relationship service + * + * @return The relationship service + */ + protected RelationshipService getRelationshipService() + { + return this.relationshipService; + } + + /** + * Sets the relationship service + * + * @param relationshipService The relationship service + */ + public void setRelationshipService(RelationshipService relationshipService) + { + this.relationshipService = relationshipService; + } + + /** + * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, + * org.springframework.extensions.webscripts.Status, + * org.springframework.extensions.webscripts.Cache) + */ + @Override + protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) + { + String uniqueName = getRequestParameterValue(req, UNIQUE_NAME); + NodeRef source = parseRequestForNodeRef(req); + NodeRef target = parseRequestForTargetNodeRef(req); + + getRelationshipService().removeRelationship(uniqueName, source, target); + getRelationshipService().removeRelationship(uniqueName, target, source); + + Map model = new HashMap(1); + model.put(SUCCESS, true); + return model; + } + + /** + * Gets the node reference of target + * + * @param req The webscript request + * @return The node reference of the target + */ + private NodeRef parseRequestForTargetNodeRef(WebScriptRequest req) + { + Map templateVars = getTemplateVars(req); + String storeType = templateVars.get(STORE_TYPE); + String storeId = templateVars.get(STORE_ID); + String nodeId = templateVars.get(ID); + + NodeRef nodeRef = new NodeRef(storeType, storeId, nodeId); + + if (!getNodeService().exists(nodeRef)) + { + throw new WebScriptException(HttpServletResponse.SC_NOT_FOUND, "Unable to find node: '" + + nodeRef.toString() + "'."); + } + + return nodeRef; + } +} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipsGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipsGet.java index 134cfaf0a0..630c9f0ddf 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipsGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/RelationshipsGet.java @@ -47,6 +47,7 @@ public class RelationshipsGet extends AbstractRmWebScript /** Constants */ private static final String RELATIONSHIPS = "relationships"; private static final String RELATIONSHIP_LABEL = "relationshipLabel"; + private static final String RELATIONSHIP_UNIQUE_NAME = "relationshipUniqueName"; /** The relationship end point */ private enum RelationshipEndPoint @@ -172,6 +173,7 @@ public class RelationshipsGet extends AbstractRmWebScript String nodeDetails = getJsonConversionComponent().toJSON(node, true); JSONObject jsonObject = WebScriptUtils.createJSONObject(nodeDetails); WebScriptUtils.putValuetoJSONObject(jsonObject, RELATIONSHIP_LABEL, label); + WebScriptUtils.putValuetoJSONObject(jsonObject, RELATIONSHIP_UNIQUE_NAME, relationshipDefinition.getUniqueName()); result.add(jsonObject.toString()); }