mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-31 17:39:05 +00:00
ACS-1372 Restructure AGS to avoid incompatible libraries (#434)
Streamline the ACS project builds so that it is quicker / safer to upgrade libraries
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.core;
|
||||
|
||||
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
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Getter
|
||||
@Configuration
|
||||
@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}")
|
||||
private String scheme;
|
||||
|
||||
@Value ("${alfresco.server}")
|
||||
private String server;
|
||||
|
||||
@Value ("${alfresco.port}")
|
||||
private String port;
|
||||
|
||||
@Value ("${rest.rmPath}")
|
||||
private String restRmPath;
|
||||
|
||||
@Value ("${docker.host}")
|
||||
private String dockerHost;
|
||||
}
|
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.core;
|
||||
|
||||
import io.restassured.builder.RequestSpecBuilder;
|
||||
|
||||
import org.alfresco.rest.exception.EmptyJsonResponseException;
|
||||
import org.alfresco.rest.model.RestErrorModel;
|
||||
import org.alfresco.rest.model.RestHtmlResponse;
|
||||
import org.alfresco.rest.model.RestSiteModel;
|
||||
import org.alfresco.rest.model.RestSiteModelsCollection;
|
||||
import org.alfresco.rest.requests.coreAPI.RestCoreAPI;
|
||||
import org.alfresco.rest.requests.search.SearchAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.GSCoreAPI;
|
||||
import org.alfresco.utility.model.StatusModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Service
|
||||
@Scope(value = "prototype")
|
||||
public class RMRestWrapper
|
||||
{
|
||||
/** The class that wraps the ReST APIs from core. */
|
||||
@Autowired
|
||||
private RestWrapper restWrapper;
|
||||
|
||||
@Autowired
|
||||
@Getter
|
||||
private RMRestProperties rmRestProperties;
|
||||
|
||||
public GSCoreAPI withGSCoreAPI()
|
||||
{
|
||||
return new GSCoreAPI(this, getRmRestProperties());
|
||||
}
|
||||
|
||||
/** Get the core class that wraps the ReST APIs. */
|
||||
public RestWrapper getRestWrapper()
|
||||
{
|
||||
return restWrapper;
|
||||
}
|
||||
|
||||
/** Authenticate specific user to Alfresco REST API */
|
||||
public void authenticateUser(UserModel userModel)
|
||||
{
|
||||
restWrapper.authenticateUser(userModel);
|
||||
}
|
||||
|
||||
/** Get the last error thrown (if any). */
|
||||
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)
|
||||
{
|
||||
return restWrapper.processModels(classz, simpleRequest);
|
||||
}
|
||||
|
||||
/** Process responses for a single model as {@link RestSiteModel}. */
|
||||
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)
|
||||
{
|
||||
restWrapper.processEmptyModel(simpleRequest);
|
||||
}
|
||||
|
||||
/** Get the most recently returned status object. */
|
||||
public StatusModel getLastStatus()
|
||||
{
|
||||
return restWrapper.getLastStatus();
|
||||
}
|
||||
|
||||
/** Get the most recently returned status code. */
|
||||
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)
|
||||
{
|
||||
restWrapper.setStatusCode(statusCode);
|
||||
}
|
||||
|
||||
/** Assert that a specific status code is returned. */
|
||||
public void assertStatusCodeIs(HttpStatus statusCode)
|
||||
{
|
||||
restWrapper.assertStatusCodeIs(statusCode);
|
||||
}
|
||||
|
||||
/** @return A parameters string that you could pass on the request ?param=value */
|
||||
public String getParameters()
|
||||
{
|
||||
return restWrapper.getParameters();
|
||||
}
|
||||
|
||||
/** Create a {@link UserModel} for a new test user. */
|
||||
public UserModel getTestUser()
|
||||
{
|
||||
return restWrapper.getTestUser();
|
||||
}
|
||||
|
||||
/** Get the Alfresco Core API. */
|
||||
public RestCoreAPI withCoreAPI()
|
||||
{
|
||||
return restWrapper.withCoreAPI();
|
||||
}
|
||||
|
||||
/** Get the Alfresco Search API. */
|
||||
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>
|
||||
* 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.
|
||||
*/
|
||||
public RequestSpecBuilder configureRequestSpec()
|
||||
{
|
||||
return restWrapper.configureRequestSpec();
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a response that returns a html
|
||||
*
|
||||
* @throws EmptyJsonResponseException If there is no response from the server.
|
||||
*/
|
||||
public RestHtmlResponse processHtmlResponse(RestRequest simpleRequest)
|
||||
{
|
||||
return restWrapper.processHtmlResponse(simpleRequest);
|
||||
}
|
||||
}
|
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.GSCoreAPI;
|
||||
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;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RMUserAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordCategoryAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordsAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.TransferAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.TransferContainerAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledContainerAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.UnfiledRecordFolderAPI;
|
||||
import org.alfresco.utility.data.DataUserAIS;
|
||||
import org.alfresco.utility.model.RepoTestModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* REST API Factory which provides access to the APIs
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Service
|
||||
@Scope(value = "prototype")
|
||||
public class RestAPIFactory
|
||||
{
|
||||
@Autowired
|
||||
@Getter (value = PROTECTED)
|
||||
private DataUserAIS dataUser;
|
||||
|
||||
@Resource(name = "RMRestWrapper")
|
||||
@Getter
|
||||
@Setter
|
||||
private RMRestWrapper rmRestWrapper;
|
||||
|
||||
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());
|
||||
return getRmRestWrapper().withCoreAPI();
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
return getSearchAPI(null);
|
||||
}
|
||||
|
||||
public Node getNodeAPI(RepoTestModel model) throws RuntimeException
|
||||
{
|
||||
try
|
||||
{
|
||||
return getCoreAPI(null).usingNode(model);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException("Failed to load nodeAPI.", e);
|
||||
}
|
||||
}
|
||||
|
||||
public Node getNodeAPI(UserModel userModel, RepoTestModel model) throws RuntimeException
|
||||
{
|
||||
try
|
||||
{
|
||||
return getCoreAPI(userModel).usingNode(model);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException("Failed to load nodeAPI.", e);
|
||||
}
|
||||
}
|
||||
|
||||
public RMSiteAPI getRMSiteAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingRMSite();
|
||||
}
|
||||
|
||||
public RMSiteAPI getRMSiteAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingRMSite();
|
||||
}
|
||||
|
||||
public FilePlanAPI getFilePlansAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingFilePlans();
|
||||
}
|
||||
|
||||
public FilePlanAPI getFilePlansAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingFilePlans();
|
||||
}
|
||||
|
||||
public RecordCategoryAPI getRecordCategoryAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingRecordCategory();
|
||||
}
|
||||
|
||||
public RecordCategoryAPI getRecordCategoryAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingRecordCategory();
|
||||
}
|
||||
|
||||
public RecordFolderAPI getRecordFolderAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingRecordFolder();
|
||||
}
|
||||
|
||||
public RecordFolderAPI getRecordFolderAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingRecordFolder();
|
||||
}
|
||||
|
||||
public RecordsAPI getRecordsAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingRecords();
|
||||
}
|
||||
|
||||
public RecordsAPI getRecordsAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingRecords();
|
||||
}
|
||||
|
||||
public FilesAPI getFilesAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingFiles();
|
||||
}
|
||||
|
||||
public FilesAPI getFilesAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingFiles();
|
||||
}
|
||||
|
||||
public TransferContainerAPI getTransferContainerAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingTransferContainer();
|
||||
}
|
||||
|
||||
public TransferContainerAPI getTransferContainerAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingTransferContainer();
|
||||
}
|
||||
|
||||
public TransferAPI getTransferAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingTransfer();
|
||||
}
|
||||
|
||||
public TransferAPI getTransferAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingTransfer();
|
||||
}
|
||||
|
||||
public RMUserAPI getRMUserAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingRMUser();
|
||||
}
|
||||
|
||||
public RMUserAPI getRMUserAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingRMUser();
|
||||
}
|
||||
|
||||
public UnfiledContainerAPI getUnfiledContainersAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingUnfiledContainers();
|
||||
}
|
||||
|
||||
public UnfiledContainerAPI getUnfiledContainersAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingUnfiledContainers();
|
||||
}
|
||||
|
||||
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingUnfiledRecordFolder();
|
||||
}
|
||||
|
||||
public UnfiledRecordFolderAPI getUnfiledRecordFoldersAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingUnfiledRecordFolder();
|
||||
}
|
||||
|
||||
public ActionsExecutionAPI getActionsAPI(UserModel userModel)
|
||||
{
|
||||
return getGSCoreAPI(userModel).usingActionsExecutionsAPI();
|
||||
}
|
||||
|
||||
public ActionsExecutionAPI getActionsAPI()
|
||||
{
|
||||
return getGSCoreAPI(null).usingActionsExecutionsAPI();
|
||||
}
|
||||
}
|
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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()
|
||||
{
|
||||
new SearchRequest();
|
||||
}
|
||||
/**
|
||||
* Set the sql statement for the SearchRequest
|
||||
*
|
||||
* @param query sql statement
|
||||
* @return search request
|
||||
*/
|
||||
public SearchRequestBuilder setQueryBuilder(RestRequestQueryModel query)
|
||||
{
|
||||
super.setQuery(query);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the paging statement for the SearchRequest
|
||||
*
|
||||
* @param paging pagination requested
|
||||
* @return search request
|
||||
*/
|
||||
public SearchRequestBuilder setPagingBuilder(Pagination paging)
|
||||
{
|
||||
super.setPaging(paging);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the pagination properties
|
||||
*/
|
||||
public Pagination setPagination(Integer maxItems, Integer skipCount)
|
||||
{
|
||||
Pagination pagination = new Pagination();
|
||||
pagination.setMaxItems(maxItems);
|
||||
pagination.setSkipCount(skipCount);
|
||||
return pagination;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the requested fields for the SearchRequest
|
||||
*
|
||||
* @param fields requested fields
|
||||
* @return search request
|
||||
*/
|
||||
public SearchRequestBuilder setFieldsBuilder(List<String> fields)
|
||||
{
|
||||
super.setFields(fields);
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.apache.http.ParseException;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Helper methods for use with REST APIs.
|
||||
*
|
||||
* @author Tom Page
|
||||
* @since 2.6
|
||||
*/
|
||||
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*/
|
||||
public static final DateTimeFormatter ISO_INSTANT_FORMATTER =
|
||||
new DateTimeFormatterBuilder().appendInstant(3).toFormatter();
|
||||
|
||||
/** Private constructor for helper class. */
|
||||
private APIUtils()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the body of a HTTP response as a JSON object.
|
||||
*
|
||||
* @param httpResponse The HTTP response.
|
||||
* @return A JSON representation of the object.
|
||||
*/
|
||||
public static JSONObject convertHTTPResponseToJSON(HttpResponse httpResponse)
|
||||
{
|
||||
String source = null;
|
||||
try
|
||||
{
|
||||
source = IOUtils.toString(httpResponse.getEntity().getContent(), "UTF-8");
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new IllegalArgumentException("Could not extract JSON from HTTP response.", e);
|
||||
}
|
||||
LOGGER.info("Response body:\n{}", source);
|
||||
return new JSONObject(source);
|
||||
}
|
||||
|
||||
/**
|
||||
* Util method to extract the message string from the HTTP response
|
||||
*
|
||||
* @param httpResponse http response
|
||||
* @return error message from the http response
|
||||
*/
|
||||
public static String extractErrorMessageFromHttpResponse(HttpResponse httpResponse)
|
||||
{
|
||||
final HttpEntity entity = httpResponse.getEntity();
|
||||
JsonReader reader = null;
|
||||
try
|
||||
{
|
||||
final InputStream responseStream = entity.getContent();
|
||||
reader = Json.createReader(responseStream);
|
||||
return reader.readObject().getString("message");
|
||||
}
|
||||
catch (JSONException error)
|
||||
{
|
||||
|
||||
LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error);
|
||||
}
|
||||
catch (ParseException | IOException error)
|
||||
{
|
||||
|
||||
LOGGER.error("Parsing message body failed.", error);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (reader != null)
|
||||
{
|
||||
reader.close();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,815 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.apache.chemistry.opencmis.client.api.CmisObject;
|
||||
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.ParseException;
|
||||
import org.apache.http.client.methods.HttpDelete;
|
||||
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpPut;
|
||||
import org.apache.http.client.methods.HttpRequestBase;
|
||||
import org.apache.http.client.utils.URLEncodedUtils;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
/**
|
||||
* The base API class containing common methods for making v0 API requests
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.5
|
||||
*/
|
||||
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}";
|
||||
private static final String SLINGSHOT_PREFIX = "alfresco/s/slingshot/";
|
||||
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
@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";
|
||||
|
||||
/**
|
||||
* Helper method to extract list of properties values from result.
|
||||
*
|
||||
* @param result the response
|
||||
* @return list of specified property values in result
|
||||
* @throws RuntimeException for malformed response
|
||||
*/
|
||||
protected List<String> getPropertyValues(JSONObject result, String propertyName)
|
||||
{
|
||||
ArrayList<String> results = new ArrayList<>();
|
||||
try
|
||||
{
|
||||
JSONArray items = result.getJSONArray("items");
|
||||
|
||||
for (int i = 0; i < items.length(); i++)
|
||||
{
|
||||
results.add(items.getJSONObject(i).getString(propertyName));
|
||||
}
|
||||
}
|
||||
catch (JSONException error)
|
||||
{
|
||||
throw new RuntimeException("Unable to parse result", error);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
String propertyValue = "";
|
||||
try
|
||||
{
|
||||
JSONArray items = result.getJSONArray("items");
|
||||
for (int i = 0; i < items.length(); i++)
|
||||
{
|
||||
JSONObject item = items.getJSONObject(i);
|
||||
if(nodeRef.equals(item.getString("nodeRef")))
|
||||
{
|
||||
propertyValue = item.getJSONObject("properties").getString(propertyName);
|
||||
}
|
||||
}
|
||||
}
|
||||
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.
|
||||
*
|
||||
* @param requestResult the request response
|
||||
* @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)
|
||||
{
|
||||
Map<String, List<String>> valuesByUniqueProperty = new HashMap<>();
|
||||
try
|
||||
{
|
||||
JSONArray items = requestResult.getJSONArray("items");
|
||||
|
||||
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());
|
||||
}
|
||||
valuesByUniqueProperty.put(items.getJSONObject(i).getString(uniqueProperty), otherPropertiesValues);
|
||||
}
|
||||
}
|
||||
catch (JSONException error)
|
||||
{
|
||||
throw new RuntimeException("Unable to parse result", error);
|
||||
}
|
||||
|
||||
return valuesByUniqueProperty;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the nodeRef of an item (category, folder or record) with the given path
|
||||
*
|
||||
* @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 ""
|
||||
* @return the container nodeRef
|
||||
*/
|
||||
public String getItemNodeRef(String username, String password, String path)
|
||||
{
|
||||
return contentService.getNodeRefByPath(username, password, FILE_PLAN_PATH + path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a Cmis object by its path
|
||||
*
|
||||
* @param username the user's username
|
||||
* @param password its password
|
||||
* @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)
|
||||
{
|
||||
CmisObject object;
|
||||
try
|
||||
{
|
||||
object = contentService.getCMISSession(username, password).getObjectByPath(path);
|
||||
} catch (CmisObjectNotFoundException notFoundError)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic faceted request.
|
||||
*
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @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)
|
||||
{
|
||||
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"));
|
||||
}
|
||||
LOGGER.info("On GET {}, received following response: ", requestURL);
|
||||
client.close();
|
||||
return doGetRequest(username, password, requestURL);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams);
|
||||
client.close();
|
||||
|
||||
try
|
||||
{
|
||||
return doRequest(HttpGet.class, requestUrl, adminUser, adminPassword, null);
|
||||
}
|
||||
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)
|
||||
{
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams);
|
||||
client.close();
|
||||
|
||||
try
|
||||
{
|
||||
return doRequest(HttpDelete.class, requestUrl, adminUser, adminPassword, null);
|
||||
}
|
||||
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)
|
||||
{
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams);
|
||||
client.close();
|
||||
|
||||
try
|
||||
{
|
||||
return doRequest(HttpPut.class, requestUrl, adminUser, adminPassword, requestParams);
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException error)
|
||||
{
|
||||
throw new IllegalArgumentException("doPutRequest failed", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for PUT requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @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 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for PUT requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @param urlStart the start of the URL (for example "alfresco/s/slingshot").
|
||||
* @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>
|
||||
* @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)
|
||||
{
|
||||
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());
|
||||
return httpResponse;
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException error)
|
||||
{
|
||||
throw new IllegalArgumentException("doPutRequest failed", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill in the parameters for a URL template.
|
||||
*
|
||||
* @param urlStart The start of the URL.
|
||||
* @param urlTemplate The template.
|
||||
* @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)
|
||||
{
|
||||
// The format method needs some help to know not to use the whole array object.
|
||||
return MessageFormat.format(urlTemplate, urlStart, urlTemplateParams[0]);
|
||||
}
|
||||
return MessageFormat.format(urlTemplate, urlStart, urlTemplateParams);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String requestUrl = MessageFormat.format(
|
||||
urlTemplate,
|
||||
client.getApiUrl(),
|
||||
urlTemplateParams);
|
||||
client.close();
|
||||
|
||||
try
|
||||
{
|
||||
return doRequest(HttpPost.class, requestUrl, adminUser, adminPassword, requestParams);
|
||||
}
|
||||
catch (InstantiationException | IllegalAccessException error)
|
||||
{
|
||||
throw new IllegalArgumentException("doPostRequest failed", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for POST requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @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 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for POST requests to slingshot.
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @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 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for POST requests
|
||||
*
|
||||
* @param adminUser user with administrative privileges
|
||||
* @param adminPassword password for adminUser
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @param urlStart the start of the URL (for example "alfresco/s/slingshot").
|
||||
* @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>
|
||||
* @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)
|
||||
{
|
||||
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());
|
||||
return httpResponse;
|
||||
}
|
||||
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
|
||||
* @param adminPassword password for adminUser
|
||||
* @param requestParams endpoint specific request parameters
|
||||
* @return response body
|
||||
* @throws IllegalAccessException for invalid <i>requestType</i>
|
||||
* @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
|
||||
{
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
T request = requestType.newInstance();
|
||||
|
||||
JSONObject responseBody = null;
|
||||
JSONObject returnValues = null;
|
||||
|
||||
try
|
||||
{
|
||||
request.setURI(new URI(requestUrl));
|
||||
|
||||
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
LOGGER.error("Parsing message body failed.", error);
|
||||
}
|
||||
|
||||
switch (response.getStatusLine().getStatusCode())
|
||||
{
|
||||
case HttpStatus.SC_OK:
|
||||
case HttpStatus.SC_CREATED:
|
||||
// request successful
|
||||
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));
|
||||
returnValues = responseBody;
|
||||
}
|
||||
break;
|
||||
case HttpStatus.SC_BAD_REQUEST:
|
||||
case HttpStatus.SC_UNPROCESSABLE_ENTITY:
|
||||
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());
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (JSONException error)
|
||||
{
|
||||
LOGGER.error("Unable to extract response parameter", error);
|
||||
}
|
||||
catch (UnsupportedEncodingException | URISyntaxException error1)
|
||||
{
|
||||
LOGGER.error("Unable to construct request", error1);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (request != null)
|
||||
{
|
||||
request.releaseConnection();
|
||||
}
|
||||
client.close();
|
||||
}
|
||||
|
||||
return returnValues;
|
||||
}
|
||||
|
||||
private <T extends HttpRequestBase> HttpResponse doRequestJson(
|
||||
Class<T> requestType,
|
||||
String requestUrl,
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
JSONObject requestParams) throws InstantiationException, IllegalAccessException
|
||||
{
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
T request = requestType.newInstance();
|
||||
|
||||
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()));
|
||||
}
|
||||
|
||||
LOGGER.info("Sending {} request to {}", requestType.getSimpleName(), requestUrl);
|
||||
LOGGER.info("Request body: {}", requestParams);
|
||||
HttpResponse httpResponse = client.execute(adminUser, adminPassword, request);
|
||||
LOGGER.info("Response: {}", httpResponse.getStatusLine());
|
||||
return httpResponse;
|
||||
}
|
||||
catch (UnsupportedEncodingException | URISyntaxException error1)
|
||||
{
|
||||
LOGGER.error("Unable to construct request", error1);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (request != null)
|
||||
{
|
||||
request.releaseConnection();
|
||||
}
|
||||
client.close();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to set RM items properties
|
||||
* including records, categories and folders
|
||||
*/
|
||||
public enum RMProperty
|
||||
{
|
||||
NAME,
|
||||
TITLE,
|
||||
CONTENT,
|
||||
DESCRIPTION,
|
||||
AUTHOR,
|
||||
PHYSICAL_SIZE,
|
||||
NUMBER_OF_COPIES,
|
||||
STORAGE_LOCATION,
|
||||
SHELF,
|
||||
BOX,
|
||||
FILE,
|
||||
ORIGINATOR,
|
||||
ORIGINATING_ORGANIZATION,
|
||||
PUBLICATION_DATE
|
||||
}
|
||||
|
||||
public enum RETENTION_SCHEDULE
|
||||
{
|
||||
NAME,
|
||||
DESCRIPTION,
|
||||
RETENTION_AUTHORITY,
|
||||
RETENTION_INSTRUCTIONS,
|
||||
RETENTION_PERIOD,
|
||||
RETENTION_LOCATION,
|
||||
RETENTION_PERIOD_PROPERTY,
|
||||
RETENTION_GHOST,
|
||||
RETENTION_ELIGIBLE_FIRST_EVENT,
|
||||
RETENTION_EVENTS,
|
||||
COMBINE_DISPOSITION_STEP_CONDITIONS
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to execute rm actions on a node
|
||||
*/
|
||||
public enum RM_ACTIONS
|
||||
{
|
||||
EDIT_DISPOSITION_DATE("editDispositionActionAsOfDate"),
|
||||
END_RETENTION("retain"),
|
||||
CUT_OFF("cutoff"),
|
||||
UNDO_CUT_OFF("undoCutoff"),
|
||||
TRANSFER("transfer"),
|
||||
COMPLETE_EVENT("completeEvent"),
|
||||
UNDO_EVENT("undoEvent"),
|
||||
DESTROY("destroy");
|
||||
String action;
|
||||
|
||||
private RM_ACTIONS(String action)
|
||||
{
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
public String getAction()
|
||||
{
|
||||
return action;
|
||||
}
|
||||
}
|
||||
|
||||
public enum PermissionType
|
||||
{
|
||||
SET_READ,
|
||||
REMOVE_READ,
|
||||
SET_READ_AND_FILE,
|
||||
REMOVE_READ_AND_FILE,
|
||||
}
|
||||
|
||||
/**
|
||||
* Util to return the property value from a map
|
||||
*
|
||||
* @param properties the map containing properties
|
||||
* @param property to get value for
|
||||
* @return the property value
|
||||
*/
|
||||
public <K extends Enum<?>> String getPropertyValue(Map<K, String> properties, Enum<?> property)
|
||||
{
|
||||
String value = properties.get(property);
|
||||
if (value == null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the property value and decides if that gets to be added to the request
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
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(""))
|
||||
{
|
||||
requestParams.put(propertyRequestValue, propertyValue);
|
||||
}
|
||||
return requestParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes the category, folder or record given as parameter
|
||||
*
|
||||
* @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
|
||||
* @throws AssertionError if the delete was not successful.
|
||||
*/
|
||||
protected void deleteItem(String username, String password, String itemPath)
|
||||
{
|
||||
CmisObject container = getObjectByPath(username, password, FILE_PLAN_PATH + itemPath);
|
||||
if (container != null)
|
||||
{
|
||||
container.delete();
|
||||
}
|
||||
assertNull("Could not delete " + itemPath, getObjectByPath(username, password, itemPath));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the node ref spaces store value
|
||||
*
|
||||
* @return node ref spaces store
|
||||
*/
|
||||
public static String getNodeRefSpacesStore()
|
||||
{
|
||||
return NODE_REF_WORKSPACE_SPACES_STORE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the File Plan path
|
||||
*
|
||||
* @return the File Plan path
|
||||
*/
|
||||
public static String getFilePlanPath()
|
||||
{
|
||||
return FILE_PLAN_PATH;
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.core.v0;
|
||||
|
||||
public enum RMEvents
|
||||
{
|
||||
ABOLISHED("abolished"),
|
||||
ALL_ALLOWANCES_GRANTED_ARE_TERMINATED("all_allowances_granted_are_terminated"),
|
||||
CASE_CLOSED("case_closed"),
|
||||
DECLASSIFICATION_REVIEW("declassification_review"),
|
||||
OBSOLETE("obsolete"),
|
||||
NO_LONGER_NEEDED("no_longer_needed"),
|
||||
STUDY_COMPLETE("study_complete");
|
||||
private String eventName;
|
||||
|
||||
RMEvents(String eventName)
|
||||
{
|
||||
this.eventName = eventName;
|
||||
}
|
||||
|
||||
public String getEventName()
|
||||
{
|
||||
return eventName;
|
||||
}
|
||||
}
|
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.audit;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
/**
|
||||
* POJO for audit entry
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.7
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class AuditEntry extends TestModel
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private String nodeName;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<Object> changedValues;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String path;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeRef;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String fullName;
|
||||
|
||||
@JsonProperty
|
||||
private String createPerson;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String userName;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String userRole;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String event;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String timestamp;
|
||||
|
||||
}
|
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.audit;
|
||||
|
||||
/**
|
||||
* Enumerates the list of events audited
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.7
|
||||
*
|
||||
*/
|
||||
public enum AuditEvents
|
||||
{
|
||||
CREATE_PERSON("Create Person", "Create User"),
|
||||
DELETE_PERSON("Delete Person", "Delete User"),
|
||||
CREATE_USER_GROUP("Create User Group", "Create User Group"),
|
||||
DELETE_USER_GROUP("Delete User Group", "Delete User Group"),
|
||||
ADD_TO_USER_GROUP("Add To User Group", "Add To User Group"),
|
||||
REMOVE_FROM_USER_GROUP("Remove From User Group", "Remove From User Group"),
|
||||
LOGIN_UNSUCCESSFUL("Login.Failure", "Login Unsuccessful"),
|
||||
LOGIN_SUCCESSFUL("Login.Success", "Login Successful"),
|
||||
CREATE_HOLD("Create Hold", "Create Hold"),
|
||||
DELETE_HOLD("Delete Hold", "Delete Hold"),
|
||||
ADD_TO_HOLD("Add To Hold", "Add To Hold"),
|
||||
REMOVE_FROM_HOLD("Remove From Hold", "Remove From Hold");
|
||||
|
||||
/** event audited */
|
||||
public final String event;
|
||||
|
||||
/** display name for the event audited */
|
||||
public final String eventDisplayName;
|
||||
|
||||
AuditEvents(String event, String displayName)
|
||||
{
|
||||
this.event = event;
|
||||
this.eventDisplayName = displayName;
|
||||
}
|
||||
}
|
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.common;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for id/name pair
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class IdNamePair
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
}
|
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.common;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
/**
|
||||
* POJO for owner parameter
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
//@NoArgsConstructor
|
||||
//@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class Owner extends TestModel
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for path parameter
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Path extends TestModel
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private Boolean isComplete;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<IdNamePair> elements;
|
||||
}
|
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.common;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for the review period parameter
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ReviewPeriod
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private String periodType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String expression;
|
||||
}
|
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.custom;
|
||||
|
||||
/**
|
||||
* List of existing records management custom references.
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
public enum CustomDefinitions
|
||||
{
|
||||
ATTACHMENT("Attachment"),
|
||||
MESSAGE("Message"),
|
||||
NEXT_VERSION("Next Version"),
|
||||
RENDITION("Rendition");
|
||||
/**
|
||||
* The name of custom reference.
|
||||
*/
|
||||
private String definition;
|
||||
|
||||
/**
|
||||
* Private constructor.
|
||||
*/
|
||||
CustomDefinitions(String definition)
|
||||
{
|
||||
this.definition = definition;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of the custom reference.
|
||||
*
|
||||
* @return The value of custom reference.
|
||||
*/
|
||||
public String getDefinition()
|
||||
{
|
||||
return definition;
|
||||
}
|
||||
}
|
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for file plan
|
||||
*
|
||||
* @author Ramona Popa
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FilePlan extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private FilePlanProperties properties;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.fileplan;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_COMPONENT_ID;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_COUNT;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
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 static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for file plan properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FilePlanProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_COMPONENT_ID)
|
||||
private String componentd;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty (PROPERTIES_COUNT)
|
||||
private Integer count;
|
||||
|
||||
@JsonProperty (PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
|
||||
/**
|
||||
* File plan component alias
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
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-";
|
||||
}
|
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
|
||||
/**
|
||||
* File plan component aspect names constants
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.6
|
||||
*/
|
||||
public class FilePlanComponentAspects
|
||||
{
|
||||
/** Private constructor to prevent instantiation. */
|
||||
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 vital records
|
||||
public static final String ASPECTS_VITAL_RECORD = "rma:vitalRecord";
|
||||
|
||||
// Frozen aspect
|
||||
public static final String FROZEN_ASPECT = "rma:frozen";
|
||||
|
||||
// recordSearch aspect
|
||||
public static final String RECORD_SEARCH_ASPECT = "rma:recordSearch";
|
||||
|
||||
// retention schedule cut off aspect
|
||||
public static final String CUT_OFF_ASPECT = "rma:cutOff";
|
||||
|
||||
// declare version as record aspect
|
||||
public static final String VERSION_AS_RECORD = "rmv:versionRecord";
|
||||
|
||||
// WORM store selector aspect
|
||||
public static final String ASPECT_STORE_SELECTOR = "cm:storeSelector";
|
||||
|
||||
// WORM Lock aspect
|
||||
public static final String ASPECT_WORM_LOCK = "rme:wormLock";
|
||||
}
|
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
|
||||
/**
|
||||
* File plan component field names constants
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
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 **/
|
||||
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";
|
||||
|
||||
/** 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";
|
||||
|
||||
|
||||
/** 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_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";
|
||||
|
||||
/**
|
||||
* 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";
|
||||
public static final String PROPERTIES_DATE_TIME_ORIGINAL = "exif:dateTimeOriginal";
|
||||
public static final String PROPERTIES_EXPOSURE_TIME = "exif:exposureTime";
|
||||
public static final String PROPERTIES_FLASH = "exif:flash";
|
||||
public static final String PROPERTIES_F_NUMBER = "exif:fNumber";
|
||||
public static final String PROPERTIES_FOCAL_LENGTH = "exif:focalLength";
|
||||
public static final String PROPERTIES_ISO_SPEED_RATINGS = "exif:isoSpeedRatings";
|
||||
public static final String PROPERTIES_MANUFACTURER = "exif:manufacturer";
|
||||
public static final String PROPERTIES_MODEL = "exif:model";
|
||||
public static final String PROPERTIES_ORIENTATION = "exif:orientation";
|
||||
public static final String PROPERTIES_PIXEL_X_DIMENSION = "exif:pixelXDimension";
|
||||
public static final String PROPERTIES_PIXEL_Y_DIMENSION = "exif:pixelYDimension";
|
||||
public static final String PROPERTIES_RESOLUTION_UNIT = "exif:resolutionUnit";
|
||||
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";
|
||||
|
||||
/** 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";
|
||||
public static final String PROPERTIES_NUMBER_OF_COPIES = "rma:numberOfCopies";
|
||||
public static final String PROPERTIES_PHYSICAL_SIZE = "rma:physicalSize";
|
||||
|
||||
/** 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";
|
||||
public static final String PATH = "path";
|
||||
/** CONTENT STORE property */
|
||||
public static final String PROPERTIES_STORE = "cm:storeName";
|
||||
/** WORM Unlock Date */
|
||||
public static final String PROPERTIES_WORM_UNLOCK_DATE = "rme:wormUnlockDate";
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.fileplancomponents;
|
||||
|
||||
/**
|
||||
* File plan component type
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
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";
|
||||
public static final String RECORD_TYPE = "rma:record"; // generic record type
|
||||
public static final String UNFILED_RECORD_FOLDER_TYPE = "rma:unfiledRecordFolder";
|
||||
public static final String TRANSFER_TYPE = "rma:transfer";
|
||||
public static final String TRANSFER_CONTAINER_TYPE = "rma:transferContainer";
|
||||
public static final String UNFILED_CONTAINER_TYPE = "rma:unfiledRecordContainer";
|
||||
public static final String FOLDER_TYPE = "cm:folder";
|
||||
public static final String CONTENT_TYPE = "cm:content";
|
||||
public static final String NON_ELECTRONIC_RECORD_TYPE = "rma:nonElectronicDocument";
|
||||
}
|
@@ -0,0 +1,56 @@
|
||||
/*-
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.hold;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.alfresco.utility.model.TestModel;
|
||||
|
||||
/**
|
||||
* POJO for hold entry
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 3.2
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class HoldEntry extends TestModel
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeRef;
|
||||
}
|
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.record;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import org.alfresco.rest.core.IRestModel;
|
||||
import org.alfresco.rest.core.assertion.ModelAssertion;
|
||||
import org.alfresco.rest.model.RestByUserModel;
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Record extends TestModel implements IRestModel<RestNodeModel>
|
||||
{
|
||||
public final static String CONTENT_NODE_TYPE = "cm:content";
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private RecordContent content;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
|
||||
@JsonProperty
|
||||
private RecordProperties properties;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@Override
|
||||
public ModelAssertion<RestNodeModel> assertThat()
|
||||
{
|
||||
return new ModelAssertion<>(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelAssertion<RestNodeModel> and()
|
||||
{
|
||||
return assertThat();
|
||||
}
|
||||
|
||||
@JsonProperty (value = "entry")
|
||||
RestNodeModel model;
|
||||
|
||||
@Override
|
||||
public RestNodeModel onModel()
|
||||
{
|
||||
return model;
|
||||
}
|
||||
}
|
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for File records
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordBodyFile extends TestModel
|
||||
{
|
||||
@JsonProperty
|
||||
private String targetParentId;
|
||||
}
|
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record content field
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordContent extends TestModel
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private String mimeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String mimeTypeName;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private Integer sizeInBytes;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String encoding;
|
||||
}
|
@@ -0,0 +1,268 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.record;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_AUTHOR;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_BOX;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_CLASSIFICATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_FILED;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_TIME_ORIGINAL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_EXPOSURE_TIME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FILE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FLASH;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FOCAL_LENGTH;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_F_NUMBER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ISO_SPEED_RATINGS;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_MANUFACTURER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_MODEL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_NUMBER_OF_COPIES;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ORIENTATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ORIGINAL_NAME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PHYSICAL_SIZE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PIXEL_X_DIMENSION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PIXEL_Y_DIMENSION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_ORIGINATING_CREATION_DATE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_ORIGINATING_LOCATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_RECORD_ORIGINATING_USER_ID;
|
||||
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_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_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_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;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_SHELF;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_SOFTWARE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_STORAGE_LOCATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_STORE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSIONED_NODEREF;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSION_LABEL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSION_TYPE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_WORM_UNLOCK_DATE;
|
||||
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;
|
||||
|
||||
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 properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class RecordProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_DATE_FILED)
|
||||
private String dateField;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
|
||||
private Boolean recordSearchHasDispositionSchedule;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_ORIGINAL_NAME)
|
||||
private String originalName;
|
||||
|
||||
@JsonProperty (PROPERTIES_CLASSIFICATION)
|
||||
private List<String> classification;
|
||||
|
||||
/*********************************/
|
||||
/** Electronic record parameters */
|
||||
/*********************************/
|
||||
@JsonProperty (PROPERTIES_VERSION_TYPE)
|
||||
private String versionType;
|
||||
|
||||
@JsonProperty (PROPERTIES_VERSION_LABEL)
|
||||
private String versionLabel;
|
||||
|
||||
@JsonProperty(PROPERTIES_VERSIONED_NODEREF)
|
||||
private String versionedNodeRef;
|
||||
|
||||
@JsonProperty (PROPERTIES_RMV_VERSIONED)
|
||||
private String recordVersionLabel;
|
||||
|
||||
@JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL)
|
||||
private String dateTimeOriginal;
|
||||
|
||||
@JsonProperty (PROPERTIES_EXPOSURE_TIME)
|
||||
private Double exposureTime;
|
||||
|
||||
@JsonProperty (PROPERTIES_FLASH)
|
||||
private Boolean flash;
|
||||
|
||||
@JsonProperty (PROPERTIES_F_NUMBER)
|
||||
private Double fNumber;
|
||||
|
||||
@JsonProperty (PROPERTIES_FOCAL_LENGTH)
|
||||
private Double focalLength;
|
||||
|
||||
@JsonProperty (PROPERTIES_ISO_SPEED_RATINGS)
|
||||
private Integer isoSpeedRatings;
|
||||
|
||||
@JsonProperty (PROPERTIES_MANUFACTURER)
|
||||
private String manufacturer;
|
||||
|
||||
@JsonProperty (PROPERTIES_MODEL)
|
||||
private String model;
|
||||
|
||||
@JsonProperty (PROPERTIES_ORIENTATION)
|
||||
private Integer orientation;
|
||||
|
||||
@JsonProperty (PROPERTIES_PIXEL_X_DIMENSION)
|
||||
private Integer pixelXDimension;
|
||||
|
||||
@JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION)
|
||||
private Integer pixelYDimension;
|
||||
|
||||
@JsonProperty (PROPERTIES_RESOLUTION_UNIT)
|
||||
private String resolutionUnit;
|
||||
|
||||
@JsonProperty (PROPERTIES_SOFTWARE)
|
||||
private String software;
|
||||
|
||||
@JsonProperty (PROPERTIES_X_RESOLUTION)
|
||||
private Double xResolution;
|
||||
|
||||
@JsonProperty (PROPERTIES_Y_RESOLUTION)
|
||||
private Double yResolution;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_ORIGINATING_LOCATION)
|
||||
private String originatingLocation;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_ORIGINATING_USER_ID)
|
||||
private String originatingUserId;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_ORIGINATING_CREATION_DATE)
|
||||
private String originatingCreationDate;
|
||||
|
||||
/*************************************/
|
||||
/** Non-electronic record parameters */
|
||||
/*************************************/
|
||||
@JsonProperty (PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (PROPERTIES_SHELF)
|
||||
private String shelf;
|
||||
|
||||
@JsonProperty (PROPERTIES_STORAGE_LOCATION)
|
||||
private String storageLocation;
|
||||
|
||||
@JsonProperty (PROPERTIES_FILE)
|
||||
private String file;
|
||||
|
||||
@JsonProperty (PROPERTIES_BOX)
|
||||
private String box;
|
||||
|
||||
@JsonProperty (PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
|
||||
@JsonProperty (PROPERTIES_NUMBER_OF_COPIES)
|
||||
private Integer numberOfCopies;
|
||||
|
||||
@JsonProperty (PROPERTIES_PHYSICAL_SIZE)
|
||||
private Integer physicalSize;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
|
||||
@JsonProperty(PROPERTIES_AUTHOR)
|
||||
private String author;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
|
||||
private String recordSearchDispositionPeriodExpression;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
|
||||
private String recordSearchDispositionAuthority;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
|
||||
private Date recordSearchDispositionActionAsOf;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
|
||||
private String recordSearchDispositionPeriod;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
|
||||
private String recordSearchDispositionActionName;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
|
||||
private Boolean recordSearchDispositionEventsEligible;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
|
||||
private String recordSearchDispositionInstructions;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD)
|
||||
private String recordSearchVitalRecordReviewPeriod;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION)
|
||||
private String recordSearchVitalRecordReviewPeriodExpression;
|
||||
|
||||
@JsonProperty(PROPERTIES_REVIEW_AS_OF)
|
||||
private Date reviewAsOf;
|
||||
|
||||
@JsonProperty (PROPERTIES_STORE)
|
||||
private String store;
|
||||
|
||||
@JsonProperty(PROPERTIES_WORM_UNLOCK_DATE)
|
||||
private Date wormUnlockDate;
|
||||
}
|
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record category
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordCategory extends TestModel
|
||||
{
|
||||
public static final String DEFAULT_FILE_PLAN_ALIAS = "-filePlan-";
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RecordCategoryProperties properties;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private Boolean hasRetentionSchedule;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record category child
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordCategoryChild extends TestModel
|
||||
{
|
||||
public static final String RECORD_FOLDER_NODE_TYPE = "rma:recordFolder";
|
||||
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private Boolean isRecordCategory;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isRecordFolder;
|
||||
|
||||
@JsonProperty
|
||||
private RecordCategoryChildProperties properties;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean hasRetentionSchedule;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@JsonProperty
|
||||
private String relativePath;
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link RecordCategoryChildEntry}
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordCategoryChildCollection extends RestModels<RecordCategoryChildEntry, RecordCategoryChildCollection>
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record category child entry
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class RecordCategoryChildEntry extends RestModels<RecordCategory, RecordCategoryChildEntry>
|
||||
{
|
||||
@JsonProperty
|
||||
private RecordCategoryChild entry;
|
||||
}
|
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_HELD_CHILDREN_COUNT;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
|
||||
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_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_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 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;
|
||||
|
||||
/**
|
||||
* POJO for record category child properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordCategoryChildProperties extends TestModel
|
||||
{
|
||||
/**************************************************************************/
|
||||
/** Mandatory parameters - Shared by record categories and record folders */
|
||||
/**************************************************************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR)
|
||||
private Boolean vitalRecordIndicator;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_REVIEW_PERIOD)
|
||||
@JsonSerialize (using = ReviewPeriodSerializer.class)
|
||||
private ReviewPeriod reviewPeriod;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
|
||||
/*********************************************************/
|
||||
/** Optional parameters - Applies only to record folders */
|
||||
/*********************************************************/
|
||||
@JsonProperty (PROPERTIES_HELD_CHILDREN_COUNT)
|
||||
private Integer heldChildrenCount;
|
||||
|
||||
@JsonProperty (PROPERTIES_LOCATION)
|
||||
private String location;
|
||||
|
||||
@JsonProperty (PROPERTIES_IS_CLOSED)
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
|
||||
private Boolean recordSearchHasDispositionSchedule;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD_EXPRESSION)
|
||||
private String recordSearchDispositionPeriodExpression;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
|
||||
private String recordSearchDispositionAuthority;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_AS_OF)
|
||||
private Date recordSearchDispositionActionAsOf;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_PERIOD)
|
||||
private String recordSearchDispositionPeriod;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_ACTION_NAME)
|
||||
private String recordSearchDispositionActionName;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS_ELIGIBLE)
|
||||
private Boolean recordSearchDispositionEventsEligible;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
|
||||
private String recordSearchDispositionInstructions;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_EVENTS)
|
||||
private Boolean recordSearchDispositionEvents;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link RecordCategoryEntry}
|
||||
*
|
||||
* @author Ramona Popa
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordCategoryCollection extends RestModels<RecordCategoryEntry, RecordCategoryCollection>
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for file plan entry
|
||||
*
|
||||
* @author Ramona Popa
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class RecordCategoryEntry extends RestModels<FilePlan, RecordCategoryEntry>
|
||||
{
|
||||
@JsonProperty
|
||||
private RecordCategory entry;
|
||||
}
|
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordcategory;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_CLASSIFICATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
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_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.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;
|
||||
|
||||
/**
|
||||
* POJO for record category properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class RecordCategoryProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_REVIEW_PERIOD)
|
||||
@JsonSerialize (using = ReviewPeriodSerializer.class)
|
||||
private ReviewPeriod reviewPeriod;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_VITAL_RECORD_INDICATOR)
|
||||
private Boolean vitalRecordIndicator;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty (PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
|
||||
@JsonProperty (PROPERTIES_CLASSIFICATION)
|
||||
private List<String> classification;
|
||||
}
|
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record folder
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordFolder extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RecordFolderProperties properties;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordfolder;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link RecordFolderEntry}
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordFolderCollection extends RestModels<RecordFolderEntry, RecordFolderCollection>
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record folder entry
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordFolderEntry extends RestModels<RecordFolder, RecordFolderEntry>
|
||||
{
|
||||
@JsonProperty
|
||||
private Record entry;
|
||||
}
|
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.recordfolder;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_CLASSIFICATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_HELD_CHILDREN_COUNT;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
|
||||
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_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;
|
||||
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.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;
|
||||
|
||||
/**
|
||||
* POJO for record folder properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class RecordFolderProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_IS_CLOSED)
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_HELD_CHILDREN_COUNT)
|
||||
private Integer heldChildrenCount;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty (PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (PROPERTIES_VITAL_RECORD_INDICATOR)
|
||||
private Boolean vitalRecordIndicator;
|
||||
|
||||
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (PROPERTIES_LOCATION)
|
||||
private String location;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
|
||||
private Boolean recordSearchHasDispositionSchedule;
|
||||
|
||||
@JsonProperty (PROPERTIES_REVIEW_PERIOD)
|
||||
@JsonSerialize (using = ReviewPeriodSerializer.class)
|
||||
private ReviewPeriod reviewPeriod;
|
||||
|
||||
@JsonProperty (PROPERTIES_CLASSIFICATION)
|
||||
private List<String> classification;
|
||||
|
||||
@JsonProperty (PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD)
|
||||
private String recordSearchVitalRecordReviewPeriod;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_VITAL_RECORD_REVIEW_PERIOD_EXPRESSION)
|
||||
private String recordSearchVitalRecordReviewPeriodExpression;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_AUTHORITY)
|
||||
private String recordSearchDispositionAuthority;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_DISPOSITION_INSTRUCTIONS)
|
||||
private String recordSearchDispositionInstructions;
|
||||
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.rules;
|
||||
|
||||
/**
|
||||
* Action values.
|
||||
*/
|
||||
public enum ActionsOnRule
|
||||
{
|
||||
COMPLETE_RECORD("declareRecord"),
|
||||
REOPEN_RECORD("undeclareRecord"),
|
||||
OPEN_RECORD_FOLDER("openRecordFolder"),
|
||||
CLOSE_RECORD_FOLDER("closeRecordFolder"),
|
||||
FILE_TO("fileTo"),
|
||||
COPY_TO("copyTo"),
|
||||
MOVE_TO("moveTo"),
|
||||
LINK_TO("linkTo"),
|
||||
REJECT("reject"),
|
||||
REQUEST_INFORMATION("requestInfo"),
|
||||
COMPLETE_EVENT("completeEvent"),
|
||||
ADD_RECORD_TYPES("addRecordTypes"),
|
||||
EXECUTE_SCRIPT("executeScript"),
|
||||
SEND_EMAIL("sendEmail"),
|
||||
SET_PROPERTY_VALUE_COLL_SITE("set-property-value"),
|
||||
SET_PROPERTY_VALUE_RM("setPropertyValue"),
|
||||
HIDE_RECORD("hide-record"),
|
||||
DECLARE_VERSION_AS_RECORD("declare-as-version-record"),
|
||||
DECLARE_AS_RECORD("create-record"),
|
||||
WORM_LOCK("wormLock");
|
||||
|
||||
private String actionValue;
|
||||
|
||||
ActionsOnRule(String value)
|
||||
{
|
||||
this.actionValue = value;
|
||||
}
|
||||
|
||||
public String getActionValue()
|
||||
{
|
||||
return actionValue;
|
||||
}
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.rules;
|
||||
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
public String getWhenConditionValue()
|
||||
{
|
||||
return whenConditionValue;
|
||||
}
|
||||
}
|
@@ -0,0 +1,203 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.rules;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A class describing the rule
|
||||
*/
|
||||
public class RuleDefinition
|
||||
{
|
||||
private String id = "";
|
||||
private String title;
|
||||
private String description = "";
|
||||
private boolean disabled = false;
|
||||
private boolean applyToChildren = false;
|
||||
private boolean runInBackground = false;
|
||||
private String ruleType = ConditionsOnRule.ADDED.getWhenConditionValue();
|
||||
private String path;
|
||||
private Boolean createRecordPath;
|
||||
private String contentTitle;
|
||||
private String contentDescription;
|
||||
private String rejectReason;
|
||||
private List<String> actions;
|
||||
|
||||
/**
|
||||
* Creates a new object of type Rule Definition
|
||||
*
|
||||
* @return the object
|
||||
*/
|
||||
public static RuleDefinition createNewRule()
|
||||
{
|
||||
return new RuleDefinition();
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public RuleDefinition id(String id)
|
||||
{
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getTitle()
|
||||
{
|
||||
return title;
|
||||
}
|
||||
|
||||
public RuleDefinition title(String title)
|
||||
{
|
||||
this.title = title;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDescription()
|
||||
{
|
||||
return description;
|
||||
}
|
||||
|
||||
public RuleDefinition description(String description)
|
||||
{
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isDisabled()
|
||||
{
|
||||
return disabled;
|
||||
}
|
||||
|
||||
public RuleDefinition disabled(boolean disabled)
|
||||
{
|
||||
this.disabled = disabled;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isApplyToChildren()
|
||||
{
|
||||
return applyToChildren;
|
||||
}
|
||||
|
||||
public RuleDefinition applyToChildren(boolean applyToChildren)
|
||||
{
|
||||
this.applyToChildren = applyToChildren;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean getRunInBackground()
|
||||
{
|
||||
return runInBackground;
|
||||
}
|
||||
|
||||
public RuleDefinition runInBackground(boolean runInBackground)
|
||||
{
|
||||
this.runInBackground = runInBackground;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getRuleType()
|
||||
{
|
||||
return ruleType;
|
||||
}
|
||||
|
||||
public RuleDefinition ruleType(String ruleType)
|
||||
{
|
||||
this.ruleType = ruleType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getPath()
|
||||
{
|
||||
return path;
|
||||
}
|
||||
|
||||
public RuleDefinition path(String path)
|
||||
{
|
||||
this.path = path;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Boolean getCreateRecordPath()
|
||||
{
|
||||
return createRecordPath;
|
||||
}
|
||||
|
||||
public RuleDefinition createRecordPath(boolean createRecordPath)
|
||||
{
|
||||
this.createRecordPath = createRecordPath;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getContentTitle()
|
||||
{
|
||||
return contentTitle;
|
||||
}
|
||||
|
||||
public RuleDefinition contentTitle(String contentTitle)
|
||||
{
|
||||
this.contentTitle = contentTitle;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getContentDescription()
|
||||
{
|
||||
return contentDescription;
|
||||
}
|
||||
|
||||
public RuleDefinition contentDescription(String contentDescription)
|
||||
{
|
||||
this.contentDescription = contentDescription;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getRejectReason()
|
||||
{
|
||||
return rejectReason;
|
||||
}
|
||||
|
||||
public RuleDefinition rejectReason(String rejectReason)
|
||||
{
|
||||
this.rejectReason = rejectReason;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<String> getActions()
|
||||
{
|
||||
return actions;
|
||||
}
|
||||
|
||||
public RuleDefinition actions(List<String> actions)
|
||||
{
|
||||
this.actions = actions;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for RM Site component
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
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)
|
||||
{
|
||||
this.setTitle(title);
|
||||
this.setDescription(description);
|
||||
this.compliance = compliance;
|
||||
}
|
||||
}
|
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.site;
|
||||
|
||||
/**
|
||||
* RM Site compliance
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public enum RMSiteCompliance
|
||||
{
|
||||
STANDARD,
|
||||
DOD5015
|
||||
}
|
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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}"
|
||||
*}
|
||||
* @author Tuna Aksoy
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
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 ROLE = "role";
|
||||
}
|
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for Transfer
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Transfer extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private TransferProperties properties;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
}
|
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for transfer child
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferChild extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private TransferChildProperties properties;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isRecord;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isRecordFolder;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link TransferChildEntry}
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
public class TransferChildCollection extends RestModels<TransferChildEntry, TransferChildCollection>
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for transfer child entry
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferChildEntry extends RestModels<Transfer, TransferChildEntry>
|
||||
{
|
||||
@JsonProperty
|
||||
private TransferChild entry;
|
||||
}
|
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_BOX;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_FILED;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_TIME_ORIGINAL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_EXPOSURE_TIME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FILE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FLASH;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FOCAL_LENGTH;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_F_NUMBER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_HELD_CHILDREN_COUNT;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ISO_SPEED_RATINGS;
|
||||
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_MANUFACTURER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_MODEL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_NUMBER_OF_COPIES;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ORIENTATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ORIGINAL_NAME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PHYSICAL_SIZE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PIXEL_X_DIMENSION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PIXEL_Y_DIMENSION;
|
||||
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_RESOLUTION_UNIT;
|
||||
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_SHELF;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_SOFTWARE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_STORAGE_LOCATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSION_LABEL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSION_TYPE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
|
||||
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;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for transfer child properties
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferChildProperties extends TestModel
|
||||
{
|
||||
/**************************************************************************/
|
||||
/** Mandatory parameters - Shared by record folders and records*/
|
||||
/**************************************************************************/
|
||||
@JsonProperty (PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
|
||||
/*********************************************************/
|
||||
/** Optional parameters - Applies only to record folders */
|
||||
/*********************************************************/
|
||||
@JsonProperty (PROPERTIES_VITAL_RECORD_INDICATOR)
|
||||
private Boolean vitalRecordIndicator;
|
||||
|
||||
@JsonProperty (PROPERTIES_REVIEW_PERIOD)
|
||||
@JsonSerialize (using = ReviewPeriodSerializer.class)
|
||||
private ReviewPeriod reviewPeriod;
|
||||
|
||||
@JsonProperty (PROPERTIES_HELD_CHILDREN_COUNT)
|
||||
private Integer heldChildrenCount;
|
||||
|
||||
@JsonProperty (PROPERTIES_LOCATION)
|
||||
private String location;
|
||||
|
||||
@JsonProperty (PROPERTIES_IS_CLOSED)
|
||||
private Boolean isClosed;
|
||||
|
||||
/*********************************************************/
|
||||
/** Optional parameters - Applies only to records */
|
||||
/*********************************************************/
|
||||
@JsonProperty (PROPERTIES_DATE_FILED)
|
||||
private String dateField;
|
||||
|
||||
@JsonProperty (PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
|
||||
private Boolean recordSearchHasDispositionSchedule;
|
||||
|
||||
@JsonProperty (PROPERTIES_ORIGINAL_NAME)
|
||||
private String originalName;
|
||||
|
||||
|
||||
/*********************************/
|
||||
/** Electronic record parameters */
|
||||
/*********************************/
|
||||
@JsonProperty (PROPERTIES_VERSION_TYPE)
|
||||
private String versionType;
|
||||
|
||||
@JsonProperty (PROPERTIES_VERSION_LABEL)
|
||||
private String versionLabel;
|
||||
|
||||
@JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL)
|
||||
private String dateTimeOriginal;
|
||||
|
||||
@JsonProperty (PROPERTIES_EXPOSURE_TIME)
|
||||
private Double exposureTime;
|
||||
|
||||
@JsonProperty (PROPERTIES_FLASH)
|
||||
private Boolean flash;
|
||||
|
||||
@JsonProperty (PROPERTIES_F_NUMBER)
|
||||
private Double fNumber;
|
||||
|
||||
@JsonProperty (PROPERTIES_FOCAL_LENGTH)
|
||||
private Double focalLength;
|
||||
|
||||
@JsonProperty (PROPERTIES_ISO_SPEED_RATINGS)
|
||||
private Integer isoSpeedRatings;
|
||||
|
||||
@JsonProperty (PROPERTIES_MANUFACTURER)
|
||||
private String manufacturer;
|
||||
|
||||
@JsonProperty (PROPERTIES_MODEL)
|
||||
private String model;
|
||||
|
||||
@JsonProperty (PROPERTIES_ORIENTATION)
|
||||
private Integer orientation;
|
||||
|
||||
@JsonProperty (PROPERTIES_PIXEL_X_DIMENSION)
|
||||
private Integer pixelXDimension;
|
||||
|
||||
@JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION)
|
||||
private Integer pixelYDimension;
|
||||
|
||||
@JsonProperty (PROPERTIES_RESOLUTION_UNIT)
|
||||
private String resolutionUnit;
|
||||
|
||||
@JsonProperty (PROPERTIES_SOFTWARE)
|
||||
private String software;
|
||||
|
||||
@JsonProperty (PROPERTIES_X_RESOLUTION)
|
||||
private Double xResolution;
|
||||
|
||||
@JsonProperty (PROPERTIES_Y_RESOLUTION)
|
||||
private Double yResolution;
|
||||
|
||||
/*************************************/
|
||||
/** Non-electronic record parameters */
|
||||
/*************************************/
|
||||
|
||||
@JsonProperty (PROPERTIES_SHELF)
|
||||
private String shelf;
|
||||
|
||||
@JsonProperty (PROPERTIES_STORAGE_LOCATION)
|
||||
private String storageLocation;
|
||||
|
||||
@JsonProperty (PROPERTIES_FILE)
|
||||
private String file;
|
||||
|
||||
@JsonProperty (PROPERTIES_BOX)
|
||||
private String box;
|
||||
|
||||
@JsonProperty (PROPERTIES_NUMBER_OF_COPIES)
|
||||
private Integer numberOfCopies;
|
||||
|
||||
@JsonProperty (PROPERTIES_PHYSICAL_SIZE)
|
||||
private Integer physicalSize;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
}
|
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link TransferEntry}
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
public class TransferCollection extends RestModels<TransferEntry, TransferCollection>
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for transfer entry
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferEntry extends RestModels<TransferContainer, TransferEntry>
|
||||
{
|
||||
@JsonProperty
|
||||
private Transfer entry;
|
||||
}
|
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.transfer;
|
||||
|
||||
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_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;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for Transfer properties
|
||||
*
|
||||
* @author Dinuta Silviu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
|
||||
@JsonProperty (PROPERTIES_PDF_INDICATOR)
|
||||
private Boolean pdfIndicator;
|
||||
|
||||
@JsonProperty (PROPERTIES_TRANSFER_LOCATION)
|
||||
private String transferLocation;
|
||||
|
||||
@JsonProperty (PROPERTIES_ACCESSION_INDICATOR)
|
||||
private Boolean accessionIndicator;
|
||||
}
|
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for Transfer Container
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferContainer extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private TransferContainerProperties properties;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
}
|
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.transfercontainer;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_COUNT;
|
||||
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;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for Transfer Container properties
|
||||
*
|
||||
* @author Dinuta Silviu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TransferContainerProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty (PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (PROPERTIES_COUNT)
|
||||
private Integer count;
|
||||
|
||||
}
|
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for unfiled container
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UnfiledContainer extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private UnfiledContainerProperties properties;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
}
|
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for record category child
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class UnfiledContainerChild extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private Boolean isUnfiledRecordFolder;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private Boolean isRecord;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private UnfiledContainerChildProperties properties;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@JsonProperty
|
||||
private String relativePath;
|
||||
|
||||
@JsonProperty
|
||||
private RecordContent content;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
import org.alfresco.rest.core.RestModels;
|
||||
|
||||
/**
|
||||
* Handle collection of {@link UnfiledContainerChildEntry}
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class UnfiledContainerChildCollection extends RestModels<UnfiledContainerChildEntry, UnfiledContainerChildCollection>
|
||||
{
|
||||
|
||||
}
|
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* POJO for record category child entry
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class UnfiledContainerChildEntry extends RestModels<UnfiledContainer, UnfiledContainerChildEntry>
|
||||
{
|
||||
@JsonProperty
|
||||
private UnfiledContainerChild entry;
|
||||
}
|
@@ -0,0 +1,194 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_BOX;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DATE_TIME_ORIGINAL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_DESCRIPTION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_EXPOSURE_TIME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FILE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FLASH;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_FOCAL_LENGTH;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_F_NUMBER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_IDENTIFIER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ISO_SPEED_RATINGS;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_MANUFACTURER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_MODEL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_NUMBER_OF_COPIES;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ORIENTATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_ORIGINAL_NAME;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_OWNER;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PHYSICAL_SIZE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PIXEL_X_DIMENSION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_PIXEL_Y_DIMENSION;
|
||||
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_RESOLUTION_UNIT;
|
||||
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;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_SHELF;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_SOFTWARE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_STORAGE_LOCATION;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSIONED_NODEREF;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSION_LABEL;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentFields.PROPERTIES_VERSION_TYPE;
|
||||
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 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;
|
||||
|
||||
/**
|
||||
* POJO for record category child properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @author Ana Bozianu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class UnfiledContainerChildProperties extends TestModel
|
||||
{
|
||||
/**************************************************************************/
|
||||
/** Mandatory parameters - Shared by unfiled record folder and records */
|
||||
/**************************************************************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_TITLE)
|
||||
private String title;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_DESCRIPTION)
|
||||
private String description;
|
||||
|
||||
@JsonProperty (value = PROPERTIES_RECORD_SEARCH_HAS_DISPOSITION_SCHEDULE)
|
||||
private Boolean recordSearchHasDispositionSchedule;
|
||||
|
||||
/*********************************/
|
||||
/** Electronic record parameters */
|
||||
/*********************************/
|
||||
@JsonProperty (PROPERTIES_VERSION_TYPE)
|
||||
private String versionType;
|
||||
|
||||
@JsonProperty (PROPERTIES_VERSION_LABEL)
|
||||
private String versionLabel;
|
||||
|
||||
@JsonProperty(PROPERTIES_VERSIONED_NODEREF)
|
||||
private String versionedNodeRef;
|
||||
|
||||
@JsonProperty (PROPERTIES_RMV_VERSIONED)
|
||||
private String recordVersionLabel;
|
||||
|
||||
@JsonProperty (PROPERTIES_DATE_TIME_ORIGINAL)
|
||||
private String dateTimeOriginal;
|
||||
|
||||
@JsonProperty (PROPERTIES_EXPOSURE_TIME)
|
||||
private Double exposureTime;
|
||||
|
||||
@JsonProperty (PROPERTIES_FLASH)
|
||||
private Boolean flash;
|
||||
|
||||
@JsonProperty (PROPERTIES_F_NUMBER)
|
||||
private Double fNumber;
|
||||
|
||||
@JsonProperty (PROPERTIES_FOCAL_LENGTH)
|
||||
private Double focalLength;
|
||||
|
||||
@JsonProperty (PROPERTIES_ISO_SPEED_RATINGS)
|
||||
private Integer isoSpeedRatings;
|
||||
|
||||
@JsonProperty (PROPERTIES_MANUFACTURER)
|
||||
private String manufacturer;
|
||||
|
||||
@JsonProperty (PROPERTIES_MODEL)
|
||||
private String model;
|
||||
|
||||
@JsonProperty (PROPERTIES_ORIENTATION)
|
||||
private Integer orientation;
|
||||
|
||||
@JsonProperty (PROPERTIES_PIXEL_X_DIMENSION)
|
||||
private Integer pixelXDimension;
|
||||
|
||||
@JsonProperty (PROPERTIES_PIXEL_Y_DIMENSION)
|
||||
private Integer pixelYDimension;
|
||||
|
||||
@JsonProperty (PROPERTIES_RESOLUTION_UNIT)
|
||||
private String resolutionUnit;
|
||||
|
||||
@JsonProperty (PROPERTIES_SOFTWARE)
|
||||
private String software;
|
||||
|
||||
@JsonProperty (PROPERTIES_X_RESOLUTION)
|
||||
private Double xResolution;
|
||||
|
||||
@JsonProperty (PROPERTIES_Y_RESOLUTION)
|
||||
private Double yResolution;
|
||||
|
||||
@JsonProperty (PROPERTIES_ORIGINAL_NAME)
|
||||
private String originalName;
|
||||
|
||||
/*************************************/
|
||||
/** Non-electronic record parameters */
|
||||
/*************************************/
|
||||
|
||||
@JsonProperty (PROPERTIES_SHELF)
|
||||
private String shelf;
|
||||
|
||||
@JsonProperty (PROPERTIES_STORAGE_LOCATION)
|
||||
private String storageLocation;
|
||||
|
||||
@JsonProperty (PROPERTIES_FILE)
|
||||
private String file;
|
||||
|
||||
@JsonProperty (PROPERTIES_BOX)
|
||||
private String box;
|
||||
|
||||
@JsonProperty (PROPERTIES_NUMBER_OF_COPIES)
|
||||
private Integer numberOfCopies;
|
||||
|
||||
@JsonProperty (PROPERTIES_PHYSICAL_SIZE)
|
||||
private Integer physicalSize;
|
||||
|
||||
@JsonProperty (PROPERTIES_OWNER)
|
||||
private Owner owner;
|
||||
}
|
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.unfiledcontainer;
|
||||
|
||||
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 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;
|
||||
|
||||
/**
|
||||
* POJO for file plan properties
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties (ignoreUnknown = true)
|
||||
public class UnfiledContainerProperties extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true, value = PROPERTIES_IDENTIFIER)
|
||||
private String identifier;
|
||||
|
||||
@JsonProperty (required = true, value = PROPERTIES_ROOT_NODE_REF)
|
||||
private String rootNodeRef;
|
||||
}
|
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* POJO for unfiled container
|
||||
*
|
||||
* @author Ramona Popa
|
||||
* @since 2.6
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UnfiledRecordFolder extends TestModel
|
||||
{
|
||||
/*************************/
|
||||
/** Mandatory parameters */
|
||||
/*************************/
|
||||
@JsonProperty (required = true)
|
||||
private String createdAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel createdByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String modifiedAt;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private RestByUserModel modifiedByUser;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String name;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String id;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String nodeType;
|
||||
|
||||
@JsonProperty (required = true)
|
||||
private String parentId;
|
||||
|
||||
/************************/
|
||||
/** Optional parameters */
|
||||
/************************/
|
||||
@JsonProperty
|
||||
private UnfiledContainerChildProperties properties;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> aspectNames;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean hasRetentionSchedule;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isClosed;
|
||||
|
||||
@JsonProperty
|
||||
private List<String> allowableOperations;
|
||||
|
||||
@JsonProperty
|
||||
private Path path;
|
||||
|
||||
@JsonProperty
|
||||
private String relativePath;
|
||||
|
||||
@JsonProperty
|
||||
private RecordContent content;
|
||||
|
||||
@JsonProperty
|
||||
private Boolean isCompleted;
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.user;
|
||||
|
||||
/**
|
||||
* Constants for RM user capabilities
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.7
|
||||
*/
|
||||
public class UserCapabilities
|
||||
{
|
||||
|
||||
/** The id of the view records capability. */
|
||||
public static final String VIEW_RECORDS_CAP = "ViewRecords";
|
||||
/** The id of the declare records capability. */
|
||||
public static final String DECLARE_RECORDS_CAP = "DeclareRecords";
|
||||
}
|
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.model.user;
|
||||
|
||||
/**
|
||||
* Constants for RM user capabilities
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.6
|
||||
*/
|
||||
public enum UserPermissions
|
||||
{
|
||||
PERMISSION_FILING("Filing"),
|
||||
PERMISSION_READ_RECORDS("ReadRecords"),
|
||||
PERMISSION_FILE_RECORDS("FileRecords");
|
||||
|
||||
public final String permissionId;
|
||||
|
||||
UserPermissions(String permissionId)
|
||||
{
|
||||
this.permissionId = permissionId;
|
||||
}
|
||||
}
|
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.model.user;
|
||||
|
||||
/**
|
||||
* Constants for RM user roles
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.6
|
||||
*/
|
||||
public enum UserRoles
|
||||
{
|
||||
IN_PLACE_WRITERS("ExtendedWriters", "In-Place Writers"),
|
||||
ROLE_RM_ADMIN("Administrator", "Records Management Administrator"),
|
||||
ROLE_RM_MANAGER("RecordsManager", "Records Management Manager"),
|
||||
ROLE_RM_POWER_USER("PowerUser", "Records Management Power User"),
|
||||
ROLE_RM_SECURITY_OFFICER("SecurityOfficer", "Records Management Security Officer"),
|
||||
ROLE_RM_USER("User", "Records Management User");
|
||||
|
||||
public final String roleId;
|
||||
public final String displayName;
|
||||
|
||||
UserRoles(String roleId, String displayName)
|
||||
{
|
||||
this.roleId = roleId;
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* 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)
|
||||
private RMRestWrapper rmRestWrapper;
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper
|
||||
*/
|
||||
public RMModelRequest(RMRestWrapper rmRestWrapper)
|
||||
{
|
||||
super(rmRestWrapper.getRestWrapper());
|
||||
setRmRestWrapper(rmRestWrapper);
|
||||
}
|
||||
}
|
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore;
|
||||
|
||||
import static java.lang.Integer.parseInt;
|
||||
import static java.lang.String.format;
|
||||
|
||||
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.FilePlanAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.FilesAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RMSiteAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RMUserAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordCategoryAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.RecordsAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.TransferAPI;
|
||||
import org.alfresco.rest.rm.community.requests.gscore.api.TransferContainerAPI;
|
||||
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"
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class GSCoreAPI extends RMModelRequest
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
* @param rmRestProperties RM REST Properties
|
||||
*/
|
||||
public GSCoreAPI(RMRestWrapper rmRestWrapper, RMRestProperties rmRestProperties)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
RestAssured.baseURI = format("%s://%s", rmRestProperties.getScheme(), rmRestProperties.getServer());
|
||||
RestAssured.port = parseInt(rmRestProperties.getPort());
|
||||
RestAssured.basePath = rmRestProperties.getRestRmPath();
|
||||
restWrapper.configureRequestSpec().setBasePath(RestAssured.basePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>ig-sites/rm/...</code> API path
|
||||
*
|
||||
* @return {@link RMSiteAPI}
|
||||
*/
|
||||
public RMSiteAPI usingRMSite()
|
||||
{
|
||||
return new RMSiteAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>file-plans/...</code> API path
|
||||
*
|
||||
* @return {@link FilePlanAPI}
|
||||
*/
|
||||
public FilePlanAPI usingFilePlans()
|
||||
{
|
||||
return new FilePlanAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>record-categories/...</code> API path
|
||||
*
|
||||
* @return {@link RecordCategoryAPI}
|
||||
*/
|
||||
public RecordCategoryAPI usingRecordCategory()
|
||||
{
|
||||
return new RecordCategoryAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>record-folders/...</code> API path
|
||||
*
|
||||
* @return {@link RecordFolderAPI}
|
||||
*/
|
||||
public RecordFolderAPI usingRecordFolder()
|
||||
{
|
||||
return new RecordFolderAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>records/...</code> API path
|
||||
*
|
||||
* @return {@link RecordsAPI}
|
||||
*/
|
||||
public RecordsAPI usingRecords()
|
||||
{
|
||||
return new RecordsAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>files/...</code> API path
|
||||
*
|
||||
* @return {@link FilesAPI}
|
||||
*/
|
||||
public FilesAPI usingFiles()
|
||||
{
|
||||
return new FilesAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>transfer-containers/...</code> API path
|
||||
*
|
||||
* @return {@link TransferContainerAPI}
|
||||
*/
|
||||
public TransferContainerAPI usingTransferContainer()
|
||||
{
|
||||
return new TransferContainerAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL on all REST calls under <code>transfers/...</code> API path
|
||||
*
|
||||
* @return {@link TransferAPI}
|
||||
*/
|
||||
public TransferAPI usingTransfer()
|
||||
{
|
||||
return new TransferAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL for RM unfiled container API
|
||||
*
|
||||
* @return {@link UnfiledContainerAPI}
|
||||
*/
|
||||
public UnfiledContainerAPI usingUnfiledContainers()
|
||||
{
|
||||
return new UnfiledContainerAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL for RM unfiled record folders API
|
||||
*
|
||||
* @return {@link UnfiledRecordFolderAPI}
|
||||
*/
|
||||
public UnfiledRecordFolderAPI usingUnfiledRecordFolder()
|
||||
{
|
||||
return new UnfiledRecordFolderAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL for RM user management API
|
||||
*
|
||||
* @return {@link RMUserAPI}
|
||||
*/
|
||||
public RMUserAPI usingRMUser()
|
||||
{
|
||||
return new RMUserAPI(getRmRestWrapper());
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides DSL for ActionExecution API
|
||||
*
|
||||
* @return {@link ActionsExecutionAPI}
|
||||
*/
|
||||
public ActionsExecutionAPI usingActionsExecutionsAPI()
|
||||
{
|
||||
return new ActionsExecutionAPI(getRmRestWrapper());
|
||||
}
|
||||
}
|
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.alfresco.utility.model.RepoTestModel;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/**
|
||||
* Produces processed results from Core Actions API calls
|
||||
*
|
||||
* @author Claudia Agache
|
||||
* @since 3.1
|
||||
*/
|
||||
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 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));
|
||||
}
|
||||
|
||||
/**
|
||||
* Declares a document as record using v1 actions api
|
||||
*
|
||||
* @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);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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 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));
|
||||
}
|
||||
|
||||
/**
|
||||
* Declares a document version as record using v1 actions api
|
||||
*
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add WORM lock to a node using v1 actions api
|
||||
*
|
||||
* @param targetNode the node on which the action is executed
|
||||
* @throws Exception
|
||||
*/
|
||||
@SneakyThrows
|
||||
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 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)));
|
||||
}
|
||||
}
|
@@ -0,0 +1,216 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.fileplan.FilePlan;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryCollection;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
|
||||
/**
|
||||
* File plan REST API Wrapper
|
||||
*
|
||||
* @author Ramona Popa
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class FilePlanAPI extends RMModelRequest
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public FilePlanAPI(RMRestWrapper rmRestWrapper)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getFilePlan(String, String)}
|
||||
*/
|
||||
public FilePlan getFilePlan(String filePlanId)
|
||||
{
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
return getFilePlan(filePlanId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a file plan.
|
||||
*
|
||||
* @param filePlanId The identifier of a file plan
|
||||
* @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>
|
||||
*/
|
||||
public FilePlan getFilePlan(String filePlanId, String parameters)
|
||||
{
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
return getRmRestWrapper().processModel(FilePlan.class, simpleRequest(
|
||||
GET,
|
||||
"/file-plans/{filePlanId}?{parameters}",
|
||||
filePlanId,
|
||||
parameters
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getRootRecordCategories(String, String)}
|
||||
*/
|
||||
public RecordCategoryCollection getRootRecordCategories(String filePlanId)
|
||||
{
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
return getRootRecordCategories(filePlanId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children (root categories) of a file plan.
|
||||
*
|
||||
* @param filePlanId The identifier of a file plan
|
||||
* @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>
|
||||
*/
|
||||
public RecordCategoryCollection getRootRecordCategories(String filePlanId, String parameters)
|
||||
{
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("recordCategoryModel", recordCategoryModel);
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
return createRootRecordCategory(recordCategoryModel, filePlanId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a root record category.
|
||||
*
|
||||
* @param recordCategoryModel The record category model which holds the information
|
||||
* @param filePlanId The identifier of a file plan
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #updateFilePlan(FilePlan, String, String)
|
||||
*/
|
||||
public FilePlan updateFilePlan(FilePlan filePlanModel, String filePlanId)
|
||||
{
|
||||
mandatoryObject("filePlanModel", filePlanModel);
|
||||
mandatoryString("filePlanId", filePlanId);
|
||||
|
||||
return updateFilePlan(filePlanModel, filePlanId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @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>
|
||||
*/
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
|
||||
/**
|
||||
* Files REST API Wrapper
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.6
|
||||
*/
|
||||
public class FilesAPI extends RMModelRequest<FilesAPI>
|
||||
{
|
||||
public static final String PARENT_ID_PARAM = "parentId";
|
||||
|
||||
/**
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public FilesAPI(RMRestWrapper rmRestWrapper)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Declare file as record
|
||||
*
|
||||
* @param fileId The Id of a file to declare as record
|
||||
* @return The {@link Record} for created record
|
||||
* @throws RuntimeException for malformed JSON responses
|
||||
*/
|
||||
public Record declareAsRecord(String fileId)
|
||||
{
|
||||
mandatoryString("fileId", fileId);
|
||||
|
||||
return getRmRestWrapper().processModel(Record.class, simpleRequest(
|
||||
POST,
|
||||
"/files/{fileId}/declare?{parameters}",
|
||||
fileId,
|
||||
getRmRestWrapper().getParameters()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.springframework.http.HttpMethod.DELETE;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
import static org.springframework.http.HttpStatus.OK;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.site.RMSite;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
|
||||
/**
|
||||
* RM Site REST API Wrapper
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RMSiteAPI extends RMModelRequest
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public RMSiteAPI(RMRestWrapper rmRestWrapper)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the RM site
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public RMSite getSite()
|
||||
{
|
||||
return getRmRestWrapper().processModel(RMSite.class, simpleRequest(
|
||||
GET,
|
||||
"gs-sites/rm"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the RM site
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public RMSite createRMSite(RMSite rmSiteModel)
|
||||
{
|
||||
mandatoryObject("rmSiteModel", rmSiteModel);
|
||||
|
||||
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>
|
||||
*/
|
||||
public void deleteRMSite()
|
||||
{
|
||||
getRmRestWrapper().processEmptyModel(simpleRequest(
|
||||
DELETE,
|
||||
"gs-sites/rm"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update RM site
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public RMSite updateRMSite(RMSite rmSiteModel)
|
||||
{
|
||||
mandatoryObject("rmSiteProperties", rmSiteModel);
|
||||
|
||||
return getRmRestWrapper().processModel(RMSite.class, requestWithBody(
|
||||
PUT,
|
||||
toJson(rmSiteModel),
|
||||
"gs-sites/rm"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the RM site exists or not
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public boolean existsRMSite()
|
||||
{
|
||||
getSite();
|
||||
return getRmRestWrapper().getStatusCode().equals(String.valueOf(OK.value()));
|
||||
}
|
||||
}
|
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.jglue.fluentjson.JsonBuilderFactory.buildObject;
|
||||
import static org.springframework.http.HttpStatus.OK;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
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;
|
||||
import org.alfresco.rest.core.RMRestProperties;
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.user.UserPermissions;
|
||||
import org.alfresco.rest.rm.community.model.user.UserRoles;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
|
||||
/**
|
||||
* RM user management API
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @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
|
||||
// "old-style" API calls.
|
||||
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()
|
||||
{
|
||||
RMRestProperties properties = getRmRestWrapper().getRmRestProperties();
|
||||
|
||||
AlfrescoHttpClientFactory factory = new AlfrescoHttpClientFactory();
|
||||
factory.setHost(properties.getServer());
|
||||
factory.setPort(Integer.parseInt(properties.getPort()));
|
||||
factory.setScheme(properties.getScheme());
|
||||
|
||||
return factory.getObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign RM role to user
|
||||
*
|
||||
* @param userName User's username
|
||||
* @param userRole User's RM role, one of {@link UserRoles} roles
|
||||
* @throws RuntimeException for failed requests
|
||||
*/
|
||||
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();
|
||||
|
||||
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 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)
|
||||
{
|
||||
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();
|
||||
|
||||
// override v1 baseURI and basePath
|
||||
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();
|
||||
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
|
||||
*/
|
||||
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();
|
||||
|
||||
// override v1 baseURI and basePath
|
||||
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();
|
||||
getRmRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a user with the given name using the old APIs
|
||||
*
|
||||
* @param userName The user name
|
||||
* @param userPassword The user's password
|
||||
* @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)
|
||||
{
|
||||
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();
|
||||
|
||||
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();
|
||||
|
||||
return (response.getStatusCode() == OK.value());
|
||||
}
|
||||
}
|
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.DELETE;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChildCollection;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
|
||||
/**
|
||||
* Record category REST API Wrapper
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordCategoryAPI extends RMModelRequest
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public RecordCategoryAPI(RMRestWrapper rmRestWrapper)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a record category.
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public void deleteRecordCategory(String recordCategoryId)
|
||||
{
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
getRmRestWrapper().processEmptyModel(simpleRequest(
|
||||
DELETE,
|
||||
"record-categories/{recordCategoryId}",
|
||||
recordCategoryId
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getRecordCategory(String, String)}
|
||||
*/
|
||||
public RecordCategory getRecordCategory(String recordCategoryId)
|
||||
{
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return getRecordCategory(recordCategoryId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a record category.
|
||||
*
|
||||
* @param recordCategoryId The identifier of a record category
|
||||
* @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>
|
||||
*/
|
||||
public RecordCategory getRecordCategory(String recordCategoryId, String parameters)
|
||||
{
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("recordCategoryModel", recordCategoryModel);
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return updateRecordCategory(recordCategoryModel, recordCategoryId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a record category.
|
||||
*
|
||||
* @param recordCategoryModel The record category model which holds the information
|
||||
* @param recordCategoryId The identifier of a record category
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getRecordCategoryChildren(String, String)}
|
||||
*/
|
||||
public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId)
|
||||
{
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return getRecordCategoryChildren(recordCategoryId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children of a record category.
|
||||
*
|
||||
* @param recordCategoryId The identifier of a record category
|
||||
* @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>
|
||||
*/
|
||||
public RecordCategoryChildCollection getRecordCategoryChildren(String recordCategoryId, String parameters)
|
||||
{
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("recordCategoryChildModel", recordCategoryChildModel);
|
||||
mandatoryString("recordCategoryId", recordCategoryId);
|
||||
|
||||
return createRecordCategoryChild(recordCategoryChildModel, recordCategoryId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a record category child. Can be a record category or a record folder.
|
||||
*
|
||||
* @param recordCategoryChildModel The record category child model which holds the information
|
||||
* @param recordCategoryId The identifier of a record category
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
}
|
@@ -0,0 +1,300 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.DELETE;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
import 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;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.record.Record;
|
||||
import org.alfresco.rest.rm.community.model.recordfolder.RecordFolder;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Record folder REST API Wrapper
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class RecordFolderAPI extends RMModelRequest
|
||||
{
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param rmRestWrapper RM REST Wrapper
|
||||
*/
|
||||
public RecordFolderAPI(RMRestWrapper rmRestWrapper)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes a record folder.
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public void deleteRecordFolder(String recordFolderId)
|
||||
{
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
getRmRestWrapper().processEmptyModel(simpleRequest(
|
||||
DELETE,
|
||||
"record-folders/{recordFolderId}",
|
||||
recordFolderId
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getRecordFolder(String, String)}
|
||||
*/
|
||||
public RecordFolder getRecordFolder(String recordFolderId)
|
||||
{
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
return getRecordFolder(recordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a record folder.
|
||||
*
|
||||
* @param recordFolderId The identifier of a record folder
|
||||
* @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>
|
||||
*/
|
||||
public RecordFolder getRecordFolder(String recordFolderId, String parameters)
|
||||
{
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("recordFolderModel", recordFolderModel);
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
return updateRecordFolder(recordFolderModel, recordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a record folder.
|
||||
*
|
||||
* @param recordFolderModel The record folder model which holds the information
|
||||
* @param recordFolderId The identifier of a record folder
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getRecordFolderChildren(String, String)}
|
||||
*/
|
||||
public RecordFolderCollection getRecordFolderChildren(String recordFolderId)
|
||||
{
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
return getRecordFolderChildren(recordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children of a record folder.
|
||||
*
|
||||
* @param recordFolderId The identifier of a record folder
|
||||
* @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>
|
||||
*/
|
||||
public RecordFolderCollection getRecordFolderChildren(String recordFolderId, String parameters)
|
||||
{
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("recordModel", recordModel);
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
|
||||
return createRecord(recordModel, recordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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
|
||||
{
|
||||
mandatoryString("recordFolderId", recordFolderId);
|
||||
mandatoryObject("recordContent", recordContent);
|
||||
mandatoryObject("recordModel", recordModel);
|
||||
|
||||
if (!recordModel.getNodeType().equals(CONTENT_TYPE))
|
||||
{
|
||||
fail("Only electronic records are supported");
|
||||
}
|
||||
|
||||
/*
|
||||
* For file uploads nodeBodyCreate is ignored hence can't be used. Append all Record fields
|
||||
* to the request.
|
||||
*/
|
||||
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
|
||||
JsonNode root;
|
||||
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())
|
||||
{
|
||||
String fieldName = fieldNames.next();
|
||||
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
|
||||
}
|
||||
builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name());
|
||||
|
||||
// create node with given content
|
||||
return createRecord(recordModel, recordFolderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a record in a record folder child, i.e. a record.
|
||||
*
|
||||
* @param recordModel The record model which holds the information
|
||||
* @param recordFolderId The identifier of a record folder
|
||||
* @param parameters The URL parameters to add
|
||||
* @return The created {@link Record}
|
||||
* @throws RuntimeException for the following cases:
|
||||
* <ul>
|
||||
* <li>{@code recordFolderId is not a valid format or {@code recordModel} is invalid</li>
|
||||
* <li>authentication fails</li>
|
||||
* <li>current user does not have permission to add children to {@code recordFolderId}</li>
|
||||
* <li>{@code recordFolderId} does not exist</li>
|
||||
* <li>model integrity exception, including node name with invalid characters</li>
|
||||
* </ul>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
}
|
@@ -0,0 +1,280 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.DELETE;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
|
||||
|
||||
import org.alfresco.rest.core.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)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content for the electronic record
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public ResponseBody<?> getRecordContent(String recordId)
|
||||
{
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return getRmRestWrapper()
|
||||
.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
|
||||
*
|
||||
* @param recordBodyFile The properties where to file the record
|
||||
* @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>
|
||||
*
|
||||
*/
|
||||
public Record fileRecord(RecordBodyFile recordBodyFile, String recordId)
|
||||
{
|
||||
mandatoryObject("recordBodyFile", recordBodyFile);
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return fileRecord(recordBodyFile, recordId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @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>
|
||||
*
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #completeRecord(String, String)
|
||||
*/
|
||||
public Record completeRecord(String recordId)
|
||||
{
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return completeRecord(recordId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete the record recordId
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public Record completeRecord(String recordId, String parameters)
|
||||
{
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
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>
|
||||
*/
|
||||
public void deleteRecord(String recordId)
|
||||
{
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
getRmRestWrapper().processEmptyModel(simpleRequest(
|
||||
DELETE,
|
||||
"records/{recordId}",
|
||||
recordId
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getRecord(String, String)}
|
||||
*/
|
||||
public Record getRecord(String recordId)
|
||||
{
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return getRecord(recordId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a record.
|
||||
*
|
||||
* @param recordId The identifier of a record
|
||||
* @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>
|
||||
*/
|
||||
public Record getRecord(String recordId, String parameters)
|
||||
{
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("recordModel", recordModel);
|
||||
mandatoryString("recordId", recordId);
|
||||
|
||||
return updateRecord(recordModel, recordId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a record.
|
||||
*
|
||||
* @param recordModel The record model which holds the information
|
||||
* @param recordId The identifier of a record
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
}
|
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.transfer.Transfer;
|
||||
import org.alfresco.rest.rm.community.model.transfer.TransferChildCollection;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
|
||||
/**
|
||||
* Transfer REST API Wrapper
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
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)
|
||||
{
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
return getTransfer(transferId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a transfer.
|
||||
*
|
||||
* @param transferId The identifier of a transfer
|
||||
* @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>
|
||||
*/
|
||||
public Transfer getTransfer(String transferId, String parameters)
|
||||
{
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
return getRmRestWrapper().processModel(Transfer.class, simpleRequest(
|
||||
GET,
|
||||
"/transfers/{transferId}?{parameters}",
|
||||
transferId,
|
||||
parameters
|
||||
));
|
||||
}
|
||||
/**
|
||||
* see {@link #getTransfersChildren(String, String)}
|
||||
*/
|
||||
public TransferChildCollection getTransfersChildren(String transferId)
|
||||
{
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
return getTransfersChildren(transferId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children (record folder or record) of a transfer.
|
||||
*
|
||||
* @param transferId The identifier of a transfer
|
||||
* @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>
|
||||
*/
|
||||
public TransferChildCollection getTransfersChildren(String transferId, String parameters)
|
||||
{
|
||||
mandatoryString("transferId", transferId);
|
||||
|
||||
return getRmRestWrapper().processModels(TransferChildCollection.class, simpleRequest(
|
||||
GET,
|
||||
"transfers/{filePlanId}/children?{parameters}",
|
||||
transferId,
|
||||
parameters
|
||||
));
|
||||
}
|
||||
}
|
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.transfer.TransferCollection;
|
||||
import org.alfresco.rest.rm.community.model.transfercontainer.TransferContainer;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
|
||||
/**
|
||||
* Transfer Container REST API Wrapper
|
||||
*
|
||||
* @author Silviu Dinuta
|
||||
* @since 2.6
|
||||
*/
|
||||
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)
|
||||
{
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
return getTransferContainer(transferContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a transfer container.
|
||||
*
|
||||
* @param transferContainerId The identifier of a transfer container
|
||||
* @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>
|
||||
*/
|
||||
public TransferContainer getTransferContainer(String transferContainerId, String parameters)
|
||||
{
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("transferContainerModel", transferContainerModel);
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
return updateTransferContainer(transferContainerModel, transferContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a transfer container.
|
||||
*
|
||||
* @param transferContainerModel The transfer container model which holds the information
|
||||
* @param transferContainerId The identifier of a transfer container
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getTransfers(String, String)}
|
||||
*/
|
||||
public TransferCollection getTransfers(String transferContainerId)
|
||||
{
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
return getTransfers(transferContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children (transfers) of a transfer container.
|
||||
*
|
||||
* @param transferContainerId The identifier of a transfer container
|
||||
* @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>
|
||||
*/
|
||||
public TransferCollection getTransfers(String transferContainerId, String parameters)
|
||||
{
|
||||
mandatoryString("transferContainerId", transferContainerId);
|
||||
|
||||
return getRmRestWrapper().processModels(TransferCollection.class, simpleRequest(
|
||||
GET,
|
||||
"transfer-containers/{filePlanId}/transfers?{parameters}",
|
||||
transferContainerId,
|
||||
parameters
|
||||
));
|
||||
}
|
||||
}
|
@@ -0,0 +1,277 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
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;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainer;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
|
||||
import org.alfresco.rest.rm.community.requests.RMModelRequest;
|
||||
import org.alfresco.rest.rm.community.util.UnfiledContainerChildMixin;
|
||||
|
||||
/**
|
||||
* Unfiled Container REST API Wrapper
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @author Ana Bozianu
|
||||
* @since 2.6
|
||||
*/
|
||||
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)
|
||||
{
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return getUnfiledContainer(unfiledContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an unfiled record container.
|
||||
*
|
||||
* @param unfiledContainerId The identifier of a unfiled record container
|
||||
* @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>
|
||||
*/
|
||||
public UnfiledContainer getUnfiledContainer(String unfiledContainerId, String parameters)
|
||||
{
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return getRmRestWrapper().processModel(UnfiledContainer.class, simpleRequest(
|
||||
GET,
|
||||
"unfiled-containers/{unfiledContainerId}?{parameters}",
|
||||
unfiledContainerId,
|
||||
parameters
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getUnfiledContainerChildren(String)} (String, String)}
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId)
|
||||
{
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return getUnfiledContainerChildren(unfiledContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children of an unfiled records container
|
||||
*
|
||||
* @param unfiledContainerId The identifier of an unfiled records container
|
||||
* @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>
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledContainerChildren(String unfiledContainerId, String parameters)
|
||||
{
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
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)
|
||||
{
|
||||
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return createUnfiledContainerChild(unfiledContainerChildModel, unfiledContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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)
|
||||
{
|
||||
mandatoryObject("unfiledContainerChildModel", unfiledContainerChildModel);
|
||||
mandatoryObject("unfiledContainerChildContent", unfiledContainerChildContent);
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
if (!unfiledContainerChildModel.getNodeType().equals(CONTENT_TYPE))
|
||||
{
|
||||
fail("Only electronic records are supported");
|
||||
}
|
||||
|
||||
/*
|
||||
* For file uploads nodeBodyCreate is ignored hence can't be used. Append all Record fields
|
||||
* to the request.
|
||||
*/
|
||||
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
|
||||
JsonNode root;
|
||||
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())
|
||||
{
|
||||
String fieldName = fieldNames.next();
|
||||
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
|
||||
}
|
||||
builder.addMultiPart("filedata", unfiledContainerChildContent, ContentType.BINARY.name());
|
||||
|
||||
// create node with given content
|
||||
return createUnfiledContainerChild(unfiledContainerChildModel, unfiledContainerId);
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #updateUnfiledContainer(UnfiledContainer, String, String)
|
||||
*/
|
||||
public UnfiledContainer updateUnfiledContainer(UnfiledContainer unfiledContainerModel, String unfiledContainerId)
|
||||
{
|
||||
mandatoryObject("unfiledContainerModel", unfiledContainerModel);
|
||||
mandatoryString("unfiledContainerId", unfiledContainerId);
|
||||
|
||||
return updateUnfiledContainer(unfiledContainerModel, unfiledContainerId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an unfiled record container
|
||||
*
|
||||
* @param unfiledContainerModel The unfiled record container model which holds the information
|
||||
* @param unfiledContainerId The identifier of an unfiled record container
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,300 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.requests.gscore.api;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryObject;
|
||||
import static org.alfresco.rest.rm.community.util.ParameterCheck.mandatoryString;
|
||||
import static org.alfresco.rest.rm.community.util.PojoUtility.toJson;
|
||||
import static org.apache.commons.lang3.StringUtils.EMPTY;
|
||||
import static org.springframework.http.HttpMethod.DELETE;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
import 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;
|
||||
|
||||
import org.alfresco.rest.core.RMRestWrapper;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChild;
|
||||
import org.alfresco.rest.rm.community.model.unfiledcontainer.UnfiledContainerChildCollection;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
super(rmRestWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getUnfiledRecordFolder(String, String)}
|
||||
*/
|
||||
public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId)
|
||||
{
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getUnfiledRecordFolder(unfiledRecordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an unfiled record folder.
|
||||
*
|
||||
* @param unfiledRecordFolderId The identifier of a unfiled record folder
|
||||
* @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>
|
||||
*/
|
||||
public UnfiledRecordFolder getUnfiledRecordFolder(String unfiledRecordFolderId, String parameters)
|
||||
{
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getRmRestWrapper().processModel(UnfiledRecordFolder.class, simpleRequest(
|
||||
GET,
|
||||
"unfiled-record-folders/{unfiledRecordFolderId}?{parameters}",
|
||||
unfiledRecordFolderId,
|
||||
parameters
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #getUnfiledRecordFolderChildren(String, String)}
|
||||
*/
|
||||
public UnfiledContainerChildCollection getUnfiledRecordFolderChildren(String unfiledRecordFolderId)
|
||||
{
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return getUnfiledRecordFolderChildren(unfiledRecordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the children of an unfiled record folder
|
||||
*
|
||||
* @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}
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #createUnfiledRecordFolderChild(UnfiledContainerChild, String, String)}
|
||||
*/
|
||||
public UnfiledContainerChild createUnfiledRecordFolderChild(UnfiledContainerChild unfiledRecordFolderChildModel, String unfiledRecordFolderId)
|
||||
{
|
||||
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
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 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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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)
|
||||
{
|
||||
mandatoryObject("unfiledRecordFolderChildModel", unfiledRecordFolderChildModel);
|
||||
mandatoryObject("unfiledRecordFolderChildContent", unfiledRecordFolderChildContent);
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
if (!unfiledRecordFolderChildModel.getNodeType().equals(CONTENT_TYPE))
|
||||
{
|
||||
fail("Only electronic records are supported");
|
||||
}
|
||||
|
||||
/*
|
||||
* For file uploads nodeBodyCreate is ignored hence can't be used. Append all Record fields
|
||||
* to the request.
|
||||
*/
|
||||
RequestSpecBuilder builder = getRmRestWrapper().configureRequestSpec();
|
||||
JsonNode root;
|
||||
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())
|
||||
{
|
||||
String fieldName = fieldNames.next();
|
||||
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
|
||||
}
|
||||
builder.addMultiPart("filedata", unfiledRecordFolderChildContent, ContentType.BINARY.name());
|
||||
|
||||
// create node with given content
|
||||
return createUnfiledRecordFolderChild(unfiledRecordFolderChildModel, unfiledRecordFolderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* see {@link #updateUnfiledRecordFolder(UnfiledRecordFolder, String, String)
|
||||
*/
|
||||
public UnfiledRecordFolder updateUnfiledRecordFolder(UnfiledRecordFolder unfiledRecordFolderModel, String unfiledRecordFolderId)
|
||||
{
|
||||
mandatoryObject("unfiledRecordFolderModel", unfiledRecordFolderModel);
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
return updateUnfiledRecordFolder(unfiledRecordFolderModel, unfiledRecordFolderId, EMPTY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an unfiled record folder
|
||||
*
|
||||
* @param unfiledRecordFolderModel The unfiled record folder model which holds the information
|
||||
* @param unfiledRecordFolderId The identifier of an unfiled record folder
|
||||
* @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>
|
||||
*/
|
||||
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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes an unfiled record folder.
|
||||
*
|
||||
* @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>
|
||||
*/
|
||||
public void deleteUnfiledRecordFolder(String unfiledRecordFolderId)
|
||||
{
|
||||
mandatoryString("unfiledRecordFolderId", unfiledRecordFolderId);
|
||||
|
||||
getRmRestWrapper().processEmptyModel(simpleRequest(
|
||||
DELETE,
|
||||
"unfiled-record-folders/{recordFolderId}",
|
||||
unfiledRecordFolderId
|
||||
));
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.rm.community.util;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* A utility class to provide test methods that can be used by the REST and UI tests.
|
||||
*
|
||||
* @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 static final String USER_FULLNAME_PATTERN = "FN-%1$s LN-%1$s";
|
||||
|
||||
/** Private constructor to prevent instantiation. */
|
||||
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.
|
||||
*/
|
||||
public static String generateTestPrefix(Class<?> clazz)
|
||||
{
|
||||
return clazz.getSimpleName().substring(0, 7) + UUID.randomUUID().toString().substring(0, 4).toUpperCase();
|
||||
}
|
||||
}
|
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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;
|
||||
import com.github.dockerjava.api.model.Frame;
|
||||
import com.github.dockerjava.core.DockerClientBuilder;
|
||||
import com.github.dockerjava.core.command.LogContainerResultCallback;
|
||||
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;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Helper class for interaction with docker containers
|
||||
*
|
||||
* @author Claudia Agache
|
||||
* @since 3.1
|
||||
*/
|
||||
@Service
|
||||
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;
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for returning logs of docker container
|
||||
*
|
||||
* @param containerId - ID of the container
|
||||
* @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)
|
||||
{
|
||||
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
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
return logs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the alfresco container logs
|
||||
*
|
||||
* @return list of strings, where every string is log line
|
||||
*/
|
||||
public List<String> getAlfrescoLogs()
|
||||
{
|
||||
final List<Container> alfrescoContainers = findContainersByImageName(REPO_IMAGE_NAME);
|
||||
if (alfrescoContainers.isEmpty())
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
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)));
|
||||
return alfrescoLogs;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to check if the specified exception is thrown in alfresco logs
|
||||
*
|
||||
* @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)));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for finding docker containers after the image name
|
||||
*
|
||||
* @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();
|
||||
|
||||
return containers.stream()
|
||||
.filter(container -> container.getImage().contains(imageName))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.util;
|
||||
|
||||
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.
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
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
|
||||
*/
|
||||
@JsonUnwrapped
|
||||
abstract RecordProperties getProperties();
|
||||
}
|
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.util;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||
|
||||
/**
|
||||
* Utility class for checking parameters
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
public class ParameterCheck
|
||||
{
|
||||
private ParameterCheck()
|
||||
{
|
||||
// Intentionally blank
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a given {@link String} is blank or not, i.e. not <code>null<code>, "" or " ".
|
||||
*
|
||||
* @param paramName The name of the parameter to check
|
||||
* @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.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a given {@link Object} is null or not
|
||||
*
|
||||
* @param paramName The name of the parameter to check
|
||||
* @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.");
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import com.fasterxml.jackson.databind.type.CollectionType;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Utility class for creating the json object
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
public class PojoUtility
|
||||
{
|
||||
/**
|
||||
* Logger for the class.
|
||||
*/
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(PojoUtility.class);
|
||||
|
||||
/** Private constructor to prevent instantiation. */
|
||||
private PojoUtility()
|
||||
{}
|
||||
|
||||
/**
|
||||
* see {@link #toJson(Object, Class, Class)}
|
||||
*/
|
||||
public static String toJson(Object model)
|
||||
{
|
||||
mandatoryObject("model", model);
|
||||
|
||||
return toJson(model, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converting object to JSON string
|
||||
*
|
||||
* @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
|
||||
* @return The converted java object as JSON string
|
||||
* @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)
|
||||
{
|
||||
mandatoryObject("model", model);
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
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 values that differ from default settings to be included
|
||||
mapper.setSerializationInclusion(Include.NON_DEFAULT);
|
||||
|
||||
//return the json object
|
||||
try
|
||||
{
|
||||
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(model);
|
||||
}
|
||||
catch (JsonProcessingException error)
|
||||
{
|
||||
return error.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converting json to 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
|
||||
*/
|
||||
public static <T> T jsonToObject(JSONObject json, Class<T> classz)
|
||||
{
|
||||
mandatoryObject("model", classz);
|
||||
mandatoryObject("jsonObject", json);
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
T obj = null;
|
||||
try
|
||||
{
|
||||
obj = mapper.readValue(json.toString(), classz);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
LOGGER.error("Unable to convert the json into a java object.", e);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converting json array into a list of java objects
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
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);
|
||||
List<T> asList = null;
|
||||
try
|
||||
{
|
||||
asList = mapper.readValue(json.toString(), collectionType);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
LOGGER.error("Unable to convert the json array into a java collection.", e);
|
||||
}
|
||||
|
||||
|
||||
return asList;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
|
||||
import org.alfresco.rest.rm.community.model.common.ReviewPeriod;
|
||||
|
||||
/**
|
||||
* Utility class for serializing @{FilePlanComponentReviewPeriod}
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
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.
|
||||
* @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());
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.rm.community.util;
|
||||
|
||||
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.
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 2.6
|
||||
*/
|
||||
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
|
||||
*/
|
||||
@JsonUnwrapped
|
||||
abstract UnfiledContainerChildProperties getProperties();
|
||||
}
|
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* The v0 REST API for copy-to (which supports multi-item copy).
|
||||
*
|
||||
* @author Tom Page
|
||||
* @since 2.6
|
||||
*/
|
||||
@Component
|
||||
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. */
|
||||
private static final String COPY_TO_API = "{0}doclib/action/copy-to/node/{1}";
|
||||
|
||||
/**
|
||||
* Copy a list of nodes to the target container.
|
||||
*
|
||||
* @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}".
|
||||
* @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)
|
||||
{
|
||||
return copyTo(user, password, 200, targetContainerPath, nodeRefs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a list of nodes to the target container.
|
||||
*
|
||||
* @param user The username of the user to use.
|
||||
* @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}".
|
||||
* @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)
|
||||
{
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("nodeRefs", new JSONArray(nodeRefs));
|
||||
|
||||
return doSlingshotPostJsonRequest(user, password, expectedStatusCode, requestParams,
|
||||
MessageFormat.format(COPY_TO_API, "{0}", targetContainerPath));
|
||||
}
|
||||
}
|
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 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";
|
||||
|
||||
/**
|
||||
* create reference endpoint
|
||||
*/
|
||||
private static final String CREATE_RELATIONSHIP_API_ENDPOINT = "{0}node/{1}/customreferences";
|
||||
|
||||
/**
|
||||
* 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 customDefinition custom reference definition name
|
||||
* @return <code>reference id</code> if the customDefinition is found
|
||||
* <code> null </code> otherwise
|
||||
*
|
||||
*/
|
||||
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 item = customDefinitions.getJSONObject(i);
|
||||
boolean hasSource = customDefinition.equalsIgnoreCase(
|
||||
item.has("source") ? item.getString("source") : 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)
|
||||
{
|
||||
return item.getString("refId");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (JSONException error)
|
||||
{
|
||||
LOGGER.error("Unable to get the refId for the custom reference definition {}", customDefinition);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to add custom reference instance to the specified record node
|
||||
*
|
||||
* @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
|
||||
* @throws AssertionError if the creation fails.
|
||||
*/
|
||||
public void createRelationship(
|
||||
String adminUser,
|
||||
String adminPassword,
|
||||
String recordNodeIdFrom,
|
||||
String recordNodeIdTo,
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,360 @@
|
||||
/*-
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.alfresco.rest.rm.community.util.PojoUtility;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.ParseException;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API for generalized holds
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 3.2
|
||||
*/
|
||||
@Component
|
||||
public class HoldsAPI extends BaseAPI
|
||||
{
|
||||
public static final String HOLDS_CONTAINER = "Holds";
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
private static final String RM_HOLDS_API = "{0}rma/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 description hold description
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
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 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.
|
||||
*/
|
||||
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);
|
||||
|
||||
final JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("alf_destination", getNodeRefSpacesStore() + parentNodeRef);
|
||||
requestParams.put("prop_cm_name", holdName);
|
||||
requestParams.put("prop_cm_description", description);
|
||||
requestParams.put("prop_rma_holdReason", reason);
|
||||
|
||||
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 description hold description
|
||||
* @return node ref of the hold created
|
||||
*/
|
||||
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)
|
||||
{
|
||||
LOGGER.error("Converting message body to JSON failed. Body: {}", httpResponse, error);
|
||||
}
|
||||
catch(ParseException error)
|
||||
{
|
||||
LOGGER.error("Parsing message body failed.", error);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes hold using RM Actions API and expect action to be successful
|
||||
*
|
||||
* @param user the user who does the request
|
||||
* @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)
|
||||
{
|
||||
return deleteHold(user.getUsername(), user.getPassword(), holdNodeRef, SC_OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes hold using RM Actions API and expect a specific status code
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes hold using cmis
|
||||
*
|
||||
* @param username user's username
|
||||
* @param password its password
|
||||
* @param holdName the hold name
|
||||
* @throws AssertionError if the deletion was unsuccessful.
|
||||
*/
|
||||
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 itemNodeRef the nodeRef of the item to be added to hold
|
||||
* @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));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 itemNodeRefs the list of items nodeRefs to be added to 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());
|
||||
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 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);
|
||||
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 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));
|
||||
return APIUtils.extractErrorMessageFromHttpResponse(httpResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 holdNodeRefs list of hold node refs for add/remove items
|
||||
* @return JSONObject fo
|
||||
*/
|
||||
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();
|
||||
holdNodeRefs.forEach(holdNodeRef -> holds.put(getNodeRefSpacesStore() + holdNodeRef));
|
||||
final JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("nodeRefs", nodeRefs);
|
||||
requestParams.put("holds", holds);
|
||||
return requestParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 itemNodeRef the nodeRef of the item to be removed from hold
|
||||
* @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));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @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());
|
||||
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 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
|
||||
* @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);
|
||||
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 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));
|
||||
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.
|
||||
*
|
||||
* @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 : "");
|
||||
|
||||
final JSONArray holdEntries = doGetRequest(user, password,
|
||||
MessageFormat.format(GET_RM_HOLDS, "{0}", parameters)).getJSONObject("data").getJSONArray("holds");
|
||||
|
||||
return PojoUtility.jsonToObject(holdEntries, HoldEntry.class);
|
||||
}
|
||||
}
|
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import org.alfresco.dataprep.AlfrescoHttpClient;
|
||||
import org.alfresco.dataprep.AlfrescoHttpClientFactory;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* The v0 REST API for nodes
|
||||
*
|
||||
* @author jcule
|
||||
* @since 2.7EA1
|
||||
*/
|
||||
@Component
|
||||
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;
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
String requestURL;
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
requestURL = MessageFormat.format(GET_NODE_API, client.getAlfrescoUrl(), NODE_PREFIX + nodeId);
|
||||
client.close();
|
||||
return doGetRequest(username, password, requestURL);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,140 @@
|
||||
/*-
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.JSONValue;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
private static final String GET_NODE_API = "{0}alfresco/s/slingshot/node/{1}";
|
||||
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
/**
|
||||
* Get the node properties
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
* @param nodeId
|
||||
* @return JSONArray object
|
||||
*/
|
||||
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);
|
||||
|
||||
// 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
|
||||
{
|
||||
responseString = EntityUtils.toString(entity, "UTF-8");
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new IllegalArgumentException("Failed to read the response", e);
|
||||
}
|
||||
client.close();
|
||||
Object obj = JSONValue.parse(responseString);
|
||||
JSONObject jsonObject = (JSONObject) obj;
|
||||
return (JSONArray) jsonObject.get("properties");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content url (bin name) for a node
|
||||
*
|
||||
* @param userModel
|
||||
* @param nodeId
|
||||
* @return Return the content url string
|
||||
*/
|
||||
public String getContentUrl(UserModel userModel, String nodeId)
|
||||
{
|
||||
String contentProperty = getContentProperty(userModel, nodeId);
|
||||
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"
|
||||
contentProperty = contentProperty.split("\\|")[0];
|
||||
return contentProperty.replaceAll("contentUrl=", "");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the content property for a node
|
||||
*
|
||||
* @param userModel
|
||||
* @param nodeId
|
||||
* @return Return the content property string
|
||||
*/
|
||||
public String getContentProperty(UserModel userModel, String nodeId)
|
||||
{
|
||||
JSONArray properties = getNodeProperties(userModel.getUsername(), userModel.getPassword(), nodeId);
|
||||
|
||||
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"))
|
||||
{
|
||||
return ((JSONObject) valuesArray.get(0)).get("value").toString();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* The v0 REST API for rm audit logs
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.7
|
||||
*/
|
||||
@Component
|
||||
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 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
|
||||
* @return return Only return log entries matching this 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)
|
||||
{
|
||||
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");
|
||||
|
||||
return PojoUtility.jsonToObject(auditEntries, AuditEntry.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the list of audit entries.
|
||||
*
|
||||
* @param username The username of the user to use.
|
||||
* @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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,486 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import static org.alfresco.dataprep.AlfrescoHttpClient.MIME_TYPE_JSON;
|
||||
import static org.alfresco.rest.core.v0.APIUtils.ISO_INSTANT_FORMATTER;
|
||||
import static org.apache.http.HttpStatus.SC_OK;
|
||||
import static org.testng.AssertJUnit.assertEquals;
|
||||
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;
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.core.v0.RMEvents;
|
||||
import org.alfresco.utility.data.DataUserAIS;
|
||||
import org.apache.chemistry.opencmis.client.api.CmisObject;
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.message.BasicHeader;
|
||||
import org.apache.http.protocol.HTTP;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
/** 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}";
|
||||
|
||||
// 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;
|
||||
|
||||
/** user service */
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@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).
|
||||
*/
|
||||
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");
|
||||
return jsonObject.toMap().keySet();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the capabilities for a given role.
|
||||
*
|
||||
* @param adminUser The RM admin user.
|
||||
* @param adminPassword The password of the user.
|
||||
* @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));
|
||||
return jsonObject.getJSONObject(role).getJSONObject("capabilities").keySet();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the body for PUT/POST Roles API requests
|
||||
*
|
||||
* @param roleName the role name
|
||||
* @param roleDisplayLabel a human-readable label for the role
|
||||
* @param capabilities a list of capabilities for the role
|
||||
* @return
|
||||
*/
|
||||
private JSONObject roleRequestBody(String roleName, String roleDisplayLabel, Set<String> capabilities)
|
||||
{
|
||||
final JSONObject requestBody = new JSONObject();
|
||||
requestBody.put("name", roleName);
|
||||
requestBody.put("displayLabel", roleDisplayLabel);
|
||||
final JSONArray capabilitiesArray = new JSONArray();
|
||||
capabilities.forEach(capabilitiesArray::put);
|
||||
requestBody.put("capabilities", capabilitiesArray);
|
||||
return requestBody;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new RM role.
|
||||
*
|
||||
* @param adminUser The username of the admin user.
|
||||
* @param adminPassword The password for the admin user.
|
||||
* @param roleName The name of the new role.
|
||||
* @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),
|
||||
RM_ROLES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update an existing RM role.
|
||||
*
|
||||
* @param adminUser The username of the admin user.
|
||||
* @param adminPassword The password for the admin user.
|
||||
* @param roleName The name of the new role.
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a created RM role.
|
||||
*
|
||||
* @param adminUser The username of the admin user.
|
||||
* @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,
|
||||
getConfiguredRoles(adminUser, adminPassword).contains(roleName));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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))
|
||||
{
|
||||
dataUser.createUser(userName, password);
|
||||
|
||||
}
|
||||
assignRoleToUser(adminUser, adminPassword, userName, role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a records management role to a user.
|
||||
*
|
||||
* @throws AssertionError if the assignation is unsuccessful.
|
||||
*/
|
||||
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));
|
||||
|
||||
HttpPost request = null;
|
||||
HttpResponse response;
|
||||
try
|
||||
{
|
||||
request = new HttpPost(reqURL);
|
||||
response = client.execute(adminUser, adminPassword, request);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (request != null)
|
||||
{
|
||||
request.releaseConnection();
|
||||
}
|
||||
client.close();
|
||||
}
|
||||
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 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);
|
||||
AlfrescoHttpClient client = alfrescoHttpClientFactory.getObject();
|
||||
String url = MessageFormat.format(client.getAlfrescoUrl() + "alfresco/s/slingshot/doclib/" + MOVE_ACTIONS_API, destinationPath);
|
||||
HttpPost request = new HttpPost(url);
|
||||
|
||||
boolean success = false;
|
||||
try
|
||||
{
|
||||
JSONObject body = new JSONObject();
|
||||
body.put("nodeRefs", new JSONArray(Arrays.asList(contentNodeRef)));
|
||||
StringEntity se = new StringEntity(body.toString(), AlfrescoHttpClient.UTF_8_ENCODING);
|
||||
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, MIME_TYPE_JSON));
|
||||
request.setEntity(se);
|
||||
|
||||
HttpResponse response = client.execute(user, password, request);
|
||||
switch (response.getStatusLine().getStatusCode())
|
||||
{
|
||||
case HttpStatus.SC_OK:
|
||||
JSONObject json = new JSONObject(EntityUtils.toString(response.getEntity()));
|
||||
success = (Boolean) json.get("overallSuccess");
|
||||
break;
|
||||
case HttpStatus.SC_NOT_FOUND:
|
||||
LOGGER.info("The provided paths couldn't be found " + response.toString());
|
||||
break;
|
||||
default:
|
||||
LOGGER.error("Unable to move: " + response.toString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (JSONException | IOException e)
|
||||
{
|
||||
LOGGER.error(e.toString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (request != null)
|
||||
{
|
||||
request.releaseConnection();
|
||||
}
|
||||
client.close();
|
||||
}
|
||||
|
||||
assertTrue("Moving " + contentPath + " to " + destinationPath + " failed.", success);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 destinationPath destination path
|
||||
* @throws AssertionError if the move was unexpectedly successful.
|
||||
*/
|
||||
public void moveToAndExpectFailure(String user, String password, String contentPath, String destinationPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
moveTo(user, password, contentPath, destinationPath);
|
||||
}
|
||||
catch(AssertionError e)
|
||||
{
|
||||
// We are expecting the move to fail.
|
||||
return;
|
||||
}
|
||||
fail("Moving " + contentPath + " to " + destinationPath + " succeeded unexpectedly.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an action on the given content
|
||||
*
|
||||
* @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)
|
||||
{
|
||||
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 contentName the content name
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
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 contentName the content name
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
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 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);
|
||||
final JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", action.getAction());
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
if (actionsParams != null)
|
||||
{
|
||||
requestParams.put("params", actionsParams);
|
||||
}
|
||||
return requestParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform an action on the record folder
|
||||
*
|
||||
* @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
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
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)));
|
||||
}
|
||||
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
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
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);
|
||||
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 contentName the content name
|
||||
* @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()));
|
||||
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 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())
|
||||
{
|
||||
item.delete();
|
||||
}
|
||||
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 itemNodeRef the item noderef
|
||||
* @return The HTTP response.
|
||||
*/
|
||||
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_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);
|
||||
|
||||
return doPostJsonRequest(username, password, SC_OK, requestParams, MessageFormat.format(UPDATE_METADATA_API, "{0}", itemNodeRef));
|
||||
}
|
||||
}
|
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on record categories
|
||||
*
|
||||
* @author Oana Nechiforescu
|
||||
* @since 2.5
|
||||
*/
|
||||
@Component
|
||||
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_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 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);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "createDispositionSchedule");
|
||||
requestParams.put("nodeRef", catNodeRef);
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the disposition schedule nodeRef
|
||||
*
|
||||
* @param user
|
||||
* @param password
|
||||
* @param categoryName
|
||||
* @return the disposition schedule nodeRef
|
||||
*/
|
||||
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(), "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 retentionNodeRef the retention nodeRef
|
||||
* @return The HTTP Response.
|
||||
*/
|
||||
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_recordLevelDisposition", appliedToRecords.toString());
|
||||
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 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)
|
||||
{
|
||||
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);
|
||||
String events = getPropertyValue(properties, RETENTION_SCHEDULE.RETENTION_EVENTS);
|
||||
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);
|
||||
|
||||
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 categoryName the name of the category
|
||||
* @throws AssertionError if the delete was unsuccessful.
|
||||
*/
|
||||
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 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)
|
||||
{
|
||||
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 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)
|
||||
{
|
||||
deleteItem(username, password, "/" + containerName + "/" + folderName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a map of retention properties
|
||||
*
|
||||
* @param authority retention authority
|
||||
* @param instructions retention authority
|
||||
* @return the map
|
||||
*/
|
||||
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);
|
||||
return retentionProperties;
|
||||
}
|
||||
}
|
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import static org.apache.http.HttpStatus.SC_OK;
|
||||
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on records folders
|
||||
*
|
||||
* @author Oana Nechiforescu
|
||||
* @since 2.5
|
||||
*/
|
||||
@Component
|
||||
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 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);
|
||||
|
||||
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)
|
||||
{
|
||||
LOGGER.error("Unable to extract response parameter", error);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -0,0 +1,360 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Methods to make API requests using v0 API on records
|
||||
*
|
||||
* @author Oana Nechiforescu
|
||||
* @since 2.5
|
||||
*/
|
||||
@Component
|
||||
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";
|
||||
|
||||
/**
|
||||
* 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 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);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("actionedUponNode", docNodeRef);
|
||||
requestParams.put("actionDefinitionName", "create-record");
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
|
||||
}
|
||||
|
||||
/**
|
||||
* Completes the record given as parameter
|
||||
*
|
||||
* @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);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "declareRecord");
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, RM_ACTIONS_API);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reject the record given as parameter
|
||||
*
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param recordName the record name
|
||||
* @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)
|
||||
{
|
||||
return rejectRecord(user, password, SC_OK, recordName, reason);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reject the record given as parameter
|
||||
*
|
||||
* @param user the user declaring the document as record
|
||||
* @param password the user's password
|
||||
* @param expectedStatusCode The expected return status code.
|
||||
* @param recordName the record name
|
||||
* @param reason reject reason
|
||||
* @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);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("name", "reject");
|
||||
requestParams.put("nodeRef", recNodeRef);
|
||||
requestParams.put("params",new JSONObject()
|
||||
.put("reason",reason));
|
||||
|
||||
return doPostJsonRequest(user, password, expectedStatusCode, requestParams, RM_ACTIONS_API);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("actionedUponNode", docNodeRef);
|
||||
requestParams.put("actionDefinitionName", "declare-as-version-record");
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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, "");
|
||||
* </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
|
||||
* @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)
|
||||
{
|
||||
String recordName = properties.get(RMProperty.NAME);
|
||||
if (getRecord(username, password, folderName, recordName) != null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
String recordPath = "/" + categoryName;
|
||||
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);
|
||||
|
||||
if (record != null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
// non-electronic properties
|
||||
String recordTitle = getPropertyValue(properties, RMProperty.TITLE);
|
||||
String description = getPropertyValue(properties, RMProperty.DESCRIPTION);
|
||||
String physicalSize = getPropertyValue(properties, RMProperty.PHYSICAL_SIZE);
|
||||
String numberOfCopies = getPropertyValue(properties, RMProperty.NUMBER_OF_COPIES);
|
||||
String shelf = getPropertyValue(properties, RMProperty.SHELF);
|
||||
String storage = getPropertyValue(properties, RMProperty.STORAGE_LOCATION);
|
||||
String box = getPropertyValue(properties, RMProperty.BOX);
|
||||
String file = getPropertyValue(properties, RMProperty.FILE);
|
||||
|
||||
// retrieve the container nodeRef
|
||||
String parentNodeRef = getItemNodeRef(username, password, recordPath);
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("alf_destination", getNodeRefSpacesStore() + parentNodeRef);
|
||||
requestParams.put("prop_cm_name", recordName);
|
||||
requestParams.put("prop_cm_title", recordTitle);
|
||||
requestParams.put("prop_cm_description", description);
|
||||
requestParams.put("prop_rma_physicalSize", physicalSize);
|
||||
requestParams.put("prop_rma_numberOfCopies", numberOfCopies);
|
||||
requestParams.put("prop_rma_storageLocation", storage);
|
||||
requestParams.put("prop_rma_shelf", shelf);
|
||||
requestParams.put("prop_rma_box", box);
|
||||
requestParams.put("prop_rma_file", file);
|
||||
|
||||
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
|
||||
* @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
|
||||
* @throws AssertionError if the upload was unsuccessful.
|
||||
*/
|
||||
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);
|
||||
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, "");
|
||||
* </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 ""
|
||||
* @throws AssertionError If the record could not be deleted.
|
||||
*/
|
||||
public void deleteRecord(String username, String password, String recordName, String categoryName, String folderName)
|
||||
{
|
||||
String recordPath = "/" + categoryName;
|
||||
if (!folderName.equals(""))
|
||||
{
|
||||
recordPath = recordPath + "/" + folderName;
|
||||
}
|
||||
deleteItem(username, password, recordPath + "/" + recordName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the record object in case it exists
|
||||
*
|
||||
* @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))
|
||||
{
|
||||
return record;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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)
|
||||
{
|
||||
CmisObject record = getRecord(username, password, folderName, recordPartialName);
|
||||
if (record != null)
|
||||
{
|
||||
return record.getName();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Share a document
|
||||
*
|
||||
* @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.
|
||||
*/
|
||||
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)
|
||||
{
|
||||
LOGGER.info("Unable to extract response parameter", e);
|
||||
}
|
||||
return Pair.of(false, String.valueOf(response.getJSONObject("status").getInt("code")));
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide in place record
|
||||
*
|
||||
* @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)
|
||||
{
|
||||
String docNodeRef = getNodeRefSpacesStore() + nodeId;
|
||||
|
||||
JSONObject requestParams = new JSONObject();
|
||||
requestParams.put("actionedUponNode", docNodeRef);
|
||||
requestParams.put("actionDefinitionName", "hide-record");
|
||||
|
||||
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the record's nodeRef
|
||||
*
|
||||
* @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);
|
||||
}
|
||||
}
|
@@ -0,0 +1,353 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
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 org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.rm.community.model.rules.RuleDefinition;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Covers CRUD API operations on rules
|
||||
*/
|
||||
@Component
|
||||
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}";
|
||||
public static final String INHERIT_RULES_API = "{0}node/{1}/ruleset/inheritrules/toggle";
|
||||
public static final String INHERIT_RULES_STATE_API = "{0}node/{1}/ruleset/inheritrules/state";
|
||||
// logger
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(RulesAPI.class);
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @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)
|
||||
{
|
||||
LOGGER.error("Unable to extract response parameter.", error);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* @return true if the rule has been updated successfully, false otherwise
|
||||
*/
|
||||
public JSONObject updateRule(String username, String password, String containerNodeRef, RuleDefinition ruleProperties)
|
||||
{
|
||||
String ruleId = ruleProperties.getId();
|
||||
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);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 containerNodeRef the container on which the rule has been created
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 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)
|
||||
{
|
||||
List<String> ruleIds = getRulesIdsSetOnContainer(username, password, containerNodeRef);
|
||||
for (String ruleId : ruleIds)
|
||||
{
|
||||
deleteRule(username, password, containerNodeRef, ruleId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all the rules for the specified container with given rule properties
|
||||
*
|
||||
* @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)
|
||||
{
|
||||
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
|
||||
{
|
||||
JSONArray rules = rulesJson.getJSONArray("data");
|
||||
for (int i = 0; i < rules.length(); i++)
|
||||
{
|
||||
RuleDefinition ruleDefinition = new RuleDefinition();
|
||||
JSONObject rule = rules.getJSONObject(i);
|
||||
ruleDefinition.id(rule.getString("id"));
|
||||
ruleDefinition.title(rule.getString("title"));
|
||||
ruleDefinition.description(rule.getString("description"));
|
||||
ruleDefinition.ruleType(rule.getJSONArray("ruleType").get(0).toString());
|
||||
ruleDefinition.disabled(rule.getBoolean("disabled"));
|
||||
rulesDefinitions.add(ruleDefinition);
|
||||
}
|
||||
}
|
||||
catch (JSONException error)
|
||||
{
|
||||
LOGGER.error("Unable to parse rules.", error);
|
||||
}
|
||||
}
|
||||
return rulesDefinitions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves all the ids of the rules set on the container
|
||||
*
|
||||
* @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());
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares a request object for rules with given properties
|
||||
*
|
||||
* @param ruleProperties the rule properties
|
||||
* @return a object containing the rule properties for the request
|
||||
*
|
||||
* @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
|
||||
requestParams.put("id", "");
|
||||
requestParams.put("action", addRulesActions(ruleProperties));
|
||||
requestParams.put("title", ruleProperties.getTitle());
|
||||
requestParams.put("description", ruleProperties.getDescription());
|
||||
requestParams.put("disabled", ruleProperties.isDisabled());
|
||||
requestParams.put("applyToChildren", ruleProperties.isApplyToChildren());
|
||||
requestParams.put("executeAsynchronously", ruleProperties.getRunInBackground());
|
||||
requestParams.put("ruleType", asList(ruleProperties.getRuleType()));
|
||||
|
||||
return requestParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
JSONObject action = new JSONObject();
|
||||
action.put("actionDefinitionName", "composite-action");
|
||||
JSONObject conditions = new JSONObject();
|
||||
conditions.put("conditionDefinitionName", "no-condition");
|
||||
conditions.put("parameterValues", new JSONObject());
|
||||
action.put("conditions", asList(conditions));
|
||||
action.put("actions", getRuleActionsList(ruleProperties));
|
||||
return action;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
{
|
||||
List<JSONObject> ruleActionsList = new ArrayList<>();
|
||||
|
||||
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)
|
||||
{
|
||||
parameters.put("createRecordPath", ruleProperties.getCreateRecordPath());
|
||||
}
|
||||
parameters.put("path", ruleProperties.getPath());
|
||||
}
|
||||
if (ruleProperties.getContentTitle() != null)
|
||||
{
|
||||
parameters.put("property", "cm:title");
|
||||
parameters.put("value", ruleProperties.getContentTitle());
|
||||
parameters.put("prop_type", "d:mltext");
|
||||
}
|
||||
if (ruleProperties.getContentDescription() != null)
|
||||
{
|
||||
parameters.put("property", "cm:description");
|
||||
parameters.put("value", ruleProperties.getContentDescription());
|
||||
parameters.put("prop_type", "d:mltext");
|
||||
}
|
||||
if (ruleProperties.getRejectReason() != null)
|
||||
{
|
||||
parameters.put("reason", ruleProperties.getRejectReason());
|
||||
}
|
||||
ruleActionObj.put("parameterValues", parameters);
|
||||
ruleActionsList.add(ruleActionObj);
|
||||
}
|
||||
return ruleActionsList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rule id for the give rule title set on a container
|
||||
*
|
||||
* @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();
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable inheritance on specific container
|
||||
*
|
||||
* @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));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable inheritance on specific container
|
||||
*
|
||||
* @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));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the rules inheritance state of the container
|
||||
*
|
||||
* @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));
|
||||
return rulesInheritanceInfo.getJSONObject("data").getBoolean("inheritRules");
|
||||
}
|
||||
}
|
@@ -0,0 +1,263 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
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;
|
||||
import org.apache.http.client.utils.URLEncodedUtils;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Helper methods for performing search using various Alfresco search APIs.
|
||||
*
|
||||
* @author Kristijan Conkas
|
||||
* @since 2.5
|
||||
*/
|
||||
@Component
|
||||
public class SearchAPI extends BaseAPI
|
||||
{
|
||||
/** http client factory */
|
||||
@Autowired
|
||||
private AlfrescoHttpClientFactory alfrescoHttpClientFactory;
|
||||
|
||||
/** faceted search API endpoint */
|
||||
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}";
|
||||
|
||||
/** 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";
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic rm search.
|
||||
* @param username
|
||||
* @param password
|
||||
* @param site
|
||||
* @param query
|
||||
* @param filters
|
||||
* @param sortby
|
||||
* @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)
|
||||
{
|
||||
List<BasicNameValuePair> searchParameters = new ArrayList<>();
|
||||
searchParameters.add(new BasicNameValuePair("query", query));
|
||||
searchParameters.add(new BasicNameValuePair("filters", filters));
|
||||
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"));
|
||||
|
||||
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>
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
* @param query
|
||||
* @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));
|
||||
|
||||
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
|
||||
*
|
||||
* @param username
|
||||
* @param password
|
||||
* @param query
|
||||
* @param sortby
|
||||
* @param includeCategories
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
return facetedRequest(username, password, parameters, FACETED_SEARCH_ENDPOINT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute share live search for documents.
|
||||
*
|
||||
* @param searchUser
|
||||
* @param searchPassword
|
||||
* @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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
return facetedSearch(
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
JSONObject searchResult = liveSearchForDocuments(username, password, term);
|
||||
LOGGER.info(searchResult.toString(3));
|
||||
return getItemNames(searchResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 RuntimeException for malformed search response
|
||||
*/
|
||||
/**
|
||||
* Helper method to extract list of names from search result.
|
||||
*
|
||||
* @param searchResult
|
||||
* @return
|
||||
*/
|
||||
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)
|
||||
{
|
||||
return getPropertyValue(searchResult, nodeRef, propertyName);
|
||||
}
|
||||
}
|
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0;
|
||||
|
||||
import static org.testng.AssertJUnit.assertNotNull;
|
||||
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Helper methods for performing actions on user trashcan
|
||||
*
|
||||
* @author Oana Nechiforescu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Component
|
||||
public class UserTrashcanAPI extends BaseAPI
|
||||
{
|
||||
private static final String EMPTY_TRASHCAN = "{0}archive/workspace/SpacesStore";
|
||||
|
||||
/**
|
||||
* Clears the trashcan for the current user
|
||||
*
|
||||
* @param username the username
|
||||
* @param password the password
|
||||
* @throws AssertionError if emptying the trashcan fails.
|
||||
*/
|
||||
public void emptyTrashcan(String username, String password)
|
||||
{
|
||||
assertNotNull("Emptying trashcan failed for user " + username,
|
||||
doDeleteRequest(username, password, EMPTY_TRASHCAN));
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0.service;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.alfresco.rest.core.v0.BaseAPI;
|
||||
import org.alfresco.rest.v0.RecordCategoriesAPI;
|
||||
import org.alfresco.utility.data.DataUserAIS;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Service for different disposition schedule actions
|
||||
*
|
||||
* @author jcule, cagache
|
||||
* @since 2.6.2
|
||||
*/
|
||||
@Service
|
||||
public class DispositionScheduleService extends BaseAPI
|
||||
{
|
||||
@Autowired
|
||||
private RecordCategoriesAPI recordCategoriesAPI;
|
||||
|
||||
@Autowired
|
||||
private DataUserAIS dataUser;
|
||||
|
||||
/**
|
||||
* Helper method for adding a retain after period step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period
|
||||
*/
|
||||
public void addRetainAfterPeriodStep(String categoryName, String period)
|
||||
{
|
||||
HashMap<RETENTION_SCHEDULE, String> retainStep = new HashMap<>();
|
||||
retainStep.put(RETENTION_SCHEDULE.NAME, "retain");
|
||||
retainStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
retainStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Retain after a period step");
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), categoryName, retainStep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a cut off after period step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period
|
||||
*/
|
||||
public void addCutOffAfterPeriodStep(String categoryName, String period)
|
||||
{
|
||||
HashMap<RETENTION_SCHEDULE, String> cutOffStep = new HashMap<>();
|
||||
cutOffStep.put(RETENTION_SCHEDULE.NAME, "cutoff");
|
||||
cutOffStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
cutOffStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Cut off after a period step");
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), categoryName, cutOffStep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a destroy with ghosting after period
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param period
|
||||
*/
|
||||
public void addDestroyWithGhostingAfterPeriodStep(String categoryName, String period)
|
||||
{
|
||||
HashMap<RETENTION_SCHEDULE, String> destroyStep = new HashMap<>();
|
||||
destroyStep.put(RETENTION_SCHEDULE.NAME, "destroy");
|
||||
destroyStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
destroyStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Destroy after a period step");
|
||||
destroyStep.put(RETENTION_SCHEDULE.RETENTION_GHOST, "on");
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), categoryName, destroyStep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding a cut off after an event occurs step
|
||||
*
|
||||
* @param categoryName the category in whose schedule the step will be added
|
||||
* @param events
|
||||
*/
|
||||
public void addCutOffAfterEventStep(String categoryName, String events)
|
||||
{
|
||||
HashMap<RETENTION_SCHEDULE, String> cutOffStep = new HashMap<>();
|
||||
cutOffStep.put(RETENTION_SCHEDULE.NAME, "cutoff");
|
||||
cutOffStep.put(RETENTION_SCHEDULE.RETENTION_EVENTS, events);
|
||||
cutOffStep.put(RETENTION_SCHEDULE.DESCRIPTION, "Cut off after event step");
|
||||
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), categoryName, cutOffStep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method for adding an accession step
|
||||
*
|
||||
* @param timeOrEvent
|
||||
* @param events
|
||||
* @param period
|
||||
* @param periodProperty
|
||||
* @param combineConditions
|
||||
* @return
|
||||
*/
|
||||
public void addAccessionStep(String categoryName, Boolean timeOrEvent, String events, String period, String
|
||||
periodProperty, Boolean combineConditions)
|
||||
{
|
||||
HashMap<RETENTION_SCHEDULE, String> accessionStep = new HashMap<>();
|
||||
accessionStep.put(RETENTION_SCHEDULE.NAME, "accession");
|
||||
accessionStep.put(RETENTION_SCHEDULE.COMBINE_DISPOSITION_STEP_CONDITIONS, Boolean.toString(combineConditions));
|
||||
accessionStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD, period);
|
||||
accessionStep.put(RETENTION_SCHEDULE.RETENTION_PERIOD_PROPERTY, periodProperty);
|
||||
if (!timeOrEvent)
|
||||
{
|
||||
accessionStep.put(RETENTION_SCHEDULE.RETENTION_ELIGIBLE_FIRST_EVENT, Boolean.toString(timeOrEvent));
|
||||
}
|
||||
accessionStep.put(RETENTION_SCHEDULE.RETENTION_EVENTS, events);
|
||||
accessionStep.put(RETENTION_SCHEDULE.DESCRIPTION,
|
||||
"Accession step with time and event conditions.");
|
||||
recordCategoriesAPI.addDispositionScheduleSteps(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), categoryName, accessionStep);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create retention schedule with general fields for the given category as admin
|
||||
* and apply it to the records
|
||||
*
|
||||
* @param categoryName
|
||||
* @param appliedToRecords
|
||||
*/
|
||||
public void createCategoryRetentionSchedule(String categoryName, Boolean appliedToRecords)
|
||||
{
|
||||
recordCategoriesAPI.createRetentionSchedule(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), categoryName);
|
||||
String retentionScheduleNodeRef = recordCategoriesAPI.getDispositionScheduleNodeRef(
|
||||
dataUser.getAdminUser().getUsername(), dataUser.getAdminUser().getPassword(), categoryName);
|
||||
|
||||
HashMap<RETENTION_SCHEDULE, String> retentionScheduleGeneralFields = new HashMap<>();
|
||||
retentionScheduleGeneralFields.put(RETENTION_SCHEDULE.RETENTION_AUTHORITY, "Authority");
|
||||
retentionScheduleGeneralFields.put(RETENTION_SCHEDULE.RETENTION_INSTRUCTIONS, "Instructions");
|
||||
recordCategoriesAPI.setRetentionScheduleGeneralFields(dataUser.getAdminUser().getUsername(),
|
||||
dataUser.getAdminUser().getPassword(), retentionScheduleNodeRef, retentionScheduleGeneralFields,
|
||||
appliedToRecords);
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0.service;
|
||||
|
||||
import static java.time.temporal.ChronoUnit.MINUTES;
|
||||
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
import static org.testng.AssertJUnit.assertTrue;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.rest.rm.community.model.audit.AuditEntry;
|
||||
import org.alfresco.rest.rm.community.model.audit.AuditEvents;
|
||||
import org.alfresco.rest.v0.RMAuditAPI;
|
||||
import org.alfresco.utility.data.DataUserAIS;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Produces processed results from RM Audit REST API calls
|
||||
*
|
||||
* @author Claudia Agache
|
||||
* @since 3.3
|
||||
*/
|
||||
@Service
|
||||
public class RMAuditService
|
||||
{
|
||||
@Autowired
|
||||
private RMAuditAPI rmAuditAPI;
|
||||
|
||||
@Autowired
|
||||
private DataUserAIS dataUser;
|
||||
|
||||
/**
|
||||
* Clear the list of audit entries as admin user.
|
||||
*/
|
||||
public void clearAuditLog()
|
||||
{
|
||||
STEP("Clean audit logs.");
|
||||
rmAuditAPI.clearAuditLog(dataUser.getAdminUser().getUsername(), dataUser.getAdminUser().getPassword());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of rm audit entries filtered by given event
|
||||
*
|
||||
* @param user the user who requests the list of rm audit entries
|
||||
* @param auditEvent the event
|
||||
* @return the list of audit entries matching the event
|
||||
*/
|
||||
public List<AuditEntry> getAuditEntriesFilteredByEvent(UserModel user, AuditEvents auditEvent)
|
||||
{
|
||||
STEP("Get the list of audit entries for the " + auditEvent.eventDisplayName + " event.");
|
||||
return rmAuditAPI.getRMAuditLog(user.getUsername(), user.getPassword(), 100, auditEvent.event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the rm audit log contains the entry for the given event.
|
||||
*
|
||||
* @param user the user who checks the audit log
|
||||
* @param auditEvent the audited event
|
||||
* @param auditUser the user who did the audited event
|
||||
* @param nodeName the audited node name if exists or empty string
|
||||
* @param changedValues the values changed by event if exist or empty list
|
||||
*/
|
||||
public void checkAuditLogForEvent(UserModel user, AuditEvents auditEvent, UserModel auditUser,
|
||||
String nodeName, List<Object> changedValues)
|
||||
{
|
||||
|
||||
List<AuditEntry> auditEntries = getAuditEntriesFilteredByEvent(user, auditEvent);
|
||||
assertTrue("The list of events is not filtered by " + auditEvent.event,
|
||||
auditEntries.stream().allMatch(auditEntry -> auditEntry.getEvent().equals(auditEvent.eventDisplayName)));
|
||||
final LocalDateTime eventTimestamp =
|
||||
LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()).truncatedTo(MINUTES);
|
||||
assertTrue("The event details are not audited",
|
||||
auditEntries.stream().anyMatch(auditEntry -> auditEntry.getNodeName().equals(nodeName) &&
|
||||
auditEntry.getUserName().equals(auditUser.getUsername()) &&
|
||||
CollectionUtils.isEqualCollection(auditEntry.getChangedValues(), changedValues) &&
|
||||
!auditEntry.getTimestamp().isEmpty() &&
|
||||
(LocalDateTime.ofInstant(Instant.parse(auditEntry.getTimestamp()), ZoneId.systemDefault()).truncatedTo(MINUTES)
|
||||
.compareTo(eventTimestamp) <= 0))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the rm audit log contains the entry for the given event.
|
||||
*
|
||||
* @param user the user who checks the audit log
|
||||
* @param auditEvent the audited event
|
||||
* @param auditUser the user who did the audited event
|
||||
* @param nodeName the audited node name if exists or empty string
|
||||
* @param nodePath the path of the audited node if exists or empty string
|
||||
* @param changedValues the values changed by event if exist or empty list
|
||||
*/
|
||||
public void checkAuditLogForEvent(UserModel user, AuditEvents auditEvent, UserModel auditUser,
|
||||
String nodeName, String nodePath, List<Object> changedValues)
|
||||
{
|
||||
List<AuditEntry> auditEntries = getAuditEntriesFilteredByEvent(user, auditEvent);
|
||||
assertTrue("The list of events is not filtered by " + auditEvent.event,
|
||||
auditEntries.stream().allMatch(auditEntry -> auditEntry.getEvent().equals(auditEvent.eventDisplayName)));
|
||||
final LocalDateTime eventTimestamp =
|
||||
LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()).truncatedTo(MINUTES);
|
||||
assertTrue("The event details are not audited",
|
||||
auditEntries.stream().anyMatch(auditEntry -> auditEntry.getNodeName().equals(nodeName) &&
|
||||
auditEntry.getUserName().equals(auditUser.getUsername()) &&
|
||||
auditEntry.getPath().equals(nodePath) &&
|
||||
CollectionUtils.isEqualCollection(auditEntry.getChangedValues(), changedValues) &&
|
||||
!auditEntry.getTimestamp().isEmpty() &&
|
||||
(LocalDateTime.ofInstant(Instant.parse(auditEntry.getTimestamp()), ZoneId.systemDefault()).truncatedTo(MINUTES)
|
||||
.compareTo(eventTimestamp) <= 0))
|
||||
);
|
||||
}
|
||||
}
|
@@ -0,0 +1,209 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* -
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
* -
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* -
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* -
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.v0.service;
|
||||
|
||||
import static lombok.AccessLevel.PROTECTED;
|
||||
import static org.springframework.http.HttpStatus.OK;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.alfresco.rest.core.RestAPIFactory;
|
||||
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
|
||||
import org.alfresco.rest.rm.community.model.user.UserPermissions;
|
||||
import org.alfresco.rest.rm.community.model.user.UserRoles;
|
||||
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
|
||||
import org.alfresco.utility.constants.UserRole;
|
||||
import org.alfresco.utility.data.DataUser;
|
||||
import org.alfresco.utility.data.DataUserAIS;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* Produces processed results from roles API calls
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 2.6
|
||||
*/
|
||||
@Service
|
||||
public class RoleService
|
||||
{
|
||||
@Autowired
|
||||
@Getter (value = PROTECTED)
|
||||
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
|
||||
|
||||
@Autowired
|
||||
@Getter (value = PROTECTED)
|
||||
private DataUserAIS dataUser;
|
||||
|
||||
@Autowired
|
||||
@Getter (value = PROTECTED)
|
||||
private RestAPIFactory restAPIFactory;
|
||||
|
||||
/**
|
||||
* Get the capabilities for a role
|
||||
*
|
||||
* @param roleName the role name
|
||||
* @return the list of capabilities
|
||||
*/
|
||||
public Set<String> getRoleCapabilities(String roleName)
|
||||
{
|
||||
return getRmRolesAndActionsAPI().getCapabilitiesForRole(getDataUser().getAdminUser().getUsername(),
|
||||
getDataUser().getAdminUser().getPassword(), roleName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add capabilities to a role
|
||||
*
|
||||
* @param role role to be updated
|
||||
* @param capabilities list of capabilities to be added
|
||||
*/
|
||||
public void addCapabilitiesToRole(UserRoles role, Set<String> capabilities)
|
||||
{
|
||||
final Set<String> roleCapabilities = new HashSet<>(getRoleCapabilities(role.roleId));
|
||||
roleCapabilities.addAll(capabilities);
|
||||
|
||||
getRmRolesAndActionsAPI().updateRole(getDataUser().getAdminUser().getUsername(), getDataUser().getAdminUser().getPassword(),
|
||||
role.roleId, role.displayName, roleCapabilities);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove capabilities from a role
|
||||
*
|
||||
* @param role role to be updated
|
||||
* @param capabilities list of capabilities to be removed
|
||||
*/
|
||||
public void removeCapabilitiesFromRole(UserRoles role, Set<String> capabilities)
|
||||
{
|
||||
final Set<String> roleCapabilities = getRoleCapabilities(role.roleId);
|
||||
roleCapabilities.removeAll(capabilities);
|
||||
getRmRolesAndActionsAPI().updateRole(getDataUser().getAdminUser().getUsername(), getDataUser().getAdminUser().getPassword(),
|
||||
role.roleId, role.displayName, roleCapabilities);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign permission on a record category and give the user RM role
|
||||
*
|
||||
* @param user the user to assign rm role and permissions
|
||||
* @param categoryId the id of the category to assign permissions for
|
||||
* @param userPermission the permissions to be assigned to the user
|
||||
* @param userRole the rm role to be assigned to the user
|
||||
*/
|
||||
public void assignUserPermissionsOnCategoryAndRMRole(UserModel user, String categoryId, UserPermissions userPermission,
|
||||
String userRole)
|
||||
{
|
||||
getRestAPIFactory().getRMUserAPI().addUserPermission(categoryId, user, userPermission);
|
||||
getRmRolesAndActionsAPI().assignRoleToUser(getDataUser().getAdminUser().getUsername(), getDataUser().getAdminUser().getPassword(),
|
||||
user.getUsername(), userRole);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a test user with rm role
|
||||
*
|
||||
* @param userRole the rm role
|
||||
* @return the created user model
|
||||
*/
|
||||
public UserModel createUserWithRMRole(String userRole)
|
||||
{
|
||||
final UserModel rmUser = getDataUser().createRandomTestUser();
|
||||
getRestAPIFactory().getRMUserAPI().assignRoleToUser(rmUser.getUsername(), userRole);
|
||||
getRestAPIFactory().getRmRestWrapper().assertStatusCodeIs(OK);
|
||||
return rmUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a test user with rm role and permissions over the record category
|
||||
*
|
||||
* @param userRole the rm role
|
||||
* @param userPermission the permissions over the record category
|
||||
* @param recordCategory the category on which user has permissions
|
||||
* @return the created user model
|
||||
*/
|
||||
public UserModel createUserWithRMRoleAndCategoryPermission(String userRole, RecordCategory recordCategory,
|
||||
UserPermissions userPermission)
|
||||
{
|
||||
return createUserWithRMRoleAndRMNodePermission(userRole, recordCategory.getId(), userPermission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a user with rm role and permissions on the node ref
|
||||
*
|
||||
* @param userRole the rm role
|
||||
* @param userPermission the permissions over the rm node
|
||||
* @param componentId the node id to grant rm permission
|
||||
* @return the created user model
|
||||
*/
|
||||
public UserModel createUserWithRMRoleAndRMNodePermission(String userRole, String componentId,
|
||||
UserPermissions userPermission)
|
||||
{
|
||||
final UserModel rmUser = createUserWithRMRole(userRole);
|
||||
getRestAPIFactory().getRMUserAPI().addUserPermission(componentId, rmUser, userPermission);
|
||||
getRestAPIFactory().getRmRestWrapper().assertStatusCodeIs(OK);
|
||||
return rmUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a user with rm role and permissions over the recordCategory and collaborator role
|
||||
* in collaboration site
|
||||
*
|
||||
* @param siteModel collaboration site
|
||||
* @param recordCategory the category on which permission should be given
|
||||
* @param userRole the rm role
|
||||
* @param userPermission the permissions over the recordCategory
|
||||
* @return the created user model
|
||||
*/
|
||||
public UserModel createCollaboratorWithRMRoleAndPermission(SiteModel siteModel, RecordCategory recordCategory,
|
||||
UserRoles userRole, UserPermissions userPermission)
|
||||
{
|
||||
return createUserWithSiteRoleRMRoleAndPermission(siteModel, UserRole.SiteCollaborator, recordCategory.getId(),
|
||||
userRole, userPermission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to create a test user with a rm role and permissions over a rm component and a role
|
||||
* in collaboration site
|
||||
*
|
||||
* @param siteModel collaboration site
|
||||
* @param userSiteRole user role in the collaboration site
|
||||
* @param rmNodeId rm node id to grant rm permission
|
||||
* @param userRole the rm role
|
||||
* @param userPermission the permissions over the rmNodeId
|
||||
* @return the created user model
|
||||
*/
|
||||
public UserModel createUserWithSiteRoleRMRoleAndPermission(SiteModel siteModel, UserRole userSiteRole,
|
||||
String rmNodeId, UserRoles userRole,
|
||||
UserPermissions userPermission)
|
||||
{
|
||||
final UserModel rmUser = createUserWithRMRoleAndRMNodePermission(userRole.roleId, rmNodeId,
|
||||
userPermission);
|
||||
getDataUser().addUserToSite(rmUser, siteModel, userSiteRole);
|
||||
return rmUser;
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user