diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml
index cfb4536abc..bd97c0a7a2 100644
--- a/config/alfresco/public-rest-context.xml
+++ b/config/alfresco/public-rest-context.xml
@@ -786,7 +786,7 @@
-
+
@@ -1199,87 +1199,47 @@
-
+
- org.alfresco.service.cmr.repository.NodeService
+ org.alfresco.rest.api.nodes.NodeAssocService
-
+
-
+
-
-
-
+
- org.alfresco.service.cmr.repository.NodeService.getStores=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.createStore=ACL_METHOD.ROLE_ADMINISTRATOR
- org.alfresco.service.cmr.repository.NodeService.exists=ACL_ALLOW
- org.alfresco.service.cmr.repository.NodeService.getNodeStatus=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getNodeRef=AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getAllRootNodes=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getRootNode=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.createNode=ACL_NODE.0.sys:base.CreateChildren
- org.alfresco.service.cmr.repository.NodeService.moveNode=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.CreateChildren
- org.alfresco.service.cmr.repository.NodeService.setChildAssociationIndex=ACL_PARENT.0.sys:base.WriteProperties
- org.alfresco.service.cmr.repository.NodeService.getType=ACL_ALLOW
- org.alfresco.service.cmr.repository.NodeService.setType=ACL_NODE.0.sys:base.WriteProperties
- org.alfresco.service.cmr.repository.NodeService.addAspect=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership
- org.alfresco.service.cmr.repository.NodeService.removeAspect=ACL_NODE.0.sys:base.WriteProperties
- org.alfresco.service.cmr.repository.NodeService.hasAspect=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getAspects=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.deleteNode=ACL_NODE.0.sys:base.DeleteNode
- org.alfresco.service.cmr.repository.NodeService.addChild=ACL_NODE.0.sys:base.CreateChildren,ACL_NODE.1.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.removeChild=ACL_NODE.0.sys:base.DeleteChildren,ACL_PRI_CHILD_ASSOC_ON_CHILD.0.1.sys:base.DeleteNode
- org.alfresco.service.cmr.repository.NodeService.removeChildAssociation=ACL_PARENT.0.sys:base.DeleteChildren,ACL_PRI_CHILD_ASSOC_ON_CHILD.0.sys:base.DeleteNode
- org.alfresco.service.cmr.repository.NodeService.removeSeconaryChildAssociation=ACL_PARENT.0.sys:base.DeleteChildren
- org.alfresco.service.cmr.repository.NodeService.removeSecondaryChildAssociation=ACL_PARENT.0.sys:base.DeleteChildren
- org.alfresco.service.cmr.repository.NodeService.getProperties=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getProperty=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.setProperties=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership
- org.alfresco.service.cmr.repository.NodeService.addProperties=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership
- org.alfresco.service.cmr.repository.NodeService.setProperty=ACL_NODE.0.sys:base.WriteProperties,ACL_ITEM.0.cm:ownable.TakeOwnership
- org.alfresco.service.cmr.repository.NodeService.removeProperty=ACL_NODE.0.sys:base.WriteProperties
- org.alfresco.service.cmr.repository.NodeService.getParentAssocs=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getChildAssocs=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getChildByName=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getChildAssocsByPropertyValue=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getChildrenByName=ACL_NODE.0.sys:base.ReadChildren,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getPrimaryParent=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.createAssociation=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.1.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.removeAssociation=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.setAssociations=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.2.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getTargetAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getSourceAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getAssoc=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getPath=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getPaths=ACL_NODE.0.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.getStoreArchiveNode=ACL_NODE.0.sys:base.Read
- org.alfresco.service.cmr.repository.NodeService.restoreNode=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.CreateChildren
- org.alfresco.service.cmr.repository.NodeService.getChildAssocsWithoutParentAssocsOfType=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties
- org.alfresco.service.cmr.repository.NodeService.countChildAssocs=ACL_NODE.0.sys:base.ReadChildren
- org.alfresco.service.cmr.repository.NodeService.*=ACL_DENY
+ org.alfresco.rest.api.nodes.NodeAssocService.createAssociation=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.1.sys:base.ReadProperties
+ org.alfresco.rest.api.nodes.NodeAssocService.removeAssociation=ACL_NODE.0.sys:base.DeleteNode,ACL_NODE.1.sys:base.ReadProperties
+ org.alfresco.rest.api.nodes.NodeAssocService.setAssociations=ACL_NODE.0.sys:base.WriteProperties,ACL_NODE.2.sys:base.ReadProperties
+ org.alfresco.rest.api.nodes.NodeAssocService.getTargetAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_NODE.sys:base.ReadProperties
+ org.alfresco.rest.api.nodes.NodeAssocService.getSourceAssocs=ACL_NODE.0.sys:base.ReadProperties,AFTER_ACL_PARENT.sys:base.ReadProperties
+ org.alfresco.rest.api.nodes.NodeAssocService.getAssoc=ACL_ALLOW,AFTER_ACL_NODE.sys:base.ReadProperties
+ org.alfresco.rest.api.nodes.NodeAssocService.*=ACL_DENY
+
+
+
+
+
diff --git a/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java b/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java
index 65c8e5bbca..bf3964862c 100644
--- a/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java
+++ b/source/java/org/alfresco/rest/api/nodes/AbstractNodeRelation.java
@@ -69,6 +69,7 @@ public class AbstractNodeRelation implements InitializingBean
protected ServiceRegistry sr;
protected NodeService nodeService;
+ protected NodeAssocService nodeAssocService; // wraps initial Peer Assoc permissions
protected NamespaceService namespaceService;
protected DictionaryService dictionaryService;
protected Nodes nodes;
@@ -84,9 +85,9 @@ public class AbstractNodeRelation implements InitializingBean
}
// Introduces permissions for Node Assoc (see public-rest-context.xml)
- public void setNodeService(NodeService nodeService)
+ public void setNodeAssocService(NodeAssocService nodeAssocService)
{
- this.nodeService = nodeService;
+ this.nodeAssocService = nodeAssocService;
}
@Override
@@ -95,7 +96,7 @@ public class AbstractNodeRelation implements InitializingBean
PropertyCheck.mandatory(this, "serviceRegistry", sr);
ParameterCheck.mandatory("nodes", this.nodes);
- //this.nodeService = sr.getNodeService();
+ this.nodeService = sr.getNodeService();
this.namespaceService = sr.getNamespaceService();
this.dictionaryService = sr.getDictionaryService();
}
diff --git a/source/java/org/alfresco/rest/api/nodes/NodeAssocService.java b/source/java/org/alfresco/rest/api/nodes/NodeAssocService.java
new file mode 100644
index 0000000000..c3375e0147
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/nodes/NodeAssocService.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2005-2016 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.rest.api.nodes;
+
+import org.alfresco.service.cmr.repository.AssociationExistsException;
+import org.alfresco.service.cmr.repository.AssociationRef;
+import org.alfresco.service.cmr.repository.InvalidNodeRefException;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.namespace.QName;
+import org.alfresco.service.namespace.QNamePattern;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @deprecated Intermediate wrapper (not a public service) - eventually push permissions down to NodeService
+ *
+ * @author janv
+ */
+public interface NodeAssocService
+{
+ AssociationRef createAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName)
+ throws InvalidNodeRefException, AssociationExistsException;
+
+ void removeAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName)
+ throws InvalidNodeRefException;
+
+ void setAssociations(NodeRef sourceRef, QName assocTypeQName, List targetRefs);
+
+ AssociationRef getAssoc(Long id);
+
+ List getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern)
+ throws InvalidNodeRefException;
+
+ List getTargetAssocsByPropertyValue(NodeRef sourceRef, QNamePattern qnamePattern, QName propertyQName, Serializable propertyValue);
+
+ List getSourceAssocs(NodeRef targetRef, QNamePattern qnamePattern)
+ throws InvalidNodeRefException;
+}
diff --git a/source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java b/source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java
new file mode 100644
index 0000000000..142b0aaefb
--- /dev/null
+++ b/source/java/org/alfresco/rest/api/nodes/NodeAssocServiceImpl.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2005-2016 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.rest.api.nodes;
+
+import org.alfresco.service.cmr.repository.AssociationExistsException;
+import org.alfresco.service.cmr.repository.AssociationRef;
+import org.alfresco.service.cmr.repository.InvalidNodeRefException;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.namespace.QName;
+import org.alfresco.service.namespace.QNamePattern;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @deprecated Intermediate wrapper (not a public service) - eventually push permissions down to NodeService
+ *
+ * @author janv
+ */
+public class NodeAssocServiceImpl implements NodeAssocService
+{
+ protected NodeService nodeService;
+
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ public AssociationRef createAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName)
+ throws InvalidNodeRefException, AssociationExistsException
+
+ {
+ return nodeService.createAssociation(sourceRef, targetRef, assocTypeQName);
+ }
+
+ public void removeAssociation(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName)
+ throws InvalidNodeRefException
+ {
+ nodeService.removeAssociation(sourceRef, targetRef, assocTypeQName);
+ }
+
+ public void setAssociations(NodeRef sourceRef, QName assocTypeQName, List targetRefs)
+ {
+ nodeService.setAssociations(sourceRef, assocTypeQName, targetRefs);
+ }
+
+ public AssociationRef getAssoc(Long id)
+ {
+ return nodeService.getAssoc(id);
+ }
+
+ public List getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern)
+ throws InvalidNodeRefException
+ {
+ return nodeService.getTargetAssocs(sourceRef, qnamePattern);
+ }
+
+
+ public List getTargetAssocsByPropertyValue(NodeRef sourceRef, QNamePattern qnamePattern, QName propertyQName, Serializable propertyValue)
+ {
+ return nodeService.getTargetAssocsByPropertyValue(sourceRef, qnamePattern, propertyQName, propertyValue);
+ }
+
+ public List getSourceAssocs(NodeRef targetRef, QNamePattern qnamePattern)
+ throws InvalidNodeRefException
+ {
+ return nodeService.getSourceAssocs(targetRef, qnamePattern);
+ }
+}
diff --git a/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java b/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java
index 65a2aeb946..a171dd4201 100644
--- a/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java
+++ b/source/java/org/alfresco/rest/api/nodes/NodeSourcesRelation.java
@@ -51,7 +51,7 @@ public class NodeSourcesRelation extends AbstractNodeRelation implements Relatio
QNamePattern assocTypeQNameParam = getAssocTypeFromWhereElseAll(parameters);
- List assocRefs = nodeService.getSourceAssocs(targetNodeRef, assocTypeQNameParam);
+ List assocRefs = nodeAssocService.getSourceAssocs(targetNodeRef, assocTypeQNameParam);
return listNodePeerAssocs(assocRefs, parameters, false);
}
diff --git a/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java b/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java
index 4c67c5e14b..7d23d55c7a 100644
--- a/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java
+++ b/source/java/org/alfresco/rest/api/nodes/NodeTargetsRelation.java
@@ -65,7 +65,7 @@ public class NodeTargetsRelation extends AbstractNodeRelation implements
QNamePattern assocTypeQNameParam = getAssocTypeFromWhereElseAll(parameters);
- List assocRefs = nodeService.getTargetAssocs(sourceNodeRef, assocTypeQNameParam);
+ List assocRefs = nodeAssocService.getTargetAssocs(sourceNodeRef, assocTypeQNameParam);
return listNodePeerAssocs(assocRefs, parameters, true);
}
@@ -88,7 +88,7 @@ public class NodeTargetsRelation extends AbstractNodeRelation implements
try
{
NodeRef tgtNodeRef = nodes.validateNode(targetNodeId);
- nodeService.createAssociation(srcNodeRef, tgtNodeRef, assocTypeQName);
+ nodeAssocService.createAssociation(srcNodeRef, tgtNodeRef, assocTypeQName);
}
catch (AssociationExistsException aee)
{
@@ -125,12 +125,12 @@ public class NodeTargetsRelation extends AbstractNodeRelation implements
boolean found = false;
- List assocRefs = nodeService.getTargetAssocs(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, sourceNodeId), assocTypeQName);
+ List assocRefs = nodeAssocService.getTargetAssocs(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, sourceNodeId), assocTypeQName);
for (AssociationRef assocRef : assocRefs)
{
if (assocRef.getTargetRef().equals(tgtNodeRef))
{
- nodeService.removeAssociation(srcNodeRef, tgtNodeRef, assocRef.getTypeQName());
+ nodeAssocService.removeAssociation(srcNodeRef, tgtNodeRef, assocRef.getTypeQName());
found = true;
}
}