mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			23.1.0.236
			...
			autoformat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 6f0466a909 | ||
|  | fa4613d452 | 
							
								
								
									
										6
									
								
								.pre-commit-config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.pre-commit-config.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| repos: | ||||
|   - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks | ||||
|     rev: v2.1.0 | ||||
|     hooks: | ||||
|       - id: pretty-format-java | ||||
|         args: [--autofix, --google-java-formatter-version=1.11.0, --aosp] | ||||
| @@ -1,4 +1,7 @@ | ||||
| --- | ||||
| import: | ||||
|   - source: Alfresco/alfresco-build-tools:.travis.pre-commit.yml@v1.1.5 | ||||
|  | ||||
| dist: focal | ||||
| language: java | ||||
| jdk: openjdk11 | ||||
|   | ||||
| @@ -26,12 +26,12 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.core; | ||||
|  | ||||
| import lombok.Getter; | ||||
|  | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.context.annotation.PropertySource; | ||||
|  | ||||
| import lombok.Getter; | ||||
|  | ||||
| /** | ||||
|  * Extends {@link RestProperties} to be able to change/add properties | ||||
|  * | ||||
| @@ -43,20 +43,19 @@ import lombok.Getter; | ||||
| @PropertySource(value = {"classpath:default.properties", "classpath:config.properties"}) | ||||
| @PropertySource(value = "classpath:module.properties", ignoreResourceNotFound = true) | ||||
| @PropertySource(value = "classpath:local.properties", ignoreResourceNotFound = true) | ||||
| public class RMRestProperties extends RestProperties | ||||
| { | ||||
|     @Value ("${alfresco.scheme}") | ||||
| public class RMRestProperties extends RestProperties { | ||||
|     @Value("${alfresco.scheme}") | ||||
|     private String scheme; | ||||
|  | ||||
|     @Value ("${alfresco.server}") | ||||
|     @Value("${alfresco.server}") | ||||
|     private String server; | ||||
|  | ||||
|     @Value ("${alfresco.port}") | ||||
|     @Value("${alfresco.port}") | ||||
|     private String port; | ||||
|  | ||||
|     @Value ("${rest.rmPath}") | ||||
|     @Value("${rest.rmPath}") | ||||
|     private String restRmPath; | ||||
|  | ||||
|     @Value ("${docker.host}") | ||||
|     @Value("${docker.host}") | ||||
|     private String dockerHost; | ||||
| } | ||||
|   | ||||
| @@ -28,6 +28,8 @@ package org.alfresco.rest.core; | ||||
|  | ||||
| import io.restassured.builder.RequestSpecBuilder; | ||||
|  | ||||
| import lombok.Getter; | ||||
|  | ||||
| import org.alfresco.rest.exception.EmptyJsonResponseException; | ||||
| import org.alfresco.rest.model.RestErrorModel; | ||||
| import org.alfresco.rest.model.RestHtmlResponse; | ||||
| @@ -43,8 +45,6 @@ import org.springframework.context.annotation.Scope; | ||||
| import org.springframework.http.HttpStatus; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import lombok.Getter; | ||||
|  | ||||
| /** | ||||
|  * Extends {@link RestWrapper} in order to call GS APIs with our own properties | ||||
|  * | ||||
| @@ -53,118 +53,105 @@ import lombok.Getter; | ||||
|  */ | ||||
| @Service | ||||
| @Scope(value = "prototype") | ||||
| public class RMRestWrapper | ||||
| { | ||||
| public class RMRestWrapper { | ||||
|     /** The class that wraps the ReST APIs from core. */ | ||||
|     @Autowired | ||||
|     private RestWrapper restWrapper; | ||||
|     @Autowired private RestWrapper restWrapper; | ||||
|  | ||||
|     @Autowired | ||||
|     @Getter | ||||
|     private RMRestProperties rmRestProperties; | ||||
|     @Autowired @Getter private RMRestProperties rmRestProperties; | ||||
|  | ||||
|     public GSCoreAPI withGSCoreAPI() | ||||
|     { | ||||
|     public GSCoreAPI withGSCoreAPI() { | ||||
|         return new GSCoreAPI(this, getRmRestProperties()); | ||||
|     } | ||||
|  | ||||
|     /** Get the core class that wraps the ReST APIs. */ | ||||
|     public RestWrapper getRestWrapper() | ||||
|     { | ||||
|     public RestWrapper getRestWrapper() { | ||||
|         return restWrapper; | ||||
|     } | ||||
|  | ||||
|     /** Authenticate specific user to Alfresco REST API */ | ||||
|     public void authenticateUser(UserModel userModel) | ||||
|     { | ||||
|     public void authenticateUser(UserModel userModel) { | ||||
|         restWrapper.authenticateUser(userModel); | ||||
|     } | ||||
|  | ||||
|     /** Get the last error thrown (if any). */ | ||||
|     public RestErrorModel assertLastError() | ||||
|     { | ||||
|     public RestErrorModel assertLastError() { | ||||
|         return restWrapper.assertLastError(); | ||||
|     } | ||||
|  | ||||
|     /** Process responses for a collection of models as {@link RestSiteModelsCollection}. */ | ||||
|     public <T> T processModels(Class<T> classz, RestRequest simpleRequest) | ||||
|     { | ||||
|     public <T> T processModels(Class<T> classz, RestRequest simpleRequest) { | ||||
|         return restWrapper.processModels(classz, simpleRequest); | ||||
|     } | ||||
|  | ||||
|     /** Process responses for a single model as {@link RestSiteModel}. */ | ||||
|     public <T> T processModel(Class<T> classz, RestRequest restRequest) | ||||
|     { | ||||
|     public <T> T processModel(Class<T> classz, RestRequest restRequest) { | ||||
|         return restWrapper.processModel(classz, restRequest); | ||||
|     } | ||||
|  | ||||
|     /** Process a response that has no body - basically will need only the status code from it. */ | ||||
|     public void processEmptyModel(RestRequest simpleRequest) | ||||
|     { | ||||
|     public void processEmptyModel(RestRequest simpleRequest) { | ||||
|         restWrapper.processEmptyModel(simpleRequest); | ||||
|     } | ||||
|  | ||||
|     /** Get the most recently returned status object. */ | ||||
|     public StatusModel getLastStatus() | ||||
|     { | ||||
|     public StatusModel getLastStatus() { | ||||
|         return restWrapper.getLastStatus(); | ||||
|     } | ||||
|  | ||||
|     /** Get the most recently returned status code. */ | ||||
|     public String getStatusCode() | ||||
|     { | ||||
|     public String getStatusCode() { | ||||
|         return restWrapper.getStatusCode(); | ||||
|     } | ||||
|  | ||||
|     /** Set the status code. This should only be needed when calling APIs without using the TAS framework. */ | ||||
|     public void setStatusCode(String statusCode) | ||||
|     { | ||||
|     /** | ||||
|      * Set the status code. This should only be needed when calling APIs without using the TAS | ||||
|      * framework. | ||||
|      */ | ||||
|     public void setStatusCode(String statusCode) { | ||||
|         restWrapper.setStatusCode(statusCode); | ||||
|     } | ||||
|  | ||||
|     /** Assert that a specific status code is returned. */ | ||||
|     public void assertStatusCodeIs(HttpStatus statusCode) | ||||
|     { | ||||
|     public void assertStatusCodeIs(HttpStatus statusCode) { | ||||
|         restWrapper.assertStatusCodeIs(statusCode); | ||||
|     } | ||||
|  | ||||
|     /** @return A parameters string that you could pass on the request ?param=value */ | ||||
|     public String getParameters() | ||||
|     { | ||||
|     public String getParameters() { | ||||
|         return restWrapper.getParameters(); | ||||
|     } | ||||
|  | ||||
|     /** Create a {@link UserModel} for a new test user. */ | ||||
|     public UserModel getTestUser() | ||||
|     { | ||||
|     public UserModel getTestUser() { | ||||
|         return restWrapper.getTestUser(); | ||||
|     } | ||||
|  | ||||
|     /** Get the Alfresco Core API. */ | ||||
|     public RestCoreAPI withCoreAPI() | ||||
|     { | ||||
|     public RestCoreAPI withCoreAPI() { | ||||
|         return restWrapper.withCoreAPI(); | ||||
|     } | ||||
|  | ||||
|     /** Get the Alfresco Search API. */ | ||||
|     public SearchAPI withSearchAPI() | ||||
|     { | ||||
|     public SearchAPI withSearchAPI() { | ||||
|         return restWrapper.withSearchAPI(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * You can handle the request sent to server by calling this method. | ||||
|      * If for example you want to sent multipart form data you can use: <pre> | ||||
|      * You can handle the request sent to server by calling this method. If for example you want to | ||||
|      * sent multipart form data you can use: | ||||
|      * | ||||
|      * <pre> | ||||
|      * restClient.configureRequestSpec() | ||||
|      *              .addMultiPart("filedata", Utility.getResourceTestDataFile("restapi-resource")) | ||||
|      *              .addFormParam("renditions", "doclib") | ||||
|      *              .addFormParam("autoRename", true); | ||||
|      * | ||||
|      * restClient.withCoreAPI().usingNode(ContentModel.my()).createNode(); | ||||
|      * </pre> This will create the node using the multipart data defined. | ||||
|      * </pre> | ||||
|      * | ||||
|      * This will create the node using the multipart data defined. | ||||
|      */ | ||||
|     public RequestSpecBuilder configureRequestSpec() | ||||
|     { | ||||
|     public RequestSpecBuilder configureRequestSpec() { | ||||
|         return restWrapper.configureRequestSpec(); | ||||
|     } | ||||
|  | ||||
| @@ -173,8 +160,7 @@ public class RMRestWrapper | ||||
|      * | ||||
|      * @throws EmptyJsonResponseException If there is no response from the server. | ||||
|      */ | ||||
|     public RestHtmlResponse processHtmlResponse(RestRequest simpleRequest) | ||||
|     { | ||||
|     public RestHtmlResponse processHtmlResponse(RestRequest simpleRequest) { | ||||
|         return restWrapper.processHtmlResponse(simpleRequest); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,10 +28,9 @@ package org.alfresco.rest.core; | ||||
|  | ||||
| import static lombok.AccessLevel.PROTECTED; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| import lombok.Getter; | ||||
| import lombok.Setter; | ||||
|  | ||||
| import org.alfresco.rest.requests.Node; | ||||
| import org.alfresco.rest.requests.coreAPI.RestCoreAPI; | ||||
| import org.alfresco.rest.requests.search.SearchAPI; | ||||
| @@ -55,6 +54,8 @@ import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.context.annotation.Scope; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| /** | ||||
|  * REST API Factory which provides access to the APIs | ||||
|  * | ||||
| @@ -63,10 +64,9 @@ import org.springframework.stereotype.Service; | ||||
|  */ | ||||
| @Service | ||||
| @Scope(value = "prototype") | ||||
| public class RestAPIFactory | ||||
| { | ||||
| public class RestAPIFactory { | ||||
|     @Autowired | ||||
|     @Getter (value = PROTECTED) | ||||
|     @Getter(value = PROTECTED) | ||||
|     private DataUserAIS dataUser; | ||||
|  | ||||
|     @Resource(name = "RMRestWrapper") | ||||
| @@ -74,173 +74,138 @@ public class RestAPIFactory | ||||
|     @Setter | ||||
|     private RMRestWrapper rmRestWrapper; | ||||
|  | ||||
|     private GSCoreAPI getGSCoreAPI(UserModel userModel) | ||||
|     { | ||||
|         getRmRestWrapper().authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser()); | ||||
|     private GSCoreAPI getGSCoreAPI(UserModel userModel) { | ||||
|         getRmRestWrapper() | ||||
|                 .authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser()); | ||||
|         return getRmRestWrapper().withGSCoreAPI(); | ||||
|     } | ||||
|  | ||||
|     private RestCoreAPI getCoreAPI(UserModel userModel) | ||||
|     { | ||||
|         getRmRestWrapper().authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser()); | ||||
|     private RestCoreAPI getCoreAPI(UserModel userModel) { | ||||
|         getRmRestWrapper() | ||||
|                 .authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser()); | ||||
|         return getRmRestWrapper().withCoreAPI(); | ||||
|     } | ||||
|  | ||||
|     public SearchAPI getSearchAPI(UserModel userModel) | ||||
|     { | ||||
|         getRmRestWrapper().authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser()); | ||||
|     public SearchAPI getSearchAPI(UserModel userModel) { | ||||
|         getRmRestWrapper() | ||||
|                 .authenticateUser(userModel != null ? userModel : getDataUser().getAdminUser()); | ||||
|         return getRmRestWrapper().withSearchAPI(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * When no user is given the default is set to admin | ||||
|      */ | ||||
|     public SearchAPI getSearchAPI() | ||||
|     { | ||||
|     /** When no user is given the default is set to admin */ | ||||
|     public SearchAPI getSearchAPI() { | ||||
|         return getSearchAPI(null); | ||||
|     } | ||||
|  | ||||
|     public Node getNodeAPI(RepoTestModel model) throws RuntimeException | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|     public Node getNodeAPI(RepoTestModel model) throws RuntimeException { | ||||
|         try { | ||||
|             return getCoreAPI(null).usingNode(model); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|         } catch (Exception e) { | ||||
|             throw new RuntimeException("Failed to load nodeAPI.", e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public Node getNodeAPI(UserModel userModel, RepoTestModel model) throws RuntimeException | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|     public Node getNodeAPI(UserModel userModel, RepoTestModel model) throws RuntimeException { | ||||
|         try { | ||||
|             return getCoreAPI(userModel).usingNode(model); | ||||
|         } | ||||
|         catch (Exception e) | ||||
|         { | ||||
|         } catch (Exception e) { | ||||
|             throw new RuntimeException("Failed to load nodeAPI.", e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public RMSiteAPI getRMSiteAPI() | ||||
|     { | ||||
|     public RMSiteAPI getRMSiteAPI() { | ||||
|         return getGSCoreAPI(null).usingRMSite(); | ||||
|     } | ||||
|  | ||||
|     public RMSiteAPI getRMSiteAPI(UserModel userModel) | ||||
|     { | ||||
|     public RMSiteAPI getRMSiteAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingRMSite(); | ||||
|     } | ||||
|  | ||||
|     public FilePlanAPI getFilePlansAPI() | ||||
|     { | ||||
|     public FilePlanAPI getFilePlansAPI() { | ||||
|         return getGSCoreAPI(null).usingFilePlans(); | ||||
|     } | ||||
|  | ||||
|     public FilePlanAPI getFilePlansAPI(UserModel userModel) | ||||
|     { | ||||
|     public FilePlanAPI getFilePlansAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingFilePlans(); | ||||
|     } | ||||
|  | ||||
|     public RecordCategoryAPI getRecordCategoryAPI() | ||||
|     { | ||||
|     public RecordCategoryAPI getRecordCategoryAPI() { | ||||
|         return getGSCoreAPI(null).usingRecordCategory(); | ||||
|     } | ||||
|  | ||||
|     public RecordCategoryAPI getRecordCategoryAPI(UserModel userModel) | ||||
|     { | ||||
|     public RecordCategoryAPI getRecordCategoryAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingRecordCategory(); | ||||
|     } | ||||
|  | ||||
|     public RecordFolderAPI getRecordFolderAPI() | ||||
|     { | ||||
|     public RecordFolderAPI getRecordFolderAPI() { | ||||
|         return getGSCoreAPI(null).usingRecordFolder(); | ||||
|     } | ||||
|  | ||||
|     public RecordFolderAPI getRecordFolderAPI(UserModel userModel) | ||||
|     { | ||||
|     public RecordFolderAPI getRecordFolderAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingRecordFolder(); | ||||
|     } | ||||
|  | ||||
|     public RecordsAPI getRecordsAPI() | ||||
|     { | ||||
|     public RecordsAPI getRecordsAPI() { | ||||
|         return getGSCoreAPI(null).usingRecords(); | ||||
|     } | ||||
|  | ||||
|     public RecordsAPI getRecordsAPI(UserModel userModel) | ||||
|     { | ||||
|     public RecordsAPI getRecordsAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingRecords(); | ||||
|     } | ||||
|  | ||||
|     public FilesAPI getFilesAPI() | ||||
|     { | ||||
|     public FilesAPI getFilesAPI() { | ||||
|         return getGSCoreAPI(null).usingFiles(); | ||||
|     } | ||||
|  | ||||
|     public FilesAPI getFilesAPI(UserModel userModel) | ||||
|     { | ||||
|     public FilesAPI getFilesAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingFiles(); | ||||
|     } | ||||
|  | ||||
|     public TransferContainerAPI getTransferContainerAPI() | ||||
|     { | ||||
|     public TransferContainerAPI getTransferContainerAPI() { | ||||
|         return getGSCoreAPI(null).usingTransferContainer(); | ||||
|     } | ||||
|  | ||||
|     public TransferContainerAPI getTransferContainerAPI(UserModel userModel) | ||||
|     { | ||||
|     public TransferContainerAPI getTransferContainerAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingTransferContainer(); | ||||
|     } | ||||
|  | ||||
|     public TransferAPI getTransferAPI() | ||||
|     { | ||||
|     public TransferAPI getTransferAPI() { | ||||
|         return getGSCoreAPI(null).usingTransfer(); | ||||
|     } | ||||
|  | ||||
|     public TransferAPI getTransferAPI(UserModel userModel) | ||||
|     { | ||||
|     public TransferAPI getTransferAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingTransfer(); | ||||
|     } | ||||
|  | ||||
|     public RMUserAPI getRMUserAPI() | ||||
|     { | ||||
|     public RMUserAPI getRMUserAPI() { | ||||
|         return getGSCoreAPI(null).usingRMUser(); | ||||
|     } | ||||
|  | ||||
|     public RMUserAPI getRMUserAPI(UserModel userModel) | ||||
|     { | ||||
|     public RMUserAPI getRMUserAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingRMUser(); | ||||
|     } | ||||
|  | ||||
|     public UnfiledContainerAPI getUnfiledContainersAPI() | ||||
|     { | ||||
|     public UnfiledContainerAPI getUnfiledContainersAPI() { | ||||
|         return getGSCoreAPI(null).usingUnfiledContainers(); | ||||
|     } | ||||
|  | ||||
|     public UnfiledContainerAPI getUnfiledContainersAPI(UserModel userModel) | ||||
|     { | ||||
|     public UnfiledContainerAPI getUnfiledContainersAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingUnfiledContainers(); | ||||
|     } | ||||
|  | ||||
|     public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI() | ||||
|     { | ||||
|     public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI() { | ||||
|         return getGSCoreAPI(null).usingUnfiledRecordFolder(); | ||||
|     } | ||||
|  | ||||
|     public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(UserModel userModel) | ||||
|     { | ||||
|     public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingUnfiledRecordFolder(); | ||||
|     } | ||||
|  | ||||
|     public ActionsExecutionAPI getActionsAPI(UserModel userModel) | ||||
|     { | ||||
|     public ActionsExecutionAPI getActionsAPI(UserModel userModel) { | ||||
|         return getGSCoreAPI(userModel).usingActionsExecutionsAPI(); | ||||
|     } | ||||
|  | ||||
|     public ActionsExecutionAPI getActionsAPI() | ||||
|     { | ||||
|     public ActionsExecutionAPI getActionsAPI() { | ||||
|         return getGSCoreAPI(null).usingActionsExecutionsAPI(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,32 +26,25 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.core.search; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.rest.search.Pagination; | ||||
| import org.alfresco.rest.search.RestRequestQueryModel; | ||||
| import org.alfresco.rest.search.SearchRequest; | ||||
|  | ||||
| /** | ||||
|  * Builder class for creating a search api request | ||||
|  */ | ||||
| public class SearchRequestBuilder extends SearchRequest | ||||
| { | ||||
|     /** | ||||
|      * Constructor for Search API Request | ||||
|      */ | ||||
|     public SearchRequestBuilder() | ||||
|     { | ||||
| import java.util.List; | ||||
|  | ||||
| /** Builder class for creating a search api request */ | ||||
| public class SearchRequestBuilder extends SearchRequest { | ||||
|     /** Constructor for Search API Request */ | ||||
|     public SearchRequestBuilder() { | ||||
|         new SearchRequest(); | ||||
|     } | ||||
|     /** | ||||
|      * Set the sql statement for the SearchRequest | ||||
|      * | ||||
|      * @param query sql statement | ||||
|      * @return search  request | ||||
|      * @return search request | ||||
|      */ | ||||
|     public SearchRequestBuilder setQueryBuilder(RestRequestQueryModel query) | ||||
|     { | ||||
|     public SearchRequestBuilder setQueryBuilder(RestRequestQueryModel query) { | ||||
|         super.setQuery(query); | ||||
|         return this; | ||||
|     } | ||||
| @@ -62,17 +55,13 @@ public class SearchRequestBuilder extends SearchRequest | ||||
|      * @param paging pagination requested | ||||
|      * @return search request | ||||
|      */ | ||||
|     public SearchRequestBuilder setPagingBuilder(Pagination paging) | ||||
|     { | ||||
|     public SearchRequestBuilder setPagingBuilder(Pagination paging) { | ||||
|         super.setPaging(paging); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set the pagination properties | ||||
|      */ | ||||
|     public Pagination setPagination(Integer maxItems, Integer skipCount) | ||||
|     { | ||||
|     /** Set the pagination properties */ | ||||
|     public Pagination setPagination(Integer maxItems, Integer skipCount) { | ||||
|         Pagination pagination = new Pagination(); | ||||
|         pagination.setMaxItems(maxItems); | ||||
|         pagination.setSkipCount(skipCount); | ||||
| @@ -85,10 +74,8 @@ public class SearchRequestBuilder extends SearchRequest | ||||
|      * @param fields requested fields | ||||
|      * @return search request | ||||
|      */ | ||||
|     public SearchRequestBuilder setFieldsBuilder(List<String> fields) | ||||
|     { | ||||
|     public SearchRequestBuilder setFieldsBuilder(List<String> fields) { | ||||
|         super.setFields(fields); | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,13 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.core.v0; | ||||
|  | ||||
| import javax.json.Json; | ||||
| import javax.json.JsonReader; | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.time.format.DateTimeFormatter; | ||||
| import java.time.format.DateTimeFormatterBuilder; | ||||
|  | ||||
| import org.apache.commons.io.IOUtils; | ||||
| import org.apache.http.HttpEntity; | ||||
| import org.apache.http.HttpResponse; | ||||
| @@ -42,25 +35,33 @@ import org.json.JSONObject; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.io.InputStream; | ||||
| import java.time.format.DateTimeFormatter; | ||||
| import java.time.format.DateTimeFormatterBuilder; | ||||
|  | ||||
| import javax.json.Json; | ||||
| import javax.json.JsonReader; | ||||
|  | ||||
| /** | ||||
|  * Helper methods for use with REST APIs. | ||||
|  * | ||||
|  * @author Tom Page | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class APIUtils | ||||
| { | ||||
| public class APIUtils { | ||||
|     /** Logger for this class. */ | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(APIUtils.class); | ||||
|     /** The ISO instant formatter that formats or parses an instant in UTC, such as '2011-12-03T10:15:305Z' | ||||
|      * similar with {@link DateTimeFormatter#ISO_INSTANT}, but with only 3 nanoseconds*/ | ||||
|     /** | ||||
|      * The ISO instant formatter that formats or parses an instant in UTC, such as | ||||
|      * '2011-12-03T10:15:305Z' similar with {@link DateTimeFormatter#ISO_INSTANT}, but with only 3 | ||||
|      * nanoseconds | ||||
|      */ | ||||
|     public static final DateTimeFormatter ISO_INSTANT_FORMATTER = | ||||
|             new DateTimeFormatterBuilder().appendInstant(3).toFormatter(); | ||||
|  | ||||
|     /** Private constructor for helper class. */ | ||||
|     private APIUtils() | ||||
|     { | ||||
|     } | ||||
|     private APIUtils() {} | ||||
|  | ||||
|     /** | ||||
|      * Extract the body of a HTTP response as a JSON object. | ||||
| @@ -68,15 +69,11 @@ public class APIUtils | ||||
|      * @param httpResponse The HTTP response. | ||||
|      * @return A JSON representation of the object. | ||||
|      */ | ||||
|     public static JSONObject convertHTTPResponseToJSON(HttpResponse httpResponse) | ||||
|     { | ||||
|     public static JSONObject convertHTTPResponseToJSON(HttpResponse httpResponse) { | ||||
|         String source = null; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             source = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8"); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         } catch (IOException e) { | ||||
|             throw new IllegalArgumentException("Could not extract JSON from HTTP response.", e); | ||||
|         } | ||||
|         LOGGER.info("Response body:\n{}", source); | ||||
| @@ -89,30 +86,21 @@ public class APIUtils | ||||
|      * @param httpResponse http response | ||||
|      * @return error message from the http response | ||||
|      */ | ||||
|     public static String extractErrorMessageFromHttpResponse(HttpResponse httpResponse) | ||||
|     { | ||||
|     public static String extractErrorMessageFromHttpResponse(HttpResponse httpResponse) { | ||||
|         final HttpEntity entity = httpResponse.getEntity(); | ||||
|         JsonReader reader = null; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             final InputStream responseStream = entity.getContent(); | ||||
|             reader = Json.createReader(responseStream); | ||||
|             return reader.readObject().getString("message"); | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|         } catch (JSONException error) { | ||||
|  | ||||
|             LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error); | ||||
|         } | ||||
|         catch (ParseException | IOException error) | ||||
|         { | ||||
|         } catch (ParseException | IOException error) { | ||||
|  | ||||
|             LOGGER.error("Parsing message body failed.", error); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             if (reader != null) | ||||
|             { | ||||
|         } finally { | ||||
|             if (reader != null) { | ||||
|                 reader.close(); | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -29,16 +29,6 @@ package org.alfresco.rest.core.v0; | ||||
| import static org.testng.AssertJUnit.assertEquals; | ||||
| import static org.testng.AssertJUnit.assertNull; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URI; | ||||
| import java.net.URISyntaxException; | ||||
| import java.text.MessageFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| import org.alfresco.dataprep.AlfrescoHttpClient; | ||||
| import org.alfresco.dataprep.AlfrescoHttpClientFactory; | ||||
| import org.alfresco.dataprep.ContentService; | ||||
| @@ -64,33 +54,42 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URI; | ||||
| import java.net.URISyntaxException; | ||||
| import java.text.MessageFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * The base API class containing common methods for making v0 API requests | ||||
|  * | ||||
|  * @author Kristijan Conkas | ||||
|  * @since 2.5 | ||||
|  */ | ||||
| public abstract class BaseAPI | ||||
| { | ||||
| public abstract class BaseAPI { | ||||
|     // logger | ||||
|     protected static final Logger LOGGER = LoggerFactory.getLogger(BaseAPI.class); | ||||
|  | ||||
|     /** exception key in JSON response body */ | ||||
|     private static final String EXCEPTION_KEY = "exception"; | ||||
|  | ||||
|     private static final String MESSAGE_KEY = "message"; | ||||
|     public static final String NODE_PREFIX = "workspace/SpacesStore/"; | ||||
|     protected static final String UPDATE_METADATA_API = "{0}node/{1}/formprocessor"; | ||||
|     protected static final String ACTIONS_API = "{0}actionQueue"; | ||||
|     protected static final String RM_ACTIONS_API = "{0}rma/actions/ExecutionQueue"; | ||||
|     public static final String RM_SITE_ID = "rm"; | ||||
|     protected static final String SHARE_ACTION_API = "{0}internal/shared/share/workspace/SpacesStore/{1}"; | ||||
|     protected static final String SHARE_ACTION_API = | ||||
|             "{0}internal/shared/share/workspace/SpacesStore/{1}"; | ||||
|     private static final String SLINGSHOT_PREFIX = "alfresco/s/slingshot/"; | ||||
|  | ||||
|     @Autowired | ||||
|     private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|     @Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|  | ||||
|     @Autowired | ||||
|     protected ContentService contentService; | ||||
|     @Autowired protected ContentService contentService; | ||||
|  | ||||
|     public static final String NODE_REF_WORKSPACE_SPACES_STORE = "workspace://SpacesStore/"; | ||||
|     private static final String FILE_PLAN_PATH = "/Sites/rm/documentLibrary"; | ||||
| @@ -102,20 +101,15 @@ public abstract class BaseAPI | ||||
|      * @return list of specified property values in result | ||||
|      * @throws RuntimeException for malformed response | ||||
|      */ | ||||
|     protected List<String> getPropertyValues(JSONObject result, String propertyName) | ||||
|     { | ||||
|     protected List<String> getPropertyValues(JSONObject result, String propertyName) { | ||||
|         ArrayList<String> results = new ArrayList<>(); | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             JSONArray items = result.getJSONArray("items"); | ||||
|  | ||||
|             for (int i = 0; i < items.length(); i++) | ||||
|             { | ||||
|             for (int i = 0; i < items.length(); i++) { | ||||
|                 results.add(items.getJSONObject(i).getString(propertyName)); | ||||
|             } | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|         } catch (JSONException error) { | ||||
|             throw new RuntimeException("Unable to parse result", error); | ||||
|         } | ||||
|  | ||||
| @@ -124,62 +118,55 @@ public abstract class BaseAPI | ||||
|  | ||||
|     /** | ||||
|      * Helper method to extract the property value for the given nodeRef and property name | ||||
|      *  | ||||
|      * | ||||
|      * @param result | ||||
|      * @param nodeRef | ||||
|      * @param propertyName | ||||
|      * @return | ||||
|      */ | ||||
|     protected String getPropertyValue(JSONObject result, String nodeRef, String propertyName) | ||||
|     { | ||||
|     protected String getPropertyValue(JSONObject result, String nodeRef, String propertyName) { | ||||
|         String propertyValue = ""; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             JSONArray items = result.getJSONArray("items"); | ||||
|             for (int i = 0; i < items.length(); i++) | ||||
|             { | ||||
|             for (int i = 0; i < items.length(); i++) { | ||||
|                 JSONObject item = items.getJSONObject(i); | ||||
|                 if(nodeRef.equals(item.getString("nodeRef"))) | ||||
|                 { | ||||
|                 if (nodeRef.equals(item.getString("nodeRef"))) { | ||||
|                     propertyValue = item.getJSONObject("properties").getString(propertyName); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|         } catch (JSONException error) { | ||||
|             throw new RuntimeException("Unable to parse result", error); | ||||
|         } | ||||
|  | ||||
|         return propertyValue; | ||||
|     } | ||||
|      | ||||
|  | ||||
|     /** | ||||
|      * Helper method to extract property values from request result and put them in map as a list that corresponds to a unique property value. | ||||
|      * Helper method to extract property values from request result and put them in map as a list | ||||
|      * that corresponds to a unique property value. | ||||
|      * | ||||
|      * @param requestResult the request response | ||||
|      * @return a map containing information about multiple properties values that correspond to a unique one | ||||
|      * @return a map containing information about multiple properties values that correspond to a | ||||
|      *     unique one | ||||
|      * @throws RuntimeException for malformed response | ||||
|      */ | ||||
|     protected Map<String, List<String>> getPropertyValuesByUniquePropertyValue(JSONObject requestResult, String uniqueProperty, List<String> otherProperties) | ||||
|     { | ||||
|     protected Map<String, List<String>> getPropertyValuesByUniquePropertyValue( | ||||
|             JSONObject requestResult, String uniqueProperty, List<String> otherProperties) { | ||||
|         Map<String, List<String>> valuesByUniqueProperty = new HashMap<>(); | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             JSONArray items = requestResult.getJSONArray("items"); | ||||
|  | ||||
|             for (int i = 0; i < items.length(); i++) | ||||
|             { | ||||
|             for (int i = 0; i < items.length(); i++) { | ||||
|                 List<String> otherPropertiesValues = new ArrayList<>(); | ||||
|  | ||||
|                 for (int j = 0; j < otherProperties.size(); j++) | ||||
|                 { | ||||
|                     otherPropertiesValues.add(items.getJSONObject(i).get(otherProperties.get(j)).toString()); | ||||
|                 for (int j = 0; j < otherProperties.size(); j++) { | ||||
|                     otherPropertiesValues.add( | ||||
|                             items.getJSONObject(i).get(otherProperties.get(j)).toString()); | ||||
|                 } | ||||
|                 valuesByUniqueProperty.put(items.getJSONObject(i).getString(uniqueProperty), otherPropertiesValues); | ||||
|                 valuesByUniqueProperty.put( | ||||
|                         items.getJSONObject(i).getString(uniqueProperty), otherPropertiesValues); | ||||
|             } | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|         } catch (JSONException error) { | ||||
|             throw new RuntimeException("Unable to parse result", error); | ||||
|         } | ||||
|  | ||||
| @@ -191,13 +178,12 @@ public abstract class BaseAPI | ||||
|      * | ||||
|      * @param username the username | ||||
|      * @param password the password | ||||
|      * @param path     the path to the container eg. in case of a category it would be the category name, | ||||
|      *                 in case of a folder it would be /categoryName/folderName | ||||
|      *                 when trying to get File Plan, the path would be "" | ||||
|      * @param path the path to the container eg. in case of a category it would be the category | ||||
|      *     name, in case of a folder it would be /categoryName/folderName when trying to get File | ||||
|      *     Plan, the path would be "" | ||||
|      * @return the container nodeRef | ||||
|      */ | ||||
|     public String getItemNodeRef(String username, String password, String path) | ||||
|     { | ||||
|     public String getItemNodeRef(String username, String password, String path) { | ||||
|         return contentService.getNodeRefByPath(username, password, FILE_PLAN_PATH + path); | ||||
|     } | ||||
|  | ||||
| @@ -206,17 +192,14 @@ public abstract class BaseAPI | ||||
|      * | ||||
|      * @param username the user's username | ||||
|      * @param password its password | ||||
|      * @param path     the object path | ||||
|      * @param path the object path | ||||
|      * @return the object in case it exists, null if its does not exist | ||||
|      */ | ||||
|     protected CmisObject getObjectByPath(String username, String password, String path) | ||||
|     { | ||||
|     protected CmisObject getObjectByPath(String username, String password, String path) { | ||||
|         CmisObject object; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             object = contentService.getCMISSession(username, password).getObjectByPath(path); | ||||
|         } catch (CmisObjectNotFoundException notFoundError) | ||||
|         { | ||||
|         } catch (CmisObjectNotFoundException notFoundError) { | ||||
|             return null; | ||||
|         } | ||||
|         return object; | ||||
| @@ -230,23 +213,19 @@ public abstract class BaseAPI | ||||
|      * @param parameters if the request has parameters | ||||
|      * @return result object (see API reference for more details), null for any errors | ||||
|      */ | ||||
|     protected JSONObject facetedRequest(String username, String password, List<NameValuePair> parameters, String requestURI) | ||||
|     { | ||||
|     protected JSONObject facetedRequest( | ||||
|             String username, String password, List<NameValuePair> parameters, String requestURI) { | ||||
|         String requestURL; | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|  | ||||
|         if (parameters == null || parameters.isEmpty()) | ||||
|         { | ||||
|              requestURL = MessageFormat.format( | ||||
|                     requestURI, | ||||
|                     client.getAlfrescoUrl()); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|              requestURL = MessageFormat.format( | ||||
|                     requestURI, | ||||
|                     client.getAlfrescoUrl(), | ||||
|                     URLEncodedUtils.format(parameters, "UTF-8")); | ||||
|         if (parameters == null || parameters.isEmpty()) { | ||||
|             requestURL = MessageFormat.format(requestURI, client.getAlfrescoUrl()); | ||||
|         } else { | ||||
|             requestURL = | ||||
|                     MessageFormat.format( | ||||
|                             requestURI, | ||||
|                             client.getAlfrescoUrl(), | ||||
|                             URLEncodedUtils.format(parameters, "UTF-8")); | ||||
|         } | ||||
|         LOGGER.info("On GET {}, received following response: ", requestURL); | ||||
|         client.close(); | ||||
| @@ -255,89 +234,77 @@ public abstract class BaseAPI | ||||
|  | ||||
|     /** | ||||
|      * Helper method for GET requests | ||||
|      * | ||||
|      * @param adminUser user with administrative privileges | ||||
|      * @param adminPassword password for adminUser | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected JSONObject doGetRequest(String adminUser, | ||||
|         String adminPassword, | ||||
|         String urlTemplate, | ||||
|         String ... urlTemplateParams) | ||||
|     { | ||||
|     protected JSONObject doGetRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         String requestUrl = MessageFormat.format( | ||||
|             urlTemplate, | ||||
|             client.getApiUrl(), | ||||
|             urlTemplateParams); | ||||
|         String requestUrl = | ||||
|                 MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams); | ||||
|         client.close(); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             return doRequest(HttpGet.class, requestUrl, adminUser, adminPassword, null); | ||||
|         } | ||||
|         catch (InstantiationException | IllegalAccessException error) | ||||
|         { | ||||
|         } catch (InstantiationException | IllegalAccessException error) { | ||||
|             throw new IllegalArgumentException("doGetRequest failed", error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method for Delete requests | ||||
|      * | ||||
|      * @param adminUser user with administrative privileges | ||||
|      * @param adminPassword password for adminUser | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected JSONObject doDeleteRequest(String adminUser, | ||||
|         String adminPassword, | ||||
|         String urlTemplate, | ||||
|         String ... urlTemplateParams) | ||||
|     { | ||||
|     protected JSONObject doDeleteRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         String requestUrl = MessageFormat.format( | ||||
|             urlTemplate, | ||||
|             client.getApiUrl(), | ||||
|             urlTemplateParams); | ||||
|         String requestUrl = | ||||
|                 MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams); | ||||
|         client.close(); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             return doRequest(HttpDelete.class, requestUrl, adminUser, adminPassword, null); | ||||
|         } | ||||
|         catch (InstantiationException | IllegalAccessException error) | ||||
|         { | ||||
|         } catch (InstantiationException | IllegalAccessException error) { | ||||
|             throw new IllegalArgumentException("doDeleteRequest failed", error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method for PUT requests | ||||
|      * | ||||
|      * @param adminUser user with administrative privileges | ||||
|      * @param adminPassword password for adminUser | ||||
|      * @param requestParams zero or more endpoint specific request parameters | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected JSONObject doPutRequest(String adminUser, | ||||
|         String adminPassword, | ||||
|         JSONObject requestParams, | ||||
|         String urlTemplate, | ||||
|         String ... urlTemplateParams) | ||||
|     { | ||||
|     protected JSONObject doPutRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         String requestUrl = MessageFormat.format( | ||||
|             urlTemplate, | ||||
|             client.getApiUrl(), | ||||
|             urlTemplateParams); | ||||
|         String requestUrl = | ||||
|                 MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams); | ||||
|         client.close(); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             return doRequest(HttpPut.class, requestUrl, adminUser, adminPassword, requestParams); | ||||
|         } | ||||
|         catch (InstantiationException | IllegalAccessException error) | ||||
|         { | ||||
|         } catch (InstantiationException | IllegalAccessException error) { | ||||
|             throw new IllegalArgumentException("doPutRequest failed", error); | ||||
|         } | ||||
|     } | ||||
| @@ -352,15 +319,22 @@ public abstract class BaseAPI | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected HttpResponse doPutJsonRequest(String adminUser, | ||||
|                 String adminPassword, | ||||
|                 int expectedStatusCode, | ||||
|                 JSONObject requestParams, | ||||
|                 String urlTemplate, | ||||
|                 String... urlTemplateParams) | ||||
|     { | ||||
|     protected HttpResponse doPutJsonRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             int expectedStatusCode, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         return doPutJsonRequest(adminUser, adminPassword, expectedStatusCode, client.getApiUrl(), requestParams, urlTemplate, urlTemplateParams); | ||||
|         return doPutJsonRequest( | ||||
|                 adminUser, | ||||
|                 adminPassword, | ||||
|                 expectedStatusCode, | ||||
|                 client.getApiUrl(), | ||||
|                 requestParams, | ||||
|                 urlTemplate, | ||||
|                 urlTemplateParams); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -375,23 +349,25 @@ public abstract class BaseAPI | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      * @throws AssertionError if the returned status code is not as expected. | ||||
|      */ | ||||
|     private HttpResponse doPutJsonRequest(String adminUser, | ||||
|                 String adminPassword, | ||||
|                 int expectedStatusCode, | ||||
|                 String urlStart, | ||||
|                 JSONObject requestParams, | ||||
|                 String urlTemplate, | ||||
|                 String... urlTemplateParams) | ||||
|     { | ||||
|     private HttpResponse doPutJsonRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             int expectedStatusCode, | ||||
|             String urlStart, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         String requestUrl = formatRequestUrl(urlStart, urlTemplate, urlTemplateParams); | ||||
|         try | ||||
|         { | ||||
|             HttpResponse httpResponse = doRequestJson(HttpPut.class, requestUrl, adminUser, adminPassword, requestParams); | ||||
|             assertEquals("PUT request to " + requestUrl + " was not successful.", expectedStatusCode, httpResponse.getStatusLine().getStatusCode()); | ||||
|         try { | ||||
|             HttpResponse httpResponse = | ||||
|                     doRequestJson( | ||||
|                             HttpPut.class, requestUrl, adminUser, adminPassword, requestParams); | ||||
|             assertEquals( | ||||
|                     "PUT request to " + requestUrl + " was not successful.", | ||||
|                     expectedStatusCode, | ||||
|                     httpResponse.getStatusLine().getStatusCode()); | ||||
|             return httpResponse; | ||||
|         } | ||||
|         catch (InstantiationException | IllegalAccessException error) | ||||
|         { | ||||
|         } catch (InstantiationException | IllegalAccessException error) { | ||||
|             throw new IllegalArgumentException("doPutRequest failed", error); | ||||
|         } | ||||
|     } | ||||
| @@ -404,10 +380,9 @@ public abstract class BaseAPI | ||||
|      * @param urlTemplateParams Any parameters that need to be filled into the URL template. | ||||
|      * @return The resultant URL. | ||||
|      */ | ||||
|     private String formatRequestUrl(String urlStart, String urlTemplate, String[] urlTemplateParams) | ||||
|     { | ||||
|         if (urlTemplateParams.length == 1) | ||||
|         { | ||||
|     private String formatRequestUrl( | ||||
|             String urlStart, String urlTemplate, String[] urlTemplateParams) { | ||||
|         if (urlTemplateParams.length == 1) { | ||||
|             // The format method needs some help to know not to use the whole array object. | ||||
|             return MessageFormat.format(urlTemplate, urlStart, urlTemplateParams[0]); | ||||
|         } | ||||
| @@ -416,31 +391,27 @@ public abstract class BaseAPI | ||||
|  | ||||
|     /** | ||||
|      * Helper method for POST requests | ||||
|      * | ||||
|      * @param adminUser user with administrative privileges | ||||
|      * @param adminPassword password for adminUser | ||||
|      * @param requestParams zero or more endpoint specific request parameters | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected JSONObject doPostRequest(String adminUser, | ||||
|         String adminPassword, | ||||
|         JSONObject requestParams, | ||||
|         String urlTemplate, | ||||
|         String ... urlTemplateParams) | ||||
|     { | ||||
|     protected JSONObject doPostRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         String requestUrl = MessageFormat.format( | ||||
|             urlTemplate, | ||||
|             client.getApiUrl(), | ||||
|             urlTemplateParams); | ||||
|         String requestUrl = | ||||
|                 MessageFormat.format(urlTemplate, client.getApiUrl(), urlTemplateParams); | ||||
|         client.close(); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             return doRequest(HttpPost.class, requestUrl, adminUser, adminPassword, requestParams); | ||||
|         } | ||||
|         catch (InstantiationException | IllegalAccessException error) | ||||
|         { | ||||
|         } catch (InstantiationException | IllegalAccessException error) { | ||||
|             throw new IllegalArgumentException("doPostRequest failed", error); | ||||
|         } | ||||
|     } | ||||
| @@ -455,15 +426,22 @@ public abstract class BaseAPI | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected HttpResponse doPostJsonRequest(String adminUser, | ||||
|                                     String adminPassword, | ||||
|                                     int expectedStatusCode, | ||||
|                                     JSONObject requestParams, | ||||
|                                     String urlTemplate, | ||||
|                                     String... urlTemplateParams) | ||||
|     { | ||||
|     protected HttpResponse doPostJsonRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             int expectedStatusCode, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         return doPostJsonRequest(adminUser, adminPassword, expectedStatusCode, client.getApiUrl(), requestParams, urlTemplate, urlTemplateParams); | ||||
|         return doPostJsonRequest( | ||||
|                 adminUser, | ||||
|                 adminPassword, | ||||
|                 expectedStatusCode, | ||||
|                 client.getApiUrl(), | ||||
|                 requestParams, | ||||
|                 urlTemplate, | ||||
|                 urlTemplateParams); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -476,15 +454,22 @@ public abstract class BaseAPI | ||||
|      * @param urlTemplate request URL template | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      */ | ||||
|     protected HttpResponse doSlingshotPostJsonRequest(String adminUser, | ||||
|                 String adminPassword, | ||||
|                 int expectedStatusCode, | ||||
|                 JSONObject requestParams, | ||||
|                 String urlTemplate, | ||||
|                 String... urlTemplateParams) | ||||
|     { | ||||
|     protected HttpResponse doSlingshotPostJsonRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             int expectedStatusCode, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         return doPostJsonRequest(adminUser, adminPassword, expectedStatusCode, client.getAlfrescoUrl() + SLINGSHOT_PREFIX, requestParams, urlTemplate, urlTemplateParams); | ||||
|         return doPostJsonRequest( | ||||
|                 adminUser, | ||||
|                 adminPassword, | ||||
|                 expectedStatusCode, | ||||
|                 client.getAlfrescoUrl() + SLINGSHOT_PREFIX, | ||||
|                 requestParams, | ||||
|                 urlTemplate, | ||||
|                 urlTemplateParams); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -499,30 +484,33 @@ public abstract class BaseAPI | ||||
|      * @param urlTemplateParams zero or more parameters used with <i>urlTemplate</i> | ||||
|      * @throws AssertionError if the returned status code is not as expected. | ||||
|      */ | ||||
|     private HttpResponse doPostJsonRequest(String adminUser, | ||||
|                 String adminPassword, | ||||
|                 int expectedStatusCode, | ||||
|                 String urlStart, | ||||
|                 JSONObject requestParams, | ||||
|                 String urlTemplate, | ||||
|                 String... urlTemplateParams) | ||||
|     { | ||||
|     private HttpResponse doPostJsonRequest( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             int expectedStatusCode, | ||||
|             String urlStart, | ||||
|             JSONObject requestParams, | ||||
|             String urlTemplate, | ||||
|             String... urlTemplateParams) { | ||||
|         String requestUrl; | ||||
|         requestUrl = formatRequestUrl(urlStart, urlTemplate, urlTemplateParams); | ||||
|         try | ||||
|         { | ||||
|             HttpResponse httpResponse = doRequestJson(HttpPost.class, requestUrl, adminUser, adminPassword, requestParams); | ||||
|             assertEquals("POST request to " + requestUrl + " was not successful.", expectedStatusCode, httpResponse.getStatusLine().getStatusCode()); | ||||
|         try { | ||||
|             HttpResponse httpResponse = | ||||
|                     doRequestJson( | ||||
|                             HttpPost.class, requestUrl, adminUser, adminPassword, requestParams); | ||||
|             assertEquals( | ||||
|                     "POST request to " + requestUrl + " was not successful.", | ||||
|                     expectedStatusCode, | ||||
|                     httpResponse.getStatusLine().getStatusCode()); | ||||
|             return httpResponse; | ||||
|         } | ||||
|         catch (InstantiationException | IllegalAccessException error) | ||||
|         { | ||||
|         } catch (InstantiationException | IllegalAccessException error) { | ||||
|             throw new IllegalArgumentException("doPostRequest failed", error); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method for handling generic HTTP requests | ||||
|      * | ||||
|      * @param requestType request type (a subclass of {@link HttpRequestBase}) | ||||
|      * @param requestUrl URL the request is to be sent to | ||||
|      * @param adminUser user with administrative privileges | ||||
| @@ -533,88 +521,76 @@ public abstract class BaseAPI | ||||
|      * @throws InstantiationException for invalid <i>requestType</i> | ||||
|      */ | ||||
|     private <T extends HttpRequestBase> JSONObject doRequest( | ||||
|         Class<T> requestType, | ||||
|         String requestUrl, | ||||
|         String adminUser, | ||||
|         String adminPassword, | ||||
|         JSONObject requestParams) throws InstantiationException, IllegalAccessException | ||||
|     { | ||||
|             Class<T> requestType, | ||||
|             String requestUrl, | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             JSONObject requestParams) | ||||
|             throws InstantiationException, IllegalAccessException { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         T request = requestType.newInstance(); | ||||
|  | ||||
|         JSONObject responseBody = null; | ||||
|         JSONObject returnValues = null; | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             request.setURI(new URI(requestUrl)); | ||||
|  | ||||
|             if (requestParams != null && request instanceof HttpEntityEnclosingRequestBase) | ||||
|             { | ||||
|                 ((HttpEntityEnclosingRequestBase) request).setEntity(new StringEntity(requestParams.toString())); | ||||
|             if (requestParams != null && request instanceof HttpEntityEnclosingRequestBase) { | ||||
|                 ((HttpEntityEnclosingRequestBase) request) | ||||
|                         .setEntity(new StringEntity(requestParams.toString())); | ||||
|             } | ||||
|             LOGGER.info("Sending {} request to {}", requestType.getSimpleName(), requestUrl); | ||||
|             LOGGER.info("Request body: {}", requestParams); | ||||
|             HttpResponse response = client.execute(adminUser, adminPassword, request); | ||||
|             LOGGER.info("Response: {}", response.getStatusLine()); | ||||
|  | ||||
|             try | ||||
|             { | ||||
|             try { | ||||
|                 responseBody = new JSONObject(EntityUtils.toString(response.getEntity())); | ||||
|             } | ||||
|             catch (JSONException error) | ||||
|             { | ||||
|                 LOGGER.error("Converting message body to JSON failed. Body: {}", responseBody, error); | ||||
|             } | ||||
|             catch (ParseException | IOException error) | ||||
|             { | ||||
|             } catch (JSONException error) { | ||||
|                 LOGGER.error( | ||||
|                         "Converting message body to JSON failed. Body: {}", responseBody, error); | ||||
|             } catch (ParseException | IOException error) { | ||||
|                 LOGGER.error("Parsing message body failed.", error); | ||||
|             } | ||||
|  | ||||
|             switch (response.getStatusLine().getStatusCode()) | ||||
|             { | ||||
|             switch (response.getStatusLine().getStatusCode()) { | ||||
|                 case HttpStatus.SC_OK: | ||||
|                 case HttpStatus.SC_CREATED: | ||||
|                     // request successful | ||||
|                     if (responseBody != null) | ||||
|                     { | ||||
|                     if (responseBody != null) { | ||||
|                         returnValues = responseBody; | ||||
|                     } | ||||
|                     break; | ||||
|  | ||||
|                 case HttpStatus.SC_INTERNAL_SERVER_ERROR: | ||||
| 					if (responseBody != null  && responseBody.has(EXCEPTION_KEY)) | ||||
|                     { | ||||
|                         LOGGER.error("Request failed with error message: {}", responseBody.getString(MESSAGE_KEY)); | ||||
|                     if (responseBody != null && responseBody.has(EXCEPTION_KEY)) { | ||||
|                         LOGGER.error( | ||||
|                                 "Request failed with error message: {}", | ||||
|                                 responseBody.getString(MESSAGE_KEY)); | ||||
|                         returnValues = responseBody; | ||||
|                     } | ||||
|                     break; | ||||
|                 case HttpStatus.SC_BAD_REQUEST: | ||||
|                 case HttpStatus.SC_UNPROCESSABLE_ENTITY: | ||||
|                     if (responseBody != null  && responseBody.has(EXCEPTION_KEY)) | ||||
|                     { | ||||
|                     if (responseBody != null && responseBody.has(EXCEPTION_KEY)) { | ||||
|                         LOGGER.error("Request failed: {}", responseBody.getString(EXCEPTION_KEY)); | ||||
|                         returnValues = responseBody; | ||||
|                     } | ||||
|                     break; | ||||
|  | ||||
|                 default: | ||||
|                     LOGGER.error("Request returned unexpected HTTP status {}", response.getStatusLine().getStatusCode()); | ||||
|                     LOGGER.error( | ||||
|                             "Request returned unexpected HTTP status {}", | ||||
|                             response.getStatusLine().getStatusCode()); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|         } catch (JSONException error) { | ||||
|             LOGGER.error("Unable to extract response parameter", error); | ||||
|         } | ||||
|         catch (UnsupportedEncodingException | URISyntaxException error1) | ||||
|         { | ||||
|         } catch (UnsupportedEncodingException | URISyntaxException error1) { | ||||
|             LOGGER.error("Unable to construct request", error1); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             if (request != null) | ||||
|             { | ||||
|         } finally { | ||||
|             if (request != null) { | ||||
|                 request.releaseConnection(); | ||||
|             } | ||||
|             client.close(); | ||||
| @@ -628,19 +604,18 @@ public abstract class BaseAPI | ||||
|             String requestUrl, | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             JSONObject requestParams) throws InstantiationException, IllegalAccessException | ||||
|     { | ||||
|             JSONObject requestParams) | ||||
|             throws InstantiationException, IllegalAccessException { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         T request = requestType.newInstance(); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             request.setURI(new URI(requestUrl)); | ||||
|             request.setHeader("Content-Type", "application/json"); | ||||
|  | ||||
|             if (requestParams != null && request instanceof HttpEntityEnclosingRequestBase) | ||||
|             { | ||||
|                 ((HttpEntityEnclosingRequestBase) request).setEntity(new StringEntity(requestParams.toString())); | ||||
|             if (requestParams != null && request instanceof HttpEntityEnclosingRequestBase) { | ||||
|                 ((HttpEntityEnclosingRequestBase) request) | ||||
|                         .setEntity(new StringEntity(requestParams.toString())); | ||||
|             } | ||||
|  | ||||
|             LOGGER.info("Sending {} request to {}", requestType.getSimpleName(), requestUrl); | ||||
| @@ -648,15 +623,10 @@ public abstract class BaseAPI | ||||
|             HttpResponse httpResponse = client.execute(adminUser, adminPassword, request); | ||||
|             LOGGER.info("Response: {}", httpResponse.getStatusLine()); | ||||
|             return httpResponse; | ||||
|         } | ||||
|         catch (UnsupportedEncodingException | URISyntaxException error1) | ||||
|         { | ||||
|         } catch (UnsupportedEncodingException | URISyntaxException error1) { | ||||
|             LOGGER.error("Unable to construct request", error1); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             if (request != null) | ||||
|             { | ||||
|         } finally { | ||||
|             if (request != null) { | ||||
|                 request.releaseConnection(); | ||||
|             } | ||||
|             client.close(); | ||||
| @@ -665,12 +635,8 @@ public abstract class BaseAPI | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Used to set RM items properties | ||||
|      * including records, categories and folders | ||||
|      */ | ||||
|     public enum RMProperty | ||||
|     { | ||||
|     /** Used to set RM items properties including records, categories and folders */ | ||||
|     public enum RMProperty { | ||||
|         NAME, | ||||
|         TITLE, | ||||
|         CONTENT, | ||||
| @@ -687,8 +653,7 @@ public abstract class BaseAPI | ||||
|         PUBLICATION_DATE | ||||
|     } | ||||
|  | ||||
|     public enum RETENTION_SCHEDULE | ||||
|     { | ||||
|     public enum RETENTION_SCHEDULE { | ||||
|         NAME, | ||||
|         DESCRIPTION, | ||||
|         RETENTION_AUTHORITY, | ||||
| @@ -702,11 +667,8 @@ public abstract class BaseAPI | ||||
|         COMBINE_DISPOSITION_STEP_CONDITIONS | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Used to execute rm actions on a node | ||||
|      */ | ||||
|     public enum RM_ACTIONS | ||||
|     { | ||||
|     /** Used to execute rm actions on a node */ | ||||
|     public enum RM_ACTIONS { | ||||
|         EDIT_DISPOSITION_DATE("editDispositionActionAsOfDate"), | ||||
|         END_RETENTION("retain"), | ||||
|         CUT_OFF("cutoff"), | ||||
| @@ -717,19 +679,16 @@ public abstract class BaseAPI | ||||
|         DESTROY("destroy"); | ||||
|         String action; | ||||
|  | ||||
|         private RM_ACTIONS(String action) | ||||
|         { | ||||
|         private RM_ACTIONS(String action) { | ||||
|             this.action = action; | ||||
|         } | ||||
|  | ||||
|         public String getAction() | ||||
|         { | ||||
|         public String getAction() { | ||||
|             return action; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public enum PermissionType | ||||
|     { | ||||
|     public enum PermissionType { | ||||
|         SET_READ, | ||||
|         REMOVE_READ, | ||||
|         SET_READ_AND_FILE, | ||||
| @@ -740,14 +699,13 @@ public abstract class BaseAPI | ||||
|      * Util to return the property value from a map | ||||
|      * | ||||
|      * @param properties the map containing properties | ||||
|      * @param property   to get value for | ||||
|      * @param property to get value for | ||||
|      * @return the property value | ||||
|      */ | ||||
|     public <K extends Enum<?>> String getPropertyValue(Map<K, String> properties, Enum<?> property) | ||||
|     { | ||||
|     public <K extends Enum<?>> String getPropertyValue( | ||||
|             Map<K, String> properties, Enum<?> property) { | ||||
|         String value = properties.get(property); | ||||
|         if (value == null) | ||||
|         { | ||||
|         if (value == null) { | ||||
|             return ""; | ||||
|         } | ||||
|         return value; | ||||
| @@ -756,18 +714,22 @@ public abstract class BaseAPI | ||||
|     /** | ||||
|      * Retrieves the property value and decides if that gets to be added to the request | ||||
|      * | ||||
|      * @param requestParams        the request parameters | ||||
|      * @param requestParams the request parameters | ||||
|      * @param propertyRequestValue the property name in the request, eg. "prop_cm_name" | ||||
|      * @param itemProperties       map of item's properties values | ||||
|      * @param property             the property in the property map to check value for | ||||
|      * @return the json object used in request with the property with its value added if that is not null or empty | ||||
|      * @param itemProperties map of item's properties values | ||||
|      * @param property the property in the property map to check value for | ||||
|      * @return the json object used in request with the property with its value added if that is not | ||||
|      *     null or empty | ||||
|      */ | ||||
|     protected <K extends Enum<?>> JSONObject addPropertyToRequest(JSONObject requestParams, String propertyRequestValue, Map<K, String> itemProperties, Enum<?> property) throws JSONException | ||||
|     { | ||||
|     protected <K extends Enum<?>> JSONObject addPropertyToRequest( | ||||
|             JSONObject requestParams, | ||||
|             String propertyRequestValue, | ||||
|             Map<K, String> itemProperties, | ||||
|             Enum<?> property) | ||||
|             throws JSONException { | ||||
|         String propertyValue = getPropertyValue(itemProperties, property); | ||||
|  | ||||
|         if (!propertyValue.equals("")) | ||||
|         { | ||||
|         if (!propertyValue.equals("")) { | ||||
|             requestParams.put(propertyRequestValue, propertyValue); | ||||
|         } | ||||
|         return requestParams; | ||||
| @@ -778,16 +740,14 @@ public abstract class BaseAPI | ||||
|      * | ||||
|      * @param username the username with whom the delete is performed | ||||
|      * @param password the user's password | ||||
|      * @param itemPath the path to the item eg. in case of a category it would be the "/" + category name, | ||||
|      *                 in case of a folder or subCategory it would be /categoryName/folderName or /categoryName/subCategoryName/ | ||||
|      *                 in case of a record /categoryName/folderName/recordName | ||||
|      * @param itemPath the path to the item eg. in case of a category it would be the "/" + category | ||||
|      *     name, in case of a folder or subCategory it would be /categoryName/folderName or | ||||
|      *     /categoryName/subCategoryName/ in case of a record /categoryName/folderName/recordName | ||||
|      * @throws AssertionError if the delete was not successful. | ||||
|      */ | ||||
|     protected void deleteItem(String username, String password, String itemPath) | ||||
|     { | ||||
|     protected void deleteItem(String username, String password, String itemPath) { | ||||
|         CmisObject container = getObjectByPath(username, password, FILE_PLAN_PATH + itemPath); | ||||
|         if (container != null) | ||||
|         { | ||||
|         if (container != null) { | ||||
|             container.delete(); | ||||
|         } | ||||
|         assertNull("Could not delete " + itemPath, getObjectByPath(username, password, itemPath)); | ||||
| @@ -798,8 +758,7 @@ public abstract class BaseAPI | ||||
|      * | ||||
|      * @return node ref spaces store | ||||
|      */ | ||||
|     public static String getNodeRefSpacesStore() | ||||
|     { | ||||
|     public static String getNodeRefSpacesStore() { | ||||
|         return NODE_REF_WORKSPACE_SPACES_STORE; | ||||
|     } | ||||
|  | ||||
| @@ -808,8 +767,7 @@ public abstract class BaseAPI | ||||
|      * | ||||
|      * @return the File Plan path | ||||
|      */ | ||||
|     public static String getFilePlanPath() | ||||
|     { | ||||
|     public static String getFilePlanPath() { | ||||
|         return FILE_PLAN_PATH; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,8 +26,7 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.core.v0; | ||||
|  | ||||
| public enum RMEvents | ||||
| { | ||||
| public enum RMEvents { | ||||
|     ABOLISHED("abolished"), | ||||
|     ALL_ALLOWANCES_GRANTED_ARE_TERMINATED("all_allowances_granted_are_terminated"), | ||||
|     CASE_CLOSED("case_closed"), | ||||
| @@ -37,13 +36,11 @@ public enum RMEvents | ||||
|     STUDY_COMPLETE("study_complete"); | ||||
|     private String eventName; | ||||
|  | ||||
|     RMEvents(String eventName) | ||||
|     { | ||||
|     RMEvents(String eventName) { | ||||
|         this.eventName = eventName; | ||||
|     } | ||||
|  | ||||
|     public String getEventName() | ||||
|     { | ||||
|     public String getEventName() { | ||||
|         return eventName; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,8 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.audit; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| @@ -35,8 +33,11 @@ import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for audit entry | ||||
|  * | ||||
| @@ -47,43 +48,40 @@ import org.alfresco.utility.model.TestModel; | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class AuditEntry extends TestModel | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class AuditEntry extends TestModel { | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeName; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<Object> changedValues; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String path; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeRef; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String fullName; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private String createPerson; | ||||
|     @JsonProperty private String createPerson; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String userName; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String userRole; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String event; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String timestamp; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -29,12 +29,10 @@ package org.alfresco.rest.rm.community.model.audit; | ||||
| /** | ||||
|  * Enumerates the list of events audited | ||||
|  * | ||||
|  * @author  Rodica Sutu | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.7 | ||||
|  * | ||||
|  */ | ||||
| public enum AuditEvents | ||||
| { | ||||
| public enum AuditEvents { | ||||
|     CREATE_PERSON("Create Person", "Create User"), | ||||
|     DELETE_PERSON("Delete Person", "Delete User"), | ||||
|     CREATE_USER_GROUP("Create User Group", "Create User Group"), | ||||
| @@ -54,8 +52,7 @@ public enum AuditEvents | ||||
|     /** display name for the event audited */ | ||||
|     public final String eventDisplayName; | ||||
|  | ||||
|     AuditEvents(String event, String displayName) | ||||
|     { | ||||
|     AuditEvents(String event, String displayName) { | ||||
|         this.event = event; | ||||
|         this.eventDisplayName = displayName; | ||||
|     } | ||||
|   | ||||
| @@ -26,8 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.common; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| @@ -35,6 +33,8 @@ import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for id/name pair | ||||
|  * | ||||
| @@ -45,17 +45,16 @@ import lombok.NoArgsConstructor; | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class IdNamePair | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| public class IdNamePair { | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
| } | ||||
|   | ||||
| @@ -31,6 +31,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
| @@ -42,10 +43,7 @@ import org.alfresco.utility.model.TestModel; | ||||
| @Builder | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| //@NoArgsConstructor | ||||
| //@AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class Owner extends TestModel | ||||
| { | ||||
|  | ||||
| } | ||||
| // @NoArgsConstructor | ||||
| // @AllArgsConstructor | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class Owner extends TestModel {} | ||||
|   | ||||
| @@ -26,18 +26,18 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.common; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for path parameter | ||||
|  * | ||||
| @@ -49,14 +49,13 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class Path extends TestModel | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| public class Path extends TestModel { | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private Boolean isComplete; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<IdNamePair> elements; | ||||
| } | ||||
|   | ||||
| @@ -43,11 +43,10 @@ import lombok.NoArgsConstructor; | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class ReviewPeriod | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| public class ReviewPeriod { | ||||
|     @JsonProperty(required = true) | ||||
|     private String periodType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String expression; | ||||
| } | ||||
|   | ||||
| @@ -32,22 +32,16 @@ package org.alfresco.rest.rm.community.model.custom; | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public enum CustomDefinitions | ||||
| { | ||||
| public enum CustomDefinitions { | ||||
|     ATTACHMENT("Attachment"), | ||||
|     MESSAGE("Message"), | ||||
|     NEXT_VERSION("Next Version"), | ||||
|     RENDITION("Rendition"); | ||||
|     /** | ||||
|      * The name of custom reference. | ||||
|      */ | ||||
|     /** The name of custom reference. */ | ||||
|     private String definition; | ||||
|  | ||||
|     /** | ||||
|      * Private constructor. | ||||
|      */ | ||||
|     CustomDefinitions(String definition) | ||||
|     { | ||||
|     /** Private constructor. */ | ||||
|     CustomDefinitions(String definition) { | ||||
|         this.definition = definition; | ||||
|     } | ||||
|  | ||||
| @@ -56,8 +50,7 @@ public enum CustomDefinitions | ||||
|      * | ||||
|      * @return The value of custom reference. | ||||
|      */ | ||||
|     public String getDefinition() | ||||
|     { | ||||
|     public String getDefinition() { | ||||
|         return definition; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,20 +26,20 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.fileplan; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for file plan | ||||
|  * | ||||
| @@ -52,48 +52,45 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class FilePlan extends TestModel | ||||
| { | ||||
| public class FilePlan extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private FilePlanProperties properties; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
| } | ||||
|   | ||||
| @@ -35,14 +35,14 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for file plan properties | ||||
|  * | ||||
| @@ -54,29 +54,28 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class FilePlanProperties extends TestModel | ||||
| { | ||||
| public class FilePlanProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_COMPONENT_ID) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_COMPONENT_ID) | ||||
|     private String componentd; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty (PROPERTIES_COUNT) | ||||
|     @JsonProperty(PROPERTIES_COUNT) | ||||
|     private Integer count; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_TITLE) | ||||
|     @JsonProperty(PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DESCRIPTION) | ||||
|     @JsonProperty(PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
| } | ||||
|   | ||||
| @@ -32,8 +32,7 @@ package org.alfresco.rest.rm.community.model.fileplancomponents; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class FilePlanComponentAlias | ||||
| { | ||||
| public class FilePlanComponentAlias { | ||||
|     public static final String FILE_PLAN_ALIAS = "-filePlan-"; | ||||
|     public static final String TRANSFERS_ALIAS = "-transfers-"; | ||||
|     public static final String UNFILED_RECORDS_CONTAINER_ALIAS = "-unfiled-"; | ||||
|   | ||||
| @@ -32,20 +32,17 @@ package org.alfresco.rest.rm.community.model.fileplancomponents; | ||||
|  * @author Kristijan Conkas | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class FilePlanComponentAspects | ||||
| { | ||||
| public class FilePlanComponentAspects { | ||||
|     /** Private constructor to prevent instantiation. */ | ||||
|     private FilePlanComponentAspects() | ||||
|     { | ||||
|     } | ||||
|     private FilePlanComponentAspects() {} | ||||
|  | ||||
|     // aspect present on completed records | ||||
|     public static final String ASPECTS_COMPLETED_RECORD = "rma:declaredRecord"; | ||||
|  | ||||
| 	// aspect present on record folders/categories with vital records | ||||
|     public static final String ASPECTS_VITAL_RECORD_DEFINITION= "rma:vitalRecordDefinition"; | ||||
|     // aspect present on record folders/categories with vital records | ||||
|     public static final String ASPECTS_VITAL_RECORD_DEFINITION = "rma:vitalRecordDefinition"; | ||||
|  | ||||
| 	// aspect present on vital records | ||||
|     // aspect present on vital records | ||||
|     public static final String ASPECTS_VITAL_RECORD = "rma:vitalRecord"; | ||||
|  | ||||
|     // Frozen aspect | ||||
|   | ||||
| @@ -32,61 +32,79 @@ package org.alfresco.rest.rm.community.model.fileplancomponents; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class FilePlanComponentFields | ||||
| { | ||||
| public class FilePlanComponentFields { | ||||
|     /** Common properties for file plans, record categories, record folders and records */ | ||||
|     public static final String PROPERTIES_ROOT_NODE_REF = "rma:rootNodeRef"; | ||||
|  | ||||
|     public static final String PROPERTIES_IDENTIFIER = "rma:identifier"; | ||||
|  | ||||
|     /** Common properties for record categories, record folders and records */ | ||||
|     // Non-electronic record properties | ||||
|     public static final String PROPERTIES_TITLE = "cm:title"; | ||||
|  | ||||
|     public static final String PROPERTIES_DESCRIPTION = "cm:description"; | ||||
|  | ||||
|     /** Common properties for record categories and record folders **/ | ||||
|     /** Common properties for record categories and record folders * */ | ||||
|     public static final String PROPERTIES_VITAL_RECORD_INDICATOR = "rma:vitalRecordIndicator"; | ||||
|  | ||||
|     public static final String PROPERTIES_REVIEW_PERIOD = "rma:reviewPeriod"; | ||||
|     public static final String PROPERTIES_OWNER = "cm:owner"; | ||||
|     public static final String PROPERTIES_AUTHOR="cm:author"; | ||||
|     public static final String PROPERTIES_AUTHOR = "cm:author"; | ||||
|  | ||||
|     /** Common properties for record folders and records */ | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE = "rma:recordSearchHasDispositionSchedule"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION = "rma:recordSearchDispositionPeriodExpression"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY = "rma:recordSearchDispositionAuthority"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF = "rma:recordSearchDispositionActionAsOf"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD = "rma:recordSearchDispositionPeriod"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME = "rma:recordSearchDispositionActionName"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE = "rma:recordSearchDispositionEventsEligible"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS = "rma:recordSearchDispositionInstructions"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS = "rma:recordSearchDispositionEvents"; | ||||
|     public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_BY = "rma:declassificationReviewCompletedBy"; | ||||
|     public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_AT = "rma:declassificationReviewCompletedAt"; | ||||
|      | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE = | ||||
|             "rma:recordSearchHasDispositionSchedule"; | ||||
|  | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION = | ||||
|             "rma:recordSearchDispositionPeriodExpression"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY = | ||||
|             "rma:recordSearchDispositionAuthority"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF = | ||||
|             "rma:recordSearchDispositionActionAsOf"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD = | ||||
|             "rma:recordSearchDispositionPeriod"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME = | ||||
|             "rma:recordSearchDispositionActionName"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE = | ||||
|             "rma:recordSearchDispositionEventsEligible"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS = | ||||
|             "rma:recordSearchDispositionInstructions"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS = | ||||
|             "rma:recordSearchDispositionEvents"; | ||||
|     public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_BY = | ||||
|             "rma:declassificationReviewCompletedBy"; | ||||
|     public static final String PROPERTIES_DECLASSIFICATION_REVIEW_COMPLETED_AT = | ||||
|             "rma:declassificationReviewCompletedAt"; | ||||
|  | ||||
|     /** File plan properties */ | ||||
|     public static final String PROPERTIES_COMPONENT_ID = "st:componentId"; | ||||
|  | ||||
|     public static final String PROPERTIES_COUNT = "rma:count"; | ||||
|  | ||||
|     /** Record category properties */ | ||||
|     // All fields are shared with record folders | ||||
|  | ||||
|     /** Record folder properties */ | ||||
|     public static final String PROPERTIES_IS_CLOSED = "rma:isClosed"; // not to be confused with IS_CLOSED! | ||||
|     public static final String PROPERTIES_IS_CLOSED = | ||||
|             "rma:isClosed"; // not to be confused with IS_CLOSED! | ||||
|  | ||||
|     public static final String PROPERTIES_HELD_CHILDREN_COUNT = "rma:heldChildrenCount"; | ||||
|     public static final String PROPERTIES_LOCATION = "rma:location"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD = "rma:recordSearchVitalRecordReviewPeriod"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION = "rma:recordSearchVitalRecordReviewPeriodExpression"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD = | ||||
|             "rma:recordSearchVitalRecordReviewPeriod"; | ||||
|     public static final String PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION = | ||||
|             "rma:recordSearchVitalRecordReviewPeriodExpression"; | ||||
|  | ||||
|     /** | ||||
|      * Record properties | ||||
|      */ | ||||
|     /** Record properties */ | ||||
|     public static final String PROPERTIES_CLASSIFICATION = "sc:classification"; | ||||
|  | ||||
|     public static final String PROPERTIES_DATE_FILED = "rma:dateFiled"; | ||||
|     public static final String PROPERTIES_ORIGINAL_NAME = "rma:origionalName"; | ||||
|     public static final String PROPERTIES_REVIEW_AS_OF = "rma:reviewAsOf"; | ||||
|  | ||||
|     /** Electronic record properties */ | ||||
|     public static final String PROPERTIES_VERSION_TYPE = "cm:versionType"; | ||||
|  | ||||
|     public static final String PROPERTIES_VERSION_LABEL = "cm:versionLabel"; | ||||
|     public static final String PROPERTIES_VERSIONED_NODEREF = "rmv:versionedNodeRef"; | ||||
|     public static final String PROPERTIES_RMV_VERSIONED = "rmv:versionLabel"; | ||||
| @@ -105,12 +123,16 @@ public class FilePlanComponentFields | ||||
|     public static final String PROPERTIES_SOFTWARE = "exif:software"; | ||||
|     public static final String PROPERTIES_X_RESOLUTION = "exif:xResolution"; | ||||
|     public static final String PROPERTIES_Y_RESOLUTION = "exif:yResolution"; | ||||
|     public static final String PROPERTIES_RECORD_ORIGINATING_LOCATION = "rma:recordOriginatingLocation"; | ||||
|     public static final String PROPERTIES_RECORD_ORIGINATING_USER_ID = "rma:recordOriginatingUserId"; | ||||
|     public static final String PROPERTIES_RECORD_ORIGINATING_CREATION_DATE = "rma:recordOriginatingCreationDate"; | ||||
|     public static final String PROPERTIES_RECORD_ORIGINATING_LOCATION = | ||||
|             "rma:recordOriginatingLocation"; | ||||
|     public static final String PROPERTIES_RECORD_ORIGINATING_USER_ID = | ||||
|             "rma:recordOriginatingUserId"; | ||||
|     public static final String PROPERTIES_RECORD_ORIGINATING_CREATION_DATE = | ||||
|             "rma:recordOriginatingCreationDate"; | ||||
|  | ||||
|     /** Non-electronic record properties */ | ||||
|     public static final String PROPERTIES_SHELF = "rma:shelf"; | ||||
|  | ||||
|     public static final String PROPERTIES_STORAGE_LOCATION = "rma:storageLocation"; | ||||
|     public static final String PROPERTIES_FILE = "rma:file"; | ||||
|     public static final String PROPERTIES_BOX = "rma:box"; | ||||
| @@ -119,15 +141,18 @@ public class FilePlanComponentFields | ||||
|  | ||||
|     /** Transfer properties */ | ||||
|     public static final String PROPERTIES_PDF_INDICATOR = "rma:transferPDFIndicator"; | ||||
|  | ||||
|     public static final String PROPERTIES_TRANSFER_LOCATION = "rma:transferLocation"; | ||||
|     public static final String PROPERTIES_ACCESSION_INDICATOR = "rma:transferAccessionIndicator"; | ||||
|  | ||||
|     /** Parameters */ | ||||
|     public static final String RELATIVE_PATH = "relativePath"; | ||||
|  | ||||
|     public static final String INCLUDE = "include"; | ||||
|  | ||||
|     /** Include options */ | ||||
|     public static final String ALLOWABLE_OPERATIONS = "allowableOperations"; | ||||
|  | ||||
|     public static final String IS_CLOSED = "isClosed"; | ||||
|     public static final String IS_COMPLETED = "isCompleted"; | ||||
|     public static final String CONTENT = "content"; | ||||
|   | ||||
| @@ -32,8 +32,7 @@ package org.alfresco.rest.rm.community.model.fileplancomponents; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class FilePlanComponentType | ||||
| { | ||||
| public class FilePlanComponentType { | ||||
|     public static final String FILE_PLAN_TYPE = "rma:filePlan"; | ||||
|     public static final String RECORD_CATEGORY_TYPE = "rma:recordCategory"; | ||||
|     public static final String RECORD_FOLDER_TYPE = "rma:recordFolder"; | ||||
|   | ||||
| @@ -33,6 +33,7 @@ import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
| @@ -45,12 +46,11 @@ import org.alfresco.utility.model.TestModel; | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class HoldEntry extends TestModel | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class HoldEntry extends TestModel { | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeRef; | ||||
| } | ||||
|   | ||||
| @@ -26,10 +26,14 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.record; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.core.IRestModel; | ||||
| import org.alfresco.rest.core.assertion.ModelAssertion; | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| @@ -37,11 +41,7 @@ import org.alfresco.rest.model.RestNodeModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record | ||||
| @@ -54,76 +54,66 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class Record extends TestModel implements IRestModel<RestNodeModel> | ||||
| { | ||||
|     public final static String CONTENT_NODE_TYPE = "cm:content"; | ||||
| public class Record extends TestModel implements IRestModel<RestNodeModel> { | ||||
|     public static final String CONTENT_NODE_TYPE = "cm:content"; | ||||
|  | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private RecordContent content; | ||||
|     @JsonProperty private RecordContent content; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isCompleted; | ||||
|     @JsonProperty private Boolean isCompleted; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private RecordProperties properties; | ||||
|     @JsonProperty private RecordProperties properties; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> aspectNames; | ||||
|     @JsonProperty private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
|  | ||||
|     @Override | ||||
|     public ModelAssertion<RestNodeModel> assertThat() | ||||
|     { | ||||
|     public ModelAssertion<RestNodeModel> assertThat() { | ||||
|         return new ModelAssertion<>(this); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ModelAssertion<RestNodeModel> and() | ||||
|     { | ||||
|     public ModelAssertion<RestNodeModel> and() { | ||||
|         return assertThat(); | ||||
|     } | ||||
|  | ||||
|     @JsonProperty (value = "entry") | ||||
|     @JsonProperty(value = "entry") | ||||
|     RestNodeModel model; | ||||
|  | ||||
|     @Override | ||||
|     public RestNodeModel onModel() | ||||
|     { | ||||
|     public RestNodeModel onModel() { | ||||
|         return model; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,14 +28,14 @@ package org.alfresco.rest.rm.community.model.record; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for File records | ||||
|  * | ||||
| @@ -47,8 +47,6 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordBodyFile extends TestModel | ||||
| { | ||||
|     @JsonProperty | ||||
|     private String targetParentId; | ||||
| public class RecordBodyFile extends TestModel { | ||||
|     @JsonProperty private String targetParentId; | ||||
| } | ||||
|   | ||||
| @@ -28,14 +28,14 @@ package org.alfresco.rest.rm.community.model.record; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for record content field | ||||
|  * | ||||
| @@ -48,17 +48,16 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordContent extends TestModel | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| public class RecordContent extends TestModel { | ||||
|     @JsonProperty(required = true) | ||||
|     private String mimeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String mimeTypeName; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private Integer sizeInBytes; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String encoding; | ||||
| } | ||||
|   | ||||
| @@ -64,7 +64,6 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RESOLUTION_UNIT; | ||||
|  | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_REVIEW_AS_OF; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RMV_VERSIONED; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; | ||||
| @@ -80,9 +79,6 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_X_RESOLUTION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_Y_RESOLUTION; | ||||
|  | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| @@ -91,9 +87,13 @@ import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record properties | ||||
|  * | ||||
| @@ -106,165 +106,164 @@ import org.alfresco.utility.model.TestModel; | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class RecordProperties extends TestModel | ||||
| { | ||||
| public class RecordProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_DATE_FILED) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_DATE_FILED) | ||||
|     private String dateField; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     private Boolean recordSearchHasDispositionSchedule; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ORIGINAL_NAME) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ORIGINAL_NAME) | ||||
|     private String originalName; | ||||
|      | ||||
|     @JsonProperty (PROPERTIES_CLASSIFICATION) | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_CLASSIFICATION) | ||||
|     private List<String> classification; | ||||
|  | ||||
|     /*********************************/ | ||||
|     /** Electronic record parameters */ | ||||
|     /*********************************/ | ||||
|     @JsonProperty (PROPERTIES_VERSION_TYPE) | ||||
|     @JsonProperty(PROPERTIES_VERSION_TYPE) | ||||
|     private String versionType; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_VERSION_LABEL) | ||||
|     @JsonProperty(PROPERTIES_VERSION_LABEL) | ||||
|     private String versionLabel; | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_VERSIONED_NODEREF) | ||||
|     private String versionedNodeRef; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RMV_VERSIONED) | ||||
|     @JsonProperty(PROPERTIES_RMV_VERSIONED) | ||||
|     private String recordVersionLabel; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL) | ||||
|     @JsonProperty(PROPERTIES_DATE_TIME_ORIGINAL) | ||||
|     private String dateTimeOriginal; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_EXPOSURE_TIME) | ||||
|     @JsonProperty(PROPERTIES_EXPOSURE_TIME) | ||||
|     private Double exposureTime; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FLASH) | ||||
|     @JsonProperty(PROPERTIES_FLASH) | ||||
|     private Boolean flash; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_F_NUMBER) | ||||
|     @JsonProperty(PROPERTIES_F_NUMBER) | ||||
|     private Double fNumber; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FOCAL_LENGTH) | ||||
|     @JsonProperty(PROPERTIES_FOCAL_LENGTH) | ||||
|     private Double focalLength; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ISO_SPEED_RATINGS) | ||||
|     @JsonProperty(PROPERTIES_ISO_SPEED_RATINGS) | ||||
|     private Integer isoSpeedRatings; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_MANUFACTURER) | ||||
|     @JsonProperty(PROPERTIES_MANUFACTURER) | ||||
|     private String manufacturer; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_MODEL) | ||||
|     @JsonProperty(PROPERTIES_MODEL) | ||||
|     private String model; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ORIENTATION) | ||||
|     @JsonProperty(PROPERTIES_ORIENTATION) | ||||
|     private Integer orientation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PIXEL_X_DIMENSION) | ||||
|     @JsonProperty(PROPERTIES_PIXEL_X_DIMENSION) | ||||
|     private Integer pixelXDimension; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION) | ||||
|     @JsonProperty(PROPERTIES_PIXEL_Y_DIMENSION) | ||||
|     private Integer pixelYDimension; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RESOLUTION_UNIT) | ||||
|     @JsonProperty(PROPERTIES_RESOLUTION_UNIT) | ||||
|     private String resolutionUnit; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_SOFTWARE) | ||||
|     @JsonProperty(PROPERTIES_SOFTWARE) | ||||
|     private String software; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_X_RESOLUTION) | ||||
|     @JsonProperty(PROPERTIES_X_RESOLUTION) | ||||
|     private Double xResolution; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_Y_RESOLUTION) | ||||
|     @JsonProperty(PROPERTIES_Y_RESOLUTION) | ||||
|     private Double yResolution; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_ORIGINATING_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_RECORD_ORIGINATING_LOCATION) | ||||
|     private String originatingLocation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_ORIGINATING_USER_ID) | ||||
|     @JsonProperty(PROPERTIES_RECORD_ORIGINATING_USER_ID) | ||||
|     private String originatingUserId; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_ORIGINATING_CREATION_DATE) | ||||
|     @JsonProperty(PROPERTIES_RECORD_ORIGINATING_CREATION_DATE) | ||||
|     private String originatingCreationDate; | ||||
|  | ||||
|     /*************************************/ | ||||
|     /** Non-electronic record parameters */ | ||||
|     /*************************************/ | ||||
|     @JsonProperty (PROPERTIES_TITLE) | ||||
|     @JsonProperty(PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_SHELF) | ||||
|     @JsonProperty(PROPERTIES_SHELF) | ||||
|     private String shelf; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_STORAGE_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_STORAGE_LOCATION) | ||||
|     private String storageLocation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FILE) | ||||
|     @JsonProperty(PROPERTIES_FILE) | ||||
|     private String file; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_BOX) | ||||
|     @JsonProperty(PROPERTIES_BOX) | ||||
|     private String box; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DESCRIPTION) | ||||
|     @JsonProperty(PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_NUMBER_OF_COPIES) | ||||
|     @JsonProperty(PROPERTIES_NUMBER_OF_COPIES) | ||||
|     private Integer numberOfCopies; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PHYSICAL_SIZE) | ||||
|     @JsonProperty(PROPERTIES_PHYSICAL_SIZE) | ||||
|     private Integer physicalSize; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_AUTHOR) | ||||
|     private String author; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION) | ||||
|     private String recordSearchDispositionPeriodExpression; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY) | ||||
|     private String recordSearchDispositionAuthority; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF) | ||||
|     private Date recordSearchDispositionActionAsOf; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD) | ||||
|     private String recordSearchDispositionPeriod; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME) | ||||
|     private String recordSearchDispositionActionName; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE) | ||||
|     private Boolean recordSearchDispositionEventsEligible; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS) | ||||
|     private List<String> recordSearchDispositionEvents; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS) | ||||
|     private String recordSearchDispositionInstructions; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD) | ||||
|     private String recordSearchVitalRecordReviewPeriod; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION) | ||||
|     private String recordSearchVitalRecordReviewPeriodExpression; | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_REVIEW_AS_OF) | ||||
|     private Date reviewAsOf; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_STORE) | ||||
|     @JsonProperty(PROPERTIES_STORE) | ||||
|     private String store; | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_WORM_UNLOCK_DATE) | ||||
|   | ||||
| @@ -26,20 +26,20 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.recordcategory; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category | ||||
|  * | ||||
| @@ -51,53 +51,49 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordCategory extends TestModel | ||||
| { | ||||
| public class RecordCategory extends TestModel { | ||||
|     public static final String DEFAULT_FILE_PLAN_ALIAS = "-filePlan-"; | ||||
|  | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RecordCategoryProperties properties; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private Boolean hasRetentionSchedule; | ||||
|     @JsonProperty private Boolean hasRetentionSchedule; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
| } | ||||
|   | ||||
| @@ -26,20 +26,20 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.recordcategory; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category child | ||||
|  * | ||||
| @@ -51,64 +51,54 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordCategoryChild extends TestModel | ||||
| { | ||||
| public class RecordCategoryChild extends TestModel { | ||||
|     public static final String RECORD_FOLDER_NODE_TYPE = "rma:recordFolder"; | ||||
|  | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private Boolean isRecordCategory; | ||||
|     @JsonProperty private Boolean isRecordCategory; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isRecordFolder; | ||||
|     @JsonProperty private Boolean isRecordFolder; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private RecordCategoryChildProperties properties; | ||||
|     @JsonProperty private RecordCategoryChildProperties properties; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> aspectNames; | ||||
|     @JsonProperty private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean hasRetentionSchedule; | ||||
|     @JsonProperty private Boolean hasRetentionSchedule; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isClosed; | ||||
|     @JsonProperty private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private String relativePath; | ||||
|     @JsonProperty private String relativePath; | ||||
| } | ||||
|   | ||||
| @@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RecordCategoryChildCollection extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection> | ||||
| { | ||||
|  | ||||
| } | ||||
| public class RecordCategoryChildCollection | ||||
|         extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection> {} | ||||
|   | ||||
| @@ -28,11 +28,11 @@ package org.alfresco.rest.rm.community.model.recordcategory; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category child entry | ||||
|  * | ||||
| @@ -41,8 +41,6 @@ import lombok.EqualsAndHashCode; | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| public class RecordCategoryChildEntry extends RestModels<RecordCategory, RecordCategoryChildEntry> | ||||
| { | ||||
|     @JsonProperty | ||||
|     private RecordCategoryChild entry; | ||||
| public class RecordCategoryChildEntry extends RestModels<RecordCategory, RecordCategoryChildEntry> { | ||||
|     @JsonProperty private RecordCategoryChild entry; | ||||
| } | ||||
|   | ||||
| @@ -32,37 +32,37 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IS_CLOSED; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_LOCATION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_REVIEW_PERIOD; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; | ||||
|  | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.Date; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category child properties | ||||
|  * | ||||
| @@ -74,70 +74,68 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordCategoryChildProperties extends TestModel | ||||
| { | ||||
| public class RecordCategoryChildProperties extends TestModel { | ||||
|     /**************************************************************************/ | ||||
|     /** Mandatory parameters - Shared by record categories and record folders */ | ||||
|     /**************************************************************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_TITLE) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     private Boolean vitalRecordIndicator; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize (using = ReviewPeriodSerializer.class) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize(using = ReviewPeriodSerializer.class) | ||||
|     private ReviewPeriod reviewPeriod; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_DESCRIPTION) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
|  | ||||
|     /*********************************************************/ | ||||
|     /** Optional parameters - Applies only to record folders */ | ||||
|     /*********************************************************/ | ||||
|     @JsonProperty (PROPERTIES_HELD_CHILDREN_COUNT) | ||||
|     @JsonProperty(PROPERTIES_HELD_CHILDREN_COUNT) | ||||
|     private Integer heldChildrenCount; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_LOCATION) | ||||
|     private String location; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_IS_CLOSED) | ||||
|     @JsonProperty(PROPERTIES_IS_CLOSED) | ||||
|     private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     private Boolean recordSearchHasDispositionSchedule; | ||||
|      | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION) | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION) | ||||
|     private String recordSearchDispositionPeriodExpression; | ||||
|      | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY) | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY) | ||||
|     private String recordSearchDispositionAuthority; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF) | ||||
|     private Date recordSearchDispositionActionAsOf; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD) | ||||
|     private String recordSearchDispositionPeriod; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME) | ||||
|     private String recordSearchDispositionActionName; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE) | ||||
|     private Boolean recordSearchDispositionEventsEligible; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS) | ||||
|     private String recordSearchDispositionInstructions; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS) | ||||
|     private List<String> recordSearchDispositionEvents; | ||||
|      | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
| } | ||||
|   | ||||
| @@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RecordCategoryCollection extends RestModels<RecordCategoryEntry, RecordCategoryCollection> | ||||
| { | ||||
|  | ||||
| } | ||||
| public class RecordCategoryCollection | ||||
|         extends RestModels<RecordCategoryEntry, RecordCategoryCollection> {} | ||||
|   | ||||
| @@ -28,12 +28,12 @@ package org.alfresco.rest.rm.community.model.recordcategory; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
| import org.alfresco.rest.rm.community.model.fileplan.FilePlan; | ||||
|  | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
| import org.alfresco.rest.rm.community.model.fileplan.FilePlan; | ||||
|  | ||||
| /** | ||||
|  * POJO for file plan entry | ||||
|  * | ||||
| @@ -43,8 +43,6 @@ import lombok.EqualsAndHashCode; | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| public class RecordCategoryEntry extends RestModels<FilePlan, RecordCategoryEntry> | ||||
| { | ||||
|     @JsonProperty | ||||
|     private RecordCategory entry; | ||||
| public class RecordCategoryEntry extends RestModels<FilePlan, RecordCategoryEntry> { | ||||
|     @JsonProperty private RecordCategory entry; | ||||
| } | ||||
|   | ||||
| @@ -35,24 +35,23 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; | ||||
|  | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category properties | ||||
|  * | ||||
| @@ -64,37 +63,36 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class RecordCategoryProperties extends TestModel | ||||
| { | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class RecordCategoryProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize (using = ReviewPeriodSerializer.class) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize(using = ReviewPeriodSerializer.class) | ||||
|     private ReviewPeriod reviewPeriod; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     private Boolean vitalRecordIndicator; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty (PROPERTIES_TITLE) | ||||
|     @JsonProperty(PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DESCRIPTION) | ||||
|     @JsonProperty(PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_CLASSIFICATION) | ||||
|     @JsonProperty(PROPERTIES_CLASSIFICATION) | ||||
|     private List<String> classification; | ||||
| } | ||||
|   | ||||
| @@ -26,11 +26,8 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.recordcategory; | ||||
|  | ||||
| /** | ||||
|  * The property of the dispositioned item that is used to calculate the "as of" period. | ||||
|  */ | ||||
| public enum RetentionPeriodProperty | ||||
| { | ||||
| /** The property of the dispositioned item that is used to calculate the "as of" period. */ | ||||
| public enum RetentionPeriodProperty { | ||||
|     /** Item created date. */ | ||||
|     CREATED_DATE("cm:created"), | ||||
|     /** Record filed date. */ | ||||
| @@ -40,13 +37,11 @@ public enum RetentionPeriodProperty | ||||
|  | ||||
|     String periodProperty; | ||||
|  | ||||
|     RetentionPeriodProperty(String periodProperty) | ||||
|     { | ||||
|     RetentionPeriodProperty(String periodProperty) { | ||||
|         this.periodProperty = periodProperty; | ||||
|     } | ||||
|  | ||||
|     public String getPeriodProperty() | ||||
|     { | ||||
|     public String getPeriodProperty() { | ||||
|         return periodProperty; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,20 +26,20 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.recordfolder; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record folder | ||||
|  * | ||||
| @@ -51,50 +51,46 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordFolder extends TestModel | ||||
| { | ||||
| public class RecordFolder extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RecordFolderProperties properties; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private Boolean isClosed; | ||||
|     @JsonProperty private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
| } | ||||
|   | ||||
| @@ -35,7 +35,4 @@ import org.alfresco.rest.core.RestModels; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RecordFolderCollection extends RestModels<RecordFolderEntry, RecordFolderCollection> | ||||
| { | ||||
|  | ||||
| } | ||||
| public class RecordFolderCollection extends RestModels<RecordFolderEntry, RecordFolderCollection> {} | ||||
|   | ||||
| @@ -28,15 +28,15 @@ package org.alfresco.rest.rm.community.model.recordfolder; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
| import org.alfresco.rest.rm.community.model.record.Record; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
| import org.alfresco.rest.rm.community.model.record.Record; | ||||
|  | ||||
| /** | ||||
|  * POJO for record folder entry | ||||
|  * | ||||
| @@ -48,8 +48,6 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RecordFolderEntry extends RestModels<RecordFolder, RecordFolderEntry> | ||||
| { | ||||
|     @JsonProperty | ||||
|     private Record entry; | ||||
| public class RecordFolderEntry extends RestModels<RecordFolder, RecordFolderEntry> { | ||||
|     @JsonProperty private Record entry; | ||||
| } | ||||
|   | ||||
| @@ -33,10 +33,8 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IS_CLOSED; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_LOCATION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields | ||||
|         .PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields | ||||
|         .PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION; | ||||
| @@ -45,23 +43,23 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record folder properties | ||||
|  * | ||||
| @@ -73,62 +71,60 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class RecordFolderProperties extends TestModel | ||||
| { | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class RecordFolderProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IS_CLOSED) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IS_CLOSED) | ||||
|     private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_HELD_CHILDREN_COUNT) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_HELD_CHILDREN_COUNT) | ||||
|     private Integer heldChildrenCount; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty (PROPERTIES_TITLE) | ||||
|     @JsonProperty(PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     @JsonProperty(PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     private Boolean vitalRecordIndicator; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_LOCATION) | ||||
|     private String location; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     private Boolean recordSearchHasDispositionSchedule; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize (using = ReviewPeriodSerializer.class) | ||||
|     @JsonProperty(PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize(using = ReviewPeriodSerializer.class) | ||||
|     private ReviewPeriod reviewPeriod; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_CLASSIFICATION) | ||||
|     @JsonProperty(PROPERTIES_CLASSIFICATION) | ||||
|     private List<String> classification; | ||||
|      | ||||
|     @JsonProperty (PROPERTIES_DESCRIPTION) | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
|   | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD) | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD) | ||||
|     private String recordSearchVitalRecordReviewPeriod; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION) | ||||
|     private String recordSearchVitalRecordReviewPeriodExpression; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY) | ||||
|     private String recordSearchDispositionAuthority; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS) | ||||
|     private String recordSearchDispositionInstructions; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,11 +26,8 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.rules; | ||||
|  | ||||
| /** | ||||
|  * Action values. | ||||
|  */ | ||||
| public enum ActionsOnRule | ||||
| { | ||||
| /** Action values. */ | ||||
| public enum ActionsOnRule { | ||||
|     COMPLETE_RECORD("declareRecord"), | ||||
|     REOPEN_RECORD("undeclareRecord"), | ||||
|     OPEN_RECORD_FOLDER("openRecordFolder"), | ||||
| @@ -54,13 +51,11 @@ public enum ActionsOnRule | ||||
|  | ||||
|     private String actionValue; | ||||
|  | ||||
|     ActionsOnRule(String value) | ||||
|     { | ||||
|     ActionsOnRule(String value) { | ||||
|         this.actionValue = value; | ||||
|     } | ||||
|  | ||||
|     public String getActionValue() | ||||
|     { | ||||
|     public String getActionValue() { | ||||
|         return actionValue; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,23 +26,18 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.rules; | ||||
|  | ||||
| /** | ||||
|  * enum used to find the when condition names options by their value | ||||
|  */ | ||||
| public enum ConditionsOnRule | ||||
| { | ||||
| /** enum used to find the when condition names options by their value */ | ||||
| public enum ConditionsOnRule { | ||||
|     UPDATE("update"), | ||||
|     ADDED("inbound"), | ||||
|     REMOVED("outbound"); | ||||
|     private String whenConditionValue; | ||||
|  | ||||
|     ConditionsOnRule(String value) | ||||
|     { | ||||
|             this.whenConditionValue = value; | ||||
|     ConditionsOnRule(String value) { | ||||
|         this.whenConditionValue = value; | ||||
|     } | ||||
|  | ||||
|     public String getWhenConditionValue() | ||||
|     { | ||||
|             return whenConditionValue; | ||||
|     public String getWhenConditionValue() { | ||||
|         return whenConditionValue; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,11 +28,8 @@ package org.alfresco.rest.rm.community.model.rules; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * A class describing the rule | ||||
|  */ | ||||
| public class RuleDefinition | ||||
| { | ||||
| /** A class describing the rule */ | ||||
| public class RuleDefinition { | ||||
|     private String id = ""; | ||||
|     private String title; | ||||
|     private String description = ""; | ||||
| @@ -52,152 +49,124 @@ public class RuleDefinition | ||||
|      * | ||||
|      * @return the object | ||||
|      */ | ||||
|     public static RuleDefinition createNewRule() | ||||
|     { | ||||
|     public static RuleDefinition createNewRule() { | ||||
|         return new RuleDefinition(); | ||||
|     } | ||||
|  | ||||
|     public String getId() | ||||
|     { | ||||
|     public String getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition id(String id) | ||||
|     { | ||||
|     public RuleDefinition id(String id) { | ||||
|         this.id = id; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getTitle() | ||||
|     { | ||||
|     public String getTitle() { | ||||
|         return title; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition title(String title) | ||||
|     { | ||||
|     public RuleDefinition title(String title) { | ||||
|         this.title = title; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getDescription() | ||||
|     { | ||||
|     public String getDescription() { | ||||
|         return description; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition description(String description) | ||||
|     { | ||||
|     public RuleDefinition description(String description) { | ||||
|         this.description = description; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public boolean isDisabled() | ||||
|     { | ||||
|     public boolean isDisabled() { | ||||
|         return disabled; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition disabled(boolean disabled) | ||||
|     { | ||||
|     public RuleDefinition disabled(boolean disabled) { | ||||
|         this.disabled = disabled; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public boolean isApplyToChildren() | ||||
|     { | ||||
|     public boolean isApplyToChildren() { | ||||
|         return applyToChildren; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition applyToChildren(boolean applyToChildren) | ||||
|     { | ||||
|     public RuleDefinition applyToChildren(boolean applyToChildren) { | ||||
|         this.applyToChildren = applyToChildren; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public boolean getRunInBackground() | ||||
|     { | ||||
|     public boolean getRunInBackground() { | ||||
|         return runInBackground; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition runInBackground(boolean runInBackground) | ||||
|     { | ||||
|     public RuleDefinition runInBackground(boolean runInBackground) { | ||||
|         this.runInBackground = runInBackground; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getRuleType() | ||||
|     { | ||||
|     public String getRuleType() { | ||||
|         return ruleType; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition ruleType(String ruleType) | ||||
|     { | ||||
|     public RuleDefinition ruleType(String ruleType) { | ||||
|         this.ruleType = ruleType; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getPath() | ||||
|     { | ||||
|     public String getPath() { | ||||
|         return path; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition path(String path) | ||||
|     { | ||||
|     public RuleDefinition path(String path) { | ||||
|         this.path = path; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public Boolean getCreateRecordPath() | ||||
|     { | ||||
|     public Boolean getCreateRecordPath() { | ||||
|         return createRecordPath; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition createRecordPath(boolean createRecordPath) | ||||
|     { | ||||
|     public RuleDefinition createRecordPath(boolean createRecordPath) { | ||||
|         this.createRecordPath = createRecordPath; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getContentTitle() | ||||
|     { | ||||
|     public String getContentTitle() { | ||||
|         return contentTitle; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition contentTitle(String contentTitle) | ||||
|     { | ||||
|     public RuleDefinition contentTitle(String contentTitle) { | ||||
|         this.contentTitle = contentTitle; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getContentDescription() | ||||
|     { | ||||
|     public String getContentDescription() { | ||||
|         return contentDescription; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition contentDescription(String contentDescription) | ||||
|     { | ||||
|     public RuleDefinition contentDescription(String contentDescription) { | ||||
|         this.contentDescription = contentDescription; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public String getRejectReason() | ||||
|     { | ||||
|     public String getRejectReason() { | ||||
|         return rejectReason; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition rejectReason(String rejectReason) | ||||
|     { | ||||
|     public RuleDefinition rejectReason(String rejectReason) { | ||||
|         this.rejectReason = rejectReason; | ||||
|         return this; | ||||
|     } | ||||
|  | ||||
|     public List<String> getActions() | ||||
|     { | ||||
|     public List<String> getActions() { | ||||
|         return actions; | ||||
|     } | ||||
|  | ||||
|     public RuleDefinition actions(List<String> actions) | ||||
|     { | ||||
|     public RuleDefinition actions(List<String> actions) { | ||||
|         this.actions = actions; | ||||
|         return this; | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -28,14 +28,14 @@ package org.alfresco.rest.rm.community.model.site; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestSiteModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestSiteModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for RM Site component | ||||
|  * | ||||
| @@ -46,15 +46,13 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class RMSite extends RestSiteModel | ||||
| { | ||||
|     @JsonProperty (required = true) | ||||
| public class RMSite extends RestSiteModel { | ||||
|     @JsonProperty(required = true) | ||||
|     private RMSiteCompliance compliance; | ||||
|  | ||||
|     /** Private constructor allowing Lombok to include superclass fields in the builder. */ | ||||
|     @Builder | ||||
|     private RMSite(String title, String description, RMSiteCompliance compliance) | ||||
|     { | ||||
|     private RMSite(String title, String description, RMSiteCompliance compliance) { | ||||
|         this.setTitle(title); | ||||
|         this.setDescription(description); | ||||
|         this.compliance = compliance; | ||||
|   | ||||
| @@ -32,8 +32,7 @@ package org.alfresco.rest.rm.community.model.site; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public enum RMSiteCompliance | ||||
| { | ||||
| public enum RMSiteCompliance { | ||||
|     STANDARD, | ||||
|     DOD5015 | ||||
| } | ||||
|   | ||||
| @@ -27,26 +27,20 @@ | ||||
| package org.alfresco.rest.rm.community.model.site; | ||||
|  | ||||
| /** | ||||
|  *RM Site properties from the RM Model Schema | ||||
|  *"entry": { | ||||
|  *      "id": "string", | ||||
|  *      "guid": "string", | ||||
|  *      "title": "string", | ||||
|  *      "description": "string", | ||||
|  *      "visibility": "{@link org.springframework.social.alfresco.api.entities.Site.Visibility}", | ||||
|  *      "compliance": "{@link RMSiteCompliance}", | ||||
|  *      "role": "{@link org.alfresco.utility.constants.UserRole}" | ||||
|  *} | ||||
|  * RM Site properties from the RM Model Schema "entry": { "id": "string", "guid": "string", "title": | ||||
|  * "string", "description": "string", "visibility": "{@link | ||||
|  * org.springframework.social.alfresco.api.entities.Site.Visibility}", "compliance": "{@link | ||||
|  * RMSiteCompliance}", "role": "{@link org.alfresco.utility.constants.UserRole}" } | ||||
|  * | ||||
|  * @author Tuna Aksoy | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RMSiteFields | ||||
| { | ||||
| public class RMSiteFields { | ||||
|     public static final String ID = "id"; | ||||
|     public static final String COMPLIANCE = "compliance"; | ||||
|     public static final String TITLE = "title"; | ||||
|     public static final String DESCRIPTION = "description"; | ||||
|     public static final String VISIBILITY ="visibility"; | ||||
|     public static final String VISIBILITY = "visibility"; | ||||
|     public static final String ROLE = "role"; | ||||
| } | ||||
|   | ||||
| @@ -27,19 +27,19 @@ | ||||
|  | ||||
| package org.alfresco.rest.rm.community.model.transfer; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for Transfer | ||||
|  * | ||||
| @@ -51,38 +51,36 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class Transfer extends TestModel | ||||
| { | ||||
| public class Transfer extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private TransferProperties properties; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
| } | ||||
|   | ||||
| @@ -27,20 +27,20 @@ | ||||
|  | ||||
| package org.alfresco.rest.rm.community.model.transfer; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for transfer child | ||||
|  * | ||||
| @@ -52,59 +52,50 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferChild extends TestModel | ||||
| { | ||||
| public class TransferChild extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private TransferChildProperties properties; | ||||
|     @JsonProperty private TransferChildProperties properties; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isRecord; | ||||
|     @JsonProperty private Boolean isRecord; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isRecordFolder; | ||||
|     @JsonProperty private Boolean isRecordFolder; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> aspectNames; | ||||
|     @JsonProperty private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isCompleted; | ||||
|     @JsonProperty private Boolean isCompleted; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isClosed; | ||||
|     @JsonProperty private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
| } | ||||
|   | ||||
| @@ -31,10 +31,9 @@ import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| /** | ||||
|  * Handle collection of {@link TransferChildEntry} | ||||
|  * | ||||
|  * @author Silviu Dinuta | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class TransferChildCollection extends RestModels<TransferChildEntry, TransferChildCollection> | ||||
| { | ||||
|  | ||||
| } | ||||
| public class TransferChildCollection | ||||
|         extends RestModels<TransferChildEntry, TransferChildCollection> {} | ||||
|   | ||||
| @@ -27,8 +27,6 @@ | ||||
|  | ||||
| package org.alfresco.rest.rm.community.model.transfer; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| @@ -37,6 +35,8 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| /** | ||||
|  * POJO for transfer child entry | ||||
|  * | ||||
| @@ -48,8 +48,6 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferChildEntry extends RestModels<Transfer, TransferChildEntry> | ||||
| { | ||||
|     @JsonProperty | ||||
|     private TransferChild entry; | ||||
| public class TransferChildEntry extends RestModels<Transfer, TransferChildEntry> { | ||||
|     @JsonProperty private TransferChild entry; | ||||
| } | ||||
|   | ||||
| @@ -64,11 +64,6 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_X_RESOLUTION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_Y_RESOLUTION; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
| import com.fasterxml.jackson.databind.annotation.JsonSerialize; | ||||
|  | ||||
| @@ -78,6 +73,11 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
| import org.alfresco.rest.rm.community.util.ReviewPeriodSerializer; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for transfer child properties | ||||
|  * | ||||
| @@ -89,131 +89,129 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferChildProperties extends TestModel | ||||
| { | ||||
| public class TransferChildProperties extends TestModel { | ||||
|     /**************************************************************************/ | ||||
|     /** Mandatory parameters - Shared by record folders and records*/ | ||||
|     /** Mandatory parameters - Shared by record folders and records */ | ||||
|     /**************************************************************************/ | ||||
|     @JsonProperty (PROPERTIES_TITLE) | ||||
|     @JsonProperty(PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DESCRIPTION) | ||||
|     @JsonProperty(PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
|  | ||||
|     /*********************************************************/ | ||||
|     /** Optional parameters - Applies only to record folders */ | ||||
|     /*********************************************************/ | ||||
|     @JsonProperty (PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     @JsonProperty(PROPERTIES_VITAL_RECORD_INDICATOR) | ||||
|     private Boolean vitalRecordIndicator; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize (using = ReviewPeriodSerializer.class) | ||||
|     @JsonProperty(PROPERTIES_REVIEW_PERIOD) | ||||
|     @JsonSerialize(using = ReviewPeriodSerializer.class) | ||||
|     private ReviewPeriod reviewPeriod; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_HELD_CHILDREN_COUNT) | ||||
|     @JsonProperty(PROPERTIES_HELD_CHILDREN_COUNT) | ||||
|     private Integer heldChildrenCount; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_LOCATION) | ||||
|     private String location; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_IS_CLOSED) | ||||
|     @JsonProperty(PROPERTIES_IS_CLOSED) | ||||
|     private Boolean isClosed; | ||||
|  | ||||
|     /*********************************************************/ | ||||
|     /** Optional parameters - Applies only to records */ | ||||
|     /*********************************************************/ | ||||
|     @JsonProperty (PROPERTIES_DATE_FILED) | ||||
|     @JsonProperty(PROPERTIES_DATE_FILED) | ||||
|     private String dateField; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     @JsonProperty(PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     private Boolean recordSearchHasDispositionSchedule; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ORIGINAL_NAME) | ||||
|     @JsonProperty(PROPERTIES_ORIGINAL_NAME) | ||||
|     private String originalName; | ||||
|  | ||||
|  | ||||
|     /*********************************/ | ||||
|     /** Electronic record parameters */ | ||||
|     /*********************************/ | ||||
|     @JsonProperty (PROPERTIES_VERSION_TYPE) | ||||
|     @JsonProperty(PROPERTIES_VERSION_TYPE) | ||||
|     private String versionType; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_VERSION_LABEL) | ||||
|     @JsonProperty(PROPERTIES_VERSION_LABEL) | ||||
|     private String versionLabel; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL) | ||||
|     @JsonProperty(PROPERTIES_DATE_TIME_ORIGINAL) | ||||
|     private String dateTimeOriginal; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_EXPOSURE_TIME) | ||||
|     @JsonProperty(PROPERTIES_EXPOSURE_TIME) | ||||
|     private Double exposureTime; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FLASH) | ||||
|     @JsonProperty(PROPERTIES_FLASH) | ||||
|     private Boolean flash; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_F_NUMBER) | ||||
|     @JsonProperty(PROPERTIES_F_NUMBER) | ||||
|     private Double fNumber; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FOCAL_LENGTH) | ||||
|     @JsonProperty(PROPERTIES_FOCAL_LENGTH) | ||||
|     private Double focalLength; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ISO_SPEED_RATINGS) | ||||
|     @JsonProperty(PROPERTIES_ISO_SPEED_RATINGS) | ||||
|     private Integer isoSpeedRatings; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_MANUFACTURER) | ||||
|     @JsonProperty(PROPERTIES_MANUFACTURER) | ||||
|     private String manufacturer; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_MODEL) | ||||
|     @JsonProperty(PROPERTIES_MODEL) | ||||
|     private String model; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ORIENTATION) | ||||
|     @JsonProperty(PROPERTIES_ORIENTATION) | ||||
|     private Integer orientation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PIXEL_X_DIMENSION) | ||||
|     @JsonProperty(PROPERTIES_PIXEL_X_DIMENSION) | ||||
|     private Integer pixelXDimension; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION) | ||||
|     @JsonProperty(PROPERTIES_PIXEL_Y_DIMENSION) | ||||
|     private Integer pixelYDimension; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RESOLUTION_UNIT) | ||||
|     @JsonProperty(PROPERTIES_RESOLUTION_UNIT) | ||||
|     private String resolutionUnit; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_SOFTWARE) | ||||
|     @JsonProperty(PROPERTIES_SOFTWARE) | ||||
|     private String software; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_X_RESOLUTION) | ||||
|     @JsonProperty(PROPERTIES_X_RESOLUTION) | ||||
|     private Double xResolution; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_Y_RESOLUTION) | ||||
|     @JsonProperty(PROPERTIES_Y_RESOLUTION) | ||||
|     private Double yResolution; | ||||
|  | ||||
|     /*************************************/ | ||||
|     /** Non-electronic record parameters */ | ||||
|     /*************************************/ | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_SHELF) | ||||
|     @JsonProperty(PROPERTIES_SHELF) | ||||
|     private String shelf; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_STORAGE_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_STORAGE_LOCATION) | ||||
|     private String storageLocation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FILE) | ||||
|     @JsonProperty(PROPERTIES_FILE) | ||||
|     private String file; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_BOX) | ||||
|     @JsonProperty(PROPERTIES_BOX) | ||||
|     private String box; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_NUMBER_OF_COPIES) | ||||
|     @JsonProperty(PROPERTIES_NUMBER_OF_COPIES) | ||||
|     private Integer numberOfCopies; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PHYSICAL_SIZE) | ||||
|     @JsonProperty(PROPERTIES_PHYSICAL_SIZE) | ||||
|     private Integer physicalSize; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
| } | ||||
|   | ||||
| @@ -31,10 +31,8 @@ import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| /** | ||||
|  * Handle collection of {@link TransferEntry} | ||||
|  * | ||||
|  * @author Silviu Dinuta | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class TransferCollection extends RestModels<TransferEntry, TransferCollection> | ||||
| { | ||||
|  | ||||
| } | ||||
| public class TransferCollection extends RestModels<TransferEntry, TransferCollection> {} | ||||
|   | ||||
| @@ -27,9 +27,6 @@ | ||||
|  | ||||
| package org.alfresco.rest.rm.community.model.transfer; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
| import org.alfresco.rest.rm.community.model.transfercontainer.TransferContainer; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| @@ -38,6 +35,9 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
| import org.alfresco.rest.rm.community.model.transfercontainer.TransferContainer; | ||||
|  | ||||
| /** | ||||
|  * POJO for transfer entry | ||||
|  * | ||||
| @@ -49,8 +49,6 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferEntry extends RestModels<TransferContainer, TransferEntry> | ||||
| { | ||||
|     @JsonProperty | ||||
|     private Transfer entry; | ||||
| public class TransferEntry extends RestModels<TransferContainer, TransferEntry> { | ||||
|     @JsonProperty private Transfer entry; | ||||
| } | ||||
|   | ||||
| @@ -27,15 +27,12 @@ | ||||
|  | ||||
| package org.alfresco.rest.rm.community.model.transfer; | ||||
|  | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ACCESSION_INDICATOR; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PDF_INDICATOR; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TRANSFER_LOCATION; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ACCESSION_INDICATOR; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| @@ -45,6 +42,9 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for Transfer properties | ||||
|  * | ||||
| @@ -56,29 +56,28 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferProperties extends TestModel | ||||
| { | ||||
| public class TransferProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty (PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PDF_INDICATOR) | ||||
|     @JsonProperty(PROPERTIES_PDF_INDICATOR) | ||||
|     private Boolean pdfIndicator; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_TRANSFER_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_TRANSFER_LOCATION) | ||||
|     private String transferLocation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ACCESSION_INDICATOR) | ||||
|     @JsonProperty(PROPERTIES_ACCESSION_INDICATOR) | ||||
|     private Boolean accessionIndicator; | ||||
| } | ||||
|   | ||||
| @@ -27,19 +27,19 @@ | ||||
|  | ||||
| package org.alfresco.rest.rm.community.model.transfercontainer; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for Transfer Container | ||||
|  * | ||||
| @@ -51,44 +51,42 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferContainer extends TestModel | ||||
| { | ||||
| public class TransferContainer extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private TransferContainerProperties properties; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
| } | ||||
|   | ||||
| @@ -31,8 +31,6 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER; | ||||
| import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ROOT_NODE_REF; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| @@ -41,6 +39,8 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for Transfer Container properties | ||||
|  * | ||||
| @@ -52,21 +52,19 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class TransferContainerProperties extends TestModel | ||||
| { | ||||
| public class TransferContainerProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty (PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_COUNT) | ||||
|     @JsonProperty(PROPERTIES_COUNT) | ||||
|     private Integer count; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,12 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.unfiledcontainer; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| @@ -40,6 +34,12 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for unfiled container | ||||
|  * | ||||
| @@ -51,47 +51,44 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class UnfiledContainer extends TestModel | ||||
| { | ||||
| public class UnfiledContainer extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private UnfiledContainerProperties properties; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
| } | ||||
|   | ||||
| @@ -26,13 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.unfiledcontainer; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.rest.rm.community.model.record.RecordContent; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| @@ -42,6 +35,13 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.rest.rm.community.model.record.RecordContent; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category child | ||||
|  * | ||||
| @@ -53,66 +53,57 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class UnfiledContainerChild extends TestModel | ||||
| { | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class UnfiledContainerChild extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private Boolean isUnfiledRecordFolder; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private Boolean isRecord; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private UnfiledContainerChildProperties properties; | ||||
|     @JsonProperty private UnfiledContainerChildProperties properties; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> aspectNames; | ||||
|     @JsonProperty private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isClosed; | ||||
|     @JsonProperty private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private String relativePath; | ||||
|     @JsonProperty private String relativePath; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private RecordContent content; | ||||
|     @JsonProperty private RecordContent content; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isCompleted; | ||||
|     @JsonProperty private Boolean isCompleted; | ||||
| } | ||||
|   | ||||
| @@ -35,7 +35,5 @@ import org.alfresco.rest.core.RestModels; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class UnfiledContainerChildCollection extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection> | ||||
| { | ||||
|  | ||||
| } | ||||
| public class UnfiledContainerChildCollection | ||||
|         extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection> {} | ||||
|   | ||||
| @@ -28,11 +28,11 @@ package org.alfresco.rest.rm.community.model.unfiledcontainer; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
|  | ||||
| import org.alfresco.rest.core.RestModels; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category child entry | ||||
|  * | ||||
| @@ -41,8 +41,7 @@ import lombok.EqualsAndHashCode; | ||||
|  */ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| public class UnfiledContainerChildEntry extends RestModels<UnfiledContainer, UnfiledContainerChildEntry> | ||||
| { | ||||
|     @JsonProperty | ||||
|     private UnfiledContainerChild entry; | ||||
| public class UnfiledContainerChildEntry | ||||
|         extends RestModels<UnfiledContainer, UnfiledContainerChildEntry> { | ||||
|     @JsonProperty private UnfiledContainerChild entry; | ||||
| } | ||||
|   | ||||
| @@ -62,15 +62,15 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.Owner; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for record category child properties | ||||
|  * | ||||
| @@ -83,112 +83,111 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class UnfiledContainerChildProperties extends TestModel | ||||
| { | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class UnfiledContainerChildProperties extends TestModel { | ||||
|     /**************************************************************************/ | ||||
|     /** Mandatory parameters - Shared by unfiled record folder and records */ | ||||
|     /**************************************************************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_TITLE) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_TITLE) | ||||
|     private String title; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_DESCRIPTION) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_DESCRIPTION) | ||||
|     private String description; | ||||
|  | ||||
|     @JsonProperty (value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     @JsonProperty(value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE) | ||||
|     private Boolean recordSearchHasDispositionSchedule; | ||||
|  | ||||
|     /*********************************/ | ||||
|     /** Electronic record parameters */ | ||||
|     /*********************************/ | ||||
|     @JsonProperty (PROPERTIES_VERSION_TYPE) | ||||
|     @JsonProperty(PROPERTIES_VERSION_TYPE) | ||||
|     private String versionType; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_VERSION_LABEL) | ||||
|     @JsonProperty(PROPERTIES_VERSION_LABEL) | ||||
|     private String versionLabel; | ||||
|  | ||||
|     @JsonProperty(PROPERTIES_VERSIONED_NODEREF) | ||||
|     private String versionedNodeRef; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RMV_VERSIONED) | ||||
|     @JsonProperty(PROPERTIES_RMV_VERSIONED) | ||||
|     private String recordVersionLabel; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL) | ||||
|     @JsonProperty(PROPERTIES_DATE_TIME_ORIGINAL) | ||||
|     private String dateTimeOriginal; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_EXPOSURE_TIME) | ||||
|     @JsonProperty(PROPERTIES_EXPOSURE_TIME) | ||||
|     private Double exposureTime; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FLASH) | ||||
|     @JsonProperty(PROPERTIES_FLASH) | ||||
|     private Boolean flash; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_F_NUMBER) | ||||
|     @JsonProperty(PROPERTIES_F_NUMBER) | ||||
|     private Double fNumber; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FOCAL_LENGTH) | ||||
|     @JsonProperty(PROPERTIES_FOCAL_LENGTH) | ||||
|     private Double focalLength; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ISO_SPEED_RATINGS) | ||||
|     @JsonProperty(PROPERTIES_ISO_SPEED_RATINGS) | ||||
|     private Integer isoSpeedRatings; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_MANUFACTURER) | ||||
|     @JsonProperty(PROPERTIES_MANUFACTURER) | ||||
|     private String manufacturer; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_MODEL) | ||||
|     @JsonProperty(PROPERTIES_MODEL) | ||||
|     private String model; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ORIENTATION) | ||||
|     @JsonProperty(PROPERTIES_ORIENTATION) | ||||
|     private Integer orientation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PIXEL_X_DIMENSION) | ||||
|     @JsonProperty(PROPERTIES_PIXEL_X_DIMENSION) | ||||
|     private Integer pixelXDimension; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION) | ||||
|     @JsonProperty(PROPERTIES_PIXEL_Y_DIMENSION) | ||||
|     private Integer pixelYDimension; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_RESOLUTION_UNIT) | ||||
|     @JsonProperty(PROPERTIES_RESOLUTION_UNIT) | ||||
|     private String resolutionUnit; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_SOFTWARE) | ||||
|     @JsonProperty(PROPERTIES_SOFTWARE) | ||||
|     private String software; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_X_RESOLUTION) | ||||
|     @JsonProperty(PROPERTIES_X_RESOLUTION) | ||||
|     private Double xResolution; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_Y_RESOLUTION) | ||||
|     @JsonProperty(PROPERTIES_Y_RESOLUTION) | ||||
|     private Double yResolution; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_ORIGINAL_NAME) | ||||
|     @JsonProperty(PROPERTIES_ORIGINAL_NAME) | ||||
|     private String originalName; | ||||
|  | ||||
|     /*************************************/ | ||||
|     /** Non-electronic record parameters */ | ||||
|     /*************************************/ | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_SHELF) | ||||
|     @JsonProperty(PROPERTIES_SHELF) | ||||
|     private String shelf; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_STORAGE_LOCATION) | ||||
|     @JsonProperty(PROPERTIES_STORAGE_LOCATION) | ||||
|     private String storageLocation; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_FILE) | ||||
|     @JsonProperty(PROPERTIES_FILE) | ||||
|     private String file; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_BOX) | ||||
|     @JsonProperty(PROPERTIES_BOX) | ||||
|     private String box; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_NUMBER_OF_COPIES) | ||||
|     @JsonProperty(PROPERTIES_NUMBER_OF_COPIES) | ||||
|     private Integer numberOfCopies; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_PHYSICAL_SIZE) | ||||
|     @JsonProperty(PROPERTIES_PHYSICAL_SIZE) | ||||
|     private Integer physicalSize; | ||||
|  | ||||
|     @JsonProperty (PROPERTIES_OWNER) | ||||
|     @JsonProperty(PROPERTIES_OWNER) | ||||
|     private Owner owner; | ||||
| } | ||||
|   | ||||
| @@ -32,14 +32,14 @@ import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanCo | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| /** | ||||
|  * POJO for file plan properties | ||||
|  * | ||||
| @@ -51,15 +51,14 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @JsonIgnoreProperties (ignoreUnknown = true) | ||||
| public class UnfiledContainerProperties extends TestModel | ||||
| { | ||||
| @JsonIgnoreProperties(ignoreUnknown = true) | ||||
| public class UnfiledContainerProperties extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_IDENTIFIER) | ||||
|     private String identifier; | ||||
|  | ||||
|     @JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     @JsonProperty(required = true, value = PROPERTIES_ROOT_NODE_REF) | ||||
|     private String rootNodeRef; | ||||
| } | ||||
|   | ||||
| @@ -26,13 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.model.unfiledcontainer; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.rest.rm.community.model.record.RecordContent; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonProperty; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| @@ -41,6 +34,13 @@ import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| import org.alfresco.rest.model.RestByUserModel; | ||||
| import org.alfresco.rest.rm.community.model.common.Path; | ||||
| import org.alfresco.rest.rm.community.model.record.RecordContent; | ||||
| import org.alfresco.utility.model.TestModel; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * POJO for unfiled container | ||||
|  * | ||||
| @@ -52,62 +52,52 @@ import lombok.NoArgsConstructor; | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class UnfiledRecordFolder extends TestModel | ||||
| { | ||||
| public class UnfiledRecordFolder extends TestModel { | ||||
|     /*************************/ | ||||
|     /** Mandatory parameters */ | ||||
|     /*************************/ | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String createdAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel createdByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String modifiedAt; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private RestByUserModel modifiedByUser; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String name; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String id; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String nodeType; | ||||
|  | ||||
|     @JsonProperty (required = true) | ||||
|     @JsonProperty(required = true) | ||||
|     private String parentId; | ||||
|  | ||||
|     /************************/ | ||||
|     /** Optional parameters */ | ||||
|     /************************/ | ||||
|     @JsonProperty | ||||
|     private UnfiledContainerChildProperties properties; | ||||
|     @JsonProperty private UnfiledContainerChildProperties properties; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> aspectNames; | ||||
|     @JsonProperty private List<String> aspectNames; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean hasRetentionSchedule; | ||||
|     @JsonProperty private Boolean hasRetentionSchedule; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isClosed; | ||||
|     @JsonProperty private Boolean isClosed; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private List<String> allowableOperations; | ||||
|     @JsonProperty private List<String> allowableOperations; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Path path; | ||||
|     @JsonProperty private Path path; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private String relativePath; | ||||
|     @JsonProperty private String relativePath; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private RecordContent content; | ||||
|     @JsonProperty private RecordContent content; | ||||
|  | ||||
|     @JsonProperty | ||||
|     private Boolean isCompleted; | ||||
|     @JsonProperty private Boolean isCompleted; | ||||
| } | ||||
|   | ||||
| @@ -32,8 +32,7 @@ package org.alfresco.rest.rm.community.model.user; | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.7 | ||||
|  */ | ||||
| public class UserCapabilities | ||||
| { | ||||
| public class UserCapabilities { | ||||
|  | ||||
|     /** The id of the view records capability. */ | ||||
|     public static final String VIEW_RECORDS_CAP = "ViewRecords"; | ||||
|   | ||||
| @@ -28,20 +28,18 @@ package org.alfresco.rest.rm.community.model.user; | ||||
|  | ||||
| /** | ||||
|  * Constants for RM user capabilities | ||||
|  *  | ||||
|  * | ||||
|  * @author Kristijan Conkas | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public enum UserPermissions | ||||
| { | ||||
| public enum UserPermissions { | ||||
|     PERMISSION_FILING("Filing"), | ||||
|     PERMISSION_READ_RECORDS("ReadRecords"), | ||||
|     PERMISSION_FILE_RECORDS("FileRecords"); | ||||
|  | ||||
|     public final String permissionId; | ||||
|  | ||||
|     UserPermissions(String permissionId) | ||||
|     { | ||||
|     UserPermissions(String permissionId) { | ||||
|         this.permissionId = permissionId; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -33,8 +33,7 @@ package org.alfresco.rest.rm.community.model.user; | ||||
|  * @author Kristijan Conkas | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public enum UserRoles | ||||
| { | ||||
| public enum UserRoles { | ||||
|     IN_PLACE_WRITERS("ExtendedWriters", "In-Place Writers"), | ||||
|     ROLE_RM_ADMIN("Administrator", "Records Management Administrator"), | ||||
|     ROLE_RM_MANAGER("RecordsManager", "Records Management Manager"), | ||||
| @@ -45,11 +44,8 @@ public enum UserRoles | ||||
|     public final String roleId; | ||||
|     public final String displayName; | ||||
|  | ||||
|     UserRoles(String roleId, String displayName) | ||||
|     { | ||||
|     UserRoles(String roleId, String displayName) { | ||||
|         this.roleId = roleId; | ||||
|         this.displayName = displayName; | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -29,29 +29,25 @@ package org.alfresco.rest.rm.community.requests; | ||||
| import static lombok.AccessLevel.PRIVATE; | ||||
| import static lombok.AccessLevel.PROTECTED; | ||||
|  | ||||
| import org.alfresco.rest.core.RMRestWrapper; | ||||
| import org.alfresco.rest.requests.ModelRequest; | ||||
|  | ||||
| import lombok.Getter; | ||||
| import lombok.Setter; | ||||
|  | ||||
| import org.alfresco.rest.core.RMRestWrapper; | ||||
| import org.alfresco.rest.requests.ModelRequest; | ||||
|  | ||||
| /** | ||||
|  * Extends {@link ModelRequest} to set {@link RMRestWrapper} | ||||
|  * | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public abstract class RMModelRequest<Request> extends ModelRequest<Request> | ||||
| { | ||||
|     @Getter (value = PROTECTED) | ||||
|     @Setter (value = PRIVATE) | ||||
| public abstract class RMModelRequest<Request> extends ModelRequest<Request> { | ||||
|     @Getter(value = PROTECTED) | ||||
|     @Setter(value = PRIVATE) | ||||
|     private RMRestWrapper rmRestWrapper; | ||||
|  | ||||
|     /** | ||||
|      * @param rmRestWrapper | ||||
|      */ | ||||
|     public RMModelRequest(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
|     /** @param rmRestWrapper */ | ||||
|     public RMModelRequest(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper.getRestWrapper()); | ||||
|         setRmRestWrapper(rmRestWrapper); | ||||
|     } | ||||
|   | ||||
| @@ -33,8 +33,8 @@ import io.restassured.RestAssured; | ||||
|  | ||||
| import org.alfresco.rest.core.RMRestProperties; | ||||
| import org.alfresco.rest.core.RMRestWrapper; | ||||
| import org.alfresco.rest.rm.community.requests.gscore.api.ActionsExecutionAPI; | ||||
| import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
| import org.alfresco.rest.rm.community.requests.gscore.api.ActionsExecutionAPI; | ||||
| import org.alfresco.rest.rm.community.requests.gscore.api.FilePlanAPI; | ||||
| import org.alfresco.rest.rm.community.requests.gscore.api.FilesAPI; | ||||
| import org.alfresco.rest.rm.community.requests.gscore.api.RMSiteAPI; | ||||
| @@ -48,24 +48,22 @@ import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI; | ||||
| import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI; | ||||
|  | ||||
| /** | ||||
|  * Defines the entire GS Core API | ||||
|  * {@link http://host:port/gs-api-explorer} select "GS Core API" | ||||
|  * Defines the entire GS Core API {@link http://host:port/gs-api-explorer} select "GS Core API" | ||||
|  * | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class GSCoreAPI extends RMModelRequest | ||||
| { | ||||
| public class GSCoreAPI extends RMModelRequest { | ||||
|     /** | ||||
|      * Constructor | ||||
|      * | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      * @param rmRestProperties RM REST Properties | ||||
|      */ | ||||
|     public GSCoreAPI(RMRestWrapper rmRestWrapper, RMRestProperties rmRestProperties) | ||||
|     { | ||||
|     public GSCoreAPI(RMRestWrapper rmRestWrapper, RMRestProperties rmRestProperties) { | ||||
|         super(rmRestWrapper); | ||||
|         RestAssured.baseURI = format("%s://%s", rmRestProperties.getScheme(), rmRestProperties.getServer()); | ||||
|         RestAssured.baseURI = | ||||
|                 format("%s://%s", rmRestProperties.getScheme(), rmRestProperties.getServer()); | ||||
|         RestAssured.port = parseInt(rmRestProperties.getPort()); | ||||
|         RestAssured.basePath = rmRestProperties.getRestRmPath(); | ||||
|         restWrapper.configureRequestSpec().setBasePath(RestAssured.basePath); | ||||
| @@ -76,9 +74,8 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link RMSiteAPI} | ||||
|      */ | ||||
|     public RMSiteAPI usingRMSite() | ||||
|     { | ||||
|       return new RMSiteAPI(getRmRestWrapper()); | ||||
|     public RMSiteAPI usingRMSite() { | ||||
|         return new RMSiteAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -86,8 +83,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link FilePlanAPI} | ||||
|      */ | ||||
|     public FilePlanAPI usingFilePlans() | ||||
|     { | ||||
|     public FilePlanAPI usingFilePlans() { | ||||
|         return new FilePlanAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -96,8 +92,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link RecordCategoryAPI} | ||||
|      */ | ||||
|     public RecordCategoryAPI usingRecordCategory() | ||||
|     { | ||||
|     public RecordCategoryAPI usingRecordCategory() { | ||||
|         return new RecordCategoryAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -106,8 +101,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link RecordFolderAPI} | ||||
|      */ | ||||
|     public RecordFolderAPI usingRecordFolder() | ||||
|     { | ||||
|     public RecordFolderAPI usingRecordFolder() { | ||||
|         return new RecordFolderAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -116,8 +110,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link RecordsAPI} | ||||
|      */ | ||||
|     public RecordsAPI usingRecords() | ||||
|     { | ||||
|     public RecordsAPI usingRecords() { | ||||
|         return new RecordsAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -126,8 +119,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link FilesAPI} | ||||
|      */ | ||||
|     public FilesAPI usingFiles() | ||||
|     { | ||||
|     public FilesAPI usingFiles() { | ||||
|         return new FilesAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -136,8 +128,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link TransferContainerAPI} | ||||
|      */ | ||||
|     public TransferContainerAPI usingTransferContainer() | ||||
|     { | ||||
|     public TransferContainerAPI usingTransferContainer() { | ||||
|         return new TransferContainerAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -146,8 +137,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link TransferAPI} | ||||
|      */ | ||||
|     public TransferAPI usingTransfer() | ||||
|     { | ||||
|     public TransferAPI usingTransfer() { | ||||
|         return new TransferAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -156,8 +146,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link UnfiledContainerAPI} | ||||
|      */ | ||||
|     public UnfiledContainerAPI usingUnfiledContainers() | ||||
|     { | ||||
|     public UnfiledContainerAPI usingUnfiledContainers() { | ||||
|         return new UnfiledContainerAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -166,8 +155,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link UnfiledRecordFolderAPI} | ||||
|      */ | ||||
|     public UnfiledRecordFolderAPI usingUnfiledRecordFolder() | ||||
|     { | ||||
|     public UnfiledRecordFolderAPI usingUnfiledRecordFolder() { | ||||
|         return new UnfiledRecordFolderAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -176,8 +164,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link RMUserAPI} | ||||
|      */ | ||||
|     public RMUserAPI usingRMUser() | ||||
|     { | ||||
|     public RMUserAPI usingRMUser() { | ||||
|         return new RMUserAPI(getRmRestWrapper()); | ||||
|     } | ||||
|  | ||||
| @@ -186,8 +173,7 @@ public class GSCoreAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return {@link ActionsExecutionAPI} | ||||
|      */ | ||||
|     public ActionsExecutionAPI usingActionsExecutionsAPI() | ||||
|     { | ||||
|     public ActionsExecutionAPI usingActionsExecutionsAPI() { | ||||
|         return new ActionsExecutionAPI(getRmRestWrapper()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -29,6 +29,7 @@ package org.alfresco.rest.rm.community.requests.gscore.api; | ||||
| import com.google.common.collect.ImmutableMap; | ||||
|  | ||||
| import lombok.SneakyThrows; | ||||
|  | ||||
| import org.alfresco.rest.core.RMRestWrapper; | ||||
| import org.alfresco.rest.rm.community.model.rules.ActionsOnRule; | ||||
| import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
| @@ -41,28 +42,28 @@ import org.json.JSONObject; | ||||
|  * @author Claudia Agache | ||||
|  * @since 3.1 | ||||
|  */ | ||||
| public class ActionsExecutionAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public ActionsExecutionAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class ActionsExecutionAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public ActionsExecutionAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Declares and files a document as record to a record folder using v1 actions api | ||||
|      * | ||||
|      * @param targetNode      the node on which the action is executed | ||||
|      * @param targetNode the node on which the action is executed | ||||
|      * @param destinationPath the path to the record folder | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public JSONObject declareAndFile(RepoTestModel targetNode, String destinationPath) throws Exception | ||||
|     { | ||||
|         return getRmRestWrapper().withCoreAPI().usingActions() | ||||
|                                  .executeAction(ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), targetNode, | ||||
|                                          ImmutableMap.of("path", destinationPath)); | ||||
|     public JSONObject declareAndFile(RepoTestModel targetNode, String destinationPath) | ||||
|             throws Exception { | ||||
|         return getRmRestWrapper() | ||||
|                 .withCoreAPI() | ||||
|                 .usingActions() | ||||
|                 .executeAction( | ||||
|                         ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), | ||||
|                         targetNode, | ||||
|                         ImmutableMap.of("path", destinationPath)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -71,25 +72,29 @@ public class ActionsExecutionAPI extends RMModelRequest | ||||
|      * @param targetNode the node on which the action is executed | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public JSONObject declareAsRecord(RepoTestModel targetNode) throws Exception | ||||
|     { | ||||
|         return getRmRestWrapper().withCoreAPI().usingActions() | ||||
|                                  .executeAction(ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), targetNode); | ||||
|     public JSONObject declareAsRecord(RepoTestModel targetNode) throws Exception { | ||||
|         return getRmRestWrapper() | ||||
|                 .withCoreAPI() | ||||
|                 .usingActions() | ||||
|                 .executeAction(ActionsOnRule.DECLARE_AS_RECORD.getActionValue(), targetNode); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Declares and file a document version as record to a record folder using v1 actions api | ||||
|      * | ||||
|      * @param targetNode      the node on which the action is executed | ||||
|      * @param targetNode the node on which the action is executed | ||||
|      * @param destinationPath the path to the record folder | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public JSONObject declareAndFileVersionAsRecord(RepoTestModel targetNode, String destinationPath) throws Exception | ||||
|     { | ||||
|         return getRmRestWrapper().withCoreAPI().usingActions() | ||||
|                                  .executeAction(ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), targetNode, | ||||
|                                          ImmutableMap.of("path", destinationPath)); | ||||
|     public JSONObject declareAndFileVersionAsRecord( | ||||
|             RepoTestModel targetNode, String destinationPath) throws Exception { | ||||
|         return getRmRestWrapper() | ||||
|                 .withCoreAPI() | ||||
|                 .usingActions() | ||||
|                 .executeAction( | ||||
|                         ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), | ||||
|                         targetNode, | ||||
|                         ImmutableMap.of("path", destinationPath)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -98,10 +103,12 @@ public class ActionsExecutionAPI extends RMModelRequest | ||||
|      * @param targetNode the node on which the action is executed | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public JSONObject declareVersionAsRecord(RepoTestModel targetNode) throws Exception | ||||
|     { | ||||
|         return getRmRestWrapper().withCoreAPI().usingActions() | ||||
|                                  .executeAction(ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), targetNode); | ||||
|     public JSONObject declareVersionAsRecord(RepoTestModel targetNode) throws Exception { | ||||
|         return getRmRestWrapper() | ||||
|                 .withCoreAPI() | ||||
|                 .usingActions() | ||||
|                 .executeAction( | ||||
|                         ActionsOnRule.DECLARE_VERSION_AS_RECORD.getActionValue(), targetNode); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -111,24 +118,28 @@ public class ActionsExecutionAPI extends RMModelRequest | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     @SneakyThrows | ||||
|     public JSONObject addWORMLock(RepoTestModel targetNode) | ||||
|     { | ||||
|         return getRmRestWrapper().withCoreAPI().usingActions() | ||||
|                                  .executeAction(ActionsOnRule.WORM_LOCK.getActionValue(), targetNode); | ||||
|     public JSONObject addWORMLock(RepoTestModel targetNode) { | ||||
|         return getRmRestWrapper() | ||||
|                 .withCoreAPI() | ||||
|                 .usingActions() | ||||
|                 .executeAction(ActionsOnRule.WORM_LOCK.getActionValue(), targetNode); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * WORM lock a node for a period of days | ||||
|      * | ||||
|      * @param targetNode      the node on which the action is executed | ||||
|      * @param targetNode the node on which the action is executed | ||||
|      * @param retentionPeriod the retention period in days for the WORM lock | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     @SneakyThrows | ||||
|     public JSONObject addWORMLock(RepoTestModel targetNode, int retentionPeriod) | ||||
|     { | ||||
|         return getRmRestWrapper().withCoreAPI().usingActions() | ||||
|                                  .executeAction(ActionsOnRule.WORM_LOCK.getActionValue(), targetNode, | ||||
|                                          ImmutableMap.of("retentionPeriod", String.valueOf(retentionPeriod))); | ||||
|     public JSONObject addWORMLock(RepoTestModel targetNode, int retentionPeriod) { | ||||
|         return getRmRestWrapper() | ||||
|                 .withCoreAPI() | ||||
|                 .usingActions() | ||||
|                 .executeAction( | ||||
|                         ActionsOnRule.WORM_LOCK.getActionValue(), | ||||
|                         targetNode, | ||||
|                         ImmutableMap.of("retentionPeriod", String.valueOf(retentionPeriod))); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -49,23 +49,18 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class FilePlanAPI extends RMModelRequest | ||||
| { | ||||
| public class FilePlanAPI extends RMModelRequest { | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public FilePlanAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
|     public FilePlanAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getFilePlan(String, String)} | ||||
|      */ | ||||
|     public FilePlan getFilePlan(String filePlanId) | ||||
|     { | ||||
|     /** see {@link #getFilePlan(String, String)} */ | ||||
|     public FilePlan getFilePlan(String filePlanId) { | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
|         return getFilePlan(filePlanId, EMPTY); | ||||
| @@ -78,30 +73,28 @@ public class FilePlanAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link FilePlan} for the given {@code filePlanId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code filePlanId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code filePlanId}</li> | ||||
|      *  <li>{@code filePlanId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code filePlanId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code filePlanId} | ||||
|      *       <li>{@code filePlanId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public FilePlan getFilePlan(String filePlanId, String parameters) | ||||
|     { | ||||
|     public FilePlan getFilePlan(String filePlanId, String parameters) { | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(FilePlan.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "/file-plans/{filePlanId}?{parameters}", | ||||
|                 filePlanId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         FilePlan.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "/file-plans/{filePlanId}?{parameters}", | ||||
|                                 filePlanId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getRootRecordCategories(String, String)} | ||||
|      */ | ||||
|     public RecordCategoryCollection getRootRecordCategories(String filePlanId) | ||||
|     { | ||||
|     /** see {@link #getRootRecordCategories(String, String)} */ | ||||
|     public RecordCategoryCollection getRootRecordCategories(String filePlanId) { | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
|         return getRootRecordCategories(filePlanId, EMPTY); | ||||
| @@ -114,29 +107,28 @@ public class FilePlanAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link RecordCategoryCollection} for the given {@code filePlanId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code filePlanId}</li> | ||||
|      *  <li>{@code filePlanId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code filePlanId} | ||||
|      *       <li>{@code filePlanId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordCategoryCollection getRootRecordCategories(String filePlanId, String parameters) | ||||
|     { | ||||
|     public RecordCategoryCollection getRootRecordCategories(String filePlanId, String parameters) { | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(RecordCategoryCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "file-plans/{filePlanId}/categories?{parameters}", | ||||
|             filePlanId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         RecordCategoryCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "file-plans/{filePlanId}/categories?{parameters}", | ||||
|                                 filePlanId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #createRootRecordCategory(RecordCategory, String, String)} | ||||
|      */ | ||||
|     public RecordCategory createRootRecordCategory(RecordCategory recordCategoryModel, String filePlanId) | ||||
|     { | ||||
|     /** see {@link #createRootRecordCategory(RecordCategory, String, String)} */ | ||||
|     public RecordCategory createRootRecordCategory( | ||||
|             RecordCategory recordCategoryModel, String filePlanId) { | ||||
|         mandatoryObject("recordCategoryModel", recordCategoryModel); | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
| @@ -151,34 +143,35 @@ public class FilePlanAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The created {@link RecordCategory} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code filePlanId} is not a valid format or {@code filePlanId} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to add children to {@code filePlanId}</li> | ||||
|      *  <li>{@code filePlanIds} does not exist</li> | ||||
|      *  <li>new name clashes with an existing node in the current parent container</li> | ||||
|      *  <li>model integrity exception, including node name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code filePlanId} is not a valid format or {@code filePlanId} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to add children to {@code filePlanId} | ||||
|      *       <li>{@code filePlanIds} does not exist | ||||
|      *       <li>new name clashes with an existing node in the current parent container | ||||
|      *       <li>model integrity exception, including node name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordCategory createRootRecordCategory(RecordCategory recordCategoryModel, String filePlanId, String parameters) | ||||
|     { | ||||
|     public RecordCategory createRootRecordCategory( | ||||
|             RecordCategory recordCategoryModel, String filePlanId, String parameters) { | ||||
|         mandatoryObject("recordCategoryModel", recordCategoryModel); | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RecordCategory.class, requestWithBody( | ||||
|                 POST, | ||||
|                 toJson(recordCategoryModel), | ||||
|                 "file-plans/{filePlanId}/categories?{parameters}", | ||||
|                 filePlanId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RecordCategory.class, | ||||
|                         requestWithBody( | ||||
|                                 POST, | ||||
|                                 toJson(recordCategoryModel), | ||||
|                                 "file-plans/{filePlanId}/categories?{parameters}", | ||||
|                                 filePlanId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #updateFilePlan(FilePlan, String, String) | ||||
|      */ | ||||
|     public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId) | ||||
|     { | ||||
|     public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId) { | ||||
|         mandatoryObject("filePlanModel", filePlanModel); | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
| @@ -188,29 +181,31 @@ public class FilePlanAPI extends RMModelRequest | ||||
|     /** | ||||
|      * Updates a file plan. | ||||
|      * | ||||
|      * @param filePlanModel The file plan  model which holds the information | ||||
|      * @param filePlanId    The identifier of the file plan | ||||
|      * @param parameters          The URL parameters to add | ||||
|      * @param filePlanModel The file plan model which holds the information | ||||
|      * @param filePlanId The identifier of the file plan | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      *                   <ul> | ||||
|      *                   <li>the update request is invalid or {@code filePlanId} is not a valid format or {@code filePlanModel} is invalid</li> | ||||
|      *                   <li>authentication fails</li> | ||||
|      *                   <li>current user does not have permission to update {@code filePlanId}</li> | ||||
|      *                   <li>{@code filePlanId} does not exist</li> | ||||
|      *                   <li>model integrity exception, including file name with invalid characters</li> | ||||
|      *                   </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code filePlanId} is not a valid format or {@code | ||||
|      *           filePlanModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code filePlanId} | ||||
|      *       <li>{@code filePlanId} does not exist | ||||
|      *       <li>model integrity exception, including file name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId, String parameters) | ||||
|     { | ||||
|     public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId, String parameters) { | ||||
|         mandatoryObject("filePlanModel", filePlanModel); | ||||
|         mandatoryString("filePlanId", filePlanId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(FilePlan.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(filePlanModel), | ||||
|                 "file-plans/{filePlanId}?{parameters}", | ||||
|                 filePlanId, | ||||
|                 parameters)); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         FilePlan.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(filePlanModel), | ||||
|                                 "file-plans/{filePlanId}?{parameters}", | ||||
|                                 filePlanId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -40,15 +40,11 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  * @author Kristijan Conkas | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class FilesAPI extends RMModelRequest<FilesAPI> | ||||
| { | ||||
| public class FilesAPI extends RMModelRequest<FilesAPI> { | ||||
|     public static final String PARENT_ID_PARAM = "parentId"; | ||||
|  | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public FilesAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public FilesAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
| @@ -59,16 +55,16 @@ public class FilesAPI extends RMModelRequest<FilesAPI> | ||||
|      * @return The {@link Record} for created record | ||||
|      * @throws RuntimeException for malformed JSON responses | ||||
|      */ | ||||
|     public Record declareAsRecord(String fileId) | ||||
|     { | ||||
|     public Record declareAsRecord(String fileId) { | ||||
|         mandatoryString("fileId", fileId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Record.class, simpleRequest( | ||||
|             POST, | ||||
|             "/files/{fileId}/declare?{parameters}", | ||||
|             fileId, | ||||
|             getRmRestWrapper().getParameters() | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Record.class, | ||||
|                         simpleRequest( | ||||
|                                 POST, | ||||
|                                 "/files/{fileId}/declare?{parameters}", | ||||
|                                 fileId, | ||||
|                                 getRmRestWrapper().getParameters())); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -46,15 +46,13 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RMSiteAPI extends RMModelRequest | ||||
| { | ||||
| public class RMSiteAPI extends RMModelRequest { | ||||
|     /** | ||||
|      * Constructor | ||||
|      * | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public RMSiteAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
|     public RMSiteAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
| @@ -63,19 +61,16 @@ public class RMSiteAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return The {@link RMSite} for the given file plan component id | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM site</li> | ||||
|      *  <li>Api Response code 401 If authentication failed</li> | ||||
|      *  <li>Api Response code 409 If RM Site does not exist</li> | ||||
|      *  <li>Api Response code default Unexpected error</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM | ||||
|      *           site | ||||
|      *       <li>Api Response code 401 If authentication failed | ||||
|      *       <li>Api Response code 409 If RM Site does not exist | ||||
|      *       <li>Api Response code default Unexpected error | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RMSite getSite() | ||||
|     { | ||||
|         return getRmRestWrapper().processModel(RMSite.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "gs-sites/rm" | ||||
|         )); | ||||
|     public RMSite getSite() { | ||||
|         return getRmRestWrapper().processModel(RMSite.class, simpleRequest(GET, "gs-sites/rm")); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -84,41 +79,37 @@ public class RMSiteAPI extends RMModelRequest | ||||
|      * @param rmSiteModel The properties of the rm site to be created | ||||
|      * @return The {@link RMSite} with the given properties | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Api Response code 400 Invalid parameter: title, or description exceed the maximum length; or siteBodyCreate invalid</li> | ||||
|      *  <li>Api Response code 401 If authentication failed</ | ||||
|      *  <li>Api Response code 409 RM Site already exists</li> | ||||
|      *  <li>Api Response code default Unexpected error</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>Api Response code 400 Invalid parameter: title, or description exceed the maximum | ||||
|      *           length; or siteBodyCreate invalid | ||||
|      *       <li>Api Response code 401 If authentication failed</ | ||||
|      *       <li>Api Response code 409 RM Site already exists | ||||
|      *       <li>Api Response code default Unexpected error | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RMSite createRMSite(RMSite rmSiteModel) | ||||
|     { | ||||
|     public RMSite createRMSite(RMSite rmSiteModel) { | ||||
|         mandatoryObject("rmSiteModel", rmSiteModel); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RMSite.class, requestWithBody( | ||||
|                 POST, | ||||
|                 toJson(rmSiteModel), | ||||
|                 "gs-sites" | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel(RMSite.class, requestWithBody(POST, toJson(rmSiteModel), "gs-sites")); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Delete RM site | ||||
|      * | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Api Response code 400 Invalid parameter: DELETE request is supported only for the RM site</li> | ||||
|      *  <li>Api Response code 401 If authentication failed</ | ||||
|      *  <li>Api Response code 403 Current user does not have permission to delete the site that is visible to them.</li> | ||||
|      *  <li>Api Response code 404 RM site does not exist</li> | ||||
|      *  <li>Api Response code default Unexpected error</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>Api Response code 400 Invalid parameter: DELETE request is supported only for the | ||||
|      *           RM site | ||||
|      *       <li>Api Response code 401 If authentication failed</ | ||||
|      *       <li>Api Response code 403 Current user does not have permission to delete the site that | ||||
|      *           is visible to them. | ||||
|      *       <li>Api Response code 404 RM site does not exist | ||||
|      *       <li>Api Response code default Unexpected error | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public void deleteRMSite() | ||||
|     { | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest( | ||||
|                 DELETE, | ||||
|                 "gs-sites/rm" | ||||
|         )); | ||||
|     public void deleteRMSite() { | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest(DELETE, "gs-sites/rm")); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -127,23 +118,20 @@ public class RMSiteAPI extends RMModelRequest | ||||
|      * @param rmSiteModel The properties to be updated | ||||
|      * @return The updated {@link RMSite} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Api Response code 400 the update request is invalid {@code rmSiteModel} is invalid</li> | ||||
|      *  <li>Api Response code 401 If authentication fails</li> | ||||
|      *  <li>Api Response code 403 does not have permission to update {@code RMSite}</li> | ||||
|      *  <li>Api Response code 404 {@code RMSiteModel} does not exist</li> | ||||
|      *  <li>Api Response code default Unexpected error,model integrity exception</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>Api Response code 400 the update request is invalid {@code rmSiteModel} is invalid | ||||
|      *       <li>Api Response code 401 If authentication fails | ||||
|      *       <li>Api Response code 403 does not have permission to update {@code RMSite} | ||||
|      *       <li>Api Response code 404 {@code RMSiteModel} does not exist | ||||
|      *       <li>Api Response code default Unexpected error,model integrity exception | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RMSite updateRMSite(RMSite rmSiteModel) | ||||
|     { | ||||
|     public RMSite updateRMSite(RMSite rmSiteModel) { | ||||
|         mandatoryObject("rmSiteProperties", rmSiteModel); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RMSite.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(rmSiteModel), | ||||
|                 "gs-sites/rm" | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RMSite.class, requestWithBody(PUT, toJson(rmSiteModel), "gs-sites/rm")); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -151,15 +139,15 @@ public class RMSiteAPI extends RMModelRequest | ||||
|      * | ||||
|      * @return <code>true</code> if the RM site exists, <code>false</code> otherwise | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM site</li> | ||||
|      *  <li>Api Response code 401 If authentication failed</li> | ||||
|      *  <li>Api Response code 409 If RM Site does not exist</li> | ||||
|      *  <li>Api Response code default Unexpected error</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM | ||||
|      *           site | ||||
|      *       <li>Api Response code 401 If authentication failed | ||||
|      *       <li>Api Response code 409 If RM Site does not exist | ||||
|      *       <li>Api Response code default Unexpected error | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public boolean existsRMSite() | ||||
|     { | ||||
|     public boolean existsRMSite() { | ||||
|         getSite(); | ||||
|         return getRmRestWrapper().getStatusCode().equals(String.valueOf(OK.value())); | ||||
|     } | ||||
|   | ||||
| @@ -26,6 +26,9 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.requests.gscore.api; | ||||
|  | ||||
| import static io.restassured.RestAssured.basic; | ||||
| import static io.restassured.RestAssured.given; | ||||
|  | ||||
| import static org.jglue.fluentjson.JsonBuilderFactory.buildObject; | ||||
| import static org.springframework.http.HttpStatus.OK; | ||||
|  | ||||
| @@ -35,8 +38,6 @@ import io.restassured.builder.RequestSpecBuilder; | ||||
| import io.restassured.http.ContentType; | ||||
| import io.restassured.response.Response; | ||||
| import io.restassured.specification.RequestSpecification; | ||||
| import static io.restassured.RestAssured.basic; | ||||
| import static io.restassured.RestAssured.given; | ||||
|  | ||||
| import org.alfresco.dataprep.AlfrescoHttpClient; | ||||
| import org.alfresco.dataprep.AlfrescoHttpClientFactory; | ||||
| @@ -54,24 +55,21 @@ import org.alfresco.utility.model.UserModel; | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| // FIXME: As of December 2016 there is no v1-style API for managing RM users and users' | ||||
| // roles/permissions. Until such APIs have become available, methods in this class are just proxies to | ||||
| // roles/permissions. Until such APIs have become available, methods in this class are just proxies | ||||
| // to | ||||
| // "old-style" API calls. | ||||
| public class RMUserAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public RMUserAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class RMUserAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public RMUserAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method to obtain {@link AlfrescoHttpClient} | ||||
|      * | ||||
|      * @return Initialized {@link AlfrescoHttpClient} instance | ||||
|      */ | ||||
|     private AlfrescoHttpClient getAlfrescoHttpClient() | ||||
|     { | ||||
|     private AlfrescoHttpClient getAlfrescoHttpClient() { | ||||
|         RMRestProperties properties = getRmRestWrapper().getRmRestProperties(); | ||||
|  | ||||
|         AlfrescoHttpClientFactory factory = new AlfrescoHttpClientFactory(); | ||||
| @@ -89,117 +87,120 @@ public class RMUserAPI extends RMModelRequest | ||||
|      * @param userRole User's RM role, one of {@link UserRoles} roles | ||||
|      * @throws RuntimeException for failed requests | ||||
|      */ | ||||
|     public void assignRoleToUser(String userName, String userRole) | ||||
|     { | ||||
|     public void assignRoleToUser(String userName, String userRole) { | ||||
|         UserModel adminUser = getRmRestWrapper().getTestUser(); | ||||
|  | ||||
|         // get an "old-style" REST API client | ||||
|         AlfrescoHttpClient client = getAlfrescoHttpClient(); | ||||
|  | ||||
|         // override v1 baseURI and basePath | ||||
|         RequestSpecification spec = new RequestSpecBuilder() | ||||
|                 .setBaseUri(client.getApiUrl()) | ||||
|                 .setBasePath("/") | ||||
|                 .build(); | ||||
|         RequestSpecification spec = | ||||
|                 new RequestSpecBuilder().setBaseUri(client.getApiUrl()).setBasePath("/").build(); | ||||
|  | ||||
|         Response response = given() | ||||
|                 .spec(spec) | ||||
|                 .log().all() | ||||
|                 .pathParam("role", userRole) | ||||
|                 .pathParam("authority", userName) | ||||
|                 .param("alf_ticket", client.getAlfTicket(adminUser.getUsername(), | ||||
|                         adminUser.getPassword())) | ||||
|                 .when() | ||||
|                 .post("/rm/roles/{role}/authorities/{authority}") | ||||
|                 .prettyPeek() | ||||
|                 .andReturn(); | ||||
|         Response response = | ||||
|                 given().spec(spec) | ||||
|                         .log() | ||||
|                         .all() | ||||
|                         .pathParam("role", userRole) | ||||
|                         .pathParam("authority", userName) | ||||
|                         .param( | ||||
|                                 "alf_ticket", | ||||
|                                 client.getAlfTicket( | ||||
|                                         adminUser.getUsername(), adminUser.getPassword())) | ||||
|                         .when() | ||||
|                         .post("/rm/roles/{role}/authorities/{authority}") | ||||
|                         .prettyPeek() | ||||
|                         .andReturn(); | ||||
|         getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method to add permission on a component to user | ||||
|      * @param filePlanComponentId The id of the file plan component on which permission should be given | ||||
|      * | ||||
|      * @param filePlanComponentId The id of the file plan component on which permission should be | ||||
|      *     given | ||||
|      * @param user {@link UserModel} for a user to be granted permission | ||||
|      * @param permission {@link UserPermissions} to be granted | ||||
|      */ | ||||
|     public void addUserPermission(String filePlanComponentId, UserModel user, UserPermissions permission) | ||||
|     { | ||||
|     public void addUserPermission( | ||||
|             String filePlanComponentId, UserModel user, UserPermissions permission) { | ||||
|         UserModel adminUser = getRmRestWrapper().getTestUser(); | ||||
|  | ||||
|         // get an "old-style" REST API client | ||||
|         AlfrescoHttpClient client = getAlfrescoHttpClient(); | ||||
|  | ||||
|         JsonObject bodyJson = buildObject() | ||||
|                 .addArray("permissions") | ||||
|                 .addObject() | ||||
|                 .add("authority", user.getUsername()) | ||||
|                 .add("role", permission.permissionId) | ||||
|                 .end() | ||||
|                 .getJson(); | ||||
|         JsonObject bodyJson = | ||||
|                 buildObject() | ||||
|                         .addArray("permissions") | ||||
|                         .addObject() | ||||
|                         .add("authority", user.getUsername()) | ||||
|                         .add("role", permission.permissionId) | ||||
|                         .end() | ||||
|                         .getJson(); | ||||
|  | ||||
|         // override v1 baseURI and basePath | ||||
|         RequestSpecification spec = new RequestSpecBuilder() | ||||
|                 .setBaseUri(client.getApiUrl()) | ||||
|                 .setBasePath("/") | ||||
|                 .build(); | ||||
|         RequestSpecification spec = | ||||
|                 new RequestSpecBuilder().setBaseUri(client.getApiUrl()).setBasePath("/").build(); | ||||
|  | ||||
|         // execute an "old-style" API call | ||||
|         Response response = given() | ||||
|                 .spec(spec) | ||||
|                 .auth().basic(adminUser.getUsername(), adminUser.getPassword()) | ||||
|                 .contentType(ContentType.JSON) | ||||
|                 .body(bodyJson.toString()) | ||||
|                 .pathParam("nodeId", filePlanComponentId) | ||||
|                 .log().all() | ||||
|                 .when() | ||||
|                 .post("/node/workspace/SpacesStore/{nodeId}/rmpermissions") | ||||
|                 .prettyPeek() | ||||
|                 .andReturn(); | ||||
|         Response response = | ||||
|                 given().spec(spec) | ||||
|                         .auth() | ||||
|                         .basic(adminUser.getUsername(), adminUser.getPassword()) | ||||
|                         .contentType(ContentType.JSON) | ||||
|                         .body(bodyJson.toString()) | ||||
|                         .pathParam("nodeId", filePlanComponentId) | ||||
|                         .log() | ||||
|                         .all() | ||||
|                         .when() | ||||
|                         .post("/node/workspace/SpacesStore/{nodeId}/rmpermissions") | ||||
|                         .prettyPeek() | ||||
|                         .andReturn(); | ||||
|         getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method to set permission inheritance on a file plan component | ||||
|      * | ||||
|      * @param filePlanComponentId The id of the file plan component on which inherited permission should be set | ||||
|      * @param isInherited          true if the permission is inherited | ||||
|      *                             false if the permission inheritance is disabled | ||||
|      * @param filePlanComponentId The id of the file plan component on which inherited permission | ||||
|      *     should be set | ||||
|      * @param isInherited true if the permission is inherited false if the permission inheritance is | ||||
|      *     disabled | ||||
|      */ | ||||
|     public void setUserPermissionInheritance(String filePlanComponentId, Boolean isInherited) | ||||
|     { | ||||
|     public void setUserPermissionInheritance(String filePlanComponentId, Boolean isInherited) { | ||||
|         final UserModel adminUser = getRmRestWrapper().getTestUser(); | ||||
|  | ||||
|         // get an "old-style" REST API client | ||||
|         final AlfrescoHttpClient client = getAlfrescoHttpClient(); | ||||
|  | ||||
|         final JsonObject bodyJson = buildObject() | ||||
|                 .addArray("permissions") | ||||
|                 .end() | ||||
|                 .add("isInherited", isInherited) | ||||
|                 .getJson(); | ||||
|         final JsonObject bodyJson = | ||||
|                 buildObject() | ||||
|                         .addArray("permissions") | ||||
|                         .end() | ||||
|                         .add("isInherited", isInherited) | ||||
|                         .getJson(); | ||||
|  | ||||
|         // override v1 baseURI and basePath | ||||
|         RequestSpecification spec = new RequestSpecBuilder() | ||||
|                 .setBaseUri(client.getApiUrl()) | ||||
|                 .setBasePath("/") | ||||
|                 .build(); | ||||
|         RequestSpecification spec = | ||||
|                 new RequestSpecBuilder().setBaseUri(client.getApiUrl()).setBasePath("/").build(); | ||||
|  | ||||
|         // execute an "old-style" API call | ||||
|         final Response response = given() | ||||
|                 .spec(spec) | ||||
|                 .auth().basic(adminUser.getUsername(), adminUser.getPassword()) | ||||
|                 .contentType(ContentType.JSON) | ||||
|                 .body(bodyJson.toString()) | ||||
|                 .pathParam("nodeId", filePlanComponentId) | ||||
|                 .log().all() | ||||
|                 .when() | ||||
|                 .post("/node/workspace/SpacesStore/{nodeId}/rmpermissions") | ||||
|                 .prettyPeek() | ||||
|                 .andReturn(); | ||||
|         final Response response = | ||||
|                 given().spec(spec) | ||||
|                         .auth() | ||||
|                         .basic(adminUser.getUsername(), adminUser.getPassword()) | ||||
|                         .contentType(ContentType.JSON) | ||||
|                         .body(bodyJson.toString()) | ||||
|                         .pathParam("nodeId", filePlanComponentId) | ||||
|                         .log() | ||||
|                         .all() | ||||
|                         .when() | ||||
|                         .post("/node/workspace/SpacesStore/{nodeId}/rmpermissions") | ||||
|                         .prettyPeek() | ||||
|                         .andReturn(); | ||||
|         getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Creates a user with the given name using the old APIs | ||||
|      * | ||||
| @@ -208,35 +209,31 @@ public class RMUserAPI extends RMModelRequest | ||||
|      * @param userEmail The user's e-mail address | ||||
|      * @return <code>true</code> if the user was created successfully, <code>false</code> otherwise. | ||||
|      */ | ||||
|     public boolean createUser(String userName, String userPassword, String userEmail) | ||||
|     { | ||||
|     public boolean createUser(String userName, String userPassword, String userEmail) { | ||||
|         UserModel adminUser = getRmRestWrapper().getTestUser(); | ||||
|         final AlfrescoHttpClient client = getAlfrescoHttpClient(); | ||||
|  | ||||
|         JsonObject body = buildObject() | ||||
|             .add("userName", userName) | ||||
|             .add("firstName", userName) | ||||
|             .add("lastName", userName) | ||||
|             .add("password", userPassword) | ||||
|             .add("email", userEmail) | ||||
|             .getJson(); | ||||
|         JsonObject body = | ||||
|                 buildObject() | ||||
|                         .add("userName", userName) | ||||
|                         .add("firstName", userName) | ||||
|                         .add("lastName", userName) | ||||
|                         .add("password", userPassword) | ||||
|                         .add("email", userEmail) | ||||
|                         .getJson(); | ||||
|  | ||||
|         final RequestSpecification spec = new RequestSpecBuilder() | ||||
|             .setBaseUri(client.getApiUrl()) | ||||
|             .setBasePath("/") | ||||
|             .setAuth(basic(adminUser.getUsername(), adminUser.getPassword())) | ||||
|             .setContentType(ContentType.JSON) | ||||
|             .setBody(body.toString()) | ||||
|             .build(); | ||||
|         final RequestSpecification spec = | ||||
|                 new RequestSpecBuilder() | ||||
|                         .setBaseUri(client.getApiUrl()) | ||||
|                         .setBasePath("/") | ||||
|                         .setAuth(basic(adminUser.getUsername(), adminUser.getPassword())) | ||||
|                         .setContentType(ContentType.JSON) | ||||
|                         .setBody(body.toString()) | ||||
|                         .build(); | ||||
|  | ||||
|         // create POST request to "people" endpoint | ||||
|         Response response = given() | ||||
|             .spec(spec) | ||||
|             .log().all() | ||||
|         .when() | ||||
|             .post("people") | ||||
|             .prettyPeek() | ||||
|             .andReturn(); | ||||
|         Response response = | ||||
|                 given().spec(spec).log().all().when().post("people").prettyPeek().andReturn(); | ||||
|  | ||||
|         return (response.getStatusCode() == OK.value()); | ||||
|     } | ||||
|   | ||||
| @@ -49,15 +49,13 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RecordCategoryAPI extends RMModelRequest | ||||
| { | ||||
| public class RecordCategoryAPI extends RMModelRequest { | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public RecordCategoryAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
|     public RecordCategoryAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
| @@ -66,30 +64,25 @@ public class RecordCategoryAPI extends RMModelRequest | ||||
|      * | ||||
|      * @param recordCategoryId The identifier of a record category | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordCategoryId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to delete {@code recordCategoryId}</li> | ||||
|      *  <li>{@code recordCategoryId} does not exist</li> | ||||
|      *  <li>{@code recordCategoryId} is locked and cannot be deleted</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordCategoryId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to delete {@code recordCategoryId} | ||||
|      *       <li>{@code recordCategoryId} does not exist | ||||
|      *       <li>{@code recordCategoryId} is locked and cannot be deleted | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public void deleteRecordCategory(String recordCategoryId) | ||||
|     { | ||||
|     public void deleteRecordCategory(String recordCategoryId) { | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest( | ||||
|                 DELETE, | ||||
|                 "record-categories/{recordCategoryId}", | ||||
|                 recordCategoryId | ||||
|         )); | ||||
|         getRmRestWrapper() | ||||
|                 .processEmptyModel( | ||||
|                         simpleRequest( | ||||
|                                 DELETE, "record-categories/{recordCategoryId}", recordCategoryId)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getRecordCategory(String, String)} | ||||
|      */ | ||||
|     public RecordCategory getRecordCategory(String recordCategoryId) | ||||
|     { | ||||
|     /** see {@link #getRecordCategory(String, String)} */ | ||||
|     public RecordCategory getRecordCategory(String recordCategoryId) { | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         return getRecordCategory(recordCategoryId, EMPTY); | ||||
| @@ -102,30 +95,31 @@ public class RecordCategoryAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link RecordCategory} for the given {@code recordCategoryId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordCategoryId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code recordCategoryId}</li> | ||||
|      *  <li>{@code recordCategoryId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordCategoryId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code recordCategoryId} | ||||
|      *       <li>{@code recordCategoryId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordCategory getRecordCategory(String recordCategoryId, String parameters) | ||||
|     { | ||||
|     public RecordCategory getRecordCategory(String recordCategoryId, String parameters) { | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RecordCategory.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "record-categories/{recordCategoryId}?{parameters}", | ||||
|                 recordCategoryId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RecordCategory.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "record-categories/{recordCategoryId}?{parameters}", | ||||
|                                 recordCategoryId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #updateRecordCategory(RecordCategory, String, String) | ||||
|      */ | ||||
|     public RecordCategory updateRecordCategory(RecordCategory recordCategoryModel, String recordCategoryId) | ||||
|     { | ||||
|     public RecordCategory updateRecordCategory( | ||||
|             RecordCategory recordCategoryModel, String recordCategoryId) { | ||||
|         mandatoryObject("recordCategoryModel", recordCategoryModel); | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
| @@ -140,34 +134,35 @@ public class RecordCategoryAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @param returns The updated {@link RecordCategory} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>the update request is invalid or {@code recordCategoryId} is not a valid format or {@code recordCategoryModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to update {@code recordCategoryId}</li> | ||||
|      *  <li>{@code recordCategoryId} does not exist</li> | ||||
|      *  <li>the updated name clashes with an existing record category in the current parent category</li> | ||||
|      *  <li>model integrity exception, including file name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code recordCategoryId} is not a valid format or | ||||
|      *           {@code recordCategoryModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code recordCategoryId} | ||||
|      *       <li>{@code recordCategoryId} does not exist | ||||
|      *       <li>the updated name clashes with an existing record category in the current parent | ||||
|      *           category | ||||
|      *       <li>model integrity exception, including file name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordCategory updateRecordCategory(RecordCategory recordCategoryModel, String recordCategoryId, String parameters) | ||||
|     { | ||||
|     public RecordCategory updateRecordCategory( | ||||
|             RecordCategory recordCategoryModel, String recordCategoryId, String parameters) { | ||||
|         mandatoryObject("recordCategoryModel", recordCategoryModel); | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RecordCategory.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(recordCategoryModel), | ||||
|                 "record-categories/{recordCategoryId}?{parameters}", | ||||
|                 recordCategoryId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RecordCategory.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(recordCategoryModel), | ||||
|                                 "record-categories/{recordCategoryId}?{parameters}", | ||||
|                                 recordCategoryId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getRecordCategoryChildren(String, String)} | ||||
|      */ | ||||
|     public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId) | ||||
|     { | ||||
|     /** see {@link #getRecordCategoryChildren(String, String)} */ | ||||
|     public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId) { | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         return getRecordCategoryChildren(recordCategoryId, EMPTY); | ||||
| @@ -180,29 +175,29 @@ public class RecordCategoryAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link RecordCategoryChildCollection} for the given {@code recordCategoryId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code recordCategoryId}</li> | ||||
|      *  <li>{@code recordCategoryId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code recordCategoryId} | ||||
|      *       <li>{@code recordCategoryId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId, String parameters) | ||||
|     { | ||||
|     public RecordCategoryChildCollection getRecordCategoryChildren( | ||||
|             String recordCategoryId, String parameters) { | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(RecordCategoryChildCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "record-categories/{recordCategoryId}/children?{parameters}", | ||||
|             recordCategoryId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         RecordCategoryChildCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "record-categories/{recordCategoryId}/children?{parameters}", | ||||
|                                 recordCategoryId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #createRecordCategoryChild(RecordCategoryChild, String, String)} | ||||
|      */ | ||||
|     public RecordCategoryChild createRecordCategoryChild(RecordCategoryChild recordCategoryChildModel, String recordCategoryId) | ||||
|     { | ||||
|     /** see {@link #createRecordCategoryChild(RecordCategoryChild, String, String)} */ | ||||
|     public RecordCategoryChild createRecordCategoryChild( | ||||
|             RecordCategoryChild recordCategoryChildModel, String recordCategoryId) { | ||||
|         mandatoryObject("recordCategoryChildModel", recordCategoryChildModel); | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
| @@ -217,26 +212,31 @@ public class RecordCategoryAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The created {@link RecordCategoryChild} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordCategoryId} is not a valid format or {@code recordCategoryChildModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to add children to {@code recordCategoryId}</li> | ||||
|      *  <li>{@code recordCategoryId} does not exist</li> | ||||
|      *  <li>new name clashes with an existing node in the current parent container</li> | ||||
|      *  <li>model integrity exception, including node name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordCategoryId} is not a valid format or {@code recordCategoryChildModel} | ||||
|      *           is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to add children to {@code recordCategoryId} | ||||
|      *       <li>{@code recordCategoryId} does not exist | ||||
|      *       <li>new name clashes with an existing node in the current parent container | ||||
|      *       <li>model integrity exception, including node name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordCategoryChild createRecordCategoryChild(RecordCategoryChild recordCategoryChildModel, String recordCategoryId, String parameters) | ||||
|     { | ||||
|     public RecordCategoryChild createRecordCategoryChild( | ||||
|             RecordCategoryChild recordCategoryChildModel, | ||||
|             String recordCategoryId, | ||||
|             String parameters) { | ||||
|         mandatoryObject("filePlanComponentProperties", recordCategoryChildModel); | ||||
|         mandatoryString("recordCategoryId", recordCategoryId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RecordCategoryChild.class, requestWithBody( | ||||
|                 POST, | ||||
|                 toJson(recordCategoryChildModel), | ||||
|                 "record-categories/{recordCategoryId}/children?{parameters}", | ||||
|                 recordCategoryId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RecordCategoryChild.class, | ||||
|                         requestWithBody( | ||||
|                                 POST, | ||||
|                                 toJson(recordCategoryChildModel), | ||||
|                                 "record-categories/{recordCategoryId}/children?{parameters}", | ||||
|                                 recordCategoryId, | ||||
|                                 parameters)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -39,12 +39,9 @@ import static org.springframework.http.HttpMethod.POST; | ||||
| import static org.springframework.http.HttpMethod.PUT; | ||||
| import static org.testng.Assert.fail; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| import com.fasterxml.jackson.databind.JsonNode; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
|  | ||||
| import io.restassured.builder.RequestSpecBuilder; | ||||
| import io.restassured.http.ContentType; | ||||
|  | ||||
| @@ -55,21 +52,23 @@ import org.alfresco.rest.rm.community.model.recordfolder.RecordFolderCollection; | ||||
| import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
| import org.alfresco.rest.rm.community.util.FilePlanComponentMixIn; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| /** | ||||
|  * Record folder REST API Wrapper | ||||
|  * | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RecordFolderAPI extends RMModelRequest | ||||
| { | ||||
| public class RecordFolderAPI extends RMModelRequest { | ||||
|     /** | ||||
|      * Constructor. | ||||
|      * | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public RecordFolderAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
|     public RecordFolderAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
| @@ -78,30 +77,24 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|      * | ||||
|      * @param recordFolderId The identifier of a record folder | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordFolderId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to delete {@code recordFolderId}</li> | ||||
|      *  <li>{@code recordFolderId} does not exist</li> | ||||
|      *  <li>{@code recordFolderId} is locked and cannot be deleted</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordFolderId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to delete {@code recordFolderId} | ||||
|      *       <li>{@code recordFolderId} does not exist | ||||
|      *       <li>{@code recordFolderId} is locked and cannot be deleted | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public void deleteRecordFolder(String recordFolderId) | ||||
|     { | ||||
|     public void deleteRecordFolder(String recordFolderId) { | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest( | ||||
|                 DELETE, | ||||
|                 "record-folders/{recordFolderId}", | ||||
|                 recordFolderId | ||||
|         )); | ||||
|         getRmRestWrapper() | ||||
|                 .processEmptyModel( | ||||
|                         simpleRequest(DELETE, "record-folders/{recordFolderId}", recordFolderId)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getRecordFolder(String, String)} | ||||
|      */ | ||||
|     public RecordFolder getRecordFolder(String recordFolderId) | ||||
|     { | ||||
|     /** see {@link #getRecordFolder(String, String)} */ | ||||
|     public RecordFolder getRecordFolder(String recordFolderId) { | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         return getRecordFolder(recordFolderId, EMPTY); | ||||
| @@ -114,30 +107,30 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link RecordFolder} for the given {@code recordFolderId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordFolderId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code recordFolderId}</li> | ||||
|      *  <li>{@code recordFolderId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordFolderId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code recordFolderId} | ||||
|      *       <li>{@code recordFolderId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordFolder getRecordFolder(String recordFolderId, String parameters) | ||||
|     { | ||||
|     public RecordFolder getRecordFolder(String recordFolderId, String parameters) { | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RecordFolder.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "record-folders/{recordFolderId}?{parameters}", | ||||
|                 recordFolderId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RecordFolder.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "record-folders/{recordFolderId}?{parameters}", | ||||
|                                 recordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #updateRecordFolder(RecordFolder, String, String) | ||||
|      */ | ||||
|     public RecordFolder updateRecordFolder(RecordFolder recordFolderModel, String recordFolderId) | ||||
|     { | ||||
|     public RecordFolder updateRecordFolder(RecordFolder recordFolderModel, String recordFolderId) { | ||||
|         mandatoryObject("recordFolderModel", recordFolderModel); | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
| @@ -152,34 +145,35 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @param returns The updated {@link RecordFolder} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>the update request is invalid or {@code recordFolderId} is not a valid format or {@code recordFolderModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to update {@code recordFolderId}</li> | ||||
|      *  <li>{@code recordFolderId} does not exist</li> | ||||
|      *  <li>the updated name clashes with an existing record folder in the current parent category</li> | ||||
|      *  <li>model integrity exception, including file name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code recordFolderId} is not a valid format or | ||||
|      *           {@code recordFolderModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code recordFolderId} | ||||
|      *       <li>{@code recordFolderId} does not exist | ||||
|      *       <li>the updated name clashes with an existing record folder in the current parent | ||||
|      *           category | ||||
|      *       <li>model integrity exception, including file name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordFolder updateRecordFolder(RecordFolder recordFolderModel, String recordFolderId, String parameters) | ||||
|     { | ||||
|     public RecordFolder updateRecordFolder( | ||||
|             RecordFolder recordFolderModel, String recordFolderId, String parameters) { | ||||
|         mandatoryObject("recordFolderModel", recordFolderModel); | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(RecordFolder.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(recordFolderModel), | ||||
|                 "record-folders/{recordFolderId}?{parameters}", | ||||
|                 recordFolderId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         RecordFolder.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(recordFolderModel), | ||||
|                                 "record-folders/{recordFolderId}?{parameters}", | ||||
|                                 recordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getRecordFolderChildren(String, String)} | ||||
|      */ | ||||
|     public RecordFolderCollection getRecordFolderChildren(String recordFolderId) | ||||
|     { | ||||
|     /** see {@link #getRecordFolderChildren(String, String)} */ | ||||
|     public RecordFolderCollection getRecordFolderChildren(String recordFolderId) { | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         return getRecordFolderChildren(recordFolderId, EMPTY); | ||||
| @@ -192,29 +186,28 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link RecordFolderCollection} for the given {@code recordFolderId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code recordFolderId}</li> | ||||
|      *  <li>{@code recordFolderId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code recordFolderId} | ||||
|      *       <li>{@code recordFolderId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public RecordFolderCollection getRecordFolderChildren(String recordFolderId, String parameters) | ||||
|     { | ||||
|     public RecordFolderCollection getRecordFolderChildren( | ||||
|             String recordFolderId, String parameters) { | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(RecordFolderCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "record-folders/{recordFolderId}/records?{parameters}", | ||||
|             recordFolderId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         RecordFolderCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "record-folders/{recordFolderId}/records?{parameters}", | ||||
|                                 recordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #createRecord(Record, String, String)} | ||||
|      */ | ||||
|     public Record createRecord(Record recordModel, String recordFolderId) | ||||
|     { | ||||
|     /** see {@link #createRecord(Record, String, String)} */ | ||||
|     public Record createRecord(Record recordModel, String recordFolderId) { | ||||
|         mandatoryObject("recordModel", recordModel); | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
| @@ -225,19 +218,19 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|      * Create a record from file resource | ||||
|      * | ||||
|      * @param recordModel {@link Record} for electronic record to be created | ||||
|      * @param recordContent {@link File} pointing to the content of the electronic record to be created | ||||
|      * @param recordContent {@link File} pointing to the content of the electronic record to be | ||||
|      *     created | ||||
|      * @param recordFolderId The identifier of a record folder | ||||
|      * @return newly created {@link Record} | ||||
|      * @throws RuntimeException for invalid recordModel JSON strings | ||||
|      */ | ||||
|     public Record createRecord(Record recordModel, String recordFolderId, File recordContent) throws RuntimeException | ||||
|     { | ||||
|     public Record createRecord(Record recordModel, String recordFolderId, File recordContent) | ||||
|             throws RuntimeException { | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|         mandatoryObject("recordContent", recordContent); | ||||
|         mandatoryObject("recordModel", recordModel); | ||||
|  | ||||
|         if (!recordModel.getNodeType().equals(CONTENT_TYPE)) | ||||
|         { | ||||
|         if (!recordModel.getNodeType().equals(CONTENT_TYPE)) { | ||||
|             fail("Only electronic records are supported"); | ||||
|         } | ||||
|  | ||||
| @@ -247,18 +240,20 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|          */ | ||||
|         RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec(); | ||||
|         JsonNode root; | ||||
|         try | ||||
|         { | ||||
|             root = new ObjectMapper().readTree(toJson(recordModel, Record.class, FilePlanComponentMixIn.class)); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         try { | ||||
|             root = | ||||
|                     new ObjectMapper() | ||||
|                             .readTree( | ||||
|                                     toJson( | ||||
|                                             recordModel, | ||||
|                                             Record.class, | ||||
|                                             FilePlanComponentMixIn.class)); | ||||
|         } catch (IOException e) { | ||||
|             throw new RuntimeException("Failed to convert model to JSON.", e); | ||||
|         } | ||||
|         // add request fields | ||||
|         Iterator<String> fieldNames = root.fieldNames(); | ||||
|         while (fieldNames.hasNext()) | ||||
|         { | ||||
|         while (fieldNames.hasNext()) { | ||||
|             String fieldName = fieldNames.next(); | ||||
|             builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name()); | ||||
|         } | ||||
| @@ -284,17 +279,18 @@ public class RecordFolderAPI extends RMModelRequest | ||||
|      *  <li>model integrity exception, including node name with invalid characters</li> | ||||
|      * </ul> | ||||
|      */ | ||||
|     public Record createRecord(Record recordModel, String recordFolderId, String parameters) | ||||
|     { | ||||
|     public Record createRecord(Record recordModel, String recordFolderId, String parameters) { | ||||
|         mandatoryObject("recordModel", recordModel); | ||||
|         mandatoryString("recordFolderId", recordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Record.class, requestWithBody( | ||||
|                 POST, | ||||
|                 toJson(recordModel), | ||||
|                 "record-folders/{recordFolderId}/records?{parameters}", | ||||
|                 recordFolderId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Record.class, | ||||
|                         requestWithBody( | ||||
|                                 POST, | ||||
|                                 toJson(recordModel), | ||||
|                                 "record-folders/{recordFolderId}/records?{parameters}", | ||||
|                                 recordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -37,27 +37,22 @@ import static org.springframework.http.HttpMethod.GET; | ||||
| import static org.springframework.http.HttpMethod.POST; | ||||
| import static org.springframework.http.HttpMethod.PUT; | ||||
|  | ||||
| import io.restassured.response.ResponseBody; | ||||
|  | ||||
| import org.alfresco.rest.core.RMRestWrapper; | ||||
| import org.alfresco.rest.rm.community.model.record.Record; | ||||
| import org.alfresco.rest.rm.community.model.record.RecordBodyFile; | ||||
| import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  | ||||
| import io.restassured.response.ResponseBody; | ||||
|  | ||||
| /** | ||||
|  * Records REST API Wrapper | ||||
|  * | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class RecordsAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public RecordsAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class RecordsAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public RecordsAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
| @@ -67,42 +62,40 @@ public class RecordsAPI extends RMModelRequest | ||||
|      * @param recordId The id of the electronic record | ||||
|      * @return {@link ResponseBody} representing content for the given record id | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      * <li>{@code recordId} has no content</li> | ||||
|      * <li> {@code recordId} is not a valid format, or is not a record</li> | ||||
|      * <li>authentication fails</li> | ||||
|      * <li>{@code recordId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordId} has no content | ||||
|      *       <li>{@code recordId} is not a valid format, or is not a record | ||||
|      *       <li>authentication fails | ||||
|      *       <li>{@code recordId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public ResponseBody<?> getRecordContent(String recordId) | ||||
|     { | ||||
|     public ResponseBody<?> getRecordContent(String recordId) { | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return getRmRestWrapper() | ||||
|             .processHtmlResponse(simpleRequest(GET,"records/{recordId}/content", recordId)) | ||||
|             .getBody(); | ||||
|  | ||||
|                 .processHtmlResponse(simpleRequest(GET, "records/{recordId}/content", recordId)) | ||||
|                 .getBody(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * File the record recordId into file plan structure based on the location sent via the request body | ||||
|      * File the record recordId into file plan structure based on the location sent via the request | ||||
|      * body | ||||
|      * | ||||
|      * @param recordBodyFile The properties where to file the record | ||||
|      * @param recordId       The id of the record to file | ||||
|      * @param recordId The id of the record to file | ||||
|      * @return The {@link Record} with the given properties | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is not a record</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to file to {@code fileplanComponentId}</li> | ||||
|      *  <li>{@code recordId} does not exist</li> | ||||
|      *  <li>targetParentId from recordBodyFile does not exist</li> | ||||
|      *  <li>model integrity exception: the action breaks system's integrity restrictions</li> | ||||
|      * </ul> | ||||
|      * | ||||
|      *     <ul> | ||||
|      *       <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is | ||||
|      *           not a record | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to file to {@code fileplanComponentId} | ||||
|      *       <li>{@code recordId} does not exist | ||||
|      *       <li>targetParentId from recordBodyFile does not exist | ||||
|      *       <li>model integrity exception: the action breaks system's integrity restrictions | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public Record fileRecord(RecordBodyFile recordBodyFile, String recordId) | ||||
|     { | ||||
|     public Record fileRecord(RecordBodyFile recordBodyFile, String recordId) { | ||||
|         mandatoryObject("recordBodyFile", recordBodyFile); | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
| @@ -110,41 +103,42 @@ public class RecordsAPI extends RMModelRequest | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * File the record recordId into file plan structure based on the location sent via the request body | ||||
|      * File the record recordId into file plan structure based on the location sent via the request | ||||
|      * body | ||||
|      * | ||||
|      * @param recordBodyFile The properties where to file the record | ||||
|      * @param recordId       The id of the record to file | ||||
|      * @param recordId The id of the record to file | ||||
|      * @return The {@link Record} with the given properties | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is not a record</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to file to {@code fileplanComponentId}</li> | ||||
|      *  <li>{@code recordId} does not exist</li> | ||||
|      *  <li>targetParentId from recordBodyFile does not exist</li> | ||||
|      *  <li>model integrity exception: the action breaks system's integrity restrictions</li> | ||||
|      * </ul> | ||||
|      * | ||||
|      *     <ul> | ||||
|      *       <li>Invalid parameter: {@code recordBodyFile} is not a valid format,{@code recordId} is | ||||
|      *           not a record | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to file to {@code fileplanComponentId} | ||||
|      *       <li>{@code recordId} does not exist | ||||
|      *       <li>targetParentId from recordBodyFile does not exist | ||||
|      *       <li>model integrity exception: the action breaks system's integrity restrictions | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public Record fileRecord(RecordBodyFile recordBodyFile, String recordId, String parameters) | ||||
|     { | ||||
|     public Record fileRecord(RecordBodyFile recordBodyFile, String recordId, String parameters) { | ||||
|         mandatoryObject("requestBodyFile", recordBodyFile); | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Record.class, requestWithBody( | ||||
|             POST, | ||||
|             toJson(recordBodyFile), | ||||
|             "/records/{recordId}/file?{parameters}", | ||||
|             recordId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Record.class, | ||||
|                         requestWithBody( | ||||
|                                 POST, | ||||
|                                 toJson(recordBodyFile), | ||||
|                                 "/records/{recordId}/file?{parameters}", | ||||
|                                 recordId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #completeRecord(String, String) | ||||
|      */ | ||||
|     public Record completeRecord(String recordId) | ||||
|     { | ||||
|     public Record completeRecord(String recordId) { | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return completeRecord(recordId, EMPTY); | ||||
| @@ -156,55 +150,48 @@ public class RecordsAPI extends RMModelRequest | ||||
|      * @param recordId The id of the record to complete | ||||
|      * @return The completed {@link Record} with the given properties | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      *                   <ul> | ||||
|      *                   <li>Invalid parameter: {@code recordId} is not a record</li> | ||||
|      *                   <li>authentication fails</li> | ||||
|      *                   <li>current user does not have permission to complete {@code recordId}</li> | ||||
|      *                   <li>{@code recordId} does not exist or is frozen</li> | ||||
|      *                   <li>model integrity exception: the record is already completed</li> | ||||
|      *                   <li>model integrity exception: the record has missing meta-data</li> | ||||
|      *                   </ul> | ||||
|      *     <ul> | ||||
|      *       <li>Invalid parameter: {@code recordId} is not a record | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to complete {@code recordId} | ||||
|      *       <li>{@code recordId} does not exist or is frozen | ||||
|      *       <li>model integrity exception: the record is already completed | ||||
|      *       <li>model integrity exception: the record has missing meta-data | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public Record completeRecord(String recordId, String parameters) | ||||
|     { | ||||
|     public Record completeRecord(String recordId, String parameters) { | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Record.class, simpleRequest( | ||||
|             POST, | ||||
|             "/records/{recordId}/complete?{parameters}", | ||||
|             recordId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Record.class, | ||||
|                         simpleRequest( | ||||
|                                 POST, | ||||
|                                 "/records/{recordId}/complete?{parameters}", | ||||
|                                 recordId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|     /** | ||||
|      * Deletes a record. | ||||
|      * | ||||
|      * @param recordId The identifier of a record | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to delete {@code recordId}</li> | ||||
|      *  <li>{@code recordId} does not exist</li> | ||||
|      *  <li>{@code recordId} is locked and cannot be deleted</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to delete {@code recordId} | ||||
|      *       <li>{@code recordId} does not exist | ||||
|      *       <li>{@code recordId} is locked and cannot be deleted | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public void deleteRecord(String recordId) | ||||
|     { | ||||
|     public void deleteRecord(String recordId) { | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest( | ||||
|                 DELETE, | ||||
|                 "records/{recordId}", | ||||
|                 recordId | ||||
|         )); | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest(DELETE, "records/{recordId}", recordId)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getRecord(String, String)} | ||||
|      */ | ||||
|     public Record getRecord(String recordId) | ||||
|     { | ||||
|     /** see {@link #getRecord(String, String)} */ | ||||
|     public Record getRecord(String recordId) { | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return getRecord(recordId, EMPTY); | ||||
| @@ -217,30 +204,27 @@ public class RecordsAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link Record} for the given {@code recordId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code recordId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code recordId}</li> | ||||
|      *  <li>{@code recordId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code recordId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code recordId} | ||||
|      *       <li>{@code recordId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public Record getRecord(String recordId, String parameters) | ||||
|     { | ||||
|     public Record getRecord(String recordId, String parameters) { | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Record.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "records/{recordId}?{parameters}", | ||||
|                 recordId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Record.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, "records/{recordId}?{parameters}", recordId, parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #updateRecord(Record, String, String) | ||||
|      */ | ||||
|     public Record updateRecord(Record recordModel, String recordId) | ||||
|     { | ||||
|     public Record updateRecord(Record recordModel, String recordId) { | ||||
|         mandatoryObject("recordModel", recordModel); | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
| @@ -255,26 +239,28 @@ public class RecordsAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The updated {@link Record} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>the update request is invalid or {@code recordId} is not a valid format or {@code recordModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to update {@code recordId}</li> | ||||
|      *  <li>{@code recordId} does not exist</li> | ||||
|      *  <li>the updated name clashes with an existing record in the current parent folder</li> | ||||
|      *  <li>model integrity exception, including file name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code recordId} is not a valid format or {@code | ||||
|      *           recordModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code recordId} | ||||
|      *       <li>{@code recordId} does not exist | ||||
|      *       <li>the updated name clashes with an existing record in the current parent folder | ||||
|      *       <li>model integrity exception, including file name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public Record updateRecord(Record recordModel, String recordId, String parameters) | ||||
|     { | ||||
|     public Record updateRecord(Record recordModel, String recordId, String parameters) { | ||||
|         mandatoryObject("recordModel", recordModel); | ||||
|         mandatoryString("recordId", recordId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Record.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(recordModel), | ||||
|                 "records/{recordId}?{parameters}", | ||||
|                 recordId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Record.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(recordModel), | ||||
|                                 "records/{recordId}?{parameters}", | ||||
|                                 recordId, | ||||
|                                 parameters)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -43,21 +43,14 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  * @author Silviu Dinuta | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class TransferAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public TransferAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class TransferAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public TransferAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getTransfer(String, String)} | ||||
|      */ | ||||
|     public Transfer getTransfer(String transferId) | ||||
|     { | ||||
|     /** see {@link #getTransfer(String, String)} */ | ||||
|     public Transfer getTransfer(String transferId) { | ||||
|         mandatoryString("transferId", transferId); | ||||
|  | ||||
|         return getTransfer(transferId, EMPTY); | ||||
| @@ -70,29 +63,27 @@ public class TransferAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link Transfer} for the given {@code transferId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code transferId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code transferId}</li> | ||||
|      *  <li>{@code transferId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code transferId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code transferId} | ||||
|      *       <li>{@code transferId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public Transfer getTransfer(String transferId, String parameters) | ||||
|     { | ||||
|     public Transfer getTransfer(String transferId, String parameters) { | ||||
|         mandatoryString("transferId", transferId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(Transfer.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "/transfers/{transferId}?{parameters}", | ||||
|                 transferId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         Transfer.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "/transfers/{transferId}?{parameters}", | ||||
|                                 transferId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|     /** | ||||
|      * see {@link #getTransfersChildren(String, String)} | ||||
|      */ | ||||
|     public TransferChildCollection getTransfersChildren(String transferId) | ||||
|     { | ||||
|     /** see {@link #getTransfersChildren(String, String)} */ | ||||
|     public TransferChildCollection getTransfersChildren(String transferId) { | ||||
|         mandatoryString("transferId", transferId); | ||||
|  | ||||
|         return getTransfersChildren(transferId, EMPTY); | ||||
| @@ -105,21 +96,22 @@ public class TransferAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link TransferChildCollection} for the given {@code transferId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code transferId}</li> | ||||
|      *  <li>{@code filePlanId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code transferId} | ||||
|      *       <li>{@code filePlanId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public TransferChildCollection getTransfersChildren(String transferId, String parameters) | ||||
|     { | ||||
|     public TransferChildCollection getTransfersChildren(String transferId, String parameters) { | ||||
|         mandatoryString("transferId", transferId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(TransferChildCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "transfers/{filePlanId}/children?{parameters}", | ||||
|             transferId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         TransferChildCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "transfers/{filePlanId}/children?{parameters}", | ||||
|                                 transferId, | ||||
|                                 parameters)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -47,21 +47,14 @@ import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
|  * @author Silviu Dinuta | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class TransferContainerAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public TransferContainerAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class TransferContainerAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public TransferContainerAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getTransferContainer(String, String)} | ||||
|      */ | ||||
|     public TransferContainer getTransferContainer(String transferContainerId) | ||||
|     { | ||||
|     /** see {@link #getTransferContainer(String, String)} */ | ||||
|     public TransferContainer getTransferContainer(String transferContainerId) { | ||||
|         mandatoryString("transferContainerId", transferContainerId); | ||||
|  | ||||
|         return getTransferContainer(transferContainerId, EMPTY); | ||||
| @@ -74,30 +67,31 @@ public class TransferContainerAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link TransferContainer} for the given {@code transferContainerId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code transferContainerId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code transferContainerId}</li> | ||||
|      *  <li>{@code transferContainerId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code transferContainerId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code transferContainerId} | ||||
|      *       <li>{@code transferContainerId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public TransferContainer getTransferContainer(String transferContainerId, String parameters) | ||||
|     { | ||||
|     public TransferContainer getTransferContainer(String transferContainerId, String parameters) { | ||||
|         mandatoryString("transferContainerId", transferContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(TransferContainer.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "/transfer-containers/{transferContainerId}?{parameters}", | ||||
|                 transferContainerId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         TransferContainer.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "/transfer-containers/{transferContainerId}?{parameters}", | ||||
|                                 transferContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #updateTransferContainer(TransferContainer, String, String) | ||||
|      */ | ||||
|     public TransferContainer updateTransferContainer(TransferContainer transferContainerModel, String transferContainerId) | ||||
|     { | ||||
|     public TransferContainer updateTransferContainer( | ||||
|             TransferContainer transferContainerModel, String transferContainerId) { | ||||
|         mandatoryObject("transferContainerModel", transferContainerModel); | ||||
|         mandatoryString("transferContainerId", transferContainerId); | ||||
|  | ||||
| @@ -112,34 +106,38 @@ public class TransferContainerAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @param returns The updated {@link TransferContainer} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>the update request is invalid or {@code transferContainerId} is not a valid format or {@code transferContainerModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to update {@code transferContainerId}</li> | ||||
|      *  <li>{@code transferContainerId} does not exist</li> | ||||
|      *  <li>the updated name clashes with an existing transfer container in the current file plan</li> | ||||
|      *  <li>model integrity exception, including transfer container name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code transferContainerId} is not a valid format | ||||
|      *           or {@code transferContainerModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code transferContainerId} | ||||
|      *       <li>{@code transferContainerId} does not exist | ||||
|      *       <li>the updated name clashes with an existing transfer container in the current file | ||||
|      *           plan | ||||
|      *       <li>model integrity exception, including transfer container name with invalid | ||||
|      *           characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public TransferContainer updateTransferContainer(TransferContainer transferContainerModel, String transferContainerId, String parameters) | ||||
|     { | ||||
|     public TransferContainer updateTransferContainer( | ||||
|             TransferContainer transferContainerModel, | ||||
|             String transferContainerId, | ||||
|             String parameters) { | ||||
|         mandatoryObject("transferContainerModel", transferContainerModel); | ||||
|         mandatoryString("transferContainerId", transferContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(TransferContainer.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(transferContainerModel), | ||||
|                 "transfer-containers/{transferContainerId}?{parameters}", | ||||
|                 transferContainerId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         TransferContainer.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(transferContainerModel), | ||||
|                                 "transfer-containers/{transferContainerId}?{parameters}", | ||||
|                                 transferContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getTransfers(String, String)} | ||||
|      */ | ||||
|     public TransferCollection getTransfers(String transferContainerId) | ||||
|     { | ||||
|     /** see {@link #getTransfers(String, String)} */ | ||||
|     public TransferCollection getTransfers(String transferContainerId) { | ||||
|         mandatoryString("transferContainerId", transferContainerId); | ||||
|  | ||||
|         return getTransfers(transferContainerId, EMPTY); | ||||
| @@ -152,21 +150,22 @@ public class TransferContainerAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link TransferCollection} for the given {@code transferContainerId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code transferContainerId}</li> | ||||
|      *  <li>{@code filePlanId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code transferContainerId} | ||||
|      *       <li>{@code filePlanId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public TransferCollection getTransfers(String transferContainerId, String parameters) | ||||
|     { | ||||
|     public TransferCollection getTransfers(String transferContainerId, String parameters) { | ||||
|         mandatoryString("transferContainerId", transferContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(TransferCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "transfer-containers/{filePlanId}/transfers?{parameters}", | ||||
|             transferContainerId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         TransferCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "transfer-containers/{filePlanId}/transfers?{parameters}", | ||||
|                                 transferContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -38,10 +38,6 @@ import static org.springframework.http.HttpMethod.POST; | ||||
| import static org.springframework.http.HttpMethod.PUT; | ||||
| import static org.testng.Assert.fail; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| import com.fasterxml.jackson.databind.JsonNode; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
|  | ||||
| @@ -55,6 +51,10 @@ import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChi | ||||
| import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
| import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| /** | ||||
|  * Unfiled Container REST API Wrapper | ||||
|  * | ||||
| @@ -62,21 +62,14 @@ import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin; | ||||
|  * @author Ana Bozianu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class UnfiledContainerAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public UnfiledContainerAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class UnfiledContainerAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public UnfiledContainerAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getUnfiledContainer(String, String)} | ||||
|      */ | ||||
|     public UnfiledContainer getUnfiledContainer(String unfiledContainerId) | ||||
|     { | ||||
|     /** see {@link #getUnfiledContainer(String, String)} */ | ||||
|     public UnfiledContainer getUnfiledContainer(String unfiledContainerId) { | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         return getUnfiledContainer(unfiledContainerId, EMPTY); | ||||
| @@ -89,30 +82,28 @@ public class UnfiledContainerAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link UnfiledContainer} for the given {@code unfiledContainerId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code unfiledContainerId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code unfiledContainerId}</li> | ||||
|      *  <li>{@code unfiledContainerId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code unfiledContainerId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code unfiledContainerId} | ||||
|      *       <li>{@code unfiledContainerId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledContainer getUnfiledContainer(String unfiledContainerId, String parameters) | ||||
|     { | ||||
|     public UnfiledContainer getUnfiledContainer(String unfiledContainerId, String parameters) { | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(UnfiledContainer.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "unfiled-containers/{unfiledContainerId}?{parameters}", | ||||
|                 unfiledContainerId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         UnfiledContainer.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "unfiled-containers/{unfiledContainerId}?{parameters}", | ||||
|                                 unfiledContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getUnfiledContainerChildren(String)} (String, String)} | ||||
|      */ | ||||
|     public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId) | ||||
|     { | ||||
|     /** see {@link #getUnfiledContainerChildren(String)} (String, String)} */ | ||||
|     public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId) { | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         return getUnfiledContainerChildren(unfiledContainerId, EMPTY); | ||||
| @@ -125,29 +116,29 @@ public class UnfiledContainerAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link UnfiledContainerChildCollection} for the given {@code unfiledContainerId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code unfiledContainerId}</li> | ||||
|      *  <li>{@code unfiledContainerId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code unfiledContainerId} | ||||
|      *       <li>{@code unfiledContainerId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId, String parameters) | ||||
|     { | ||||
|     public UnfiledContainerChildCollection getUnfiledContainerChildren( | ||||
|             String unfiledContainerId, String parameters) { | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(UnfiledContainerChildCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "unfiled-containers/{unfiledContainerId}/children?{parameters}", | ||||
|             unfiledContainerId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         UnfiledContainerChildCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "unfiled-containers/{unfiledContainerId}/children?{parameters}", | ||||
|                                 unfiledContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #createUnfiledContainerChild(UnfiledContainerChild, String, String)} | ||||
|      */ | ||||
|     public UnfiledContainerChild createUnfiledContainerChild(UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId) | ||||
|     { | ||||
|     /** see {@link #createUnfiledContainerChild(UnfiledContainerChild, String, String)} */ | ||||
|     public UnfiledContainerChild createUnfiledContainerChild( | ||||
|             UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId) { | ||||
|         mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel); | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
| @@ -157,51 +148,60 @@ public class UnfiledContainerAPI extends RMModelRequest | ||||
|     /** | ||||
|      * Creates an unfiled container child. Can be a record or an unfiled record folder. | ||||
|      * | ||||
|      * @param unfiledContainerChildModel The unfiled container child model which holds the information | ||||
|      * @param unfiledContainerChildModel The unfiled container child model which holds the | ||||
|      *     information | ||||
|      * @param unfiledContainerId The identifier of an unfiled container | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The created {@link UnfiledContainerChild} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code unfiledContainerId} is not a valid format or {@code unfiledContainerChildModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to add children to {@code unfiledContainerId}</li> | ||||
|      *  <li>{@code unfiledContainerId} does not exist</li> | ||||
|      *  <li>new name clashes with an existing node in the current parent container</li> | ||||
|      *  <li>model integrity exception, including node name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code unfiledContainerId} is not a valid format or {@code | ||||
|      *           unfiledContainerChildModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to add children to {@code unfiledContainerId} | ||||
|      *       <li>{@code unfiledContainerId} does not exist | ||||
|      *       <li>new name clashes with an existing node in the current parent container | ||||
|      *       <li>model integrity exception, including node name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledContainerChild createUnfiledContainerChild(UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId, String parameters) | ||||
|     { | ||||
|     public UnfiledContainerChild createUnfiledContainerChild( | ||||
|             UnfiledContainerChild unfiledContainerChildModel, | ||||
|             String unfiledContainerId, | ||||
|             String parameters) { | ||||
|         mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel); | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(UnfiledContainerChild.class, requestWithBody( | ||||
|                 POST, | ||||
|                 toJson(unfiledContainerChildModel), | ||||
|                 "unfiled-containers/{unfiledContainerId}/children?{parameters}", | ||||
|                 unfiledContainerId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         UnfiledContainerChild.class, | ||||
|                         requestWithBody( | ||||
|                                 POST, | ||||
|                                 toJson(unfiledContainerChildModel), | ||||
|                                 "unfiled-containers/{unfiledContainerId}/children?{parameters}", | ||||
|                                 unfiledContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create a record from file resource | ||||
|      * | ||||
|      * @param unfiledContainerChildModel {@link UnfiledContainerChild} for electronic record to be created | ||||
|      * @param unfiledContainerChildContent {@link File} pointing to the content of the electronic record to be created | ||||
|      * @param unfiledContainerChildModel {@link UnfiledContainerChild} for electronic record to be | ||||
|      *     created | ||||
|      * @param unfiledContainerChildContent {@link File} pointing to the content of the electronic | ||||
|      *     record to be created | ||||
|      * @param unfiledContainerId The identifier of a unfiled container | ||||
|      * @return newly created {@link UnfiledContainerChild} | ||||
|      * @throws RuntimeException for invalid recordModel JSON strings | ||||
|      */ | ||||
|     public UnfiledContainerChild uploadRecord(UnfiledContainerChild unfiledContainerChildModel, String unfiledContainerId, File unfiledContainerChildContent) | ||||
|     { | ||||
|     public UnfiledContainerChild uploadRecord( | ||||
|             UnfiledContainerChild unfiledContainerChildModel, | ||||
|             String unfiledContainerId, | ||||
|             File unfiledContainerChildContent) { | ||||
|         mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel); | ||||
|         mandatoryObject("unfiledContainerChildContent", unfiledContainerChildContent); | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         if (!unfiledContainerChildModel.getNodeType().equals(CONTENT_TYPE)) | ||||
|         { | ||||
|         if (!unfiledContainerChildModel.getNodeType().equals(CONTENT_TYPE)) { | ||||
|             fail("Only electronic records are supported"); | ||||
|         } | ||||
|  | ||||
| @@ -211,18 +211,20 @@ public class UnfiledContainerAPI extends RMModelRequest | ||||
|          */ | ||||
|         RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec(); | ||||
|         JsonNode root; | ||||
|         try | ||||
|         { | ||||
|             root = new ObjectMapper().readTree(toJson(unfiledContainerChildModel, UnfiledContainerChild.class, UnfiledContainerChildMixin.class)); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         try { | ||||
|             root = | ||||
|                     new ObjectMapper() | ||||
|                             .readTree( | ||||
|                                     toJson( | ||||
|                                             unfiledContainerChildModel, | ||||
|                                             UnfiledContainerChild.class, | ||||
|                                             UnfiledContainerChildMixin.class)); | ||||
|         } catch (IOException e) { | ||||
|             throw new RuntimeException("Failed to convert model to JSON.", e); | ||||
|         } | ||||
|         // add request fields | ||||
|         Iterator<String> fieldNames = root.fieldNames(); | ||||
|         while (fieldNames.hasNext()) | ||||
|         { | ||||
|         while (fieldNames.hasNext()) { | ||||
|             String fieldName = fieldNames.next(); | ||||
|             builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name()); | ||||
|         } | ||||
| @@ -235,8 +237,8 @@ public class UnfiledContainerAPI extends RMModelRequest | ||||
|     /** | ||||
|      * see {@link #updateUnfiledContainer(UnfiledContainer, String, String) | ||||
|      */ | ||||
|     public UnfiledContainer updateUnfiledContainer(UnfiledContainer unfiledContainerModel, String unfiledContainerId) | ||||
|     { | ||||
|     public UnfiledContainer updateUnfiledContainer( | ||||
|             UnfiledContainer unfiledContainerModel, String unfiledContainerId) { | ||||
|         mandatoryObject("unfiledContainerModel", unfiledContainerModel); | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
| @@ -251,27 +253,30 @@ public class UnfiledContainerAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @param returns The updated {@link UnfiledContainer} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>the update request is invalid or {@code unfiledContainerId} is not a valid format or {@code unfiledContainerModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to update {@code unfiledContainerId}</li> | ||||
|      *  <li>{@code unfiledContainerId} does not exist</li> | ||||
|      *  <li>the updated name clashes with an existing root category of special container in the current fileplan</li> | ||||
|      *  <li>model integrity exception, including file name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code unfiledContainerId} is not a valid format | ||||
|      *           or {@code unfiledContainerModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code unfiledContainerId} | ||||
|      *       <li>{@code unfiledContainerId} does not exist | ||||
|      *       <li>the updated name clashes with an existing root category of special container in the | ||||
|      *           current fileplan | ||||
|      *       <li>model integrity exception, including file name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledContainer updateUnfiledContainer(UnfiledContainer unfiledContainerModel, String unfiledContainerId, String parameters) | ||||
|     { | ||||
|     public UnfiledContainer updateUnfiledContainer( | ||||
|             UnfiledContainer unfiledContainerModel, String unfiledContainerId, String parameters) { | ||||
|         mandatoryObject("unfiledContainerModel", unfiledContainerModel); | ||||
|         mandatoryString("unfiledContainerId", unfiledContainerId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(UnfiledContainer.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(unfiledContainerModel), | ||||
|                 "unfiled-containers/{unfiledContainerId}?{parameters}", | ||||
|                 unfiledContainerId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         UnfiledContainer.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(unfiledContainerModel), | ||||
|                                 "unfiled-containers/{unfiledContainerId}?{parameters}", | ||||
|                                 unfiledContainerId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -39,12 +39,9 @@ import static org.springframework.http.HttpMethod.POST; | ||||
| import static org.springframework.http.HttpMethod.PUT; | ||||
| import static org.testng.Assert.fail; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| import com.fasterxml.jackson.databind.JsonNode; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
|  | ||||
| import io.restassured.builder.RequestSpecBuilder; | ||||
| import io.restassured.http.ContentType; | ||||
|  | ||||
| @@ -55,27 +52,24 @@ import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledRecordFolder | ||||
| import org.alfresco.rest.rm.community.requests.RMModelRequest; | ||||
| import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| /** | ||||
|  * Unfiled Record Folders REST API Wrapper | ||||
|  * | ||||
|  * @author Ramona Popa | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
| { | ||||
|     /** | ||||
|      * @param rmRestWrapper RM REST Wrapper | ||||
|      */ | ||||
|     public UnfiledRecordFolderAPI(RMRestWrapper rmRestWrapper) | ||||
|     { | ||||
| public class UnfiledRecordFolderAPI extends RMModelRequest { | ||||
|     /** @param rmRestWrapper RM REST Wrapper */ | ||||
|     public UnfiledRecordFolderAPI(RMRestWrapper rmRestWrapper) { | ||||
|         super(rmRestWrapper); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getUnfiledRecordFolder(String, String)} | ||||
|      */ | ||||
|     public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId) | ||||
|     { | ||||
|     /** see {@link #getUnfiledRecordFolder(String, String)} */ | ||||
|     public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId) { | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return getUnfiledRecordFolder(unfiledRecordFolderId, EMPTY); | ||||
| @@ -88,30 +82,30 @@ public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link UnfiledRecordFolder} for the given {@code unfiledRecordFolderId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code unfiledRecordFolderId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code unfiledRecordFolderId}</li> | ||||
|      *  <li>{@code unfiledRecordFolderId} does not exist</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code unfiledRecordFolderId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code unfiledRecordFolderId} | ||||
|      *       <li>{@code unfiledRecordFolderId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId, String parameters) | ||||
|     { | ||||
|     public UnfiledRecordFolder getUnfiledRecordFolder( | ||||
|             String unfiledRecordFolderId, String parameters) { | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(UnfiledRecordFolder.class, simpleRequest( | ||||
|                 GET, | ||||
|                 "unfiled-record-folders/{unfiledRecordFolderId}?{parameters}", | ||||
|                 unfiledRecordFolderId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         UnfiledRecordFolder.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "unfiled-record-folders/{unfiledRecordFolderId}?{parameters}", | ||||
|                                 unfiledRecordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #getUnfiledRecordFolderChildren(String, String)} | ||||
|      */ | ||||
|     public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(String unfiledRecordFolderId) | ||||
|     { | ||||
|     /** see {@link #getUnfiledRecordFolderChildren(String, String)} */ | ||||
|     public UnfiledContainerChildCollection getUnfiledRecordFolderChildren( | ||||
|             String unfiledRecordFolderId) { | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return getUnfiledRecordFolderChildren(unfiledRecordFolderId, EMPTY); | ||||
| @@ -122,85 +116,97 @@ public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
|      * | ||||
|      * @param unfiledRecordFolderId The identifier of an unfiled records folder | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The {@link UnfiledRecordFolderChildCollection} for the given {@code unfiledRecordFolderId} | ||||
|      * @return The {@link UnfiledRecordFolderChildCollection} for the given {@code | ||||
|      *     unfiledRecordFolderId} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to read {@code unfiledRecordFolderId}</li> | ||||
|      *  <li>{@code unfiledRecordFolderId} does not exist</li> | ||||
|      *</ul> | ||||
|      *     <ul> | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to read {@code unfiledRecordFolderId} | ||||
|      *       <li>{@code unfiledRecordFolderId} does not exist | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(String unfiledRecordFolderId, String parameters) | ||||
|     { | ||||
|     public UnfiledContainerChildCollection getUnfiledRecordFolderChildren( | ||||
|             String unfiledRecordFolderId, String parameters) { | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModels(UnfiledContainerChildCollection.class, simpleRequest( | ||||
|             GET, | ||||
|             "unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}", | ||||
|             unfiledRecordFolderId, | ||||
|             parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModels( | ||||
|                         UnfiledContainerChildCollection.class, | ||||
|                         simpleRequest( | ||||
|                                 GET, | ||||
|                                 "unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}", | ||||
|                                 unfiledRecordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * see {@link #createUnfiledRecordFolderChild(UnfiledContainerChild, String, String)} | ||||
|      */ | ||||
|     public UnfiledContainerChild createUnfiledRecordFolderChild(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId) | ||||
|     { | ||||
|     /** see {@link #createUnfiledRecordFolderChild(UnfiledContainerChild, String, String)} */ | ||||
|     public UnfiledContainerChild createUnfiledRecordFolderChild( | ||||
|             UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId) { | ||||
|         mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel); | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return createUnfiledRecordFolderChild(unfiledRecordFolderChildModel, unfiledRecordFolderId, EMPTY); | ||||
|         return createUnfiledRecordFolderChild( | ||||
|                 unfiledRecordFolderChildModel, unfiledRecordFolderId, EMPTY); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Creates an unfiled record folder child. Can be a record or an unfiled record folder. | ||||
|      * | ||||
|      * @param unfiledRecordFolderChildModel The unfiled folder child model which holds the information | ||||
|      * @param unfiledRecordFolderChildModel The unfiled folder child model which holds the | ||||
|      *     information | ||||
|      * @param unfiledRecordFolderId The identifier of an unfiled folder | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @return The created {@link UnfiledRecordFolderChild} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code unfiledRecordFolderId} is not a valid format or {@code unfiledRecordFolderChildModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to add children to {@code unfiledRecordFolderId}</li> | ||||
|      *  <li>{@code unfiledRecordFolderId} does not exist</li> | ||||
|      *  <li>new name clashes with an existing node in the current parent container</li> | ||||
|      *  <li>model integrity exception, including node name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code unfiledRecordFolderId} is not a valid format or {@code | ||||
|      *           unfiledRecordFolderChildModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to add children to {@code | ||||
|      *           unfiledRecordFolderId} | ||||
|      *       <li>{@code unfiledRecordFolderId} does not exist | ||||
|      *       <li>new name clashes with an existing node in the current parent container | ||||
|      *       <li>model integrity exception, including node name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledContainerChild createUnfiledRecordFolderChild(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId, String parameters) | ||||
|     { | ||||
|     public UnfiledContainerChild createUnfiledRecordFolderChild( | ||||
|             UnfiledContainerChild unfiledRecordFolderChildModel, | ||||
|             String unfiledRecordFolderId, | ||||
|             String parameters) { | ||||
|         mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel); | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(UnfiledContainerChild.class, requestWithBody( | ||||
|                 POST, | ||||
|                 toJson(unfiledRecordFolderChildModel), | ||||
|                 "unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}", | ||||
|                 unfiledRecordFolderId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         UnfiledContainerChild.class, | ||||
|                         requestWithBody( | ||||
|                                 POST, | ||||
|                                 toJson(unfiledRecordFolderChildModel), | ||||
|                                 "unfiled-record-folders/{unfiledRecordFolderId}/children?{parameters}", | ||||
|                                 unfiledRecordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create a record from file resource | ||||
|      * | ||||
|      * @param unfiledRecordFolderChildModel {@link UnfiledContainerChild} for electronic record to be created | ||||
|      * @param unfiledRecordFolderChildContent {@link File} pointing to the content of the electronic record to be created | ||||
|      * @param unfiledRecordFolderChildModel {@link UnfiledContainerChild} for electronic record to | ||||
|      *     be created | ||||
|      * @param unfiledRecordFolderChildContent {@link File} pointing to the content of the electronic | ||||
|      *     record to be created | ||||
|      * @param unfiledRecordFolderId The identifier of a unfiled record folder | ||||
|      * @return newly created {@link UnfiledContainerChild} | ||||
|      * @throws RuntimeException for invalid recordModel JSON strings | ||||
|      */ | ||||
|     public UnfiledContainerChild uploadRecord(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId, File unfiledRecordFolderChildContent) | ||||
|     { | ||||
|     public UnfiledContainerChild uploadRecord( | ||||
|             UnfiledContainerChild unfiledRecordFolderChildModel, | ||||
|             String unfiledRecordFolderId, | ||||
|             File unfiledRecordFolderChildContent) { | ||||
|         mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel); | ||||
|         mandatoryObject("unfiledRecordFolderChildContent", unfiledRecordFolderChildContent); | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         if (!unfiledRecordFolderChildModel.getNodeType().equals(CONTENT_TYPE)) | ||||
|         { | ||||
|         if (!unfiledRecordFolderChildModel.getNodeType().equals(CONTENT_TYPE)) { | ||||
|             fail("Only electronic records are supported"); | ||||
|         } | ||||
|  | ||||
| @@ -210,22 +216,25 @@ public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
|          */ | ||||
|         RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec(); | ||||
|         JsonNode root; | ||||
|         try | ||||
|         { | ||||
|             root = new ObjectMapper().readTree(toJson(unfiledRecordFolderChildModel, UnfiledContainerChild.class, UnfiledContainerChildMixin.class)); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         try { | ||||
|             root = | ||||
|                     new ObjectMapper() | ||||
|                             .readTree( | ||||
|                                     toJson( | ||||
|                                             unfiledRecordFolderChildModel, | ||||
|                                             UnfiledContainerChild.class, | ||||
|                                             UnfiledContainerChildMixin.class)); | ||||
|         } catch (IOException e) { | ||||
|             throw new RuntimeException("Failed to convert model to JSON.", e); | ||||
|         } | ||||
|         // add request fields | ||||
|         Iterator<String> fieldNames = root.fieldNames(); | ||||
|         while (fieldNames.hasNext()) | ||||
|         { | ||||
|         while (fieldNames.hasNext()) { | ||||
|             String fieldName = fieldNames.next(); | ||||
|             builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name()); | ||||
|         } | ||||
|         builder.addMultiPart("filedata", unfiledRecordFolderChildContent, ContentType.BINARY.name()); | ||||
|         builder.addMultiPart( | ||||
|                 "filedata", unfiledRecordFolderChildContent, ContentType.BINARY.name()); | ||||
|  | ||||
|         // create node with given content | ||||
|         return createUnfiledRecordFolderChild(unfiledRecordFolderChildModel, unfiledRecordFolderId); | ||||
| @@ -234,8 +243,8 @@ public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
|     /** | ||||
|      * see {@link #updateUnfiledRecordFolder(UnfiledRecordFolder, String, String) | ||||
|      */ | ||||
|     public UnfiledRecordFolder updateUnfiledRecordFolder(UnfiledRecordFolder unfiledRecordFolderModel, String unfiledRecordFolderId) | ||||
|     { | ||||
|     public UnfiledRecordFolder updateUnfiledRecordFolder( | ||||
|             UnfiledRecordFolder unfiledRecordFolderModel, String unfiledRecordFolderId) { | ||||
|         mandatoryObject("unfiledRecordFolderModel", unfiledRecordFolderModel); | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
| @@ -250,27 +259,33 @@ public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
|      * @param parameters The URL parameters to add | ||||
|      * @param returns The updated {@link UnfiledRecordFolder} | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>the update request is invalid or {@code unfiledRecordFolderId} is not a valid format or {@code unfiledRecordFolderModel} is invalid</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to update {@code unfiledRecordFolderId}</li> | ||||
|      *  <li>{@code unfiledRecordFolderId} does not exist</li> | ||||
|      *  <li>the updated name clashes with an existing root category of special container in the current fileplan</li> | ||||
|      *  <li>model integrity exception, including file name with invalid characters</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>the update request is invalid or {@code unfiledRecordFolderId} is not a valid | ||||
|      *           format or {@code unfiledRecordFolderModel} is invalid | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to update {@code unfiledRecordFolderId} | ||||
|      *       <li>{@code unfiledRecordFolderId} does not exist | ||||
|      *       <li>the updated name clashes with an existing root category of special container in the | ||||
|      *           current fileplan | ||||
|      *       <li>model integrity exception, including file name with invalid characters | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public UnfiledRecordFolder updateUnfiledRecordFolder(UnfiledRecordFolder unfiledRecordFolderModel, String unfiledRecordFolderId, String parameters) | ||||
|     { | ||||
|     public UnfiledRecordFolder updateUnfiledRecordFolder( | ||||
|             UnfiledRecordFolder unfiledRecordFolderModel, | ||||
|             String unfiledRecordFolderId, | ||||
|             String parameters) { | ||||
|         mandatoryObject("unfiledRecordFolderModel", unfiledRecordFolderModel); | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         return getRmRestWrapper().processModel(UnfiledRecordFolder.class, requestWithBody( | ||||
|                 PUT, | ||||
|                 toJson(unfiledRecordFolderModel), | ||||
|                 "unfiled-record-folders/{unfiledRecordFolderId}?{parameters}", | ||||
|                 unfiledRecordFolderId, | ||||
|                 parameters | ||||
|         )); | ||||
|         return getRmRestWrapper() | ||||
|                 .processModel( | ||||
|                         UnfiledRecordFolder.class, | ||||
|                         requestWithBody( | ||||
|                                 PUT, | ||||
|                                 toJson(unfiledRecordFolderModel), | ||||
|                                 "unfiled-record-folders/{unfiledRecordFolderId}?{parameters}", | ||||
|                                 unfiledRecordFolderId, | ||||
|                                 parameters)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -278,23 +293,22 @@ public class UnfiledRecordFolderAPI extends RMModelRequest | ||||
|      * | ||||
|      * @param unfiledRecordFolderId The identifier of a unfiled record folder | ||||
|      * @throws RuntimeException for the following cases: | ||||
|      * <ul> | ||||
|      *  <li>{@code unfiledRecordFolderId} is not a valid format</li> | ||||
|      *  <li>authentication fails</li> | ||||
|      *  <li>current user does not have permission to delete {@code unfiledRecordFolderId}</li> | ||||
|      *  <li>{@code unfiledRecordFolderId} does not exist</li> | ||||
|      *  <li>{@code unfiledRecordFolderId} is locked and cannot be deleted</li> | ||||
|      * </ul> | ||||
|      *     <ul> | ||||
|      *       <li>{@code unfiledRecordFolderId} is not a valid format | ||||
|      *       <li>authentication fails | ||||
|      *       <li>current user does not have permission to delete {@code unfiledRecordFolderId} | ||||
|      *       <li>{@code unfiledRecordFolderId} does not exist | ||||
|      *       <li>{@code unfiledRecordFolderId} is locked and cannot be deleted | ||||
|      *     </ul> | ||||
|      */ | ||||
|     public void deleteUnfiledRecordFolder(String unfiledRecordFolderId) | ||||
|     { | ||||
|     public void deleteUnfiledRecordFolder(String unfiledRecordFolderId) { | ||||
|         mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId); | ||||
|  | ||||
|         getRmRestWrapper().processEmptyModel(simpleRequest( | ||||
|                 DELETE, | ||||
|                 "unfiled-record-folders/{recordFolderId}", | ||||
|                 unfiledRecordFolderId | ||||
|         )); | ||||
|         getRmRestWrapper() | ||||
|                 .processEmptyModel( | ||||
|                         simpleRequest( | ||||
|                                 DELETE, | ||||
|                                 "unfiled-record-folders/{recordFolderId}", | ||||
|                                 unfiledRecordFolderId)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -35,24 +35,20 @@ import java.util.UUID; | ||||
|  * @author Tom Page | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class CommonTestUtils | ||||
| { | ||||
|     /** | ||||
|      * The default pattern used for the user full name when users are created with tas utility | ||||
|      */ | ||||
| public class CommonTestUtils { | ||||
|     /** The default pattern used for the user full name when users are created with tas utility */ | ||||
|     public static final String USER_FULLNAME_PATTERN = "FN-%1$s LN-%1$s"; | ||||
|  | ||||
|     /** Private constructor to prevent instantiation. */ | ||||
|     private CommonTestUtils() | ||||
|     { | ||||
|     } | ||||
|     private CommonTestUtils() {} | ||||
|  | ||||
|     /** | ||||
|      * Generate a prefix to namespace the objects in a test class. Note that four random hex digits should be good enough to avoid | ||||
|      * collisions when running locally and should also be short enough to maintain readability. | ||||
|      * Generate a prefix to namespace the objects in a test class. Note that four random hex digits | ||||
|      * should be good enough to avoid collisions when running locally and should also be short | ||||
|      * enough to maintain readability. | ||||
|      */ | ||||
|     public static String generateTestPrefix(Class<?> clazz) | ||||
|     { | ||||
|         return clazz.getSimpleName().substring(0, 7) + UUID.randomUUID().toString().substring(0, 4).toUpperCase(); | ||||
|     public static String generateTestPrefix(Class<?> clazz) { | ||||
|         return clazz.getSimpleName().substring(0, 7) | ||||
|                 + UUID.randomUUID().toString().substring(0, 4).toUpperCase(); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -29,11 +29,6 @@ package org.alfresco.rest.rm.community.util; | ||||
|  | ||||
| import static org.testng.Assert.assertTrue; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import com.github.dockerjava.api.DockerClient; | ||||
| import com.github.dockerjava.api.command.LogContainerCmd; | ||||
| import com.github.dockerjava.api.model.Container; | ||||
| @@ -44,6 +39,7 @@ import com.github.dockerjava.netty.NettyDockerCmdExecFactory; | ||||
|  | ||||
| import lombok.Getter; | ||||
| import lombok.Setter; | ||||
|  | ||||
| import org.alfresco.utility.Utility; | ||||
| import org.apache.commons.lang.SystemUtils; | ||||
| import org.slf4j.Logger; | ||||
| @@ -52,6 +48,11 @@ import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * Helper class for interaction with docker containers | ||||
|  * | ||||
| @@ -59,30 +60,23 @@ import org.springframework.stereotype.Service; | ||||
|  * @since 3.1 | ||||
|  */ | ||||
| @Service | ||||
| public class DockerHelper | ||||
| { | ||||
| public class DockerHelper { | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(DockerHelper.class); | ||||
|     private static final String REPO_IMAGE_NAME = "repository"; | ||||
|     @Getter | ||||
|     @Setter | ||||
|     private DockerClient dockerClient; | ||||
|     @Getter @Setter private DockerClient dockerClient; | ||||
|  | ||||
|     @Autowired | ||||
|     public DockerHelper(@Value ("${docker.host}") String dockerHost) | ||||
|     { | ||||
|         if (SystemUtils.IS_OS_WINDOWS) | ||||
|         { | ||||
|             this.dockerClient = DockerClientBuilder | ||||
|                 .getInstance(dockerHost) | ||||
|                 .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) | ||||
|                 .build(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             this.dockerClient = DockerClientBuilder | ||||
|                 .getInstance() | ||||
|                 .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) | ||||
|                 .build(); | ||||
|     public DockerHelper(@Value("${docker.host}") String dockerHost) { | ||||
|         if (SystemUtils.IS_OS_WINDOWS) { | ||||
|             this.dockerClient = | ||||
|                     DockerClientBuilder.getInstance(dockerHost) | ||||
|                             .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) | ||||
|                             .build(); | ||||
|         } else { | ||||
|             this.dockerClient = | ||||
|                     DockerClientBuilder.getInstance() | ||||
|                             .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) | ||||
|                             .build(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -93,30 +87,30 @@ public class DockerHelper | ||||
|      * @param timeStamp - get the logs since a specific timestamp | ||||
|      * @return list of strings, where every string is log line | ||||
|      */ | ||||
|     private List<String> getDockerLogs(String containerId, int timeStamp) | ||||
|     { | ||||
|     private List<String> getDockerLogs(String containerId, int timeStamp) { | ||||
|         final List<String> logs = new ArrayList<>(); | ||||
|  | ||||
|         final LogContainerCmd logContainerCmd = getDockerClient().logContainerCmd(containerId); | ||||
|         logContainerCmd.withStdOut(true) | ||||
|                        .withStdErr(true) | ||||
|                        .withSince(timeStamp) // UNIX timestamp to filter logs. Output log-entries since that timestamp. | ||||
|                        .withTimestamps(true); //print timestamps for every log line | ||||
|         logContainerCmd | ||||
|                 .withStdOut(true) | ||||
|                 .withStdErr(true) | ||||
|                 .withSince( | ||||
|                         timeStamp) // UNIX timestamp to filter logs. Output log-entries since that | ||||
|                 // timestamp. | ||||
|                 .withTimestamps(true); // print timestamps for every log line | ||||
|  | ||||
|         try | ||||
|         { | ||||
|             logContainerCmd.exec(new LogContainerResultCallback() | ||||
|             { | ||||
|                 @Override | ||||
|                 public void onNext(Frame item) | ||||
|                 { | ||||
|                     logs.add(item.toString()); | ||||
|                 } | ||||
|             }).awaitCompletion(); | ||||
|         } | ||||
|         catch (InterruptedException e) | ||||
|         { | ||||
|             Thread.currentThread().interrupt();  // set interrupt flag | ||||
|         try { | ||||
|             logContainerCmd | ||||
|                     .exec( | ||||
|                             new LogContainerResultCallback() { | ||||
|                                 @Override | ||||
|                                 public void onNext(Frame item) { | ||||
|                                     logs.add(item.toString()); | ||||
|                                 } | ||||
|                             }) | ||||
|                     .awaitCompletion(); | ||||
|         } catch (InterruptedException e) { | ||||
|             Thread.currentThread().interrupt(); // set interrupt flag | ||||
|             LOGGER.error("Failed to retrieve logs of container " + containerId, e); | ||||
|         } | ||||
|  | ||||
| @@ -128,19 +122,18 @@ public class DockerHelper | ||||
|      * | ||||
|      * @return list of strings, where every string is log line | ||||
|      */ | ||||
|     public List<String> getAlfrescoLogs() | ||||
|     { | ||||
|     public List<String> getAlfrescoLogs() { | ||||
|         final List<Container> alfrescoContainers = findContainersByImageName(REPO_IMAGE_NAME); | ||||
|         if (alfrescoContainers.isEmpty()) | ||||
|         { | ||||
|         if (alfrescoContainers.isEmpty()) { | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|         } else { | ||||
|             List<String> alfrescoLogs = new ArrayList<>(); | ||||
|             // get the logs since current time - 10 seconds | ||||
|             final int timeStamp = (int) (System.currentTimeMillis() / 1000) - 10; | ||||
|             alfrescoContainers.forEach(alfrescoContainer -> alfrescoLogs.addAll(getDockerLogs(alfrescoContainer.getId(), timeStamp))); | ||||
|             alfrescoContainers.forEach( | ||||
|                     alfrescoContainer -> | ||||
|                             alfrescoLogs.addAll( | ||||
|                                     getDockerLogs(alfrescoContainer.getId(), timeStamp))); | ||||
|             return alfrescoLogs; | ||||
|         } | ||||
|     } | ||||
| @@ -151,14 +144,17 @@ public class DockerHelper | ||||
|      * @param expectedException the expected exception to be thrown | ||||
|      * @throws Exception | ||||
|      */ | ||||
|     public void checkExceptionIsInAlfrescoLogs(String expectedException) throws Exception | ||||
|     { | ||||
|         //Retry the operation because sometimes it takes few seconds to throw the exception | ||||
|         Utility.sleep(6000, 30000, () -> | ||||
|         { | ||||
|             List<String> alfrescoLogs = getAlfrescoLogs(); | ||||
|             assertTrue(alfrescoLogs.stream().anyMatch(logLine -> logLine.contains(expectedException))); | ||||
|         }); | ||||
|     public void checkExceptionIsInAlfrescoLogs(String expectedException) throws Exception { | ||||
|         // Retry the operation because sometimes it takes few seconds to throw the exception | ||||
|         Utility.sleep( | ||||
|                 6000, | ||||
|                 30000, | ||||
|                 () -> { | ||||
|                     List<String> alfrescoLogs = getAlfrescoLogs(); | ||||
|                     assertTrue( | ||||
|                             alfrescoLogs.stream() | ||||
|                                     .anyMatch(logLine -> logLine.contains(expectedException))); | ||||
|                 }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -167,12 +163,12 @@ public class DockerHelper | ||||
|      * @param imageName - the name of the image used by container | ||||
|      * @return the containers | ||||
|      */ | ||||
|     private List<Container> findContainersByImageName(String imageName) | ||||
|     { | ||||
|         final List<Container> containers = getDockerClient().listContainersCmd().withShowAll(true).exec(); | ||||
|     private List<Container> findContainersByImageName(String imageName) { | ||||
|         final List<Container> containers = | ||||
|                 getDockerClient().listContainersCmd().withShowAll(true).exec(); | ||||
|  | ||||
|         return containers.stream() | ||||
|                          .filter(container -> container.getImage().contains(imageName)) | ||||
|                          .collect(Collectors.toList()); | ||||
|                 .filter(container -> container.getImage().contains(imageName)) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -31,18 +31,16 @@ import com.fasterxml.jackson.annotation.JsonUnwrapped; | ||||
| import org.alfresco.rest.rm.community.model.record.RecordProperties; | ||||
|  | ||||
| /** | ||||
|  * Mix class for Record POJO class | ||||
|  * Mix-in annotations are: a way to associate annotations with classes | ||||
|  * without modifying (target) classes themselves. | ||||
|  * Mix class for Record POJO class Mix-in annotations are: a way to associate annotations with | ||||
|  * classes without modifying (target) classes themselves. | ||||
|  * | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public abstract class FilePlanComponentMixIn | ||||
| { | ||||
| public abstract class FilePlanComponentMixIn { | ||||
|     /** | ||||
|      * Annotation used to indicate that a property should be serialized "unwrapped" | ||||
|      * Its properties are instead included as properties of its containing Object | ||||
|      * Annotation used to indicate that a property should be serialized "unwrapped" Its properties | ||||
|      * are instead included as properties of its containing Object | ||||
|      */ | ||||
|     @JsonUnwrapped | ||||
|     abstract RecordProperties getProperties(); | ||||
|   | ||||
| @@ -34,10 +34,8 @@ import static org.apache.commons.lang3.StringUtils.isBlank; | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class ParameterCheck | ||||
| { | ||||
|     private ParameterCheck() | ||||
|     { | ||||
| public class ParameterCheck { | ||||
|     private ParameterCheck() { | ||||
|         // Intentionally blank | ||||
|     } | ||||
|  | ||||
| @@ -48,11 +46,10 @@ public class ParameterCheck | ||||
|      * @param paramValue The value of the parameter to check | ||||
|      * @throws IllegalArgumentException Throws an exception if the given value is blank | ||||
|      */ | ||||
|     public static void mandatoryString(final String paramName, final String paramValue) throws IllegalArgumentException | ||||
|     { | ||||
|         if (isBlank(paramValue)) | ||||
|         { | ||||
|             throw new IllegalArgumentException("'" + paramName  + "' is a mandatory parameter."); | ||||
|     public static void mandatoryString(final String paramName, final String paramValue) | ||||
|             throws IllegalArgumentException { | ||||
|         if (isBlank(paramValue)) { | ||||
|             throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter."); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -63,11 +60,10 @@ public class ParameterCheck | ||||
|      * @param object The value of the parameter to check | ||||
|      * @throws IllegalArgumentException Throws an exception if the given value is null | ||||
|      */ | ||||
|     public static void mandatoryObject(final String paramName, final Object object) throws IllegalArgumentException | ||||
|     { | ||||
|         if (object == null) | ||||
|         { | ||||
|             throw new IllegalArgumentException("'" + paramName  + "' is a mandatory parameter."); | ||||
|     public static void mandatoryObject(final String paramName, final Object object) | ||||
|             throws IllegalArgumentException { | ||||
|         if (object == null) { | ||||
|             throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter."); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,9 +28,6 @@ package org.alfresco.rest.rm.community.util; | ||||
|  | ||||
| import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
|  | ||||
| import com.fasterxml.jackson.annotation.JsonInclude.Include; | ||||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| @@ -41,28 +38,24 @@ import org.json.JSONObject; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Utility class for creating the json object | ||||
|  * | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class PojoUtility | ||||
| { | ||||
|     /** | ||||
|      * Logger for the class. | ||||
|      */ | ||||
| public class PojoUtility { | ||||
|     /** Logger for the class. */ | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(PojoUtility.class); | ||||
|  | ||||
|     /** Private constructor to prevent instantiation. */ | ||||
|     private PojoUtility() | ||||
|     {} | ||||
|     private PojoUtility() {} | ||||
|  | ||||
|     /** | ||||
|      * see {@link #toJson(Object, Class, Class)} | ||||
|      */ | ||||
|     public static String toJson(Object model) | ||||
|     { | ||||
|     /** see {@link #toJson(Object, Class, Class)} */ | ||||
|     public static String toJson(Object model) { | ||||
|         mandatoryObject("model", model); | ||||
|  | ||||
|         return toJson(model, null, null); | ||||
| @@ -73,59 +66,53 @@ public class PojoUtility | ||||
|      * | ||||
|      * @param model The java object model to convert | ||||
|      * @param target Class (or interface) whose annotations to effectively override | ||||
|      * @param mixinSource Class (or interface) whose annotations are to be "added" to target's annotations, overriding as necessary | ||||
|      * @param mixinSource Class (or interface) whose annotations are to be "added" to target's | ||||
|      *     annotations, overriding as necessary | ||||
|      * @return The converted java object as JSON string | ||||
|      * @throws JsonProcessingException  Throws exceptions if the given object doesn't match to the POJO class model | ||||
|      * @throws JsonProcessingException Throws exceptions if the given object doesn't match to the | ||||
|      *     POJO class model | ||||
|      */ | ||||
|     public static String toJson(Object model, Class<?> target, Class<?> mixinSource) | ||||
|     { | ||||
|     public static String toJson(Object model, Class<?> target, Class<?> mixinSource) { | ||||
|         mandatoryObject("model", model); | ||||
|  | ||||
|         ObjectMapper mapper = new ObjectMapper(); | ||||
|  | ||||
|         if (target != null && mixinSource != null) | ||||
|         { | ||||
|             //inject the "mix-in" annotations  from FilePlanComponentMix to | ||||
|         if (target != null && mixinSource != null) { | ||||
|             // inject the "mix-in" annotations  from FilePlanComponentMix to | ||||
|             // FilePlanComponent POJO class when converting to json | ||||
|             mapper.addMixIn(target, mixinSource); | ||||
|         } | ||||
|  | ||||
|         //include only non null values | ||||
|         // include only non null values | ||||
|         mapper.setSerializationInclusion(Include.NON_NULL); | ||||
|  | ||||
|         //return the json object | ||||
|         try | ||||
|         { | ||||
|         // return the json object | ||||
|         try { | ||||
|             return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(model); | ||||
|         } | ||||
|         catch (JsonProcessingException error) | ||||
|         { | ||||
|         } catch (JsonProcessingException error) { | ||||
|             return error.toString(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Converting json to  java object | ||||
|      * Converting json to java object | ||||
|      * | ||||
|      * @param json   The json object to convert | ||||
|      * @param classz Class  for the java object | ||||
|      * @param json The json object to convert | ||||
|      * @param classz Class for the java object | ||||
|      * @return The converted java object | ||||
|      * @throws JsonProcessingException Throws exceptions if the given object doesn't match to the POJO class model | ||||
|      * @throws JsonProcessingException Throws exceptions if the given object doesn't match to the | ||||
|      *     POJO class model | ||||
|      */ | ||||
|     public static <T> T jsonToObject(JSONObject json, Class<T> classz) | ||||
|     { | ||||
|     public static <T> T jsonToObject(JSONObject json, Class<T> classz) { | ||||
|         mandatoryObject("model", classz); | ||||
|         mandatoryObject("jsonObject", json); | ||||
|  | ||||
|         ObjectMapper mapper = new ObjectMapper(); | ||||
|  | ||||
|         T obj = null; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             obj = mapper.readValue(json.toString(), classz); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         } catch (IOException e) { | ||||
|             LOGGER.error("Unable to convert the json into a java object.", e); | ||||
|         } | ||||
|  | ||||
| @@ -135,32 +122,28 @@ public class PojoUtility | ||||
|     /** | ||||
|      * Converting json array into a list of java objects | ||||
|      * | ||||
|      * @param json   The json array to convert | ||||
|      * @param classz Class  for the java object | ||||
|      * @param json The json array to convert | ||||
|      * @param classz Class for the java object | ||||
|      * @return The list of converted java objects | ||||
|      * @throws JsonProcessingException Throws exceptions if the given object doesn't match to the POJO class model | ||||
|      * @throws JsonProcessingException Throws exceptions if the given object doesn't match to the | ||||
|      *     POJO class model | ||||
|      */ | ||||
|     public static <T> List<T> jsonToObject(JSONArray json, Class<T> classz) | ||||
|     { | ||||
|     public static <T> List<T> jsonToObject(JSONArray json, Class<T> classz) { | ||||
|  | ||||
|         mandatoryObject("model", classz); | ||||
|         mandatoryObject("jsonObject", json); | ||||
|  | ||||
|         ObjectMapper mapper = new ObjectMapper(); | ||||
|  | ||||
|         CollectionType collectionType = mapper.getTypeFactory().constructCollectionType(List.class, classz); | ||||
|         CollectionType collectionType = | ||||
|                 mapper.getTypeFactory().constructCollectionType(List.class, classz); | ||||
|         List<T> asList = null; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             asList = mapper.readValue(json.toString(), collectionType); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         } catch (IOException e) { | ||||
|             LOGGER.error("Unable to convert the json array into a java collection.", e); | ||||
|         } | ||||
|  | ||||
|  | ||||
|         return asList; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,8 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.rm.community.util; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| import com.fasterxml.jackson.core.JsonGenerator; | ||||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.databind.JsonSerializer; | ||||
| @@ -35,25 +33,32 @@ import com.fasterxml.jackson.databind.SerializerProvider; | ||||
|  | ||||
| import org.alfresco.rest.rm.community.model.common.ReviewPeriod; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * Utility class for serializing @{FilePlanComponentReviewPeriod} | ||||
|  * | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public class ReviewPeriodSerializer extends JsonSerializer<ReviewPeriod> | ||||
| { | ||||
| public class ReviewPeriodSerializer extends JsonSerializer<ReviewPeriod> { | ||||
|     /** | ||||
|      * @param value The Review Period value that is being serialized. | ||||
|      * @param gen Jackson utility is responsible for writing JSON | ||||
|      * @param serializers Provider for getting access to other serializers and configurations registered with the ObjectMapper. | ||||
|      * @param serializers Provider for getting access to other serializers and configurations | ||||
|      *     registered with the ObjectMapper. | ||||
|      * @throws IOException | ||||
|      * @throws JsonProcessingException | ||||
|      */ | ||||
|     @Override | ||||
|     public void serialize(ReviewPeriod value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException | ||||
|     { | ||||
|         //create the custom  string value for the Review Period type | ||||
|        gen.writeString(new StringBuilder().append(value.getPeriodType()).append("|").append(value.getExpression()).toString()); | ||||
|     public void serialize(ReviewPeriod value, JsonGenerator gen, SerializerProvider serializers) | ||||
|             throws IOException, JsonProcessingException { | ||||
|         // create the custom  string value for the Review Period type | ||||
|         gen.writeString( | ||||
|                 new StringBuilder() | ||||
|                         .append(value.getPeriodType()) | ||||
|                         .append("|") | ||||
|                         .append(value.getExpression()) | ||||
|                         .toString()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -31,18 +31,16 @@ import com.fasterxml.jackson.annotation.JsonUnwrapped; | ||||
| import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildProperties; | ||||
|  | ||||
| /** | ||||
|  * Mix class for Record POJO class | ||||
|  * Mix-in annotations are: a way to associate annotations with classes | ||||
|  * without modifying (target) classes themselves. | ||||
|  * Mix class for Record POJO class Mix-in annotations are: a way to associate annotations with | ||||
|  * classes without modifying (target) classes themselves. | ||||
|  * | ||||
|  * @author Tuna Aksoy | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| public abstract class UnfiledContainerChildMixin | ||||
| { | ||||
| public abstract class UnfiledContainerChildMixin { | ||||
|     /** | ||||
|      * Annotation used to indicate that a property should be serialized "unwrapped" | ||||
|      * Its properties are instead included as properties of its containing Object | ||||
|      * Annotation used to indicate that a property should be serialized "unwrapped" Its properties | ||||
|      * are instead included as properties of its containing Object | ||||
|      */ | ||||
|     @JsonUnwrapped | ||||
|     abstract UnfiledContainerChildProperties getProperties(); | ||||
|   | ||||
| @@ -26,9 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.v0; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.apache.http.HttpResponse; | ||||
| import org.json.JSONArray; | ||||
| @@ -37,6 +34,9 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * The v0 REST API for copy-to (which supports multi-item copy). | ||||
|  * | ||||
| @@ -44,8 +44,7 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| @Component | ||||
| public class CopyToAPI extends BaseAPI | ||||
| { | ||||
| public class CopyToAPI extends BaseAPI { | ||||
|     /** Logger for the class. */ | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(CopyToAPI.class); | ||||
|     /** The URI for the copy-to API. */ | ||||
| @@ -57,14 +56,14 @@ public class CopyToAPI extends BaseAPI | ||||
|      * @param user The username of the user to use. | ||||
|      * @param password The password of the user. | ||||
|      * @param targetContainerPath The destination to copy the nodes to. This should be in the format | ||||
|      * "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}", | ||||
|      * "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}". | ||||
|      *     "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}", | ||||
|      *     "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}". | ||||
|      * @param nodeRefs The list of nodes to copy. | ||||
|      * @return The HTTP Response. | ||||
|      * @throws AssertionError If the API call didn't return a 200 response. | ||||
|      */ | ||||
|     public HttpResponse copyTo(String user, String password, String targetContainerPath, List<String> nodeRefs) | ||||
|     { | ||||
|     public HttpResponse copyTo( | ||||
|             String user, String password, String targetContainerPath, List<String> nodeRefs) { | ||||
|         return copyTo(user, password, 200, targetContainerPath, nodeRefs); | ||||
|     } | ||||
|  | ||||
| @@ -75,18 +74,26 @@ public class CopyToAPI extends BaseAPI | ||||
|      * @param password The password of the user. | ||||
|      * @param expectedStatusCode The expected return status code. | ||||
|      * @param targetContainerPath The destination to copy the nodes to. This should be in the format | ||||
|      * "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}", | ||||
|      * "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}". | ||||
|      *     "{site}/{container}/{path}", "{site}/{container}", "{store_type}/{store_id}/{id}/{path}", | ||||
|      *     "{store_type}/{store_id}/{id}" or "{store_type}/{store_id}". | ||||
|      * @param nodeRefs The list of nodes to copy. | ||||
|      * @return The HTTP Response. | ||||
|      * @throws AssertionError If the API didn't return the expected status code. | ||||
|      */ | ||||
|     public HttpResponse copyTo(String user, String password, int expectedStatusCode, String targetContainerPath, List<String> nodeRefs) | ||||
|     { | ||||
|     public HttpResponse copyTo( | ||||
|             String user, | ||||
|             String password, | ||||
|             int expectedStatusCode, | ||||
|             String targetContainerPath, | ||||
|             List<String> nodeRefs) { | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("nodeRefs", new JSONArray(nodeRefs)); | ||||
|  | ||||
|         return doSlingshotPostJsonRequest(user, password, expectedStatusCode, requestParams, | ||||
|                     MessageFormat.format(COPY_TO_API, "{0}", targetContainerPath)); | ||||
|         return doSlingshotPostJsonRequest( | ||||
|                 user, | ||||
|                 password, | ||||
|                 expectedStatusCode, | ||||
|                 requestParams, | ||||
|                 MessageFormat.format(COPY_TO_API, "{0}", targetContainerPath)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,8 +28,6 @@ package org.alfresco.rest.v0; | ||||
|  | ||||
| import static org.testng.AssertJUnit.assertTrue; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.alfresco.rest.rm.community.model.custom.CustomDefinitions; | ||||
| import org.json.JSONArray; | ||||
| @@ -39,73 +37,67 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
|  | ||||
| /** | ||||
|  * Methods to make API requests using v0 API on Records Management Custom Model Reference Definitions | ||||
|  * Methods to make API requests using v0 API on Records Management Custom Model Reference | ||||
|  * Definitions | ||||
|  * | ||||
|  * @author Rodica Sutu | ||||
|  * @since 2.6 | ||||
|  */ | ||||
| @Component | ||||
| public class CustomDefinitionsAPI extends BaseAPI | ||||
| { | ||||
|     /** | ||||
|      * custom references endpoint | ||||
|      */ | ||||
|     private static final String CUSTOM_REFERENCE_API_ENDPOINT = "{0}rma/admin/customreferencedefinitions"; | ||||
| public class CustomDefinitionsAPI extends BaseAPI { | ||||
|     /** custom references endpoint */ | ||||
|     private static final String CUSTOM_REFERENCE_API_ENDPOINT = | ||||
|             "{0}rma/admin/customreferencedefinitions"; | ||||
|  | ||||
|     /** | ||||
|      * create reference endpoint | ||||
|      */ | ||||
|     /** create reference endpoint */ | ||||
|     private static final String CREATE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/customreferences"; | ||||
|  | ||||
|     /** | ||||
|      * logger | ||||
|      */ | ||||
|     /** logger */ | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(CustomDefinitionsAPI.class); | ||||
|  | ||||
|     /** | ||||
|      * Helper method to get the reference id for a custom reference | ||||
|      * | ||||
|      * @param adminUser        user with administrative privileges | ||||
|      * @param adminPassword    password for adminUser | ||||
|      * @param adminUser user with administrative privileges | ||||
|      * @param adminPassword password for adminUser | ||||
|      * @param customDefinition custom reference definition name | ||||
|      * @return  <code>reference id</code>   if the customDefinition is found | ||||
|      *          <code> null </code> otherwise | ||||
|      * | ||||
|      * @return <code>reference id</code> if the customDefinition is found <code> null </code> | ||||
|      *     otherwise | ||||
|      */ | ||||
|     public String getCustomReferenceId(String adminUser, String adminPassword, String customDefinition) | ||||
|     { | ||||
|     public String getCustomReferenceId( | ||||
|             String adminUser, String adminPassword, String customDefinition) { | ||||
|  | ||||
|         JSONObject getResponse = doGetRequest(adminUser, adminPassword, CUSTOM_REFERENCE_API_ENDPOINT); | ||||
|         if (getResponse != null) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 JSONArray customDefinitions = getResponse.getJSONObject("data").getJSONArray("customReferences"); | ||||
|                 for (int i = 0; i < customDefinitions.length(); i++) | ||||
|                 { | ||||
|         JSONObject getResponse = | ||||
|                 doGetRequest(adminUser, adminPassword, CUSTOM_REFERENCE_API_ENDPOINT); | ||||
|         if (getResponse != null) { | ||||
|             try { | ||||
|                 JSONArray customDefinitions = | ||||
|                         getResponse.getJSONObject("data").getJSONArray("customReferences"); | ||||
|                 for (int i = 0; i < customDefinitions.length(); i++) { | ||||
|                     JSONObject item = customDefinitions.getJSONObject(i); | ||||
|                     boolean hasSource = customDefinition.equalsIgnoreCase( | ||||
|                             item.has("source") ? item.getString("source") : null | ||||
|                                                                          ); | ||||
|                     boolean hasSource = | ||||
|                             customDefinition.equalsIgnoreCase( | ||||
|                                     item.has("source") ? item.getString("source") : null); | ||||
|  | ||||
|                     boolean hasTarget = customDefinition.equalsIgnoreCase( | ||||
|                             item.has("target") ? item.getString("target") : null | ||||
|                                                                          ); | ||||
|                     boolean hasTarget = | ||||
|                             customDefinition.equalsIgnoreCase( | ||||
|                                     item.has("target") ? item.getString("target") : null); | ||||
|  | ||||
|                     boolean hasLabel = customDefinition.equalsIgnoreCase( | ||||
|                             item.has("label") ? item.getString("label") : null | ||||
|                                                                         ); | ||||
|                     if ( hasSource || hasTarget || hasLabel) | ||||
|                     { | ||||
|                     boolean hasLabel = | ||||
|                             customDefinition.equalsIgnoreCase( | ||||
|                                     item.has("label") ? item.getString("label") : null); | ||||
|                     if (hasSource || hasTarget || hasLabel) { | ||||
|                         return item.getString("refId"); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|             } | ||||
|             catch (JSONException error) | ||||
|             { | ||||
|                 LOGGER.error("Unable to get the refId for the custom reference definition {}", customDefinition); | ||||
|             } catch (JSONException error) { | ||||
|                 LOGGER.error( | ||||
|                         "Unable to get the refId for the custom reference definition {}", | ||||
|                         customDefinition); | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
| @@ -114,11 +106,11 @@ public class CustomDefinitionsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Helper method to add custom reference instance to the specified record node | ||||
|      * | ||||
|      * @param adminUser     user with administrative privileges | ||||
|      * @param adminUser user with administrative privileges | ||||
|      * @param adminPassword password for adminUser | ||||
|      * @param recordNodeIdFrom node ref to set a custom reference | ||||
|      * @param recordNodeIdTo        node ref of the to record | ||||
|      * @param   relationshipType    relation type to be created | ||||
|      * @param recordNodeIdTo node ref of the to record | ||||
|      * @param relationshipType relation type to be created | ||||
|      * @throws AssertionError if the creation fails. | ||||
|      */ | ||||
|     public void createRelationship( | ||||
| @@ -126,19 +118,32 @@ public class CustomDefinitionsAPI extends BaseAPI | ||||
|             String adminPassword, | ||||
|             String recordNodeIdFrom, | ||||
|             String recordNodeIdTo, | ||||
|             CustomDefinitions relationshipType) | ||||
|     { | ||||
|        //create the request body | ||||
|             CustomDefinitions relationshipType) { | ||||
|         // create the request body | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("toNode", NODE_REF_WORKSPACE_SPACES_STORE + recordNodeIdTo); | ||||
|         requestParams.put("refId", getCustomReferenceId(adminUser, adminPassword, relationshipType | ||||
|                 .getDefinition())); | ||||
|         //send the API request to create the relationship | ||||
|         JSONObject setRelationshipStatus = doPostRequest(adminUser, adminPassword, requestParams, | ||||
|                 MessageFormat.format(CREATE_RELATIONSHIP_API_ENDPOINT, "{0}", NODE_PREFIX + recordNodeIdFrom)); | ||||
|         //check the response | ||||
|         boolean success = (setRelationshipStatus != null) && setRelationshipStatus.getBoolean("success"); | ||||
|         assertTrue("Creating relationship from " + recordNodeIdFrom + " to " + recordNodeIdTo + " failed.", success); | ||||
|         requestParams.put( | ||||
|                 "refId", | ||||
|                 getCustomReferenceId(adminUser, adminPassword, relationshipType.getDefinition())); | ||||
|         // send the API request to create the relationship | ||||
|         JSONObject setRelationshipStatus = | ||||
|                 doPostRequest( | ||||
|                         adminUser, | ||||
|                         adminPassword, | ||||
|                         requestParams, | ||||
|                         MessageFormat.format( | ||||
|                                 CREATE_RELATIONSHIP_API_ENDPOINT, | ||||
|                                 "{0}", | ||||
|                                 NODE_PREFIX + recordNodeIdFrom)); | ||||
|         // check the response | ||||
|         boolean success = | ||||
|                 (setRelationshipStatus != null) && setRelationshipStatus.getBoolean("success"); | ||||
|         assertTrue( | ||||
|                 "Creating relationship from " | ||||
|                         + recordNodeIdFrom | ||||
|                         + " to " | ||||
|                         + recordNodeIdTo | ||||
|                         + " failed.", | ||||
|                 success); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,74 +26,77 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.v0; | ||||
|  | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.apache.http.HttpResponse; | ||||
| import org.json.JSONArray; | ||||
| import org.json.JSONObject; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * Methods to make API requests using v0 API for Exporting Items | ||||
|  * | ||||
|  * @author Shubham Jain | ||||
|  * @since 7.1.0 | ||||
|  */ | ||||
|  | ||||
| @Component | ||||
| public class ExportAPI extends BaseAPI | ||||
| { | ||||
|     /** | ||||
|      * The URI to export an item | ||||
|      */ | ||||
| public class ExportAPI extends BaseAPI { | ||||
|     /** The URI to export an item */ | ||||
|     private static final String EXPORT_API = "{0}rma/admin/export"; | ||||
|  | ||||
|     /** | ||||
|      * Export a single Record/Record Folder/Record Category using V0 Export API | ||||
|      * | ||||
|      * @param user               User performing the export | ||||
|      * @param password           User's Password | ||||
|      * @param user User performing the export | ||||
|      * @param password User's Password | ||||
|      * @param expectedStatusCode Expected Response Code | ||||
|      * @param nodeID             ID of the Node(Record/RecordFolder) to be exported | ||||
|      * @param nodeID ID of the Node(Record/RecordFolder) to be exported | ||||
|      * @return HTTP Response | ||||
|      */ | ||||
|     public HttpResponse exportRMNode(String user, String password, int expectedStatusCode, String nodeID) | ||||
|     { | ||||
|         return export(user, password, expectedStatusCode, Collections.singletonList(getNodeRefSpacesStore() + nodeID)); | ||||
|     public HttpResponse exportRMNode( | ||||
|             String user, String password, int expectedStatusCode, String nodeID) { | ||||
|         return export( | ||||
|                 user, | ||||
|                 password, | ||||
|                 expectedStatusCode, | ||||
|                 Collections.singletonList(getNodeRefSpacesStore() + nodeID)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Export a list of nodes using V0 Export API | ||||
|      * | ||||
|      * @param user               User performing the export | ||||
|      * @param password           User's Password | ||||
|      * @param user User performing the export | ||||
|      * @param password User's Password | ||||
|      * @param expectedStatusCode Expected Response Code | ||||
|      * @param nodeIDList         List of the nodes to be exported | ||||
|      * @param nodeIDList List of the nodes to be exported | ||||
|      * @return HTTP Response | ||||
|      */ | ||||
|     public HttpResponse exportRMNodes(String user, String password, int expectedStatusCode, List<String> nodeIDList) | ||||
|     { | ||||
|     public HttpResponse exportRMNodes( | ||||
|             String user, String password, int expectedStatusCode, List<String> nodeIDList) { | ||||
|  | ||||
|         List<String> nodeRefs = | ||||
|                 nodeIDList.stream().map(nodeID -> getNodeRefSpacesStore() + nodeID).collect(Collectors.toList()); | ||||
|                 nodeIDList.stream() | ||||
|                         .map(nodeID -> getNodeRefSpacesStore() + nodeID) | ||||
|                         .collect(Collectors.toList()); | ||||
|  | ||||
|         return export(user, password, expectedStatusCode, nodeRefs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Export API function to perform Export Operation on items with given noderefs using V0 Export Rest API | ||||
|      * Export API function to perform Export Operation on items with given noderefs using V0 Export | ||||
|      * Rest API | ||||
|      * | ||||
|      * @param user               User performing the export | ||||
|      * @param password           User's Password | ||||
|      * @param user User performing the export | ||||
|      * @param password User's Password | ||||
|      * @param expectedStatusCode Expected Response Code | ||||
|      * @param nodeRefs           list of the noderefs for the items to be exported | ||||
|      * @param nodeRefs list of the noderefs for the items to be exported | ||||
|      * @return Rest API Post Request | ||||
|      */ | ||||
|     public HttpResponse export(String user, String password, int expectedStatusCode, List<String> nodeRefs) | ||||
|     { | ||||
|     public HttpResponse export( | ||||
|             String user, String password, int expectedStatusCode, List<String> nodeRefs) { | ||||
|         final JSONObject requestParams = new JSONObject(); | ||||
|  | ||||
|         requestParams.put("nodeRefs", new JSONArray(nodeRefs)); | ||||
|   | ||||
| @@ -29,11 +29,6 @@ package org.alfresco.rest.v0; | ||||
| import static org.alfresco.rest.core.v0.APIUtils.convertHTTPResponseToJSON; | ||||
| import static org.apache.http.HttpStatus.SC_OK; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.APIUtils; | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.alfresco.rest.rm.community.model.hold.HoldEntry; | ||||
| @@ -46,6 +41,11 @@ import org.json.JSONException; | ||||
| import org.json.JSONObject; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * Methods to make API requests using v0 API for generalized holds | ||||
|  * | ||||
| @@ -53,53 +53,51 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 3.2 | ||||
|  */ | ||||
| @Component | ||||
| public class HoldsAPI extends BaseAPI | ||||
| { | ||||
| public class HoldsAPI extends BaseAPI { | ||||
|     public static final String HOLDS_CONTAINER = "Holds"; | ||||
|     /** | ||||
|      * The URI to create a hold | ||||
|      */ | ||||
|     /** The URI to create a hold */ | ||||
|     private static final String CREATE_HOLDS_API = "{0}type/rma:hold/formprocessor"; | ||||
|  | ||||
|     /** | ||||
|      * The URI to add items to hold or to remove items from hold | ||||
|      */ | ||||
|     /** The URI to add items to hold or to remove items from hold */ | ||||
|     private static final String RM_HOLDS_API = "{0}rma/holds"; | ||||
|  | ||||
|     /** | ||||
|      * The URI to  get holds. | ||||
|      */ | ||||
|     /** The URI to get holds. */ | ||||
|     private static final String GET_RM_HOLDS = RM_HOLDS_API + "?{1}"; | ||||
|  | ||||
|     /** | ||||
|      * Util method to create a hold | ||||
|      * | ||||
|      * @param user        the user creating the hold | ||||
|      * @param password    the user's password | ||||
|      * @param holdName    the hold name | ||||
|      * @param reason      hold reason | ||||
|      * @param user the user creating the hold | ||||
|      * @param password the user's password | ||||
|      * @param holdName the hold name | ||||
|      * @param reason hold reason | ||||
|      * @param description hold description | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse createHold(String user, String password, String holdName, String reason, String description) | ||||
|     { | ||||
|     public HttpResponse createHold( | ||||
|             String user, String password, String holdName, String reason, String description) { | ||||
|         return createHold(user, password, holdName, reason, description, SC_OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Util method to create a hold | ||||
|      * | ||||
|      * @param user        the user creating the hold | ||||
|      * @param password    the user's password | ||||
|      * @param holdName    the hold name | ||||
|      * @param reason      hold reason | ||||
|      * @param user the user creating the hold | ||||
|      * @param password the user's password | ||||
|      * @param holdName the hold name | ||||
|      * @param reason hold reason | ||||
|      * @param description hold description | ||||
|      * @param expectedStatusCode The expected return status code. | ||||
|      * @return The HTTP response or throws AssertionError if the returned status code is not as expected. | ||||
|      * @return The HTTP response or throws AssertionError if the returned status code is not as | ||||
|      *     expected. | ||||
|      */ | ||||
|     public HttpResponse createHold(String user, String password, String holdName, String reason, String description, | ||||
|                                    int expectedStatusCode) | ||||
|     { | ||||
|     public HttpResponse createHold( | ||||
|             String user, | ||||
|             String password, | ||||
|             String holdName, | ||||
|             String reason, | ||||
|             String description, | ||||
|             int expectedStatusCode) { | ||||
|         // retrieve the Holds container nodeRef | ||||
|         final String parentNodeRef = getItemNodeRef(user, password, "/" + HOLDS_CONTAINER); | ||||
|  | ||||
| @@ -109,35 +107,31 @@ public class HoldsAPI extends BaseAPI | ||||
|         requestParams.put("prop_cm_description", description); | ||||
|         requestParams.put("prop_rma_holdReason", reason); | ||||
|  | ||||
|         return doPostJsonRequest(user, password, expectedStatusCode, requestParams, CREATE_HOLDS_API); | ||||
|         return doPostJsonRequest( | ||||
|                 user, password, expectedStatusCode, requestParams, CREATE_HOLDS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create a hold and get the node ref of the hold from the response body | ||||
|      * | ||||
|      * @param user        the user creating the hold | ||||
|      * @param password    the user's password | ||||
|      * @param holdName    the hold name to be created | ||||
|      * @param reason      reason of the hold to be created | ||||
|      * @param user the user creating the hold | ||||
|      * @param password the user's password | ||||
|      * @param holdName the hold name to be created | ||||
|      * @param reason reason of the hold to be created | ||||
|      * @param description hold description | ||||
|      * @return node ref of the hold created | ||||
|      */ | ||||
|     public String createHoldAndGetNodeRef(String user, String password, | ||||
|                                      String holdName, String reason, String description) | ||||
|     { | ||||
|     public String createHoldAndGetNodeRef( | ||||
|             String user, String password, String holdName, String reason, String description) { | ||||
|         final HttpResponse httpResponse = createHold(user, password, holdName, reason, description); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|            return convertHTTPResponseToJSON(httpResponse).getString("persistedObject") | ||||
|                                 .replace(NODE_REF_WORKSPACE_SPACES_STORE, ""); | ||||
|         } | ||||
|         catch(JSONException error) | ||||
|         { | ||||
|         try { | ||||
|             return convertHTTPResponseToJSON(httpResponse) | ||||
|                     .getString("persistedObject") | ||||
|                     .replace(NODE_REF_WORKSPACE_SPACES_STORE, ""); | ||||
|         } catch (JSONException error) { | ||||
|             LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error); | ||||
|         } | ||||
|         catch(ParseException error) | ||||
|         { | ||||
|         } catch (ParseException error) { | ||||
|             LOGGER.error("Parsing message body failed.", error); | ||||
|         } | ||||
|  | ||||
| @@ -151,8 +145,7 @@ public class HoldsAPI extends BaseAPI | ||||
|      * @param holdNodeRef the hold node ref | ||||
|      * @return The HTTP Response or throws AssertionError if the request is not successful. | ||||
|      */ | ||||
|     public HttpResponse deleteHold(UserModel user, String holdNodeRef) | ||||
|     { | ||||
|     public HttpResponse deleteHold(UserModel user, String holdNodeRef) { | ||||
|         return deleteHold(user.getUsername(), user.getPassword(), holdNodeRef, SC_OK); | ||||
|     } | ||||
|  | ||||
| @@ -162,15 +155,17 @@ public class HoldsAPI extends BaseAPI | ||||
|      * @param username user's username | ||||
|      * @param password its password | ||||
|      * @param holdNodeRef the hold node ref | ||||
|      * @return The HTTP Response or throws AssertionError if the returned status code is not as expected. | ||||
|      * @return The HTTP Response or throws AssertionError if the returned status code is not as | ||||
|      *     expected. | ||||
|      */ | ||||
|     public HttpResponse deleteHold(String username, String password, String holdNodeRef, int expectedStatusCode) | ||||
|     { | ||||
|     public HttpResponse deleteHold( | ||||
|             String username, String password, String holdNodeRef, int expectedStatusCode) { | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("name", "deleteHold"); | ||||
|         requestParams.put("nodeRef", getNodeRefSpacesStore() + holdNodeRef); | ||||
|  | ||||
|         return doPostJsonRequest(username, password, expectedStatusCode, requestParams, RM_ACTIONS_API); | ||||
|         return doPostJsonRequest( | ||||
|                 username, password, expectedStatusCode, requestParams, RM_ACTIONS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -181,84 +176,106 @@ public class HoldsAPI extends BaseAPI | ||||
|      * @param holdName the hold name | ||||
|      * @throws AssertionError if the deletion was unsuccessful. | ||||
|      */ | ||||
|     public void deleteHold( String username, String password, String holdName) | ||||
|     { | ||||
|     public void deleteHold(String username, String password, String holdName) { | ||||
|         deleteItem(username, password, String.format("/%s/%s", HOLDS_CONTAINER, holdName)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Adds item(content/record/record folder) to the hold | ||||
|      * | ||||
|      * @param user        the user who adds the item to the hold | ||||
|      * @param password    the user's password | ||||
|      * @param user the user who adds the item to the hold | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRef the nodeRef of the item to be added to hold | ||||
|      * @param holdName    the hold name | ||||
|      * @param holdName the hold name | ||||
|      * @return The HTTP response | ||||
|      */ | ||||
|     public HttpResponse addItemToHold(String user, String password, String itemNodeRef, String holdName) | ||||
|     { | ||||
|         return addItemsToHolds(user, password, Collections.singletonList(itemNodeRef), Collections.singletonList(holdName)); | ||||
|     public HttpResponse addItemToHold( | ||||
|             String user, String password, String itemNodeRef, String holdName) { | ||||
|         return addItemsToHolds( | ||||
|                 user, | ||||
|                 password, | ||||
|                 Collections.singletonList(itemNodeRef), | ||||
|                 Collections.singletonList(holdName)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Adds a list of items (content/record/record folder) to a list of holds | ||||
|      * | ||||
|      * @param user         the user who adds the items to the holds | ||||
|      * @param password     the user's password | ||||
|      * @param user the user who adds the items to the holds | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRefs the list of items nodeRefs to be added to holds | ||||
|      * @param holdNames    the list of holds | ||||
|      * @param holdNames the list of holds | ||||
|      * @return The HTTP response | ||||
|      */ | ||||
|     public HttpResponse addItemsToHolds(String user, String password, List<String> itemNodeRefs, List<String> holdNames) | ||||
|     { | ||||
|         final List<String> holdNodeRefs = holdNames.stream() | ||||
|                                                    .map(hold -> getItemNodeRef(user, password, String.format("/%s/%s", HOLDS_CONTAINER, hold))) | ||||
|                                                    .collect(Collectors.toList()); | ||||
|     public HttpResponse addItemsToHolds( | ||||
|             String user, String password, List<String> itemNodeRefs, List<String> holdNames) { | ||||
|         final List<String> holdNodeRefs = | ||||
|                 holdNames.stream() | ||||
|                         .map( | ||||
|                                 hold -> | ||||
|                                         getItemNodeRef( | ||||
|                                                 user, | ||||
|                                                 password, | ||||
|                                                 String.format("/%s/%s", HOLDS_CONTAINER, hold))) | ||||
|                         .collect(Collectors.toList()); | ||||
|         return addItemsToHolds(user, password, SC_OK, itemNodeRefs, holdNodeRefs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Adds a list of items (content/record/record folder) to a list of holds | ||||
|      * | ||||
|      * @param user         the user who adds the items to the holds | ||||
|      * @param password     the user's password | ||||
|      * @param user the user who adds the items to the holds | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRefs the list of items nodeRefs to be added to holds | ||||
|      * @param holdNodeRefs the list of holds | ||||
|      * @return The HTTP response | ||||
|      */ | ||||
|     public HttpResponse addItemsToHolds(String user, String password, int expectedStatus, List<String> itemNodeRefs, | ||||
|                                         List<String> holdNodeRefs) | ||||
|     { | ||||
|         final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(itemNodeRefs, holdNodeRefs); | ||||
|     public HttpResponse addItemsToHolds( | ||||
|             String user, | ||||
|             String password, | ||||
|             int expectedStatus, | ||||
|             List<String> itemNodeRefs, | ||||
|             List<String> holdNodeRefs) { | ||||
|         final JSONObject requestParams = | ||||
|                 addOrRemoveToFromHoldJsonObject(itemNodeRefs, holdNodeRefs); | ||||
|         return doPostJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Util method to add item(content/record/record folder) to the hold and get the error message | ||||
|      * | ||||
|      * @param user        the user who adds the item to the hold | ||||
|      * @param password    the user's password | ||||
|      * @param user the user who adds the item to the hold | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRef the nodeRef of the item to be added to hold | ||||
|      * @param holdNodeRef the hold node ref | ||||
|      * @return The error message | ||||
|      */ | ||||
|     public String addToHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String | ||||
|             holdNodeRef) | ||||
|     { | ||||
|         final HttpResponse httpResponse = addItemsToHolds(user, password, expectedStatus, Collections.singletonList(itemNodeRef), | ||||
|                 Collections.singletonList(holdNodeRef)); | ||||
|     public String addToHoldAndGetMessage( | ||||
|             String user, | ||||
|             String password, | ||||
|             int expectedStatus, | ||||
|             String itemNodeRef, | ||||
|             String holdNodeRef) { | ||||
|         final HttpResponse httpResponse = | ||||
|                 addItemsToHolds( | ||||
|                         user, | ||||
|                         password, | ||||
|                         expectedStatus, | ||||
|                         Collections.singletonList(itemNodeRef), | ||||
|                         Collections.singletonList(holdNodeRef)); | ||||
|         return APIUtils.extractErrorMessageFromHttpResponse(httpResponse); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Util method to create the request body used when adding items to holds or when removing items from holds | ||||
|      * Util method to create the request body used when adding items to holds or when removing items | ||||
|      * from holds | ||||
|      * | ||||
|      * @param items        list of items node refs to be added to holds | ||||
|      * @param items list of items node refs to be added to holds | ||||
|      * @param holdNodeRefs list of hold node refs for add/remove items | ||||
|      * @return JSONObject fo | ||||
|      */ | ||||
|     private JSONObject addOrRemoveToFromHoldJsonObject(List<String> items, List<String> holdNodeRefs) | ||||
|     { | ||||
|     private JSONObject addOrRemoveToFromHoldJsonObject( | ||||
|             List<String> items, List<String> holdNodeRefs) { | ||||
|         final JSONArray nodeRefs = new JSONArray(); | ||||
|         items.forEach(itemNodeRef -> nodeRefs.put(getNodeRefSpacesStore() + itemNodeRef)); | ||||
|         final JSONArray holds = new JSONArray(); | ||||
| @@ -272,88 +289,119 @@ public class HoldsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Remove item(content/record/record folder) from hold | ||||
|      * | ||||
|      * @param user        the user who removes the item from the hold | ||||
|      * @param password    the user's password | ||||
|      * @param user the user who removes the item from the hold | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRef the nodeRef of the item to be removed from hold | ||||
|      * @param holdName    the hold name | ||||
|      * @param holdName the hold name | ||||
|      * @return The HTTP response | ||||
|      */ | ||||
|     public HttpResponse removeItemFromHold(String user, String password, String itemNodeRef, String holdName) | ||||
|     { | ||||
|         return removeItemsFromHolds(user, password, Collections.singletonList(itemNodeRef), Collections.singletonList(holdName)); | ||||
|     public HttpResponse removeItemFromHold( | ||||
|             String user, String password, String itemNodeRef, String holdName) { | ||||
|         return removeItemsFromHolds( | ||||
|                 user, | ||||
|                 password, | ||||
|                 Collections.singletonList(itemNodeRef), | ||||
|                 Collections.singletonList(holdName)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove a list of items (content/record/record folder) from a list of holds | ||||
|      * | ||||
|      * @param user           the user who removes the item from the hold | ||||
|      * @param password       the user's password | ||||
|      * @param itemNodeRefs   the list of items nodeRefs to be removed from hold | ||||
|      * @param holdNames      the list of hold names | ||||
|      * @param user the user who removes the item from the hold | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRefs the list of items nodeRefs to be removed from hold | ||||
|      * @param holdNames the list of hold names | ||||
|      * @return The HTTP response | ||||
|      */ | ||||
|     public HttpResponse removeItemsFromHolds(String user, String password, List<String> itemNodeRefs, List<String> holdNames) | ||||
|     { | ||||
|         final List<String> holdNodeRefs = holdNames.stream() | ||||
|                                                    .map(hold -> getItemNodeRef(user, password, String.format("/%s/%s", HOLDS_CONTAINER, hold))) | ||||
|                                                    .collect(Collectors.toList()); | ||||
|     public HttpResponse removeItemsFromHolds( | ||||
|             String user, String password, List<String> itemNodeRefs, List<String> holdNames) { | ||||
|         final List<String> holdNodeRefs = | ||||
|                 holdNames.stream() | ||||
|                         .map( | ||||
|                                 hold -> | ||||
|                                         getItemNodeRef( | ||||
|                                                 user, | ||||
|                                                 password, | ||||
|                                                 String.format("/%s/%s", HOLDS_CONTAINER, hold))) | ||||
|                         .collect(Collectors.toList()); | ||||
|         return removeItemsFromHolds(user, password, SC_OK, itemNodeRefs, holdNodeRefs); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Remove a list of items (content/record/record folder) from a list of holds | ||||
|      * | ||||
|      * @param user           the user who removes the item from the hold | ||||
|      * @param password       the user's password | ||||
|      * @param user the user who removes the item from the hold | ||||
|      * @param password the user's password | ||||
|      * @param expectedStatus https status code expected | ||||
|      * @param itemNodeRefs   the list of items nodeRefs to be removed from hold | ||||
|      * @param holdNodeRefs   the list of hold node refs | ||||
|      * @param itemNodeRefs the list of items nodeRefs to be removed from hold | ||||
|      * @param holdNodeRefs the list of hold node refs | ||||
|      * @return The HTTP response | ||||
|      */ | ||||
|     public HttpResponse removeItemsFromHolds(String user, String password, int expectedStatus, List<String> itemNodeRefs, | ||||
|                                              List<String> holdNodeRefs) | ||||
|     { | ||||
|         final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(itemNodeRefs, holdNodeRefs); | ||||
|     public HttpResponse removeItemsFromHolds( | ||||
|             String user, | ||||
|             String password, | ||||
|             int expectedStatus, | ||||
|             List<String> itemNodeRefs, | ||||
|             List<String> holdNodeRefs) { | ||||
|         final JSONObject requestParams = | ||||
|                 addOrRemoveToFromHoldJsonObject(itemNodeRefs, holdNodeRefs); | ||||
|         return doPutJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Util method to remove item(content/record/record folder) from hold and get the error message | ||||
|      * | ||||
|      * @param user        the user who removes the item from hold | ||||
|      * @param password    the user's password | ||||
|      * @param user the user who removes the item from hold | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRef the nodeRef of the item to be removed from hold | ||||
|      * @param holdNodeRef the hold node ref | ||||
|      * @return The error message | ||||
|      */ | ||||
|     public String removeFromHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String | ||||
|             holdNodeRef) | ||||
|     { | ||||
|         final HttpResponse httpResponse = removeItemsFromHolds(user, password, expectedStatus, Collections.singletonList(itemNodeRef), | ||||
|                 Collections.singletonList(holdNodeRef)); | ||||
|     public String removeFromHoldAndGetMessage( | ||||
|             String user, | ||||
|             String password, | ||||
|             int expectedStatus, | ||||
|             String itemNodeRef, | ||||
|             String holdNodeRef) { | ||||
|         final HttpResponse httpResponse = | ||||
|                 removeItemsFromHolds( | ||||
|                         user, | ||||
|                         password, | ||||
|                         expectedStatus, | ||||
|                         Collections.singletonList(itemNodeRef), | ||||
|                         Collections.singletonList(holdNodeRef)); | ||||
|         return APIUtils.extractErrorMessageFromHttpResponse(httpResponse); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      *  Get the list of the available holds which have the item node reference if includedInHold parameter is true, | ||||
|      *   otherwise a list of hold node references will be retrieved which do not include the given node reference. | ||||
|      * Get the list of the available holds which have the item node reference if includedInHold | ||||
|      * parameter is true, otherwise a list of hold node references will be retrieved which do not | ||||
|      * include the given node reference. | ||||
|      * | ||||
|      * @param user     The username of the user to use. | ||||
|      * @param user The username of the user to use. | ||||
|      * @param password The password of the user. | ||||
|      * @param itemNodeRef The item node reference | ||||
|      * @param includedInHold True to retrieve the holds which have the item node reference | ||||
|      * @param fileOnly True if only files should be return | ||||
|      * @return return a list of hold entries | ||||
|      */ | ||||
|     public List<HoldEntry> getHolds(String user, String password, final String itemNodeRef, | ||||
|                                     final Boolean includedInHold, final Boolean fileOnly) | ||||
|     { | ||||
|         final String parameters = (itemNodeRef != null ? "itemNodeRef=" + NODE_REF_WORKSPACE_SPACES_STORE + itemNodeRef  : "") | ||||
|                              + (includedInHold != null ? "&includedInHold=" + includedInHold : "") | ||||
|                              + (fileOnly != null ? "&fileOnly=" + fileOnly : ""); | ||||
|     public List<HoldEntry> getHolds( | ||||
|             String user, | ||||
|             String password, | ||||
|             final String itemNodeRef, | ||||
|             final Boolean includedInHold, | ||||
|             final Boolean fileOnly) { | ||||
|         final String parameters = | ||||
|                 (itemNodeRef != null | ||||
|                                 ? "itemNodeRef=" + NODE_REF_WORKSPACE_SPACES_STORE + itemNodeRef | ||||
|                                 : "") | ||||
|                         + (includedInHold != null ? "&includedInHold=" + includedInHold : "") | ||||
|                         + (fileOnly != null ? "&fileOnly=" + fileOnly : ""); | ||||
|  | ||||
|         final JSONArray holdEntries = doGetRequest(user, password, | ||||
|                 MessageFormat.format(GET_RM_HOLDS, "{0}", parameters)).getJSONObject("data").getJSONArray("holds"); | ||||
|         final JSONArray holdEntries = | ||||
|                 doGetRequest(user, password, MessageFormat.format(GET_RM_HOLDS, "{0}", parameters)) | ||||
|                         .getJSONObject("data") | ||||
|                         .getJSONArray("holds"); | ||||
|  | ||||
|         return PojoUtility.jsonToObject(holdEntries, HoldEntry.class); | ||||
|     } | ||||
|   | ||||
| @@ -25,7 +25,6 @@ | ||||
|  * #L% | ||||
|  */ | ||||
| package org.alfresco.rest.v0; | ||||
| import java.text.MessageFormat; | ||||
|  | ||||
| import org.alfresco.dataprep.AlfrescoHttpClient; | ||||
| import org.alfresco.dataprep.AlfrescoHttpClientFactory; | ||||
| @@ -36,39 +35,38 @@ import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
|  | ||||
| /** | ||||
|  * The v0 REST API for nodes | ||||
|  *  | ||||
|  * | ||||
|  * @author jcule | ||||
|  * @since 2.7EA1 | ||||
|  */ | ||||
| @Component | ||||
| public class NodeAPI extends BaseAPI | ||||
| { | ||||
| public class NodeAPI extends BaseAPI { | ||||
|     /** Logger for the class. */ | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(NodeAPI.class); | ||||
|  | ||||
|     /** The URI for the get node API. */ | ||||
|     private static final String GET_NODE_API = "{0}alfresco/s/slingshot/doclib2/node/{1}"; | ||||
|  | ||||
|     @Autowired | ||||
|     private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|     @Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|  | ||||
|     /** | ||||
|      * Get the node metadata using the using the node data webscript:  Document List v2 Component | ||||
|      *  | ||||
|      * Get the node metadata using the using the node data webscript: Document List v2 Component | ||||
|      * | ||||
|      * @param username | ||||
|      * @param password | ||||
|      * @param nodeId | ||||
|      * @return | ||||
|      */ | ||||
|     public JSONObject getNode(String username, String password, String nodeId) | ||||
|     { | ||||
|     public JSONObject getNode(String username, String password, String nodeId) { | ||||
|         String requestURL; | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         requestURL = MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId); | ||||
|         requestURL = | ||||
|                 MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId); | ||||
|         client.close(); | ||||
|         return doGetRequest(username, password, requestURL); | ||||
|     } | ||||
|      | ||||
| } | ||||
|   | ||||
| @@ -27,9 +27,6 @@ | ||||
|  | ||||
| package org.alfresco.rest.v0; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.text.MessageFormat; | ||||
|  | ||||
| import org.alfresco.dataprep.AlfrescoHttpClient; | ||||
| import org.alfresco.dataprep.AlfrescoHttpClientFactory; | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| @@ -44,21 +41,20 @@ import org.json.simple.JSONValue; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.text.MessageFormat; | ||||
|  | ||||
| /** | ||||
|  * The v0 API to get the node properties | ||||
|  * | ||||
|  * @since AGS 3.4 | ||||
|  */ | ||||
| @Component | ||||
| public class NodePropertiesAPI extends BaseAPI | ||||
| { | ||||
|     /** | ||||
|      * The URI for the get node API. | ||||
|      */ | ||||
| public class NodePropertiesAPI extends BaseAPI { | ||||
|     /** The URI for the get node API. */ | ||||
|     private static final String GET_NODE_API = "{0}alfresco/s/slingshot/node/{1}"; | ||||
|  | ||||
|     @Autowired | ||||
|     private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|     @Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|  | ||||
|     /** | ||||
|      * Get the node properties | ||||
| @@ -66,26 +62,24 @@ public class NodePropertiesAPI extends BaseAPI | ||||
|      * @param username | ||||
|      * @param password | ||||
|      * @param nodeId | ||||
|      * @return JSONArray  object | ||||
|      * @return JSONArray object | ||||
|      */ | ||||
|     protected JSONArray getNodeProperties(String username, String password, String nodeId) | ||||
|     { | ||||
|     protected JSONArray getNodeProperties(String username, String password, String nodeId) { | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         String requestURL = MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId); | ||||
|         String requestURL = | ||||
|                 MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId); | ||||
|  | ||||
|         // doRequest from BaseAPI cannot be used as  parsing the  response body to org.json.JSONObject is throwing an | ||||
|         // doRequest from BaseAPI cannot be used as  parsing the  response body to | ||||
|         // org.json.JSONObject is throwing an | ||||
|         // JSONException | ||||
|         // construct a get request | ||||
|         HttpGet get = new HttpGet(requestURL); | ||||
|         HttpResponse response = client.execute(username, password, get); | ||||
|         HttpEntity entity = response.getEntity(); | ||||
|         String responseString; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             responseString = EntityUtils.toString(entity, "UTF-8"); | ||||
|         } | ||||
|         catch (IOException e) | ||||
|         { | ||||
|         } catch (IOException e) { | ||||
|             throw new IllegalArgumentException("Failed to read the response", e); | ||||
|         } | ||||
|         client.close(); | ||||
| @@ -101,11 +95,9 @@ public class NodePropertiesAPI extends BaseAPI | ||||
|      * @param nodeId | ||||
|      * @return Return the content url string | ||||
|      */ | ||||
|     public String getContentUrl(UserModel userModel, String nodeId) | ||||
|     { | ||||
|     public String getContentUrl(UserModel userModel, String nodeId) { | ||||
|         String contentProperty = getContentProperty(userModel, nodeId); | ||||
|         if (contentProperty != null) | ||||
|         { | ||||
|         if (contentProperty != null) { | ||||
|             // get the first element before the first | | ||||
|             // e.g.  "contentUrl=s3://-system-/fc077fe8-1742-4c45-a153-8309c857996b | ||||
|             // .bin|mimetype=text/plain|size=19|encoding=ISO-8859-2|locale=en_US_|id=508" | ||||
| @@ -122,16 +114,14 @@ public class NodePropertiesAPI extends BaseAPI | ||||
|      * @param nodeId | ||||
|      * @return Return the content property string | ||||
|      */ | ||||
|     public String getContentProperty(UserModel userModel, String nodeId) | ||||
|     { | ||||
|         JSONArray properties = getNodeProperties(userModel.getUsername(), userModel.getPassword(), nodeId); | ||||
|     public String getContentProperty(UserModel userModel, String nodeId) { | ||||
|         JSONArray properties = | ||||
|                 getNodeProperties(userModel.getUsername(), userModel.getPassword(), nodeId); | ||||
|  | ||||
|         for (int i = 0; i < properties.size(); i++) | ||||
|         { | ||||
|         for (int i = 0; i < properties.size(); i++) { | ||||
|             JSONObject object = (JSONObject) properties.get(i); | ||||
|             JSONArray valuesArray = (JSONArray) object.get("values"); | ||||
|             if (valuesArray.toString().contains("contentUrl")) | ||||
|             { | ||||
|             if (valuesArray.toString().contains("contentUrl")) { | ||||
|                 return ((JSONObject) valuesArray.get(0)).get("value").toString(); | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -28,11 +28,6 @@ package org.alfresco.rest.v0; | ||||
|  | ||||
| import static org.testng.Assert.assertTrue; | ||||
|  | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URLEncoder; | ||||
| import java.text.MessageFormat; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.alfresco.rest.rm.community.model.audit.AuditEntry; | ||||
| import org.alfresco.rest.rm.community.util.PojoUtility; | ||||
| @@ -42,6 +37,11 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URLEncoder; | ||||
| import java.text.MessageFormat; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * The v0 REST API for rm audit logs | ||||
|  * | ||||
| @@ -49,37 +49,42 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 2.7 | ||||
|  */ | ||||
| @Component | ||||
| public class RMAuditAPI extends BaseAPI | ||||
| { | ||||
| public class RMAuditAPI extends BaseAPI { | ||||
|     /** Logger for the class. */ | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(RMAuditAPI.class); | ||||
|  | ||||
|     /** The URI for the audit API. */ | ||||
|     private static final String RM_AUDIT_API = "{0}rma/admin/rmauditlog"; | ||||
|  | ||||
|     private static final String RM_AUDIT_LOG_API = RM_AUDIT_API + "?{1}"; | ||||
|  | ||||
|     /** | ||||
|      * Returns a list of rm audit entries . | ||||
|      * | ||||
|      * @param user     The username of the user to use. | ||||
|      * @param user The username of the user to use. | ||||
|      * @param password The password of the user. | ||||
|      * @param size     Maximum number of log entries to return | ||||
|      * @param event    The name of audit event to be retrieved | ||||
|      * @param size Maximum number of log entries to return | ||||
|      * @param event The name of audit event to be retrieved | ||||
|      * @return return Only return log entries matching this event | ||||
|      */ | ||||
|     public List<AuditEntry> getRMAuditLog(String user, String password, final int size, final String event) | ||||
|     { | ||||
|     public List<AuditEntry> getRMAuditLog( | ||||
|             String user, String password, final int size, final String event) { | ||||
|         String parameters = null; | ||||
|         try | ||||
|         { | ||||
|             parameters = "size=" + size + (event != null ? "&event=" + URLEncoder.encode(event, "UTF-8"):""); | ||||
|         } | ||||
|         catch (UnsupportedEncodingException e) | ||||
|         { | ||||
|         try { | ||||
|             parameters = | ||||
|                     "size=" | ||||
|                             + size | ||||
|                             + (event != null ? "&event=" + URLEncoder.encode(event, "UTF-8") : ""); | ||||
|         } catch (UnsupportedEncodingException e) { | ||||
|             LOGGER.error("Unable to encode the event name {}", e.getMessage()); | ||||
|         } | ||||
|         JSONArray auditEntries =  doGetRequest(user, password, | ||||
|                 MessageFormat.format(RM_AUDIT_LOG_API,"{0}", parameters)).getJSONObject("data").getJSONArray("entries"); | ||||
|         JSONArray auditEntries = | ||||
|                 doGetRequest( | ||||
|                                 user, | ||||
|                                 password, | ||||
|                                 MessageFormat.format(RM_AUDIT_LOG_API, "{0}", parameters)) | ||||
|                         .getJSONObject("data") | ||||
|                         .getJSONArray("entries"); | ||||
|  | ||||
|         return PojoUtility.jsonToObject(auditEntries, AuditEntry.class); | ||||
|     } | ||||
| @@ -91,14 +96,12 @@ public class RMAuditAPI extends BaseAPI | ||||
|      * @param password The password of the user. | ||||
|      * @throws AssertionError If the API call didn't clear the audit log. | ||||
|      */ | ||||
|     public void clearAuditLog(String username, String password) | ||||
|     { | ||||
|     public void clearAuditLog(String username, String password) { | ||||
|         JSONObject deleteStatus = doDeleteRequest(username, password, RM_AUDIT_API); | ||||
|  | ||||
|         assertTrue(deleteStatus != null | ||||
|                 //audit clear and login events are returned | ||||
|                 && getRMAuditLog(username, password, 100, null).size() == 2); | ||||
|         assertTrue( | ||||
|                 deleteStatus != null | ||||
|                         // audit clear and login events are returned | ||||
|                         && getRMAuditLog(username, password, 100, null).size() == 2); | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -34,14 +34,6 @@ import static org.testng.AssertJUnit.assertFalse; | ||||
| import static org.testng.AssertJUnit.assertTrue; | ||||
| import static org.testng.AssertJUnit.fail; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.text.MessageFormat; | ||||
| import java.time.Instant; | ||||
| import java.time.ZonedDateTime; | ||||
| import java.util.Arrays; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| import org.alfresco.dataprep.AlfrescoHttpClient; | ||||
| import org.alfresco.dataprep.AlfrescoHttpClientFactory; | ||||
| import org.alfresco.dataprep.UserService; | ||||
| @@ -64,47 +56,54 @@ import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.text.MessageFormat; | ||||
| import java.time.Instant; | ||||
| import java.time.ZonedDateTime; | ||||
| import java.util.Arrays; | ||||
| import java.util.Map; | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * Methods to make API requests using v0 API on RM items (move, update and other actions) including adding users to RM roles | ||||
|  * Methods to make API requests using v0 API on RM items (move, update and other actions) including | ||||
|  * adding users to RM roles | ||||
|  * | ||||
|  * @author Oana Nechiforescu | ||||
|  * @since 2.5 | ||||
|  */ | ||||
| @Component | ||||
| public class RMRolesAndActionsAPI extends BaseAPI | ||||
| { | ||||
| public class RMRolesAndActionsAPI extends BaseAPI { | ||||
|     /** The URI to view the configured roles and capabilities. */ | ||||
|     private static final String RM_ROLES = "{0}rma/admin/rmroles"; | ||||
|     /** The URI for REST requests about a particular configured role. */ | ||||
|     private static final String RM_ROLES_ROLE = RM_ROLES + "/{1}"; | ||||
|     private static final String RM_ROLES_AUTHORITIES = "{0}rm/roles/{1}/authorities/{2}?alf_ticket={3}"; | ||||
|  | ||||
|     private static final String RM_ROLES_AUTHORITIES = | ||||
|             "{0}rm/roles/{1}/authorities/{2}?alf_ticket={3}"; | ||||
|  | ||||
|     // logger | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(RMRolesAndActionsAPI.class); | ||||
|     private static final String MOVE_ACTIONS_API = "action/rm-move-to/site/rm/documentLibrary/{0}"; | ||||
|  | ||||
|     /** http client factory */ | ||||
|     @Autowired | ||||
|     private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|     @Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|  | ||||
|     /** user service */ | ||||
|     @Autowired | ||||
|     private UserService userService; | ||||
|     @Autowired private UserService userService; | ||||
|  | ||||
|     @Autowired | ||||
|     private DataUserAIS dataUser; | ||||
|     @Autowired private DataUserAIS dataUser; | ||||
|     /** | ||||
|      * Get all the configured RM roles. | ||||
|      * | ||||
|      * @param adminUser The RM admin user. | ||||
|      * @param adminPassword The password of the user. | ||||
|      * @return The RM roles in the system (Note that this will be the internal names, not the display labels). | ||||
|      * @return The RM roles in the system (Note that this will be the internal names, not the | ||||
|      *     display labels). | ||||
|      */ | ||||
|     public Set<String> getConfiguredRoles(String adminUser, String adminPassword) | ||||
|     { | ||||
|     public Set<String> getConfiguredRoles(String adminUser, String adminPassword) { | ||||
|         // Using "is=true" includes the in-place readers and writers. | ||||
|         final JSONObject jsonObject = doGetRequest(adminUser, adminPassword, RM_ROLES + "?is=true").getJSONObject( | ||||
|                 "data"); | ||||
|         final JSONObject jsonObject = | ||||
|                 doGetRequest(adminUser, adminPassword, RM_ROLES + "?is=true").getJSONObject("data"); | ||||
|         return jsonObject.toMap().keySet(); | ||||
|     } | ||||
|  | ||||
| @@ -116,24 +115,25 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|      * @param role The role to get capabilities for. | ||||
|      * @return The set of system names for the capabilities. | ||||
|      */ | ||||
|     public Set<String> getCapabilitiesForRole(String adminUser, String adminPassword, String role) | ||||
|     { | ||||
|         final JSONObject jsonObject = doGetRequest(adminUser, adminPassword, RM_ROLES + "?is=true").getJSONObject( | ||||
|                 "data"); | ||||
|         assertTrue("Could not find role '" + role + "' in " + jsonObject.keySet(), jsonObject.has(role)); | ||||
|     public Set<String> getCapabilitiesForRole(String adminUser, String adminPassword, String role) { | ||||
|         final JSONObject jsonObject = | ||||
|                 doGetRequest(adminUser, adminPassword, RM_ROLES + "?is=true").getJSONObject("data"); | ||||
|         assertTrue( | ||||
|                 "Could not find role '" + role + "' in " + jsonObject.keySet(), | ||||
|                 jsonObject.has(role)); | ||||
|         return jsonObject.getJSONObject(role).getJSONObject("capabilities").keySet(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Creates the body for PUT/POST Roles API requests | ||||
|      * | ||||
|      * @param roleName         the role name | ||||
|      * @param roleName the role name | ||||
|      * @param roleDisplayLabel a human-readable label for the role | ||||
|      * @param capabilities     a list of capabilities for the role | ||||
|      * @param capabilities a list of capabilities for the role | ||||
|      * @return | ||||
|      */ | ||||
|     private JSONObject roleRequestBody(String roleName, String roleDisplayLabel, Set<String> capabilities) | ||||
|     { | ||||
|     private JSONObject roleRequestBody( | ||||
|             String roleName, String roleDisplayLabel, Set<String> capabilities) { | ||||
|         final JSONObject requestBody = new JSONObject(); | ||||
|         requestBody.put("name", roleName); | ||||
|         requestBody.put("displayLabel", roleDisplayLabel); | ||||
| @@ -152,9 +152,17 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|      * @param roleDisplayLabel A human-readable label for the role. | ||||
|      * @param capabilities A list of capabilities for the role. | ||||
|      */ | ||||
|     public void createRole(String adminUser, String adminPassword, String roleName, String roleDisplayLabel, Set<String> capabilities) | ||||
|     { | ||||
|         doPostJsonRequest(adminUser, adminPassword, HttpStatus.SC_OK, roleRequestBody(roleName, roleDisplayLabel, capabilities), | ||||
|     public void createRole( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             String roleName, | ||||
|             String roleDisplayLabel, | ||||
|             Set<String> capabilities) { | ||||
|         doPostJsonRequest( | ||||
|                 adminUser, | ||||
|                 adminPassword, | ||||
|                 HttpStatus.SC_OK, | ||||
|                 roleRequestBody(roleName, roleDisplayLabel, capabilities), | ||||
|                 RM_ROLES); | ||||
|     } | ||||
|  | ||||
| @@ -167,10 +175,19 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|      * @param roleDisplayLabel A human-readable label for the role. | ||||
|      * @param capabilities A list of capabilities for the role. | ||||
|      */ | ||||
|     public void updateRole(String adminUser, String adminPassword, String roleName, String roleDisplayLabel, Set<String> capabilities) | ||||
|     { | ||||
|         doPutJsonRequest(adminUser, adminPassword, HttpStatus.SC_OK, roleRequestBody(roleName, roleDisplayLabel, capabilities), | ||||
|                 RM_ROLES_ROLE, roleName); | ||||
|     public void updateRole( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             String roleName, | ||||
|             String roleDisplayLabel, | ||||
|             Set<String> capabilities) { | ||||
|         doPutJsonRequest( | ||||
|                 adminUser, | ||||
|                 adminPassword, | ||||
|                 HttpStatus.SC_OK, | ||||
|                 roleRequestBody(roleName, roleDisplayLabel, capabilities), | ||||
|                 RM_ROLES_ROLE, | ||||
|                 roleName); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -180,27 +197,19 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|      * @param adminPassword The password for the admin user. | ||||
|      * @param roleName The name of the role to be deleted. | ||||
|      */ | ||||
|     public void deleteRole(String adminUser, String adminPassword, String roleName) | ||||
|     { | ||||
|         doDeleteRequest(adminUser, adminPassword, MessageFormat.format(RM_ROLES_ROLE, "{0}", roleName)); | ||||
|         assertFalse("Failed to delete role " + roleName + " with " + adminUser, | ||||
|     public void deleteRole(String adminUser, String adminPassword, String roleName) { | ||||
|         doDeleteRequest( | ||||
|                 adminUser, adminPassword, MessageFormat.format(RM_ROLES_ROLE, "{0}", roleName)); | ||||
|         assertFalse( | ||||
|                 "Failed to delete role " + roleName + " with " + adminUser, | ||||
|                 getConfiguredRoles(adminUser, adminPassword).contains(roleName)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * create user and assign to records management role | ||||
|      */ | ||||
|     /** create user and assign to records management role */ | ||||
|     public void createUserAndAssignToRole( | ||||
|             String adminUser, | ||||
|             String adminPassword, | ||||
|             String userName, | ||||
|             String password, | ||||
|             String role) | ||||
|     { | ||||
|         if (!userService.userExists(adminUser, adminPassword, userName)) | ||||
|         { | ||||
|             String adminUser, String adminPassword, String userName, String password, String role) { | ||||
|         if (!userService.userExists(adminUser, adminPassword, userName)) { | ||||
|             dataUser.createUser(userName, password); | ||||
|  | ||||
|         } | ||||
|         assignRoleToUser(adminUser, adminPassword, userName, role); | ||||
|     } | ||||
| @@ -210,54 +219,55 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|      * | ||||
|      * @throws AssertionError if the assignation is unsuccessful. | ||||
|      */ | ||||
|     public void assignRoleToUser(String adminUser, String adminPassword, String userName, String role) | ||||
|     { | ||||
|     public void assignRoleToUser( | ||||
|             String adminUser, String adminPassword, String userName, String role) { | ||||
|         final AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         final String reqURL = MessageFormat.format( | ||||
|                 RM_ROLES_AUTHORITIES, | ||||
|                 client.getApiUrl(), | ||||
|                 role, | ||||
|                 userName, | ||||
|                 client.getAlfTicket(adminUser, adminPassword)); | ||||
|         final String reqURL = | ||||
|                 MessageFormat.format( | ||||
|                         RM_ROLES_AUTHORITIES, | ||||
|                         client.getApiUrl(), | ||||
|                         role, | ||||
|                         userName, | ||||
|                         client.getAlfTicket(adminUser, adminPassword)); | ||||
|  | ||||
|         HttpPost request = null; | ||||
|         HttpResponse response; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             request = new HttpPost(reqURL); | ||||
|             response = client.execute(adminUser, adminPassword, request); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             if (request != null) | ||||
|             { | ||||
|         } finally { | ||||
|             if (request != null) { | ||||
|                 request.releaseConnection(); | ||||
|             } | ||||
|             client.close(); | ||||
|         } | ||||
|         assertEquals("Assigning role " + role + " to user " + userName + " failed.", SC_OK, | ||||
|                     response.getStatusLine().getStatusCode()); | ||||
|         assertEquals( | ||||
|                 "Assigning role " + role + " to user " + userName + " failed.", | ||||
|                 SC_OK, | ||||
|                 response.getStatusLine().getStatusCode()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Move action | ||||
|      * | ||||
|      * @param user            the user to move the contentPath | ||||
|      * @param password        the user's password | ||||
|      * @param contentPath     path to the content to be moved | ||||
|      * @param user the user to move the contentPath | ||||
|      * @param password the user's password | ||||
|      * @param contentPath path to the content to be moved | ||||
|      * @param destinationPath destination path | ||||
|      * @throws AssertionError if the move was unsuccessful. | ||||
|      */ | ||||
|     public void moveTo(String user, String password, String contentPath, String destinationPath) | ||||
|     { | ||||
|         String contentNodeRef = getNodeRefSpacesStore() + getItemNodeRef(user, password, contentPath); | ||||
|     public void moveTo(String user, String password, String contentPath, String destinationPath) { | ||||
|         String contentNodeRef = | ||||
|                 getNodeRefSpacesStore() + getItemNodeRef(user, password, contentPath); | ||||
|         AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject(); | ||||
|         String url = MessageFormat.format(client.getAlfrescoUrl() + "alfresco/s/slingshot/doclib/" + MOVE_ACTIONS_API, destinationPath); | ||||
|         String url = | ||||
|                 MessageFormat.format( | ||||
|                         client.getAlfrescoUrl() + "alfresco/s/slingshot/doclib/" + MOVE_ACTIONS_API, | ||||
|                         destinationPath); | ||||
|         HttpPost request = new HttpPost(url); | ||||
|  | ||||
|         boolean success = false; | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             JSONObject body = new JSONObject(); | ||||
|             body.put("nodeRefs", new JSONArray(Arrays.asList(contentNodeRef))); | ||||
|             StringEntity se = new StringEntity(body.toString(), AlfrescoHttpClient.UTF_8_ENCODING); | ||||
| @@ -265,8 +275,7 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|             request.setEntity(se); | ||||
|  | ||||
|             HttpResponse response = client.execute(user, password, request); | ||||
|             switch (response.getStatusLine().getStatusCode()) | ||||
|             { | ||||
|             switch (response.getStatusLine().getStatusCode()) { | ||||
|                 case HttpStatus.SC_OK: | ||||
|                     JSONObject json = new JSONObject(EntityUtils.toString(response.getEntity())); | ||||
|                     success = (Boolean) json.get("overallSuccess"); | ||||
| @@ -278,15 +287,10 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|                     LOGGER.error("Unable to move: " + response.toString()); | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|         catch (JSONException | IOException e) | ||||
|         { | ||||
|         } catch (JSONException | IOException e) { | ||||
|             LOGGER.error(e.toString()); | ||||
|         } | ||||
|         finally | ||||
|         { | ||||
|             if (request != null) | ||||
|             { | ||||
|         } finally { | ||||
|             if (request != null) { | ||||
|                 request.releaseConnection(); | ||||
|             } | ||||
|             client.close(); | ||||
| @@ -298,20 +302,17 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Move action | ||||
|      * | ||||
|      * @param user            the user to move the contentPath | ||||
|      * @param password        the user's password | ||||
|      * @param contentPath     path to the content to be moved | ||||
|      * @param user the user to move the contentPath | ||||
|      * @param password the user's password | ||||
|      * @param contentPath path to the content to be moved | ||||
|      * @param destinationPath destination path | ||||
|      * @throws AssertionError if the move was unexpectedly successful. | ||||
|      */ | ||||
|     public void moveToAndExpectFailure(String user, String password, String contentPath, String destinationPath) | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|     public void moveToAndExpectFailure( | ||||
|             String user, String password, String contentPath, String destinationPath) { | ||||
|         try { | ||||
|             moveTo(user, password, contentPath, destinationPath); | ||||
|         } | ||||
|         catch(AssertionError e) | ||||
|         { | ||||
|         } catch (AssertionError e) { | ||||
|             // We are expecting the move to fail. | ||||
|             return; | ||||
|         } | ||||
| @@ -321,62 +322,68 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Perform an action on the given content | ||||
|      * | ||||
|      * @param user        the user executing the action | ||||
|      * @param password    the user's password | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param contentName the content name | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse executeAction(String user, String password, String contentName, RM_ACTIONS action) | ||||
|     { | ||||
|     public HttpResponse executeAction( | ||||
|             String user, String password, String contentName, RM_ACTIONS action) { | ||||
|         return executeAction(user, password, contentName, action, null, SC_OK); | ||||
|     } | ||||
|     /** | ||||
|      * Perform an action on the given content | ||||
|      * | ||||
|      * @param user        the user executing the action | ||||
|      * @param password    the user's password | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param contentName the content name | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse executeActionAndExpectResponseCode(String user, String password, String contentName, RM_ACTIONS action, | ||||
|                                                            int status) | ||||
|     { | ||||
|     public HttpResponse executeActionAndExpectResponseCode( | ||||
|             String user, String password, String contentName, RM_ACTIONS action, int status) { | ||||
|         return executeAction(user, password, contentName, action, null, status); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Perform an action on the given content | ||||
|      * | ||||
|      * @param user        the user executing the action | ||||
|      * @param password    the user's password | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param contentName the content name | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse executeAction(String user, String password, String contentName, RM_ACTIONS action, | ||||
|                                       ZonedDateTime date) | ||||
|     { | ||||
|     public HttpResponse executeAction( | ||||
|             String user, | ||||
|             String password, | ||||
|             String contentName, | ||||
|             RM_ACTIONS action, | ||||
|             ZonedDateTime date) { | ||||
|         return executeAction(user, password, contentName, action, date, SC_OK); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Creates the body for Actions API requests | ||||
|      * | ||||
|      * @param user          the user executing the action | ||||
|      * @param password      the user's password | ||||
|      * @param contentName   the content on which the action is executed | ||||
|      * @param action        the action executed | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param contentName the content on which the action is executed | ||||
|      * @param action the action executed | ||||
|      * @param actionsParams the request parameters | ||||
|      * @return the JSONObject created | ||||
|      */ | ||||
|     private JSONObject actionsRequestBody(String user, String password, String contentName, RM_ACTIONS action, | ||||
|                                           JSONObject actionsParams) | ||||
|     { | ||||
|         final String recNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, RM_SITE_ID, contentName); | ||||
|     private JSONObject actionsRequestBody( | ||||
|             String user, | ||||
|             String password, | ||||
|             String contentName, | ||||
|             RM_ACTIONS action, | ||||
|             JSONObject actionsParams) { | ||||
|         final String recNodeRef = | ||||
|                 getNodeRefSpacesStore() | ||||
|                         + contentService.getNodeRef(user, password, RM_SITE_ID, contentName); | ||||
|         final JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("name", action.getAction()); | ||||
|         requestParams.put("nodeRef", recNodeRef); | ||||
|         if (actionsParams != null) | ||||
|         { | ||||
|         if (actionsParams != null) { | ||||
|             requestParams.put("params", actionsParams); | ||||
|         } | ||||
|         return requestParams; | ||||
| @@ -385,102 +392,143 @@ public class RMRolesAndActionsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Perform an action on the record folder | ||||
|      * | ||||
|      * @param user        the user executing the action | ||||
|      * @param password    the user's password | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param contentName the content name | ||||
|      * @param date        the date to be updated | ||||
|      * @param date the date to be updated | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse executeAction(String user, String password, String contentName, RM_ACTIONS action, | ||||
|                                       ZonedDateTime date, int status) | ||||
|     { | ||||
|     public HttpResponse executeAction( | ||||
|             String user, | ||||
|             String password, | ||||
|             String contentName, | ||||
|             RM_ACTIONS action, | ||||
|             ZonedDateTime date, | ||||
|             int status) { | ||||
|         final JSONObject actionParams = new JSONObject(); | ||||
|         if (date != null) | ||||
|         { | ||||
|             actionParams.put("asOfDate", new JSONObject().put("iso8601", ISO_INSTANT_FORMATTER.format(date))); | ||||
|         if (date != null) { | ||||
|             actionParams.put( | ||||
|                     "asOfDate", | ||||
|                     new JSONObject().put("iso8601", ISO_INSTANT_FORMATTER.format(date))); | ||||
|         } | ||||
|         final JSONObject requestParams = actionsRequestBody(user, password, contentName, action, actionParams); | ||||
|         final JSONObject requestParams = | ||||
|                 actionsRequestBody(user, password, contentName, action, actionParams); | ||||
|         return doPostJsonRequest(user, password, status, requestParams, RM_ACTIONS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Complete an event on the record/record folder | ||||
|      * | ||||
|      * @param user        the user executing the action | ||||
|      * @param password    the user's password | ||||
|      * @param nodeName    the node name | ||||
|      * @param event       the event to be completed | ||||
|      * @param date        the date to be updated | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param nodeName the node name | ||||
|      * @param event the event to be completed | ||||
|      * @param date the date to be updated | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse completeEvent(String user, String password, String nodeName, RMEvents event, Instant date) | ||||
|     { | ||||
|     public HttpResponse completeEvent( | ||||
|             String user, String password, String nodeName, RMEvents event, Instant date) { | ||||
|         date = (date != null) ? date : Instant.now(); | ||||
|         final JSONObject actionParams = new JSONObject().put("eventName", event.getEventName()) | ||||
|                                                         .put("eventCompletedBy", user) | ||||
|                                                         .put("eventCompletedAt", new JSONObject() | ||||
|                                                                 .put("iso8601", ISO_INSTANT_FORMATTER.format(date)) | ||||
|                                                             ); | ||||
|         final JSONObject requestParams = actionsRequestBody(user, password, nodeName, RM_ACTIONS.COMPLETE_EVENT, | ||||
|                 actionParams); | ||||
|         final JSONObject actionParams = | ||||
|                 new JSONObject() | ||||
|                         .put("eventName", event.getEventName()) | ||||
|                         .put("eventCompletedBy", user) | ||||
|                         .put( | ||||
|                                 "eventCompletedAt", | ||||
|                                 new JSONObject() | ||||
|                                         .put("iso8601", ISO_INSTANT_FORMATTER.format(date))); | ||||
|         final JSONObject requestParams = | ||||
|                 actionsRequestBody( | ||||
|                         user, password, nodeName, RM_ACTIONS.COMPLETE_EVENT, actionParams); | ||||
|         return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Undo an event on the record/record folder | ||||
|      * | ||||
|      * @param user        the user executing the action | ||||
|      * @param password    the user's password | ||||
|      * @param user the user executing the action | ||||
|      * @param password the user's password | ||||
|      * @param contentName the content name | ||||
|      * @param event       the event to be undone | ||||
|      * @param event the event to be undone | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse undoEvent(String user, String password, String contentName, RMEvents event) | ||||
|     { | ||||
|         final JSONObject requestParams = actionsRequestBody(user, password, contentName, RM_ACTIONS.UNDO_EVENT, | ||||
|                 new JSONObject().put("eventName", event.getEventName())); | ||||
|     public HttpResponse undoEvent( | ||||
|             String user, String password, String contentName, RMEvents event) { | ||||
|         final JSONObject requestParams = | ||||
|                 actionsRequestBody( | ||||
|                         user, | ||||
|                         password, | ||||
|                         contentName, | ||||
|                         RM_ACTIONS.UNDO_EVENT, | ||||
|                         new JSONObject().put("eventName", event.getEventName())); | ||||
|         return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Deletes every item in the given container | ||||
|      * | ||||
|      * @param username      the user's username | ||||
|      * @param password      its password | ||||
|      * @param siteId        the site id in which the container is located | ||||
|      * @param username the user's username | ||||
|      * @param password its password | ||||
|      * @param siteId the site id in which the container is located | ||||
|      * @param containerName the container to look for items into | ||||
|      * @throws AssertionError if not all items could be deleted. | ||||
|      */ | ||||
|     public void deleteAllItemsInContainer(String username, String password, String siteId, String containerName) | ||||
|     { | ||||
|         for (CmisObject item : contentService.getFolderObject(contentService.getCMISSession(username, password), siteId, containerName).getChildren()) | ||||
|         { | ||||
|     public void deleteAllItemsInContainer( | ||||
|             String username, String password, String siteId, String containerName) { | ||||
|         for (CmisObject item : | ||||
|                 contentService | ||||
|                         .getFolderObject( | ||||
|                                 contentService.getCMISSession(username, password), | ||||
|                                 siteId, | ||||
|                                 containerName) | ||||
|                         .getChildren()) { | ||||
|             item.delete(); | ||||
|         } | ||||
|         assertFalse("Not all items were deleted from " + containerName, | ||||
|                 contentService.getFolderObject(contentService.getCMISSession(username, password), siteId, containerName).getChildren().getHasMoreItems()); | ||||
|         assertFalse( | ||||
|                 "Not all items were deleted from " + containerName, | ||||
|                 contentService | ||||
|                         .getFolderObject( | ||||
|                                 contentService.getCMISSession(username, password), | ||||
|                                 siteId, | ||||
|                                 containerName) | ||||
|                         .getChildren() | ||||
|                         .getHasMoreItems()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Updates metadata, can be used on records, folders and categories | ||||
|      * | ||||
|      * @param username    the user updating the item | ||||
|      * @param password    the user's password | ||||
|      * @param username the user updating the item | ||||
|      * @param password the user's password | ||||
|      * @param itemNodeRef the item noderef | ||||
|      * @return The HTTP response. | ||||
|      */ | ||||
|     public HttpResponse updateMetadata(String username, String password, String itemNodeRef, Map<RMProperty, String> properties) | ||||
|     { | ||||
|     public HttpResponse updateMetadata( | ||||
|             String username, | ||||
|             String password, | ||||
|             String itemNodeRef, | ||||
|             Map<RMProperty, String> properties) { | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         addPropertyToRequest(requestParams, "prop_cm_name", properties, RMProperty.NAME); | ||||
|         addPropertyToRequest(requestParams, "prop_cm_title", properties, RMProperty.TITLE); | ||||
|         addPropertyToRequest(requestParams, "prop_cm_description", properties, RMProperty.DESCRIPTION); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "prop_cm_description", properties, RMProperty.DESCRIPTION); | ||||
|         addPropertyToRequest(requestParams, "prop_cm_author", properties, RMProperty.AUTHOR); | ||||
|         addPropertyToRequest(requestParams, "prop_dod_originator", properties, RMProperty.ORIGINATOR); | ||||
|         addPropertyToRequest(requestParams, "prop_dod_originatingOrganization", properties, RMProperty | ||||
|                 .ORIGINATING_ORGANIZATION); | ||||
|         addPropertyToRequest(requestParams, "prop_dod_publicationDate", properties, RMProperty.PUBLICATION_DATE); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "prop_dod_originator", properties, RMProperty.ORIGINATOR); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, | ||||
|                 "prop_dod_originatingOrganization", | ||||
|                 properties, | ||||
|                 RMProperty.ORIGINATING_ORGANIZATION); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "prop_dod_publicationDate", properties, RMProperty.PUBLICATION_DATE); | ||||
|  | ||||
|         return doPostJsonRequest(username, password, SC_OK, requestParams, MessageFormat.format(UPDATE_METADATA_API, "{0}", itemNodeRef)); | ||||
|         return doPostJsonRequest( | ||||
|                 username, | ||||
|                 password, | ||||
|                 SC_OK, | ||||
|                 requestParams, | ||||
|                 MessageFormat.format(UPDATE_METADATA_API, "{0}", itemNodeRef)); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -28,10 +28,6 @@ package org.alfresco.rest.v0; | ||||
|  | ||||
| import static org.apache.http.HttpStatus.SC_OK; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.apache.http.HttpResponse; | ||||
| import org.json.JSONObject; | ||||
| @@ -39,6 +35,10 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Methods to make API requests using v0 API on record categories | ||||
|  * | ||||
| @@ -46,25 +46,24 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 2.5 | ||||
|  */ | ||||
| @Component | ||||
| public class RecordCategoriesAPI extends BaseAPI | ||||
| { | ||||
| public class RecordCategoriesAPI extends BaseAPI { | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(RecordCategoriesAPI.class); | ||||
|     private static final String RM_ACTIONS_API = "{0}rma/actions/ExecutionQueue"; | ||||
|     private static final String DISPOSITION_ACTIONS_API = "{0}node/{1}/dispositionschedule/dispositionactiondefinitions"; | ||||
|     private static final String DISPOSITION_ACTIONS_API = | ||||
|             "{0}node/{1}/dispositionschedule/dispositionactiondefinitions"; | ||||
|     private static final String DISPOSITION_SCHEDULE_API = "{0}node/{1}/dispositionschedule"; | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Creates a retention schedule for the category given as parameter | ||||
|      * | ||||
|      * @param user         the user creating the disposition schedule | ||||
|      * @param password     the user's password | ||||
|      * @param user the user creating the disposition schedule | ||||
|      * @param password the user's password | ||||
|      * @param categoryName the category name to create the retention schedule for | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse createRetentionSchedule(String user, String password, String categoryName) | ||||
|     { | ||||
|         String catNodeRef = getNodeRefSpacesStore() + getItemNodeRef(user, password, "/" + categoryName); | ||||
|     public HttpResponse createRetentionSchedule(String user, String password, String categoryName) { | ||||
|         String catNodeRef = | ||||
|                 getNodeRefSpacesStore() + getItemNodeRef(user, password, "/" + categoryName); | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("name", "createDispositionSchedule"); | ||||
| @@ -81,111 +80,153 @@ public class RecordCategoriesAPI extends BaseAPI | ||||
|      * @param categoryName | ||||
|      * @return the disposition schedule nodeRef | ||||
|      */ | ||||
|     public String getDispositionScheduleNodeRef(String user, String password, String categoryName) | ||||
|     { | ||||
|     public String getDispositionScheduleNodeRef(String user, String password, String categoryName) { | ||||
|         String catNodeRef = NODE_PREFIX + getItemNodeRef(user, password, "/" + categoryName); | ||||
|         JSONObject dispositionSchedule = doGetRequest(user, password, MessageFormat.format(DISPOSITION_SCHEDULE_API, "{0}", catNodeRef)); | ||||
|         return dispositionSchedule.getJSONObject("data").getString("nodeRef").replace(getNodeRefSpacesStore(), ""); | ||||
|         JSONObject dispositionSchedule = | ||||
|                 doGetRequest( | ||||
|                         user, | ||||
|                         password, | ||||
|                         MessageFormat.format(DISPOSITION_SCHEDULE_API, "{0}", catNodeRef)); | ||||
|         return dispositionSchedule | ||||
|                 .getJSONObject("data") | ||||
|                 .getString("nodeRef") | ||||
|                 .replace(getNodeRefSpacesStore(), ""); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sets retention schedule authority and instructions, also if it is applied to records or folders | ||||
|      * Sets retention schedule authority and instructions, also if it is applied to records or | ||||
|      * folders | ||||
|      * | ||||
|      * @param user             the user creating the disposition schedule | ||||
|      * @param password         the user's password | ||||
|      * @param user the user creating the disposition schedule | ||||
|      * @param password the user's password | ||||
|      * @param retentionNodeRef the retention nodeRef | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse setRetentionScheduleGeneralFields(String user, String password, String retentionNodeRef, Map<RETENTION_SCHEDULE, String> retentionProperties, Boolean appliedToRecords) | ||||
|     { | ||||
|     public HttpResponse setRetentionScheduleGeneralFields( | ||||
|             String user, | ||||
|             String password, | ||||
|             String retentionNodeRef, | ||||
|             Map<RETENTION_SCHEDULE, String> retentionProperties, | ||||
|             Boolean appliedToRecords) { | ||||
|         String dispRetentionNodeRef = NODE_PREFIX + retentionNodeRef; | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("prop_rma_dispositionAuthority", getPropertyValue(retentionProperties, RETENTION_SCHEDULE.RETENTION_AUTHORITY)); | ||||
|         requestParams.put("prop_rma_dispositionInstructions", getPropertyValue(retentionProperties, RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS)); | ||||
|         requestParams.put( | ||||
|                 "prop_rma_dispositionAuthority", | ||||
|                 getPropertyValue(retentionProperties, RETENTION_SCHEDULE.RETENTION_AUTHORITY)); | ||||
|         requestParams.put( | ||||
|                 "prop_rma_dispositionInstructions", | ||||
|                 getPropertyValue(retentionProperties, RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS)); | ||||
|         requestParams.put("prop_rma_recordLevelDisposition", appliedToRecords.toString()); | ||||
|         return doPostJsonRequest(user, password, SC_OK, requestParams, MessageFormat.format(UPDATE_METADATA_API, "{0}", dispRetentionNodeRef)); | ||||
|         return doPostJsonRequest( | ||||
|                 user, | ||||
|                 password, | ||||
|                 SC_OK, | ||||
|                 requestParams, | ||||
|                 MessageFormat.format(UPDATE_METADATA_API, "{0}", dispRetentionNodeRef)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Creates a retention schedule steps for the category given as parameter | ||||
|      * | ||||
|      * @param user         the user creating the disposition schedule | ||||
|      * @param password     the user's password | ||||
|      * @param user the user creating the disposition schedule | ||||
|      * @param password the user's password | ||||
|      * @param categoryName the category name to create the retention schedule for | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse addDispositionScheduleSteps(String user, String password, String categoryName, Map<RETENTION_SCHEDULE, String> properties) | ||||
|     { | ||||
|     public HttpResponse addDispositionScheduleSteps( | ||||
|             String user, | ||||
|             String password, | ||||
|             String categoryName, | ||||
|             Map<RETENTION_SCHEDULE, String> properties) { | ||||
|         String catNodeRef = NODE_PREFIX + getItemNodeRef(user, password, "/" + categoryName); | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         addPropertyToRequest(requestParams, "name", properties, RETENTION_SCHEDULE.NAME); | ||||
|         addPropertyToRequest(requestParams, "description", properties, RETENTION_SCHEDULE.DESCRIPTION); | ||||
|         addPropertyToRequest(requestParams, "period", properties, RETENTION_SCHEDULE.RETENTION_PERIOD); | ||||
|         addPropertyToRequest(requestParams, "ghostOnDestroy", properties, RETENTION_SCHEDULE.RETENTION_GHOST); | ||||
|         addPropertyToRequest(requestParams, "periodProperty", properties, RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY); | ||||
|         addPropertyToRequest(requestParams, "location", properties, RETENTION_SCHEDULE.RETENTION_LOCATION); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "description", properties, RETENTION_SCHEDULE.DESCRIPTION); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "period", properties, RETENTION_SCHEDULE.RETENTION_PERIOD); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "ghostOnDestroy", properties, RETENTION_SCHEDULE.RETENTION_GHOST); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, | ||||
|                 "periodProperty", | ||||
|                 properties, | ||||
|                 RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, "location", properties, RETENTION_SCHEDULE.RETENTION_LOCATION); | ||||
|         String events = getPropertyValue(properties, RETENTION_SCHEDULE.RETENTION_EVENTS); | ||||
|         if(!events.equals("")) | ||||
|         { | ||||
|         if (!events.equals("")) { | ||||
|             requestParams.append("events", events); | ||||
|         } | ||||
|         addPropertyToRequest(requestParams, "combineDispositionStepConditions", properties, RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS); | ||||
|         addPropertyToRequest(requestParams, "eligibleOnFirstCompleteEvent", properties, RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, | ||||
|                 "combineDispositionStepConditions", | ||||
|                 properties, | ||||
|                 RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS); | ||||
|         addPropertyToRequest( | ||||
|                 requestParams, | ||||
|                 "eligibleOnFirstCompleteEvent", | ||||
|                 properties, | ||||
|                 RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT); | ||||
|  | ||||
|         return doPostJsonRequest(user, password, SC_OK, requestParams, MessageFormat.format(DISPOSITION_ACTIONS_API, "{0}", catNodeRef)); | ||||
|         return doPostJsonRequest( | ||||
|                 user, | ||||
|                 password, | ||||
|                 SC_OK, | ||||
|                 requestParams, | ||||
|                 MessageFormat.format(DISPOSITION_ACTIONS_API, "{0}", catNodeRef)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Delete a category | ||||
|      * | ||||
|      * @param username     user's username | ||||
|      * @param password     its password | ||||
|      * @param username user's username | ||||
|      * @param password its password | ||||
|      * @param categoryName the name of the category | ||||
|      * @throws AssertionError if the delete was unsuccessful. | ||||
|      */ | ||||
|     public void deleteCategory(String username, String password, String categoryName) | ||||
|     { | ||||
|     public void deleteCategory(String username, String password, String categoryName) { | ||||
|         deleteItem(username, password, "/" + categoryName); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Delete a sub-category | ||||
|      * | ||||
|      * @param username     user's username | ||||
|      * @param password     its password | ||||
|      * @param username user's username | ||||
|      * @param password its password | ||||
|      * @param categoryName the name of the sub-category | ||||
|      * @throws AssertionError if the deletion was unsuccessful. | ||||
|      */ | ||||
|     public void deleteSubCategory(String username, String password, String categoryName, String subCategoryName) | ||||
|     { | ||||
|     public void deleteSubCategory( | ||||
|             String username, String password, String categoryName, String subCategoryName) { | ||||
|         deleteItem(username, password, "/" + categoryName + "/" + subCategoryName); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Delete a folder inside a container in RM site | ||||
|      * | ||||
|      * @param username      user's username | ||||
|      * @param password      its password | ||||
|      * @param folderName    folder name | ||||
|      * @param username user's username | ||||
|      * @param password its password | ||||
|      * @param folderName folder name | ||||
|      * @param containerName the name of the category or container sin which the folder is | ||||
|      * @throws AssertionError if the deletion was unsuccessful. | ||||
|      */ | ||||
|     public void deleteFolderInContainer(String username, String password, String folderName, String containerName) | ||||
|     { | ||||
|     public void deleteFolderInContainer( | ||||
|             String username, String password, String folderName, String containerName) { | ||||
|         deleteItem(username, password, "/" + containerName + "/" + folderName); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Returns a map of retention properties | ||||
|      * | ||||
|      * @param authority    retention authority | ||||
|      * @param authority retention authority | ||||
|      * @param instructions retention authority | ||||
|      * @return the map | ||||
|      */ | ||||
|     public Map<RETENTION_SCHEDULE, String> getRetentionProperties(String authority, String instructions) | ||||
|     { | ||||
|     public Map<RETENTION_SCHEDULE, String> getRetentionProperties( | ||||
|             String authority, String instructions) { | ||||
|         Map<RETENTION_SCHEDULE, String> retentionProperties = new HashMap<>(); | ||||
|         retentionProperties.put(RETENTION_SCHEDULE.RETENTION_AUTHORITY, authority); | ||||
|         retentionProperties.put(RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS, instructions); | ||||
|   | ||||
| @@ -43,32 +43,29 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 2.5 | ||||
|  */ | ||||
| @Component | ||||
| public class RecordFoldersAPI extends BaseAPI | ||||
| { | ||||
| public class RecordFoldersAPI extends BaseAPI { | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(RecordFoldersAPI.class); | ||||
|  | ||||
|     /** | ||||
|      * Close the record folder | ||||
|      * | ||||
|      * @param user         the user closing the folder | ||||
|      * @param password     the user's password | ||||
|      * @param user the user closing the folder | ||||
|      * @param password the user's password | ||||
|      * @param recordFolder the record folder name | ||||
|      * @return The HTTP Response (or null if the response could not be understood). | ||||
|      */ | ||||
|     public HttpResponse closeRecordFolder(String user, String password, String recordFolder) | ||||
|     { | ||||
|         String recNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, RM_SITE_ID, recordFolder); | ||||
|     public HttpResponse closeRecordFolder(String user, String password, String recordFolder) { | ||||
|         String recNodeRef = | ||||
|                 getNodeRefSpacesStore() | ||||
|                         + contentService.getNodeRef(user, password, RM_SITE_ID, recordFolder); | ||||
|  | ||||
|         try | ||||
|         { | ||||
|         try { | ||||
|             JSONObject requestParams = new JSONObject(); | ||||
|             requestParams.put("name", "closeRecordFolder"); | ||||
|             requestParams.put("nodeRef", recNodeRef); | ||||
|  | ||||
|             return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API); | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|         } catch (JSONException error) { | ||||
|             LOGGER.error("Unable to extract response parameter", error); | ||||
|         } | ||||
|         return null; | ||||
|   | ||||
| @@ -29,9 +29,6 @@ package org.alfresco.rest.v0; | ||||
| import static org.apache.http.HttpStatus.SC_OK; | ||||
| import static org.testng.AssertJUnit.assertTrue; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.Map; | ||||
|  | ||||
| import org.alfresco.dataprep.CMISUtil.DocumentType; | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.apache.chemistry.opencmis.client.api.CmisObject; | ||||
| @@ -43,6 +40,9 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.Map; | ||||
|  | ||||
| /** | ||||
|  * Methods to make API requests using v0 API on records | ||||
|  * | ||||
| @@ -50,25 +50,27 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 2.5 | ||||
|  */ | ||||
| @Component | ||||
| public class RecordsAPI extends BaseAPI | ||||
| { | ||||
| public class RecordsAPI extends BaseAPI { | ||||
|     // logger | ||||
|     private static final Logger LOGGER = LoggerFactory.getLogger(RecordsAPI.class); | ||||
|  | ||||
|     private static final String CREATE_NON_ELECTRONIC_RECORD_API = "{0}type/rma:nonElectronicDocument/formprocessor"; | ||||
|     private static final String CREATE_NON_ELECTRONIC_RECORD_API = | ||||
|             "{0}type/rma:nonElectronicDocument/formprocessor"; | ||||
|  | ||||
|     /** | ||||
|      * Declare documents as records | ||||
|      * | ||||
|      * @param user         the user declaring the document as record | ||||
|      * @param password     the user's password | ||||
|      * @param siteID       the site id in which the document exists | ||||
|      * @param user the user declaring the document as record | ||||
|      * @param password the user's password | ||||
|      * @param siteID the site id in which the document exists | ||||
|      * @param documentName the document name | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse declareDocumentAsRecord(String user, String password, String siteID, String documentName) | ||||
|     { | ||||
|         String docNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, siteID, documentName); | ||||
|     public HttpResponse declareDocumentAsRecord( | ||||
|             String user, String password, String siteID, String documentName) { | ||||
|         String docNodeRef = | ||||
|                 getNodeRefSpacesStore() | ||||
|                         + contentService.getNodeRef(user, password, siteID, documentName); | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("actionedUponNode", docNodeRef); | ||||
| @@ -80,14 +82,15 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Completes the record given as parameter | ||||
|      * | ||||
|      * @param user       the user declaring the document as record | ||||
|      * @param password   the user's password | ||||
|      * @param user the user declaring the document as record | ||||
|      * @param password the user's password | ||||
|      * @param recordName the record name | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse completeRecord(String user, String password, String recordName) | ||||
|     { | ||||
|         String recNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, RM_SITE_ID, recordName); | ||||
|     public HttpResponse completeRecord(String user, String password, String recordName) { | ||||
|         String recNodeRef = | ||||
|                 getNodeRefSpacesStore() | ||||
|                         + contentService.getNodeRef(user, password, RM_SITE_ID, recordName); | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("name", "declareRecord"); | ||||
| @@ -99,15 +102,15 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Reject the record given as parameter | ||||
|      * | ||||
|      * @param user       the user declaring the document as record | ||||
|      * @param password   the user's password | ||||
|      * @param user the user declaring the document as record | ||||
|      * @param password the user's password | ||||
|      * @param recordName the record name | ||||
|      * @param reason     reject reason | ||||
|      * @param reason reject reason | ||||
|      * @return The HTTP Response. | ||||
|      * @throws AssertionError If the POST call is not successful. | ||||
|      */ | ||||
|     public HttpResponse rejectRecord(String user, String password, String recordName, String reason) | ||||
|     { | ||||
|     public HttpResponse rejectRecord( | ||||
|             String user, String password, String recordName, String reason) { | ||||
|         return rejectRecord(user, password, SC_OK, recordName, reason); | ||||
|     } | ||||
|  | ||||
| @@ -122,15 +125,20 @@ public class RecordsAPI extends BaseAPI | ||||
|      * @return The HTTP Response. | ||||
|      * @throws AssertionError If the expectedStatusCode was not returned. | ||||
|      */ | ||||
|     public HttpResponse rejectRecord(String user, String password, int expectedStatusCode, String recordName, String reason) | ||||
|     { | ||||
|         String recNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, RM_SITE_ID, recordName); | ||||
|     public HttpResponse rejectRecord( | ||||
|             String user, | ||||
|             String password, | ||||
|             int expectedStatusCode, | ||||
|             String recordName, | ||||
|             String reason) { | ||||
|         String recNodeRef = | ||||
|                 getNodeRefSpacesStore() | ||||
|                         + contentService.getNodeRef(user, password, RM_SITE_ID, recordName); | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("name", "reject"); | ||||
|         requestParams.put("nodeRef", recNodeRef); | ||||
|         requestParams.put("params",new JSONObject() | ||||
|                     .put("reason",reason)); | ||||
|         requestParams.put("params", new JSONObject().put("reason", reason)); | ||||
|  | ||||
|         return doPostJsonRequest(user, password, expectedStatusCode, requestParams, RM_ACTIONS_API); | ||||
|     } | ||||
| @@ -138,15 +146,17 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Declare document version as record | ||||
|      * | ||||
|      * @param user         the user declaring the document version as record | ||||
|      * @param password     the user's password | ||||
|      * @param siteID       the site id in which the document exists | ||||
|      * @param user the user declaring the document version as record | ||||
|      * @param password the user's password | ||||
|      * @param siteID the site id in which the document exists | ||||
|      * @param documentName the document name | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse declareDocumentVersionAsRecord(String user, String password, String siteID, String documentName) | ||||
|     { | ||||
|         String docNodeRef = getNodeRefSpacesStore() + contentService.getNodeRef(user, password, siteID, documentName); | ||||
|     public HttpResponse declareDocumentVersionAsRecord( | ||||
|             String user, String password, String siteID, String documentName) { | ||||
|         String docNodeRef = | ||||
|                 getNodeRefSpacesStore() | ||||
|                         + contentService.getNodeRef(user, password, siteID, documentName); | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|         requestParams.put("actionedUponNode", docNodeRef); | ||||
| @@ -157,36 +167,46 @@ public class RecordsAPI extends BaseAPI | ||||
|  | ||||
|     /** | ||||
|      * Creates a non-electronic record | ||||
|      * | ||||
|      * <ul> | ||||
|      * <li>eg. of usage for Unfiled records  with folder : createNonElectronicRecord(getAdminName(), getAdminPassword(), properties, UNFILED_RECORDS_BREADCRUMB, "unfiled records folder"); | ||||
|      * <li>eg. of usage for creating record directly in Unfiled Records : createNonElectronicRecord(getAdminName(), getAdminPassword(), properties, UNFILED_RECORDS_BREADCRUMB, ""); | ||||
|      *   <li>eg. of usage for Unfiled records with folder : | ||||
|      *       createNonElectronicRecord(getAdminName(), getAdminPassword(), properties, | ||||
|      *       UNFILED_RECORDS_BREADCRUMB, "unfiled records folder"); | ||||
|      *   <li>eg. of usage for creating record directly in Unfiled Records : | ||||
|      *       createNonElectronicRecord(getAdminName(), getAdminPassword(), properties, | ||||
|      *       UNFILED_RECORDS_BREADCRUMB, ""); | ||||
|      * </ul> | ||||
|      * | ||||
|      * @param username     the username | ||||
|      * @param password     the password | ||||
|      * @param properties   a map of record properties and their values | ||||
|      * @param categoryName the category that contains the record, in the case in which the container would be Unfiled records use UNFILED_RECORDS_BREADCRUMB as value | ||||
|      * @param folderName   the folder inside which the record exists, in the case in which the folder name is "", the record will be created directly in the specified container | ||||
|      *                     this case is useful when trying to create a record directly in Unfiled Records | ||||
|      * @param username the username | ||||
|      * @param password the password | ||||
|      * @param properties a map of record properties and their values | ||||
|      * @param categoryName the category that contains the record, in the case in which the container | ||||
|      *     would be Unfiled records use UNFILED_RECORDS_BREADCRUMB as value | ||||
|      * @param folderName the folder inside which the record exists, in the case in which the folder | ||||
|      *     name is "", the record will be created directly in the specified container this case is | ||||
|      *     useful when trying to create a record directly in Unfiled Records | ||||
|      * @return The HTTP Response (or null if the request was not needed). | ||||
|      */ | ||||
|     public <K extends Enum<?>> HttpResponse createNonElectronicRecord(String username, String password, Map<K, String> properties, String categoryName, String folderName) | ||||
|     { | ||||
|     public <K extends Enum<?>> HttpResponse createNonElectronicRecord( | ||||
|             String username, | ||||
|             String password, | ||||
|             Map<K, String> properties, | ||||
|             String categoryName, | ||||
|             String folderName) { | ||||
|         String recordName = properties.get(RMProperty.NAME); | ||||
|         if (getRecord(username, password, folderName, recordName) != null) | ||||
|         { | ||||
|         if (getRecord(username, password, folderName, recordName) != null) { | ||||
|             return null; | ||||
|         } | ||||
|         String recordPath = "/" + categoryName; | ||||
|         if (!folderName.equals("")) | ||||
|         { | ||||
|         if (!folderName.equals("")) { | ||||
|             recordPath = recordPath + "/" + folderName; | ||||
|         } | ||||
|         // if the record already exists don't try to create it again | ||||
|         CmisObject record = getObjectByPath(username, password, getFilePlanPath() + recordPath + "/" + recordName); | ||||
|         CmisObject record = | ||||
|                 getObjectByPath( | ||||
|                         username, password, getFilePlanPath() + recordPath + "/" + recordName); | ||||
|  | ||||
|         if (record != null) | ||||
|         { | ||||
|         if (record != null) { | ||||
|             return null; | ||||
|         } | ||||
|         // non-electronic properties | ||||
| @@ -214,45 +234,75 @@ public class RecordsAPI extends BaseAPI | ||||
|         requestParams.put("prop_rma_box", box); | ||||
|         requestParams.put("prop_rma_file", file); | ||||
|  | ||||
|         return doPostJsonRequest(username, password, SC_OK, requestParams, CREATE_NON_ELECTRONIC_RECORD_API); | ||||
|         return doPostJsonRequest( | ||||
|                 username, password, SC_OK, requestParams, CREATE_NON_ELECTRONIC_RECORD_API); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Uploads an electronic record | ||||
|      * <p> | ||||
|      * eg. of usage for creating record directly in Unfiled Records : uploadElectronicRecord(getAdminName(), getAdminPassword(), recordPropertiesStringMap, UNFILED_RECORDS_BREADCRUMB, DocumentType.HTML) | ||||
|      * @param username   the username | ||||
|      * @param password   the password | ||||
|      * | ||||
|      * <p>eg. of usage for creating record directly in Unfiled Records : | ||||
|      * uploadElectronicRecord(getAdminName(), getAdminPassword(), recordPropertiesStringMap, | ||||
|      * UNFILED_RECORDS_BREADCRUMB, DocumentType.HTML) | ||||
|      * | ||||
|      * @param username the username | ||||
|      * @param password the password | ||||
|      * @param properties a map of record properties and their values | ||||
|      * @param folderName the folder inside which the record will be created, it needs to have a unique name, as this method doesn't check other containers than the folder name | ||||
|      * @param folderName the folder inside which the record will be created, it needs to have a | ||||
|      *     unique name, as this method doesn't check other containers than the folder name | ||||
|      * @throws AssertionError if the upload was unsuccessful. | ||||
|      */ | ||||
|     public void uploadElectronicRecord(String username, String password, Map<RMProperty, String> properties, String folderName, DocumentType documentType) | ||||
|     { | ||||
|     public void uploadElectronicRecord( | ||||
|             String username, | ||||
|             String password, | ||||
|             Map<RMProperty, String> properties, | ||||
|             String folderName, | ||||
|             DocumentType documentType) { | ||||
|         String recordName = getPropertyValue(properties, RMProperty.NAME); | ||||
|         String recordContent = getPropertyValue(properties, RMProperty.CONTENT); | ||||
|         boolean success = (getRecord(username, password, folderName, recordName) != null) || (contentService.createDocumentInFolder(username, password, RM_SITE_ID, folderName, documentType, recordName, recordContent) != null); | ||||
|         boolean success = | ||||
|                 (getRecord(username, password, folderName, recordName) != null) | ||||
|                         || (contentService.createDocumentInFolder( | ||||
|                                         username, | ||||
|                                         password, | ||||
|                                         RM_SITE_ID, | ||||
|                                         folderName, | ||||
|                                         documentType, | ||||
|                                         recordName, | ||||
|                                         recordContent) | ||||
|                                 != null); | ||||
|         assertTrue("Failed to upload electronic record to " + folderName, success); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Delete a record from the given path | ||||
|      * | ||||
|      * <ul> | ||||
|      * <li>eg. of usage in the case in which the record is inside a folder in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, "unfiled records folder"); | ||||
|      * <li>eg. of usage in the case in which the record is created directly in Unfiled Records : deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", UNFILED_RECORDS_BREADCRUMB, ""); | ||||
|      *   <li>eg. of usage in the case in which the record is inside a folder in Unfiled Records : | ||||
|      *       deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", | ||||
|      *       UNFILED_RECORDS_BREADCRUMB, "unfiled records folder"); | ||||
|      *   <li>eg. of usage in the case in which the record is created directly in Unfiled Records : | ||||
|      *       deleteRecord(getAdminName(), getAdminPassword(), "f1 (2016-1472716888713)", | ||||
|      *       UNFILED_RECORDS_BREADCRUMB, ""); | ||||
|      * </ul> | ||||
|      * @param username     user's username | ||||
|      * @param password     its password | ||||
|      * @param recordName   the record name | ||||
|      * @param categoryName the name of the category in which the folder is, in case of unfiled record, this will have UNFILED_RECORDS_BREADCRUMB as container | ||||
|      * @param folderName   folder name, in case in which trying to delete a record in Unfiled records directly, this will be "" | ||||
|      * | ||||
|      * @param username user's username | ||||
|      * @param password its password | ||||
|      * @param recordName the record name | ||||
|      * @param categoryName the name of the category in which the folder is, in case of unfiled | ||||
|      *     record, this will have UNFILED_RECORDS_BREADCRUMB as container | ||||
|      * @param folderName folder name, in case in which trying to delete a record in Unfiled records | ||||
|      *     directly, this will be "" | ||||
|      * @throws AssertionError If the record could not be deleted. | ||||
|      */ | ||||
|     public void deleteRecord(String username, String password, String recordName, String categoryName, String folderName) | ||||
|     { | ||||
|     public void deleteRecord( | ||||
|             String username, | ||||
|             String password, | ||||
|             String recordName, | ||||
|             String categoryName, | ||||
|             String folderName) { | ||||
|         String recordPath = "/" + categoryName; | ||||
|         if (!folderName.equals("")) | ||||
|         { | ||||
|         if (!folderName.equals("")) { | ||||
|             recordPath = recordPath + "/" + folderName; | ||||
|         } | ||||
|         deleteItem(username, password, recordPath + "/" + recordName); | ||||
| @@ -261,18 +311,22 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Retrieves the record object in case it exists | ||||
|      * | ||||
|      * @param username   the user's username | ||||
|      * @param password   its password | ||||
|      * @param username the user's username | ||||
|      * @param password its password | ||||
|      * @param folderName the folder in which the record is supposed to exist | ||||
|      * @param recordName the String with which the record name starts | ||||
|      * @return the record object in case it exists, null otherwise | ||||
|      */ | ||||
|     private CmisObject getRecord(String username, String password, String folderName, String recordName) | ||||
|     { | ||||
|         for (CmisObject record : contentService.getFolderObject(contentService.getCMISSession(username, password), RM_SITE_ID, folderName).getChildren()) | ||||
|         { | ||||
|             if (record.getName().startsWith(recordName)) | ||||
|             { | ||||
|     private CmisObject getRecord( | ||||
|             String username, String password, String folderName, String recordName) { | ||||
|         for (CmisObject record : | ||||
|                 contentService | ||||
|                         .getFolderObject( | ||||
|                                 contentService.getCMISSession(username, password), | ||||
|                                 RM_SITE_ID, | ||||
|                                 folderName) | ||||
|                         .getChildren()) { | ||||
|             if (record.getName().startsWith(recordName)) { | ||||
|                 return record; | ||||
|             } | ||||
|         } | ||||
| @@ -282,44 +336,43 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Retrieves record full name for given partial name | ||||
|      * | ||||
|      * @param username          the user's username | ||||
|      * @param password          its password | ||||
|      * @param folderName        the folder in which the record is supposed to exist | ||||
|      * @param username the user's username | ||||
|      * @param password its password | ||||
|      * @param folderName the folder in which the record is supposed to exist | ||||
|      * @param recordPartialName the String with which the record name starts | ||||
|      * @return the record name in case it exists, empty String otherwise | ||||
|      */ | ||||
|     public String getRecordFullName(String username, String password, String folderName, String recordPartialName) | ||||
|     { | ||||
|     public String getRecordFullName( | ||||
|             String username, String password, String folderName, String recordPartialName) { | ||||
|         CmisObject record = getRecord(username, password, folderName, recordPartialName); | ||||
|         if (record != null) | ||||
|         { | ||||
|         if (record != null) { | ||||
|             return record.getName(); | ||||
|         } | ||||
|         return ""; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     /** | ||||
|      * Share a document | ||||
|      * | ||||
|      * @param user     the user sharing the file | ||||
|      * @param user the user sharing the file | ||||
|      * @param password the user's password | ||||
|      * @param nodeId   the node id of the file | ||||
|      * @return {@link Pair}. on success will be true and the shareId. | ||||
|      * on failure will be false and the response status code. | ||||
|      * @param nodeId the node id of the file | ||||
|      * @return {@link Pair}. on success will be true and the shareId. on failure will be false and | ||||
|      *     the response status code. | ||||
|      */ | ||||
|     public Pair<Boolean, String> shareDocument(String user, String password, String nodeId) throws JSONException | ||||
|     { | ||||
|         JSONObject response = doPostRequest(user, password, null, | ||||
|                 MessageFormat.format(SHARE_ACTION_API, "{0}", nodeId)); | ||||
|         try | ||||
|         { | ||||
|             if (response.has("sharedId")) | ||||
|             { | ||||
|     public Pair<Boolean, String> shareDocument(String user, String password, String nodeId) | ||||
|             throws JSONException { | ||||
|         JSONObject response = | ||||
|                 doPostRequest( | ||||
|                         user, | ||||
|                         password, | ||||
|                         null, | ||||
|                         MessageFormat.format(SHARE_ACTION_API, "{0}", nodeId)); | ||||
|         try { | ||||
|             if (response.has("sharedId")) { | ||||
|                 return Pair.of(true, response.getString("sharedId")); | ||||
|             } | ||||
|         } catch (JSONException e) | ||||
|         { | ||||
|         } catch (JSONException e) { | ||||
|             LOGGER.info("Unable to extract response parameter", e); | ||||
|         } | ||||
|         return Pair.of(false, String.valueOf(response.getJSONObject("status").getInt("code"))); | ||||
| @@ -328,13 +381,12 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Hide in place record | ||||
|      * | ||||
|      * @param user         the user | ||||
|      * @param password     the user's password | ||||
|      * @param nodeId     the in place record node id | ||||
|      * @param user the user | ||||
|      * @param password the user's password | ||||
|      * @param nodeId the in place record node id | ||||
|      * @return The HTTP Response. | ||||
|      */ | ||||
|     public HttpResponse hideRecord(String user, String password, String nodeId) | ||||
|     { | ||||
|     public HttpResponse hideRecord(String user, String password, String nodeId) { | ||||
|         String docNodeRef = getNodeRefSpacesStore() + nodeId; | ||||
|  | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
| @@ -347,14 +399,15 @@ public class RecordsAPI extends BaseAPI | ||||
|     /** | ||||
|      * Retrieves the record's nodeRef | ||||
|      * | ||||
|      * @param username   the user's username | ||||
|      * @param password   its password | ||||
|      * @param username the user's username | ||||
|      * @param password its password | ||||
|      * @param recordName the record full name | ||||
|      * @param recordPath the String with which the record name starts | ||||
|      * @return the record nodeRef in case it exists, empty string otherwise | ||||
|      */ | ||||
|     public String getRecordNodeRef(String username, String password, String recordName, String recordPath) | ||||
|     { | ||||
|         return getNodeRefSpacesStore() + getItemNodeRef(username, password, recordPath + "/" + recordName); | ||||
|     public String getRecordNodeRef( | ||||
|             String username, String password, String recordName, String recordPath) { | ||||
|         return getNodeRefSpacesStore() | ||||
|                 + getItemNodeRef(username, password, recordPath + "/" + recordName); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -27,15 +27,10 @@ | ||||
|  | ||||
| package org.alfresco.rest.v0; | ||||
|  | ||||
| import static java.util.Arrays.asList; | ||||
|  | ||||
| import static org.apache.http.HttpStatus.SC_OK; | ||||
| import static org.testng.AssertJUnit.assertTrue; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
| import static java.util.Arrays.asList; | ||||
|  | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.alfresco.rest.rm.community.model.rules.RuleDefinition; | ||||
| @@ -47,12 +42,14 @@ import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| /** | ||||
|  * Covers CRUD API operations on rules | ||||
|  */ | ||||
| import java.text.MessageFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** Covers CRUD API operations on rules */ | ||||
| @Component | ||||
| public class RulesAPI extends BaseAPI | ||||
| { | ||||
| public class RulesAPI extends BaseAPI { | ||||
|  | ||||
|     public static final String RULES_API = "{0}node/{1}/ruleset/rules"; | ||||
|     public static final String RULE_API = "{0}node/{1}/ruleset/rules/{2}"; | ||||
| @@ -65,17 +62,22 @@ public class RulesAPI extends BaseAPI | ||||
|      * Creates a rule for the specified container with given rule properties | ||||
|      * | ||||
|      * @param containerNodeRef the container to have the rule created on | ||||
|      * @param ruleProperties   the rule properties | ||||
|      * @param ruleProperties the rule properties | ||||
|      * @return The HTTP Response (or null if the response could not be understood). | ||||
|      */ | ||||
|     public HttpResponse createRule(String username, String password, String containerNodeRef, RuleDefinition ruleProperties) | ||||
|     { | ||||
|         try | ||||
|         { | ||||
|             return doPostJsonRequest(username, password, SC_OK, getRuleRequest(ruleProperties), MessageFormat.format(RULES_API, "{0}", containerNodeRef)); | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|     public HttpResponse createRule( | ||||
|             String username, | ||||
|             String password, | ||||
|             String containerNodeRef, | ||||
|             RuleDefinition ruleProperties) { | ||||
|         try { | ||||
|             return doPostJsonRequest( | ||||
|                     username, | ||||
|                     password, | ||||
|                     SC_OK, | ||||
|                     getRuleRequest(ruleProperties), | ||||
|                     MessageFormat.format(RULES_API, "{0}", containerNodeRef)); | ||||
|         } catch (JSONException error) { | ||||
|             LOGGER.error("Unable to extract response parameter.", error); | ||||
|         } | ||||
|         return null; | ||||
| @@ -85,23 +87,26 @@ public class RulesAPI extends BaseAPI | ||||
|      * Updates a rule for the specified container with given rule properties | ||||
|      * | ||||
|      * @param containerNodeRef the container to have the rule created on | ||||
|      * @param ruleProperties   the rule properties | ||||
|      * @param ruleProperties the rule properties | ||||
|      * @return true if the rule has been updated successfully, false otherwise | ||||
|      */ | ||||
|     public JSONObject updateRule(String username, String password, String containerNodeRef, RuleDefinition ruleProperties) | ||||
|     { | ||||
|     public JSONObject updateRule( | ||||
|             String username, | ||||
|             String password, | ||||
|             String containerNodeRef, | ||||
|             RuleDefinition ruleProperties) { | ||||
|         String ruleId = ruleProperties.getId(); | ||||
|         if (ruleId == null || ruleId.isEmpty()) | ||||
|         { | ||||
|         if (ruleId == null || ruleId.isEmpty()) { | ||||
|             throw new RuntimeException("Can not update a rule without id."); | ||||
|         } | ||||
|         try | ||||
|         { | ||||
|             return doPutRequest(username, password, getRuleRequest(ruleProperties), MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId)); | ||||
|         } | ||||
|         catch (JSONException error) | ||||
|         { | ||||
|            LOGGER.error("Unable to extract response parameter.", error); | ||||
|         try { | ||||
|             return doPutRequest( | ||||
|                     username, | ||||
|                     password, | ||||
|                     getRuleRequest(ruleProperties), | ||||
|                     MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId)); | ||||
|         } catch (JSONException error) { | ||||
|             LOGGER.error("Unable to extract response parameter.", error); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| @@ -109,32 +114,37 @@ public class RulesAPI extends BaseAPI | ||||
|     /** | ||||
|      * Deletes a rule on a container and checks it doesn't exist anymore | ||||
|      * | ||||
|      * @param username         the user performing the request | ||||
|      * @param password         the password | ||||
|      * @param username the user performing the request | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container on which the rule has been created | ||||
|      * @param ruleId           the rule id | ||||
|      * @param ruleId the rule id | ||||
|      * @throws AssertionError if the rule could not be deleted. | ||||
|      */ | ||||
|     public void deleteRule(String username, String password, String containerNodeRef, String ruleId) | ||||
|     { | ||||
|         doDeleteRequest(username, password, MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId)); | ||||
|         boolean success = !getRulesIdsSetOnContainer(username, password, containerNodeRef).contains(ruleId); | ||||
|         assertTrue("Rule " + ruleId + " was not deleted successfully from " + containerNodeRef, success); | ||||
|     public void deleteRule( | ||||
|             String username, String password, String containerNodeRef, String ruleId) { | ||||
|         doDeleteRequest( | ||||
|                 username, | ||||
|                 password, | ||||
|                 MessageFormat.format(RULE_API, "{0}", containerNodeRef, ruleId)); | ||||
|         boolean success = | ||||
|                 !getRulesIdsSetOnContainer(username, password, containerNodeRef).contains(ruleId); | ||||
|         assertTrue( | ||||
|                 "Rule " + ruleId + " was not deleted successfully from " + containerNodeRef, | ||||
|                 success); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Deletes all the rules on a container and checks they don't exist anymore | ||||
|      * | ||||
|      * @param username         the user performing the request | ||||
|      * @param password         the password | ||||
|      * @param username the user performing the request | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container on which the rules have been created | ||||
|      * @throws AssertionError if at least one of the rules could not be deleted. | ||||
|      */ | ||||
|     public void deleteAllRulesOnContainer(String username, String password, String containerNodeRef) | ||||
|     { | ||||
|     public void deleteAllRulesOnContainer( | ||||
|             String username, String password, String containerNodeRef) { | ||||
|         List<String> ruleIds = getRulesIdsSetOnContainer(username, password, containerNodeRef); | ||||
|         for (String ruleId : ruleIds) | ||||
|         { | ||||
|         for (String ruleId : ruleIds) { | ||||
|             deleteRule(username, password, containerNodeRef, ruleId); | ||||
|         } | ||||
|     } | ||||
| @@ -145,23 +155,22 @@ public class RulesAPI extends BaseAPI | ||||
|      * @param username the user performing the request | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container to get the rules from | ||||
|      * | ||||
|      * @return list of rules on container | ||||
|      */ | ||||
|  | ||||
|     public List<RuleDefinition> getRulesSetOnContainer(String username, String password, String containerNodeRef) | ||||
|     { | ||||
|     public List<RuleDefinition> getRulesSetOnContainer( | ||||
|             String username, String password, String containerNodeRef) { | ||||
|         List<RuleDefinition> rulesDefinitions = new ArrayList<>(); | ||||
|  | ||||
|         // get the rules set on the container | ||||
|         JSONObject rulesJson = doGetRequest(username, password, MessageFormat.format(RULES_API, "{0}", containerNodeRef)); | ||||
|         if (rulesJson != null) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|         JSONObject rulesJson = | ||||
|                 doGetRequest( | ||||
|                         username, | ||||
|                         password, | ||||
|                         MessageFormat.format(RULES_API, "{0}", containerNodeRef)); | ||||
|         if (rulesJson != null) { | ||||
|             try { | ||||
|                 JSONArray rules = rulesJson.getJSONArray("data"); | ||||
|                 for (int i = 0; i < rules.length(); i++) | ||||
|                 { | ||||
|                 for (int i = 0; i < rules.length(); i++) { | ||||
|                     RuleDefinition ruleDefinition = new RuleDefinition(); | ||||
|                     JSONObject rule = rules.getJSONObject(i); | ||||
|                     ruleDefinition.id(rule.getString("id")); | ||||
| @@ -171,9 +180,7 @@ public class RulesAPI extends BaseAPI | ||||
|                     ruleDefinition.disabled(rule.getBoolean("disabled")); | ||||
|                     rulesDefinitions.add(ruleDefinition); | ||||
|                 } | ||||
|             } | ||||
|             catch (JSONException error) | ||||
|             { | ||||
|             } catch (JSONException error) { | ||||
|                 LOGGER.error("Unable to parse rules.", error); | ||||
|             } | ||||
|         } | ||||
| @@ -183,14 +190,16 @@ public class RulesAPI extends BaseAPI | ||||
|     /** | ||||
|      * Retrieves all the ids of the rules set on the container | ||||
|      * | ||||
|      * @param username         the user performing the request | ||||
|      * @param password         the password | ||||
|      * @param username the user performing the request | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container's noderef to get set rules for | ||||
|      * @return the list of rules ids that the container has | ||||
|      */ | ||||
|     public List<String> getRulesIdsSetOnContainer(String username, String password, String containerNodeRef) | ||||
|     { | ||||
|         return getRulesSetOnContainer(username, password, containerNodeRef).stream().map(RuleDefinition::getId).collect(Collectors.toList()); | ||||
|     public List<String> getRulesIdsSetOnContainer( | ||||
|             String username, String password, String containerNodeRef) { | ||||
|         return getRulesSetOnContainer(username, password, containerNodeRef).stream() | ||||
|                 .map(RuleDefinition::getId) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -198,11 +207,9 @@ public class RulesAPI extends BaseAPI | ||||
|      * | ||||
|      * @param ruleProperties the rule properties | ||||
|      * @return a object containing the rule properties for the request | ||||
|      * | ||||
|      * @throws JSONException | ||||
|      */ | ||||
|     private JSONObject getRuleRequest(RuleDefinition ruleProperties) throws JSONException | ||||
|     { | ||||
|     private JSONObject getRuleRequest(RuleDefinition ruleProperties) throws JSONException { | ||||
|         JSONObject requestParams = new JSONObject(); | ||||
|  | ||||
|         // the id has to be sent as empty string no matter the request | ||||
| @@ -222,13 +229,10 @@ public class RulesAPI extends BaseAPI | ||||
|      * Adds rules actions to the request | ||||
|      * | ||||
|      * @param ruleProperties the rules properties to extract actions from | ||||
|      * | ||||
|      * @return the object with actions set | ||||
|      * | ||||
|      * @throws JSONException | ||||
|      */ | ||||
|     private JSONObject addRulesActions(RuleDefinition ruleProperties) throws JSONException | ||||
|     { | ||||
|     private JSONObject addRulesActions(RuleDefinition ruleProperties) throws JSONException { | ||||
|         JSONObject action = new JSONObject(); | ||||
|         action.put("actionDefinitionName", "composite-action"); | ||||
|         JSONObject conditions = new JSONObject(); | ||||
| @@ -243,40 +247,33 @@ public class RulesAPI extends BaseAPI | ||||
|      * Creates the actions list for request | ||||
|      * | ||||
|      * @param ruleProperties given rule properties | ||||
|      * | ||||
|      * @return the list of rule actions objects | ||||
|      */ | ||||
|     private List<JSONObject> getRuleActionsList(RuleDefinition ruleProperties) throws JSONException | ||||
|     { | ||||
|     private List<JSONObject> getRuleActionsList(RuleDefinition ruleProperties) | ||||
|             throws JSONException { | ||||
|         List<JSONObject> ruleActionsList = new ArrayList<>(); | ||||
|  | ||||
|         for (String ruleAction : ruleProperties.getActions()) | ||||
|         { | ||||
|         for (String ruleAction : ruleProperties.getActions()) { | ||||
|             JSONObject ruleActionObj = new JSONObject(); | ||||
|             ruleActionObj.put("actionDefinitionName", ruleAction); | ||||
|             JSONObject parameters = new JSONObject(); | ||||
|             if (ruleProperties.getPath() != null) | ||||
|             { | ||||
|                 if(ruleProperties.getCreateRecordPath() != null) | ||||
|                 { | ||||
|             if (ruleProperties.getPath() != null) { | ||||
|                 if (ruleProperties.getCreateRecordPath() != null) { | ||||
|                     parameters.put("createRecordPath", ruleProperties.getCreateRecordPath()); | ||||
|                 } | ||||
|                 parameters.put("path", ruleProperties.getPath()); | ||||
|             } | ||||
|             if (ruleProperties.getContentTitle() != null) | ||||
|             { | ||||
|             if (ruleProperties.getContentTitle() != null) { | ||||
|                 parameters.put("property", "cm:title"); | ||||
|                 parameters.put("value", ruleProperties.getContentTitle()); | ||||
|                 parameters.put("prop_type", "d:mltext"); | ||||
|             } | ||||
|             if (ruleProperties.getContentDescription() != null) | ||||
|             { | ||||
|             if (ruleProperties.getContentDescription() != null) { | ||||
|                 parameters.put("property", "cm:description"); | ||||
|                 parameters.put("value", ruleProperties.getContentDescription()); | ||||
|                 parameters.put("prop_type", "d:mltext"); | ||||
|             } | ||||
|             if (ruleProperties.getRejectReason() != null) | ||||
|             { | ||||
|             if (ruleProperties.getRejectReason() != null) { | ||||
|                 parameters.put("reason", ruleProperties.getRejectReason()); | ||||
|             } | ||||
|             ruleActionObj.put("parameterValues", parameters); | ||||
| @@ -291,13 +288,15 @@ public class RulesAPI extends BaseAPI | ||||
|      * @param username the user performing the request | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef container nodeRef | ||||
|      * | ||||
|      * @return the rule id | ||||
|      */ | ||||
|     public String getRuleIdWithTitle(String username, String password, String containerNodeRef, String title) | ||||
|     { | ||||
|         return getRulesSetOnContainer(username, password, containerNodeRef).stream().filter( | ||||
|                 rule -> rule.getTitle().equals(title)).findAny().get().getId(); | ||||
|     public String getRuleIdWithTitle( | ||||
|             String username, String password, String containerNodeRef, String title) { | ||||
|         return getRulesSetOnContainer(username, password, containerNodeRef).stream() | ||||
|                 .filter(rule -> rule.getTitle().equals(title)) | ||||
|                 .findAny() | ||||
|                 .get() | ||||
|                 .getId(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -306,14 +305,17 @@ public class RulesAPI extends BaseAPI | ||||
|      * @param username the username | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container nodeRef | ||||
|      * | ||||
|      * @return The HTTP Response (or null if the current state is disabled). | ||||
|      */ | ||||
|     public HttpResponse disableRulesInheritance(String username, String password, String containerNodeRef) | ||||
|     { | ||||
|         if(containerInheritsRulesFromParent(username, password, containerNodeRef)) | ||||
|         { | ||||
|             return doPostJsonRequest(username, password, SC_OK, new JSONObject(), MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef)); | ||||
|     public HttpResponse disableRulesInheritance( | ||||
|             String username, String password, String containerNodeRef) { | ||||
|         if (containerInheritsRulesFromParent(username, password, containerNodeRef)) { | ||||
|             return doPostJsonRequest( | ||||
|                     username, | ||||
|                     password, | ||||
|                     SC_OK, | ||||
|                     new JSONObject(), | ||||
|                     MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef)); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| @@ -321,16 +323,20 @@ public class RulesAPI extends BaseAPI | ||||
|     /** | ||||
|      * Enable inheritance on specific container | ||||
|      * | ||||
|      * @param username         the username | ||||
|      * @param password         the password | ||||
|      * @param username the username | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container nodeRef | ||||
|      * @return The HTTP Response (or null if the current state is disabled). | ||||
|      */ | ||||
|     public HttpResponse enableRulesInheritance(String username, String password, String containerNodeRef) | ||||
|     { | ||||
|         if (!containerInheritsRulesFromParent(username, password, containerNodeRef)) | ||||
|         { | ||||
|             return doPostJsonRequest(username, password, SC_OK, new JSONObject(), MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef)); | ||||
|     public HttpResponse enableRulesInheritance( | ||||
|             String username, String password, String containerNodeRef) { | ||||
|         if (!containerInheritsRulesFromParent(username, password, containerNodeRef)) { | ||||
|             return doPostJsonRequest( | ||||
|                     username, | ||||
|                     password, | ||||
|                     SC_OK, | ||||
|                     new JSONObject(), | ||||
|                     MessageFormat.format(INHERIT_RULES_API, "{0}", containerNodeRef)); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
| @@ -341,13 +347,16 @@ public class RulesAPI extends BaseAPI | ||||
|      * @param username the username | ||||
|      * @param password the password | ||||
|      * @param containerNodeRef the container nodeRef | ||||
|      * | ||||
|      * @return a boolean specifying if the container inherits rules from parent | ||||
|      * @throws JSONException | ||||
|      */ | ||||
|     public boolean containerInheritsRulesFromParent(String username, String password, String containerNodeRef) throws JSONException | ||||
|     { | ||||
|         JSONObject rulesInheritanceInfo = doGetRequest(username, password, MessageFormat.format(INHERIT_RULES_STATE_API, "{0}", containerNodeRef)); | ||||
|     public boolean containerInheritsRulesFromParent( | ||||
|             String username, String password, String containerNodeRef) throws JSONException { | ||||
|         JSONObject rulesInheritanceInfo = | ||||
|                 doGetRequest( | ||||
|                         username, | ||||
|                         password, | ||||
|                         MessageFormat.format(INHERIT_RULES_STATE_API, "{0}", containerNodeRef)); | ||||
|         return rulesInheritanceInfo.getJSONObject("data").getBoolean("inheritRules"); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -26,11 +26,6 @@ | ||||
|  */ | ||||
| package org.alfresco.rest.v0; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
|  | ||||
| import org.alfresco.dataprep.AlfrescoHttpClientFactory; | ||||
| import org.alfresco.rest.core.v0.BaseAPI; | ||||
| import org.apache.http.NameValuePair; | ||||
| @@ -41,6 +36,11 @@ import org.json.JSONObject; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Component; | ||||
|  | ||||
| import java.text.MessageFormat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Helper methods for performing search using various Alfresco search APIs. | ||||
|  * | ||||
| @@ -48,44 +48,43 @@ import org.springframework.stereotype.Component; | ||||
|  * @since 2.5 | ||||
|  */ | ||||
| @Component | ||||
| public class SearchAPI extends BaseAPI | ||||
| { | ||||
| public class SearchAPI extends BaseAPI { | ||||
|     /** http client factory */ | ||||
|     @Autowired | ||||
|     private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|     @Autowired private AlfrescoHttpClientFactory alfrescoHttpClientFactory; | ||||
|  | ||||
|     /** faceted search API endpoint */ | ||||
|     private static final String FACETED_SEARCH_ENDPOINT = "{0}alfresco/s/slingshot/rmsearch/faceted/rmsearch?{1}"; | ||||
|     private static final String FACETED_SEARCH_ENDPOINT = | ||||
|             "{0}alfresco/s/slingshot/rmsearch/faceted/rmsearch?{1}"; | ||||
|  | ||||
|     /** share live search API endpoint */ | ||||
|     private static final String SHARE_LIVE_SEARCH_DOCS_ENDPOINT = "{0}alfresco/s/slingshot/live-search-docs?{1}"; | ||||
|     private static final String SHARE_LIVE_SEARCH_DOCS_ENDPOINT = | ||||
|             "{0}alfresco/s/slingshot/live-search-docs?{1}"; | ||||
|  | ||||
|     /** RM search URL template */ | ||||
|     private static final String RM_SEARCH_ENDPOINT = "{0}alfresco/s/slingshot/rmsearch/{1}?{2}"; | ||||
|  | ||||
|     /** RM all nodes search filters */ | ||||
|     private static final String RM_DEFAULT_NODES_FILTERS = | ||||
|                 "records/true,undeclared/true,vital/false,folders/{0},categories/{1},frozen/false,cutoff/false"; | ||||
|             "records/true,undeclared/true,vital/false,folders/{0},categories/{1},frozen/false,cutoff/false"; | ||||
|  | ||||
|     /** | ||||
|      * Perform search request on search endpoint as a user. | ||||
|      * <p> | ||||
|      * This method is applicable only to endpoints that support HTTP GET requests and return JSON body as response. | ||||
|      * | ||||
|      * <p>This method is applicable only to endpoints that support HTTP GET requests and return JSON | ||||
|      * body as response. | ||||
|      * | ||||
|      * @param searchEndpoint | ||||
|      * @param searchUser | ||||
|      * @param searchPassword | ||||
|      * @return search results as a {@link JSONObject}, please refer to API documentation for details | ||||
|      */ | ||||
|     private JSONObject doSearch( | ||||
|         String searchEndpoint, | ||||
|         String searchUser, | ||||
|         String searchPassword) | ||||
|     { | ||||
|       return facetedRequest(searchUser, searchPassword, null, searchEndpoint); | ||||
|     private JSONObject doSearch(String searchEndpoint, String searchUser, String searchPassword) { | ||||
|         return facetedRequest(searchUser, searchPassword, null, searchEndpoint); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generic rm search. | ||||
|      * | ||||
|      * @param username | ||||
|      * @param password | ||||
|      * @param site | ||||
| @@ -95,34 +94,32 @@ public class SearchAPI extends BaseAPI | ||||
|      * @return search results (see API reference for more details), null for any errors | ||||
|      */ | ||||
|     public JSONObject rmSearch( | ||||
|         String username, | ||||
|         String password, | ||||
|         String site, | ||||
|         String query, | ||||
|         String filters, | ||||
|         String sortby) | ||||
|     { | ||||
|             String username, | ||||
|             String password, | ||||
|             String site, | ||||
|             String query, | ||||
|             String filters, | ||||
|             String sortby) { | ||||
|         List<BasicNameValuePair> searchParameters = new ArrayList<>(); | ||||
|         searchParameters.add(new BasicNameValuePair("query", query)); | ||||
|         searchParameters.add(new BasicNameValuePair("filters", filters)); | ||||
|         if (sortby != null) | ||||
|         { | ||||
|         if (sortby != null) { | ||||
|             searchParameters.add(new BasicNameValuePair("sortby", sortby)); | ||||
|         } | ||||
|  | ||||
|         String requestURL = MessageFormat.format( | ||||
|             RM_SEARCH_ENDPOINT, | ||||
|             alfrescoHttpClientFactory.getObject().getAlfrescoUrl(), | ||||
|             (site != null) ? site : RM_SITE_ID, | ||||
|             URLEncodedUtils.format(searchParameters, "UTF-8")); | ||||
|         String requestURL = | ||||
|                 MessageFormat.format( | ||||
|                         RM_SEARCH_ENDPOINT, | ||||
|                         alfrescoHttpClientFactory.getObject().getAlfrescoUrl(), | ||||
|                         (site != null) ? site : RM_SITE_ID, | ||||
|                         URLEncodedUtils.format(searchParameters, "UTF-8")); | ||||
|  | ||||
|         return doSearch(requestURL, username, password); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Search as a user for nodes on site "rm" matching query, using SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted | ||||
|      * by sortby | ||||
|      * <br> | ||||
|      * Search as a user for nodes on site "rm" matching query, using | ||||
|      * SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted by sortby <br> | ||||
|      * | ||||
|      * @param username | ||||
|      * @param password | ||||
| @@ -130,20 +127,28 @@ public class SearchAPI extends BaseAPI | ||||
|      * @param sortby | ||||
|      * @return list of node names | ||||
|      */ | ||||
|     public List<String> searchForNodeNamesAsUser( | ||||
|             String username, | ||||
|             String password, | ||||
|             String query, | ||||
|             String sortby, | ||||
|             boolean includeCategories, | ||||
|             boolean includeFolders) { | ||||
|         String searchFilterParamaters = | ||||
|                 MessageFormat.format( | ||||
|                         RM_DEFAULT_NODES_FILTERS, | ||||
|                         Boolean.toString(includeFolders), | ||||
|                         Boolean.toString(includeCategories)); | ||||
|  | ||||
|     public List<String> searchForNodeNamesAsUser(String username, String password, String query, String sortby, | ||||
|                 boolean includeCategories, boolean includeFolders) | ||||
|     { | ||||
|         String searchFilterParamaters = MessageFormat.format(RM_DEFAULT_NODES_FILTERS, Boolean.toString(includeFolders), | ||||
|                     Boolean.toString(includeCategories)); | ||||
|  | ||||
|         return getItemNames(rmSearch(username, password, "rm", query, searchFilterParamaters, sortby)); | ||||
|         return getItemNames( | ||||
|                 rmSearch(username, password, "rm", query, searchFilterParamaters, sortby)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Search as a user for nodes on site "rm" matching query, using SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted | ||||
|      * by sortby and returns the property value for the given nodeRef and property name | ||||
|      *  | ||||
|      * Search as a user for nodes on site "rm" matching query, using | ||||
|      * SearchAPI.RM_DEFAULT_RECORD_FILTERS and sorted by sortby and returns the property value for | ||||
|      * the given nodeRef and property name | ||||
|      * | ||||
|      * @param username | ||||
|      * @param password | ||||
|      * @param query | ||||
| @@ -152,23 +157,36 @@ public class SearchAPI extends BaseAPI | ||||
|      * @param includeFolders | ||||
|      * @return list of node properties | ||||
|      */ | ||||
|     public String searchForNodePropertyAsUser(String username, String password, String nodeRef, String propertyName, String query, String sortby, | ||||
|                 boolean includeCategories, boolean includeFolders) | ||||
|     { | ||||
|         String searchFilterParamaters = MessageFormat.format(RM_DEFAULT_NODES_FILTERS, Boolean.toString(includeFolders), | ||||
|                     Boolean.toString(includeCategories)); | ||||
|         return getItemProperty(rmSearch(username, password, "rm", query, searchFilterParamaters, sortby), nodeRef, propertyName);  | ||||
|     public String searchForNodePropertyAsUser( | ||||
|             String username, | ||||
|             String password, | ||||
|             String nodeRef, | ||||
|             String propertyName, | ||||
|             String query, | ||||
|             String sortby, | ||||
|             boolean includeCategories, | ||||
|             boolean includeFolders) { | ||||
|         String searchFilterParamaters = | ||||
|                 MessageFormat.format( | ||||
|                         RM_DEFAULT_NODES_FILTERS, | ||||
|                         Boolean.toString(includeFolders), | ||||
|                         Boolean.toString(includeCategories)); | ||||
|         return getItemProperty( | ||||
|                 rmSearch(username, password, "rm", query, searchFilterParamaters, sortby), | ||||
|                 nodeRef, | ||||
|                 propertyName); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     /** | ||||
|      * Generic faceted search. | ||||
|      * | ||||
|      * @param username | ||||
|      * @param password | ||||
|      * @param parameters | ||||
|      * @return search results (see API reference for more details), null for any errors | ||||
|      */ | ||||
|     public JSONObject facetedSearch(String username, String password, List<NameValuePair> parameters) | ||||
|     { | ||||
|     public JSONObject facetedSearch( | ||||
|             String username, String password, List<NameValuePair> parameters) { | ||||
|         return facetedRequest(username, password, parameters, FACETED_SEARCH_ENDPOINT); | ||||
|     } | ||||
|  | ||||
| @@ -180,48 +198,53 @@ public class SearchAPI extends BaseAPI | ||||
|      * @param searchTerm | ||||
|      * @return search results (see API reference for more details) | ||||
|      */ | ||||
|     public JSONObject liveSearchForDocuments(String searchUser, String searchPassword, String searchTerm) | ||||
|     { | ||||
|         return facetedRequest(searchUser, searchPassword, Arrays.asList(new BasicNameValuePair("t", searchTerm)), | ||||
|                     SHARE_LIVE_SEARCH_DOCS_ENDPOINT); | ||||
|     public JSONObject liveSearchForDocuments( | ||||
|             String searchUser, String searchPassword, String searchTerm) { | ||||
|         return facetedRequest( | ||||
|                 searchUser, | ||||
|                 searchPassword, | ||||
|                 Arrays.asList(new BasicNameValuePair("t", searchTerm)), | ||||
|                 SHARE_LIVE_SEARCH_DOCS_ENDPOINT); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Execute faceted search for term. | ||||
|      * | ||||
|      * @param searchUser | ||||
|      * @param searchPassword | ||||
|      * @param searchTerm | ||||
|      * @return search results (see API reference for more details) | ||||
|      */ | ||||
|     public JSONObject facetedSearchForTerm(String searchUser, String searchPassword, String searchTerm) | ||||
|     { | ||||
|     public JSONObject facetedSearchForTerm( | ||||
|             String searchUser, String searchPassword, String searchTerm) { | ||||
|         return facetedSearch( | ||||
|             searchUser, | ||||
|             searchPassword, | ||||
|             Arrays.asList(new BasicNameValuePair("term", searchTerm))); | ||||
|                 searchUser, | ||||
|                 searchPassword, | ||||
|                 Arrays.asList(new BasicNameValuePair("term", searchTerm))); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method to search for documents as a user using faceted search. | ||||
|      * | ||||
|      * @param username to search as | ||||
|      * @param password for username | ||||
|      * @param term search term | ||||
|      * @return list of document names found | ||||
|      */ | ||||
|     public List<String> searchForDocumentsAsUser(String username, String password, String term) | ||||
|     { | ||||
|     public List<String> searchForDocumentsAsUser(String username, String password, String term) { | ||||
|         return getItemNames(facetedSearchForTerm(username, password, term)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper method to search for documents as a user using share live search. | ||||
|      * | ||||
|      * @param username to search as | ||||
|      * @param password for username | ||||
|      * @param term search term | ||||
|      * @return list of document names found | ||||
|      */ | ||||
|     public List<String> liveSearchForDocumentsAsUser(String username, String password, String term) throws JSONException | ||||
|     { | ||||
|     public List<String> liveSearchForDocumentsAsUser(String username, String password, String term) | ||||
|             throws JSONException { | ||||
|         JSONObject searchResult = liveSearchForDocuments(username, password, term); | ||||
|         LOGGER.info(searchResult.toString(3)); | ||||
|         return getItemNames(searchResult); | ||||
| @@ -229,35 +252,33 @@ public class SearchAPI extends BaseAPI | ||||
|  | ||||
|     /** | ||||
|      * Helper method to extract list of names from search result. | ||||
|      *  | ||||
|      * | ||||
|      * @param searchResult | ||||
|      * @return list of document or record names in search result | ||||
|      * @throws FileNotFoundException  | ||||
|      * @throws JsonSyntaxException  | ||||
|      * @throws JsonIOException  | ||||
|      * @throws FileNotFoundException | ||||
|      * @throws JsonSyntaxException | ||||
|      * @throws JsonIOException | ||||
|      * @throws RuntimeException for malformed search response | ||||
|      */ | ||||
|     /** | ||||
|      * Helper method to extract list of names from search result. | ||||
|      *  | ||||
|      * | ||||
|      * @param searchResult | ||||
|      * @return | ||||
|      */ | ||||
|     private List<String> getItemNames(JSONObject searchResult) | ||||
|     { | ||||
|     private List<String> getItemNames(JSONObject searchResult) { | ||||
|         return getPropertyValues(searchResult, "name"); | ||||
|     } | ||||
|      | ||||
|  | ||||
|     /** | ||||
|      * Helper method to extract list of property values from search result for the given nodeRef. | ||||
|      *  | ||||
|      * | ||||
|      * @param searchResult | ||||
|      * @param nodeRef | ||||
|      * @param propertyName | ||||
|      * @return | ||||
|      */ | ||||
|     private String getItemProperty(JSONObject searchResult, String nodeRef, String propertyName) | ||||
|     { | ||||
|     private String getItemProperty(JSONObject searchResult, String nodeRef, String propertyName) { | ||||
|         return getPropertyValue(searchResult, nodeRef, propertyName); | ||||
|     } | ||||
| } | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user