From a444c2d147cf68aee0243458a9a1cc4d41e53d19 Mon Sep 17 00:00:00 2001 From: Ramona Popa Date: Fri, 12 May 2017 15:57:26 +0300 Subject: [PATCH] RM-5087 - Updated include params; added association for records --- .../rest/api/impl/ApiNodesModelFactory.java | 54 +++++++++++++ .../alfresco/rm/rest/api/model/RMNode.java | 13 +++ .../main/webapp/definitions/gs-core-api.yaml | 79 +++++++++++++------ 3 files changed, 123 insertions(+), 23 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/ApiNodesModelFactory.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/ApiNodesModelFactory.java index 9605a79f32..c4d316b2a7 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/ApiNodesModelFactory.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/ApiNodesModelFactory.java @@ -40,6 +40,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedul import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.rest.api.Nodes; +import org.alfresco.rest.api.model.AssocChild; import org.alfresco.rest.api.model.ContentInfo; import org.alfresco.rest.api.model.Node; import org.alfresco.rest.api.model.UserInfo; @@ -61,7 +62,9 @@ import org.alfresco.rm.rest.api.model.UnfiledRecordFolder; import org.alfresco.rm.rest.api.model.UnfiledRecordFolderChild; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.model.FileInfo; +import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.NamespaceService; @@ -600,6 +603,48 @@ public class ApiNodesModelFactory return nodes.mapFromNodeProperties(properties, new ArrayList<>(), new HashMap<>(), EXCLUDED_NS, EXCLUDED_PROPS); } + /** + * Utility method that maps associations, applicable only for records + * + * @param rmNode + * @param info + * @param includeParam + */ + private void mapAssociations(RMNode rmNode, FileInfo info, List includeParam) + { + if (includeParam.contains(RMNode.PARAM_INCLUDE_ASSOCIATION)) + { + NodeRef nodeRef = info.getNodeRef(); + ChildAssociationRef parentAssocRef = nodeService.getPrimaryParent(nodeRef); + + if ((parentAssocRef == null) || (parentAssocRef.getParentRef() == null) + || (!parentAssocRef.getParentRef().equals(rmNode.getParentId()))) + { + List parentAssocRefs = nodeService.getParentAssocs(nodeRef); + for (ChildAssociationRef pAssocRef : parentAssocRefs) + { + if (pAssocRef.getParentRef().equals(rmNode.getParentId())) + { + // for now, assume same parent/child cannot appear more than once (due to unique name) + parentAssocRef = pAssocRef; + break; + } + } + } + + if (parentAssocRef != null) + { + QName assocTypeQName = parentAssocRef.getTypeQName(); + if ((assocTypeQName != null) && (!EXCLUDED_NS.contains(assocTypeQName.getNamespaceURI()))) + { + AssocChild childAssoc = new AssocChild(assocTypeQName.toPrefixString(namespaceService), parentAssocRef.isPrimary()); + + rmNode.setAssociation(childAssoc); + } + } + } + } + /** * Creates an object of type FilePlan * @@ -760,6 +805,10 @@ public class ApiNodesModelFactory mapBasicInfo(unfiledContainerChild, info, parameters.getFilter(), mapUserInfo, isMinimalInfo); mapOptionalInfo(unfiledContainerChild, info, parameters.getInclude(), isMinimalInfo); mapUnfiledChildInfo(unfiledContainerChild, info, parameters.getFilter()); + if (unfiledContainerChild.getIsRecord()) + { + mapAssociations(unfiledContainerChild, info, parameters.getInclude()); + } return unfiledContainerChild; } @@ -797,6 +846,10 @@ public class ApiNodesModelFactory mapBasicInfo(unfiledRecordFolderChild, info, parameters.getFilter(), mapUserInfo, isMinimalInfo); mapOptionalInfo(unfiledRecordFolderChild, info, parameters.getInclude(), isMinimalInfo); mapUnfiledChildInfo(unfiledRecordFolderChild, info, parameters.getFilter()); + if (unfiledRecordFolderChild.getIsRecord()) + { + mapAssociations(unfiledRecordFolderChild, info, parameters.getInclude()); + } return unfiledRecordFolderChild; } @@ -834,6 +887,7 @@ public class ApiNodesModelFactory mapBasicInfo(record, info, parameters.getFilter(), mapUserInfo, isMinimalInfo); mapOptionalInfo(record, info, parameters.getInclude(), isMinimalInfo); mapRecordInfo(record, info, parameters.getInclude()); + mapAssociations(record, info, parameters.getInclude()); return record; } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/model/RMNode.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/model/RMNode.java index 7ddc40ded9..aae2a3c434 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/model/RMNode.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/model/RMNode.java @@ -31,6 +31,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import org.alfresco.rest.api.model.Assoc; import org.alfresco.rest.api.model.PathInfo; import org.alfresco.rest.api.model.UserInfo; import org.alfresco.rest.framework.resource.UniqueId; @@ -65,6 +66,7 @@ public abstract class RMNode public static final String PARAM_HAS_RETENTION_SCHEDULE = "hasRetentionSchedule"; public static final String PARAM_IS_CLOSED = "isClosed"; + public static final String PARAM_INCLUDE_ASSOCIATION = "association"; public static final String FILE_PLAN_TYPE = "rma:filePlan"; public static final String RECORD_CATEGORY_TYPE = "rma:recordCategory"; @@ -94,6 +96,7 @@ public abstract class RMNode protected Map properties; protected PathInfo path; protected List allowableOperations; + protected Assoc association; public RMNode() { @@ -221,4 +224,14 @@ public abstract class RMNode this.allowableOperations = allowableOperations; } + public Assoc getAssociation() + { + return association; + } + + public void setAssociation(Assoc association) + { + this.association = association; + } + } diff --git a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/gs-core-api.yaml b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/gs-core-api.yaml index 6b02f2f2ba..d83e13eb3e 100644 --- a/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/gs-core-api.yaml +++ b/rm-community/rm-community-rest-api-explorer/src/main/webapp/definitions/gs-core-api.yaml @@ -538,7 +538,7 @@ paths: - $ref: '#/parameters/skipCountParam' - $ref: '#/parameters/maxItemsParam' - $ref: '#/parameters/unfiledRecordFolderAndContainerWhereParam' - - $ref: '#/parameters/unfiledContainerEntryIncludeParam' + - $ref: '#/parameters/unfiledContainerChildEntryIncludeParam' - $ref: '#/parameters/unfiledContainerIncludeSourceParam' - $ref: '#/parameters/fieldsParam' responses: @@ -842,7 +842,7 @@ paths: - $ref: '#/parameters/skipCountParam' - $ref: '#/parameters/maxItemsParam' - $ref: '#/parameters/unfiledRecordFolderAndContainerWhereParam' - - $ref: '#/parameters/unfiledRecordFolderEntryIncludeParam' + - $ref: '#/parameters/unfiledRecordFolderChildEntryIncludeParam' - $ref: '#/parameters/unfiledRecordFolderRelativePathParam' - $ref: '#/parameters/unfiledRecordFolderIncludeSourceParam' - $ref: '#/parameters/fieldsParam' @@ -2093,7 +2093,24 @@ parameters: description: | Returns additional information about the unfiled records container children. Any optional field from the response model can be requested. For example: * allowableOperations + * aspectNames * path + * properties + required: false + type: array + items: + type: string + collectionFormat: csv + unfiledContainerChildEntryIncludeParam: + name: include + in: query + description: | + Returns additional information about the unfiled records container children. Any optional field from the response model can be requested. For example: + * allowableOperations + * aspectNames + * association + * path + * properties required: false type: array items: @@ -2119,7 +2136,24 @@ parameters: description: | Returns additional information about the unfiled records container children. Any optional field from the response model can be requested. For example: * allowableOperations + * aspectNames * path + * properties + required: false + type: array + items: + type: string + collectionFormat: csv + unfiledRecordFolderChildEntryIncludeParam: + name: include + in: query + description: | + Returns additional information about the unfiled records container children. Any optional field from the response model can be requested. For example: + * allowableOperations + * aspectNames + * association + * path + * properties required: false type: array items: @@ -2165,9 +2199,11 @@ parameters: in: query description: | Returns additional information about the record category. Any optional field from the response model can be requested. For example: - * hasRetentionSchedule * allowableOperations + * aspectNames + * hasRetentionSchedule * path + * properties required: false type: array items: @@ -2191,14 +2227,14 @@ parameters: in: query description: | Returns additional information about the record category. Any optional field from the response model can be requested. For example: - * properties + * allowableOperations * aspectNames * hasRetentionSchedule * isClosed * isRecordCategory * isRecordFolder - * allowableOperations * path + * properties required: false type: array items: @@ -2231,10 +2267,8 @@ parameters: in: query description: | Returns additional information about the record folders. Any optional field from the response model can be requested. For example: - * properties - * aspectNames - * isClosed * allowableOperations + * isClosed * path required: false type: array @@ -2252,11 +2286,13 @@ parameters: in: query description: | Returns additional information about the records. Any optional field from the response model can be requested. For example: - * properties - * aspectNames - * isCompleted * allowableOperations + * aspectNames + * association + * content + * isCompleted * path + * properties required: false type: array items: @@ -2307,12 +2343,12 @@ parameters: in: query description: | Returns additional information about the transfer folder. Any optional field from the response model can be requested. For example: + * allowableOperations + * aspectNames + * properties * transferPDFIndicator * transferLocation * transferAccessionIndicator - * properties - * aspectNames - * allowableOperations required: false type: array items: @@ -2335,14 +2371,14 @@ parameters: in: query description: | Returns additional information about the transfer's child. Any optional field from the response model can be requested. For example: - * properties + * allowableOperations * aspectNames + * isClosed * isCompleted * isRecord - * isClosed * isRecordFolder - * allowableOperations * path + * properties required: false type: array items: @@ -2360,9 +2396,9 @@ parameters: in: query description: | Returns additional information about the record. Any optional field from the response model can be requested. For example: - * isCompleted - * content * allowableOperations + * content + * isCompleted * path required: false type: array @@ -2961,7 +2997,7 @@ definitions: items: $ref: '#/definitions/RecordCategoryChildAssociationEntry' source: - $ref: '#/definitions/RecordCategory' + $ref: '#/definitions/FilePlan' RecordCategoryChildAssociationEntry: type: object required: @@ -2973,9 +3009,6 @@ definitions: allOf: - $ref: '#/definitions/RecordCategoryChild' - type: object - properties: - association: - $ref: '#/definitions/ChildAssociationInfo' ## Record folder RecordFolder: type: object