Compare commits

...

26 Commits

Author SHA1 Message Date
Travis CI User
ec2a8962a1 [maven-release-plugin][skip ci] prepare release 14.119 2022-03-02 10:47:08 +00:00
Alan Davis
ea5ef05197 ACS-2493/ACS-2494 Repo Transform requests using a DAU (#988)
* Test code to follow - need to create image for the single pipeline
2022-03-02 09:58:56 +00:00
Shubham Jain
29df0e9bb2 [APPS-1242] (#985)
* [APPS-1242]

* [APPS-1242]-Commenting reduntant changes.

* [APPS-1242]-Removed unused code

* [APPS-1242]-Removed unused code

* [APPS-1242]-Changes with respect to review comments

Co-authored-by: shubhamjain10 <shubham.jain@globallogic.com>
2022-03-02 15:04:30 +05:30
Travis CI User
dee9b51274 [maven-release-plugin][skip ci] prepare for next development iteration 2022-03-01 08:21:54 +00:00
Travis CI User
0f985d5ded [maven-release-plugin][skip ci] prepare release 14.118 2022-03-01 08:21:51 +00:00
Piotr Żurek
bb1f5d18b6 ATS-983 Downgrade reload4j (#983)
* ATS-983 Downgrade reload4j and provide a test to make sure we still have classes needed by the current implementation of the logging console
2022-03-01 08:34:26 +01:00
Travis CI User
5c05001256 [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-28 10:11:59 +00:00
Travis CI User
67d03b6996 [maven-release-plugin][skip ci] prepare release 14.117 2022-02-28 10:11:56 +00:00
Tom Page
1d1563c1f6 ACS-2072 Enable third party license enforcement. (#984) 2022-02-28 09:22:50 +00:00
Travis CI User
ad965d49fb [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-24 02:14:34 +00:00
Travis CI User
11e3d2d549 [maven-release-plugin][skip ci] prepare release 14.116 2022-02-24 02:14:31 +00:00
alandavis
b68b565a4f Pick up T-Engines 2.5.7-A4 and T-Model 1.4.11 2022-02-24 01:27:00 +00:00
Travis CI User
5963ccffdd [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-23 09:11:59 +00:00
Travis CI User
5265105149 [maven-release-plugin][skip ci] prepare release 14.115 2022-02-23 09:11:55 +00:00
mpichura
abd9ec4eef ACS-2348: removing @Experimental annotation on Storage Properties related methods. (#980) 2022-02-23 09:24:32 +01:00
Travis CI User
397539bbbe [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-22 14:09:03 +00:00
Travis CI User
1287eefd4f [maven-release-plugin][skip ci] prepare release 14.114 2022-02-22 14:09:00 +00:00
Travis CI User
637415554c [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-22 12:26:34 +00:00
Travis CI User
7231b20c41 [maven-release-plugin][skip ci] prepare release 14.113 2022-02-22 12:26:31 +00:00
dependabot[bot]
fea6b0dc4f Bump mybatis-spring from 2.0.6 to 2.0.7 (#922)
Bumps [mybatis-spring](https://github.com/mybatis/spring) from 2.0.6 to 2.0.7.
- [Release notes](https://github.com/mybatis/spring/releases)
- [Commits](https://github.com/mybatis/spring/compare/mybatis-spring-2.0.6...mybatis-spring-2.0.7)

---
updated-dependencies:
- dependency-name: org.mybatis:mybatis-spring
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-22 11:29:35 +00:00
montgolfiere
8c97443073 ACS-2476: Update to Camel 3.15.0 (#981)
* ACS-2476: Update to Camel 3.15.0 (inc Netty 4.1.73.Final)

- note: also Gytheio 0.16 (~ Camel 3.15.0)
- see also ACS-2561
2022-02-22 11:08:42 +00:00
alandavis
22d0f97ce3 Pick up T-Engines 2.5.7-A3 2022-02-22 10:27:57 +00:00
Travis CI User
50ee974ddf [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-22 09:53:23 +00:00
Travis CI User
984bbbd8bf [maven-release-plugin][skip ci] prepare release 14.112 2022-02-22 09:53:20 +00:00
dependabot[bot]
8b57af9cb5 Bump gytheio-messaging-camel from 0.13 to 0.16 (#977)
Bumps gytheio-messaging-camel from 0.13 to 0.16.

---
updated-dependencies:
- dependency-name: org.gytheio:gytheio-messaging-camel
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-02-22 09:57:57 +01:00
Travis CI User
b06924908d [maven-release-plugin][skip ci] prepare for next development iteration 2022-02-17 14:56:12 +00:00
59 changed files with 337 additions and 152 deletions

View File

@@ -60,7 +60,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext01TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext02TestSuite"
@@ -75,7 +75,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext04TestSuite"
@@ -83,7 +83,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContext05TestSuite"
@@ -102,7 +102,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContext06TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - AppContextExtraTestSuite"
@@ -110,7 +110,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl repository -Dtest=AppContextExtraTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - MiscContextTestSuite"
@@ -118,7 +118,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl repository -Dtest=MiscContextTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Repository - SearchTestSuite"
@@ -241,7 +241,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext02TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext03TestSuite"
@@ -249,7 +249,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext03TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContext04TestSuite"
@@ -257,7 +257,7 @@ jobs:
before_script:
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.3 postgres -c 'max_connections=300'
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A1
- docker run -d -p 8090:8090 -e JAVA_OPTS=" -Xms256m -Xmx256m" alfresco/alfresco-transform-core-aio:2.5.7-A4
script: travis_wait 20 mvn -B test -pl remote-api -Dtest=AppContext04TestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
- name: "Remote-api - AppContextExtraTestSuite"

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<modules>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<modules>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-automation-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<build>

View File

@@ -73,4 +73,5 @@ public class RecordFoldersAPI extends BaseAPI
}
return null;
}
}

View File

@@ -114,11 +114,11 @@ public class RecordsAPI extends BaseAPI
/**
* Reject the record given as parameter
*
* @param user the user declaring the document as record
* @param password the user's password
* @param user the user declaring the document as record
* @param password the user's password
* @param expectedStatusCode The expected return status code.
* @param recordName the record name
* @param reason reject reason
* @param recordName the record name
* @param reason reject reason
* @return The HTTP Response.
* @throws AssertionError If the expectedStatusCode was not returned.
*/
@@ -129,8 +129,8 @@ public class RecordsAPI extends BaseAPI
JSONObject requestParams = new JSONObject();
requestParams.put("name", "reject");
requestParams.put("nodeRef", recNodeRef);
requestParams.put("params",new JSONObject()
.put("reason",reason));
requestParams.put("params", new JSONObject()
.put("reason", reason));
return doPostJsonRequest(user, password, expectedStatusCode, requestParams, RM_ACTIONS_API);
}
@@ -221,6 +221,7 @@ public class RecordsAPI extends BaseAPI
* 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
@@ -241,6 +242,7 @@ public class RecordsAPI extends BaseAPI
* <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
@@ -267,7 +269,7 @@ public class RecordsAPI extends BaseAPI
* @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)
public CmisObject getRecord(String username, String password, String folderName, String recordName)
{
for (CmisObject record : contentService.getFolderObject(contentService.getCMISSession(username, password), RM_SITE_ID, folderName).getChildren())
{
@@ -328,9 +330,9 @@ public class RecordsAPI extends BaseAPI
/**
* Hide in place record
*
* @param user the user
* @param password the user's password
* @param nodeId the in place record node id
* @param user the user
* @param password the user's password
* @param nodeId the in place record node id
* @return The HTTP Response.
*/
public HttpResponse hideRecord(String user, String password, String nodeId)
@@ -344,6 +346,7 @@ public class RecordsAPI extends BaseAPI
return doPostJsonRequest(user, password, SC_OK, requestParams, ACTIONS_API);
}
/**
* Retrieves the record's nodeRef
*

View File

@@ -0,0 +1,139 @@
/*
* #%L
* Alfresco Records Management Module
* %%
* Copyright (C) 2005 - 2022 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.records;
import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix;
import static org.alfresco.utility.data.RandomData.getRandomName;
import static org.alfresco.utility.report.log.Step.STEP;
import static org.springframework.http.HttpStatus.CREATED;
import static org.testng.Assert.assertNotNull;
import java.util.HashMap;
import java.util.Map;
import org.alfresco.rest.core.v0.BaseAPI.RMProperty;
import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
import org.alfresco.rest.v0.RMRolesAndActionsAPI;
import org.alfresco.rest.v0.RecordsAPI;
import org.alfresco.test.AlfrescoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Contains CreateNonElectronicRecords test which checks creation and basic actions(view details, edit, move, copy, delete) on non-electronic records
* <p/>
* Precondition:
* <p/>
* RM site created, contains category 1 with folder 1 and folder 2 inside it
* <p/>
* RM user has RM admin role
*
* @author Shubham Jain
* @Since 7.2.0 M2
*/
public class CreateNonElectronicRecordsTests extends BaseRMRestTest
{
private RecordCategory rootCategory;
private RecordCategoryChild recordFolder;
/**
* data prep services
*/
@Autowired
private RMRolesAndActionsAPI rmRolesAndActionsAPI;
@Autowired
private RecordsAPI recordsAPI;
private final String TEST_PREFIX = generateTestPrefix(CreateNonElectronicRecordsTests.class);
private final String RM_ADMIN = TEST_PREFIX + "rm_admin";
private final String recordName = "RM-2777 record";
private final String recordTitle = recordName + " title";
private final String recordDescription = recordName + " description";
@BeforeClass (alwaysRun = true)
public void preConditions()
{
STEP("Create RM Site");
createRMSiteIfNotExists();
STEP("Create RM Admin user");
rmRolesAndActionsAPI.createUserAndAssignToRole(getAdminUser().getUsername(), getAdminUser().getPassword(), RM_ADMIN,
getAdminUser().getPassword(),
"Administrator");
STEP("Create root level category");
rootCategory = createRootCategory(getRandomName("Category"));
STEP("Create the record folder inside the rootCategory");
recordFolder = createRecordFolder(rootCategory.getId(), getRandomName("Folder"));
}
/**
* Test v0 methods to create and get non-electronic records.
*/
@Test
@AlfrescoTest (jira = "RM-2777")
public void createNonElectronicRecordTest()
{
STEP("Create a non-electronic record by completing some of the fields");
Map<Enum<?>, String> properties = new HashMap<Enum<?>, String>();
properties.put(RMProperty.TITLE, recordTitle);
properties.put(RMProperty.DESCRIPTION, recordDescription);
properties.put(RMProperty.NAME, recordName);
properties.put(RMProperty.PHYSICAL_SIZE, "");
properties.put(RMProperty.NUMBER_OF_COPIES, "");
properties.put(RMProperty.SHELF, "");
properties.put(RMProperty.STORAGE_LOCATION, "");
properties.put(RMProperty.BOX, "");
properties.put(RMProperty.FILE, "");
recordsAPI.createNonElectronicRecord(getAdminUser().getUsername(),
getAdminUser().getPassword(), properties, rootCategory.getName(), recordFolder.getName());
STEP("Check the non-electronic record has been created");
assertStatusCode(CREATED);
assertNotNull(recordsAPI.getRecord(getAdminUser().getUsername(), getAdminUser().getPassword(),
recordFolder.getName(), recordName));
}
@AfterClass (alwaysRun = true)
public void deletePreConditions()
{
STEP("Delete the created rootCategory along with corresponding record folders/records present in it");
getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(rootCategory.getId());
}
}

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<modules>

View File

@@ -1,4 +1,4 @@
TRANSFORMERS_TAG=2.5.7-A1
TRANSFORMERS_TAG=2.5.7-A4
SOLR6_TAG=2.0.2
POSTGRES_TAG=13.3
ACTIVEMQ_TAG=5.16.1

View File

@@ -8,7 +8,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<properties>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-repo-parent</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<build>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<modules>

View File

@@ -8,7 +8,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<properties>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<dependencies>
@@ -56,7 +56,7 @@
<dependency>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.19</version>
<version>1.2.18.3</version>
</dependency>
<dependency>
<groupId>org.json</groupId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<properties>

View File

@@ -26,7 +26,6 @@
package org.alfresco.repo.content;
import org.alfresco.service.Experimental;
/**
* Enumeration with values for archive-restore parameter keys.
@@ -35,7 +34,6 @@ import org.alfresco.service.Experimental;
*
* @author mpichura
*/
@Experimental
public enum ContentRestoreParams
{
/**

View File

@@ -26,7 +26,6 @@
package org.alfresco.repo.content;
import org.alfresco.api.AlfrescoPublicApi;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.ContentAccessor;
import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader;
@@ -340,7 +339,6 @@ public interface ContentStore
* @param contentUrl the URL of the content for which the storage properties are to be retrieved.
* @return Returns a key-value (String-String) collection of storage headers/properties with their respective values.
*/
@Experimental
default Map<String, String> getStorageProperties(String contentUrl)
{
return Collections.emptyMap();
@@ -350,14 +348,12 @@ public interface ContentStore
* Submit a request to send content to archive (offline) state.
* If no connector is present or connector is not supporting sending to archive, then {@link UnsupportedOperationException} will be returned.
* Specific connector will decide which storage class/tier will be set for content.
* This method is experimental and subject to changes.
*
* @param contentUrl the URL of the content which is to be archived.
* @param archiveParams a map of String-Serializable parameters defining Storage Provider specific request parameters (can be empty).
* @return true when request successful, false when unsuccessful.
* @throws UnsupportedOperationException when store is unable to handle request.
*/
@Experimental
default boolean requestSendContentToArchive(String contentUrl, Map<String, Serializable> archiveParams)
{
throw new UnsupportedOperationException("Request to archive content is not supported by this content store.");
@@ -370,14 +366,12 @@ public interface ContentStore
* Keys of this map should be restricted to {@code ContentRestoreParams} enumeration.
* For AWS S3 map can indicating expiry days, Glacier restore tier.
* For Azure Blob map can indicate rehydrate priority.
* This method is experimental and subject to changes.
*
* @param contentUrl the URL of the content which is to be archived.
* @param restoreParams a map of String-Serializable parameters defining Storage Provider specific request parameters (can be empty).
* @return true when request successful, false when unsuccessful.
* @throws UnsupportedOperationException when store is unable to handle request.
*/
@Experimental
default boolean requestRestoreContentFromArchive(String contentUrl, Map<String, Serializable> restoreParams)
{
throw new UnsupportedOperationException("Request to restore content from archive is not supported by this content store.");

View File

@@ -26,8 +26,6 @@
package org.alfresco.repo.content;
import org.alfresco.service.Experimental;
/**
* Enumeration with "header" values for Alfresco derived Storage Properties
* Values of this enum should be used when adding Alfresco derived key-value pairs in Storage Properties map.
@@ -35,7 +33,6 @@ import org.alfresco.service.Experimental;
*
* @author mpichura
*/
@Experimental
public enum ObjectStorageProps {
/**
* Object's content is archived and not immediately accessible.

View File

@@ -26,7 +26,6 @@
package org.alfresco.service.cmr.repository;
import org.alfresco.api.AlfrescoPublicApi;
import org.alfresco.service.Experimental;
/**
* Unable to access as content is in an Archived state.
@@ -34,7 +33,6 @@ import org.alfresco.service.Experimental;
*
* @author David Edwards
*/
@Experimental
@AlfrescoPublicApi
public class ArchivedIOException extends ContentIOException
{

View File

@@ -27,7 +27,6 @@ package org.alfresco.service.cmr.repository;
import org.alfresco.api.AlfrescoPublicApi;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.service.Experimental;
/**
* Content Restoration in progress
@@ -35,7 +34,6 @@ import org.alfresco.service.Experimental;
* @author David Edwards
*/
@AlfrescoPublicApi
@Experimental
public class RestoreInProgressException extends AlfrescoRuntimeException
{
private static final long serialVersionUID = 5483215922384016269L;

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<dependencies>

View File

@@ -9,6 +9,6 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
</project>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<properties>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<modules>

View File

@@ -1,4 +1,4 @@
TRANSFORMERS_TAG=2.5.7-A1
TRANSFORMERS_TAG=2.5.7-A4
SOLR6_TAG=2.0.2
POSTGRES_TAG=13.3
ACTIVEMQ_TAG=5.16.1

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<modules>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<developers>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<developers>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<developers>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<developers>

View File

@@ -9,7 +9,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<developers>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<properties>

24
pom.xml
View File

@@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
<packaging>pom</packaging>
<name>Alfresco Community Repo Parent</name>
@@ -51,7 +51,7 @@
<dependency.alfresco-log-sanitizer.version>0.2</dependency.alfresco-log-sanitizer.version>
<dependency.activiti-engine.version>5.23.0</dependency.activiti-engine.version>
<dependency.activiti.version>5.23.0</dependency.activiti.version>
<dependency.alfresco-transform-model.version>1.4.9</dependency.alfresco-transform-model.version>
<dependency.alfresco-transform-model.version>1.4.13</dependency.alfresco-transform-model.version>
<dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
<dependency.acs-event-model.version>0.0.13</dependency.acs-event-model.version>
@@ -73,7 +73,7 @@
<dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version>
<dependency.xercesImpl.version>2.12.2</dependency.xercesImpl.version>
<dependency.slf4j.version>1.7.35</dependency.slf4j.version>
<dependency.gytheio.version>0.13</dependency.gytheio.version>
<dependency.gytheio.version>0.16</dependency.gytheio.version>
<dependency.groovy.version>3.0.9</dependency.groovy.version>
<dependency.tika.version>2.2.1</dependency.tika.version>
<dependency.spring-security.version>5.6.1</dependency.spring-security.version>
@@ -82,7 +82,7 @@
<dependency.ooxml-schemas.version>1.4</dependency.ooxml-schemas.version>
<dependency.keycloak.version>15.0.2</dependency.keycloak.version>
<dependency.jboss.logging.version>3.4.3.Final</dependency.jboss.logging.version>
<dependency.camel.version>3.7.7</dependency.camel.version> <!-- when bumping this version, please keep track/sync with included netty.io dependencies (can cause dependency conflicts)-->
<dependency.camel.version>3.15.0</dependency.camel.version> <!-- when bumping this version, please keep track/sync with included netty.io dependencies (can cause dependency conflicts)-->
<dependency.activemq.version>5.16.1</dependency.activemq.version>
<dependency.apache-compress.version>1.21</dependency.apache-compress.version>
<dependency.apache.taglibs.version>1.2.5</dependency.apache.taglibs.version>
@@ -146,7 +146,7 @@
<connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection>
<developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection>
<url>https://github.com/Alfresco/alfresco-community-repo</url>
<tag>14.111</tag>
<tag>14.119</tag>
</scm>
<distributionManagement>
@@ -766,7 +766,12 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<artifactId>camel-core</artifactId>
<version>${dependency.camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-xml</artifactId>
<version>${dependency.camel.version}</version>
<exclusions>
<exclusion>
@@ -795,11 +800,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec-http</artifactId>
<version>4.1.72.Final</version>
</dependency>
<dependency>
<!-- If you are going to bump dependency.camel.version, please check if the netty-codec-http has higher version that the one above.-->
<groupId>org.apache.camel</groupId>
@@ -945,7 +945,7 @@
<failOnMissing>true</failOnMissing>
<excludedScopes>provided,test</excludedScopes>
<excludedGroups>^(org\.alfresco|com\.alfresco|org\.activiti|org\.gytheio).*</excludedGroups>
<failIfWarning>false</failIfWarning>
<failIfWarning>true</failIfWarning>
<includedLicenses>
https://raw.githubusercontent.com/Alfresco/third-party-license-overrides/master/includedLicenses.txt
</includedLicenses>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<dependencies>

View File

@@ -30,49 +30,37 @@ import org.alfresco.rest.api.model.ArchiveContentRequest;
import org.alfresco.rest.api.model.ContentStorageInfo;
import org.alfresco.rest.api.model.RestoreArchivedContentRequest;
import org.alfresco.rest.framework.resource.parameters.Parameters;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.NodeRef;
/**
* Storage information for content API.
* Note: Currently marked as experimental and subject to change.
*
* @author mpichura
*/
@Experimental
public interface ContentStorageInformation
{
/**
* Note: Currently marked as experimental and subject to change.
*
* @param nodeRef Node reference
* @param contentPropName Qualified name of content property (e.g. 'cm_content')
* @param parameters {@link Parameters} object to get the parameters passed into the request
* @return {@link ContentStorageInfo} object consisting of qualified name of content property and a map of storage properties
*/
@Experimental
ContentStorageInfo getStorageInfo(NodeRef nodeRef, String contentPropName, Parameters parameters);
/**
* Note: Currently marked as experimental and subject to change.
*
* @param nodeRef Node reference
* @param contentPropName Qualified name of content property (e.g. 'cm_content')
* @param archiveContentRequest {@link ArchiveContentRequest} object holding parameters for archive content request
* @return true when request successful, false when unsuccessful
*/
@Experimental
boolean requestArchiveContent(NodeRef nodeRef, String contentPropName, ArchiveContentRequest archiveContentRequest);
/**
* Note: Currently marked as experimental and subject to change.
*
* @param nodeRef Node reference
* @param contentPropName Qualified name of content property (e.g. 'cm_content')
* @param restoreArchivedContentRequest {@link RestoreArchivedContentRequest} object holding parameters for restore from archive request
* @return true when request successful, false when unsuccessful
*/
@Experimental
boolean requestRestoreContentFromArchive(NodeRef nodeRef, String contentPropName,
RestoreArchivedContentRequest restoreArchivedContentRequest);
}

View File

@@ -33,7 +33,6 @@ import org.alfresco.rest.api.model.ContentStorageInfo;
import org.alfresco.rest.api.model.RestoreArchivedContentRequest;
import org.alfresco.rest.framework.core.exceptions.RestoreInProgressException;
import org.alfresco.rest.framework.resource.parameters.Parameters;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
@@ -45,11 +44,9 @@ import java.util.Map;
/**
* Default implementation for {@link ContentStorageInformation}
* Note: Currently marked as experimental and subject to change.
*
* @author mpichura
*/
@Experimental
public class ContentStorageInformationImpl implements ContentStorageInformation
{
@@ -68,7 +65,6 @@ public class ContentStorageInformationImpl implements ContentStorageInformation
* {@inheritDoc}
*/
@Override
@Experimental
public ContentStorageInfo getStorageInfo(NodeRef nodeRef, String contentPropName, Parameters parameters)
{
final QName propQName = getQName(contentPropName);

View File

@@ -38,7 +38,6 @@ import org.alfresco.rest.api.Nodes;
import org.alfresco.rest.api.model.Download;
import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.download.DownloadService;
import org.alfresco.service.cmr.download.DownloadStatus;
import org.alfresco.service.cmr.module.ModuleService;
@@ -214,8 +213,7 @@ public class DownloadsImpl implements Downloads
* @param checkLimit The maximum number of nodes to check, set to -1 for no limit
* @see #checkArchiveStatus(NodeRef[], int, Set)
*/
@Experimental
protected void checkArchiveStatus(NodeRef[] nodeRefs, int checkLimit)
protected void checkArchiveStatus(NodeRef[] nodeRefs, int checkLimit)
{
if (canCheckArchived())
{
@@ -234,7 +232,6 @@ public class DownloadsImpl implements Downloads
* @param checkLimit The maximum number of nodes to check, set to -1 for no limit
* @param cache Tracks nodes that we have already checked, if null an empty cache will be created
*/
@Experimental
private void checkArchiveStatus(NodeRef[] nodeRefs, int checkLimit, Set<NodeRef> cache)
{
// Create the cache for recursive calls.
@@ -291,8 +288,7 @@ public class DownloadsImpl implements Downloads
}
}
@Experimental
protected boolean canCheckArchived()
protected boolean canCheckArchived()
{
return Arrays.stream(CLOUD_CONNECTOR_MODULES).anyMatch(m-> moduleService.getModule(m) != null);
}

View File

@@ -26,19 +26,15 @@
package org.alfresco.rest.api.model;
import org.alfresco.service.Experimental;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* Request for content archive.
* Marked as experimental and subject to change.
*
* @author mpichura
*/
@Experimental
public class ArchiveContentRequest
{
/**

View File

@@ -26,15 +26,11 @@
package org.alfresco.rest.api.model;
import org.alfresco.service.Experimental;
/**
* Request for restore content from archive.
* Marked as experimental and subject to change.
*
* @author mpichura
*/
@Experimental
public class RestoreArchivedContentRequest
{
/**

View File

@@ -39,7 +39,6 @@ import org.alfresco.rest.framework.resource.RelationshipResource;
import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction;
import org.alfresco.rest.framework.resource.parameters.Parameters;
import org.alfresco.rest.framework.webscripts.WithResponse;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.util.PropertyCheck;
@@ -49,11 +48,9 @@ import javax.servlet.http.HttpServletResponse;
/**
* Node storage information.
* Note: Currently marked as experimental and subject to change.
*
* @author mpichura
*/
@Experimental
@RelationshipResource(name = "storage-info", entityResource = NodesEntityResource.class, title = "Node's content storage information")
public class NodeStorageInfoRelation implements RelationshipResourceAction.ReadById<ContentStorageInfo>, InitializingBean
{
@@ -82,7 +79,6 @@ public class NodeStorageInfoRelation implements RelationshipResourceAction.ReadB
return storageInformation.getStorageInfo(nodeRef, contentPropName, parameters);
}
@Experimental
@Operation("archive")
@WebApiParam(name = "archiveContentRequest", title = "Request for archive content",
description = "Optional parameters for archive content", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT)
@@ -103,7 +99,6 @@ public class NodeStorageInfoRelation implements RelationshipResourceAction.ReadB
}
}
@Experimental
@Operation("archive-restore")
@WebApiParam(name = "restoreArchivedContentRequest", title = "Request for restore content from archive",
description = "Optional parameters for restore content from archive", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT)

View File

@@ -40,7 +40,6 @@ import org.alfresco.rest.framework.resource.RelationshipResource;
import org.alfresco.rest.framework.resource.actions.interfaces.RelationshipResourceAction;
import org.alfresco.rest.framework.resource.parameters.Parameters;
import org.alfresco.rest.framework.webscripts.WithResponse;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.version.Version;
import org.alfresco.util.PropertyCheck;
@@ -52,12 +51,9 @@ import javax.servlet.http.HttpServletResponse;
* Node Versions storage information.
*
* - GET /nodes/{nodeId}/versions/{versionId}/storage-info/{contentPropQNameId}
*
* Note: Currently marked as experimental and subject to change.
*
* @author janv
*/
@Experimental
@RelationshipResource(name = "storage-info", entityResource = NodeVersionsRelation.class, title = "Node Version's content storage information")
public class NodeVersionsStorageInfoRelation implements RelationshipResourceAction.ReadById<ContentStorageInfo>, InitializingBean
{
@@ -91,7 +87,6 @@ public class NodeVersionsStorageInfoRelation implements RelationshipResourceActi
return storageInformation.getStorageInfo(versionNodeRef, contentPropQNameId, parameters);
}
@Experimental
@Operation("archive")
@WebApiParam(name = "archiveContentRequest", title = "Request for archive version content",
description = "Optional parameters for archive version content", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT)
@@ -116,7 +111,6 @@ public class NodeVersionsStorageInfoRelation implements RelationshipResourceActi
}
}
@Experimental
@Operation("archive-restore")
@WebApiParam(name = "restoreArchivedContentRequest", title = "Request for restore version content from archive",
description = "Optional parameters for restore version content from archive", kind = ResourceParameter.KIND.HTTP_BODY_OBJECT)

View File

@@ -25,15 +25,12 @@
*/
package org.alfresco.rest.framework.core.exceptions;
import org.alfresco.service.Experimental;
/**
* Thrown when the content is archived and not readily accessible.
* Status is <i>Precondition Failed</i> client error = 412.
*
* @author David Edwards
*/
@Experimental
public class ArchivedContentException extends ApiException
{

View File

@@ -25,9 +25,6 @@
*/
package org.alfresco.rest.framework.core.exceptions;
import org.alfresco.service.Experimental;
@Experimental
public class RestoreInProgressException extends ApiException
{
public static String DEFAULT_MESSAGE_ID = "framework.exception.RestoreInProgress";

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId>
<version>14.111</version>
<version>14.119</version>
</parent>
<dependencies>
@@ -418,7 +418,7 @@
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
<version>2.0.7</version>
</dependency>
<!-- Activiti -->
@@ -656,7 +656,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<artifactId>camel-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-xml</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>

View File

@@ -35,7 +35,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
@@ -425,7 +424,6 @@ public abstract class AbstractRoutingContentStore implements ContentStore
* {@inheritDoc}
*/
@Override
@Experimental
public Map<String, String> getStorageProperties(String contentUrl)
{
ContentStore contentStore = selectReadStore(contentUrl);
@@ -445,7 +443,6 @@ public abstract class AbstractRoutingContentStore implements ContentStore
* {@inheritDoc}
*/
@Override
@Experimental
public boolean requestSendContentToArchive(String contentUrl, Map<String, Serializable> archiveParams)
{
final ContentStore contentStore = selectReadStore(contentUrl);
@@ -463,7 +460,6 @@ public abstract class AbstractRoutingContentStore implements ContentStore
* {@inheritDoc}
*/
@Override
@Experimental
public boolean requestRestoreContentFromArchive(String contentUrl, Map<String, Serializable> restoreParams)
{
final ContentStore contentStore = selectReadStore(contentUrl);

View File

@@ -46,7 +46,6 @@ import org.alfresco.repo.policy.ClassPolicyDelegate;
import org.alfresco.repo.policy.JavaBehaviour;
import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.InvalidTypeException;
@@ -668,7 +667,6 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa
* {@inheritDoc}
*/
@Override
@Experimental
public Map<String, String> getStorageProperties(NodeRef nodeRef, QName propertyQName)
{
final ContentData contentData = getContentDataOrThrowError(nodeRef, propertyQName);

View File

@@ -37,7 +37,6 @@ import org.alfresco.repo.content.caching.quota.QuotaManagerStrategy;
import org.alfresco.repo.content.caching.quota.UnlimitedQuotaStrategy;
import org.alfresco.repo.content.filestore.FileContentStore;
import org.alfresco.repo.content.filestore.SpoofedTextContentReader;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentStreamListener;
@@ -387,7 +386,6 @@ public class CachingContentStore implements ContentStore, ApplicationEventPublis
* {@inheritDoc}
*/
@Override
@Experimental
public Map<String, String> getStorageProperties(final String contentUrl)
{
return backingStore.getStorageProperties(contentUrl);
@@ -397,7 +395,6 @@ public class CachingContentStore implements ContentStore, ApplicationEventPublis
* {@inheritDoc}
*/
@Override
@Experimental
public boolean requestSendContentToArchive(String contentUrl, Map<String, Serializable> archiveParams)
{
return backingStore.requestSendContentToArchive(contentUrl, archiveParams);
@@ -407,7 +404,6 @@ public class CachingContentStore implements ContentStore, ApplicationEventPublis
* {@inheritDoc}
*/
@Override
@Experimental
public boolean requestRestoreContentFromArchive(String contentUrl, Map<String, Serializable> restoreParams)
{
return backingStore.requestRestoreContentFromArchive(contentUrl, restoreParams);

View File

@@ -40,7 +40,6 @@ import org.alfresco.repo.content.ContentContext;
import org.alfresco.repo.content.ContentStore;
import org.alfresco.repo.content.UnsupportedContentUrlException;
import org.alfresco.repo.content.caching.CachingContentStore;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentWriter;
@@ -403,7 +402,6 @@ public class AggregatingContentStore extends AbstractContentStore
* {@inheritDoc}
*/
@Override
@Experimental
public Map<String, String> getStorageProperties(String contentUrl)
{
checkPrimaryStore();
@@ -457,7 +455,6 @@ public class AggregatingContentStore extends AbstractContentStore
/**
* {@inheritDoc}
*/
@Experimental
@Override
public boolean requestSendContentToArchive(final String contentUrl, Map<String, Serializable> archiveParams)
{
@@ -467,7 +464,6 @@ public class AggregatingContentStore extends AbstractContentStore
/**
* {@inheritDoc}
*/
@Experimental
@Override
public boolean requestRestoreContentFromArchive(final String contentUrl, final Map<String, Serializable> restoreParams)
{

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
* Copyright (C) 2019 Alfresco Software Limited
* Copyright (C) 2019-2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -39,6 +39,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.alfresco.transform.client.util.RequestParamMap.DIRECT_ACCESS_URL;
/**
* Transformer that passes a document through a pipeline of transformations to arrive at an target mimetype.
*
@@ -118,6 +120,8 @@ public class LocalPipelineTransform extends AbstractLocalTransform
transformer.intermediateTransformer.transform(currentReader, currentWriter, transformOptions, renditionName, sourceNodeRef);
removeDirectAccessUrlAfterFirstTransform(transformOptions);
// Clear the sourceNodeRef after the first transformation to avoid later transformers thinking the
// intermediate file is the original node.
if (i == 0)
@@ -132,4 +136,9 @@ public class LocalPipelineTransform extends AbstractLocalTransform
}
}
}
private void removeDirectAccessUrlAfterFirstTransform(Map<String, String> transformOptions)
{
transformOptions.remove(DIRECT_ACCESS_URL);
}
}

View File

@@ -483,7 +483,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl
* @param transform the local transform.
* @return {@code true} is supported, {@code false} otherwise.
*/
boolean isSupported(CoreFunction function, LocalTransform transform)
public boolean isSupported(CoreFunction function, LocalTransform transform)
{
return isSupported(function, transform.getName());
}

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
* Copyright (C) 2021 Alfresco Software Limited
* Copyright (C) 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -29,15 +29,22 @@ import org.alfresco.repo.content.transform.LocalTransform;
import org.alfresco.repo.content.transform.LocalTransformServiceRegistry;
import org.alfresco.repo.content.transform.UnsupportedTransformationException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.DirectAccessUrl;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.transform.client.model.config.CoreFunction;
import org.alfresco.util.PropertyCheck;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import java.util.HashMap;
import java.util.Map;
import static org.alfresco.model.ContentModel.PROP_CONTENT;
import static org.alfresco.transform.client.util.RequestParamMap.DIRECT_ACCESS_URL;
/**
* Request synchronous transforms.
*
@@ -51,16 +58,30 @@ public class LocalSynchronousTransformClient implements SynchronousTransformClie
private static Log logger = LogFactory.getLog(LocalTransformClient.class);
private LocalTransformServiceRegistry localTransformServiceRegistry;
private ContentService contentService;
private boolean directAccessUrlEnabled;
public void setLocalTransformServiceRegistry(LocalTransformServiceRegistry localTransformServiceRegistry)
{
this.localTransformServiceRegistry = localTransformServiceRegistry;
}
public void setContentService(ContentService contentService)
{
this.contentService = contentService;
}
public void setDirectAccessUrlEnabled(boolean directAccessUrlEnabled)
{
this.directAccessUrlEnabled = directAccessUrlEnabled;
}
@Override
public void afterPropertiesSet() throws Exception
{
PropertyCheck.mandatory(this, "localTransformServiceRegistry", localTransformServiceRegistry);
PropertyCheck.mandatory(this, "contentService", contentService);
PropertyCheck.mandatory(this, "transformDirectAccessUrlEnabled", directAccessUrlEnabled);
}
@Override
@@ -123,6 +144,7 @@ public class LocalSynchronousTransformClient implements SynchronousTransformClie
logger.debug(TRANSFORM + "requested " + renditionName);
}
actualOptions = addDirectAccessUrlToOptionsIfPossible(actualOptions, sourceNodeRef, transform);
transform.transform(reader, writer, actualOptions, renditionName, sourceNodeRef);
if (logger.isDebugEnabled())
@@ -140,6 +162,20 @@ public class LocalSynchronousTransformClient implements SynchronousTransformClie
}
}
private Map<String, String> addDirectAccessUrlToOptionsIfPossible(Map<String, String> actualOptions,
NodeRef sourceNodeRef, LocalTransform transform)
{
if (directAccessUrlEnabled &&
localTransformServiceRegistry.isSupported(CoreFunction.DIRECT_ACCESS_URL, transform) &&
contentService.isContentDirectUrlEnabled(sourceNodeRef, PROP_CONTENT))
{
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(sourceNodeRef, PROP_CONTENT, true);
actualOptions = new HashMap<>(actualOptions);
actualOptions.put(DIRECT_ACCESS_URL, directAccessUrl.getContentUrl());
}
return actualOptions;
}
@Override
public String getName()
{

View File

@@ -2,7 +2,7 @@
* #%L
* Alfresco Repository
* %%
* Copyright (C) 2019 Alfresco Software Limited
* Copyright (C) 2022 Alfresco Software Limited
* %%
* This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of
@@ -32,18 +32,24 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.DirectAccessUrl;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.transform.client.model.config.CoreFunction;
import org.alfresco.util.PropertyCheck;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import static org.alfresco.model.ContentModel.PROP_CONTENT;
import static org.alfresco.transform.client.util.RequestParamMap.DIRECT_ACCESS_URL;
/**
* Requests rendition transforms take place using transforms available on the local machine (based on
* {@link LocalTransform}. The transform and consumption of the
@@ -61,6 +67,7 @@ public class LocalTransformClient implements TransformClient, InitializingBean
private TransactionService transactionService;
private ContentService contentService;
private RenditionService2Impl renditionService2;
private boolean directAccessUrlEnabled;
private ExecutorService executorService;
private ThreadLocal<LocalTransform> transform = new ThreadLocal<>();
@@ -85,6 +92,11 @@ public class LocalTransformClient implements TransformClient, InitializingBean
this.renditionService2 = renditionService2;
}
public void setDirectAccessUrlEnabled(boolean directAccessUrlEnabled)
{
this.directAccessUrlEnabled = directAccessUrlEnabled;
}
public void setExecutorService(ExecutorService executorService)
{
this.executorService = executorService;
@@ -97,6 +109,7 @@ public class LocalTransformClient implements TransformClient, InitializingBean
PropertyCheck.mandatory(this, "transactionService", transactionService);
PropertyCheck.mandatory(this, "contentService", contentService);
PropertyCheck.mandatory(this, "renditionService2", renditionService2);
PropertyCheck.mandatory(this, "directAccessUrlEnabled", directAccessUrlEnabled);
if (executorService == null)
{
executorService = Executors.newCachedThreadPool();
@@ -130,8 +143,9 @@ public class LocalTransformClient implements TransformClient, InitializingBean
{
String renditionName = renditionDefinition.getRenditionName();
String targetMimetype = renditionDefinition.getTargetMimetype();
Map<String, String> actualOptions = renditionDefinition.getTransformOptions();
Map<String, String> renditionOptions = renditionDefinition.getTransformOptions();
LocalTransform localTransform = transform.get();
Map<String, String> actualOptions = addDirectAccessUrlToOptionsIfPossible(renditionOptions, sourceNodeRef, localTransform);
executorService.submit(() ->
{
@@ -187,4 +201,18 @@ public class LocalTransformClient implements TransformClient, InitializingBean
}), user);
});
}
private Map<String, String> addDirectAccessUrlToOptionsIfPossible(Map<String, String> actualOptions,
NodeRef sourceNodeRef, LocalTransform transform)
{
if (directAccessUrlEnabled &&
localTransformServiceRegistry.isSupported(CoreFunction.DIRECT_ACCESS_URL, transform) &&
contentService.isContentDirectUrlEnabled(sourceNodeRef, PROP_CONTENT))
{
DirectAccessUrl directAccessUrl = contentService.requestContentDirectUrl(sourceNodeRef, PROP_CONTENT, true);
actualOptions = new HashMap<>(actualOptions);
actualOptions.put(DIRECT_ACCESS_URL, directAccessUrl.getContentUrl());
}
return actualOptions;
}
}

View File

@@ -43,7 +43,6 @@ import org.alfresco.repo.domain.tenant.TenantEntity;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.Experimental;
import org.alfresco.service.transaction.TransactionService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
@@ -276,7 +275,6 @@ public abstract class AbstractTenantRoutingContentStore extends AbstractRoutingC
/**
* {@inheritDoc}
*/
@Experimental
@Override
public Map<String, String> getStorageProperties(String contentUrl)
{
@@ -287,7 +285,6 @@ public abstract class AbstractTenantRoutingContentStore extends AbstractRoutingC
* {@inheritDoc}
*/
@Override
@Experimental
public boolean requestSendContentToArchive(String contentUrl, Map<String, Serializable> archiveParams)
{
return getTenantContentStore().requestSendContentToArchive(contentUrl, archiveParams);
@@ -297,7 +294,6 @@ public abstract class AbstractTenantRoutingContentStore extends AbstractRoutingC
* {@inheritDoc}
*/
@Override
@Experimental
public boolean requestRestoreContentFromArchive(String contentUrl, Map<String, Serializable> restoreParams)
{
return getTenantContentStore().requestRestoreContentFromArchive(contentUrl, restoreParams);

View File

@@ -29,7 +29,6 @@ package org.alfresco.service.cmr.repository;
import org.alfresco.api.AlfrescoPublicApi;
import org.alfresco.model.ContentModel;
import org.alfresco.service.Auditable;
import org.alfresco.service.Experimental;
import org.alfresco.service.cmr.dictionary.InvalidTypeException;
import org.alfresco.service.namespace.QName;
@@ -260,7 +259,6 @@ public interface ContentService
* @return Returns a key-value (String-String) collection of storage headers/properties with their respective values for a given {@link NodeRef}.
*/
@Auditable(parameters = {"nodeRef", "propertyQName"})
@Experimental
default Map<String, String> getStorageProperties(NodeRef nodeRef, QName propertyQName)
{
return Collections.emptyMap();
@@ -270,7 +268,6 @@ public interface ContentService
* Submit a request to send content to archive (offline) state.
* If no connector is present or connector is not supporting sending to archive, then {@link UnsupportedOperationException} will be returned.
* Specific connector will decide which storage class/tier will be set for content.
* This method is experimental and subject to changes.
*
* @param nodeRef a reference to a node having a content property
* @param propertyQName the name of the property, which must be of type <b>content</b>
@@ -279,7 +276,6 @@ public interface ContentService
* @throws UnsupportedOperationException when method not implemented
*/
@Auditable(parameters = {"nodeRef", "propertyQName", "archiveParams"})
@Experimental
default boolean requestSendContentToArchive(NodeRef nodeRef, QName propertyQName,
Map<String, Serializable> archiveParams)
{
@@ -293,7 +289,6 @@ public interface ContentService
* Keys of this map should be restricted to {@code ContentRestoreParams} enumeration.
* For AWS S3 map can indicating expiry days, Glacier restore tier.
* For Azure Blob map can indicate rehydrate priority.
* This method is experimental and subject to changes.
*
* @param nodeRef a reference to a node having a content property
* @param propertyQName the name of the property, which must be of type <b>content</b>
@@ -302,7 +297,6 @@ public interface ContentService
* @throws UnsupportedOperationException when method not implemented
*/
@Auditable(parameters = {"nodeRef", "propertyQName", "restoreParams"})
@Experimental
default boolean requestRestoreContentFromArchive(NodeRef nodeRef, QName propertyQName, Map<String, Serializable> restoreParams)
{
throw new UnsupportedOperationException("Request to restore content from archive is not supported by content service.");

View File

@@ -47,7 +47,7 @@ import java.io.StringReader;
import java.util.Collections;
import java.util.List;
import static org.alfresco.transform.client.util.RequestParamMap.INCLUDE_CORE_VERSION;
import static org.alfresco.transform.client.util.RequestParamMap.ENDPOINT_TRANSFORM_CONFIG_LATEST;
/**
* This class reads multiple T-Engine config and local files and registers as if they were all
@@ -106,7 +106,7 @@ public class CombinedConfig extends CombinedTransformConfig
private boolean addRemoteConfig(String baseUrl, String remoteType)
{
String url = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + "transform/config?" + INCLUDE_CORE_VERSION + "=" + true;
String url = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + ENDPOINT_TRANSFORM_CONFIG_LATEST;
HttpGet httpGet = new HttpGet(url);
boolean successReadingConfig = true;
try

View File

@@ -81,12 +81,15 @@
<property name="transactionService" ref="transactionService" />
<property name="contentService" ref="contentService" />
<property name="renditionService2" ref="renditionService2" />
<property name="directAccessUrlEnabled" value="${local.transform.directAccessUrl.enabled}"/>
</bean>
<bean id="synchronousTransformClient" parent="localSynchronousTransformClient" />
<bean id="localSynchronousTransformClient" class="org.alfresco.repo.rendition2.LocalSynchronousTransformClient">
<property name="localTransformServiceRegistry" ref="localTransformServiceRegistry" />
<property name="contentService" ref="contentService" />
<property name="directAccessUrlEnabled" value="${local.transform.directAccessUrl.enabled}"/>
</bean>
<!-- Deprecated bean that converts transform properties to the deprecated TransformationOptions format -->

View File

@@ -1313,6 +1313,9 @@ restApi.directAccessUrl.enabled=false
# Direct Access Url REST API calls cannot request an explicit expiry time.
restApi.directAccessUrl.defaultExpiryTimeInSec=30
# Controls whether direct access url URLs may be used in transforms.
local.transform.directAccessUrl.enabled=true
# Creates additional indexes on alf_node and alf_transaction. Recommended for large repositories.
system.new-node-transaction-indexes.ignored=true

View File

@@ -63,6 +63,7 @@ import org.junit.runners.Suite;
org.alfresco.repo.jscript.ScriptSearchTest.class,
org.alfresco.repo.lock.LockUtilsTest.class,
org.alfresco.repo.lock.mem.LockStoreImplTest.class,
org.alfresco.repo.management.CheckRequiredClassesForLoggingConsoleUnitTest.class,
org.alfresco.repo.management.subsystems.CryptodocSwitchableApplicationContextFactoryTest.class,
org.alfresco.repo.module.ModuleDetailsImplTest.class,
org.alfresco.repo.module.ModuleVersionNumberTest.class,

View File

@@ -0,0 +1,42 @@
/*
* #%L
* Alfresco Repository
* %%
* 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.repo.management;
import junit.framework.TestCase;
import org.junit.Test;
public class CheckRequiredClassesForLoggingConsoleUnitTest extends TestCase
{
private static final String CLASS_NAME = "org.apache.log4j.jmx.HierarchyDynamicMBean";
@Test
public void testRequiredClassIsOnAClasspath() throws ClassNotFoundException
{
final Class<?> clazz = Class.forName(CLASS_NAME);
assertNotNull(clazz);
}
}