mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Merge branch 'master' into dev-dhrn-ACS-777
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -35,3 +35,6 @@ target
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
|
||||
hs_err_pid*
|
||||
|
||||
# Alfresco runtime
|
||||
alf_data
|
||||
|
@@ -128,7 +128,7 @@ cd acs-community-packaging
|
||||
mvn clean install -PcommunityDocker -Dmaven.javadoc.skip=true
|
||||
cd ..
|
||||
~~~
|
||||
In Itellij IDEA, create a new project using the `work` directory as the source.
|
||||
In Intellij IDEA, create a new project using the `work` directory as the source.
|
||||
* File > New Project from Existing Sources > .../work > Maven
|
||||
|
||||
## Docker
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
@@ -188,6 +188,11 @@
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>woodstox-core-asl</artifactId>
|
||||
</exclusion>
|
||||
<!-- [ACS-544] Excluded as conflicts with JDK9+ as it includes javax.transaction -->
|
||||
<exclusion>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jta_1.1_spec</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@@ -9,6 +9,6 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
</project>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<profiles>
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
@@ -60,7 +60,7 @@
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jaxb</groupId>
|
||||
<artifactId>jaxb-runtime</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<version>2.3.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.xml.soap</groupId>
|
||||
|
27
pom.xml
27
pom.xml
@@ -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>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Alfresco Community Repo Parent</name>
|
||||
|
||||
@@ -53,13 +53,13 @@
|
||||
<dependency.activiti.version>5.23.0</dependency.activiti.version>
|
||||
<dependency.transform.model.version>1.0.2.11</dependency.transform.model.version>
|
||||
<dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.version>
|
||||
<dependency.acs-event-model.version>0.0.8</dependency.acs-event-model.version>
|
||||
<dependency.acs-event-model.version>0.0.10</dependency.acs-event-model.version>
|
||||
|
||||
<dependency.spring.version>5.2.9.RELEASE</dependency.spring.version>
|
||||
<dependency.antlr.version>3.5.2</dependency.antlr.version>
|
||||
<dependency.jackson.version>2.11.3</dependency.jackson.version>
|
||||
<dependency.jackson-databind.version>2.11.2</dependency.jackson-databind.version>
|
||||
<dependency.cxf.version>3.4.0</dependency.cxf.version>
|
||||
<dependency.cxf.version>3.4.1</dependency.cxf.version>
|
||||
<dependency.opencmis.version>1.0.0</dependency.opencmis.version>
|
||||
<dependency.pdfbox.version>2.0.21</dependency.pdfbox.version>
|
||||
<dependency.webscripts.version>8.14</dependency.webscripts.version>
|
||||
@@ -70,7 +70,7 @@
|
||||
<dependency.guava.version>28.2-jre</dependency.guava.version>
|
||||
<dependency.commons-io.version>2.8.0</dependency.commons-io.version>
|
||||
<dependency.gson.version>2.8.6</dependency.gson.version>
|
||||
<dependency.httpclient.version>4.5.12</dependency.httpclient.version>
|
||||
<dependency.httpclient.version>4.5.13</dependency.httpclient.version>
|
||||
<dependency.httpcore.version>4.4.13</dependency.httpcore.version>
|
||||
<dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.version>
|
||||
<dependency.xercesImpl.version>2.12.0-alfresco-patched-20191004</dependency.xercesImpl.version>
|
||||
@@ -98,11 +98,11 @@
|
||||
<dependency.mysql.version>8.0.22</dependency.mysql.version>
|
||||
<dependency.mariadb.version>2.7.0</dependency.mariadb.version>
|
||||
|
||||
<dependency.tas-utility.version>3.0.35</dependency.tas-utility.version>
|
||||
<dependency.tas-utility.version>3.0.37</dependency.tas-utility.version>
|
||||
<dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
|
||||
<dependency.javax.json.version>1.1.4</dependency.javax.json.version>
|
||||
<dependency.tas-restapi.version>1.48</dependency.tas-restapi.version>
|
||||
<dependency.tas-cmis.version>1.19</dependency.tas-cmis.version>
|
||||
<dependency.tas-cmis.version>1.21</dependency.tas-cmis.version>
|
||||
<dependency.tas-email.version>1.8</dependency.tas-email.version>
|
||||
<dependency.tas-webdav.version>1.6</dependency.tas-webdav.version>
|
||||
<dependency.tas-ftp.version>1.5</dependency.tas-ftp.version>
|
||||
@@ -148,6 +148,13 @@
|
||||
<groupId>xalan</groupId>
|
||||
<artifactId>xalan</artifactId>
|
||||
<version>2.7.2-alfresco</version>
|
||||
<exclusions>
|
||||
<!-- [ACS-544] Excluded to avoid conflict in JDK9+ as it includes javax.xml and w3c.org -->
|
||||
<exclusion>
|
||||
<groupId>xml-apis</groupId>
|
||||
<artifactId>xml-apis</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.alfresco.services</groupId>
|
||||
@@ -490,6 +497,13 @@
|
||||
<groupId>xerces</groupId>
|
||||
<artifactId>xercesImpl</artifactId>
|
||||
<version>${dependency.xercesImpl.version}</version>
|
||||
<exclusions>
|
||||
<!-- [ACS-544] Excluded to avoid conflict in JDK9+ as it includes javax.xml and w3c.org -->
|
||||
<exclusion>
|
||||
<groupId>xml-apis</groupId>
|
||||
<artifactId>xml-apis</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<!-- Newer metadata-extractor, used in TIKA, see ACS-370 -->
|
||||
<dependency>
|
||||
@@ -697,4 +711,3 @@
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -2348,6 +2348,11 @@ public class NodesImpl implements Nodes
|
||||
private void handleNodeRename(Map<QName, Serializable> props, NodeRef nodeRef)
|
||||
{
|
||||
Serializable nameProp = props.get(ContentModel.PROP_NAME);
|
||||
handleNodeRename(nameProp, nodeRef);
|
||||
}
|
||||
|
||||
private void handleNodeRename(Serializable nameProp, NodeRef nodeRef)
|
||||
{
|
||||
if ((nameProp != null))
|
||||
{
|
||||
String currentName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);
|
||||
@@ -2722,6 +2727,7 @@ public class NodesImpl implements Nodes
|
||||
String fileName = parameters.getParameter(PARAM_NAME);
|
||||
if (fileName != null)
|
||||
{
|
||||
handleNodeRename(fileName, nodeRef);
|
||||
// optionally rename, before updating the content
|
||||
nodeService.setProperty(nodeRef, ContentModel.PROP_NAME, fileName);
|
||||
}
|
||||
|
@@ -54,9 +54,9 @@ cmm.rest_api.property_change_mandatory_enforced_opt_err=\u6709\u52b9\u5316\u3055
|
||||
cmm.rest_api.property_change_multi_valued_opt_err=\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u308b\u30e2\u30c7\u30eb\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u8907\u6570\u5024\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
# validation
|
||||
cmm.rest_api.input_validation_err=''{0}'' \u306f\u6709\u52b9\u306a\u5024\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u6570\u5b57\u3001\u82f1\u5b57\u3001\u30cf\u30a4\u30d5\u30f3 (-)\u3001\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2 (_) \u3060\u3051\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
cmm.rest_api.prefix_not_registered=URI ''{0}'' \u7528\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u540d\u524d\u7a7a\u9593\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 \u30e2\u30c7\u30eb\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044.
|
||||
cmm.rest_api.prefix_not_registered=URI ''{0}'' \u7528\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u540d\u524d\u7a7a\u9593\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 \u30e2\u30c7\u30eb\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
cmm.rest_api.prefixed_qname_invalid=''{0}'' \u306f\u6709\u52b9\u306a\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u4ed8\u304d QName \u5024\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 {1}
|
||||
cmm.rest_api.circular_dependency_err=\u5faa\u74b0\u4f9d\u5b58\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002 ''{0}'' \u306f\u3059\u3067\u306b ''{1}'' \u306b\u4f9d\u5b58\u3059\u308b\u30e2\u30c7\u30eb\u3067\u3042\u308b\u305f\u3081\u3001\u89aa\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093.
|
||||
cmm.rest_api.circular_dependency_err=\u5faa\u74b0\u4f9d\u5b58\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f\u3002 ''{0}'' \u306f\u3059\u3067\u306b ''{1}'' \u306b\u4f9d\u5b58\u3059\u308b\u30e2\u30c7\u30eb\u3067\u3042\u308b\u305f\u3081\u3001\u89aa\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
cmm.rest_api.prefixed_qname_invalid_format=''{0}'' \u306f\u6709\u52b9\u306a\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u4ed8\u304d QName \u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u6709\u52b9\u306a\u5f62\u5f0f\u306f\u3001\u540d\u524d\u7a7a\u9593\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3001\u30b3\u30ed\u30f3 (:)\u3001\u540d\u524d\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\u3002\u4f8b: cm:content\u3002
|
||||
# model import
|
||||
cmm.rest_api.model.import_namespace_multiple_found=\u30ab\u30b9\u30bf\u30e0\u30e2\u30c7\u30eb\u306b\u5b9a\u7fa9\u3067\u304d\u308b\u540d\u524d\u7a7a\u9593\u306f 1 \u3064\u3060\u3051\u3067\u3059\u304c\u3001 ''{0}'' \u500b\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002
|
||||
|
@@ -55,7 +55,7 @@ nodebrowser.delete-permissions=\u6062\u590d\u6743\u9650
|
||||
nodebrowser.delete-permissions.tip=\u5220\u9664\u6240\u6709\u5feb\u901f\u6307\u6d3e\u5f97\u5230\u6b64\u8282\u70b9\u7684\u6743\u9650\u5e76\u8fd8\u539f\u6743\u9650\u7ee7\u627f\u3002
|
||||
nodebrowser.unlock=\u89e3\u9501
|
||||
nodebrowser.unlock.tip=\u5220\u9664\u6b64\u8282\u70b9\u4fdd\u7559\u7684\u4efb\u4f55\u9501\u3002\u53d6\u6d88\u4efb\u4f55\u76f8\u5173\u8054\u5de5\u4f5c\u526f\u672c\u7684\u68c0\u51fa\uff0c\u5de5\u4f5c\u526f\u672c\u88ab\u5220\u9664\u3002\u8bf7\u6ce8\u610f\uff0c\u5bf9\u5de5\u4f5c\u526f\u672c\u6240\u505a\u7684\u5168\u90e8\u4fee\u6539\u5c06\u4e22\u5931\u3002
|
||||
nodebrowser.confirm=\u786e\u5b9a\u5417\uff1f?
|
||||
nodebrowser.confirm=\u786e\u5b9a\u5417\uff1f
|
||||
nodebrowser.message.delete=\u5df2\u6210\u529f\u5220\u9664\u8282\u70b9\u3002
|
||||
nodebrowser.message.restore=\u5df2\u6210\u529f\u8fd8\u539f\u8282\u70b9\u3002
|
||||
nodebrowser.message.take-ownership=\u5df2\u6210\u529f\u83b7\u53d6\u6240\u6709\u6743\u3002
|
||||
|
@@ -5714,6 +5714,55 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
|
||||
assertTrue(currentPath.equals(expectedPath));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPrimaryPathVersion() throws Exception
|
||||
{
|
||||
setRequestContext(user1);
|
||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
||||
String myNodeId = getMyNodeId();
|
||||
|
||||
// /Company Home/User Homes/user<timestamp>/folder_A
|
||||
String folderName = "folder_A";
|
||||
Folder folder = createFolder(myNodeId, folderName);
|
||||
NodeRef folderNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder.getId());
|
||||
|
||||
// /Company Home/User Homes/user<timestamp>/folder_A/testDoc<GUID>
|
||||
String docName = "testDoc" + GUID.generate();
|
||||
Document doc = new Document();
|
||||
doc.setName(docName);
|
||||
doc.setNodeType(TYPE_CM_CONTENT);
|
||||
HttpResponse response = post(getNodeChildrenUrl(folderNodeRef.getId()), toJsonAsStringNonNull(doc), 201);
|
||||
Document docResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
||||
NodeRef docNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, docResp.getId());
|
||||
|
||||
// Checks that current path and name match
|
||||
String expectedPath1 = "/Company Home/User Homes/" + user1 + "/" + folderName + "/" + docName;
|
||||
Path docPath1 = nodeService.getPath(docNodeRef);
|
||||
Path.ChildAssocElement docPathLast1 = (Path.ChildAssocElement) docPath1.last();
|
||||
String docLocalName1 = docPathLast1.getRef().getQName().getLocalName();
|
||||
String currentPath1 = docPath1.toDisplayPath(nodeService, permissionService) + "/" + docLocalName1;
|
||||
assertTrue(docName.equals(docLocalName1));
|
||||
assertTrue(expectedPath1.equals(currentPath1));
|
||||
|
||||
// Upload document new content supplying a different name
|
||||
String docName2 = "testDoc2" + GUID.generate();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("name", docName2);
|
||||
Document docResp2 = updateTextFileWithRandomContent(docNodeRef.getId(), 1024L, params);
|
||||
NodeRef docNodeRef2 = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, docResp2.getId());
|
||||
|
||||
// Checks new path and name after new version upload
|
||||
String expectedPath2 = "/Company Home/User Homes/" + user1 + "/" + folderName + "/" + docName2;
|
||||
Path docPath2 = nodeService.getPath(docNodeRef2);
|
||||
Path.ChildAssocElement docPathLast2 = (Path.ChildAssocElement) docPath2.last();
|
||||
String docLocalName2 = docPathLast2.getRef().getQName().getLocalName();
|
||||
String currentPath2 = docPath2.toDisplayPath(nodeService, permissionService) + "/" + docLocalName2;
|
||||
assertFalse(docLocalName1.equals(docLocalName2));
|
||||
assertTrue(docName2.equals(docLocalName2));
|
||||
assertFalse(expectedPath1.equals(currentPath2));
|
||||
assertTrue(expectedPath2.equals(currentPath2));
|
||||
}
|
||||
|
||||
private String getDataDictionaryNodeId() throws Exception
|
||||
{
|
||||
Map params = new HashMap<>();
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>8.319-SNAPSHOT</version>
|
||||
<version>8.328-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
@@ -249,11 +249,7 @@
|
||||
<groupId>xalan</groupId>
|
||||
<artifactId>xalan</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xml-apis</groupId>
|
||||
<artifactId>xml-apis</artifactId>
|
||||
<version>1.4.01</version>
|
||||
</dependency>
|
||||
<!-- [ACS-544] xml-apis dependency excluded to avoid conflict in JDK9+ as it includes javax.xml and w3c. -->
|
||||
<dependency>
|
||||
<groupId>jakarta.annotation</groupId>
|
||||
<artifactId>jakarta.annotation-api</artifactId>
|
||||
@@ -425,6 +421,11 @@
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>woodstox-core-asl</artifactId>
|
||||
</exclusion>
|
||||
<!-- [ACS-544] Excluded as conflicts with JDK9+ as it includes javax.transaction -->
|
||||
<exclusion>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jta_1.1_spec</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
@@ -1005,6 +1006,11 @@
|
||||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>javax.annotation-api</artifactId>
|
||||
</exclusion>
|
||||
<!-- [ACS-544] Excluded as conflicts with JDK9+ as it includes javax.transaction -->
|
||||
<exclusion>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jta_1.1_spec</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@@ -176,14 +176,14 @@ public class CMISResultSetRow implements ResultSetRow
|
||||
context.setScores(scores);
|
||||
context.setScore(getScore());
|
||||
for (Column column : query.getColumns())
|
||||
{
|
||||
if (column.getAlias().equals(columnName))
|
||||
{
|
||||
//When an SCORE selector is included, score must be adapted to range 0..1 due to CMIS specification
|
||||
if (column.getFunction()!= null && column.getFunction().getName().equals(Score.NAME))
|
||||
{
|
||||
return getNormalisedScore();
|
||||
}
|
||||
else if (column.getAlias().equals(columnName))
|
||||
{
|
||||
return column.getFunction().getValue(column.getFunctionArguments(), context);
|
||||
}
|
||||
// Special case for one selector - ignore any table aliases
|
||||
|
@@ -35,6 +35,7 @@ public enum DeploymentMethod
|
||||
INSTALLER,
|
||||
DOCKER_COMPOSE,
|
||||
HELM_CHART,
|
||||
ANSIBLE,
|
||||
/**
|
||||
* The distribution zip was used to lay down the ACS artifacts
|
||||
*/
|
||||
|
@@ -58,7 +58,7 @@ import org.alfresco.service.namespace.QName;
|
||||
public class EventConsolidator implements EventSupportedPolicies
|
||||
{
|
||||
private final NodeResourceHelper helper;
|
||||
private final Deque<EventType> eventTypes;
|
||||
protected final Deque<EventType> eventTypes;
|
||||
private final List<QName> aspectsAdded;
|
||||
private final List<QName> aspectsRemoved;
|
||||
|
||||
@@ -125,7 +125,7 @@ public class EventConsolidator implements EventSupportedPolicies
|
||||
* @param forceUpdate if {@code true}, will get the latest node info and ignores
|
||||
* the existing builder object.
|
||||
*/
|
||||
private void createBuilderIfAbsent(NodeRef nodeRef, boolean forceUpdate)
|
||||
protected void createBuilderIfAbsent(NodeRef nodeRef, boolean forceUpdate)
|
||||
{
|
||||
if (resourceBuilder == null || forceUpdate)
|
||||
{
|
||||
@@ -140,7 +140,7 @@ public class EventConsolidator implements EventSupportedPolicies
|
||||
*
|
||||
* @param nodeRef the nodeRef in the txn
|
||||
*/
|
||||
private void createBuilderIfAbsent(NodeRef nodeRef)
|
||||
protected void createBuilderIfAbsent(NodeRef nodeRef)
|
||||
{
|
||||
createBuilderIfAbsent(nodeRef, false);
|
||||
}
|
||||
@@ -292,6 +292,7 @@ public class EventConsolidator implements EventSupportedPolicies
|
||||
|
||||
Builder builder = NodeResource.builder();
|
||||
|
||||
ZonedDateTime modifiedAt = null;
|
||||
Map<QName, Serializable> changedPropsBefore = getBeforeMapChanges(propertiesBefore, propertiesAfter);
|
||||
if (!changedPropsBefore.isEmpty())
|
||||
{
|
||||
@@ -321,13 +322,8 @@ public class EventConsolidator implements EventSupportedPolicies
|
||||
builder.setModifiedByUser(modifier);
|
||||
resourceBeforeAllFieldsNull = false;
|
||||
}
|
||||
ZonedDateTime modifiedAt =
|
||||
modifiedAt =
|
||||
helper.getZonedDateTime((Date) changedPropsBefore.get(ContentModel.PROP_MODIFIED));
|
||||
if (modifiedAt != null)
|
||||
{
|
||||
builder.setModifiedAt(modifiedAt);
|
||||
resourceBeforeAllFieldsNull = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle case where the content does not exist on the propertiesBefore
|
||||
@@ -357,6 +353,12 @@ public class EventConsolidator implements EventSupportedPolicies
|
||||
resourceBeforeAllFieldsNull = false;
|
||||
}
|
||||
|
||||
// Only set modifiedAt if one of the other fields is also not null
|
||||
if (modifiedAt != null && !resourceBeforeAllFieldsNull)
|
||||
{
|
||||
builder.setModifiedAt(modifiedAt);
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
@@ -489,4 +491,9 @@ public class EventConsolidator implements EventSupportedPolicies
|
||||
{
|
||||
return resourceBeforeAllFieldsNull;
|
||||
}
|
||||
|
||||
protected void setResourceBeforeAllFieldsNull(boolean resourceBeforeAllFieldsNull){
|
||||
this.resourceBeforeAllFieldsNull = resourceBeforeAllFieldsNull;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -83,21 +83,21 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
{
|
||||
private static final Log LOGGER = LogFactory.getLog(EventGenerator.class);
|
||||
|
||||
private PolicyComponent policyComponent;
|
||||
private NodeService nodeService;
|
||||
protected PolicyComponent policyComponent;
|
||||
protected NodeService nodeService;
|
||||
private NamespaceService namespaceService;
|
||||
private DictionaryService dictionaryService;
|
||||
protected DictionaryService dictionaryService;
|
||||
private DescriptorService descriptorService;
|
||||
private EventFilterRegistry eventFilterRegistry;
|
||||
private Event2MessageProducer event2MessageProducer;
|
||||
private TransactionService transactionService;
|
||||
private PersonService personService;
|
||||
private NodeResourceHelper nodeResourceHelper;
|
||||
protected NodeResourceHelper nodeResourceHelper;
|
||||
|
||||
private NodeTypeFilter nodeTypeFilter;
|
||||
private ChildAssociationTypeFilter childAssociationTypeFilter;
|
||||
private EventUserFilter userFilter;
|
||||
private final EventTransactionListener transactionListener = new EventTransactionListener();
|
||||
protected final EventTransactionListener transactionListener = new EventTransactionListener();
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet()
|
||||
@@ -283,7 +283,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
* @return the {@link EventConsolidator} for the supplied {@code nodeRef} from
|
||||
* the current transaction context.
|
||||
*/
|
||||
private EventConsolidator getEventConsolidator(NodeRef nodeRef)
|
||||
protected EventConsolidator getEventConsolidator(NodeRef nodeRef)
|
||||
{
|
||||
Consolidators consolidators = getTxnConsolidators(transactionListener);
|
||||
Map<NodeRef, EventConsolidator> nodeEvents = consolidators.getNodes();
|
||||
@@ -302,7 +302,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
}
|
||||
|
||||
|
||||
private Consolidators getTxnConsolidators(Object resourceKey)
|
||||
protected Consolidators getTxnConsolidators(Object resourceKey)
|
||||
{
|
||||
Consolidators consolidators = AlfrescoTransactionSupport.getResource(resourceKey);
|
||||
if (consolidators == null)
|
||||
@@ -388,7 +388,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
//NOOP
|
||||
}
|
||||
|
||||
private class EventTransactionListener extends TransactionListenerAdapter
|
||||
protected class EventTransactionListener extends TransactionListenerAdapter
|
||||
{
|
||||
@Override
|
||||
public void afterCommit()
|
||||
@@ -425,7 +425,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
}
|
||||
}
|
||||
|
||||
private void sendEvent(NodeRef nodeRef, EventConsolidator consolidator)
|
||||
protected void sendEvent(NodeRef nodeRef, EventConsolidator consolidator)
|
||||
{
|
||||
if (consolidator.isTemporaryNode())
|
||||
{
|
||||
@@ -466,7 +466,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
logAndSendEvent(event, consolidator.getEventTypes());
|
||||
}
|
||||
|
||||
private void sendEvent(ChildAssociationRef childAssociationRef, ChildAssociationEventConsolidator consolidator)
|
||||
protected void sendEvent(ChildAssociationRef childAssociationRef, ChildAssociationEventConsolidator consolidator)
|
||||
{
|
||||
if (consolidator.isTemporaryChildAssociation())
|
||||
{
|
||||
@@ -506,7 +506,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
logAndSendEvent(event, consolidator.getEventTypes());
|
||||
}
|
||||
|
||||
private void sendEvent(AssociationRef peerAssociationRef, PeerAssociationEventConsolidator consolidator)
|
||||
protected void sendEvent(AssociationRef peerAssociationRef, PeerAssociationEventConsolidator consolidator)
|
||||
{
|
||||
if (consolidator.isTemporaryPeerAssociation())
|
||||
{
|
||||
@@ -525,7 +525,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
logAndSendEvent(event, consolidator.getEventTypes());
|
||||
}
|
||||
|
||||
private void logAndSendEvent(RepoEvent<?> event, Deque<EventType> listOfEvents)
|
||||
protected void logAndSendEvent(RepoEvent<?> event, Deque<EventType> listOfEvents)
|
||||
{
|
||||
if (LOGGER.isTraceEnabled())
|
||||
{
|
||||
@@ -542,7 +542,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
}
|
||||
|
||||
|
||||
private static class Consolidators
|
||||
protected static class Consolidators
|
||||
{
|
||||
private Map<NodeRef, EventConsolidator> nodes;
|
||||
private Map<ChildAssociationRef, ChildAssociationEventConsolidator> childAssocs;
|
||||
|
@@ -43,7 +43,8 @@ public enum EventJSONSchema
|
||||
CHILD_ASSOC_CREATED_V1("childAssocCreated", 1, EventType.CHILD_ASSOC_CREATED),
|
||||
CHILD_ASSOC_DELETED_V1("childAssocDeleted", 1, EventType.CHILD_ASSOC_DELETED),
|
||||
PEER_ASSOC_CREATED_V1("peerAssocCreated", 1 , EventType.PEER_ASSOC_CREATED),
|
||||
PEER_ASSOC_DELETED_V1("peerAssocDeleted", 1 , EventType.PEER_ASSOC_DELETED);
|
||||
PEER_ASSOC_DELETED_V1("peerAssocDeleted", 1 , EventType.PEER_ASSOC_DELETED),
|
||||
PERMISSION_UPDATED_V1("permissionUpdated", 1, EventType.PERMISSION_UPDATED);
|
||||
|
||||
private static final String PREFIX = "https://api.alfresco.com/schema/event/repo/v";
|
||||
|
||||
|
@@ -34,7 +34,8 @@ public enum EventType
|
||||
{
|
||||
NODE_CREATED(EventTypeConst.CREATED, ContextType.NODE), NODE_UPDATED(EventTypeConst.UPDATED, ContextType.NODE), NODE_DELETED(EventTypeConst.DELETED, ContextType.NODE),
|
||||
CHILD_ASSOC_CREATED(EventTypeConst.CREATED, ContextType.CHILD_ASSOC), CHILD_ASSOC_DELETED(EventTypeConst.DELETED, ContextType.CHILD_ASSOC),
|
||||
PEER_ASSOC_CREATED(EventTypeConst.CREATED, ContextType.PEER_ASSOC), PEER_ASSOC_DELETED(EventTypeConst.DELETED, ContextType.PEER_ASSOC);
|
||||
PEER_ASSOC_CREATED(EventTypeConst.CREATED, ContextType.PEER_ASSOC), PEER_ASSOC_DELETED(EventTypeConst.DELETED, ContextType.PEER_ASSOC),
|
||||
PERMISSION_UPDATED(EventTypeConst.UPDATED, ContextType.NODE);
|
||||
|
||||
private static final String PREFIX = "org.alfresco.event.";
|
||||
private final String type;
|
||||
|
@@ -52,6 +52,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.Path;
|
||||
import org.alfresco.service.cmr.security.NoSuchPersonException;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.cmr.security.PersonService;
|
||||
import org.alfresco.service.namespace.NamespaceException;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
@@ -76,6 +77,7 @@ public class NodeResourceHelper implements InitializingBean
|
||||
protected PersonService personService;
|
||||
protected EventFilterRegistry eventFilterRegistry;
|
||||
protected NamespaceService namespaceService;
|
||||
protected PermissionService permissionService;
|
||||
|
||||
private NodeAspectFilter nodeAspectFilter;
|
||||
private NodePropertyFilter nodePropertyFilter;
|
||||
@@ -88,6 +90,7 @@ public class NodeResourceHelper implements InitializingBean
|
||||
PropertyCheck.mandatory(this, "personService", personService);
|
||||
PropertyCheck.mandatory(this, "eventFilterRegistry", eventFilterRegistry);
|
||||
PropertyCheck.mandatory(this, "namespaceService", namespaceService);
|
||||
PropertyCheck.mandatory(this, "permissionService", permissionService);
|
||||
|
||||
this.nodeAspectFilter = eventFilterRegistry.getNodeAspectFilter();
|
||||
this.nodePropertyFilter = eventFilterRegistry.getNodePropertyFilter();
|
||||
@@ -108,6 +111,11 @@ public class NodeResourceHelper implements InitializingBean
|
||||
this.personService = personService;
|
||||
}
|
||||
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
// To make IntelliJ stop complaining about unused method!
|
||||
@SuppressWarnings("unused")
|
||||
public void setEventFilterRegistry(EventFilterRegistry eventFilterRegistry)
|
||||
@@ -316,4 +324,9 @@ public class NodeResourceHelper implements InitializingBean
|
||||
final Path path = nodeService.getPath(nodeRef);
|
||||
return PathUtil.getNodeIdsInReverse(path, showLeaf);
|
||||
}
|
||||
|
||||
public PermissionService getPermissionService()
|
||||
{
|
||||
return permissionService;
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -326,7 +326,7 @@ public abstract class AbstractCategoryServiceImpl implements CategoryService
|
||||
return assocs;
|
||||
}
|
||||
|
||||
private Set<NodeRef> getClassificationNodes(StoreRef storeRef, QName qname)
|
||||
protected Set<NodeRef> getClassificationNodes(StoreRef storeRef, QName qname)
|
||||
{
|
||||
ResultSet resultSet = null;
|
||||
try
|
||||
|
@@ -49,6 +49,7 @@
|
||||
<property name="personService" ref="personService"/>
|
||||
<property name="eventFilterRegistry" ref="event2FilterRegistry"/>
|
||||
<property name="namespaceService" ref="namespaceService"/>
|
||||
<property name="permissionService" ref="permissionService"/>
|
||||
</bean>
|
||||
|
||||
<bean id="nodeResourceHelper" class="org.alfresco.repo.event2.NodeResourceHelper" parent="baseNodeResourceHelper"/>
|
||||
|
@@ -8,7 +8,7 @@ activiti.engine.get.workflow.definition.by.id.error=ID {0}\u306e\u30ef\u30fc\u30
|
||||
activiti.engine.get.workflow.definition.by.name.error=\u540d\u524d {0} \u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.all.workflow.definitions.by.name.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc {0} \u306e\u5168\u5b9a\u7fa9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.workflow.definition.image.error={0}\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9\u753b\u50cf\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.workflow.definition.unexisting.image.error={0}\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9\u753b\u50cf\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u5b9a\u7fa9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093.
|
||||
activiti.engine.get.workflow.definition.unexisting.image.error={0}\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9\u753b\u50cf\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u5b9a\u7fa9\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
|
||||
activiti.engine.get.task.definitions.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9 {0} \u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af\u5b9a\u7fa9\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.process.definition.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9 {0} \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
|
||||
activiti.engine.start.workflow.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc {0} \u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
@@ -24,7 +24,7 @@ activiti.engine.cancel.workflow.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a4
|
||||
activiti.engine.cancel.unexisting.workflow.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 {0} \u306f\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.delete.workflow.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 {0} \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.delete.unexisting.workflow.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 {0} \u306f\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.signal.transition.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30b9 {1} \u304b\u3089\u79fb\u884c{0} \u3092\u767a\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3002
|
||||
activiti.engine.signal.transition.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30b9 {1} \u304b\u3089\u79fb\u884c{0} \u3092\u767a\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.event.unsupported=Activiti\u30a8\u30f3\u30b8\u30f3\u3067\u7a3c\u52d5\u3057\u3066\u3044\u308bWorkflowPath\u3067\u306f\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u767a\u884c\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
|
||||
activiti.engine.fire.event.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30b9 {1} \u304b\u3089\u30a4\u30d9\u30f3\u30c8 {0} \u3092\u767a\u884c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.tasks.for.path.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30b9 {0} \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30bf\u30b9\u30af\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
@@ -32,10 +32,10 @@ activiti.engine.get.timers.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc {0} \u306e
|
||||
activiti.engine.find.completed.task.instances.error=\u52d5\u4f5c\u4e3b {0} \u306e\u5b8c\u4e86\u6e08\u307f\u30bf\u30b9\u30af\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30ea\u30b9\u30c8\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.assigned.tasks.error=\u30b9\u30c6\u30fc\u30bf\u30b9 {1} \u306e\u6a29\u9650 {0} \u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30bf\u30b9\u30af\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.get.pooled.tasks.error=\u6a29\u9650 {0} \u306e\u30d7\u30fc\u30eb\u6e08\u307f\u30bf\u30b9\u30af\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.query.tasks.error=\u30bf\u30b9\u30af\u3092\u7167\u4f1a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u7167\u4f1a: {0}.
|
||||
activiti.engine.query.tasks.error=\u30bf\u30b9\u30af\u3092\u7167\u4f1a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u7167\u4f1a: {0}\u3002
|
||||
activiti.engine.get.task.instance.error=\u30bf\u30b9\u30af\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9 {0} \u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
|
||||
activiti.engine.update.task.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af {0} \u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
|
||||
activiti.engine.update.task.unexisting.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af {0} \u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u30bf\u30b9\u30af\u306f\u5b58\u5728\u3057\u307e\u305b\u3093.
|
||||
activiti.engine.update.task.unexisting.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af {0} \u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u30bf\u30b9\u30af\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
|
||||
activiti.engine.update.starttask.illegal.error=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af {0} \u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002activiti\u3067\u306f\u958b\u59cb\u30bf\u30b9\u30af\u3092\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3002
|
||||
activiti.engine.end.task.invalid.transition=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af {1} \u306e\u79fb\u884c {0} \u306f\u7121\u52b9\u3067\u3059\u3002\u79fb\u884c {2} \u306e\u307f\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059\u3002
|
||||
activiti.engine.end.task.unexisting.error=\u30bf\u30b9\u30af {0} \u306e\u79fb\u884c\u3092\u767a\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u30bf\u30b9\u30af\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002
|
||||
|
@@ -32,7 +32,7 @@ activiti.engine.get.timers.error=\u65e0\u6cd5\u68c0\u7d22\u5de5\u4f5c\u6d41\u7a0
|
||||
activiti.engine.find.completed.task.instances.error=\u68c0\u7d22\u64cd\u4f5c\u4eba\u5458 {0} \u7684\u5df2\u5b8c\u6210\u4efb\u52a1\u5b9e\u4f8b\u5217\u8868\u5931\u8d25\u3002
|
||||
activiti.engine.get.assigned.tasks.error=\u68c0\u7d22\u6307\u6d3e\u7ed9\u72b6\u6001\u4e3a {1} \u7684\u6388\u6743 {0} \u7684\u4efb\u52a1\u5931\u8d25\u3002
|
||||
activiti.engine.get.pooled.tasks.error=\u68c0\u7d22\u6388\u6743 {0} \u7684\u5165\u6c60\u4efb\u52a1\u5931\u8d25\u3002
|
||||
activiti.engine.query.tasks.error=\u67e5\u8be2\u4efb\u52a1\u5931\u8d25\u3002 \u67e5\u8be2\uff1a{0}.
|
||||
activiti.engine.query.tasks.error=\u67e5\u8be2\u4efb\u52a1\u5931\u8d25\u3002 \u67e5\u8be2\uff1a{0}\u3002
|
||||
activiti.engine.get.task.instance.error=\u4efb\u52a1\u5b9e\u4f8b {0} \u4e0d\u5b58\u5728\u3002
|
||||
activiti.engine.update.task.error=\u66f4\u65b0\u5de5\u4f5c\u6d41\u7a0b\u4efb\u52a1 {0} \u5931\u8d25\u3002
|
||||
activiti.engine.update.task.unexisting.error=\u66f4\u65b0\u5de5\u4f5c\u6d41\u7a0b\u4efb\u52a1 {0} \u5931\u8d25\uff0c\u6b64\u4efb\u52a1\u4e0d\u5b58\u5728\u3002
|
||||
@@ -51,4 +51,4 @@ activiti.engine.set.task.properties.invalid.value=\u503c {0} \u5bf9\u4efb\u52a1\
|
||||
activiti.engine.package.already.associated.error=\u65e0\u6cd5\u5c06\u5de5\u4f5c\u6d41\u7a0b\u5305 {0} \u4e0e\u5de5\u4f5c\u6d41\u7a0b\u5b9e\u4f8b {1} \u5173\u8054\uff0c\u56e0\u4e3a\u6b64\u5305\u5df2\u4e0e\u5de5\u4f5c\u6d41\u7a0b\u5b9e\u4f8b {2} \u5173\u8054\u3002
|
||||
activiti.engine.convert.value.error=\u65e0\u6cd5\u5c06\u503c {0} \u8f6c\u6362\u4e3a Alfresco Content Services \u503c\uff0c\u56e0\u4e3a\u6b64\u503c\u4e0d\u53ef\u4e13\u95e8\u5316\u3002
|
||||
activiti.engine.get.company.home.invalid=\u516c\u53f8\u4e3b\u8def\u5f84 {0} \u65e0\u6548\u3002
|
||||
activiti.engine.get.company.home.multiple=\u516c\u53f8\u4e3b\u8def\u5f84 {0} \u65e0\u6548\u3002 \u5e94\u8be5\u6709 1 \u4e2a\u5339\u914d\u9879\uff0c\u7ed3\u679c\u627e\u5230\u4e86 {1} \u4e2a\u5339\u914d\u9879.
|
||||
activiti.engine.get.company.home.multiple=\u516c\u53f8\u4e3b\u8def\u5f84 {0} \u65e0\u6548\u3002 \u5e94\u8be5\u6709 1 \u4e2a\u5339\u914d\u9879\uff0c\u7ed3\u679c\u627e\u5230\u4e86 {1} \u4e2a\u5339\u914d\u9879\u3002
|
||||
|
@@ -6,7 +6,7 @@ content.template.shows_a_simple_summary_page=\u73fe\u5728\u306e\u30e6\u30fc\u30b
|
||||
content.template.calculates_if_the_document_has=\u6587\u66f8\u304c\u7ffb\u8a33\u53ef\u80fd\u30a2\u30b9\u30da\u30af\u30c8\u3092\u9069\u7528\u3057\u305f\u5834\u5408\u306b\u8a08\u7b97\u3057\u307e\u3059
|
||||
content.template.displays_a_list_of_the_documents_in_the_current_space=\u904e\u53bb7\u65e5\u4ee5\u5185\u306b\u4f5c\u6210\u307e\u305f\u306f\u4fee\u6b63\u3055\u308c\u305f\u73fe\u5728\u306e\u30b9\u30da\u30fc\u30b9\u306b\u3042\u308b\u6587\u66f8\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059
|
||||
content.template.example_of_various_lists=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u95a2\u3059\u308b\u6587\u66f8\u3001\u30b9\u30da\u30fc\u30b9\u3001\u8981\u7d04\u60c5\u5831\u306e\u3055\u307e\u3056\u307e\u306a\u30ea\u30b9\u30c8\u306e\u30b5\u30f3\u30d7\u30eb
|
||||
content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306b\u6587\u66f8\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002 JPEG\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u5c0f\u3055\u306a\u30b5\u30e0\u30cd\u30a4\u30eb\u753b\u50cf\u306b\u306a\u308b\u305f\u3081\u3001\u30c6\u30ad\u30b9\u30c8\u6587\u66f8\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u30a4\u30f3\u30e9\u30a4\u30f3\u8868\u793a\u3055\u308c\u307e\u3059.
|
||||
content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306b\u6587\u66f8\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002 JPEG\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u5c0f\u3055\u306a\u30b5\u30e0\u30cd\u30a4\u30eb\u753b\u50cf\u306b\u306a\u308b\u305f\u3081\u3001\u30c6\u30ad\u30b9\u30c8\u6587\u66f8\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u30a4\u30f3\u30e9\u30a4\u30f3\u8868\u793a\u3055\u308c\u307e\u3059\u3002
|
||||
content.template.displays_the_audit_trail=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30aa\u30fc\u30c7\u30a3\u30c3\u30c8\u30c8\u30ec\u30fc\u30eb\u3092\u8868\u793a\u3057\u307e\u3059\u3002
|
||||
email.template.email_template_for_notifying_users=\u30eb\u30fc\u30eb\u307e\u305f\u306f\u51e6\u7406\u3092\u901a\u3058\u3066\u30e6\u30fc\u30b6\u30fc\u306b\u901a\u77e5\u3059\u308b\u305f\u3081\u306e E \u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8
|
||||
email.template.email_template_for_notifying_users_of_an_Invite=\u30b9\u30da\u30fc\u30b9\u307e\u305f\u306f\u6587\u66f8\u3078\u306e\u62db\u5f85\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u901a\u77e5\u3059\u308b\u305f\u3081\u306e E \u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8
|
||||
|
@@ -6,7 +6,7 @@ content.template.shows_a_simple_summary_page=\u663e\u793a\u6709\u5173\u5f53\u524
|
||||
content.template.calculates_if_the_document_has=\u8ba1\u7b97\u662f\u5426\u5df2\u4e3a\u6587\u6863\u5e94\u7528\u4e86\u53ef\u7ffb\u8bd1\u5207\u9762
|
||||
content.template.displays_a_list_of_the_documents_in_the_current_space=\u663e\u793a\u5f53\u524d\u7a7a\u95f4\u4e2d\u8fc7\u53bb 7 \u5929\u5185\u521b\u5efa\u6216\u4fee\u6539\u7684\u6587\u6863\u5217\u8868
|
||||
content.template.example_of_various_lists=\u6587\u6863\u3001\u7a7a\u95f4\u548c\u5f53\u524d\u7528\u6237\u76f8\u5173\u6458\u8981\u4fe1\u606f\u7684\u5404\u79cd\u5217\u8868\u793a\u4f8b
|
||||
content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=\u663e\u793a\u5f53\u524d\u7528\u6237\u4e3b\u7a7a\u95f4\u5185\u7684\u6587\u6863\u5217\u8868\u3002 \u6587\u672c\u6587\u6863\u7684\u5185\u5bb9\u76f4\u63a5\u663e\u793a\uff0c\u800c JPG \u5185\u5bb9\u5219\u663e\u793a\u4e3a\u5c0f\u578b\u7f29\u7565\u56fe.
|
||||
content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=\u663e\u793a\u5f53\u524d\u7528\u6237\u4e3b\u7a7a\u95f4\u5185\u7684\u6587\u6863\u5217\u8868\u3002 \u6587\u672c\u6587\u6863\u7684\u5185\u5bb9\u76f4\u63a5\u663e\u793a\uff0c\u800c JPG \u5185\u5bb9\u5219\u663e\u793a\u4e3a\u5c0f\u578b\u7f29\u7565\u56fe\u3002
|
||||
content.template.displays_the_audit_trail=\u663e\u793a\u67d0\u4e2a\u5bf9\u8c61\u7684\u5ba1\u6838\u8bb0\u5f55\u3002
|
||||
email.template.email_template_for_notifying_users=\u89c4\u5219\u6216\u64cd\u4f5c\u4e2d\u7528\u4e8e\u901a\u77e5\u7528\u6237\u7684\u7535\u5b50\u90ae\u4ef6\u6a21\u677f
|
||||
email.template.email_template_for_notifying_users_of_an_Invite=\u7528\u4e8e\u901a\u77e5\u7528\u6237\u83b7\u9080\u8bbf\u95ee\u67d0\u4e2a\u7a7a\u95f4\u6216\u6587\u6863\u7684\u7535\u5b50\u90ae\u4ef6\u6a21\u677f
|
||||
|
@@ -361,7 +361,7 @@ bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.guam.name
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.johnston_island.name=\u7ea6\u7ff0\u65af\u987f\u5c9b
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.kiribati.name=\u57fa\u91cc\u5df4\u65af
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.marshall_islands.name=\u9a6c\u7ecd\u5c14\u7fa4\u5c9b
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.nauru.name=\u7459\u9c81
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.nauru.name=\u7459\u9c81\u8bed
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.northern_mariana_islands.name=\u5317\u9a6c\u91cc\u4e9a\u7eb3\u7fa4\u5c9b
|
||||
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.palau.name=\u5e15\u52b3
|
||||
|
||||
|
@@ -282,8 +282,8 @@ cm_contentmodel.association.cm_attachments.description=\u9644\u52a0\u7684\u5b58\
|
||||
|
||||
cm_contentmodel.aspect.cm_emailed.title=\u7535\u5b50\u90ae\u4ef6\u65b9\u5f0f
|
||||
cm_contentmodel.aspect.cm_emailed.description=\u7535\u5b50\u90ae\u4ef6\u65b9\u5f0f
|
||||
cm_contentmodel.property.cm_originator.title=\u4ece
|
||||
cm_contentmodel.property.cm_originator.description=\u4ece
|
||||
cm_contentmodel.property.cm_originator.title=\u53d1\u4ef6\u4eba
|
||||
cm_contentmodel.property.cm_originator.description=\u53d1\u4ef6\u4eba
|
||||
cm_contentmodel.property.cm_addressee.title=\u6536\u4ef6\u4eba
|
||||
cm_contentmodel.property.cm_addressee.description=\u6536\u4ef6\u4eba
|
||||
cm_contentmodel.property.cm_addressees.title=\u6240\u6709\u6536\u4ef6\u4eba
|
||||
|
@@ -32,6 +32,6 @@ cmm.service.model_in_use=\u30e2\u30c7\u30eb ''{0}'' \u306f\u4f7f\u7528\u4e2d\u30
|
||||
# ValueDataTypeValidator messages
|
||||
cmm.value_datatype_validator.unknown_datatype=\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u30c7\u30fc\u30bf\u578b ''{0}'' \u304c\u4e0d\u660e\u3067\u3059\u3002
|
||||
cmm.value_datatype_validator.invalid_value=''{0}'' \u306f ''{1}'' \u306e\u6709\u52b9\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
cmm.value_datatype_validator.invalid_date=''{0}'' \u306f\u6709\u52b9\u306a\u65e5\u4ed8\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 yyyy-mm-dd \u5f62\u5f0f\u3092\u4f7f\u3063\u3066\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044.
|
||||
cmm.value_datatype_validator.invalid_date=''{0}'' \u306f\u6709\u52b9\u306a\u65e5\u4ed8\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 yyyy-mm-dd \u5f62\u5f0f\u3092\u4f7f\u3063\u3066\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
cmm.value_datatype_validator.invalid_datetime=''{0}'' \u306f\u6709\u52b9\u306a\u65e5\u6642\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 yyyy-mm-dd HH:mm:ss.sss \u5f62\u5f0f\u3092\u4f7f\u3063\u3066\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
cmm.value_datatype_validator.invalid_boolean_value=''{0}'' \u306f\u6709\u52b9\u306a\u5024\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u5024\u3092\u9078\u629e\u3059\u308b\u304b\u3001True \u307e\u305f\u306f False \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
|
@@ -3,8 +3,8 @@ cmm.service.name_already_in_use=\u6211\u4eec\u65e0\u6cd5\u521b\u5efa\u6a21\u578b
|
||||
cmm.service.create_model_err=\u6b64\u65f6\u6211\u4eec\u65e0\u6cd5\u521b\u5efa\u6a21\u578b\u3002\u8bf7\u5c1d\u8bd5\u4e0e\u60a8\u7684 IT \u56e2\u961f\u5206\u4eab\u4ee5\u4e0b\u8be6\u7ec6\u4fe1\u606f\u3002{0}
|
||||
cmm.service.update_model_err=\u6b64\u65f6\u6211\u4eec\u65e0\u6cd5\u66f4\u65b0\u6a21\u578b\u3002\u8bf7\u5c1d\u8bd5\u4e0e\u60a8\u7684 IT \u56e2\u961f\u5206\u4eab\u4ee5\u4e0b\u8be6\u7ec6\u4fe1\u606f\u3002{0}
|
||||
cmm.service.multiple_models=\u5df2\u627e\u5230\u591a\u4e2a\u540d\u79f0\u4e3a ''{0}'' \u7684\u6a21\u578b\u3002 \u8bf7\u5c1d\u8bd5\u53d6\u6d88\u6fc0\u6d3b\u5176\u4e2d\u4e00\u4e2a\u6a21\u578b\uff0c\u7136\u540e\u5c06\u5176\u5220\u9664\u3002
|
||||
cmm.service.retrieve_model=\u6211\u4eec\u65e0\u6cd5\u8bbf\u95ee\u6a21\u578b ''{0}''\u3002 \u8bf7\u91cd\u8bd5.
|
||||
cmm.service.model_not_exists=\u6a21\u578b ''{0}'' \u4e0d\u5b58\u5728\u3002 \u5176\u4ed6\u7528\u6237\u53ef\u80fd\u5df2\u5c06\u5176\u53d6\u6d88\u6fc0\u6d3b.
|
||||
cmm.service.retrieve_model=\u6211\u4eec\u65e0\u6cd5\u8bbf\u95ee\u6a21\u578b ''{0}''\u3002 \u8bf7\u91cd\u8bd5\u3002
|
||||
cmm.service.model_not_exists=\u6a21\u578b ''{0}'' \u4e0d\u5b58\u5728\u3002 \u5176\u4ed6\u7528\u6237\u53ef\u80fd\u5df2\u5c06\u5176\u53d6\u6d88\u6fc0\u6d3b\u3002
|
||||
cmm.service.namespace_not_exists=\u6a21\u578b ''{0}'' \u6ca1\u6709\u5b9a\u4e49\u7684\u547d\u540d\u7a7a\u95f4\u3002 \u60a8\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u4ee5\u4f7f\u6a21\u578b\u751f\u6548\u3002
|
||||
cmm.service.namespace_many_exist=\u6a21\u578b ''{0}'' \u53ea\u80fd\u5177\u6709\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u3002
|
||||
cmm.service.namespace_uri_already_in_use=\u547d\u540d\u7a7a\u95f4 URI ''{0}'' \u5df2\u5728\u4f7f\u7528\u3002 \u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u547d\u540d\u7a7a\u95f4 URI\u3002
|
||||
@@ -33,5 +33,5 @@ cmm.service.model_in_use=\u6a21\u578b ''{0}'' \u6b63\u5728\u4f7f\u7528\u4e2d\uff
|
||||
cmm.value_datatype_validator.unknown_datatype=\u5c5e\u6027\u6570\u636e\u7c7b\u578b ''{0}'' \u672a\u77e5\u3002
|
||||
cmm.value_datatype_validator.invalid_value=''{0}'' \u4e0d\u662f ''{1}'' \u7684\u6709\u6548\u9009\u9879\u3002 \u8bf7\u91cd\u8bd5\u3002
|
||||
cmm.value_datatype_validator.invalid_date=''{0}'' \u4e0d\u662f\u6709\u6548\u7684\u65e5\u671f\u683c\u5f0f\u3002 \u8bf7\u91cd\u65b0\u5c1d\u8bd5\u4f7f\u7528\u683c\u5f0f \u5e74-\u6708-\u65e5\u3002
|
||||
cmm.value_datatype_validator.invalid_datetime=''{0}'' \u4e0d\u662f\u6709\u6548\u7684\u65e5\u671f\u65f6\u95f4\u683c\u5f0f\u3002 \u8bf7\u91cd\u65b0\u5c1d\u8bd5\u4f7f\u7528\u683c\u5f0f \u5e74-\u6708-\u65e5 HH:mm:ss.sss\u3002
|
||||
cmm.value_datatype_validator.invalid_datetime=''{0}'' \u4e0d\u662f\u6709\u6548\u7684\u65e5\u671f\u65f6\u95f4\u683c\u5f0f\u3002 \u8bf7\u91cd\u65b0\u5c1d\u8bd5\u4f7f\u7528\u683c\u5f0f \u5e74-\u6708-\u65e5 HH:mm:ss.sss.
|
||||
cmm.value_datatype_validator.invalid_boolean_value=''{0}'' \u4e0d\u662f\u6709\u6548\u503c\u3002 \u8fdb\u884c\u9009\u62e9\u6216\u8f93\u5165\u6b63\u786e\u6216\u9519\u8bef\u3002
|
||||
|
@@ -19,4 +19,4 @@ repoadmin_service.msg_resource_undeployment_failed=\u6d88\u606f\u8d44\u6e90\u7ec
|
||||
repoadmin_service.msg_resource_reload_failed=\u6d88\u606f\u8d44\u6e90\u91cd\u65b0\u52a0\u8f7d\u5931\u8d25
|
||||
repoadmin_service.msg_missing_bundle_base_name=\u6d88\u606f\u90e8\u7f72\u5931\u8d25\u3002 \u7f3a\u5c11\u7ec4\u57fa\u51c6\u540d\u79f0
|
||||
repoadmin_service.msg_base_name_contain_underscore=\u6d88\u606f\u90e8\u7f72\u5931\u8d25\u3002 \u7ec4\u57fa\u51c6\u540d\u79f0 ''{0}'' \u4e0d\u5e94\u5305\u542b ''_'' (\u4e0b\u5212\u7ebf)
|
||||
repoadmin_service.msg_base_name_contain_period=\u6d88\u606f\u90e8\u7f72\u5931\u8d25\u3002 \u7ec4\u57fa\u51c6\u540d\u79f0 ''{0}'' \u4e0d\u5e94\u5305\u542b ''.'' (\u53e5\u53f7)
|
||||
repoadmin_service.msg_base_name_contain_period=\u6d88\u606f\u90e8\u7f72\u5931\u8d25\u3002 \u7ec4\u57fa\u51c6\u540d\u79f0 ''{0}'' \u4e0d\u5e94\u5305\u542b ''\u3002'' (\u53e5\u53f7)
|
||||
|
@@ -113,5 +113,5 @@ system.license.err.reloadFailed=\u30e9\u30a4\u30bb\u30f3\u30b9 {0} \u3092\u518d\
|
||||
# Startup message
|
||||
system.info.startup=Alfresco Content Services \u304c\u8d77\u52d5\u3057\u307e\u3057\u305f ({0}{1}{2})\u3002\u73fe\u5728\u306e\u30d0\u30fc\u30b8\u30e7\u30f3: {3} \u30b9\u30ad\u30fc\u30de {4}\u3002\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5143\u306e\u30d0\u30fc\u30b8\u30e7\u30f3: {5} \u30b9\u30ad\u30fc\u30de {6}\u3002
|
||||
system.warn.readonly=Alfresco Content Services \u306f\u73fe\u5728\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30e2\u30fc\u30c9\u3067\u3059\u3002\u30e9\u30a4\u30bb\u30f3\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
|
||||
system.info.limited_trial=\u30e1\u30e2: \u3053\u308c\u306f Alfresco Content Services \u306e Enterprise \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4f53\u9a13\u7248\u3067\u3042\u308b\u305f\u3081\u3001\u4f7f\u7528\u671f\u9593\u304c\u9650\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u3042\u3068 2 \u65e5\u3067\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30e2\u30fc\u30c9\u306b\u306a\u308a\u307e\u3059\u3002\u4f53\u9a13\u7248\u306e\u4f7f\u7528\u671f\u9593\u3092\u3055\u3089\u306b30\u65e5\u9593\u5ef6\u9577\u3059\u308b\u5834\u5408\u306f\u3001https://www.alfresco.com/platform/content-services-ecm/trial/docker \u304b\u3089\u304a\u7533\u3057\u8fbc\u307f\u304f\u3060\u3055\u3044\u3002
|
||||
system.info.limited_trial=\u30e1\u30e2: \u3053\u308c\u306f Alfresco Content Services \u306e Enterprise \u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4f53\u9a13\u7248\u3067\u3042\u308b\u305f\u3081\u3001\u4f7f\u7528\u671f\u9593\u304c\u9650\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u3042\u3068 2 \u65e5\u3067\u8aad\u307f\u53d6\u308a\u5c02\u7528\u30e2\u30fc\u30c9\u306b\u306a\u308a\u307e\u3059\u3002\u4f53\u9a13\u7248\u306e\u4f7f\u7528\u671f\u9593\u3092\u3055\u3089\u306b30\u65e5\u9593\u5ef6\u9577\u3059\u308b\u5834\u5408\u306f\u3001https://www.alfresco.com/platform/content-services-ecm/trial/docker \u304b\u3089\u304a\u7533\u3057\u8fbc\u307f\u304f\u3060\u3055\u3044
|
||||
# END TRANSLATION
|
||||
|
@@ -21,7 +21,7 @@ transfer_service.receiver.content_file_missing=\u65e0\u6cd5\u4f20\u8f93\uff0c\u5
|
||||
transfer_service.receiver.failed_to_create_staging_folder=\u65e0\u6cd5\u4e3a\u4f20\u8f93 {0} \u521b\u5efa\u9884\u53d1\u5e03\u76ee\u5f55
|
||||
transfer_service.receiver.lock_folder_not_found=\u65e0\u6cd5\u627e\u5230\u6307\u5b9a\u7684\u9501\u5b9a\u6587\u4ef6\u5939\uff1a{0}
|
||||
transfer_service.receiver.temp_folder_not_found=\u65e0\u6cd5\u627e\u5230\u4f20\u8f93 {0} \u7684\u6307\u5b9a\u4e34\u65f6\u6587\u4ef6\u5939\uff1a{1}
|
||||
transfer_service.receiver.lock_unavailable=\u5df2\u7ecf\u4e3a\u53e6\u4e00\u4e2a\u5165\u7ad9\u4f20\u8f93\u8981\u6c42\u4e86\u4f20\u8f93\u9501\u5b9a\u3002 \u65e0\u6cd5\u542f\u52a8\u65b0\u4f20\u8f93.
|
||||
transfer_service.receiver.lock_unavailable=\u5df2\u7ecf\u4e3a\u53e6\u4e00\u4e2a\u5165\u7ad9\u4f20\u8f93\u8981\u6c42\u4e86\u4f20\u8f93\u9501\u5b9a\u3002 \u65e0\u6cd5\u542f\u52a8\u65b0\u4f20\u8f93\u3002
|
||||
transfer_service.receiver.record_folder_not_found=\u65e0\u6cd5\u627e\u5230\u6307\u5b9a\u7528\u4e8e\u5b58\u50a8\u5165\u7ad9\u4f20\u8f93\u8bb0\u5f55\u7684\u6587\u4ef6\u5939\uff1a{0}
|
||||
transfer_service.receiver.not_lock_owner=\u5c1d\u8bd5\u6267\u884c\u4f20\u8f93\u64cd\u4f5c\u5931\u8d25\u3002 \u6307\u5b9a\u4f20\u8f93\u672a\u4fdd\u6301\u9501\u5b9a\uff1a{0}
|
||||
transfer_service.receiver.error_ending_transfer=\u8bf7\u6c42\u7ed3\u675f\u4f20\u8f93 ({0}) \u5bfc\u81f4\u4e86\u9519\u8bef\u3002
|
||||
|
@@ -675,7 +675,7 @@ deployment.service.targetLockRefreshTime=60000
|
||||
# How long to wait in mS from the last communication before deciding that deployment has failed, possibly
|
||||
# the destination is no longer available?
|
||||
deployment.service.targetLockTimeout=3600000
|
||||
# Deployment method used to deploy this Alfresco instance (DEFAULT, INSTALLER, DOCKER_COMPOSE, HELM_CHART, ZIP, QUICK_START)
|
||||
# Deployment method used to deploy this Alfresco instance (DEFAULT, INSTALLER, DOCKER_COMPOSE, HELM_CHART, ANSIBLE, ZIP, QUICK_START)
|
||||
deployment.method=DEFAULT
|
||||
|
||||
#Invitation Service
|
||||
|
@@ -30,6 +30,7 @@ import org.alfresco.repo.action.ActionImpl;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
import org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter;
|
||||
import org.alfresco.repo.content.metadata.AsynchronousExtractor;
|
||||
import org.alfresco.repo.content.metadata.MetadataExtracter.OverwritePolicy;
|
||||
import org.alfresco.repo.content.metadata.MetadataExtracterRegistry;
|
||||
import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
|
||||
import org.alfresco.repo.content.transform.TransformerDebug;
|
||||
@@ -37,7 +38,9 @@ import org.alfresco.repo.content.transform.UnsupportedTransformationException;
|
||||
import org.alfresco.repo.rendition2.RenditionDefinition2;
|
||||
import org.alfresco.repo.rendition2.RenditionService2Impl;
|
||||
import org.alfresco.repo.rendition2.TransformClient;
|
||||
import org.alfresco.repo.search.impl.noindex.NoIndexCategoryServiceImpl;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
||||
import org.alfresco.repo.tagging.TaggingServiceImpl;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.repository.ContentIOException;
|
||||
@@ -48,8 +51,9 @@ import org.alfresco.service.cmr.repository.MimetypeService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.tagging.TaggingService;
|
||||
import org.alfresco.service.cmr.search.CategoryService;
|
||||
import org.alfresco.service.namespace.NamespacePrefixResolver;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
||||
@@ -67,15 +71,20 @@ import javax.transaction.NotSupportedException;
|
||||
import javax.transaction.RollbackException;
|
||||
import javax.transaction.SystemException;
|
||||
import javax.transaction.UserTransaction;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Serializable;
|
||||
import java.net.URL;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
@@ -108,6 +117,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
private static final ExecutorService executorService = Executors.newCachedThreadPool();
|
||||
|
||||
private NodeService nodeService;
|
||||
private NodeService publicNodeService;
|
||||
private ContentService contentService;
|
||||
private DictionaryService dictionaryService;
|
||||
private MimetypeService mimetypeService;
|
||||
@@ -120,11 +130,13 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
private TransformerDebug transformerDebug;
|
||||
private TransactionService transactionService;
|
||||
private TransformServiceRegistry transformServiceRegistry;
|
||||
private TaggingService taggingService;
|
||||
private TaggingServiceImpl taggingService;
|
||||
private ContentMetadataExtracter contentMetadataExtracter;
|
||||
private ContentMetadataEmbedder contentMetadataEmbedder;
|
||||
private RenditionService2Impl renditionService2;
|
||||
private TransformClient transformClient;
|
||||
private CategoryService categoryService;
|
||||
private MockCategoryService mockCategoryService;
|
||||
|
||||
private long origSize;
|
||||
private Map<QName, Serializable> origProperties;
|
||||
@@ -162,7 +174,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
* @param changedHashcode if specified indicates that the source node content changed or was deleted between
|
||||
* the request to extract or embed and the response.
|
||||
*/
|
||||
TestAsynchronousExtractor(String mockResult, Integer changedHashcode)
|
||||
TestAsynchronousExtractor(String mockResult, Integer changedHashcode, OverwritePolicy policy)
|
||||
{
|
||||
this.mockResult = mockResult;
|
||||
this.changedHashcode = changedHashcode;
|
||||
@@ -174,14 +186,17 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
setContentService(contentService);
|
||||
setTransactionService(transactionService);
|
||||
setTransformServiceRegistry(transformServiceRegistry);
|
||||
setEnableStringTagging(true);
|
||||
setTaggingService(taggingService);
|
||||
setRegistry(metadataExtracterRegistry);
|
||||
setMimetypeService(mimetypeService);
|
||||
setDictionaryService(dictionaryService);
|
||||
setDictionaryService(AsynchronousExtractorTest.this.dictionaryService);
|
||||
setExecutorService(executorService);
|
||||
setOverwritePolicy(policy);
|
||||
register();
|
||||
|
||||
renditionService2.setTransformClient(mockTransformClient);
|
||||
renditionService2.setAsynchronousExtractor(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -261,10 +276,52 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock CategoryService that only knows about taggable. Unlike the real implementation it does not call Solr to
|
||||
* find tag nodes.
|
||||
*/
|
||||
private class MockCategoryService extends NoIndexCategoryServiceImpl
|
||||
{
|
||||
private NodeRef taggableCat;
|
||||
|
||||
MockCategoryService(NodeService nodeService, NodeService publicNodeService)
|
||||
{
|
||||
setNodeService(nodeService);
|
||||
setPublicNodeService(publicNodeService);
|
||||
|
||||
// Create the required tagging category
|
||||
NodeRef catContainer = nodeService.createNode(rootNodeRef,
|
||||
ContentModel.ASSOC_CHILDREN, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,
|
||||
"categoryContainer"), ContentModel.TYPE_CONTAINER).getChildRef();
|
||||
NodeRef catRoot = nodeService.createNode(
|
||||
catContainer,
|
||||
ContentModel.ASSOC_CHILDREN,
|
||||
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "categoryRoot"),
|
||||
ContentModel.TYPE_CATEGORYROOT).getChildRef();
|
||||
taggableCat = nodeService.createNode(
|
||||
catRoot,
|
||||
ContentModel.ASSOC_CATEGORIES,
|
||||
ContentModel.ASPECT_TAGGABLE,
|
||||
ContentModel.TYPE_CATEGORY).getChildRef();
|
||||
}
|
||||
|
||||
public void setTaggableCat(NodeRef taggableCat)
|
||||
{
|
||||
this.taggableCat = taggableCat;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<NodeRef> getClassificationNodes(StoreRef storeRef, QName qname)
|
||||
{
|
||||
return Collections.singleton(taggableCat);
|
||||
}
|
||||
}
|
||||
|
||||
@Before
|
||||
public void before() throws Exception
|
||||
{
|
||||
nodeService = (NodeService) applicationContext.getBean("nodeService");
|
||||
publicNodeService = (NodeService) applicationContext.getBean("NodeService");
|
||||
contentService = (ContentService) applicationContext.getBean("contentService");
|
||||
dictionaryService = (DictionaryService) applicationContext.getBean("dictionaryService");
|
||||
mimetypeService = (MimetypeService) applicationContext.getBean("mimetypeService");
|
||||
@@ -273,8 +330,10 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
renditionService2 = (RenditionService2Impl) applicationContext.getBean("renditionService2");
|
||||
transactionService = (TransactionService) applicationContext.getBean("transactionService");
|
||||
transformServiceRegistry = (TransformServiceRegistry) applicationContext.getBean("transformServiceRegistry");
|
||||
taggingService = (TaggingService) applicationContext.getBean("taggingService");
|
||||
taggingService = (TaggingServiceImpl) applicationContext.getBean("taggingService");
|
||||
transformClient = (TransformClient) applicationContext.getBean("transformClient");
|
||||
asynchronousExtractor = (AsynchronousExtractor) applicationContext.getBean("extractor.Asynchronous");
|
||||
categoryService = (CategoryService) applicationContext.getBean("CategoryService");
|
||||
|
||||
// Create an empty metadata extractor registry, so that if we add one it will be used
|
||||
metadataExtracterRegistry = new MetadataExtracterRegistry();
|
||||
@@ -284,8 +343,10 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
contentMetadataExtracter.setContentService(contentService);
|
||||
contentMetadataExtracter.setDictionaryService(dictionaryService);
|
||||
contentMetadataExtracter.setMetadataExtracterRegistry(metadataExtracterRegistry);
|
||||
contentMetadataExtracter.setTaggingService(taggingService);
|
||||
contentMetadataExtracter.setApplicableTypes(new String[]{ContentModel.TYPE_CONTENT.toString()});
|
||||
contentMetadataExtracter.setCarryAspectProperties(true);
|
||||
contentMetadataExtracter.setEnableStringTagging(true);
|
||||
|
||||
contentMetadataEmbedder = new ContentMetadataEmbedder();
|
||||
contentMetadataEmbedder.setNodeService(nodeService);
|
||||
@@ -327,6 +388,9 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
|
||||
origSize = getSize(nodeRef);
|
||||
|
||||
mockCategoryService = new MockCategoryService(nodeService, publicNodeService);
|
||||
taggingService.setCategoryService(mockCategoryService);
|
||||
|
||||
return null;
|
||||
}
|
||||
});
|
||||
@@ -336,15 +400,18 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
public void after() throws Exception
|
||||
{
|
||||
renditionService2.setTransformClient(transformClient);
|
||||
renditionService2.setAsynchronousExtractor(asynchronousExtractor);
|
||||
taggingService.setCategoryService(categoryService);
|
||||
}
|
||||
|
||||
private void assertAsyncMetadataExecute(ActionExecuterAbstractBase executor, String mockResult,
|
||||
Integer changedHashcode, long expectedSize,
|
||||
Map<QName, Serializable> expectedProperties,
|
||||
OverwritePolicy policy,
|
||||
QName... ignoreProperties) throws Exception
|
||||
{
|
||||
TestAsynchronousExtractor extractor = new TestAsynchronousExtractor(mockResult, changedHashcode);
|
||||
|
||||
TestAsynchronousExtractor extractor = new TestAsynchronousExtractor(mockResult, changedHashcode, policy);
|
||||
extractor.setEnableStringTagging(true);
|
||||
executeAction(executor, extractor);
|
||||
assertContentSize(nodeRef, origSize, AFTER_CALLING_EXECUTE);
|
||||
assertProperties(nodeRef, origProperties, AFTER_CALLING_EXECUTE, ignoreProperties);
|
||||
@@ -433,35 +500,35 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
expectedProperties.put(QName.createQName("cm:title", namespacePrefixResolver), "The quick brown fox jumps over the lazy dog");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties);
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtractNodeDeleted() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json",
|
||||
SOURCE_HAS_NO_CONTENT, origSize, origProperties);
|
||||
SOURCE_HAS_NO_CONTENT, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtractContentChanged() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json",
|
||||
1234, origSize, origProperties);
|
||||
CHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtractTransformFailure() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, null,
|
||||
UNCHANGED_HASHCODE, origSize, origProperties);
|
||||
UNCHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtractTransformCorrupt() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick.html", // not json
|
||||
UNCHANGED_HASHCODE, origSize, origProperties);
|
||||
UNCHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -471,7 +538,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
// "{http://www.unknown}name": "ignored" - is reported in an ERROR log
|
||||
expectedProperties.put(QName.createQName("cm:author", namespacePrefixResolver), "Used");
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/unknown_namespace_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties);
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -488,7 +555,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
expectedProperties.put(QName.createQName("cm:originator", namespacePrefixResolver), "Mark Rogers");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.msg_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties);
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
|
||||
Serializable sentDate = properties.get(QName.createQName("cm:sentdate", namespacePrefixResolver));
|
||||
}
|
||||
@@ -514,7 +581,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
// Note: As the metadata is for eml, an aspect gets added resulting in a second extract because of
|
||||
// ImapContentPolicy.onAddAspect. I cannot see a good way to avoid this.
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.eml_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties,
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC,
|
||||
// cm:author is not in the quick.eml_metadata.json but is being added by the second extract which thinks
|
||||
// the source mimetype is MimetypeMap.MIMETYPE_PDF, because that is what the before() method sets the
|
||||
// content to. As a result the PdfBox metadata extractor is called, which extracts cm:author. Given that
|
||||
@@ -523,37 +590,253 @@ public class AsynchronousExtractorTest extends BaseSpringTest
|
||||
QName.createQName("cm:author", namespacePrefixResolver));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEmbed() throws Exception
|
||||
{
|
||||
URL resource = getClass().getClassLoader().getResource("quick/quick.html");
|
||||
assertNotNull("File not found", resource);
|
||||
|
||||
File file = new File(resource.toURI());
|
||||
long fileSize = file.length();
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html", // just replace the pdf with html!
|
||||
UNCHANGED_HASHCODE, 428, expectedProperties);
|
||||
UNCHANGED_HASHCODE, fileSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmbedNodeDeleted() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html",
|
||||
SOURCE_HAS_NO_CONTENT, origSize, origProperties);
|
||||
SOURCE_HAS_NO_CONTENT, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmbedContentChanged() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html",
|
||||
1234, origSize, origProperties);
|
||||
CHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmbedTransformFailure() throws Exception
|
||||
{
|
||||
assertAsyncMetadataExecute(contentMetadataEmbedder, null,
|
||||
UNCHANGED_HASHCODE, origSize, origProperties);
|
||||
UNCHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
// TODO Write tests for: overwritePolicy, enableStringTagging and carryAspectProperties.
|
||||
// Values are set in AsynchronousExtractor.setMetadata(...) but make use of original code within
|
||||
// MetadataExtracter and AbstractMappingMetadataExtracter.
|
||||
// As the tests for exiting extractors are to be removed in ACS 7.0, it is possible that they were being used
|
||||
// to test these values.
|
||||
@Test
|
||||
public void testOverwritePolicyEager() throws Exception
|
||||
{
|
||||
QName author = QName.createQName("cm:author", namespacePrefixResolver);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
properties.put(author, "Original author");
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
origProperties.put(author, "Original author");
|
||||
|
||||
expectedProperties.put(author, "Nevin Nollop");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.eager_policy_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.EAGER);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOverwritePolicyCautious() throws Exception
|
||||
{
|
||||
QName author = QName.createQName("cm:author", namespacePrefixResolver);
|
||||
QName title = QName.createQName("cm:title", namespacePrefixResolver);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
properties.put(author, "Original author");
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
origProperties.put(author, "Original author");
|
||||
|
||||
expectedProperties.put(author, "Original author");
|
||||
expectedProperties.put(title, "The quick brown fox jumps over the lazy dog");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.cautious_policy_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.CAUTIOUS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOverwritePolicyPrudent() throws Exception
|
||||
{
|
||||
QName author = QName.createQName("cm:author", namespacePrefixResolver);
|
||||
QName title = QName.createQName("cm:title", namespacePrefixResolver);
|
||||
QName description = QName.createQName("cm:description", namespacePrefixResolver);
|
||||
QName audio = QName.createQName("audio:audio", namespacePrefixResolver);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
properties.put(author, "Original author");
|
||||
properties.put(title, ""); // will be changed
|
||||
properties.put(audio, "Default audio"); // will not be changed because it's a media property
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
origProperties.put(author, "Original author");
|
||||
origProperties.put(title, "");
|
||||
origProperties.put(audio, "Default audio");
|
||||
|
||||
expectedProperties.put(author, "Original author");
|
||||
expectedProperties.put(title, "The quick brown fox jumps over the lazy dog");
|
||||
expectedProperties.put(description, "Gym class featuring a brown fox and lazy dog");
|
||||
expectedProperties.put(audio, "Default audio");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.prudent_policy_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRUDENT);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOverwritePolicyPragmatic() throws Exception
|
||||
{
|
||||
QName author = QName.createQName("cm:author", namespacePrefixResolver);
|
||||
QName title = QName.createQName("cm:title", namespacePrefixResolver);
|
||||
QName description = QName.createQName("cm:description", namespacePrefixResolver);
|
||||
QName audio = QName.createQName("audio:audio", namespacePrefixResolver);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
properties.put(author, "Original author");
|
||||
properties.put(title, ""); // will be changed
|
||||
properties.put(audio, "Default audio"); // will be changed using PRAGMATIC policy
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
origProperties.put(author, "Original author");
|
||||
origProperties.put(title, "");
|
||||
origProperties.put(audio, "Default audio");
|
||||
|
||||
expectedProperties.put(author, "Original author");
|
||||
expectedProperties.put(title, "The quick brown fox jumps over the lazy dog");
|
||||
expectedProperties.put(description, "Gym class featuring a brown fox and lazy dog");
|
||||
expectedProperties.put(audio, "New audio");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.pragmatic_policy_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCarryAspectFalse() throws Exception
|
||||
{
|
||||
QName title = QName.createQName("cm:title", namespacePrefixResolver);
|
||||
QName author = QName.createQName("cm:author", namespacePrefixResolver);
|
||||
QName description = QName.createQName("cm:description", namespacePrefixResolver);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
properties.put(title, "Default title");
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
return null;
|
||||
});
|
||||
|
||||
origProperties.put(title, "Default title");
|
||||
|
||||
expectedProperties.put(author, "Nevin Nollop");
|
||||
expectedProperties.put(description, "Gym class featuring a brown fox and lazy dog");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.carryAspectFalse_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
assertFalse("Title should be removed from properties because the extracted value is null",
|
||||
properties.containsKey(title));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCarryAspectTrue() throws Exception
|
||||
{
|
||||
QName title = QName.createQName("cm:title", namespacePrefixResolver);
|
||||
QName author = QName.createQName("cm:author", namespacePrefixResolver);
|
||||
QName description = QName.createQName("cm:description", namespacePrefixResolver);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
properties.put(title, "Default title");
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
return null;
|
||||
});
|
||||
|
||||
origProperties.put(title, "Default title");
|
||||
|
||||
expectedProperties.put(author, "Nevin Nollop");
|
||||
expectedProperties.put(title, "Default title");
|
||||
expectedProperties.put(description, "Gym class featuring a brown fox and lazy dog");
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.carryAspectTrue_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
assertTrue("Title should NOT be removed from properties because carryAspectProperties is true",
|
||||
properties.containsKey(title));
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtractTagging() throws Exception
|
||||
{
|
||||
QName taggable = QName.createQName("cm:taggable", namespacePrefixResolver);
|
||||
|
||||
contentMetadataExtracter.setEnableStringTagging(true);
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
assertFalse(properties.containsKey(ContentModel.PROP_TAGS));
|
||||
return null;});
|
||||
|
||||
List<String> expectedTags = Arrays.asList("tag1", "tag2", "tag3");
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.tagging_metadata.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC, taggable);
|
||||
|
||||
List<String> actualTags = transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
assertTrue(properties.containsKey(ContentModel.PROP_TAGS));
|
||||
return taggingService.getTags(nodeRef);
|
||||
});
|
||||
|
||||
for (String expectedTag : expectedTags)
|
||||
{
|
||||
assertTrue("Expected tag " + expectedTag + " not in " + actualTags, actualTags.contains(expectedTag));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExtractTaggingWhenDisabled() throws Exception
|
||||
{
|
||||
contentMetadataExtracter.setEnableStringTagging(false);
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
assertFalse(properties.containsKey(ContentModel.PROP_TAGS));
|
||||
return null;
|
||||
});
|
||||
|
||||
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.tagging_metadata_enable_false.json",
|
||||
UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
|
||||
|
||||
List<String> tags = transactionService.getRetryingTransactionHelper().doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = nodeService.getProperties(nodeRef);
|
||||
assertFalse(properties.containsKey(ContentModel.PROP_TAGS));
|
||||
return taggingService.getTags(nodeRef);
|
||||
});
|
||||
|
||||
assertEquals("Unexpected tags", 0, tags.size());
|
||||
}
|
||||
}
|
@@ -30,6 +30,7 @@ import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -978,4 +979,32 @@ public class UpdateRepoEventIT extends AbstractContextAwareRepoEvent
|
||||
assertEquals(1, aspectsBefore.size());
|
||||
assertTrue(aspectsBefore.contains("cm:auditable"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAddAndRemovePropertyInTheSameTransaction()
|
||||
{
|
||||
final NodeRef nodeRef = createNode(ContentModel.TYPE_CONTENT);
|
||||
|
||||
checkNumOfEvents(1);
|
||||
|
||||
NodeResource resource = getNodeResource(1);
|
||||
// Check properties
|
||||
assertTrue(resource.getProperties().isEmpty());
|
||||
|
||||
// Add and remove cm:userName property
|
||||
retryingTransactionHelper.doInTransaction(() -> {
|
||||
Map<QName, Serializable> properties = Map.of(ContentModel.PROP_USERNAME, "user1");
|
||||
nodeService.addProperties(nodeRef, properties);
|
||||
nodeService.removeProperty(nodeRef, ContentModel.PROP_USERNAME);
|
||||
return null;
|
||||
});
|
||||
|
||||
// There should only be a create event
|
||||
resource = getNodeResource(1);
|
||||
assertTrue(resource.getProperties().isEmpty());
|
||||
|
||||
// Check there isn't a node update event
|
||||
List<RepoEvent<EventData<NodeResource>>> nodeUpdatedEvents = getFilteredEvents(EventType.NODE_UPDATED);
|
||||
assertEquals(0, nodeUpdatedEvents.size());
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop",
|
||||
"{http://www.alfresco.org/model/content/1.0}description": "Gym class featuring a brown fox and lazy dog",
|
||||
"{http://www.alfresco.org/model/content/1.0}title": null,
|
||||
"sys:carryAspectProperties": "false"
|
||||
}
|
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop",
|
||||
"{http://www.alfresco.org/model/content/1.0}description": "Gym class featuring a brown fox and lazy dog",
|
||||
"{http://www.alfresco.org/model/content/1.0}title": null,
|
||||
"sys:carryAspectProperties": "true"
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"sys:overwritePolicy": "CAUTIOUS",
|
||||
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop",
|
||||
"{http://www.alfresco.org/model/content/1.0}title": "The quick brown fox jumps over the lazy dog"
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"sys:overwritePolicy": "EAGER",
|
||||
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop"
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"sys:overwritePolicy": "PRAGMATIC",
|
||||
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop",
|
||||
"{http://www.alfresco.org/model/content/1.0}title": "The quick brown fox jumps over the lazy dog",
|
||||
"{http://www.alfresco.org/model/content/1.0}description": "Gym class featuring a brown fox and lazy dog",
|
||||
"{http://www.alfresco.org/model/audio/1.0}audio": "New audio"
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"sys:overwritePolicy": "PRUDENT",
|
||||
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop",
|
||||
"{http://www.alfresco.org/model/content/1.0}title": "The quick brown fox jumps over the lazy dog",
|
||||
"{http://www.alfresco.org/model/content/1.0}description": "Gym class featuring a brown fox and lazy dog",
|
||||
"{http://www.alfresco.org/model/audio/1.0}audio": "New audio"
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"sys:enableStringTagging": "true",
|
||||
"sys:stringTaggingSeparators": ";,\",\",\\|",
|
||||
"{http://www.alfresco.org/model/content/1.0}taggable": "tag1;tag2;tag3"
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"sys:enableStringTagging": "false",
|
||||
"sys:stringTaggingSeparators": ";,\",\",\\|",
|
||||
"{http://www.alfresco.org/model/content/1.0}taggable": "tag1;tag2;tag3"
|
||||
}
|
Reference in New Issue
Block a user