From f35bc14f271ab01dbce764796c578af5c2890091 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Mon, 12 Dec 2016 16:00:02 +0000 Subject: [PATCH] RM-4489 (API: Review period cannot be updated if the review period type and expression are set) --- .../rest/core/ExtendedRestProperties.java | 23 + .../rest/core/ExtendedRestWrapper.java | 33 ++ .../FilePlanComponentModel.java | 421 ++++++++++++++++++ .../requests/FilePlanComponents.java | 183 ++++++++ .../requests/igCoreAPI/RestIGCoreAPI.java | 45 ++ 5 files changed, 705 insertions(+) create mode 100644 rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestProperties.java create mode 100644 rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestWrapper.java create mode 100644 rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentModel.java create mode 100644 rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponents.java create mode 100644 rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestProperties.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestProperties.java new file mode 100644 index 0000000000..bebe739099 --- /dev/null +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestProperties.java @@ -0,0 +1,23 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.core; + +/** + * FIXME!!! + * + * @author Tuna Aksoy + * @since 2.6 + */ +public class ExtendedRestProperties extends RestProperties +{ + +} diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestWrapper.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestWrapper.java new file mode 100644 index 0000000000..464cd01195 --- /dev/null +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/core/ExtendedRestWrapper.java @@ -0,0 +1,33 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.core; + +import org.alfresco.rest.core.RestWrapper; +import org.alfresco.rest.rm.community.requests.igCoreAPI.RestIGCoreAPI; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * FIXME!!! + * + * @author Tuna Aksoy + * @since 2.6 + */ +public class ExtendedRestWrapper extends RestWrapper +{ + @Autowired + private ExtendedRestProperties extendedRestProperties; + + public RestIGCoreAPI withIGCoreAPI() + { + return new RestIGCoreAPI(this, extendedRestProperties); + } +} diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentModel.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentModel.java new file mode 100644 index 0000000000..cea1b952a1 --- /dev/null +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/model/fileplancomponents/FilePlanComponentModel.java @@ -0,0 +1,421 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * - + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * - + * 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 . + * #L% + */ +package org.alfresco.rest.rm.community.model.fileplancomponents; + +import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.ALLOWABLE_OPERATIONS; +import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.IS_CLOSED; +import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import org.alfresco.utility.model.TestModel; + +/** + * POJO for file plan component + * + * @author Tuna Aksoy + * @author Rodica Sutu + * @since 2.6 + */ +public class FilePlanComponentModel extends TestModel +{ + @JsonProperty (required = true) + private String id; + + @JsonProperty (required = true) + private String parentId; + + @JsonProperty (required = true) + private String name; + + @JsonProperty (required = true) + private String nodeType; + + @JsonProperty (required = true) + private Boolean isCategory; + + @JsonProperty (required = true) + private Boolean isRecordFolder; + + @JsonProperty (required = true) + private Boolean isFile; + + @JsonProperty + private Boolean hasRetentionSchedule; + + @JsonProperty(value = IS_CLOSED) + private Boolean isClosed; + + @JsonProperty + private Boolean isCompleted; + + @JsonProperty (required = true) + private List aspectNames; + + @JsonProperty (required = true) + private FilePlanComponentUserInfo createdByUser; + + @JsonProperty(value = PROPERTIES, required = true) + private FilePlanComponentProperties properties; + + @JsonProperty (value = ALLOWABLE_OPERATIONS) + private List allowableOperations; + + private FilePlanComponentPath path; + + @JsonProperty (required = true) + private String modifiedAt; + + @JsonProperty (required = true) + private String createdAt; + + @JsonProperty (required = true) + private FilePlanComponentUserInfo modifiedByUser; + + + /**Helper constructor for creating the file plan component using + * + * @param name File Plan Component name + * @param nodeType File Plan Component node type + * @param properties File Plan Component properties + */ + public FilePlanComponentModel(String name, String nodeType, FilePlanComponentProperties properties) + { + this.name = name; + this.nodeType = nodeType; + this.properties = properties; + } + + /** + * Helper constructor to create empty file plan component + */ + public FilePlanComponentModel() { } + + /** + * Helper constructor for creating the file plan component using + * + * @param name File Plan Component name + */ + public FilePlanComponentModel(String name) + { + this.name = name; + } + + /** + * Helper constructor for creating the file plan component using + * + * @param name File Plan Component name + * @param properties File Plan Component properties + */ + public FilePlanComponentModel(String name, FilePlanComponentProperties properties) + { + this.name = name; + this.properties = properties; + } + + /** + * @return the id + */ + public String getId() + { + return this.id; + } + + /** + * @param id the id to set + */ + public void setId(String id) + { + this.id = id; + } + + /** + * @return the parentId + */ + public String getParentId() + { + return this.parentId; + } + + /** + * @param parentId the parentId to set + */ + public void setParentId(String parentId) + { + this.parentId = parentId; + } + + /** + * @return the name + */ + public String getName() + { + return this.name; + } + + /** + * @param name the name to set + */ + public void setName(String name) + { + this.name = name; + } + + /** + * @return the nodeType + */ + public String getNodeType() + { + return this.nodeType; + } + + /** + * @param nodeType the nodeType to set + */ + public void setNodeType(String nodeType) + { + this.nodeType = nodeType; + } + + /** + * @return the isCategory + */ + public Boolean isCategory() + { + return this.isCategory; + } + + /** + * @param isCategory the isCategory to set + */ + public void setCategory(Boolean isCategory) + { + this.isCategory = isCategory; + } + + /** + * @return the isRecordFolder + */ + public Boolean isRecordFolder() + { + return this.isRecordFolder; + } + + /** + * @param isRecordFolder the isRecordFolder to set + */ + public void setRecordFolder(Boolean isRecordFolder) + { + this.isRecordFolder = isRecordFolder; + } + + /** + * @return the isFile + */ + public Boolean isFile() + { + return this.isFile; + } + + /** + * @param isFile the isFile to set + */ + public void setFile(Boolean isFile) + { + this.isFile = isFile; + } + + /** + * @return the hasRetentionSchedule + */ + public Boolean hasRetentionSchedule() + { + return this.hasRetentionSchedule; + } + + /** + * @param hasRetentionSchedule the hasRetentionSchedule to set + */ + public void setHasRetentionSchedule(Boolean hasRetentionSchedule) + { + this.hasRetentionSchedule = hasRetentionSchedule; + } + + /** + * @return the properties + */ + public FilePlanComponentProperties getProperties() + { + return properties; + } + + /** + * @param properties the properties to set + */ + public void setProperties(FilePlanComponentProperties properties) + { + this.properties = properties; + } + + /** + * @return the aspectNames + */ + public List getAspectNames() + { + return this.aspectNames; + } + + /** + * @param aspectNames the aspectNames to set + */ + public void setAspectNames(List aspectNames) + { + this.aspectNames = aspectNames; + } + + /** + * @return the createdByUser + */ + public FilePlanComponentUserInfo getCreatedByUser() + { + return this.createdByUser; + } + + /** + * @param createdByUser the createdByUser to set + */ + public void setCreatedByUser(FilePlanComponentUserInfo createdByUser) + { + this.createdByUser = createdByUser; + } + + /** + * @return the allowableOperations + */ + public List getAllowableOperations() + { + return this.allowableOperations; + } + + /** + * @return the path + */ + public FilePlanComponentPath getPath() + { + return this.path; + } + + /** + * @param path the path to set + */ + public void setPath(FilePlanComponentPath path) + { + this.path = path; + } + + /** + * @param modifiedAt the modifiedAt to set + */ + public void setModifiedAt(String modifiedAt) + { + this.modifiedAt = modifiedAt; + } + + /** + * @param createdAt the createdAt to set + */ + public void setCreatedAt(String createdAt) + { + this.createdAt = createdAt; + } + + /** + * @param modifiedByUser the modifiedByUser to set + */ + public void setModifiedByUser(FilePlanComponentUserInfo modifiedByUser) + { + this.modifiedByUser = modifiedByUser; + } + + /** + * @return the modifiedAt + */ + public String getModifiedAt() + { + return this.modifiedAt; + } + + /** + * @return the createdAt + */ + public String getCreatedAt() + { + return this.createdAt; + } + + /** + * @return the modifiedByUser + */ + public FilePlanComponentUserInfo getModifiedByUser() + { + return this.modifiedByUser; + } + + /** + * @return the isClosed + */ + public Boolean isClosed() + { + return this.isClosed; + } + + /** + * @param closed the isClosed to set + */ + public void setClosed(Boolean closed) + { + this.isClosed = closed; + } + + /** + * @return the isCompleted + */ + public Boolean isCompleted() + { + return this.isCompleted; + } + + /** + * @param completed the isCompleted to set + */ + public void setCompleted(Boolean completed) + { + this.isCompleted = completed; + } +} diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponents.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponents.java new file mode 100644 index 0000000000..07aef4c24a --- /dev/null +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponents.java @@ -0,0 +1,183 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.rm.community.requests; + +import static org.alfresco.rest.core.RestRequest.requestWithBody; +import static org.alfresco.rest.core.RestRequest.simpleRequest; +import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject; +import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString; +import static org.alfresco.rest.rm.community.util.PojoUtility.toJson; +import static org.springframework.http.HttpMethod.DELETE; +import static org.springframework.http.HttpMethod.GET; +import static org.springframework.http.HttpMethod.POST; +import static org.springframework.http.HttpMethod.PUT; + +import org.alfresco.rest.core.RestWrapper; +import org.alfresco.rest.requests.ModelRequest; +import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent; +import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentModel; +import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentsCollection; + +/** + * FIXME!!! + * + * @author Tuna Aksoy + * @since 2.6 + */ +public class FilePlanComponents extends ModelRequest +{ + private FilePlanComponentModel filePlanComponentModel; + + /** + * @param restWrapper + */ + public FilePlanComponents(FilePlanComponentModel filePlanComponentModel, RestWrapper restWrapper) + { + super(restWrapper); + this.filePlanComponentModel = filePlanComponentModel; + } + + /** + * Get a file plan component + * + * @param filePlanComponentId The id of the file plan component to get + * @return The {@link FilePlanComponent} for the given file plan component id + * @throws Exception for the following cases: + *
    + *
  • {@code fileplanComponentId} is not a valid format
  • + *
  • authentication fails
  • + *
  • {@code fileplanComponentId} does not exist
  • + *
