Merge branch 'master' into dev-dhrn-ACS-777

This commit is contained in:
dhrn
2020-11-12 11:28:51 +05:30
committed by GitHub
52 changed files with 572 additions and 109 deletions

3
.gitignore vendored
View File

@@ -35,3 +35,6 @@ target
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid* hs_err_pid*
# Alfresco runtime
alf_data

View File

@@ -128,7 +128,7 @@ cd acs-community-packaging
mvn clean install -PcommunityDocker -Dmaven.javadoc.skip=true mvn clean install -PcommunityDocker -Dmaven.javadoc.skip=true
cd .. 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 * File > New Project from Existing Sources > .../work > Maven
## Docker ## Docker

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<dependencies> <dependencies>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<properties> <properties>
@@ -188,7 +188,12 @@
<groupId>org.codehaus.woodstox</groupId> <groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId> <artifactId>woodstox-core-asl</artifactId>
</exclusion> </exclusion>
</exclusions> <!-- [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>
<dependency> <dependency>
<groupId>org.apache.chemistry.opencmis</groupId> <groupId>org.apache.chemistry.opencmis</groupId>

View File

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

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId> <artifactId>alfresco-community-repo-packaging</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<properties> <properties>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<profiles> <profiles>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId> <artifactId>alfresco-community-repo-packaging</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<properties> <properties>
@@ -60,7 +60,7 @@
<dependency> <dependency>
<groupId>org.glassfish.jaxb</groupId> <groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId> <artifactId>jaxb-runtime</artifactId>
<version>2.3.2</version> <version>2.3.3</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>javax.xml.soap</groupId> <groupId>javax.xml.soap</groupId>

27
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"> <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> <modelVersion>4.0.0</modelVersion>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Alfresco Community Repo Parent</name> <name>Alfresco Community Repo Parent</name>
@@ -53,13 +53,13 @@
<dependency.activiti.version>5.23.0</dependency.activiti.version> <dependency.activiti.version>5.23.0</dependency.activiti.version>
<dependency.transform.model.version>1.0.2.11</dependency.transform.model.version> <dependency.transform.model.version>1.0.2.11</dependency.transform.model.version>
<dependency.alfresco-greenmail.version>6.2</dependency.alfresco-greenmail.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.spring.version>5.2.9.RELEASE</dependency.spring.version>
<dependency.antlr.version>3.5.2</dependency.antlr.version> <dependency.antlr.version>3.5.2</dependency.antlr.version>
<dependency.jackson.version>2.11.3</dependency.jackson.version> <dependency.jackson.version>2.11.3</dependency.jackson.version>
<dependency.jackson-databind.version>2.11.2</dependency.jackson-databind.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.opencmis.version>1.0.0</dependency.opencmis.version>
<dependency.pdfbox.version>2.0.21</dependency.pdfbox.version> <dependency.pdfbox.version>2.0.21</dependency.pdfbox.version>
<dependency.webscripts.version>8.14</dependency.webscripts.version> <dependency.webscripts.version>8.14</dependency.webscripts.version>
@@ -70,7 +70,7 @@
<dependency.guava.version>28.2-jre</dependency.guava.version> <dependency.guava.version>28.2-jre</dependency.guava.version>
<dependency.commons-io.version>2.8.0</dependency.commons-io.version> <dependency.commons-io.version>2.8.0</dependency.commons-io.version>
<dependency.gson.version>2.8.6</dependency.gson.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.httpcore.version>4.4.13</dependency.httpcore.version>
<dependency.commons-httpclient.version>3.1-HTTPCLIENT-1265</dependency.commons-httpclient.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> <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.mysql.version>8.0.22</dependency.mysql.version>
<dependency.mariadb.version>2.7.0</dependency.mariadb.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.rest-assured.version>3.3.0</dependency.rest-assured.version>
<dependency.javax.json.version>1.1.4</dependency.javax.json.version> <dependency.javax.json.version>1.1.4</dependency.javax.json.version>
<dependency.tas-restapi.version>1.48</dependency.tas-restapi.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-email.version>1.8</dependency.tas-email.version>
<dependency.tas-webdav.version>1.6</dependency.tas-webdav.version> <dependency.tas-webdav.version>1.6</dependency.tas-webdav.version>
<dependency.tas-ftp.version>1.5</dependency.tas-ftp.version> <dependency.tas-ftp.version>1.5</dependency.tas-ftp.version>
@@ -148,6 +148,13 @@
<groupId>xalan</groupId> <groupId>xalan</groupId>
<artifactId>xalan</artifactId> <artifactId>xalan</artifactId>
<version>2.7.2-alfresco</version> <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>
<dependency> <dependency>
<groupId>org.alfresco.services</groupId> <groupId>org.alfresco.services</groupId>
@@ -490,6 +497,13 @@
<groupId>xerces</groupId> <groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId> <artifactId>xercesImpl</artifactId>
<version>${dependency.xercesImpl.version}</version> <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> </dependency>
<!-- Newer metadata-extractor, used in TIKA, see ACS-370 --> <!-- Newer metadata-extractor, used in TIKA, see ACS-370 -->
<dependency> <dependency>
@@ -697,4 +711,3 @@
</build> </build>
</project> </project>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<dependencies> <dependencies>

View File

@@ -2348,6 +2348,11 @@ public class NodesImpl implements Nodes
private void handleNodeRename(Map<QName, Serializable> props, NodeRef nodeRef) private void handleNodeRename(Map<QName, Serializable> props, NodeRef nodeRef)
{ {
Serializable nameProp = props.get(ContentModel.PROP_NAME); Serializable nameProp = props.get(ContentModel.PROP_NAME);
handleNodeRename(nameProp, nodeRef);
}
private void handleNodeRename(Serializable nameProp, NodeRef nodeRef)
{
if ((nameProp != null)) if ((nameProp != null))
{ {
String currentName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); String currentName = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME);
@@ -2722,6 +2727,7 @@ public class NodesImpl implements Nodes
String fileName = parameters.getParameter(PARAM_NAME); String fileName = parameters.getParameter(PARAM_NAME);
if (fileName != null) if (fileName != null)
{ {
handleNodeRename(fileName, nodeRef);
// optionally rename, before updating the content // optionally rename, before updating the content
nodeService.setProperty(nodeRef, ContentModel.PROP_NAME, fileName); nodeService.setProperty(nodeRef, ContentModel.PROP_NAME, fileName);
} }

View File

@@ -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 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 # 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.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.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 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 # 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 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

View File

@@ -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.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=\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.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.delete=\u5df2\u6210\u529f\u5220\u9664\u8282\u70b9\u3002
nodebrowser.message.restore=\u5df2\u6210\u529f\u8fd8\u539f\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 nodebrowser.message.take-ownership=\u5df2\u6210\u529f\u83b7\u53d6\u6240\u6709\u6743\u3002

View File

@@ -5714,6 +5714,55 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
assertTrue(currentPath.equals(expectedPath)); 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 private String getDataDictionaryNodeId() throws Exception
{ {
Map params = new HashMap<>(); Map params = new HashMap<>();

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>8.319-SNAPSHOT</version> <version>8.328-SNAPSHOT</version>
</parent> </parent>
<dependencies> <dependencies>
@@ -249,11 +249,7 @@
<groupId>xalan</groupId> <groupId>xalan</groupId>
<artifactId>xalan</artifactId> <artifactId>xalan</artifactId>
</dependency> </dependency>
<dependency> <!-- [ACS-544] xml-apis dependency excluded to avoid conflict in JDK9+ as it includes javax.xml and w3c. -->
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
<dependency> <dependency>
<groupId>jakarta.annotation</groupId> <groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId> <artifactId>jakarta.annotation-api</artifactId>
@@ -425,6 +421,11 @@
<groupId>org.codehaus.woodstox</groupId> <groupId>org.codehaus.woodstox</groupId>
<artifactId>woodstox-core-asl</artifactId> <artifactId>woodstox-core-asl</artifactId>
</exclusion> </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> </exclusions>
</dependency> </dependency>
@@ -1005,6 +1006,11 @@
<groupId>javax.annotation</groupId> <groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId> <artifactId>javax.annotation-api</artifactId>
</exclusion> </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> </exclusions>
</dependency> </dependency>
<dependency> <dependency>

View File

@@ -177,13 +177,13 @@ public class CMISResultSetRow implements ResultSetRow
context.setScore(getScore()); context.setScore(getScore());
for (Column column : query.getColumns()) for (Column column : query.getColumns())
{ {
// When an SCORE selector is included, score must be adapted to range 0..1 due to CMIS specification if (column.getAlias().equals(columnName))
if (column.getFunction()!= null && column.getFunction().getName().equals(Score.NAME))
{
return getNormalisedScore();
}
else 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();
}
return column.getFunction().getValue(column.getFunctionArguments(), context); return column.getFunction().getValue(column.getFunctionArguments(), context);
} }
// Special case for one selector - ignore any table aliases // Special case for one selector - ignore any table aliases

View File

@@ -35,6 +35,7 @@ public enum DeploymentMethod
INSTALLER, INSTALLER,
DOCKER_COMPOSE, DOCKER_COMPOSE,
HELM_CHART, HELM_CHART,
ANSIBLE,
/** /**
* The distribution zip was used to lay down the ACS artifacts * The distribution zip was used to lay down the ACS artifacts
*/ */

View File

@@ -58,7 +58,7 @@ import org.alfresco.service.namespace.QName;
public class EventConsolidator implements EventSupportedPolicies public class EventConsolidator implements EventSupportedPolicies
{ {
private final NodeResourceHelper helper; private final NodeResourceHelper helper;
private final Deque<EventType> eventTypes; protected final Deque<EventType> eventTypes;
private final List<QName> aspectsAdded; private final List<QName> aspectsAdded;
private final List<QName> aspectsRemoved; 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 * @param forceUpdate if {@code true}, will get the latest node info and ignores
* the existing builder object. * the existing builder object.
*/ */
private void createBuilderIfAbsent(NodeRef nodeRef, boolean forceUpdate) protected void createBuilderIfAbsent(NodeRef nodeRef, boolean forceUpdate)
{ {
if (resourceBuilder == null || forceUpdate) if (resourceBuilder == null || forceUpdate)
{ {
@@ -140,7 +140,7 @@ public class EventConsolidator implements EventSupportedPolicies
* *
* @param nodeRef the nodeRef in the txn * @param nodeRef the nodeRef in the txn
*/ */
private void createBuilderIfAbsent(NodeRef nodeRef) protected void createBuilderIfAbsent(NodeRef nodeRef)
{ {
createBuilderIfAbsent(nodeRef, false); createBuilderIfAbsent(nodeRef, false);
} }
@@ -292,6 +292,7 @@ public class EventConsolidator implements EventSupportedPolicies
Builder builder = NodeResource.builder(); Builder builder = NodeResource.builder();
ZonedDateTime modifiedAt = null;
Map<QName, Serializable> changedPropsBefore = getBeforeMapChanges(propertiesBefore, propertiesAfter); Map<QName, Serializable> changedPropsBefore = getBeforeMapChanges(propertiesBefore, propertiesAfter);
if (!changedPropsBefore.isEmpty()) if (!changedPropsBefore.isEmpty())
{ {
@@ -321,13 +322,8 @@ public class EventConsolidator implements EventSupportedPolicies
builder.setModifiedByUser(modifier); builder.setModifiedByUser(modifier);
resourceBeforeAllFieldsNull = false; resourceBeforeAllFieldsNull = false;
} }
ZonedDateTime modifiedAt = modifiedAt =
helper.getZonedDateTime((Date) changedPropsBefore.get(ContentModel.PROP_MODIFIED)); 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 // Handle case where the content does not exist on the propertiesBefore
@@ -357,6 +353,12 @@ public class EventConsolidator implements EventSupportedPolicies
resourceBeforeAllFieldsNull = false; 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(); return builder.build();
} }
@@ -489,4 +491,9 @@ public class EventConsolidator implements EventSupportedPolicies
{ {
return resourceBeforeAllFieldsNull; return resourceBeforeAllFieldsNull;
} }
protected void setResourceBeforeAllFieldsNull(boolean resourceBeforeAllFieldsNull){
this.resourceBeforeAllFieldsNull = resourceBeforeAllFieldsNull;
}
} }

View File

@@ -83,21 +83,21 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
{ {
private static final Log LOGGER = LogFactory.getLog(EventGenerator.class); private static final Log LOGGER = LogFactory.getLog(EventGenerator.class);
private PolicyComponent policyComponent; protected PolicyComponent policyComponent;
private NodeService nodeService; protected NodeService nodeService;
private NamespaceService namespaceService; private NamespaceService namespaceService;
private DictionaryService dictionaryService; protected DictionaryService dictionaryService;
private DescriptorService descriptorService; private DescriptorService descriptorService;
private EventFilterRegistry eventFilterRegistry; private EventFilterRegistry eventFilterRegistry;
private Event2MessageProducer event2MessageProducer; private Event2MessageProducer event2MessageProducer;
private TransactionService transactionService; private TransactionService transactionService;
private PersonService personService; private PersonService personService;
private NodeResourceHelper nodeResourceHelper; protected NodeResourceHelper nodeResourceHelper;
private NodeTypeFilter nodeTypeFilter; private NodeTypeFilter nodeTypeFilter;
private ChildAssociationTypeFilter childAssociationTypeFilter; private ChildAssociationTypeFilter childAssociationTypeFilter;
private EventUserFilter userFilter; private EventUserFilter userFilter;
private final EventTransactionListener transactionListener = new EventTransactionListener(); protected final EventTransactionListener transactionListener = new EventTransactionListener();
@Override @Override
public void afterPropertiesSet() public void afterPropertiesSet()
@@ -283,7 +283,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
* @return the {@link EventConsolidator} for the supplied {@code nodeRef} from * @return the {@link EventConsolidator} for the supplied {@code nodeRef} from
* the current transaction context. * the current transaction context.
*/ */
private EventConsolidator getEventConsolidator(NodeRef nodeRef) protected EventConsolidator getEventConsolidator(NodeRef nodeRef)
{ {
Consolidators consolidators = getTxnConsolidators(transactionListener); Consolidators consolidators = getTxnConsolidators(transactionListener);
Map<NodeRef, EventConsolidator> nodeEvents = consolidators.getNodes(); 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); Consolidators consolidators = AlfrescoTransactionSupport.getResource(resourceKey);
if (consolidators == null) if (consolidators == null)
@@ -388,7 +388,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
//NOOP //NOOP
} }
private class EventTransactionListener extends TransactionListenerAdapter protected class EventTransactionListener extends TransactionListenerAdapter
{ {
@Override @Override
public void afterCommit() 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()) if (consolidator.isTemporaryNode())
{ {
@@ -466,7 +466,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
logAndSendEvent(event, consolidator.getEventTypes()); logAndSendEvent(event, consolidator.getEventTypes());
} }
private void sendEvent(ChildAssociationRef childAssociationRef, ChildAssociationEventConsolidator consolidator) protected void sendEvent(ChildAssociationRef childAssociationRef, ChildAssociationEventConsolidator consolidator)
{ {
if (consolidator.isTemporaryChildAssociation()) if (consolidator.isTemporaryChildAssociation())
{ {
@@ -506,7 +506,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
logAndSendEvent(event, consolidator.getEventTypes()); logAndSendEvent(event, consolidator.getEventTypes());
} }
private void sendEvent(AssociationRef peerAssociationRef, PeerAssociationEventConsolidator consolidator) protected void sendEvent(AssociationRef peerAssociationRef, PeerAssociationEventConsolidator consolidator)
{ {
if (consolidator.isTemporaryPeerAssociation()) if (consolidator.isTemporaryPeerAssociation())
{ {
@@ -525,7 +525,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
logAndSendEvent(event, consolidator.getEventTypes()); logAndSendEvent(event, consolidator.getEventTypes());
} }
private void logAndSendEvent(RepoEvent<?> event, Deque<EventType> listOfEvents) protected void logAndSendEvent(RepoEvent<?> event, Deque<EventType> listOfEvents)
{ {
if (LOGGER.isTraceEnabled()) 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<NodeRef, EventConsolidator> nodes;
private Map<ChildAssociationRef, ChildAssociationEventConsolidator> childAssocs; private Map<ChildAssociationRef, ChildAssociationEventConsolidator> childAssocs;

View File

@@ -43,7 +43,8 @@ public enum EventJSONSchema
CHILD_ASSOC_CREATED_V1("childAssocCreated", 1, EventType.CHILD_ASSOC_CREATED), CHILD_ASSOC_CREATED_V1("childAssocCreated", 1, EventType.CHILD_ASSOC_CREATED),
CHILD_ASSOC_DELETED_V1("childAssocDeleted", 1, EventType.CHILD_ASSOC_DELETED), CHILD_ASSOC_DELETED_V1("childAssocDeleted", 1, EventType.CHILD_ASSOC_DELETED),
PEER_ASSOC_CREATED_V1("peerAssocCreated", 1 , EventType.PEER_ASSOC_CREATED), 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"; private static final String PREFIX = "https://api.alfresco.com/schema/event/repo/v";

View File

@@ -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), 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), 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 static final String PREFIX = "org.alfresco.event.";
private final String type; private final String type;

View File

@@ -52,6 +52,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.security.NoSuchPersonException; 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.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespaceException; import org.alfresco.service.namespace.NamespaceException;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
@@ -76,6 +77,7 @@ public class NodeResourceHelper implements InitializingBean
protected PersonService personService; protected PersonService personService;
protected EventFilterRegistry eventFilterRegistry; protected EventFilterRegistry eventFilterRegistry;
protected NamespaceService namespaceService; protected NamespaceService namespaceService;
protected PermissionService permissionService;
private NodeAspectFilter nodeAspectFilter; private NodeAspectFilter nodeAspectFilter;
private NodePropertyFilter nodePropertyFilter; private NodePropertyFilter nodePropertyFilter;
@@ -88,6 +90,7 @@ public class NodeResourceHelper implements InitializingBean
PropertyCheck.mandatory(this, "personService", personService); PropertyCheck.mandatory(this, "personService", personService);
PropertyCheck.mandatory(this, "eventFilterRegistry", eventFilterRegistry); PropertyCheck.mandatory(this, "eventFilterRegistry", eventFilterRegistry);
PropertyCheck.mandatory(this, "namespaceService", namespaceService); PropertyCheck.mandatory(this, "namespaceService", namespaceService);
PropertyCheck.mandatory(this, "permissionService", permissionService);
this.nodeAspectFilter = eventFilterRegistry.getNodeAspectFilter(); this.nodeAspectFilter = eventFilterRegistry.getNodeAspectFilter();
this.nodePropertyFilter = eventFilterRegistry.getNodePropertyFilter(); this.nodePropertyFilter = eventFilterRegistry.getNodePropertyFilter();
@@ -108,6 +111,11 @@ public class NodeResourceHelper implements InitializingBean
this.personService = personService; this.personService = personService;
} }
public void setPermissionService(PermissionService permissionService)
{
this.permissionService = permissionService;
}
// To make IntelliJ stop complaining about unused method! // To make IntelliJ stop complaining about unused method!
@SuppressWarnings("unused") @SuppressWarnings("unused")
public void setEventFilterRegistry(EventFilterRegistry eventFilterRegistry) public void setEventFilterRegistry(EventFilterRegistry eventFilterRegistry)
@@ -316,4 +324,9 @@ public class NodeResourceHelper implements InitializingBean
final Path path = nodeService.getPath(nodeRef); final Path path = nodeService.getPath(nodeRef);
return PathUtil.getNodeIdsInReverse(path, showLeaf); return PathUtil.getNodeIdsInReverse(path, showLeaf);
} }
public PermissionService getPermissionService()
{
return permissionService;
}
} }

View File

@@ -2,7 +2,7 @@
* #%L * #%L
* Alfresco Repository * Alfresco Repository
* %% * %%
* Copyright (C) 2005 - 2016 Alfresco Software Limited * Copyright (C) 2005 - 2020 Alfresco Software Limited
* %% * %%
* This file is part of the Alfresco software. * This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of * 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; return assocs;
} }
private Set<NodeRef> getClassificationNodes(StoreRef storeRef, QName qname) protected Set<NodeRef> getClassificationNodes(StoreRef storeRef, QName qname)
{ {
ResultSet resultSet = null; ResultSet resultSet = null;
try try

View File

@@ -49,6 +49,7 @@
<property name="personService" ref="personService"/> <property name="personService" ref="personService"/>
<property name="eventFilterRegistry" ref="event2FilterRegistry"/> <property name="eventFilterRegistry" ref="event2FilterRegistry"/>
<property name="namespaceService" ref="namespaceService"/> <property name="namespaceService" ref="namespaceService"/>
<property name="permissionService" ref="permissionService"/>
</bean> </bean>
<bean id="nodeResourceHelper" class="org.alfresco.repo.event2.NodeResourceHelper" parent="baseNodeResourceHelper"/> <bean id="nodeResourceHelper" class="org.alfresco.repo.event2.NodeResourceHelper" parent="baseNodeResourceHelper"/>

View File

@@ -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.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.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.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.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.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 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.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.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.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.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.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 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.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.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.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.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.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.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.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 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

View File

@@ -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.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.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.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.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.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 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.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.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.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

View File

@@ -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.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.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.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 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=\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 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

View File

@@ -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.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.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.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 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=\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 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

View File

@@ -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.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.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.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.northern_mariana_islands.name=\u5317\u9a6c\u91cc\u4e9a\u7eb3\u7fa4\u5c9b
bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.palau.name=\u5e15\u52b3 bootstrap.categories.cm_generalclassifiable.regions.oceania.micronesia.palau.name=\u5e15\u52b3

View File

@@ -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.title=\u7535\u5b50\u90ae\u4ef6\u65b9\u5f0f
cm_contentmodel.aspect.cm_emailed.description=\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.title=\u53d1\u4ef6\u4eba
cm_contentmodel.property.cm_originator.description=\u4ece cm_contentmodel.property.cm_originator.description=\u53d1\u4ef6\u4eba
cm_contentmodel.property.cm_addressee.title=\u6536\u4ef6\u4eba cm_contentmodel.property.cm_addressee.title=\u6536\u4ef6\u4eba
cm_contentmodel.property.cm_addressee.description=\u6536\u4ef6\u4eba cm_contentmodel.property.cm_addressee.description=\u6536\u4ef6\u4eba
cm_contentmodel.property.cm_addressees.title=\u6240\u6709\u6536\u4ef6\u4eba cm_contentmodel.property.cm_addressees.title=\u6240\u6709\u6536\u4ef6\u4eba

View File

@@ -32,6 +32,6 @@ cmm.service.model_in_use=\u30e2\u30c7\u30eb ''{0}'' \u306f\u4f7f\u7528\u4e2d\u30
# ValueDataTypeValidator messages # 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.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_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_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 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

View File

@@ -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.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.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.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.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. 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_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_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 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.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_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_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 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

View File

@@ -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_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_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_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)

View File

@@ -113,5 +113,5 @@ system.license.err.reloadFailed=\u30e9\u30a4\u30bb\u30f3\u30b9 {0} \u3092\u518d\
# Startup message # 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.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.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 # END TRANSLATION

View File

@@ -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.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.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.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.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.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 transfer_service.receiver.error_ending_transfer=\u8bf7\u6c42\u7ed3\u675f\u4f20\u8f93 ({0}) \u5bfc\u81f4\u4e86\u9519\u8bef\u3002

View File

@@ -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 # How long to wait in mS from the last communication before deciding that deployment has failed, possibly
# the destination is no longer available? # the destination is no longer available?
deployment.service.targetLockTimeout=3600000 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 deployment.method=DEFAULT
#Invitation Service #Invitation Service

View File

@@ -30,6 +30,7 @@ import org.alfresco.repo.action.ActionImpl;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter; import org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter;
import org.alfresco.repo.content.metadata.AsynchronousExtractor; 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.metadata.MetadataExtracterRegistry;
import org.alfresco.repo.content.transform.AbstractContentTransformerTest; import org.alfresco.repo.content.transform.AbstractContentTransformerTest;
import org.alfresco.repo.content.transform.TransformerDebug; 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.RenditionDefinition2;
import org.alfresco.repo.rendition2.RenditionService2Impl; import org.alfresco.repo.rendition2.RenditionService2Impl;
import org.alfresco.repo.rendition2.TransformClient; 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.security.authentication.AuthenticationComponent;
import org.alfresco.repo.tagging.TaggingServiceImpl;
import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.ContentIOException; 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.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef; 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.NamespacePrefixResolver;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService; import org.alfresco.service.transaction.TransactionService;
import org.alfresco.test_category.BaseSpringTestsCategory; import org.alfresco.test_category.BaseSpringTestsCategory;
@@ -67,15 +71,20 @@ import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException; import javax.transaction.RollbackException;
import javax.transaction.SystemException; import javax.transaction.SystemException;
import javax.transaction.UserTransaction; import javax.transaction.UserTransaction;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.Serializable; import java.io.Serializable;
import java.net.URL;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.Set;
import java.util.StringJoiner; import java.util.StringJoiner;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@@ -108,6 +117,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
private static final ExecutorService executorService = Executors.newCachedThreadPool(); private static final ExecutorService executorService = Executors.newCachedThreadPool();
private NodeService nodeService; private NodeService nodeService;
private NodeService publicNodeService;
private ContentService contentService; private ContentService contentService;
private DictionaryService dictionaryService; private DictionaryService dictionaryService;
private MimetypeService mimetypeService; private MimetypeService mimetypeService;
@@ -120,11 +130,13 @@ public class AsynchronousExtractorTest extends BaseSpringTest
private TransformerDebug transformerDebug; private TransformerDebug transformerDebug;
private TransactionService transactionService; private TransactionService transactionService;
private TransformServiceRegistry transformServiceRegistry; private TransformServiceRegistry transformServiceRegistry;
private TaggingService taggingService; private TaggingServiceImpl taggingService;
private ContentMetadataExtracter contentMetadataExtracter; private ContentMetadataExtracter contentMetadataExtracter;
private ContentMetadataEmbedder contentMetadataEmbedder; private ContentMetadataEmbedder contentMetadataEmbedder;
private RenditionService2Impl renditionService2; private RenditionService2Impl renditionService2;
private TransformClient transformClient; private TransformClient transformClient;
private CategoryService categoryService;
private MockCategoryService mockCategoryService;
private long origSize; private long origSize;
private Map<QName, Serializable> origProperties; 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 * @param changedHashcode if specified indicates that the source node content changed or was deleted between
* the request to extract or embed and the response. * 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.mockResult = mockResult;
this.changedHashcode = changedHashcode; this.changedHashcode = changedHashcode;
@@ -174,14 +186,17 @@ public class AsynchronousExtractorTest extends BaseSpringTest
setContentService(contentService); setContentService(contentService);
setTransactionService(transactionService); setTransactionService(transactionService);
setTransformServiceRegistry(transformServiceRegistry); setTransformServiceRegistry(transformServiceRegistry);
setEnableStringTagging(true);
setTaggingService(taggingService); setTaggingService(taggingService);
setRegistry(metadataExtracterRegistry); setRegistry(metadataExtracterRegistry);
setMimetypeService(mimetypeService); setMimetypeService(mimetypeService);
setDictionaryService(dictionaryService); setDictionaryService(AsynchronousExtractorTest.this.dictionaryService);
setExecutorService(executorService); setExecutorService(executorService);
setOverwritePolicy(policy);
register(); register();
renditionService2.setTransformClient(mockTransformClient); renditionService2.setTransformClient(mockTransformClient);
renditionService2.setAsynchronousExtractor(this);
} }
@Override @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 @Before
public void before() throws Exception public void before() throws Exception
{ {
nodeService = (NodeService) applicationContext.getBean("nodeService"); nodeService = (NodeService) applicationContext.getBean("nodeService");
publicNodeService = (NodeService) applicationContext.getBean("NodeService");
contentService = (ContentService) applicationContext.getBean("contentService"); contentService = (ContentService) applicationContext.getBean("contentService");
dictionaryService = (DictionaryService) applicationContext.getBean("dictionaryService"); dictionaryService = (DictionaryService) applicationContext.getBean("dictionaryService");
mimetypeService = (MimetypeService) applicationContext.getBean("mimetypeService"); mimetypeService = (MimetypeService) applicationContext.getBean("mimetypeService");
@@ -273,8 +330,10 @@ public class AsynchronousExtractorTest extends BaseSpringTest
renditionService2 = (RenditionService2Impl) applicationContext.getBean("renditionService2"); renditionService2 = (RenditionService2Impl) applicationContext.getBean("renditionService2");
transactionService = (TransactionService) applicationContext.getBean("transactionService"); transactionService = (TransactionService) applicationContext.getBean("transactionService");
transformServiceRegistry = (TransformServiceRegistry) applicationContext.getBean("transformServiceRegistry"); transformServiceRegistry = (TransformServiceRegistry) applicationContext.getBean("transformServiceRegistry");
taggingService = (TaggingService) applicationContext.getBean("taggingService"); taggingService = (TaggingServiceImpl) applicationContext.getBean("taggingService");
transformClient = (TransformClient) applicationContext.getBean("transformClient"); 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 // Create an empty metadata extractor registry, so that if we add one it will be used
metadataExtracterRegistry = new MetadataExtracterRegistry(); metadataExtracterRegistry = new MetadataExtracterRegistry();
@@ -284,8 +343,10 @@ public class AsynchronousExtractorTest extends BaseSpringTest
contentMetadataExtracter.setContentService(contentService); contentMetadataExtracter.setContentService(contentService);
contentMetadataExtracter.setDictionaryService(dictionaryService); contentMetadataExtracter.setDictionaryService(dictionaryService);
contentMetadataExtracter.setMetadataExtracterRegistry(metadataExtracterRegistry); contentMetadataExtracter.setMetadataExtracterRegistry(metadataExtracterRegistry);
contentMetadataExtracter.setTaggingService(taggingService);
contentMetadataExtracter.setApplicableTypes(new String[]{ContentModel.TYPE_CONTENT.toString()}); contentMetadataExtracter.setApplicableTypes(new String[]{ContentModel.TYPE_CONTENT.toString()});
contentMetadataExtracter.setCarryAspectProperties(true); contentMetadataExtracter.setCarryAspectProperties(true);
contentMetadataExtracter.setEnableStringTagging(true);
contentMetadataEmbedder = new ContentMetadataEmbedder(); contentMetadataEmbedder = new ContentMetadataEmbedder();
contentMetadataEmbedder.setNodeService(nodeService); contentMetadataEmbedder.setNodeService(nodeService);
@@ -327,6 +388,9 @@ public class AsynchronousExtractorTest extends BaseSpringTest
origSize = getSize(nodeRef); origSize = getSize(nodeRef);
mockCategoryService = new MockCategoryService(nodeService, publicNodeService);
taggingService.setCategoryService(mockCategoryService);
return null; return null;
} }
}); });
@@ -336,15 +400,18 @@ public class AsynchronousExtractorTest extends BaseSpringTest
public void after() throws Exception public void after() throws Exception
{ {
renditionService2.setTransformClient(transformClient); renditionService2.setTransformClient(transformClient);
renditionService2.setAsynchronousExtractor(asynchronousExtractor);
taggingService.setCategoryService(categoryService);
} }
private void assertAsyncMetadataExecute(ActionExecuterAbstractBase executor, String mockResult, private void assertAsyncMetadataExecute(ActionExecuterAbstractBase executor, String mockResult,
Integer changedHashcode, long expectedSize, Integer changedHashcode, long expectedSize,
Map<QName, Serializable> expectedProperties, Map<QName, Serializable> expectedProperties,
OverwritePolicy policy,
QName... ignoreProperties) throws Exception QName... ignoreProperties) throws Exception
{ {
TestAsynchronousExtractor extractor = new TestAsynchronousExtractor(mockResult, changedHashcode); TestAsynchronousExtractor extractor = new TestAsynchronousExtractor(mockResult, changedHashcode, policy);
extractor.setEnableStringTagging(true);
executeAction(executor, extractor); executeAction(executor, extractor);
assertContentSize(nodeRef, origSize, AFTER_CALLING_EXECUTE); assertContentSize(nodeRef, origSize, AFTER_CALLING_EXECUTE);
assertProperties(nodeRef, origProperties, AFTER_CALLING_EXECUTE, ignoreProperties); 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"); expectedProperties.put(QName.createQName("cm:title", namespacePrefixResolver), "The quick brown fox jumps over the lazy dog");
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json", assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json",
UNCHANGED_HASHCODE, origSize, expectedProperties); UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testExtractNodeDeleted() throws Exception public void testExtractNodeDeleted() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json", assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json",
SOURCE_HAS_NO_CONTENT, origSize, origProperties); SOURCE_HAS_NO_CONTENT, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testExtractContentChanged() throws Exception public void testExtractContentChanged() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json", assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.html_metadata.json",
1234, origSize, origProperties); CHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testExtractTransformFailure() throws Exception public void testExtractTransformFailure() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataExtracter, null, assertAsyncMetadataExecute(contentMetadataExtracter, null,
UNCHANGED_HASHCODE, origSize, origProperties); UNCHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testExtractTransformCorrupt() throws Exception public void testExtractTransformCorrupt() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataExtracter, "quick.html", // not json assertAsyncMetadataExecute(contentMetadataExtracter, "quick.html", // not json
UNCHANGED_HASHCODE, origSize, origProperties); UNCHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
@@ -471,7 +538,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
// "{http://www.unknown}name": "ignored" - is reported in an ERROR log // "{http://www.unknown}name": "ignored" - is reported in an ERROR log
expectedProperties.put(QName.createQName("cm:author", namespacePrefixResolver), "Used"); expectedProperties.put(QName.createQName("cm:author", namespacePrefixResolver), "Used");
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/unknown_namespace_metadata.json", assertAsyncMetadataExecute(contentMetadataExtracter, "quick/unknown_namespace_metadata.json",
UNCHANGED_HASHCODE, origSize, expectedProperties); UNCHANGED_HASHCODE, origSize, expectedProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
@@ -488,7 +555,7 @@ public class AsynchronousExtractorTest extends BaseSpringTest
expectedProperties.put(QName.createQName("cm:originator", namespacePrefixResolver), "Mark Rogers"); expectedProperties.put(QName.createQName("cm:originator", namespacePrefixResolver), "Mark Rogers");
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.msg_metadata.json", 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)); 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 // 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. // ImapContentPolicy.onAddAspect. I cannot see a good way to avoid this.
assertAsyncMetadataExecute(contentMetadataExtracter, "quick/quick.eml_metadata.json", 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 // 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 // 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 // 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)); QName.createQName("cm:author", namespacePrefixResolver));
} }
@Test @Test
public void testEmbed() throws Exception 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! assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html", // just replace the pdf with html!
UNCHANGED_HASHCODE, 428, expectedProperties); UNCHANGED_HASHCODE, fileSize, expectedProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testEmbedNodeDeleted() throws Exception public void testEmbedNodeDeleted() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html", assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html",
SOURCE_HAS_NO_CONTENT, origSize, origProperties); SOURCE_HAS_NO_CONTENT, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testEmbedContentChanged() throws Exception public void testEmbedContentChanged() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html", assertAsyncMetadataExecute(contentMetadataEmbedder, "quick/quick.html",
1234, origSize, origProperties); CHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
@Test @Test
public void testEmbedTransformFailure() throws Exception public void testEmbedTransformFailure() throws Exception
{ {
assertAsyncMetadataExecute(contentMetadataEmbedder, null, assertAsyncMetadataExecute(contentMetadataEmbedder, null,
UNCHANGED_HASHCODE, origSize, origProperties); UNCHANGED_HASHCODE, origSize, origProperties, OverwritePolicy.PRAGMATIC);
} }
// TODO Write tests for: overwritePolicy, enableStringTagging and carryAspectProperties. @Test
// Values are set in AsynchronousExtractor.setMetadata(...) but make use of original code within public void testOverwritePolicyEager() throws Exception
// 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 QName author = QName.createQName("cm:author", namespacePrefixResolver);
// to test these values.
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());
}
} }

View File

@@ -30,6 +30,7 @@ import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -978,4 +979,32 @@ public class UpdateRepoEventIT extends AbstractContextAwareRepoEvent
assertEquals(1, aspectsBefore.size()); assertEquals(1, aspectsBefore.size());
assertTrue(aspectsBefore.contains("cm:auditable")); 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());
}
} }

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -0,0 +1,4 @@
{
"sys:overwritePolicy": "EAGER",
"{http://www.alfresco.org/model/content/1.0}author": "Nevin Nollop"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -0,0 +1,5 @@
{
"sys:enableStringTagging": "true",
"sys:stringTaggingSeparators": ";,\",\",\\|",
"{http://www.alfresco.org/model/content/1.0}taggable": "tag1;tag2;tag3"
}

View File

@@ -0,0 +1,5 @@
{
"sys:enableStringTagging": "false",
"sys:stringTaggingSeparators": ";,\",\",\\|",
"{http://www.alfresco.org/model/content/1.0}taggable": "tag1;tag2;tag3"
}