diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml index 65cd9ea80c..949b55b7f2 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-capabilities-context.xml @@ -488,7 +488,8 @@ + parent="declarativeCapability" + class="org.alfresco.module.org_alfresco_module_rm.capability.impl.EditCapability"> @@ -500,7 +501,7 @@ + class="org.alfresco.module.org_alfresco_module_rm.capability.impl.EditCapability"> @@ -641,8 +642,7 @@ + parent="declarativeCapability" > @@ -824,7 +824,8 @@ - + + @@ -841,6 +842,7 @@ + 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 0ed5745dce..3679348a02 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 @@ -347,6 +347,7 @@ parent="webscript"> + \ No newline at end of file diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.desc.xml index 7a6af06ac1..6a453de08a 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.desc.xml +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.desc.xml @@ -1,7 +1,7 @@ RM node metadata retrieval service Used by the extended RM forms service to retrieve RM node metadata. - /api/rmmetadata?noderef={noderef?}&type={type?} + /api/rmmetadata?noderef={noderef?}&type={type?}&extended={extended?} user required diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.json.ftl index 644dea3b4d..5179c2499b 100644 --- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.json.ftl +++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/slingshot/forms/metadata.get.json.ftl @@ -1,3 +1,16 @@ { - "kind" : ${kind} + "kind" : "${kind}" + <#if extended> + , + "aspects": + [ + <#list aspects as aspect> + { + "name": "${aspect.name}", + "prefixedName": "${aspect.prefixedName}" + } + <#if aspect_has_next>, + + ] + } \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/EditRecordMetadataCapability.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/EditCapability.java similarity index 93% rename from rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/EditRecordMetadataCapability.java rename to rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/EditCapability.java index e93f534173..79ebd5df7d 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/EditRecordMetadataCapability.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/impl/EditCapability.java @@ -27,11 +27,12 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.OwnableService; /** - * Edit record metadata capability implementation. + * Edit capability, checks the permission and whether the current user is the owner of the + * object. * * @author Roy Wetherall */ -public class EditRecordMetadataCapability extends DeclarativeCapability +public class EditCapability extends DeclarativeCapability { private OwnableService ownableService; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/forms/RMMetaDataGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/forms/RMMetaDataGet.java index 579ca58592..b29d88afc8 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/forms/RMMetaDataGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/slingshot/forms/RMMetaDataGet.java @@ -18,14 +18,19 @@ */ package org.alfresco.module.org_alfresco_module_rm.script.slingshot.forms; +import java.io.Serializable; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.alfresco.module.org_alfresco_module_rm.FilePlanComponentKind; import org.alfresco.module.org_alfresco_module_rm.RecordsManagementService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.springframework.extensions.webscripts.Cache; @@ -43,6 +48,7 @@ public class RMMetaDataGet extends DeclarativeWebScript /** Query parameters */ private static final String PARAM_NODEREF = "noderef"; private static final String PARAM_TYPE = "type"; + private static final String PARAM_EXTENDED = "extended"; /** NodeRef pattern */ private static final Pattern nodeRefPattern = Pattern.compile(".+://.+/.+"); @@ -53,6 +59,9 @@ public class RMMetaDataGet extends DeclarativeWebScript /** Namespace service */ private NamespaceService namespaceService; + /** Node service */ + private NodeService nodeService; + /** * @param rmService records management service */ @@ -69,6 +78,14 @@ public class RMMetaDataGet extends DeclarativeWebScript this.namespaceService = namespaceService; } + /** + * @param nodeService node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + /* * @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache) */ @@ -78,6 +95,7 @@ public class RMMetaDataGet extends DeclarativeWebScript // create model object with the lists model Map model = new HashMap(1); + boolean extended = false; String result = "NONE"; // Get the nodeRef and confirm it is valid @@ -93,7 +111,7 @@ public class RMMetaDataGet extends DeclarativeWebScript { result = kind.toString(); } - } + } } else { @@ -103,16 +121,89 @@ public class RMMetaDataGet extends DeclarativeWebScript Matcher m = nodeRefPattern.matcher(nodeRef); if (m.matches()) { - FilePlanComponentKind kind = rmService.getFilePlanComponentKind(new NodeRef(nodeRef)); + NodeRef nodeRefObj = new NodeRef(nodeRef); + + FilePlanComponentKind kind = rmService.getFilePlanComponentKind(nodeRefObj); if (kind != null) { result = kind.toString(); } + + String extendedValue = req.getParameter(PARAM_EXTENDED); + if (extendedValue != null && extendedValue.length() != 0) + { + extended = Boolean.parseBoolean(extendedValue); + if (extended == true) + { + // get the aspects of the node + model.put("aspects", getAspects(nodeRefObj)); + } + } } } } model.put("kind", result); + model.put("extended", extended); return model; } + + /** + * Gets the current node aspects + * + * @return node aspects + */ + public List getAspects(NodeRef nodeRef) + { + Set qnames = nodeService.getAspects(nodeRef); + List aspects = new ArrayList(qnames.size()); + for (QName qname : qnames) + { + aspects.add(new Aspect(qname)); + } + return aspects; + } + + /** + * Qname wrapper class + */ + public class QNameBean implements Serializable + { + private static final long serialVersionUID = 6982292337846270774L; + + protected QName name; + + public QNameBean(QName name) + { + this.name = name; + } + + public String getName() + { + return name.toString(); + } + + public String getPrefixedName() + { + return name.toPrefixString(namespaceService); + } + + public String toString() + { + return getName(); + } + } + + /** + * Aspect wrapper class + */ + public class Aspect extends QNameBean + { + private static final long serialVersionUID = -6448182941386934326L; + + public Aspect(QName name) + { + super(name); + } + } } \ No newline at end of file