+ */ + public FilePlanComponent getFilePlanComponent(String filePlanComponentId) throws Exception + { + mandatoryString("filePlanComponentId", filePlanComponentId); + + /* + return restWrapper.processModel(FilePlanComponent.class, simpleRequest( + GET, + "fileplan-components/{fileplanComponentId}?{parameters}", + filePlanComponentId, getParameters() + */ + // FIXME!!! + return restWrapper.processModel(FilePlanComponent.class, simpleRequest( + GET, + "fileplan-components/{fileplanComponentId}", + filePlanComponentId + )); + } + + /** + * List child components of a file plan component + * + * @param filePlanComponentId The id of the file plan component of which to get child components + * @return The {@link FilePlanComponent} for the given file plan component id + * @throws Exception for the following cases: + *
    + *
  • {@code fileplanComponentId} is not a valid format
  • + *
  • authentication fails
  • + *
  • {@code fileplanComponentId} does not exist
  • + *
+ */ + public FilePlanComponentsCollection listChildComponents(String filePlanComponentId) throws Exception + { + mandatoryString("filePlanComponentId", filePlanComponentId); + + return restWrapper.processModels(FilePlanComponentsCollection.class, simpleRequest( + GET, + "fileplan-components/{fileplanComponentId}/children", + filePlanComponentId + )); + } + + /** + * Creates a file plan component with the given properties under the parent node with the given id + * + * @param filePlanComponentModel The properties of the file plan component to be created + * @param parentId The id of the parent where the new file plan component should be created + * @return The {@link FilePlanComponent} with the given properties + * @throws Exception for the following cases: + *
    + *
  • {@code fileplanComponentId} is not a valid format
  • + *
  • authentication fails
  • + *
  • current user does not have permission to add children to {@code fileplanComponentId}
  • + *
  • {@code fileplanComponentId} does not exist
  • + *
  • new name clashes with an existing node in the current parent container
  • + *
  • model integrity exception, including node name with invalid characters
  • + *
+ */ + public FilePlanComponent createFilePlanComponent(FilePlanComponent filePlanComponentModel, String parentId) throws Exception + { + mandatoryObject("filePlanComponentProperties", filePlanComponentModel); + mandatoryString("parentId", parentId); + + return restWrapper.processModel(FilePlanComponent.class, requestWithBody( + POST, + toJson(filePlanComponentModel), + "fileplan-components/{fileplanComponentId}/children", + parentId + )); + } + + /** + * Updates a file plan component + * + * @param filePlanComponent The properties to be updated + * @param filePlanComponentId The id of the file plan component which will be updated + * @param returns The updated {@link FilePlanComponent} + * @throws Exception for the following cases: + *
    + *
  • the update request is invalid or {@code fileplanComponentId} is not a valid format or {@code filePlanComponentProperties} is invalid
  • + *
  • authentication fails
  • + *
  • current user does not have permission to update {@code fileplanComponentId}
  • + *
  • {@code fileplanComponentId} does not exist
  • + *
  • the updated name clashes with an existing node in the current parent folder
  • + *
  • model integrity exception, including node name with invalid characters
  • + *
+ */ + public FilePlanComponent updateFilePlanComponent(FilePlanComponent filePlanComponent, String filePlanComponentId) throws Exception + { + mandatoryObject("filePlanComponentProperties", filePlanComponent); + mandatoryString("filePlanComponentId", filePlanComponentId); + + return restWrapper.processModel(FilePlanComponent.class, requestWithBody( + PUT, + toJson(filePlanComponent), + "fileplan-components/{fileplanComponentId}", + filePlanComponentId + )); + } + + /** + * Delete file plan component + * + * @param filePlanComponentId The id of the file plan component to be deleted + * @throws Exception for the following cases: + *
    + *
  • {@code fileplanComponentId} is not a valid format
  • + *
  • authentication fails
  • + *
  • current user does not have permission to delete {@code fileplanComponentId}
  • + *
  • {@code fileplanComponentId} does not exist
  • + *
  • {@code fileplanComponentId} is locked and cannot be deleted
  • + *
+ */ + public void deleteFilePlanComponent(String filePlanComponentId) throws Exception + { + mandatoryString("filePlanComponentId", filePlanComponentId); + + restWrapper.processEmptyModel(simpleRequest( + DELETE, + "fileplan-components/{fileplanComponentId}", + filePlanComponentId + )); + } +} diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java new file mode 100644 index 0000000000..cfd62126f6 --- /dev/null +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/igCoreAPI/RestIGCoreAPI.java @@ -0,0 +1,45 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.rm.community.requests.igCoreAPI; + +import com.jayway.restassured.RestAssured; + +import org.alfresco.rest.core.ExtendedRestProperties; +import org.alfresco.rest.core.RestWrapper; +import org.alfresco.rest.requests.ModelRequest; + +/** + * FIXME!!! + * + * @author Tuna Aksoy + * @since 2.6 + */ +public class RestIGCoreAPI extends ModelRequest +{ + private ExtendedRestProperties extendedRestProperties; + + /** + * FIXME!!! + * + * @param restWrapper FIXME!!! + * @param restProperties FIXME!!! + */ + public RestIGCoreAPI(RestWrapper restWrapper, ExtendedRestProperties extendedRestProperties) + { + super(restWrapper); + this.extendedRestProperties = extendedRestProperties; + // FIXME + RestAssured.baseURI = extendedRestProperties.envProperty().getTestServerUrl(); + RestAssured.port = extendedRestProperties.envProperty().getPort(); + RestAssured.basePath = extendedRestProperties.getRestWorkflowPath(); + } +}