mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-09-10 14:11:58 +00:00
Compare commits
100 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1971a4e9aa | ||
|
bdecc02ed8 | ||
|
ec3760b50c | ||
|
5542ad3d53 | ||
|
46f6d5829e | ||
|
56d6f12b69 | ||
|
50389ae6df | ||
|
099a444bf0 | ||
|
bc8a3873ba | ||
|
582d0f519e | ||
|
96ef362d6d | ||
|
e5770ddfda | ||
|
808f1c377f | ||
|
ab6c831447 | ||
|
1b6e800733 | ||
|
6dc4df338f | ||
|
bd2d43b587 | ||
|
5ce179f209 | ||
|
6c9b05d289 | ||
|
3414550a51 | ||
|
79711ebde0 | ||
|
c62440da9c | ||
|
1b54977567 | ||
|
f201f35ec1 | ||
|
9e2a0bd899 | ||
|
02db789084 | ||
|
8035c71ece | ||
|
f2dd2c898c | ||
|
ecf4b9bfff | ||
|
a7d8789ff4 | ||
|
6c69e45b1e | ||
|
c35ee50125 | ||
|
9d711213cc | ||
|
8a6a76d191 | ||
|
bd6850d012 | ||
|
fdfb7d170d | ||
|
33b2a23dfd | ||
|
682917b948 | ||
|
5e38be6f7d | ||
|
ef441fc2c8 | ||
|
b9e4557973 | ||
|
5d67d39323 | ||
|
b32e3fc0b3 | ||
|
20dd0efc6f | ||
|
2a8811a109 | ||
|
14902b536a | ||
|
046116ddf0 | ||
|
0ca611dcfd | ||
|
d9daeae665 | ||
|
65675b9a1d | ||
|
dd93088c72 | ||
|
968cae0ee7 | ||
|
c28950843a | ||
|
28f1429a13 | ||
|
9bd54efc10 | ||
|
3c81ec949e | ||
|
53704a2c58 | ||
|
b4455f7d60 | ||
|
0617fbb0bf | ||
|
f748334f1e | ||
|
08748e8af5 | ||
|
ce62fb1da3 | ||
|
34f360211f | ||
|
b559e78827 | ||
|
1add8a0f08 | ||
|
5eb8767f4c | ||
|
7fb3386413 | ||
|
22945a30ea | ||
|
fc531f64ed | ||
|
98090ac48c | ||
|
33b64f483d | ||
|
5e2d939f4e | ||
|
26dbcd3e79 | ||
|
8ec9fa5f5e | ||
|
578becd586 | ||
|
1f6774f2ef | ||
|
9ff5f3b843 | ||
|
9e3bb59067 | ||
|
db47063830 | ||
|
562479bde4 | ||
|
e738e0a0fb | ||
|
eb703c19aa | ||
|
b772205539 | ||
|
b9c6b59129 | ||
|
cf7ce72209 | ||
|
7a58014c32 | ||
|
e964aab211 | ||
|
2d3cac3c27 | ||
|
3a495f7b3f | ||
|
949e257f19 | ||
|
dfb34140ac | ||
|
c1f78b1a17 | ||
|
8b70483aa0 | ||
|
3ebeac2eb4 | ||
|
d91a552925 | ||
|
8c91145b39 | ||
|
86fcf67016 | ||
|
48c85ec24f | ||
|
f446031069 | ||
|
a9dabb0e99 |
@@ -25,10 +25,6 @@
|
||||
<url>https://artifacts.alfresco.com/nexus/content/groups/public</url>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
<properties>
|
||||
<!-- WhiteSource token -->
|
||||
<org.whitesource.orgToken>${env.WHITESOURCE_API_KEY}</org.whitesource.orgToken>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
|
@@ -177,6 +177,11 @@ jobs:
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=AllDBTestsTestSuite -Ddb.driver=org.postgresql.Driver -Ddb.name=alfresco -Ddb.url=jdbc:postgresql://localhost:5433/alfresco -Ddb.username=alfresco -Ddb.password=alfresco
|
||||
|
||||
- name: "Repository - Messaging tests"
|
||||
before_script:
|
||||
- docker run -d -p 61616:61616 -p 5672:5672 alfresco/alfresco-activemq:5.16.1
|
||||
script: travis_wait 20 mvn -B test -pl repository -Dtest=CamelRoutesTest,CamelComponentsTest
|
||||
|
||||
- name: "Remote-api - AppContext01TestSuite"
|
||||
before_script:
|
||||
- docker run -d -p 5433:5432 -e POSTGRES_PASSWORD=alfresco -e POSTGRES_USER=alfresco -e POSTGRES_DB=alfresco postgres:13.1 postgres -c 'max_connections=300'
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -21,7 +21,6 @@ package org.alfresco.httpclient;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.security.AlgorithmParameters;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -32,14 +31,11 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||
import org.alfresco.encryption.AlfrescoKeyStore;
|
||||
import org.alfresco.encryption.AlfrescoKeyStoreImpl;
|
||||
import org.alfresco.encryption.EncryptionUtils;
|
||||
import org.alfresco.encryption.Encryptor;
|
||||
import org.alfresco.encryption.KeyProvider;
|
||||
import org.alfresco.encryption.KeyResourceLoader;
|
||||
import org.alfresco.encryption.KeyStoreParameters;
|
||||
import org.alfresco.encryption.ssl.AuthSSLProtocolSocketFactory;
|
||||
import org.alfresco.encryption.ssl.SSLEncryptionParameters;
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
|
||||
import org.apache.commons.httpclient.HostConfiguration;
|
||||
import org.apache.commons.httpclient.HttpClient;
|
||||
@@ -53,8 +49,6 @@ import org.apache.commons.httpclient.SimpleHttpConnectionManager;
|
||||
import org.apache.commons.httpclient.URI;
|
||||
import org.apache.commons.httpclient.URIException;
|
||||
import org.apache.commons.httpclient.cookie.CookiePolicy;
|
||||
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
|
||||
import org.apache.commons.httpclient.methods.PostMethod;
|
||||
import org.apache.commons.httpclient.params.DefaultHttpParams;
|
||||
import org.apache.commons.httpclient.params.DefaultHttpParamsFactory;
|
||||
import org.apache.commons.httpclient.params.HttpClientParams;
|
||||
@@ -75,23 +69,25 @@ import org.apache.commons.logging.LogFactory;
|
||||
*/
|
||||
public class HttpClientFactory
|
||||
{
|
||||
/**
|
||||
* Communication type for HttpClient:
|
||||
* - NONE is plain http
|
||||
* - SECRET is plain http with a shared secret via request header
|
||||
* - HTTPS is mTLS with client authentication (certificates are required)
|
||||
*/
|
||||
public static enum SecureCommsType
|
||||
{
|
||||
HTTPS, NONE;
|
||||
HTTPS, NONE, SECRET;
|
||||
|
||||
public static SecureCommsType getType(String type)
|
||||
{
|
||||
if(type.equalsIgnoreCase("https"))
|
||||
switch (type.toLowerCase())
|
||||
{
|
||||
return HTTPS;
|
||||
}
|
||||
else if(type.equalsIgnoreCase("none"))
|
||||
{
|
||||
return NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IllegalArgumentException("Invalid communications type");
|
||||
case "https": return HTTPS;
|
||||
case "none": return NONE;
|
||||
case "secret": return SECRET;
|
||||
default: throw new IllegalArgumentException("Invalid communications type");
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -122,14 +118,24 @@ public class HttpClientFactory
|
||||
|
||||
private int connectionTimeout = 0;
|
||||
|
||||
// Shared secret parameters
|
||||
private String sharedSecret;
|
||||
private String sharedSecretHeader = DEFAULT_SHAREDSECRET_HEADER;
|
||||
|
||||
// Default name for HTTP Request Header when using shared secret communication
|
||||
public static final String DEFAULT_SHAREDSECRET_HEADER = "X-Alfresco-Search-Secret";
|
||||
|
||||
public HttpClientFactory()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Default constructor for legacy subsystems.
|
||||
*/
|
||||
public HttpClientFactory(SecureCommsType secureCommsType, SSLEncryptionParameters sslEncryptionParameters,
|
||||
KeyResourceLoader keyResourceLoader, KeyStoreParameters keyStoreParameters,
|
||||
MD5EncryptionParameters encryptionParameters, String host, int port, int sslPort, int maxTotalConnections,
|
||||
int maxHostConnections, int socketTimeout)
|
||||
KeyResourceLoader keyResourceLoader, KeyStoreParameters keyStoreParameters,
|
||||
MD5EncryptionParameters encryptionParameters, String host, int port, int sslPort,
|
||||
int maxTotalConnections, int maxHostConnections, int socketTimeout)
|
||||
{
|
||||
this.secureCommsType = secureCommsType;
|
||||
this.sslEncryptionParameters = sslEncryptionParameters;
|
||||
@@ -145,6 +151,21 @@ public class HttpClientFactory
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recommended constructor for subsystems supporting Shared Secret communication.
|
||||
* This constructor supports Shared Secret ("secret") communication method additionally to the legacy ones: "none" and "https".
|
||||
*/
|
||||
public HttpClientFactory(SecureCommsType secureCommsType, SSLEncryptionParameters sslEncryptionParameters,
|
||||
KeyResourceLoader keyResourceLoader, KeyStoreParameters keyStoreParameters,
|
||||
MD5EncryptionParameters encryptionParameters, String sharedSecret, String sharedSecretHeader,
|
||||
String host, int port, int sslPort, int maxTotalConnections, int maxHostConnections, int socketTimeout)
|
||||
{
|
||||
this(secureCommsType, sslEncryptionParameters, keyResourceLoader, keyStoreParameters, encryptionParameters,
|
||||
host, port, sslPort, maxTotalConnections, maxHostConnections, socketTimeout);
|
||||
this.sharedSecret = sharedSecret;
|
||||
this.sharedSecretHeader = sharedSecretHeader;
|
||||
}
|
||||
|
||||
public void init()
|
||||
{
|
||||
this.sslKeyStore = new AlfrescoKeyStoreImpl(sslEncryptionParameters.getKeyStoreParameters(), keyResourceLoader);
|
||||
@@ -272,10 +293,44 @@ public class HttpClientFactory
|
||||
this.connectionTimeout = connectionTimeout;
|
||||
}
|
||||
|
||||
protected HttpClient constructHttpClient()
|
||||
/**
|
||||
* Shared secret used for SECRET communication
|
||||
* @param secret shared secret word
|
||||
*/
|
||||
public void setSharedSecret(String sharedSecret)
|
||||
{
|
||||
this.sharedSecret = sharedSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Shared secret used for SECRET communication
|
||||
*/
|
||||
public String getSharedSecret()
|
||||
{
|
||||
return sharedSecret;
|
||||
}
|
||||
|
||||
/**
|
||||
* HTTP Request header used for SECRET communication
|
||||
* @param sharedSecretHeader HTTP Request header
|
||||
*/
|
||||
public void setSharedSecretHeader(String sharedSecretHeader)
|
||||
{
|
||||
this.sharedSecretHeader = sharedSecretHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HTTP Request header used for SECRET communication
|
||||
*/
|
||||
public String getSharedSecretHeader()
|
||||
{
|
||||
return sharedSecretHeader;
|
||||
}
|
||||
|
||||
protected RequestHeadersHttpClient constructHttpClient()
|
||||
{
|
||||
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
|
||||
HttpClient httpClient = new HttpClient(connectionManager);
|
||||
RequestHeadersHttpClient httpClient = new RequestHeadersHttpClient(connectionManager);
|
||||
HttpClientParams params = httpClient.getParams();
|
||||
params.setBooleanParameter(HttpConnectionParams.TCP_NODELAY, true);
|
||||
params.setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK, true);
|
||||
@@ -291,15 +346,15 @@ public class HttpClientFactory
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
protected HttpClient getHttpsClient()
|
||||
protected RequestHeadersHttpClient getHttpsClient()
|
||||
{
|
||||
return getHttpsClient(host, sslPort);
|
||||
}
|
||||
|
||||
protected HttpClient getHttpsClient(String httpsHost, int httpsPort)
|
||||
protected RequestHeadersHttpClient getHttpsClient(String httpsHost, int httpsPort)
|
||||
{
|
||||
// Configure a custom SSL socket factory that will enforce mutual authentication
|
||||
HttpClient httpClient = constructHttpClient();
|
||||
RequestHeadersHttpClient httpClient = constructHttpClient();
|
||||
// Default port is 443 for the HostFactory, when including customised port (like 8983) the port name is skipped from "getHostURL" string
|
||||
HttpHostFactory hostFactory = new HttpHostFactory(new Protocol("https", sslSocketFactory, HttpsURL.DEFAULT_PORT));
|
||||
httpClient.setHostConfiguration(new HostConfigurationWithHostFactory(hostFactory));
|
||||
@@ -307,28 +362,54 @@ public class HttpClientFactory
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
protected HttpClient getDefaultHttpClient()
|
||||
protected RequestHeadersHttpClient getDefaultHttpClient()
|
||||
{
|
||||
return getDefaultHttpClient(host, port);
|
||||
}
|
||||
|
||||
protected HttpClient getDefaultHttpClient(String httpHost, int httpPort)
|
||||
protected RequestHeadersHttpClient getDefaultHttpClient(String httpHost, int httpPort)
|
||||
{
|
||||
HttpClient httpClient = constructHttpClient();
|
||||
RequestHeadersHttpClient httpClient = constructHttpClient();
|
||||
httpClient.getHostConfiguration().setHost(httpHost, httpPort);
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build HTTP Client using default headers
|
||||
* @return RequestHeadersHttpClient including default header for shared secret method
|
||||
*/
|
||||
protected RequestHeadersHttpClient constructSharedSecretHttpClient()
|
||||
{
|
||||
RequestHeadersHttpClient client = constructHttpClient();
|
||||
client.setDefaultHeaders(Map.of(sharedSecretHeader, sharedSecret));
|
||||
return client;
|
||||
}
|
||||
|
||||
protected RequestHeadersHttpClient getSharedSecretHttpClient()
|
||||
{
|
||||
return getSharedSecretHttpClient(host, port);
|
||||
}
|
||||
|
||||
protected RequestHeadersHttpClient getSharedSecretHttpClient(String httpHost, int httpPort)
|
||||
{
|
||||
RequestHeadersHttpClient httpClient = constructSharedSecretHttpClient();
|
||||
httpClient.getHostConfiguration().setHost(httpHost, httpPort);
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
protected AlfrescoHttpClient getAlfrescoHttpsClient()
|
||||
{
|
||||
AlfrescoHttpClient repoClient = new HttpsClient(getHttpsClient());
|
||||
return repoClient;
|
||||
return new HttpsClient(getHttpsClient());
|
||||
}
|
||||
|
||||
protected AlfrescoHttpClient getAlfrescoHttpClient()
|
||||
{
|
||||
AlfrescoHttpClient repoClient = new DefaultHttpClient(getDefaultHttpClient());
|
||||
return repoClient;
|
||||
return new DefaultHttpClient(getDefaultHttpClient());
|
||||
}
|
||||
|
||||
protected AlfrescoHttpClient getAlfrescoSharedSecretClient()
|
||||
{
|
||||
return new DefaultHttpClient(getSharedSecretHttpClient());
|
||||
}
|
||||
|
||||
protected HttpClient getMD5HttpClient(String host, int port)
|
||||
@@ -341,66 +422,37 @@ public class HttpClientFactory
|
||||
|
||||
public AlfrescoHttpClient getRepoClient(String host, int port)
|
||||
{
|
||||
AlfrescoHttpClient repoClient = null;
|
||||
|
||||
if(secureCommsType == SecureCommsType.HTTPS)
|
||||
switch (secureCommsType)
|
||||
{
|
||||
repoClient = getAlfrescoHttpsClient();
|
||||
case HTTPS: return getAlfrescoHttpsClient();
|
||||
case NONE: return getAlfrescoHttpClient();
|
||||
case SECRET: return getAlfrescoSharedSecretClient();
|
||||
default: throw new AlfrescoRuntimeException("Invalid Solr secure communications type configured in [solr|alfresco].secureComms, should be 'ssl', 'none' or 'secret'");
|
||||
}
|
||||
else if(secureCommsType == SecureCommsType.NONE)
|
||||
}
|
||||
|
||||
public RequestHeadersHttpClient getHttpClient()
|
||||
{
|
||||
switch (secureCommsType)
|
||||
{
|
||||
repoClient = getAlfrescoHttpClient();
|
||||
case HTTPS: return getHttpsClient();
|
||||
case NONE: return getDefaultHttpClient();
|
||||
case SECRET: return getSharedSecretHttpClient();
|
||||
default: throw new AlfrescoRuntimeException("Invalid Solr secure communications type configured in [solr|alfresco].secureComms, should be 'ssl', 'none' or 'secret'");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AlfrescoRuntimeException("Invalid Solr secure communications type configured in alfresco.secureComms, should be 'ssl'or 'none'");
|
||||
}
|
||||
|
||||
return repoClient;
|
||||
}
|
||||
|
||||
public HttpClient getHttpClient()
|
||||
public RequestHeadersHttpClient getHttpClient(String host, int port)
|
||||
{
|
||||
HttpClient httpClient = null;
|
||||
|
||||
if(secureCommsType == SecureCommsType.HTTPS)
|
||||
switch (secureCommsType)
|
||||
{
|
||||
httpClient = getHttpsClient();
|
||||
case HTTPS: return getHttpsClient(host, port);
|
||||
case NONE: return getDefaultHttpClient(host, port);
|
||||
case SECRET: return getSharedSecretHttpClient(host, port);
|
||||
default: throw new AlfrescoRuntimeException("Invalid Solr secure communications type configured in [solr|alfresco].secureComms, should be 'ssl', 'none' or 'secret'");
|
||||
}
|
||||
else if(secureCommsType == SecureCommsType.NONE)
|
||||
{
|
||||
httpClient = getDefaultHttpClient();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AlfrescoRuntimeException("Invalid Solr secure communications type configured in alfresco.secureComms, should be 'ssl'or 'none'");
|
||||
}
|
||||
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
public HttpClient getHttpClient(String host, int port)
|
||||
{
|
||||
HttpClient httpClient = null;
|
||||
|
||||
if(secureCommsType == SecureCommsType.HTTPS)
|
||||
{
|
||||
httpClient = getHttpsClient(host, port);
|
||||
}
|
||||
else if(secureCommsType == SecureCommsType.NONE)
|
||||
{
|
||||
httpClient = getDefaultHttpClient(host, port);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AlfrescoRuntimeException("Invalid Solr secure communications type configured in alfresco.secureComms, should be 'ssl'or 'none'");
|
||||
}
|
||||
|
||||
return httpClient;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A secure client connection to the repository.
|
||||
*
|
||||
|
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2021 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.httpclient;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.httpclient.HostConfiguration;
|
||||
import org.apache.commons.httpclient.HttpClient;
|
||||
import org.apache.commons.httpclient.HttpException;
|
||||
import org.apache.commons.httpclient.HttpMethod;
|
||||
import org.apache.commons.httpclient.HttpState;
|
||||
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
|
||||
|
||||
/**
|
||||
* Since Apache HttpClient 3.1 doesn't support including custom headers by default,
|
||||
* this class is adding that custom headers every time a method is invoked.
|
||||
*/
|
||||
public class RequestHeadersHttpClient extends HttpClient
|
||||
{
|
||||
|
||||
private Map<String, String> defaultHeaders;
|
||||
|
||||
public RequestHeadersHttpClient(MultiThreadedHttpConnectionManager connectionManager)
|
||||
{
|
||||
super(connectionManager);
|
||||
}
|
||||
|
||||
public Map<String, String> getDefaultHeaders()
|
||||
{
|
||||
return defaultHeaders;
|
||||
}
|
||||
|
||||
public void setDefaultHeaders(Map<String, String> defaultHeaders)
|
||||
{
|
||||
this.defaultHeaders = defaultHeaders;
|
||||
}
|
||||
|
||||
private void addDefaultHeaders(HttpMethod method)
|
||||
{
|
||||
if (defaultHeaders != null)
|
||||
{
|
||||
defaultHeaders.forEach((k,v) -> {
|
||||
method.addRequestHeader(k, v);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int executeMethod(HttpMethod method) throws IOException, HttpException
|
||||
{
|
||||
addDefaultHeaders(method);
|
||||
return super.executeMethod(method);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int executeMethod(HostConfiguration hostConfiguration, HttpMethod method) throws IOException, HttpException
|
||||
{
|
||||
addDefaultHeaders(method);
|
||||
return super.executeMethod(hostConfiguration, method);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int executeMethod(HostConfiguration hostconfig, HttpMethod method, HttpState state)
|
||||
throws IOException, HttpException
|
||||
{
|
||||
addDefaultHeaders(method);
|
||||
return super.executeMethod(hostconfig, method, state);
|
||||
}
|
||||
|
||||
}
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
@@ -167,7 +167,7 @@
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.woodstox</groupId>
|
||||
<artifactId>woodstox-core</artifactId>
|
||||
<version>6.2.4</version>
|
||||
<version>6.2.6</version>
|
||||
</dependency>
|
||||
|
||||
<!-- the cxf libs were updated, see dependencyManagement section -->
|
||||
|
@@ -9,6 +9,6 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
</project>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<profiles>
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<modules>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2017 Alfresco Software Limited.
|
||||
* This file is part of Alfresco
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.alfresco.rest.renditions;
|
||||
/**
|
||||
* Handles tests related to api-explorer/#!/versions/createVersionRendition
|
||||
*/
|
||||
|
||||
import org.alfresco.dataprep.CMISUtil.DocumentType;
|
||||
import org.alfresco.rest.RestTest;
|
||||
import org.alfresco.rest.core.RestResponse;
|
||||
import org.alfresco.rest.model.RestRenditionInfoModel;
|
||||
import org.alfresco.rest.model.RestRenditionInfoModelCollection;
|
||||
import org.alfresco.utility.Utility;
|
||||
import org.alfresco.utility.model.FileModel;
|
||||
import org.alfresco.utility.model.SiteModel;
|
||||
import org.alfresco.utility.model.TestGroup;
|
||||
import org.alfresco.utility.model.UserModel;
|
||||
import org.alfresco.utility.testrail.ExecutionType;
|
||||
import org.alfresco.utility.testrail.annotation.TestRail;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import static org.alfresco.utility.report.log.Step.STEP;
|
||||
|
||||
@Test(groups = { TestGroup.RENDITIONS }) public class RenditionVersionTests extends RestTest
|
||||
{
|
||||
private UserModel user;
|
||||
private SiteModel site;
|
||||
private FileModel file;
|
||||
|
||||
@BeforeClass(alwaysRun = true) public void dataPreparation() throws Exception
|
||||
{
|
||||
user = dataUser.createRandomTestUser();
|
||||
site = dataSite.usingUser(user).createPublicRandomSite();
|
||||
file = dataContent.usingUser(user).usingSite(site).createContent(DocumentType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanity test for the following endpoints:
|
||||
* POST /nodes/{nodeId}/versions/{versionId}/rendition
|
||||
* GET /nodes/{nodeId}/versions/{versionId}/renditions
|
||||
* GET /nodes/{nodeId}/versions/{versionId}/renditions/{renditionId}
|
||||
* GET /nodes/{nodeId}/versions/{versionId}/renditions/{renditionId}/content
|
||||
* @throws Exception
|
||||
*/
|
||||
@Test(groups = { TestGroup.REST_API, TestGroup.RENDITIONS, TestGroup.SANITY }) @TestRail(section = {
|
||||
TestGroup.REST_API,
|
||||
TestGroup.RENDITIONS }, executionType = ExecutionType.SANITY, description = "Verify that the rendition can be created using POST /nodes/{nodeId}/versions/{versionId}/rendition") public void testRenditionForNodeVersions()
|
||||
throws Exception
|
||||
{
|
||||
File sampleFile = Utility.getResourceTestDataFile("sampleContent.txt");
|
||||
|
||||
STEP("1. Update the node content in order to increase version, PUT /nodes/{nodeId}/content.");
|
||||
// version update
|
||||
restClient.authenticateUser(user).withCoreAPI().usingNode(file).updateNodeContent(sampleFile);
|
||||
restClient.assertStatusCodeIs(HttpStatus.OK);
|
||||
|
||||
STEP("2. Create the pdf rendition of txt file using RESTAPI");
|
||||
restClient.withCoreAPI().usingNode(file).createNodeVersionRendition("pdf", "1.1");
|
||||
restClient.assertStatusCodeIs(HttpStatus.ACCEPTED);
|
||||
|
||||
STEP("3. Verify pdf rendition of txt file is created");
|
||||
restClient.withCoreAPI().usingNode(file).getNodeVersionRenditionUntilIsCreated("pdf", "1.1").assertThat()
|
||||
.field("status").is("CREATED");
|
||||
|
||||
STEP("4. Verify pdf rendition of txt file is listed");
|
||||
RestRenditionInfoModelCollection renditionInfoModelCollection = restClient.withCoreAPI().usingNode(file)
|
||||
.getNodeVersionRenditionsInfo("1.1");
|
||||
restClient.assertStatusCodeIs(HttpStatus.OK);
|
||||
for (RestRenditionInfoModel restRenditionInfoModel : renditionInfoModelCollection.getEntries())
|
||||
{
|
||||
RestRenditionInfoModel renditionInfo = restRenditionInfoModel.onModel();
|
||||
String renditionId = renditionInfo.getId();
|
||||
if (renditionId == "pdf")
|
||||
{
|
||||
renditionInfo.assertThat().field("status").is("CREATED");
|
||||
}
|
||||
}
|
||||
|
||||
STEP("5. Verify pdf rendition of txt file has content");
|
||||
RestResponse restResponse = restClient.withCoreAPI().usingNode(file)
|
||||
.getNodeVersionRenditionContentUntilIsCreated("pdf", "1.1");
|
||||
restClient.assertStatusCodeIs(HttpStatus.OK);
|
||||
restClient.assertHeaderValueContains("Content-Type", "application/pdf;charset=UTF-8");
|
||||
Assert.assertTrue(restResponse.getResponse().body().asInputStream().available() > 0);
|
||||
}
|
||||
|
||||
}
|
@@ -9,7 +9,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-tests</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<developers>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo-packaging</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
|
34
pom.xml
34
pom.xml
@@ -2,7 +2,7 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>Alfresco Community Repo Parent</name>
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
|
||||
<properties>
|
||||
<acs.version.major>7</acs.version.major>
|
||||
<acs.version.minor>0</acs.version.minor>
|
||||
<acs.version.revision>1</acs.version.revision>
|
||||
<acs.version.minor>1</acs.version.minor>
|
||||
<acs.version.revision>0</acs.version.revision>
|
||||
<acs.version.label />
|
||||
|
||||
<version.edition>Community</version.edition>
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
<dependency.alfresco-hb-data-sender.version>1.0.12</dependency.alfresco-hb-data-sender.version>
|
||||
<dependency.alfresco-mmt.version>6.0</dependency.alfresco-mmt.version>
|
||||
<dependency.alfresco-trashcan-cleaner.version>2.3</dependency.alfresco-trashcan-cleaner.version>
|
||||
<dependency.alfresco-trashcan-cleaner.version>2.4</dependency.alfresco-trashcan-cleaner.version>
|
||||
<dependency.alfresco-jlan.version>7.1</dependency.alfresco-jlan.version>
|
||||
<dependency.alfresco-server-root.version>6.0.1</dependency.alfresco-server-root.version>
|
||||
<dependency.alfresco-messaging-repo.version>1.2.15</dependency.alfresco-messaging-repo.version>
|
||||
@@ -55,14 +55,14 @@
|
||||
|
||||
<dependency.spring.version>5.3.3</dependency.spring.version>
|
||||
<dependency.antlr.version>3.5.2</dependency.antlr.version>
|
||||
<dependency.jackson.version>2.12.1</dependency.jackson.version>
|
||||
<dependency.jackson.version>2.12.2</dependency.jackson.version>
|
||||
<dependency.jackson-databind.version>${dependency.jackson.version}</dependency.jackson-databind.version>
|
||||
<dependency.cxf.version>3.4.2</dependency.cxf.version>
|
||||
<dependency.cxf.version>3.4.3</dependency.cxf.version>
|
||||
<dependency.opencmis.version>1.0.0</dependency.opencmis.version>
|
||||
<dependency.webscripts.version>8.18</dependency.webscripts.version>
|
||||
<dependency.bouncycastle.version>1.68</dependency.bouncycastle.version>
|
||||
<dependency.mockito-core.version>3.8.0</dependency.mockito-core.version>
|
||||
<dependency.org-json.version>20201115</dependency.org-json.version>
|
||||
<dependency.mockito-core.version>3.9.0</dependency.mockito-core.version>
|
||||
<dependency.org-json.version>20210307</dependency.org-json.version>
|
||||
<dependency.commons-dbcp.version>1.4-DBCP330</dependency.commons-dbcp.version>
|
||||
<dependency.commons-io.version>2.8.0</dependency.commons-io.version>
|
||||
<dependency.gson.version>2.8.5</dependency.gson.version>
|
||||
@@ -73,14 +73,14 @@
|
||||
<dependency.slf4j.version>1.7.30</dependency.slf4j.version>
|
||||
<dependency.gytheio.version>0.12</dependency.gytheio.version>
|
||||
<dependency.groovy.version>2.5.9</dependency.groovy.version>
|
||||
<dependency.tika.version>1.25</dependency.tika.version>
|
||||
<dependency.tika.version>1.26</dependency.tika.version>
|
||||
<dependency.spring-security.version>5.4.1</dependency.spring-security.version>
|
||||
<dependency.truezip.version>7.7.10</dependency.truezip.version>
|
||||
<dependency.poi.version>4.1.2</dependency.poi.version>
|
||||
<dependency.ooxml-schemas.version>1.4</dependency.ooxml-schemas.version>
|
||||
<dependency.keycloak.version>11.0.0-alfresco-001</dependency.keycloak.version>
|
||||
<dependency.jboss.logging.version>3.4.1.Final</dependency.jboss.logging.version>
|
||||
<dependency.camel.version>3.7.0</dependency.camel.version>
|
||||
<dependency.camel.version>3.7.1</dependency.camel.version>
|
||||
<dependency.activemq.version>5.16.1</dependency.activemq.version>
|
||||
<dependency.apache.taglibs.version>1.2.5</dependency.apache.taglibs.version>
|
||||
<dependency.awaitility.version>4.0.3</dependency.awaitility.version>
|
||||
@@ -96,16 +96,16 @@
|
||||
<dependency.jakarta-json-api.version>1.1.6</dependency.jakarta-json-api.version>
|
||||
<dependency.jakarta-rpc-api.version>1.1.4</dependency.jakarta-rpc-api.version>
|
||||
|
||||
<alfresco.googledrive.version>3.2.1</alfresco.googledrive.version>
|
||||
<alfresco.googledrive.version>3.2.1.3</alfresco.googledrive.version>
|
||||
<alfresco.aos-module.version>1.4.0</alfresco.aos-module.version>
|
||||
|
||||
<dependency.postgresql.version>42.2.19</dependency.postgresql.version>
|
||||
<dependency.mysql.version>8.0.23</dependency.mysql.version>
|
||||
<dependency.mariadb.version>2.7.2</dependency.mariadb.version>
|
||||
<dependency.tas-utility.version>3.0.43</dependency.tas-utility.version>
|
||||
<dependency.tas-utility.version>3.0.44</dependency.tas-utility.version>
|
||||
<dependency.rest-assured.version>3.3.0</dependency.rest-assured.version>
|
||||
<dependency.tas-restapi.version>1.56</dependency.tas-restapi.version>
|
||||
<dependency.tas-cmis.version>1.27</dependency.tas-cmis.version>
|
||||
<dependency.tas-restapi.version>1.58</dependency.tas-restapi.version>
|
||||
<dependency.tas-cmis.version>1.29</dependency.tas-cmis.version>
|
||||
<dependency.tas-email.version>1.8</dependency.tas-email.version>
|
||||
<dependency.tas-webdav.version>1.6</dependency.tas-webdav.version>
|
||||
<dependency.tas-ftp.version>1.5</dependency.tas-ftp.version>
|
||||
@@ -116,7 +116,7 @@
|
||||
<connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection>
|
||||
<developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection>
|
||||
<url>https://github.com/Alfresco/alfresco-community-repo</url>
|
||||
<tag>9.1</tag>
|
||||
<tag>11.21</tag>
|
||||
</scm>
|
||||
|
||||
<distributionManagement>
|
||||
@@ -679,7 +679,7 @@
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>2.10.9</version>
|
||||
<version>2.10.10</version>
|
||||
</dependency>
|
||||
|
||||
<!-- provided dependencies -->
|
||||
@@ -694,7 +694,7 @@
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13</version>
|
||||
<version>4.13.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
@@ -25,21 +25,18 @@
|
||||
*/
|
||||
package org.alfresco.repo.web.scripts.solr;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpServletResponseWrapper;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.httpclient.HttpClientFactory;
|
||||
import org.alfresco.repo.web.filter.beans.DependencyInjectedFilter;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -88,9 +85,7 @@ public class SOLRAuthenticationFilter implements DependencyInjectedFilter, Initi
|
||||
|
||||
private String sharedSecret;
|
||||
|
||||
private String sharedSecretHeader = DEFAULT_SHAREDSECRET_HEADER;
|
||||
|
||||
private static final String DEFAULT_SHAREDSECRET_HEADER = "X-Alfresco-Search-Secret";
|
||||
private String sharedSecretHeader = HttpClientFactory.DEFAULT_SHAREDSECRET_HEADER;
|
||||
|
||||
public void setSecureComms(String type)
|
||||
{
|
||||
|
@@ -31,6 +31,7 @@ import java.util.Properties;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.alfresco.httpclient.HttpClientFactory.SecureCommsType;
|
||||
import org.alfresco.web.scripts.servlet.X509ServletFilterBase;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -70,7 +71,9 @@ public class AlfrescoX509ServletFilter extends X509ServletFilterBase
|
||||
* Return true or false based on the property. This will switch on/off X509 enforcement in the X509ServletFilterBase.
|
||||
*/
|
||||
|
||||
if (prop == null || "none".equals(prop))
|
||||
if (prop == null ||
|
||||
SecureCommsType.getType(prop) == SecureCommsType.NONE ||
|
||||
SecureCommsType.getType(prop) == SecureCommsType.SECRET)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@@ -4,31 +4,71 @@
|
||||
|
||||
<#macro dateFormat date>${date?string("dd MMM yyyy HH:mm:ss 'GMT'Z '('zzz')'")}</#macro>
|
||||
<#macro propValue p>
|
||||
<#if p.value??>
|
||||
<#if p.value?is_date>
|
||||
<@dateFormat p.value />
|
||||
<#elseif p.value?is_boolean>
|
||||
${p.value?string}
|
||||
<#elseif p.value?is_number>
|
||||
${p.value?c}
|
||||
<#elseif p.value?is_string>
|
||||
${p.value?html}
|
||||
<#elseif p.value?is_hash>
|
||||
<#assign result = "{"/>
|
||||
<#assign first = true />
|
||||
<#list p.value?keys as key>
|
||||
<#if first = false>
|
||||
<#assign result = result + ", "/>
|
||||
<#attempt>
|
||||
<#if p.value??>
|
||||
<#if p.value?is_date>
|
||||
<@dateFormat p.value />
|
||||
<#elseif p.value?is_boolean>
|
||||
${p.value?string}
|
||||
<#elseif p.value?is_number>
|
||||
${p.value?c}
|
||||
<#elseif p.value?is_string>
|
||||
${p.value?html}
|
||||
<#elseif p.value?is_hash || p.value?is_enumerable>
|
||||
<@convertToJSON p.value />
|
||||
</#if>
|
||||
<#else>
|
||||
${null}
|
||||
</#if>
|
||||
<#recover>
|
||||
<span style="color:red">${.error}</span>
|
||||
</#attempt>
|
||||
</#macro>
|
||||
<#macro convertToJSON v>
|
||||
<#attempt>
|
||||
<#if v??>
|
||||
<#if v?is_date>
|
||||
<@dateFormat v />
|
||||
<#elseif v?is_boolean>
|
||||
${v?string}
|
||||
<#elseif v?is_number>
|
||||
${v?c}
|
||||
<#elseif v?is_string>
|
||||
"${v?string}"
|
||||
<#elseif v?is_hash>
|
||||
<@compress single_line=true>
|
||||
{
|
||||
<#assign first = true />
|
||||
<#list v?keys as key>
|
||||
<#if first = false>,</#if>
|
||||
"${key}":
|
||||
<#if v[key]??>
|
||||
<@convertToJSON v[key] />
|
||||
<#else>
|
||||
${null}
|
||||
</#if>
|
||||
<#assign first = false/>
|
||||
</#list>
|
||||
}
|
||||
</@compress>
|
||||
<#elseif v?is_enumerable>
|
||||
<#assign first = true />
|
||||
<@compress single_line=true>
|
||||
[
|
||||
<#list v as item>
|
||||
<#if first = false>,</#if>
|
||||
<@convertToJSON item />
|
||||
<#assign first = false/>
|
||||
</#list>
|
||||
]
|
||||
</@compress>
|
||||
</#if>
|
||||
<#assign result = result + "${key}=${p.value[key]?html}" />
|
||||
<#assign first = false/>
|
||||
</#list>
|
||||
<#assign result = result + "}"/>
|
||||
${result}
|
||||
</#if>
|
||||
<#else>
|
||||
${null}
|
||||
</#if>
|
||||
<#else>
|
||||
${null}
|
||||
</#if>
|
||||
<#recover>
|
||||
<span style="color:red">${.error}</span>
|
||||
</#attempt>
|
||||
</#macro>
|
||||
<#macro contentUrl nodeRef prop>
|
||||
${url.serviceContext}/api/node/${nodeRef?replace("://","/")}/content;${prop?url}
|
||||
|
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>org.alfresco</groupId>
|
||||
<artifactId>alfresco-community-repo</artifactId>
|
||||
<version>9.1</version>
|
||||
<version>11.21</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
@@ -82,7 +82,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>3.11</version>
|
||||
<version>3.12.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
@@ -191,7 +191,7 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-artifact</artifactId>
|
||||
<version>3.6.3</version>
|
||||
<version>3.8.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>de.schlichtherle.truezip</groupId>
|
||||
@@ -383,7 +383,7 @@
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.woodstox</groupId>
|
||||
<artifactId>woodstox-core</artifactId>
|
||||
<version>6.2.4</version>
|
||||
<version>6.2.6</version>
|
||||
</dependency>
|
||||
|
||||
<!-- GData -->
|
||||
@@ -810,7 +810,7 @@
|
||||
<dependency>
|
||||
<groupId>commons-net</groupId>
|
||||
<artifactId>commons-net</artifactId>
|
||||
<version>3.7.2</version>
|
||||
<version>3.8.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@@ -865,6 +865,12 @@
|
||||
<version>${dependency.awaitility.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.reflections</groupId>
|
||||
<artifactId>reflections</artifactId>
|
||||
<version>0.9.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@@ -40,6 +40,7 @@ public class IdsEntity
|
||||
private Long idThree;
|
||||
private Long idFour;
|
||||
private List<Long> ids;
|
||||
private boolean ordered;
|
||||
public Long getIdOne()
|
||||
{
|
||||
return idOne;
|
||||
@@ -80,4 +81,12 @@ public class IdsEntity
|
||||
{
|
||||
this.ids = ids;
|
||||
}
|
||||
public boolean isOrdered()
|
||||
{
|
||||
return ordered;
|
||||
}
|
||||
public void setOrdered(boolean ordered)
|
||||
{
|
||||
this.ordered = ordered;
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -40,7 +40,8 @@ public class SchemaUpgradeScriptPatch extends AbstractPatch
|
||||
{
|
||||
private static final String MSG_NOT_EXECUTED = "patch.schemaUpgradeScript.err.not_executed";
|
||||
|
||||
private String scriptUrl;
|
||||
private String scriptUrl;
|
||||
private String problemsPatternFileUrl;
|
||||
|
||||
public SchemaUpgradeScriptPatch()
|
||||
{
|
||||
@@ -52,8 +53,13 @@ public class SchemaUpgradeScriptPatch extends AbstractPatch
|
||||
public String getScriptUrl()
|
||||
{
|
||||
return scriptUrl;
|
||||
}
|
||||
}
|
||||
|
||||
public String getProblemPatternsFileUrl()
|
||||
{
|
||||
return problemsPatternFileUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the URL of the upgrade scriptUrl to execute. This is the full URL of the
|
||||
* file, e.g. <b>classpath:alfresco/patch/scripts/upgrade-1.4/${hibernate.dialect.class}/patchAlfrescoSchemaUpdate-1.4-2.sql</b>
|
||||
@@ -65,12 +71,25 @@ public class SchemaUpgradeScriptPatch extends AbstractPatch
|
||||
public void setScriptUrl(String script)
|
||||
{
|
||||
this.scriptUrl = script;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the URL of the problems pattern file to accompany the upgrade script. This is the full URL of the
|
||||
* file, e.g. <b>classpath:alfresco/patch/scripts/upgrade-1.4/${hibernate.dialect.class}/patchAlfrescoSchemaUpdate-1.4-2-problems.txt</b>
|
||||
* where the <b>${hibernate.dialect.class}</b> placeholder will be substituted with the Hibernate
|
||||
* <code>Dialect</code> as configured for the system.
|
||||
*
|
||||
* @param problemsFile the problems file
|
||||
*/
|
||||
public void setProblemsPatternFileUrl(String problemsFile)
|
||||
{
|
||||
this.problemsPatternFileUrl = problemsFile;
|
||||
}
|
||||
|
||||
protected void checkProperties()
|
||||
{
|
||||
super.checkProperties();
|
||||
checkPropertyNotNull(scriptUrl, "scriptUrl");
|
||||
checkPropertyNotNull(scriptUrl, "scriptUrl");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,6 +98,6 @@ public class SchemaUpgradeScriptPatch extends AbstractPatch
|
||||
@Override
|
||||
protected String applyInternal() throws Exception
|
||||
{
|
||||
throw new PatchException(MSG_NOT_EXECUTED, scriptUrl);
|
||||
}
|
||||
throw new PatchException(MSG_NOT_EXECUTED, scriptUrl);
|
||||
}
|
||||
}
|
||||
|
@@ -563,6 +563,7 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
Long txnId = txn.getId();
|
||||
// Update it
|
||||
Long now = System.currentTimeMillis();
|
||||
txn.setCommitTimeMs(now);
|
||||
updateTransaction(txnId, now);
|
||||
}
|
||||
}
|
||||
@@ -604,6 +605,17 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
return txn;
|
||||
}
|
||||
|
||||
public Long getCurrentTransactionCommitTime()
|
||||
{
|
||||
Long commitTime = null;
|
||||
TransactionEntity resource = AlfrescoTransactionSupport.getResource(KEY_TRANSACTION);
|
||||
if(resource != null)
|
||||
{
|
||||
commitTime = resource.getCommitTimeMs();
|
||||
}
|
||||
return commitTime;
|
||||
}
|
||||
|
||||
public Long getCurrentTransactionId(boolean ensureNew)
|
||||
{
|
||||
TransactionEntity txn;
|
||||
@@ -2756,6 +2768,22 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
selectNodesWithAspects(qnameIds, minNodeId, maxNodeId, resultsCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getNodesWithAspects(
|
||||
Set<QName> aspectQNames,
|
||||
Long minNodeId, Long maxNodeId, boolean ordered,
|
||||
NodeRefQueryCallback resultsCallback)
|
||||
{
|
||||
Set<Long> qnameIdsSet = qnameDAO.convertQNamesToIds(aspectQNames, false);
|
||||
if (qnameIdsSet.size() == 0)
|
||||
{
|
||||
// No point running a query
|
||||
return;
|
||||
}
|
||||
List<Long> qnameIds = new ArrayList<Long>(qnameIdsSet);
|
||||
selectNodesWithAspects(qnameIds, minNodeId, maxNodeId, ordered, resultsCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns a writable copy of the cached aspects set
|
||||
*/
|
||||
@@ -4927,6 +4955,10 @@ public abstract class AbstractNodeDAOImpl implements NodeDAO, BatchingDAO
|
||||
List<Long> qnameIds,
|
||||
Long minNodeId, Long maxNodeId,
|
||||
NodeRefQueryCallback resultsCallback);
|
||||
protected abstract void selectNodesWithAspects(
|
||||
List<Long> qnameIds,
|
||||
Long minNodeId, Long maxNodeId, boolean ordered,
|
||||
NodeRefQueryCallback resultsCallback);
|
||||
protected abstract Long insertNodeAssoc(Long sourceNodeId, Long targetNodeId, Long assocTypeQNameId, int assocIndex);
|
||||
protected abstract int updateNodeAssoc(Long id, int assocIndex);
|
||||
protected abstract int deleteNodeAssoc(Long sourceNodeId, Long targetNodeId, Long assocTypeQNameId);
|
||||
|
@@ -75,6 +75,13 @@ public interface NodeDAO extends NodeBulkLoader
|
||||
/*
|
||||
* Transaction
|
||||
*/
|
||||
|
||||
/**
|
||||
* @return the commit time of the current transaction entry or <tt>null</tt> if
|
||||
* there have not been any modifications to nodes registered in the
|
||||
* transaction.
|
||||
*/
|
||||
Long getCurrentTransactionCommitTime();
|
||||
|
||||
/**
|
||||
* @param ensureNew <tt>true</tt> to ensure that a new transaction entry is created
|
||||
@@ -405,6 +412,20 @@ public interface NodeDAO extends NodeBulkLoader
|
||||
Long minNodeId, Long maxNodeId,
|
||||
NodeRefQueryCallback resultsCallback);
|
||||
|
||||
/**
|
||||
* Get nodes with aspects between the given ranges, ordering the results optionally
|
||||
*
|
||||
* @param aspectQNames the aspects that must be on the nodes
|
||||
* @param minNodeId the minimum node ID (inclusive)
|
||||
* @param maxNodeId the maximum node ID (exclusive)
|
||||
* @param ordered if the results are to be ordered by nodeID
|
||||
* @param resultsCallback callback to process results
|
||||
*/
|
||||
public void getNodesWithAspects(
|
||||
Set<QName> aspectQNames,
|
||||
Long minNodeId, Long maxNodeId, boolean ordered,
|
||||
NodeRefQueryCallback resultsCallback);
|
||||
|
||||
/*
|
||||
* Node Assocs
|
||||
*/
|
||||
@@ -913,14 +934,14 @@ public interface NodeDAO extends NodeBulkLoader
|
||||
* @param toNodeId Final node id
|
||||
* @return maximum commit time
|
||||
*/
|
||||
public Long getMaxTxInNodeIdRange(Long fromNodeId, Long toNodeId);
|
||||
|
||||
/**
|
||||
* Gets the next commit time from [fromCommitTime]
|
||||
*
|
||||
* @param fromCommitTime Initial commit time
|
||||
* @return next commit time
|
||||
*/
|
||||
public Long getMaxTxInNodeIdRange(Long fromNodeId, Long toNodeId);
|
||||
|
||||
/**
|
||||
* Gets the next commit time from [fromCommitTime]
|
||||
*
|
||||
* @param fromCommitTime Initial commit time
|
||||
* @return next commit time
|
||||
*/
|
||||
public Long getNextTxCommitTime(Long fromCommitTime);
|
||||
|
||||
|
||||
}
|
||||
|
@@ -764,6 +764,31 @@ public class NodeDAOImpl extends AbstractNodeDAOImpl
|
||||
template.select(SELECT_NODES_WITH_ASPECT_IDS, parameters, resultHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void selectNodesWithAspects(
|
||||
List<Long> qnameIds,
|
||||
Long minNodeId, Long maxNodeId, boolean ordered,
|
||||
final NodeRefQueryCallback resultsCallback)
|
||||
{
|
||||
@SuppressWarnings("rawtypes")
|
||||
ResultHandler resultHandler = new ResultHandler()
|
||||
{
|
||||
public void handleResult(ResultContext context)
|
||||
{
|
||||
NodeEntity entity = (NodeEntity) context.getResultObject();
|
||||
Pair<Long, NodeRef> nodePair = new Pair<Long, NodeRef>(entity.getId(), entity.getNodeRef());
|
||||
resultsCallback.handle(nodePair);
|
||||
}
|
||||
};
|
||||
|
||||
IdsEntity parameters = new IdsEntity();
|
||||
parameters.setIdOne(minNodeId);
|
||||
parameters.setIdTwo(maxNodeId);
|
||||
parameters.setIds(qnameIds);
|
||||
parameters.setOrdered(ordered);
|
||||
template.select(SELECT_NODES_WITH_ASPECT_IDS, parameters, resultHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Long insertNodeAssoc(Long sourceNodeId, Long targetNodeId, Long assocTypeQNameId, int assocIndex)
|
||||
{
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.permissions;
|
||||
|
||||
import java.util.List;
|
||||
@@ -182,4 +182,11 @@ public interface AclDAO
|
||||
* @return Long
|
||||
*/
|
||||
public Long getMaxChangeSetIdByCommitTime(long maxCommitTime);
|
||||
|
||||
/**
|
||||
* @return the commit time of the current ACL change set entry or <tt>null</tt> if
|
||||
* there have not been any modifications.
|
||||
*/
|
||||
public Long getCurrentChangeSetCommitTime();
|
||||
|
||||
}
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.permissions;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -1637,6 +1637,7 @@ public class AclDAOImpl implements AclDAO
|
||||
}
|
||||
|
||||
private static final String RESOURCE_KEY_ACL_CHANGE_SET_ID = "acl.change.set.id";
|
||||
private static final String RESOURCE_KEY_ACL_CHANGE_SET_COMMIT_TIME_MS = "acl.change.commit.set.time.ms";
|
||||
|
||||
private UpdateChangeSetListener updateChangeSetListener = new UpdateChangeSetListener();
|
||||
/**
|
||||
@@ -1662,9 +1663,17 @@ public class AclDAOImpl implements AclDAO
|
||||
}
|
||||
// Update it
|
||||
long commitTimeMs = System.currentTimeMillis();
|
||||
AlfrescoTransactionSupport.bindResource(RESOURCE_KEY_ACL_CHANGE_SET_COMMIT_TIME_MS, commitTimeMs);
|
||||
aclCrudDAO.updateAclChangeSet(changeSetId, commitTimeMs);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getCurrentChangeSetCommitTime()
|
||||
{
|
||||
return AlfrescoTransactionSupport.getResource(RESOURCE_KEY_ACL_CHANGE_SET_COMMIT_TIME_MS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Support to get the current ACL change set and bind this to the transaction. So we only make one new version of an
|
||||
* ACL per change set. If something is in the current change set we can update it.
|
||||
|
@@ -35,6 +35,8 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.batch.BatchProcessWorkProvider;
|
||||
import org.alfresco.repo.batch.BatchProcessor;
|
||||
@@ -83,13 +85,16 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
|
||||
public static final String FIXED_ACL_ASYNC_REQUIRED_KEY = "FIXED_ACL_ASYNC_REQUIRED";
|
||||
public static final String FIXED_ACL_ASYNC_CALL_KEY = "FIXED_ACL_ASYNC_CALL";
|
||||
protected static final QName LOCK_Q_NAME = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "FixedAclUpdater");
|
||||
|
||||
/** A set of listeners to receive callback events whenever permissions are updated by this class. */
|
||||
private static Set<FixedAclUpdaterListener> listeners = Sets.newConcurrentHashSet();
|
||||
|
||||
private ApplicationContext applicationContext;
|
||||
private JobLockService jobLockService;
|
||||
private TransactionService transactionService;
|
||||
private AccessControlListDAO accessControlListDAO;
|
||||
private NodeDAO nodeDAO;
|
||||
private QName lockQName = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "FixedAclUpdater");
|
||||
private long lockTimeToLive = 10000;
|
||||
private long lockRefreshTime = lockTimeToLive / 2;
|
||||
|
||||
@@ -158,6 +163,12 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
this.policyIgnoreUtil = policyIgnoreUtil;
|
||||
}
|
||||
|
||||
/** Register a {@link FixedAclUpdaterListener} to be notified when a node is updated by an instance of this class. */
|
||||
public static void registerListener(FixedAclUpdaterListener listener)
|
||||
{
|
||||
listeners.add(listener);
|
||||
}
|
||||
|
||||
public void init()
|
||||
{
|
||||
onInheritPermissionsDisabledDelegate = policyComponent
|
||||
@@ -192,7 +203,7 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
public List<NodeRef> execute() throws Throwable
|
||||
{
|
||||
getNodesCallback.init();
|
||||
nodeDAO.getNodesWithAspects(aspects, getNodesCallback.getMinNodeId(), null, getNodesCallback);
|
||||
nodeDAO.getNodesWithAspects(aspects, getNodesCallback.getMinNodeId(), null, true, getNodesCallback);
|
||||
getNodesCallback.done();
|
||||
|
||||
return getNodesCallback.getNodes();
|
||||
@@ -241,7 +252,7 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
}
|
||||
}
|
||||
|
||||
private class AclWorker implements BatchProcessor.BatchProcessWorker<NodeRef>
|
||||
protected class AclWorker implements BatchProcessor.BatchProcessWorker<NodeRef>
|
||||
{
|
||||
private Set<QName> aspects = new HashSet<>(1);
|
||||
|
||||
@@ -315,6 +326,8 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
listeners.forEach(listener -> listener.permissionsUpdatedAsynchronously(nodeRef));
|
||||
|
||||
if (log.isDebugEnabled())
|
||||
{
|
||||
log.debug(String.format("Node processed %s", nodeRef));
|
||||
@@ -330,7 +343,13 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
};
|
||||
|
||||
|
||||
private class GetNodesWithAspectCallback implements NodeRefQueryCallback
|
||||
/** Create a new AclWorker. */
|
||||
protected AclWorker createAclWorker()
|
||||
{
|
||||
return new AclWorker();
|
||||
}
|
||||
|
||||
class GetNodesWithAspectCallback implements NodeRefQueryCallback
|
||||
{
|
||||
private List<NodeRef> nodes = new ArrayList<>();
|
||||
private long minNodeId;
|
||||
@@ -421,11 +440,11 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
|
||||
try
|
||||
{
|
||||
lockToken = jobLockService.getLock(lockQName, lockTimeToLive, 0, 1);
|
||||
jobLockService.refreshLock(lockToken, lockQName, lockRefreshTime, jobLockRefreshCallback);
|
||||
lockToken = jobLockService.getLock(LOCK_Q_NAME, lockTimeToLive, 0, 1);
|
||||
jobLockService.refreshLock(lockToken, LOCK_Q_NAME, lockRefreshTime, jobLockRefreshCallback);
|
||||
|
||||
AclWorkProvider provider = new AclWorkProvider();
|
||||
AclWorker worker = new AclWorker();
|
||||
AclWorker worker = createAclWorker();
|
||||
BatchProcessor<NodeRef> bp = new BatchProcessor<>("FixedAclUpdater",
|
||||
transactionService.getRetryingTransactionHelper(), provider, numThreads, maxItemBatchSize, applicationContext,
|
||||
log, 100);
|
||||
@@ -442,7 +461,7 @@ public class FixedAclUpdater extends TransactionListenerAdapter implements Appli
|
||||
jobLockRefreshCallback.isActive.set(false);
|
||||
if (lockToken != null)
|
||||
{
|
||||
jobLockService.releaseLock(lockToken, lockQName);
|
||||
jobLockService.releaseLock(lockToken, LOCK_Q_NAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.permissions;
|
||||
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
|
||||
/** Listener to receive callback events when permissions are asynchronously updated with the {@link FixedAclUpdater}. */
|
||||
public interface FixedAclUpdaterListener
|
||||
{
|
||||
/** Callback method for when permissions have been updated by the FixedAclUpdater. */
|
||||
void permissionsUpdatedAsynchronously(NodeRef nodeRef);
|
||||
}
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -85,12 +85,14 @@ import org.alfresco.util.DialectUtil;
|
||||
import org.alfresco.util.LogUtil;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.alfresco.util.schemacomp.Difference;
|
||||
import org.alfresco.util.schemacomp.ExportDb;
|
||||
import org.alfresco.util.schemacomp.MultiFileDumper;
|
||||
import org.alfresco.util.schemacomp.MultiFileDumper.DbToXMLFactory;
|
||||
import org.alfresco.util.schemacomp.Result;
|
||||
import org.alfresco.util.schemacomp.Results;
|
||||
import org.alfresco.util.schemacomp.SchemaComparator;
|
||||
import org.alfresco.util.schemacomp.SchemaDifferenceHelper;
|
||||
import org.alfresco.util.schemacomp.XMLToSchema;
|
||||
import org.alfresco.util.schemacomp.model.Schema;
|
||||
import org.apache.commons.logging.Log;
|
||||
@@ -124,6 +126,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
private static final String MSG_EXECUTING_COPIED_SCRIPT = "schema.update.msg.executing_copied_script";
|
||||
private static final String MSG_EXECUTING_STATEMENT = "schema.update.msg.executing_statement";
|
||||
private static final String MSG_OPTIONAL_STATEMENT_FAILED = "schema.update.msg.optional_statement_failed";
|
||||
private static final String MSG_OPTIONAL_PATCH_RUN_SUGGESTION = "system.schema_comp.patch_run_suggestion";
|
||||
private static final String ERR_FORCED_STOP = "schema.update.err.forced_stop";
|
||||
private static final String ERR_MULTIPLE_SCHEMAS = "schema.update.err.found_multiple";
|
||||
private static final String ERR_PREVIOUS_FAILED_BOOTSTRAP = "schema.update.err.previous_failed";
|
||||
@@ -153,7 +156,8 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
|
||||
private static volatile int maxStringLength = DEFAULT_MAX_STRING_LENGTH;
|
||||
private Dialect dialect;
|
||||
|
||||
private SchemaDifferenceHelper differenceHelper;
|
||||
|
||||
private ResourcePatternResolver rpr = new PathMatchingResourcePatternResolver(this.getClass().getClassLoader());
|
||||
|
||||
/**
|
||||
@@ -233,6 +237,11 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
this.dialect = dialect;
|
||||
}
|
||||
|
||||
public void setDifferenceHelper(SchemaDifferenceHelper differenceHelper)
|
||||
{
|
||||
this.differenceHelper = differenceHelper;
|
||||
}
|
||||
|
||||
private static Log logger = LogFactory.getLog(SchemaBootstrap.class);
|
||||
|
||||
private DescriptorService descriptorService;
|
||||
@@ -1815,7 +1824,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
// Return number of problems found across all reference files.
|
||||
return totalProblems;
|
||||
}
|
||||
|
||||
|
||||
private int validateSchema(Resource referenceResource, String outputFileNameTemplate, PrintWriter out)
|
||||
{
|
||||
try
|
||||
@@ -1916,11 +1925,42 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
pw = out;
|
||||
}
|
||||
|
||||
Map<String, List<String>> optionalPatchMessages = new HashMap<>();
|
||||
// Populate the file with details of the comparison's results.
|
||||
for (Result result : results)
|
||||
{
|
||||
pw.print(result.describe());
|
||||
String optionalPatchId = findPatchCausingDifference(result, target);
|
||||
String differenceMessage = result.describe();
|
||||
if (optionalPatchId == null)
|
||||
{
|
||||
pw.print(differenceMessage);
|
||||
pw.print(SchemaComparator.LINE_SEPARATOR);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (optionalPatchMessages.containsKey(optionalPatchId))
|
||||
{
|
||||
optionalPatchMessages.get(optionalPatchId).add(differenceMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
List<String> newResults = new ArrayList<>();
|
||||
newResults.add(differenceMessage);
|
||||
optionalPatchMessages.put(optionalPatchId, newResults);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (String optionalPatchId: optionalPatchMessages.keySet())
|
||||
{
|
||||
pw.print(SchemaComparator.LINE_SEPARATOR);
|
||||
pw.print(I18NUtil.getMessage(MSG_OPTIONAL_PATCH_RUN_SUGGESTION, optionalPatchId));
|
||||
pw.print(SchemaComparator.LINE_SEPARATOR);
|
||||
for (String optionalPatchMessage: optionalPatchMessages.get(optionalPatchId))
|
||||
{
|
||||
pw.print(optionalPatchMessage);
|
||||
pw.print(SchemaComparator.LINE_SEPARATOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
@@ -1946,7 +1986,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
}
|
||||
else
|
||||
{
|
||||
LogUtil.warn(logger, WARN_SCHEMA_COMP_PROBLEMS_FOUND, numProblems, outputFile);
|
||||
LogUtil.warn(logger, WARN_SCHEMA_COMP_PROBLEMS_FOUND, numProblems, outputFile);
|
||||
}
|
||||
}
|
||||
Date endTime = new Date();
|
||||
@@ -1956,6 +1996,17 @@ public class SchemaBootstrap extends AbstractLifecycleBean
|
||||
return results.size();
|
||||
}
|
||||
|
||||
private String findPatchCausingDifference(Result result, Schema currentDb)
|
||||
{
|
||||
// In new installations of the system the schema validation is run twice. Since none of the alf_ tables is present there is no need to seek for unapplied patches.
|
||||
if (!currentDb.containsByName("alf_applied_patch"))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return differenceHelper.findPatchCausingDifference((Difference)result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Produces schema dump in XML format: this is performed pre- and post-upgrade (i.e. if
|
||||
* changes are made to the schema) and can made upon demand via JMX.
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -29,7 +29,8 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.repo.admin.patch.impl.SchemaUpgradeScriptPatch;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.alfresco.util.schemacomp.SchemaDifferenceHelper;
|
||||
|
||||
/**
|
||||
* Registers a list of create scripts.
|
||||
@@ -44,7 +45,8 @@ public class SchemaBootstrapRegistration
|
||||
private List<String> postCreateScriptUrls;
|
||||
private List<SchemaUpgradeScriptPatch> preUpdateScriptPatches;
|
||||
private List<SchemaUpgradeScriptPatch> postUpdateScriptPatches;
|
||||
private List<SchemaUpgradeScriptPatch> updateActivitiScriptPatches;
|
||||
private List<SchemaUpgradeScriptPatch> updateActivitiScriptPatches;
|
||||
private SchemaDifferenceHelper differenceHelper;
|
||||
|
||||
public SchemaBootstrapRegistration()
|
||||
{
|
||||
@@ -61,6 +63,14 @@ public class SchemaBootstrapRegistration
|
||||
public void setSchemaBootstrap(SchemaBootstrap schemaBootstrap)
|
||||
{
|
||||
this.schemaBootstrap = schemaBootstrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param differenceHelper the component with which to register upgrade script pacthes
|
||||
*/
|
||||
public void setDifferenceHelper(SchemaDifferenceHelper differenceHelper)
|
||||
{
|
||||
this.differenceHelper = differenceHelper;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,7 +149,8 @@ public class SchemaBootstrapRegistration
|
||||
}
|
||||
for (SchemaUpgradeScriptPatch postUpdateScriptPatch : postUpdateScriptPatches)
|
||||
{
|
||||
schemaBootstrap.addPostUpdateScriptPatch(postUpdateScriptPatch);
|
||||
schemaBootstrap.addPostUpdateScriptPatch(postUpdateScriptPatch);
|
||||
differenceHelper.addUpgradeScriptPatch(postUpdateScriptPatch);
|
||||
}
|
||||
for (SchemaUpgradeScriptPatch updateActivitiScriptPatch : updateActivitiScriptPatches)
|
||||
{
|
||||
|
@@ -69,19 +69,19 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
public static final String PROPERTY_READ_ONLY = "system.delete_not_exists.read_only";
|
||||
public static final String PROPERTY_TIMEOUT_SECONDS = "system.delete_not_exists.timeout_seconds";
|
||||
|
||||
private Connection connection;
|
||||
protected Connection connection;
|
||||
private String sql;
|
||||
private int line;
|
||||
private File scriptFile;
|
||||
private Properties globalProperties;
|
||||
|
||||
private boolean readOnly;
|
||||
private int deleteBatchSize;
|
||||
private int batchSize;
|
||||
protected boolean readOnly;
|
||||
protected int deleteBatchSize;
|
||||
protected int batchSize;
|
||||
private long timeoutSec;
|
||||
|
||||
private long deletedCount;
|
||||
private Date startTime;
|
||||
protected long deletedCount;
|
||||
protected Date startTime;
|
||||
|
||||
public DeleteNotExistsExecutor(Connection connection, String sql, int line, File scriptFile, Properties globalProperties)
|
||||
{
|
||||
@@ -164,7 +164,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
}
|
||||
}
|
||||
|
||||
private void process(Pair<String, String>[] tableColumn, Long[] tableUpperLimits, String[] optionalWhereClauses) throws SQLException
|
||||
protected void process(Pair<String, String>[] tableColumn, Long[] tableUpperLimits, String[] optionalWhereClauses) throws SQLException
|
||||
{
|
||||
// The approach is to fetch ordered row ids from all referencer/secondary (e.g.
|
||||
// alf_audit_app, alf_audit_entry, alf_prop_unique_ctx) tables and
|
||||
@@ -190,6 +190,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
try
|
||||
{
|
||||
connection.setAutoCommit(false);
|
||||
|
||||
primaryPrepStmt = connection.prepareStatement(createPreparedSelectStatement(primaryTableName, primaryColumnName, primaryWhereClause));
|
||||
primaryPrepStmt.setFetchSize(batchSize);
|
||||
primaryPrepStmt.setLong(1, primaryId);
|
||||
@@ -264,7 +265,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTimeoutExceeded()
|
||||
protected boolean isTimeoutExceeded()
|
||||
{
|
||||
if (timeoutSec <= 0)
|
||||
{
|
||||
@@ -275,7 +276,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
return (now.getTime() > startTime.getTime() + (timeoutSec * 1000));
|
||||
}
|
||||
|
||||
private Long processPrimaryTableResultSet(PreparedStatement primaryPrepStmt, PreparedStatement[] secondaryPrepStmts, PreparedStatement deletePrepStmt, Set<Long> deleteIds, String primaryTableName,
|
||||
protected Long processPrimaryTableResultSet(PreparedStatement primaryPrepStmt, PreparedStatement[] secondaryPrepStmts, PreparedStatement deletePrepStmt, Set<Long> deleteIds, String primaryTableName,
|
||||
String primaryColumnName, Pair<String, String>[] tableColumn) throws SQLException
|
||||
{
|
||||
int rowsProcessed = 0;
|
||||
@@ -336,7 +337,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
return primaryId;
|
||||
}
|
||||
|
||||
private void deleteFromPrimaryTable(PreparedStatement deletePrepStmt, Set<Long> deleteIds, String primaryTableName) throws SQLException
|
||||
protected void deleteFromPrimaryTable(PreparedStatement deletePrepStmt, Set<Long> deleteIds, String primaryTableName) throws SQLException
|
||||
{
|
||||
int deletedBatchCount = deleteIds.size();
|
||||
if (!readOnly && !deleteIds.isEmpty())
|
||||
@@ -447,8 +448,8 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
|
||||
return quotedString.replace("\"", "");
|
||||
}
|
||||
|
||||
private String createPreparedSelectStatement(String tableName, String columnName, String whereClause)
|
||||
|
||||
protected String createPreparedSelectStatement(String tableName, String columnName, String whereClause)
|
||||
{
|
||||
StringBuilder sqlBuilder = new StringBuilder("SELECT " + columnName + " FROM " + tableName + " WHERE ");
|
||||
|
||||
@@ -461,7 +462,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
return sqlBuilder.toString();
|
||||
}
|
||||
|
||||
private String createPreparedDeleteStatement(String tableName, String idColumnName, int deleteBatchSize, String whereClause)
|
||||
protected String createPreparedDeleteStatement(String tableName, String idColumnName, int deleteBatchSize, String whereClause)
|
||||
{
|
||||
StringBuilder stmtBuilder = new StringBuilder("DELETE FROM " + tableName + " WHERE ");
|
||||
|
||||
@@ -571,7 +572,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
}
|
||||
}
|
||||
|
||||
private void closeQuietly(Statement statement)
|
||||
protected void closeQuietly(Statement statement)
|
||||
{
|
||||
if (statement != null)
|
||||
{
|
||||
@@ -586,7 +587,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
}
|
||||
}
|
||||
|
||||
private void closeQuietly(Statement[] statements)
|
||||
protected void closeQuietly(Statement[] statements)
|
||||
{
|
||||
if (statements != null)
|
||||
{
|
||||
@@ -597,7 +598,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
}
|
||||
}
|
||||
|
||||
private void closeQuietly(ResultSet resultSet)
|
||||
protected void closeQuietly(ResultSet resultSet)
|
||||
{
|
||||
if (resultSet != null)
|
||||
{
|
||||
@@ -612,7 +613,7 @@ public class DeleteNotExistsExecutor implements StatementExecutor
|
||||
}
|
||||
}
|
||||
|
||||
private void closeQuietly(ResultSet[] resultSets)
|
||||
protected void closeQuietly(ResultSet[] resultSets)
|
||||
{
|
||||
if (resultSets != null)
|
||||
{
|
||||
|
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.schema.script;
|
||||
|
||||
import org.alfresco.util.Pair;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.io.File;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Extends <code>{@link DeleteNotExistsExecutor}</code> to cope with MySQL
|
||||
* specific fetch size limitation and restrictions.
|
||||
*/
|
||||
public class MySQLDeleteNotExistsExecutor extends DeleteNotExistsExecutor
|
||||
{
|
||||
private static final Log logger = LogFactory.getLog(MySQLDeleteNotExistsExecutor.class);
|
||||
|
||||
private final DataSource dataSource;
|
||||
|
||||
public MySQLDeleteNotExistsExecutor(Connection connection, String sql, int line, File scriptFile, Properties globalProperties, DataSource dataSource)
|
||||
{
|
||||
super(connection, sql, line, scriptFile, globalProperties);
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void process(Pair<String, String>[] tableColumn, Long[] tableUpperLimits, String[] optionalWhereClauses) throws SQLException
|
||||
{
|
||||
// The approach is to fetch ordered row ids from all referencer/secondary (e.g.
|
||||
// alf_audit_app, alf_audit_entry, alf_prop_unique_ctx) tables and
|
||||
// referenced/primary table (e.g. alf_prop_root) concurrently, so that it is
|
||||
// possible skip over id gaps efficiently while at the same time being able to
|
||||
// work out which ids are obsolete and delete them in batches.
|
||||
|
||||
// The algorithm can be further improved by iterating over the rows in descending order.
|
||||
// This is due to the fact that older data should be more stable in time.
|
||||
|
||||
String primaryTableName = tableColumn[0].getFirst();
|
||||
String primaryColumnName = tableColumn[0].getSecond();
|
||||
String primaryWhereClause = optionalWhereClauses[0];
|
||||
|
||||
Long primaryId = 0L;
|
||||
|
||||
// There are some caveats with MySQL specific fetch size limitation. You must
|
||||
// read all of the rows in the result set (or close it) before you can issue any
|
||||
// other queries on the connection, or an exception will be thrown.
|
||||
Connection primaryConnection = null;
|
||||
Connection[] secondaryConnections = null;
|
||||
PreparedStatement primaryPrepStmt = null;
|
||||
PreparedStatement[] secondaryPrepStmts = null;
|
||||
PreparedStatement deletePrepStmt = null;
|
||||
Set<Long> deleteIds = new HashSet<>();
|
||||
|
||||
deletedCount = 0L;
|
||||
startTime = new Date();
|
||||
try
|
||||
{
|
||||
connection.setAutoCommit(false);
|
||||
|
||||
primaryConnection = dataSource.getConnection();
|
||||
|
||||
primaryPrepStmt = primaryConnection.prepareStatement(createPreparedSelectStatement(primaryTableName, primaryColumnName, primaryWhereClause));
|
||||
// Note the MySQL specific fetch size limitation (Integer.MIN_VALUE). fetchSize
|
||||
// activates result set streaming.
|
||||
primaryPrepStmt.setFetchSize(Integer.MIN_VALUE);
|
||||
primaryPrepStmt.setLong(1, primaryId);
|
||||
primaryPrepStmt.setLong(2, tableUpperLimits[0]);
|
||||
|
||||
boolean hasResults = primaryPrepStmt.execute();
|
||||
|
||||
if (hasResults)
|
||||
{
|
||||
|
||||
secondaryPrepStmts = new PreparedStatement[tableColumn.length];
|
||||
secondaryConnections = new Connection[tableColumn.length];
|
||||
for (int i = 1; i < tableColumn.length; i++)
|
||||
{
|
||||
secondaryConnections[i] = dataSource.getConnection();
|
||||
PreparedStatement secStmt = secondaryConnections[i].prepareStatement(createPreparedSelectStatement(tableColumn[i].getFirst(), tableColumn[i].getSecond(), optionalWhereClauses[i]));
|
||||
// Note the MySQL specific fetch size limitation (Integer.MIN_VALUE). fetchSize
|
||||
// activates result set streaming.
|
||||
secStmt.setFetchSize(Integer.MIN_VALUE);
|
||||
secStmt.setLong(1, primaryId);
|
||||
secStmt.setLong(2, tableUpperLimits[i]);
|
||||
|
||||
secondaryPrepStmts[i] = secStmt;
|
||||
}
|
||||
|
||||
deletePrepStmt = connection.prepareStatement(createPreparedDeleteStatement(primaryTableName, primaryColumnName, deleteBatchSize, primaryWhereClause));
|
||||
|
||||
// Timeout is only checked at each bach start.
|
||||
// It can be further refined by being verified at each primary row processing.
|
||||
while (hasResults && !isTimeoutExceeded())
|
||||
{
|
||||
// Process batch
|
||||
primaryId = processPrimaryTableResultSet(primaryPrepStmt, secondaryPrepStmts, deletePrepStmt, deleteIds, primaryTableName, primaryColumnName, tableColumn);
|
||||
connection.commit();
|
||||
|
||||
if (primaryId == null)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Prepare for next batch
|
||||
primaryPrepStmt.setLong(1, primaryId);
|
||||
primaryPrepStmt.setLong(2, tableUpperLimits[0]);
|
||||
|
||||
for (int i = 1; i < tableColumn.length; i++)
|
||||
{
|
||||
PreparedStatement secStmt = secondaryPrepStmts[i];
|
||||
secStmt.setLong(1, primaryId);
|
||||
secStmt.setLong(2, tableUpperLimits[i]);
|
||||
}
|
||||
|
||||
hasResults = primaryPrepStmt.execute();
|
||||
}
|
||||
}
|
||||
|
||||
// Check if we have any more ids to delete
|
||||
if (!deleteIds.isEmpty())
|
||||
{
|
||||
deleteFromPrimaryTable(deletePrepStmt, deleteIds, primaryTableName);
|
||||
connection.commit();
|
||||
}
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
String msg = ((readOnly) ? "Script would have" : "Script") + " deleted a total of " + deletedCount + " items from table " + primaryTableName + ".";
|
||||
logger.debug(msg);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
closeQuietly(deletePrepStmt);
|
||||
closeQuietly(secondaryPrepStmts);
|
||||
closeQuietly(primaryPrepStmt);
|
||||
closeQuietly(secondaryConnections);
|
||||
closeQuietly(primaryConnection);
|
||||
|
||||
connection.setAutoCommit(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void closeQuietly(Connection connection)
|
||||
{
|
||||
if (connection != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
connection.close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.warn("Error closing DB connection: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void closeQuietly(Connection[] connections)
|
||||
{
|
||||
if (connections != null)
|
||||
{
|
||||
for (Connection connection : connections)
|
||||
{
|
||||
closeQuietly(connection);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -350,7 +350,7 @@ public class ScriptExecutorImpl implements ScriptExecutor
|
||||
}
|
||||
else if (sql.startsWith("--DELETE_NOT_EXISTS"))
|
||||
{
|
||||
DeleteNotExistsExecutor deleteNotExists = new DeleteNotExistsExecutor(connection, sql, line, scriptFile, globalProperties);
|
||||
DeleteNotExistsExecutor deleteNotExists = createDeleteNotExistsExecutor(dialect, connection, sql, line, scriptFile);
|
||||
deleteNotExists.execute();
|
||||
|
||||
// Reset
|
||||
@@ -537,7 +537,17 @@ public class ScriptExecutorImpl implements ScriptExecutor
|
||||
try { scriptInputStream.close(); } catch (Throwable e) {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private DeleteNotExistsExecutor createDeleteNotExistsExecutor(Dialect dialect, Connection connection, String sql, int line, File scriptFile)
|
||||
{
|
||||
if (dialect instanceof MySQLInnoDBDialect)
|
||||
{
|
||||
return new MySQLDeleteNotExistsExecutor(connection, sql, line, scriptFile, globalProperties, dataSource);
|
||||
}
|
||||
|
||||
return new DeleteNotExistsExecutor(connection, sql, line, scriptFile, globalProperties);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the given SQL statement, absorbing exceptions that we expect during
|
||||
* schema creation or upgrade.
|
||||
|
@@ -27,12 +27,16 @@ package org.alfresco.repo.event2;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.net.URI;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.alfresco.repo.domain.node.NodeDAO;
|
||||
import org.alfresco.repo.domain.node.TransactionEntity;
|
||||
import org.alfresco.repo.event.v1.model.EventType;
|
||||
import org.alfresco.repo.event.v1.model.RepoEvent;
|
||||
import org.alfresco.repo.event2.filter.ChildAssociationTypeFilter;
|
||||
@@ -54,7 +58,6 @@ import org.alfresco.repo.policy.JavaBehaviour;
|
||||
import org.alfresco.repo.policy.PolicyComponent;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
@@ -90,11 +93,12 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
protected DictionaryService dictionaryService;
|
||||
private DescriptorService descriptorService;
|
||||
private EventFilterRegistry eventFilterRegistry;
|
||||
private Event2MessageProducer event2MessageProducer;
|
||||
private TransactionService transactionService;
|
||||
private PersonService personService;
|
||||
protected NodeResourceHelper nodeResourceHelper;
|
||||
protected NodeDAO nodeDAO;
|
||||
|
||||
private EventGeneratorQueue eventGeneratorQueue;
|
||||
private NodeTypeFilter nodeTypeFilter;
|
||||
private ChildAssociationTypeFilter childAssociationTypeFilter;
|
||||
private EventUserFilter userFilter;
|
||||
@@ -109,10 +113,11 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
PropertyCheck.mandatory(this, "dictionaryService", dictionaryService);
|
||||
PropertyCheck.mandatory(this, "descriptorService", descriptorService);
|
||||
PropertyCheck.mandatory(this, "eventFilterRegistry", eventFilterRegistry);
|
||||
PropertyCheck.mandatory(this, "event2MessageProducer", event2MessageProducer);
|
||||
PropertyCheck.mandatory(this, "transactionService", transactionService);
|
||||
PropertyCheck.mandatory(this, "personService", personService);
|
||||
PropertyCheck.mandatory(this, "nodeResourceHelper", nodeResourceHelper);
|
||||
PropertyCheck.mandatory(this, "nodeDAO", nodeDAO);
|
||||
PropertyCheck.mandatory(this, "eventGeneratorQueue", eventGeneratorQueue);
|
||||
|
||||
this.nodeTypeFilter = eventFilterRegistry.getNodeTypeFilter();
|
||||
this.childAssociationTypeFilter = eventFilterRegistry.getChildAssociationTypeFilter();
|
||||
@@ -145,6 +150,11 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
new JavaBehaviour(this, "beforeDeleteAssociation"));
|
||||
}
|
||||
|
||||
public void setNodeDAO(NodeDAO nodeDAO)
|
||||
{
|
||||
this.nodeDAO = nodeDAO;
|
||||
}
|
||||
|
||||
public void setPolicyComponent(PolicyComponent policyComponent)
|
||||
{
|
||||
this.policyComponent = policyComponent;
|
||||
@@ -177,12 +187,6 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
this.eventFilterRegistry = eventFilterRegistry;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public void setEvent2MessageProducer(Event2MessageProducer event2MessageProducer)
|
||||
{
|
||||
this.event2MessageProducer = event2MessageProducer;
|
||||
}
|
||||
|
||||
public void setTransactionService(TransactionService transactionService)
|
||||
{
|
||||
this.transactionService = transactionService;
|
||||
@@ -198,6 +202,11 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
this.nodeResourceHelper = nodeResourceHelper;
|
||||
}
|
||||
|
||||
public void setEventGeneratorQueue(EventGeneratorQueue eventGeneratorQueue)
|
||||
{
|
||||
this.eventGeneratorQueue = eventGeneratorQueue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateNode(ChildAssociationRef childAssocRef)
|
||||
{
|
||||
@@ -368,15 +377,22 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
return (childAssociationTypeFilter.isExcluded(childAssocType) || (userFilter.isExcluded(user)));
|
||||
}
|
||||
|
||||
private EventInfo getEventInfo(String user)
|
||||
protected EventInfo getEventInfo(String user)
|
||||
{
|
||||
return new EventInfo().setTimestamp(ZonedDateTime.now())
|
||||
return new EventInfo().setTimestamp(getCurrentTransactionTimestamp())
|
||||
.setId(UUID.randomUUID().toString())
|
||||
.setTxnId(AlfrescoTransactionSupport.getTransactionId())
|
||||
.setPrincipal(user)
|
||||
.setSource(URI.create("/" + descriptorService.getCurrentRepositoryDescriptor().getId()));
|
||||
}
|
||||
|
||||
private ZonedDateTime getCurrentTransactionTimestamp()
|
||||
{
|
||||
Long currentTransactionCommitTime = nodeDAO.getCurrentTransactionCommitTime();
|
||||
Instant commitTimeMs = Instant.ofEpochMilli(currentTransactionCommitTime);
|
||||
return ZonedDateTime.ofInstant(commitTimeMs, ZoneOffset.UTC);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBootstrap(ApplicationEvent applicationEvent)
|
||||
{
|
||||
@@ -394,54 +410,72 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
@Override
|
||||
public void afterCommit()
|
||||
{
|
||||
try
|
||||
if(isTransactionCommitted())
|
||||
{
|
||||
final Consolidators consolidators = getTxnConsolidators(this);
|
||||
|
||||
// Node events
|
||||
for (Map.Entry<NodeRef, EventConsolidator> entry : consolidators.getNodes().entrySet())
|
||||
try
|
||||
{
|
||||
EventConsolidator eventConsolidator = entry.getValue();
|
||||
sendEvent(entry.getKey(), eventConsolidator);
|
||||
}
|
||||
final Consolidators consolidators = getTxnConsolidators(this);
|
||||
|
||||
// Child assoc events
|
||||
for (Map.Entry<ChildAssociationRef, ChildAssociationEventConsolidator> entry : consolidators.getChildAssocs().entrySet())
|
||||
{
|
||||
ChildAssociationEventConsolidator eventConsolidator = entry.getValue();
|
||||
sendEvent(entry.getKey(), eventConsolidator);
|
||||
}
|
||||
// Node events
|
||||
for (Map.Entry<NodeRef, EventConsolidator> entry : consolidators.getNodes().entrySet())
|
||||
{
|
||||
EventConsolidator eventConsolidator = entry.getValue();
|
||||
sendEvent(entry.getKey(), eventConsolidator);
|
||||
}
|
||||
|
||||
// Peer assoc events
|
||||
for (Map.Entry<AssociationRef, PeerAssociationEventConsolidator> entry : consolidators.getPeerAssocs().entrySet())
|
||||
{
|
||||
PeerAssociationEventConsolidator eventConsolidator = entry.getValue();
|
||||
sendEvent(entry.getKey(), eventConsolidator);
|
||||
// Child assoc events
|
||||
for (Map.Entry<ChildAssociationRef, ChildAssociationEventConsolidator> entry : consolidators.getChildAssocs().entrySet())
|
||||
{
|
||||
ChildAssociationEventConsolidator eventConsolidator = entry.getValue();
|
||||
sendEvent(entry.getKey(), eventConsolidator);
|
||||
}
|
||||
|
||||
// Peer assoc events
|
||||
for (Map.Entry<AssociationRef, PeerAssociationEventConsolidator> entry : consolidators.getPeerAssocs().entrySet())
|
||||
{
|
||||
PeerAssociationEventConsolidator eventConsolidator = entry.getValue();
|
||||
sendEvent(entry.getKey(), eventConsolidator);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Must consume the exception to protect other TransactionListeners
|
||||
LOGGER.error("Unexpected error while sending repository events", e);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Must consume the exception to protect other TransactionListeners
|
||||
LOGGER.error("Unexpected error while sending repository events", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void sendEvent(NodeRef nodeRef, EventConsolidator consolidator)
|
||||
{
|
||||
EventInfo eventInfo = getEventInfo(AuthenticationUtil.getFullyAuthenticatedUser());
|
||||
eventGeneratorQueue.accept(()-> createEvent(nodeRef, consolidator, eventInfo));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if a node transaction is not only active, but also committed with modifications.
|
||||
* This means that a {@link TransactionEntity} object was created.
|
||||
*/
|
||||
protected boolean isTransactionCommitted()
|
||||
{
|
||||
return nodeDAO.getCurrentTransactionCommitTime() != null;
|
||||
}
|
||||
|
||||
private RepoEvent<?> createEvent(NodeRef nodeRef, EventConsolidator consolidator, EventInfo eventInfo)
|
||||
{
|
||||
String user = eventInfo.getPrincipal();
|
||||
|
||||
if (consolidator.isTemporaryNode())
|
||||
{
|
||||
if (LOGGER.isTraceEnabled())
|
||||
{
|
||||
LOGGER.trace("Ignoring temporary node: " + nodeRef);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
final String user = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
// Get the repo event before the filtering,
|
||||
// so we can take the latest node info into account
|
||||
final RepoEvent<?> event = consolidator.getRepoEvent(getEventInfo(user));
|
||||
|
||||
final RepoEvent<?> event = consolidator.getRepoEvent(eventInfo);
|
||||
|
||||
final QName nodeType = consolidator.getNodeType();
|
||||
if (isFiltered(nodeType, user))
|
||||
@@ -452,7 +486,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
+ ((nodeType == null) ? "Unknown' " : nodeType.toPrefixString())
|
||||
+ "' created by: " + user);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (event.getType().equals(EventType.NODE_UPDATED.getType()) && consolidator.isResourceBeforeAllFieldsNull())
|
||||
@@ -461,27 +495,34 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
{
|
||||
LOGGER.trace("Ignoring node updated event as no fields have been updated: " + nodeRef);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
logAndSendEvent(event, consolidator.getEventTypes());
|
||||
logEvent(event, consolidator.getEventTypes());
|
||||
return event;
|
||||
}
|
||||
|
||||
protected void sendEvent(ChildAssociationRef childAssociationRef, ChildAssociationEventConsolidator consolidator)
|
||||
{
|
||||
EventInfo eventInfo = getEventInfo(AuthenticationUtil.getFullyAuthenticatedUser());
|
||||
eventGeneratorQueue.accept(()-> createEvent(eventInfo, childAssociationRef, consolidator));
|
||||
}
|
||||
|
||||
private RepoEvent<?> createEvent(EventInfo eventInfo, ChildAssociationRef childAssociationRef, ChildAssociationEventConsolidator consolidator)
|
||||
{
|
||||
String user = eventInfo.getPrincipal();
|
||||
if (consolidator.isTemporaryChildAssociation())
|
||||
{
|
||||
if (LOGGER.isTraceEnabled())
|
||||
{
|
||||
LOGGER.trace("Ignoring temporary child association: " + childAssociationRef);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
final String user = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
// Get the repo event before the filtering,
|
||||
// so we can take the latest association info into account
|
||||
final RepoEvent<?> event = consolidator.getRepoEvent(getEventInfo(user));
|
||||
final RepoEvent<?> event = consolidator.getRepoEvent(eventInfo);
|
||||
|
||||
final QName childAssocType = consolidator.getChildAssocType();
|
||||
if (isFilteredChildAssociation(childAssocType, user))
|
||||
@@ -492,7 +533,7 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
+ ((childAssocType == null) ? "Unknown' " : childAssocType.toPrefixString())
|
||||
+ "' created by: " + user);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
} else if (childAssociationRef.isPrimary())
|
||||
{
|
||||
if (LOGGER.isTraceEnabled())
|
||||
@@ -501,13 +542,20 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
+ ((childAssocType == null) ? "Unknown' " : childAssocType.toPrefixString())
|
||||
+ "' created by: " + user);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
logAndSendEvent(event, consolidator.getEventTypes());
|
||||
logEvent(event, consolidator.getEventTypes());
|
||||
return event;
|
||||
}
|
||||
|
||||
protected void sendEvent(AssociationRef peerAssociationRef, PeerAssociationEventConsolidator consolidator)
|
||||
{
|
||||
EventInfo eventInfo = getEventInfo(AuthenticationUtil.getFullyAuthenticatedUser());
|
||||
eventGeneratorQueue.accept(()-> createEvent(eventInfo, peerAssociationRef, consolidator));
|
||||
}
|
||||
|
||||
private RepoEvent<?> createEvent(EventInfo eventInfo, AssociationRef peerAssociationRef, PeerAssociationEventConsolidator consolidator)
|
||||
{
|
||||
if (consolidator.isTemporaryPeerAssociation())
|
||||
{
|
||||
@@ -515,30 +563,21 @@ public class EventGenerator extends AbstractLifecycleBean implements Initializin
|
||||
{
|
||||
LOGGER.trace("Ignoring temporary peer association: " + peerAssociationRef);
|
||||
}
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
final String user = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
// Get the repo event before the filtering,
|
||||
// so we can take the latest association info into account
|
||||
final RepoEvent<?> event = consolidator.getRepoEvent(getEventInfo(user));
|
||||
|
||||
logAndSendEvent(event, consolidator.getEventTypes());
|
||||
RepoEvent<?> event = consolidator.getRepoEvent(eventInfo);
|
||||
logEvent(event, consolidator.getEventTypes());
|
||||
return event;
|
||||
}
|
||||
|
||||
protected void logAndSendEvent(RepoEvent<?> event, Deque<EventType> listOfEvents)
|
||||
private void logEvent(RepoEvent<?> event, Deque<EventType> listOfEvents)
|
||||
{
|
||||
if (LOGGER.isTraceEnabled())
|
||||
{
|
||||
LOGGER.trace("List of Events:" + listOfEvents);
|
||||
LOGGER.trace("Sending event:" + event);
|
||||
}
|
||||
// Need to execute this in another read txn because Camel expects it
|
||||
transactionService.getRetryingTransactionHelper().doInTransaction((RetryingTransactionCallback<Void>) () -> {
|
||||
event2MessageProducer.send(event);
|
||||
|
||||
return null;
|
||||
}, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,179 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.event2;
|
||||
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.alfresco.repo.event.v1.model.RepoEvent;
|
||||
import org.alfresco.util.PropertyCheck;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
|
||||
/*
|
||||
* This queue allows to create asynchronously the RepoEvent offloading the work to a ThreadPool but
|
||||
* at the same time it preserves the order of the events
|
||||
*/
|
||||
public class EventGeneratorQueue implements InitializingBean
|
||||
{
|
||||
protected static final Log LOGGER = LogFactory.getLog(EventGeneratorQueue.class);
|
||||
|
||||
protected Executor enqueueThreadPoolExecutor;
|
||||
protected Executor dequeueThreadPoolExecutor;
|
||||
protected Event2MessageProducer event2MessageProducer;
|
||||
protected BlockingQueue<EventInMaking> queue = new LinkedBlockingQueue<>();
|
||||
protected Runnable listener = createListener();
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception
|
||||
{
|
||||
PropertyCheck.mandatory(this, "enqueueThreadPoolExecutor", enqueueThreadPoolExecutor);
|
||||
PropertyCheck.mandatory(this, "dequeueThreadPoolExecutor", dequeueThreadPoolExecutor);
|
||||
PropertyCheck.mandatory(this, "event2MessageProducer", event2MessageProducer);
|
||||
}
|
||||
|
||||
public void setEvent2MessageProducer(Event2MessageProducer event2MessageProducer)
|
||||
{
|
||||
this.event2MessageProducer = event2MessageProducer;
|
||||
}
|
||||
|
||||
public void setEnqueueThreadPoolExecutor(Executor enqueueThreadPoolExecutor)
|
||||
{
|
||||
this.enqueueThreadPoolExecutor = enqueueThreadPoolExecutor;
|
||||
}
|
||||
|
||||
public void setDequeueThreadPoolExecutor(Executor dequeueThreadPoolExecutor)
|
||||
{
|
||||
this.dequeueThreadPoolExecutor = dequeueThreadPoolExecutor;
|
||||
dequeueThreadPoolExecutor.execute(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Procedure to enqueue the callback functions that creates an event.
|
||||
* @param maker Callback function that creates an event.
|
||||
*/
|
||||
public void accept(Callable<RepoEvent<?>> maker)
|
||||
{
|
||||
EventInMaking eventInMaking = new EventInMaking(maker);
|
||||
queue.offer(eventInMaking);
|
||||
enqueueThreadPoolExecutor.execute(() -> {
|
||||
try
|
||||
{
|
||||
eventInMaking.make();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.error("Unexpected error while enqueuing maker function for repository event" + e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create listener task in charge of dequeuing and sending events ready to be sent.
|
||||
* @return The task in charge of dequeuing and sending events ready to be sent.
|
||||
*/
|
||||
private Runnable createListener()
|
||||
{
|
||||
return new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
while (!Thread.interrupted())
|
||||
{
|
||||
try
|
||||
{
|
||||
EventInMaking eventInMaking = queue.take();
|
||||
RepoEvent<?> event = eventInMaking.getEventWhenReady();
|
||||
if (event != null)
|
||||
{
|
||||
event2MessageProducer.send(event);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.error("Unexpected error while dequeuing and sending repository event" + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
LOGGER.warn("Unexpected: rescheduling the listener thread.");
|
||||
dequeueThreadPoolExecutor.execute(listener);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Simple class that makes events and allows to retrieve them when ready
|
||||
*/
|
||||
private static class EventInMaking
|
||||
{
|
||||
private Callable<RepoEvent<?>> maker;
|
||||
private volatile RepoEvent<?> event;
|
||||
private CountDownLatch latch;
|
||||
|
||||
public EventInMaking(Callable<RepoEvent<?>> maker)
|
||||
{
|
||||
this.maker = maker;
|
||||
this.latch = new CountDownLatch(1);
|
||||
}
|
||||
|
||||
public void make() throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
event = maker.call();
|
||||
}
|
||||
finally
|
||||
{
|
||||
latch.countDown();
|
||||
}
|
||||
}
|
||||
|
||||
public RepoEvent<?> getEventWhenReady() throws InterruptedException
|
||||
{
|
||||
latch.await(30, TimeUnit.SECONDS);
|
||||
return event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return maker.toString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,460 +1,485 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.search.impl.querymodel.impl.db;
|
||||
|
||||
import static org.alfresco.repo.domain.node.AbstractNodeDAOImpl.CACHE_REGION_NODES;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.BitSet;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.concurrent.NotThreadSafe;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.admin.patch.OptionalPatchApplicationCheckBootstrapBean;
|
||||
import org.alfresco.repo.cache.SimpleCache;
|
||||
import org.alfresco.repo.cache.lookup.EntityLookupCache;
|
||||
import org.alfresco.repo.cache.lookup.EntityLookupCache.EntityLookupCallbackDAOAdaptor;
|
||||
import org.alfresco.repo.domain.node.Node;
|
||||
import org.alfresco.repo.domain.node.NodeDAO;
|
||||
import org.alfresco.repo.domain.permissions.AclCrudDAO;
|
||||
import org.alfresco.repo.domain.permissions.Authority;
|
||||
import org.alfresco.repo.domain.qname.QNameDAO;
|
||||
import org.alfresco.repo.search.SimpleResultSetMetaData;
|
||||
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
|
||||
import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext;
|
||||
import org.alfresco.repo.search.impl.querymodel.Query;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryEngine;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryModelException;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryModelFactory;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryOptions;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.FilteringResultSet;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.search.LimitBy;
|
||||
import org.alfresco.service.cmr.search.PermissionEvaluationMode;
|
||||
import org.alfresco.service.cmr.search.ResultSet;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.ibatis.session.ResultContext;
|
||||
import org.apache.ibatis.session.ResultHandler;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
|
||||
/**
|
||||
* @author Andy
|
||||
*/
|
||||
@NotThreadSafe
|
||||
public class DBQueryEngine implements QueryEngine
|
||||
{
|
||||
protected static final Log logger = LogFactory.getLog(DBQueryEngine.class);
|
||||
|
||||
protected static final String SELECT_BY_DYNAMIC_QUERY = "alfresco.metadata.query.select_byDynamicQuery";
|
||||
|
||||
protected SqlSessionTemplate template;
|
||||
|
||||
protected QNameDAO qnameDAO;
|
||||
|
||||
private NodeDAO nodeDAO;
|
||||
|
||||
protected DictionaryService dictionaryService;
|
||||
|
||||
protected NamespaceService namespaceService;
|
||||
|
||||
protected NodeService nodeService;
|
||||
|
||||
private TenantService tenantService;
|
||||
|
||||
private OptionalPatchApplicationCheckBootstrapBean metadataIndexCheck2;
|
||||
|
||||
protected PermissionService permissionService;
|
||||
|
||||
private int maxPermissionChecks;
|
||||
|
||||
private long maxPermissionCheckTimeMillis;
|
||||
|
||||
protected EntityLookupCache<Long, Node, NodeRef> nodesCache;
|
||||
|
||||
AclCrudDAO aclCrudDAO;
|
||||
|
||||
public void setAclCrudDAO(AclCrudDAO aclCrudDAO)
|
||||
{
|
||||
this.aclCrudDAO = aclCrudDAO;
|
||||
}
|
||||
|
||||
public void setMaxPermissionChecks(int maxPermissionChecks)
|
||||
{
|
||||
this.maxPermissionChecks = maxPermissionChecks;
|
||||
}
|
||||
|
||||
public void setMaxPermissionCheckTimeMillis(long maxPermissionCheckTimeMillis)
|
||||
{
|
||||
this.maxPermissionCheckTimeMillis = maxPermissionCheckTimeMillis;
|
||||
}
|
||||
|
||||
public void setTemplate(SqlSessionTemplate template)
|
||||
{
|
||||
this.template = template;
|
||||
}
|
||||
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
public void setMetadataIndexCheck2(OptionalPatchApplicationCheckBootstrapBean metadataIndexCheck2)
|
||||
{
|
||||
this.metadataIndexCheck2 = metadataIndexCheck2;
|
||||
}
|
||||
|
||||
public void setTenantService(TenantService tenantService)
|
||||
{
|
||||
this.tenantService = tenantService;
|
||||
}
|
||||
|
||||
public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate)
|
||||
{
|
||||
this.template = sqlSessionTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param qnameDAO
|
||||
* the qnameDAO to set
|
||||
*/
|
||||
public void setQnameDAO(QNameDAO qnameDAO)
|
||||
{
|
||||
this.qnameDAO = qnameDAO;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dictionaryService
|
||||
* the dictionaryService to set
|
||||
*/
|
||||
public void setDictionaryService(DictionaryService dictionaryService)
|
||||
{
|
||||
this.dictionaryService = dictionaryService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param namespaceService
|
||||
* the namespaceService to set
|
||||
*/
|
||||
public void setNamespaceService(NamespaceService namespaceService)
|
||||
{
|
||||
this.namespaceService = namespaceService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nodeService the nodeService to set
|
||||
*/
|
||||
public void setNodeService(NodeService nodeService)
|
||||
{
|
||||
this.nodeService = nodeService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nodeDAO the nodeDAO to set
|
||||
*/
|
||||
public void setNodeDAO(NodeDAO nodeDAO)
|
||||
{
|
||||
this.nodeDAO = nodeDAO;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see
|
||||
* org.alfresco.repo.search.impl.querymodel.QueryEngine#executeQuery(org.alfresco.repo.search.impl.querymodel.Query,
|
||||
* org.alfresco.repo.search.impl.querymodel.QueryOptions,
|
||||
* org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext)
|
||||
*/
|
||||
@Override
|
||||
public QueryEngineResults executeQuery(Query query, QueryOptions options, FunctionEvaluationContext functionContext)
|
||||
{
|
||||
long start = 0;
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
start = System.currentTimeMillis();
|
||||
logger.debug("Query request received");
|
||||
}
|
||||
|
||||
Set<String> selectorGroup = null;
|
||||
if (query.getSource() != null)
|
||||
{
|
||||
List<Set<String>> selectorGroups = query.getSource().getSelectorGroups(functionContext);
|
||||
|
||||
if (selectorGroups.size() == 0)
|
||||
{
|
||||
throw new QueryModelException("No selectors");
|
||||
}
|
||||
|
||||
if (selectorGroups.size() > 1)
|
||||
{
|
||||
throw new QueryModelException("Advanced join is not supported");
|
||||
}
|
||||
|
||||
selectorGroup = selectorGroups.get(0);
|
||||
}
|
||||
|
||||
DBQuery dbQuery = (DBQuery)query;
|
||||
|
||||
if (options.getStores().size() > 1)
|
||||
{
|
||||
throw new QueryModelException("Multi-store queries are not supported");
|
||||
}
|
||||
|
||||
// MT
|
||||
StoreRef storeRef = options.getStores().get(0);
|
||||
storeRef = storeRef != null ? tenantService.getName(storeRef) : null;
|
||||
|
||||
Pair<Long, StoreRef> store = nodeDAO.getStore(storeRef);
|
||||
if (store == null)
|
||||
{
|
||||
throw new QueryModelException("Unknown store: "+storeRef);
|
||||
}
|
||||
dbQuery.setStoreId(store.getFirst());
|
||||
Pair<Long, QName> sysDeletedType = qnameDAO.getQName(ContentModel.TYPE_DELETED);
|
||||
if (sysDeletedType == null)
|
||||
{
|
||||
dbQuery.setSysDeletedType(-1L);
|
||||
}
|
||||
else
|
||||
{
|
||||
dbQuery.setSysDeletedType(sysDeletedType.getFirst());
|
||||
}
|
||||
|
||||
Long sinceTxId = options.getSinceTxId();
|
||||
if (sinceTxId == null)
|
||||
{
|
||||
// By default, return search results for all transactions.
|
||||
sinceTxId = -1L;
|
||||
}
|
||||
dbQuery.setSinceTxId(sinceTxId);
|
||||
|
||||
logger.debug("- query is being prepared");
|
||||
dbQuery.prepare(namespaceService, dictionaryService, qnameDAO, nodeDAO, tenantService, selectorGroup,
|
||||
null, functionContext, metadataIndexCheck2.getPatchApplied());
|
||||
|
||||
ResultSet resultSet;
|
||||
resultSet = selectNodesWithPermissions(options, dbQuery);
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
long ms = System.currentTimeMillis() - start;
|
||||
logger.debug("Selected " + resultSet.length() + " nodes with permission resolution in "+ms+" ms");
|
||||
}
|
||||
return asQueryEngineResults(resultSet);
|
||||
}
|
||||
|
||||
protected String pickQueryTemplate(QueryOptions options, DBQuery dbQuery)
|
||||
{
|
||||
logger.debug("- using standard table for the query");
|
||||
return SELECT_BY_DYNAMIC_QUERY;
|
||||
}
|
||||
|
||||
private ResultSet selectNodesWithPermissions(QueryOptions options, DBQuery dbQuery)
|
||||
{
|
||||
Authority authority = aclCrudDAO.getAuthority(AuthenticationUtil.getRunAsUser());
|
||||
|
||||
NodePermissionAssessor permissionAssessor = createAssessor(authority);
|
||||
int maxPermsChecks = options.getMaxPermissionChecks() < 0 ? maxPermissionChecks : options.getMaxPermissionChecks();
|
||||
long maxPermCheckTimeMillis = options.getMaxPermissionCheckTimeMillis() < 0
|
||||
? maxPermissionCheckTimeMillis
|
||||
: options.getMaxPermissionCheckTimeMillis();
|
||||
permissionAssessor.setMaxPermissionChecks(maxPermsChecks);
|
||||
permissionAssessor.setMaxPermissionCheckTimeMillis(maxPermCheckTimeMillis);
|
||||
|
||||
FilteringResultSet resultSet = acceleratedNodeSelection(options, dbQuery, permissionAssessor);
|
||||
|
||||
PagingLuceneResultSet plrs = new PagingLuceneResultSet(resultSet, options.getAsSearchParmeters(), nodeService);
|
||||
plrs.setTrimmedResultSet(true);
|
||||
return plrs;
|
||||
}
|
||||
|
||||
protected NodePermissionAssessor createAssessor(Authority authority)
|
||||
{
|
||||
return new NodePermissionAssessor(nodeService, permissionService, authority, nodesCache);
|
||||
}
|
||||
|
||||
FilteringResultSet acceleratedNodeSelection(QueryOptions options, DBQuery dbQuery, NodePermissionAssessor permissionAssessor)
|
||||
{
|
||||
List<Node> nodes = new ArrayList<>();
|
||||
int requiredNodes = computeRequiredNodesCount(options);
|
||||
|
||||
logger.debug("- query sent to the database");
|
||||
template.select(pickQueryTemplate(options, dbQuery), dbQuery, new ResultHandler<Node>()
|
||||
{
|
||||
@Override
|
||||
public void handleResult(ResultContext<? extends Node> context)
|
||||
{
|
||||
doHandleResult(permissionAssessor, nodes, requiredNodes, context);
|
||||
}
|
||||
|
||||
private void doHandleResult(NodePermissionAssessor permissionAssessor, List<Node> nodes,
|
||||
int requiredNodes, ResultContext<? extends Node> context)
|
||||
{
|
||||
if (nodes.size() >= requiredNodes)
|
||||
{
|
||||
context.stop();
|
||||
return;
|
||||
}
|
||||
|
||||
Node node = context.getResultObject();
|
||||
|
||||
boolean shouldCache = nodes.size() >= options.getSkipCount();
|
||||
if(shouldCache)
|
||||
{
|
||||
logger.debug("- selected node "+nodes.size()+": "+node.getUuid()+" "+node.getId());
|
||||
nodesCache.setValue(node.getId(), node);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.debug("- skipped node "+nodes.size()+": "+node.getUuid()+" "+node.getId());
|
||||
}
|
||||
|
||||
if (permissionAssessor.isIncluded(node))
|
||||
{
|
||||
nodes.add(shouldCache ? node : null);
|
||||
}
|
||||
|
||||
if (permissionAssessor.shouldQuitChecks())
|
||||
{
|
||||
context.stop();
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
int numberFound = nodes.size();
|
||||
nodes.removeAll(Collections.singleton(null));
|
||||
|
||||
DBResultSet rs = createResultSet(options, nodes, numberFound);
|
||||
FilteringResultSet frs = new FilteringResultSet(rs, formInclusionMask(nodes));
|
||||
frs.setResultSetMetaData(new SimpleResultSetMetaData(LimitBy.UNLIMITED, PermissionEvaluationMode.EAGER, rs.getResultSetMetaData().getSearchParameters()));
|
||||
|
||||
logger.debug("- query is completed, "+nodes.size()+" nodes loaded");
|
||||
return frs;
|
||||
}
|
||||
|
||||
private DBResultSet createResultSet(QueryOptions options, List<Node> nodes, int numberFound)
|
||||
{
|
||||
DBResultSet dbResultSet = new DBResultSet(options.getAsSearchParmeters(), nodes, nodeDAO, nodeService, tenantService, Integer.MAX_VALUE);
|
||||
dbResultSet.setNumberFound(numberFound);
|
||||
return dbResultSet;
|
||||
}
|
||||
|
||||
private int computeRequiredNodesCount(QueryOptions options)
|
||||
{
|
||||
int maxItems = options.getMaxItems();
|
||||
if (maxItems == -1 || maxItems == Integer.MAX_VALUE)
|
||||
{
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
return maxItems + options.getSkipCount() + 1;
|
||||
}
|
||||
|
||||
private BitSet formInclusionMask(List<Node> nodes)
|
||||
{
|
||||
BitSet inclusionMask = new BitSet(nodes.size());
|
||||
for (int i=0; i < nodes.size(); i++)
|
||||
{
|
||||
inclusionMask.set(i, true);
|
||||
}
|
||||
return inclusionMask;
|
||||
}
|
||||
|
||||
|
||||
private QueryEngineResults asQueryEngineResults(ResultSet paged)
|
||||
{
|
||||
HashSet<String> key = new HashSet<>();
|
||||
key.add("");
|
||||
Map<Set<String>, ResultSet> answer = new HashMap<>();
|
||||
answer.put(key, paged);
|
||||
|
||||
return new QueryEngineResults(answer);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.search.impl.querymodel.QueryEngine#getQueryModelFactory()
|
||||
*/
|
||||
@Override
|
||||
public QueryModelFactory getQueryModelFactory()
|
||||
{
|
||||
return new DBQueryModelFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection of nodes cache for clean-up and warm up when required
|
||||
* @param cache The node cache to set
|
||||
*/
|
||||
public void setNodesCache(SimpleCache<Serializable, Serializable> cache)
|
||||
{
|
||||
this.nodesCache = new EntityLookupCache<>(
|
||||
cache,
|
||||
CACHE_REGION_NODES,
|
||||
new ReadonlyLocalCallbackDAO());
|
||||
}
|
||||
|
||||
void setNodesCache(EntityLookupCache<Long, Node, NodeRef> nodesCache)
|
||||
{
|
||||
this.nodesCache = nodesCache;
|
||||
}
|
||||
|
||||
private class ReadonlyLocalCallbackDAO extends EntityLookupCallbackDAOAdaptor<Long, Node, NodeRef>
|
||||
{
|
||||
@Override
|
||||
public Pair<Long, Node> createValue(Node value)
|
||||
{
|
||||
throw new UnsupportedOperationException("Node creation is done externally: " + value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Long, Node> findByKey(Long nodeId)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NodeRef getValueKey(Node value)
|
||||
{
|
||||
return value.getNodeRef();
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.search.impl.querymodel.impl.db;
|
||||
|
||||
import static org.alfresco.repo.domain.node.AbstractNodeDAOImpl.CACHE_REGION_NODES;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.BitSet;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.concurrent.NotThreadSafe;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.admin.patch.OptionalPatchApplicationCheckBootstrapBean;
|
||||
import org.alfresco.repo.cache.SimpleCache;
|
||||
import org.alfresco.repo.cache.lookup.EntityLookupCache;
|
||||
import org.alfresco.repo.cache.lookup.EntityLookupCache.EntityLookupCallbackDAOAdaptor;
|
||||
import org.alfresco.repo.domain.node.Node;
|
||||
import org.alfresco.repo.domain.node.NodeDAO;
|
||||
import org.alfresco.repo.domain.node.StoreEntity;
|
||||
import org.alfresco.repo.domain.permissions.AclCrudDAO;
|
||||
import org.alfresco.repo.domain.permissions.Authority;
|
||||
import org.alfresco.repo.domain.qname.QNameDAO;
|
||||
import org.alfresco.repo.search.SimpleResultSetMetaData;
|
||||
import org.alfresco.repo.search.impl.lucene.PagingLuceneResultSet;
|
||||
import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext;
|
||||
import org.alfresco.repo.search.impl.querymodel.Query;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryEngine;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryEngineResults;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryModelException;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryModelFactory;
|
||||
import org.alfresco.repo.search.impl.querymodel.QueryOptions;
|
||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||
import org.alfresco.repo.security.permissions.impl.acegi.FilteringResultSet;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.search.LimitBy;
|
||||
import org.alfresco.service.cmr.search.PermissionEvaluationMode;
|
||||
import org.alfresco.service.cmr.search.ResultSet;
|
||||
import org.alfresco.service.cmr.security.PermissionService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.ibatis.session.ResultContext;
|
||||
import org.apache.ibatis.session.ResultHandler;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
|
||||
/**
|
||||
* @author Andy
|
||||
*/
|
||||
@NotThreadSafe
|
||||
public class DBQueryEngine implements QueryEngine
|
||||
{
|
||||
protected static final Log logger = LogFactory.getLog(DBQueryEngine.class);
|
||||
|
||||
protected static final String SELECT_BY_DYNAMIC_QUERY = "alfresco.metadata.query.select_byDynamicQuery";
|
||||
|
||||
protected SqlSessionTemplate template;
|
||||
|
||||
protected QNameDAO qnameDAO;
|
||||
|
||||
private NodeDAO nodeDAO;
|
||||
|
||||
protected DictionaryService dictionaryService;
|
||||
|
||||
protected NamespaceService namespaceService;
|
||||
|
||||
protected NodeService nodeService;
|
||||
|
||||
private TenantService tenantService;
|
||||
|
||||
private OptionalPatchApplicationCheckBootstrapBean metadataIndexCheck2;
|
||||
|
||||
protected PermissionService permissionService;
|
||||
|
||||
private int maxPermissionChecks;
|
||||
|
||||
private long maxPermissionCheckTimeMillis;
|
||||
|
||||
protected EntityLookupCache<Long, Node, NodeRef> nodesCache;
|
||||
|
||||
private List<Pair<Long, StoreRef>> stores;
|
||||
|
||||
AclCrudDAO aclCrudDAO;
|
||||
|
||||
public void setAclCrudDAO(AclCrudDAO aclCrudDAO)
|
||||
{
|
||||
this.aclCrudDAO = aclCrudDAO;
|
||||
}
|
||||
|
||||
public void setMaxPermissionChecks(int maxPermissionChecks)
|
||||
{
|
||||
this.maxPermissionChecks = maxPermissionChecks;
|
||||
}
|
||||
|
||||
public void setMaxPermissionCheckTimeMillis(long maxPermissionCheckTimeMillis)
|
||||
{
|
||||
this.maxPermissionCheckTimeMillis = maxPermissionCheckTimeMillis;
|
||||
}
|
||||
|
||||
public void setTemplate(SqlSessionTemplate template)
|
||||
{
|
||||
this.template = template;
|
||||
}
|
||||
|
||||
public void setPermissionService(PermissionService permissionService)
|
||||
{
|
||||
this.permissionService = permissionService;
|
||||
}
|
||||
|
||||
public void setMetadataIndexCheck2(OptionalPatchApplicationCheckBootstrapBean metadataIndexCheck2)
|
||||
{
|
||||
this.metadataIndexCheck2 = metadataIndexCheck2;
|
||||
}
|
||||
|
||||
public void setTenantService(TenantService tenantService)
|
||||
{
|
||||
this.tenantService = tenantService;
|
||||
}
|
||||
|
||||
public final void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate)
|
||||
{
|
||||
this.template = sqlSessionTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param qnameDAO
|
||||
* the qnameDAO to set
|
||||
*/
|
||||
public void setQnameDAO(QNameDAO qnameDAO)
|
||||
{
|
||||
this.qnameDAO = qnameDAO;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param dictionaryService
|
||||
* the dictionaryService to set
|
||||
*/
|
||||
public void setDictionaryService(DictionaryService dictionaryService)
|
||||
{
|
||||
this.dictionaryService = dictionaryService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param namespaceService
|
||||
* the namespaceService to set
|
||||
*/
|
||||
public void setNamespaceService(NamespaceService namespaceService)
|
||||
{
|
||||
this.namespaceService = namespaceService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nodeService the nodeService to set
|
||||
*/
|
||||
public void setNodeService(NodeService nodeService)
|
||||
{
|
||||
this.nodeService = nodeService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nodeDAO the nodeDAO to set
|
||||
*/
|
||||
public void setNodeDAO(NodeDAO nodeDAO)
|
||||
{
|
||||
this.nodeDAO = nodeDAO;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see
|
||||
* org.alfresco.repo.search.impl.querymodel.QueryEngine#executeQuery(org.alfresco.repo.search.impl.querymodel.Query,
|
||||
* org.alfresco.repo.search.impl.querymodel.QueryOptions,
|
||||
* org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext)
|
||||
*/
|
||||
@Override
|
||||
public QueryEngineResults executeQuery(Query query, QueryOptions options, FunctionEvaluationContext functionContext)
|
||||
{
|
||||
long start = 0;
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
start = System.currentTimeMillis();
|
||||
logger.debug("Query request received");
|
||||
}
|
||||
|
||||
Set<String> selectorGroup = null;
|
||||
if (query.getSource() != null)
|
||||
{
|
||||
List<Set<String>> selectorGroups = query.getSource().getSelectorGroups(functionContext);
|
||||
|
||||
if (selectorGroups.size() == 0)
|
||||
{
|
||||
throw new QueryModelException("No selectors");
|
||||
}
|
||||
|
||||
if (selectorGroups.size() > 1)
|
||||
{
|
||||
throw new QueryModelException("Advanced join is not supported");
|
||||
}
|
||||
|
||||
selectorGroup = selectorGroups.get(0);
|
||||
}
|
||||
|
||||
DBQuery dbQuery = (DBQuery)query;
|
||||
|
||||
if (options.getStores().size() > 1)
|
||||
{
|
||||
throw new QueryModelException("Multi-store queries are not supported");
|
||||
}
|
||||
|
||||
// MT
|
||||
StoreRef storeRef = options.getStores().get(0);
|
||||
storeRef = storeRef != null ? tenantService.getName(storeRef) : null;
|
||||
|
||||
Pair<Long, StoreRef> store = nodeDAO.getStore(storeRef);
|
||||
if (store == null)
|
||||
{
|
||||
throw new QueryModelException("Unknown store: "+storeRef);
|
||||
}
|
||||
dbQuery.setStoreId(store.getFirst());
|
||||
Pair<Long, QName> sysDeletedType = qnameDAO.getQName(ContentModel.TYPE_DELETED);
|
||||
if (sysDeletedType == null)
|
||||
{
|
||||
dbQuery.setSysDeletedType(-1L);
|
||||
}
|
||||
else
|
||||
{
|
||||
dbQuery.setSysDeletedType(sysDeletedType.getFirst());
|
||||
}
|
||||
|
||||
Long sinceTxId = options.getSinceTxId();
|
||||
if (sinceTxId == null)
|
||||
{
|
||||
// By default, return search results for all transactions.
|
||||
sinceTxId = -1L;
|
||||
}
|
||||
dbQuery.setSinceTxId(sinceTxId);
|
||||
|
||||
logger.debug("- query is being prepared");
|
||||
dbQuery.prepare(namespaceService, dictionaryService, qnameDAO, nodeDAO, tenantService, selectorGroup,
|
||||
null, functionContext, metadataIndexCheck2.getPatchApplied());
|
||||
|
||||
ResultSet resultSet;
|
||||
resultSet = selectNodesWithPermissions(options, dbQuery);
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
long ms = System.currentTimeMillis() - start;
|
||||
logger.debug("Selected " + resultSet.length() + " nodes with permission resolution in "+ms+" ms");
|
||||
}
|
||||
return asQueryEngineResults(resultSet);
|
||||
}
|
||||
|
||||
protected String pickQueryTemplate(QueryOptions options, DBQuery dbQuery)
|
||||
{
|
||||
logger.debug("- using standard table for the query");
|
||||
return SELECT_BY_DYNAMIC_QUERY;
|
||||
}
|
||||
|
||||
private ResultSet selectNodesWithPermissions(QueryOptions options, DBQuery dbQuery)
|
||||
{
|
||||
Authority authority = aclCrudDAO.getAuthority(AuthenticationUtil.getRunAsUser());
|
||||
|
||||
NodePermissionAssessor permissionAssessor = createAssessor(authority);
|
||||
int maxPermsChecks = options.getMaxPermissionChecks() < 0 ? maxPermissionChecks : options.getMaxPermissionChecks();
|
||||
long maxPermCheckTimeMillis = options.getMaxPermissionCheckTimeMillis() < 0
|
||||
? maxPermissionCheckTimeMillis
|
||||
: options.getMaxPermissionCheckTimeMillis();
|
||||
permissionAssessor.setMaxPermissionChecks(maxPermsChecks);
|
||||
permissionAssessor.setMaxPermissionCheckTimeMillis(maxPermCheckTimeMillis);
|
||||
|
||||
FilteringResultSet resultSet = acceleratedNodeSelection(options, dbQuery, permissionAssessor);
|
||||
|
||||
PagingLuceneResultSet plrs = new PagingLuceneResultSet(resultSet, options.getAsSearchParmeters(), nodeService);
|
||||
plrs.setTrimmedResultSet(true);
|
||||
return plrs;
|
||||
}
|
||||
|
||||
protected NodePermissionAssessor createAssessor(Authority authority)
|
||||
{
|
||||
return new NodePermissionAssessor(nodeService, permissionService, authority, nodesCache);
|
||||
}
|
||||
|
||||
FilteringResultSet acceleratedNodeSelection(QueryOptions options, DBQuery dbQuery, NodePermissionAssessor permissionAssessor)
|
||||
{
|
||||
// get list of stores from database
|
||||
stores = nodeDAO.getStores();
|
||||
|
||||
List<Node> nodes = new ArrayList<>();
|
||||
int requiredNodes = computeRequiredNodesCount(options);
|
||||
|
||||
logger.debug("- query sent to the database");
|
||||
template.select(pickQueryTemplate(options, dbQuery), dbQuery, new ResultHandler<Node>()
|
||||
{
|
||||
@Override
|
||||
public void handleResult(ResultContext<? extends Node> context)
|
||||
{
|
||||
doHandleResult(permissionAssessor, nodes, requiredNodes, context);
|
||||
}
|
||||
|
||||
private void doHandleResult(NodePermissionAssessor permissionAssessor, List<Node> nodes,
|
||||
int requiredNodes, ResultContext<? extends Node> context)
|
||||
{
|
||||
if (nodes.size() >= requiredNodes)
|
||||
{
|
||||
context.stop();
|
||||
return;
|
||||
}
|
||||
|
||||
Node node = context.getResultObject();
|
||||
addStoreInfo(node);
|
||||
|
||||
boolean shouldCache = nodes.size() >= options.getSkipCount();
|
||||
if(shouldCache)
|
||||
{
|
||||
logger.debug("- selected node "+nodes.size()+": "+node.getUuid()+" "+node.getId());
|
||||
nodesCache.setValue(node.getId(), node);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.debug("- skipped node "+nodes.size()+": "+node.getUuid()+" "+node.getId());
|
||||
}
|
||||
|
||||
if (permissionAssessor.isIncluded(node))
|
||||
{
|
||||
nodes.add(shouldCache ? node : null);
|
||||
}
|
||||
|
||||
if (permissionAssessor.shouldQuitChecks())
|
||||
{
|
||||
context.stop();
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
int numberFound = nodes.size();
|
||||
nodes.removeAll(Collections.singleton(null));
|
||||
|
||||
DBResultSet rs = createResultSet(options, nodes, numberFound);
|
||||
FilteringResultSet frs = new FilteringResultSet(rs, formInclusionMask(nodes));
|
||||
frs.setResultSetMetaData(new SimpleResultSetMetaData(LimitBy.UNLIMITED, PermissionEvaluationMode.EAGER, rs.getResultSetMetaData().getSearchParameters()));
|
||||
|
||||
logger.debug("- query is completed, "+nodes.size()+" nodes loaded");
|
||||
return frs;
|
||||
}
|
||||
|
||||
private DBResultSet createResultSet(QueryOptions options, List<Node> nodes, int numberFound)
|
||||
{
|
||||
DBResultSet dbResultSet = new DBResultSet(options.getAsSearchParmeters(), nodes, nodeDAO, nodeService, tenantService, Integer.MAX_VALUE);
|
||||
dbResultSet.setNumberFound(numberFound);
|
||||
return dbResultSet;
|
||||
}
|
||||
|
||||
private int computeRequiredNodesCount(QueryOptions options)
|
||||
{
|
||||
int maxItems = options.getMaxItems();
|
||||
if (maxItems == -1 || maxItems == Integer.MAX_VALUE)
|
||||
{
|
||||
return Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
return maxItems + options.getSkipCount() + 1;
|
||||
}
|
||||
|
||||
private BitSet formInclusionMask(List<Node> nodes)
|
||||
{
|
||||
BitSet inclusionMask = new BitSet(nodes.size());
|
||||
for (int i=0; i < nodes.size(); i++)
|
||||
{
|
||||
inclusionMask.set(i, true);
|
||||
}
|
||||
return inclusionMask;
|
||||
}
|
||||
|
||||
|
||||
private QueryEngineResults asQueryEngineResults(ResultSet paged)
|
||||
{
|
||||
HashSet<String> key = new HashSet<>();
|
||||
key.add("");
|
||||
Map<Set<String>, ResultSet> answer = new HashMap<>();
|
||||
answer.put(key, paged);
|
||||
|
||||
return new QueryEngineResults(answer);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.alfresco.repo.search.impl.querymodel.QueryEngine#getQueryModelFactory()
|
||||
*/
|
||||
@Override
|
||||
public QueryModelFactory getQueryModelFactory()
|
||||
{
|
||||
return new DBQueryModelFactory();
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection of nodes cache for clean-up and warm up when required
|
||||
* @param cache The node cache to set
|
||||
*/
|
||||
public void setNodesCache(SimpleCache<Serializable, Serializable> cache)
|
||||
{
|
||||
this.nodesCache = new EntityLookupCache<>(
|
||||
cache,
|
||||
CACHE_REGION_NODES,
|
||||
new ReadonlyLocalCallbackDAO());
|
||||
}
|
||||
|
||||
void setNodesCache(EntityLookupCache<Long, Node, NodeRef> nodesCache)
|
||||
{
|
||||
this.nodesCache = nodesCache;
|
||||
}
|
||||
|
||||
private class ReadonlyLocalCallbackDAO extends EntityLookupCallbackDAOAdaptor<Long, Node, NodeRef>
|
||||
{
|
||||
@Override
|
||||
public Pair<Long, Node> createValue(Node value)
|
||||
{
|
||||
throw new UnsupportedOperationException("Node creation is done externally: " + value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Long, Node> findByKey(Long nodeId)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NodeRef getValueKey(Node value)
|
||||
{
|
||||
return value.getNodeRef();
|
||||
}
|
||||
}
|
||||
|
||||
private void addStoreInfo(Node node)
|
||||
{
|
||||
StoreEntity storeEntity = node.getStore();
|
||||
logger.debug("Adding store info for store id " + storeEntity.getId());
|
||||
for (Pair<Long, StoreRef> storeRefPair : stores)
|
||||
{
|
||||
if (Objects.equals(storeEntity.getId(), storeRefPair.getFirst()))
|
||||
{
|
||||
StoreRef storeRef = storeRefPair.getSecond();
|
||||
storeEntity.setIdentifier(storeRef.getIdentifier());
|
||||
storeEntity.setProtocol(storeRef.getProtocol());
|
||||
logger.debug("Added store info" + storeEntity.toString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.util.schemacomp;
|
||||
|
||||
import static java.util.Locale.ENGLISH;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.repo.admin.patch.PatchService;
|
||||
import org.alfresco.repo.admin.patch.impl.SchemaUpgradeScriptPatch;
|
||||
import org.alfresco.repo.domain.dialect.Dialect;
|
||||
import org.alfresco.util.DialectUtil;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.core.io.support.ResourcePatternResolver;
|
||||
import org.springframework.extensions.surf.util.I18NUtil;
|
||||
|
||||
public class SchemaDifferenceHelper
|
||||
{
|
||||
private static Log logger = LogFactory.getLog(SchemaDifferenceHelper.class);
|
||||
|
||||
private Dialect dialect;
|
||||
private PatchService patchService;
|
||||
private List<SchemaUpgradeScriptPatch> optionalUpgradePatches;
|
||||
private ResourcePatternResolver rpr = new PathMatchingResourcePatternResolver(this.getClass().getClassLoader());
|
||||
|
||||
public SchemaDifferenceHelper(Dialect dialect, PatchService patchService)
|
||||
{
|
||||
this.dialect = dialect;
|
||||
this.patchService = patchService;
|
||||
this.optionalUpgradePatches = new ArrayList<SchemaUpgradeScriptPatch>(4);
|
||||
}
|
||||
|
||||
public SchemaDifferenceHelper(Dialect dialect, PatchService patchService,
|
||||
List<SchemaUpgradeScriptPatch> upgradePatches)
|
||||
{
|
||||
this.dialect = dialect;
|
||||
this.patchService = patchService;
|
||||
this.optionalUpgradePatches = upgradePatches;
|
||||
}
|
||||
|
||||
public void addUpgradeScriptPatch(SchemaUpgradeScriptPatch patch)
|
||||
{
|
||||
if (patch.isIgnored())
|
||||
{
|
||||
this.optionalUpgradePatches.add(patch);
|
||||
}
|
||||
}
|
||||
|
||||
public String findPatchCausingDifference(Difference difference)
|
||||
{
|
||||
for (SchemaUpgradeScriptPatch patch: optionalUpgradePatches)
|
||||
{
|
||||
if (!isPatchApplied(patch))
|
||||
{
|
||||
List<String> problemPatterns = getProblemsPatterns(patch);
|
||||
for (String problemPattern: problemPatterns)
|
||||
{
|
||||
if (describe(difference).matches(problemPattern))
|
||||
{
|
||||
return patch.getId();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isPatchApplied(SchemaUpgradeScriptPatch patch)
|
||||
{
|
||||
return patchService.getPatch(patch.getId()) != null;
|
||||
}
|
||||
|
||||
protected Resource getDialectResource(String resourceUrl)
|
||||
{
|
||||
if(resourceUrl == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return DialectUtil.getDialectResource(rpr, dialect.getClass(), resourceUrl);
|
||||
}
|
||||
|
||||
private List<String> getProblemsPatterns(SchemaUpgradeScriptPatch patch)
|
||||
{
|
||||
List<String> optionalProblems = new ArrayList<>();
|
||||
String problemFileUrl = patch.getProblemPatternsFileUrl();
|
||||
Resource problemFile = getDialectResource(problemFileUrl);
|
||||
|
||||
if (problemFile != null)
|
||||
{
|
||||
try (BufferedReader reader = new BufferedReader(new InputStreamReader(problemFile.getInputStream(), StandardCharsets.UTF_8)))
|
||||
{
|
||||
String line = reader.readLine();
|
||||
while (line != null)
|
||||
{
|
||||
optionalProblems.add(line);
|
||||
line = reader.readLine();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.error("Error while parsing problems patterns for patch " + patch.getId() + ex);
|
||||
}
|
||||
}
|
||||
|
||||
return optionalProblems;
|
||||
}
|
||||
|
||||
protected String describe(Difference difference)
|
||||
{
|
||||
if (difference.getLeft() == null)
|
||||
{
|
||||
return I18NUtil.getMessage(
|
||||
"system.schema_comp.diff.target_only",
|
||||
ENGLISH,
|
||||
difference.getRight().getDbObject().getTypeName(),
|
||||
difference.getRight().getPath(),
|
||||
difference.getRight().getPropertyValue());
|
||||
}
|
||||
if (difference.getRight() == null)
|
||||
{
|
||||
return I18NUtil.getMessage(
|
||||
"system.schema_comp.diff.ref_only",
|
||||
ENGLISH,
|
||||
difference.getLeft().getDbObject().getTypeName(),
|
||||
difference.getLeft().getPath(),
|
||||
difference.getLeft().getPropertyValue());
|
||||
}
|
||||
|
||||
return I18NUtil.getMessage(
|
||||
"system.schema_comp.diff",
|
||||
ENGLISH,
|
||||
difference.getLeft().getDbObject().getTypeName(),
|
||||
difference.getLeft().getPath(),
|
||||
difference.getLeft().getPropertyValue(),
|
||||
difference.getRight().getPath(),
|
||||
difference.getRight().getPropertyValue());
|
||||
}
|
||||
}
|
@@ -96,6 +96,14 @@
|
||||
<value>classpath:alfresco/dbscripts/create/${db.script.dialect}/Schema-Reference-ACT.xml</value>
|
||||
</list>
|
||||
</property>
|
||||
<property name="differenceHelper">
|
||||
<ref bean="differenceHelper" />
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="differenceHelper" class="org.alfresco.util.schemacomp.SchemaDifferenceHelper">
|
||||
<constructor-arg ref="dialect"/>
|
||||
<constructor-arg ref="patchComponent"/>
|
||||
</bean>
|
||||
|
||||
<bean id="encryptionChecker" class="org.alfresco.encryption.EncryptionChecker">
|
||||
|
@@ -719,6 +719,9 @@
|
||||
<!-- Smart Folders model -->
|
||||
<value>alfresco/model/smartfolder-model.xml</value>
|
||||
|
||||
<!-- IPTC model -->
|
||||
<value>alfresco/model/iptcModel.xml</value>
|
||||
|
||||
</list>
|
||||
</property>
|
||||
<property name="labels">
|
||||
@@ -733,6 +736,7 @@
|
||||
<value>alfresco/messages/transfer-model</value>
|
||||
<value>alfresco/messages/site-model</value>
|
||||
<value>alfresco/messages/smartfolder-model</value>
|
||||
<value>alfresco/messages/iptc-model</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
@@ -29,6 +29,7 @@
|
||||
|
||||
<bean id="schema.upgrade.core" class="org.alfresco.repo.domain.schema.SchemaBootstrapRegistration" init-method="register">
|
||||
<property name="schemaBootstrap" ref="schemaBootstrap" />
|
||||
<property name="differenceHelper" ref="differenceHelper" />
|
||||
<property name="preUpdateScriptPatches">
|
||||
<list>
|
||||
<ref bean="patch.db-V4.1-update-activiti-nullable-columns" />
|
||||
|
@@ -38,9 +38,11 @@
|
||||
<property name="dictionaryService" ref="dictionaryService"/>
|
||||
<property name="descriptorService" ref="descriptorComponent"/>
|
||||
<property name="eventFilterRegistry" ref="event2FilterRegistry"/>
|
||||
<property name="event2MessageProducer" ref="event2MessageProducer"/>
|
||||
<property name="transactionService" ref="transactionService"/>
|
||||
<property name="personService" ref="personService"/>
|
||||
<property name="nodeResourceHelper" ref="nodeResourceHelper"/>
|
||||
<property name="eventGeneratorQueue" ref="eventGeneratorQueue"/>
|
||||
<property name="nodeDAO" ref="nodeDAO"/>
|
||||
</bean>
|
||||
|
||||
<bean id="baseNodeResourceHelper" abstract="true">
|
||||
@@ -54,7 +56,45 @@
|
||||
|
||||
<bean id="nodeResourceHelper" class="org.alfresco.repo.event2.NodeResourceHelper" parent="baseNodeResourceHelper"/>
|
||||
|
||||
<bean id="eventGeneratorV2" class="org.alfresco.repo.event2.EventGenerator" parent="baseEventGeneratorV2">
|
||||
<property name="nodeResourceHelper" ref="nodeResourceHelper"/>
|
||||
<bean id="eventGeneratorV2" class="org.alfresco.repo.event2.EventGenerator" parent="baseEventGeneratorV2"/>
|
||||
|
||||
<bean id="eventGeneratorQueue" class="org.alfresco.repo.event2.EventGeneratorQueue" >
|
||||
<property name="enqueueThreadPoolExecutor">
|
||||
<ref bean="eventAsyncEnqueueThreadPool" />
|
||||
</property>
|
||||
<property name="dequeueThreadPoolExecutor">
|
||||
<ref bean="eventAsyncDequeueThreadPool" />
|
||||
</property>
|
||||
<property name="event2MessageProducer" ref="event2MessageProducer"/>
|
||||
</bean>
|
||||
|
||||
<bean id="eventAsyncEnqueueThreadPool" class="org.alfresco.util.ThreadPoolExecutorFactoryBean">
|
||||
<property name="poolName">
|
||||
<value>eventAsyncEnqueueThreadPool</value>
|
||||
</property>
|
||||
<property name="corePoolSize">
|
||||
<value>${repo.event2.queue.enqueueThreadPool.coreSize}</value>
|
||||
</property>
|
||||
<property name="maximumPoolSize">
|
||||
<value>${repo.event2.queue.enqueueThreadPool.maximumSize}</value>
|
||||
</property>
|
||||
<property name="threadPriority">
|
||||
<value>${repo.event2.queue.enqueueThreadPool.priority}</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="eventAsyncDequeueThreadPool" class="org.alfresco.util.ThreadPoolExecutorFactoryBean">
|
||||
<property name="poolName">
|
||||
<value>eventAsyncDequeueThreadPool</value>
|
||||
</property>
|
||||
<property name="corePoolSize">
|
||||
<value>${repo.event2.queue.dequeueThreadPool.coreSize}</value>
|
||||
</property>
|
||||
<property name="maximumPoolSize">
|
||||
<value>${repo.event2.queue.dequeueThreadPool.maximumSize}</value>
|
||||
</property>
|
||||
<property name="threadPriority">
|
||||
<value>${repo.event2.queue.dequeueThreadPool.priority}</value>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
|
@@ -8,9 +8,7 @@
|
||||
select
|
||||
node.id as id,
|
||||
node.version as version,
|
||||
store.id as store_id,
|
||||
store.protocol as protocol,
|
||||
store.identifier as identifier,
|
||||
node.store_id as store_id,
|
||||
node.uuid as uuid,
|
||||
node.type_qname_id as type_qname_id,
|
||||
node.locale_id as locale_id,
|
||||
@@ -24,7 +22,6 @@
|
||||
node.audit_accessed as audit_accessed
|
||||
from
|
||||
alf_node node
|
||||
join alf_store store on (store.id = node.store_id)
|
||||
join alf_transaction txn on (txn.id = node.transaction_id)
|
||||
<foreach item="item" index="index" collection="joins">
|
||||
<choose>
|
||||
|
@@ -779,6 +779,7 @@
|
||||
<if test="idTwo != null"><![CDATA[and na.node_id < #{idTwo}]]></if>
|
||||
and na.qname_id in
|
||||
<foreach item="item" index="i" collection="ids" open="(" separator="," close=")">#{item}</foreach>
|
||||
<if test="ordered == true">order by node.id ASC</if>
|
||||
</select>
|
||||
|
||||
<!-- Common results for result_NodeAssoc -->
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Alfresco IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=IPTC Aspect
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=City
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focusing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Country
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=ISO Country Code
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Caption/Description
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=Headline
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=Intellectual Genre
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Keywords
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Province/State
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=IPTC Scene Code
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=IPTC Subject Code
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Sublocation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Date Created
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Caption/Description writer
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Instructions
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Job Identifier
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=Title
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Copyright Notice
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Creator
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Creator's Job Title
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Credit Line
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Rights Usage Terms
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Source
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Address
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=City
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Country
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=Email(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Phone(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=Postal Code
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=State/Province
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=Web URL(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Urgency
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Category
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Supplemental Categories
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Additional Model Info
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Artwork or Object in the Image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=Code of Featured Organization
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Controlled Vocabulary Term
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Model Age
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Name of Featured Organization
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Person Shown
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Digital Image Identifier
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Physical Type of Original Photo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Type of Source for this Photo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Event
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=Image Supplier ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Image Supplier Name
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=Image Supplier Image ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=IPTC Fields Last Edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Maximum Available Height
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Maximum Available Width
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=PLUS Version
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=Copyright Owner ID(s)
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Copyright Owner Name(s)
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=Image Creator ID(s)
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Image Creator Name(s)
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUS ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Name
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=City
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Country
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=Email
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Extended Address
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=Postal Code
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Region
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Street Address
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Telephone 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Telephone 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Minor Model Age Disclosure
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=Model Release ID
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Model Release Status
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=Property Release ID
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Property Release Status
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Copyright Notice
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Creator
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Date Created
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Source
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=Source Inventory Number
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=Title
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=City
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=Country ISO-Code
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Country Name
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Province/State
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Sublocation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=World Region
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=City
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=Country ISO-Code
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Country Name
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Province/State
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Sublocation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=World Region
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Item Identifier
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Organization Identifier
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Alfresco IPTC-Domainmodell
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=IPTC-Format
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Stadt
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Land
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=ISO-L\u00e4nderkennung
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Beschriftung/Beschreibung
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=\u00dcberschrift
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=Intellektuelles Genre
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Stichw\u00f6rter
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Bundesland
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=IPTC-Szenencode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=IPTC-Themencode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Unterort
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Datum der Erstellung
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Verfasser der Beschriftung/Beschreibung
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Anweisungen
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Jobkennung
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=Titel
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Copyright-Hinweis
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Ersteller
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Jobtitel des Erstellers
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Kreditrahmen
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Nutzungsbedingungen
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Quelle
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Adresse
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Stadt
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Land
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=E-Mail-Adresse(n)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Telefonnummer(n)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=Postleitzahl
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Bundesland
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=Web-URL(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Dringlichkeit
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Kategorie
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Erg\u00e4nzende Kategorien
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Zus\u00e4tzliche Modell-Informationen
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Cover oder Objekt im Bild
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=Kennung der empfohlenen Organisation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Kontrollierter Vokabularbegriff
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Modellalter
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Name der empfohlenen Organisation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Gezeigte Person
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Digitale Bildkennung
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Physikalischer Typ des Originalfotos
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Quelltyp des Fotos
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Ereignis
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=Bildanbieter-ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Gibt den letzten Anbieter des Elements an (muss nicht unbedingt der Inhaber oder Ersteller sein).
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Name des Bildanbieters
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=Bild-ID des Bildanbieters
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=Zuletzt ge\u00e4nderte IPTC-Felder
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Maximal verf\u00fcgbare H\u00f6he
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Maximal verf\u00fcgbare Breite
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=PLUS-Version
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=Urheberrechtsinhaber-ID(s)
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Der oder die Inhaber des Urheberrechts f\u00fcr das lizenzierte Bild.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Name(n) des Urheberrechtsinhabers
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=Bildersteller-ID(s)
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Der oder die Ersteller des Bildes.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Name(n) des Bilderstellers
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUS-ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID einer Person oder eines Unternehmens, die bzw. das das Element lizenziert hat oder an die bzw. an das man sich wenden sollte, um eine Lizenz zur Nutzung des Elements zu erhalten.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Name
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Stadt
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Land
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=E-Mail-Adresse
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Erweiterte Adresse
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=Postleitzahl
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Region
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Stra\u00dfe
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Telefon 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Telefon 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Altersangabe des Teilmodells
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=ID der Modellversion
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Status der Modellversion
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=ID der Eigenschaftsversion
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Status der Eigenschaftsversion
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Copyright-Hinweis
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Ersteller
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Datum der Erstellung
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Quelle
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=Nummer des Quelllagerbestands
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=Titel
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Stadt
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=ISO-L\u00e4nderkennung
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=L\u00e4ndername
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Bundesland
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Unterort
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=Weltregion
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Stadt
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=ISO-L\u00e4nderkennung
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=L\u00e4ndername
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Bundesland
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Unterort
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=Weltregion
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Element-ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Organisations-ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Modelo de dominio IPTC de Alfresco
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=Aspecto IPTC
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Ciudad
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=C\u00f3digo de pa\u00eds ISO
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Pie de foto/descripci\u00f3n
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=Titular
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=G\u00e9nero intelectual
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Palabras clave
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Provincia/Estado
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=C\u00f3digo de escena IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=C\u00f3digo de asunto IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Ubicaci\u00f3n subordinada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Fecha de creaci\u00f3n
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Autor del pie de foto/descripci\u00f3n
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Instrucciones
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Identificador de trabajo
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=T\u00edtulo
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Nota acerca del copyright
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Creador
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Cargo del creador
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=L\u00ednea de reconocimiento
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Condic. uso de los derechos
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Origen
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Direcci\u00f3n
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Ciudad
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=Correo electr\u00f3nico(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Tel\u00e9fono(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=C\u00f3digo postal
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Estado/Provincia
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=URL de web
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Urgencia
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Categor\u00eda
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Categor\u00edas complementarias
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Informaci\u00f3n de modelo adicional
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Ilustraci\u00f3n u objeto en la imagen
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=C\u00f3digo de organizaci\u00f3n destacada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=T\u00e9rmino de vocabulario controlado
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Edad del modelo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Nombre de organizaci\u00f3n destacada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Persona mostrada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Identificador de imagen digital
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Tipo f\u00edsico de foto original
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Tipo de origen de foto
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Evento
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=ID del proveedor de imagen
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Identifica al proveedor m\u00e1s reciente del elemento, que no tiene por qu\u00e9 ser su propietario ni creador.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Nombre de proveedor de imagen
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=ID de imagen de proveedor de imagen
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=\u00daltimos campos IPTC editados
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Altura m\u00e1xima disponible
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Anchura m\u00e1xima disponible
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=Versi\u00f3n PLUS
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=ID del propietario de copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Propietario o propietarios del copyright de la imagen con licencia.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Nombre del propietario de copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=ID del creador de la imagen
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Creador o creadores de la imagen.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Nombre del creador de imagen
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=ID PLUS
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID de una persona o empresa con la que se debe contactar para obtener una licencia para usar el elemento o que ha otorgado una licencia al elemento.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Nombre
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Ciudad
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=Correo electr\u00f3nico
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Direcci\u00f3n completa
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=C\u00f3digo postal
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Regi\u00f3n
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Direcci\u00f3n
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Tel\u00e9fono 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Tel\u00e9fono 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Revelaci\u00f3n de edad del modelo menor
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=ID de la cesi\u00f3n de derechos de imagen
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Estado de la cesi\u00f3n de derechos de imagen
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=ID de la cesi\u00f3n de derechos de propiedad
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Estado de la cesi\u00f3n de derechos de propiedad
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Nota acerca del copyright
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Creador
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Fecha de creaci\u00f3n
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Origen
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=N\u00famero de inventario de origen
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=T\u00edtulo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Ciudad
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=C\u00f3digo ISO del pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Provincia/Estado
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Ubicaci\u00f3n subordinada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=Regi\u00f3n mundial
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Ciudad
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=C\u00f3digo ISO del pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Provincia/Estado
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Ubicaci\u00f3n subordinada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=Regi\u00f3n mundial
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Identificador de elemento
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Identificador de organizaci\u00f3n
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Mod\u00e8le de domaine IPTC Alfresco
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=Aspect IPTC
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Ville
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Pays
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=Code ISO du pays
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=L\u00e9gende/Description
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=Titre
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=Genre intellectuel
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Mots cl\u00e9s
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Province/\u00c9tat
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=Code sc\u00e8ne IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=Code sujet IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Lieu secondaire
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Date de cr\u00e9ation
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Auteur del la l\u00e9gende/description
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Instructions
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Identifiant de la t\u00e2che
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=Titre
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Mention de copyright
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Cr\u00e9ateur
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Fonction du cr\u00e9ateur
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Ligne de cr\u00e9dit
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Conditions d\u2019utilisation des droits
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Source
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Adresse
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Ville
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Pays
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=E-mail(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=T\u00e9l\u00e9phone(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=Code postal
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Province/\u00c9tat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=URL Web
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Priorit\u00e9
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Cat\u00e9gorie
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Cat\u00e9gories suppl\u00e9mentaires
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Informations suppl\u00e9mentaires sur le mod\u00e8le
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Conception graphique ou objet dans l\u2019image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=Code de l\u2019organisation recommand\u00e9e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Vocabulaire normalis\u00e9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=\u00c2ge du mod\u00e8le
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Nom de l\u2019organisation recommand\u00e9e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Personne affich\u00e9e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Identifiant de l\u2019image num\u00e9rique
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Type physique de la photo d\u2019origine
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Type de source de photo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=\u00c9v\u00e9nement
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=ID du fournisseur de l'image
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Identifie le fournisseur le plus r\u00e9cent de l'\u00e9l\u00e9ment, qui n'est pas n\u00e9cessairement son propri\u00e9taire ou son cr\u00e9ateur.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Nom du fournisseur de l\u2019image
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=ID de l\u2019image du fournisseur
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=Derni\u00e8re modification des champs IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Hauteur maximale disponible
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Largeur maximale disponible
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=Version PLUS
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=ID(s) du ou des propri\u00e9taire(s) du copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Propri\u00e9taire(s) du copyright de l'image sous license.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Nom(s) de d\u00e9tenteur de copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=ID(s) du ou des cr\u00e9ateur(s) de l'image
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Cr\u00e9ateur(s) de l'image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Nom(s) de cr\u00e9ateur d\u2019image
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=ID PLUS
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID de la personne ou entreprise \u00e0 contacter pour obtenir une licence d'utilisation de l'\u00e9l\u00e9ment ou qui d\u00e9tient les droits de licence de l'\u00e9l\u00e9ment.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Nom
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Ville
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Pays
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=E-mail
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Adresse compl\u00e8te
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=Code postal
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=R\u00e9gion
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Rue
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=T\u00e9l\u00e9phone\u00a01
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=T\u00e9l\u00e9phone\u00a02
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=\u00c2ge des mod\u00e8les mineurs
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=ID de l'autorisation du mod\u00e8le
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Statut de l'autorisation du mod\u00e8le
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=ID de l'autorisation de la propri\u00e9t\u00e9
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Statut de l'autorisation de la propri\u00e9t\u00e9
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Mention de copyright
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Cr\u00e9ateur
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Date de cr\u00e9ation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Source
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=Num\u00e9ro d\u2019inventaire de la source
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=Titre
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Ville
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=Code ISO du pays
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Nom du pays
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Province/\u00c9tat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Lieu secondaire
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=R\u00e9gion du monde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Ville
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=Code ISO du pays
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Nom du pays
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Province/\u00c9tat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Lieu secondaire
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=R\u00e9gion du monde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Identifiant de l\u2019\u00e9l\u00e9ment
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Identifiant de l\u2019organisation
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Modello dominio IPTC Alfresco
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=Aspetto IPTC
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Citt\u00e0
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Paese
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=Codice paese ISO
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Didascalia/Descrizione
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=Intestazione
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=Genere intellettuale
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Parole chiave
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Provincia/Stato
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=Codice scena IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=Codice oggetto IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Sottolocalit\u00e0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Data di creazione
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Autore didascalia/descrizione
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Istruzioni
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Identificatore job
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=Titolo
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Nota copyright
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Creatore
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Qualifica creatore
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Riconoscimenti
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Condizioni di utilizzo dei diritti
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Fonte
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Indirizzo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Citt\u00e0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Paese
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=E-mail
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Telefono
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=CAP
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Stato/Provincia
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=URL Web
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Urgenza
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Categoria
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Categorie supplementari
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Informazioni aggiuntive sul modello
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Grafica o oggetto nell'immagine
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=Codice organizzazione in evidenza
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Termine da vocabolario controllato
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Et\u00e0 del modello
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Nome organizzazione in evidenza
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Persona mostrata
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Identificatore immagine digitale
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Tipo fisico della foto originale
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Tipo di fonte della foto
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Evento
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=ID fornitore immagine
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Identifica il fornitore pi\u00f9 recente dell'elemento, che non \u00e8 necessariamente il proprietario o il creatore.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Nome fornitore immagine
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=ID immagine del fornitore immagine
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=Ultima modifica campi IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Massima altezza disponibile
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Massima larghezza disponibile
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=Versione PLUS
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=ID del proprietario del copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Proprietario o proprietari del copyright nell'immagine concessa in licenza.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Nome/i proprietario/i copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=ID creatore immagine
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Creatore o creatori dell'immagine.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Nome/i creatore/i immagine
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUS ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID di una persona o di un'azienda che deve essere contattata per ottenere una licenza per l'utilizzo dell'elemento o che ha l'elemento concesso in licenza.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Nome
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Citt\u00e0
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Paese
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=E-mail
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Indirizzo completo
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=CAP
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Area
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Indirizzo
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Telefono 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Telefono 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Divulgazione et\u00e0 del modello pi\u00f9 giovane
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=ID liberatoria modello
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Stato liberatoria modello
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=ID liberatoria propriet\u00e0
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Stato liberatoria propriet\u00e0
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Nota copyright
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Creatore
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Data di creazione
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Fonte
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=Numero di inventario fonte
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=Titolo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Citt\u00e0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=Codice paese ISO
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Nome paese
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Provincia/Stato
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Sottolocalit\u00e0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=Area geografica
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Citt\u00e0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=Codice paese ISO
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Nome paese
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Provincia/Stato
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Sottolocalit\u00e0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=Area geografica
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Identificatore elemento
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Identificatore organizzazione
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Alfresco IPTC \u30c9\u30e1\u30a4\u30f3\u30e2\u30c7\u30eb
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=IPTC \u30a2\u30b9\u30da\u30af\u30c8
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=\u5e02\u533a\u753a\u6751
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=\u56fd
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=\u56fd\u306e ISO \u30b3\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3/\u8aac\u660e\u6587
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=\u898b\u51fa\u3057
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=\u77e5\u7684\u30b8\u30e3\u30f3\u30eb
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=\u30ad\u30fc\u30ef\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=\u90fd\u9053\u5e9c\u770c
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=IPTC \u30b7\u30fc\u30f3\u30b3\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=IPTC \u30b5\u30d6\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=\u30b5\u30d6\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=\u4f5c\u6210\u65e5
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3/\u8aac\u660e\u6587\u306e\u4f5c\u6210\u8005
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=\u624b\u9806
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=\u30b8\u30e7\u30d6 ID
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=\u30bf\u30a4\u30c8\u30eb
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=\u8457\u4f5c\u6a29\u60c5\u5831
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=\u4f5c\u6210\u8005
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=\u4f5c\u6210\u8005\u306e\u5f79\u8077\u540d
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=\u89e3\u8aac
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=\u8457\u4f5c\u6a29\u5229\u7528\u898f\u7d04
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=\u30bd\u30fc\u30b9
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=\u4f4f\u6240
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=\u5e02\u533a\u753a\u6751
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=\u56fd
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=E \u30e1\u30fc\u30eb
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=\u96fb\u8a71\u756a\u53f7
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=\u90f5\u4fbf\u756a\u53f7
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=\u90fd\u9053\u5e9c\u770c
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=Web \u30da\u30fc\u30b8\u306e URL
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=\u7dca\u6025\u5ea6
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=\u30ab\u30c6\u30b4\u30ea
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=\u88dc\u8db3\u30ab\u30c6\u30b4\u30ea
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=\u305d\u306e\u4ed6\u306e\u30e2\u30c7\u30eb\u60c5\u5831
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=\u753b\u50cf\u5185\u306e\u30a2\u30fc\u30c8\u30ef\u30fc\u30af\u307e\u305f\u306f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=\u63b2\u8f09\u56e3\u4f53\u306e\u30b3\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=\u7ba1\u7406\u7528\u8a9e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=\u30e2\u30c7\u30eb\u306e\u5e74\u9f62
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=\u63b2\u8f09\u56e3\u4f53\u306e\u540d\u79f0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=\u63b2\u8f09\u4eba\u7269
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=\u30c7\u30b8\u30bf\u30eb\u753b\u50cf ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=\u5143\u306e\u5199\u771f\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=\u3053\u306e\u5199\u771f\u306e\u30bd\u30fc\u30b9\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=\u30a4\u30d9\u30f3\u30c8
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=\u753b\u50cf\u63d0\u4f9b\u8005\u306e ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=\u753b\u50cf\u306e\u6700\u65b0\u306e\u63d0\u4f9b\u8005\u3092\u793a\u3057\u307e\u3059\u3002\u3053\u306e\u4eba\u7269\u306f\u3001\u5fc5\u305a\u3057\u3082\u6240\u6709\u8005\u3084\u5236\u4f5c\u8005\u3067\u3042\u308b\u3068\u306f\u9650\u308a\u307e\u305b\u3093\u3002
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=\u753b\u50cf\u63d0\u4f9b\u8005\u306e\u6c0f\u540d
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=\u753b\u50cf\u63d0\u4f9b\u8005\u306e\u753b\u50cf ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=IPTC \u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u6700\u7d42\u7de8\u96c6\u65e5
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=\u6700\u5927\u53ef\u80fd\u9ad8\u3055
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=\u6700\u5927\u53ef\u80fd\u5e45
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=PLUS \u306e\u30d0\u30fc\u30b8\u30e7\u30f3
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=\u8457\u4f5c\u6a29\u6240\u6709\u8005\u306e ID
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=\u753b\u50cf\u306e\u4f7f\u7528\u8a31\u8afe\u3092\u53d6\u5f97\u3057\u305f\u8457\u4f5c\u6a29\u6240\u6709\u8005\u3092\u793a\u3057\u307e\u3059\u3002
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=\u8457\u4f5c\u6a29\u6240\u6709\u8005\u306e\u6c0f\u540d
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=\u753b\u50cf\u5236\u4f5c\u8005\u306e ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=\u753b\u50cf\u306e\u5236\u4f5c\u8005\u3092\u793a\u3057\u307e\u3059\u3002
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=\u753b\u50cf\u5236\u4f5c\u8005\u306e\u6c0f\u540d
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUS ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=\u753b\u50cf\u306e\u4f7f\u7528\u8a31\u8afe\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u9023\u7d61\u3059\u3079\u304d\u500b\u4eba\u307e\u305f\u306f\u4f01\u696d\u3001\u307e\u305f\u306f\u753b\u50cf\u306e\u4f7f\u7528\u8a31\u8afe\u3092\u53d6\u5f97\u3057\u305f\u500b\u4eba\u307e\u305f\u306f\u4f01\u696d\u306e ID \u3092\u793a\u3057\u307e\u3059\u3002
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=\u9023\u7d61\u5148
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=\u5e02\u533a\u753a\u6751
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=\u56fd
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=E \u30e1\u30fc\u30eb
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=\u62e1\u5f35\u30a2\u30c9\u30ec\u30b9
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=\u90f5\u4fbf\u756a\u53f7
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=\u5e02\u533a\u753a\u6751
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=\u756a\u5730
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=\u96fb\u8a71\u756a\u53f7 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=\u96fb\u8a71\u756a\u53f7 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=\u6700\u3082\u82e5\u3044\u30e2\u30c7\u30eb\u306e\u64ae\u5f71\u6642\u306e\u5e74\u9f62
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=\u30e2\u30c7\u30eb\u30ea\u30ea\u30fc\u30b9 ID
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=\u30e2\u30c7\u30eb\u30ea\u30ea\u30fc\u30b9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=\u30d7\u30ed\u30d1\u30c6\u30a3\u30ea\u30ea\u30fc\u30b9 ID
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=\u30d7\u30ed\u30d1\u30c6\u30a3\u30ea\u30ea\u30fc\u30b9\u306e\u30b9\u30c6\u30fc\u30bf\u30b9
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=\u8457\u4f5c\u6a29\u60c5\u5831
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=\u4f5c\u6210\u8005
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=\u4f5c\u6210\u65e5
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=\u30bd\u30fc\u30b9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=\u30bd\u30fc\u30b9\u306e\u30a4\u30f3\u30d9\u30f3\u30c8\u30ea\u756a\u53f7
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=\u30bf\u30a4\u30c8\u30eb
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=\u5e02\u533a\u753a\u6751
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=\u56fd\u306e ISO \u30b3\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=\u56fd\u540d
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=\u90fd\u9053\u5e9c\u770c
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=\u30b5\u30d6\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=\u4e16\u754c\u5730\u57df
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=\u5e02\u533a\u753a\u6751
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=\u56fd\u306e ISO \u30b3\u30fc\u30c9
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=\u56fd\u540d
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=\u90fd\u9053\u5e9c\u770c
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=\u30b5\u30d6\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=\u4e16\u754c\u5730\u57df
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=\u30a2\u30a4\u30c6\u30e0 ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=\u7d44\u7e54 ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=IPTC-domenemodell for Alfresco
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=IPTC-forhold
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Poststed
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Land
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=ISO-landskode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Bildetekst/beskrivelse
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=Overskrift
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=Sjanger
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=N\u00f8kkelord
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Provins/stat
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=IPTC-scenekode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=IPTC-emnekode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Stedsinformasjon
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Dato opprettet
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Forfatter av bildetekst/beskrivelse
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Instruksjoner
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Jobbidentifikator
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=Tittel
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Opphavsmelding
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Oppretter
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Oppretters stillingstittel
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Bevilget maksimum kreditt
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Bruksvilk\u00e5r
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Kilde
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Adresse
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Poststed
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Land
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=E-post(er)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Telefon(er)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=Postnummer
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Stat/provins
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=Nett-URL
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Prioritet
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Kategori
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Supplerende kategorier
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Mer modellinformasjon
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Bilde eller objekt i bildet
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=Koden til den aktuelle organisasjonen
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Styrt vokabularbegrep
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Modellalder
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Navnet til den aktuelle organisasjonen
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Person som vises
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Digital bildeidentifikator
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Fysisk type til det opprinnelige bildet
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Type bildekilde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Hendelse
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=Bildeleverand\u00f8rens ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Identifiserer den nyeste leverand\u00f8ren av elementet, som n\u00f8dvendigvis ikke er eieren eller oppretteren.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Bildeleverand\u00f8rens navn
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=Bildeleverand\u00f8rens bilde-ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=Siste redigerte IPTC-felt
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Maksimal tilgjengelig h\u00f8yde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Maksimal tilgjengelig bredde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=PLUS-versjon
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=ID eller ID-er til innehaveren av opphavsretten
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Innehaveren eller innehaverne av opphavsretten til det lisensierte bildet.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Navnet/navnene til innehaver(e) av opphavrett
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=ID eller ID-er til bildeoppretteren
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Oppretter eller opprettere av bildet.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Navnet/navnene til bildeoppretter(e)
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUSS-ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID til en person eller selskap som skal kontaktes for \u00e5 skaffe en lisens for \u00e5 bruke elementet eller som har lisensiert elementet.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Navn
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Poststed
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Land
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=E-post
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Utvidet adresse
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=Postnummer
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Region
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Gateadresse
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Telefon 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Telefon 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Offentliggj\u00f8ring om modeller og mindre\u00e5rige
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=ID ved modellkontrakt
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Status ved modellkontrakt
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=ID ved modellkontrakt
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Status ved modellkontrakt
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Opphavsmelding
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Oppretter
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Dato opprettet
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Kilde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=Kildens inventarnummer
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=Tittel
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Poststed
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=Landets ISO-kode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Navn p\u00e5 landet
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Provins/stat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Stedsinformasjon
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=Verdensregion
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Poststed
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=Landets ISO-kode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Navn p\u00e5 landet
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Provins/stat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Stedsinformasjon
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=Verdensregion
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Objektidentifikator
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Organisasjonsidentifikator
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Alfresco IPTC-domeinmodel
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=IPTC-aspect
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Stad
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Land
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=ISO-landcode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Titel/omschrijving
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=Koptitel
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=Intellectueel genre
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Trefwoorden
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Provincie/staat
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=IPTC-sc\u00e8necode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=IPTC-onderwerpcode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Sublocatie
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Aanmaakdatum
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Titel/omschrijving auteur
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Instructies
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Taaknaam
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=Titel
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Kennisgeving over auteursrechten
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Maker
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Functietitel van de maker
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Kredietregel
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Gebruiksvoorwaarden voor rechten
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Bron
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Adres
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Stad
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Land
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=E-mailadres(sen)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Telefoonnummer(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=Postcode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Staat/provincie
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=Web-URL(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Urgentie
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Categorie
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Aanvullende categorie\u00ebn
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Aanvullende modelgegevens
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Kunstwerk of object in de afbeelding
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=Code van betreffende organisatie
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Gecontroleerde term uit woordenlijst
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Leeftijd van model
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Naam van betreffende organisatie
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Afgebeelde persoon
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=ID van digitaal beeld
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Fysiek type van originele foto
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Brontype van foto
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Gebeurtenis
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=ID van beeldleverancier
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Geeft de meest recente leverancier van het item aan, dit is niet noodzakelijkerwijs de eigenaar of maker van het item.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Naam van beeldleverancier
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=Beeldnummer van beeldleverancier
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=IPTC-velden laatst bewerkt
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Maximaal beschikbare hoogte
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Maximaal beschikbare breedte
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=PLUS-versie
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=ID('s) van auteursrechteigenaar
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=De eigenaar of eigenaars van het auteursrecht op het beeld met licentie.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Na(a)m(en) van auteursrechteigenaar
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=ID('s) van maker van beeld
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=De maker of makers van het beeld.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Naam van maker van het beeld
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUS ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=De ID van een persoon met wie/bedrijf waarmee contact moet worden opgenomen om een licentie te verkrijgen voor gebruik van het item of die/dat de licentie voor het item heeft/hebben verleend.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Naam
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Stad
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Land
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=E-mailadres
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Uitgebreid adres
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=Postcode
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Regio
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Straatnaam
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Telefoonnummer 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Telefoonnummer 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Openbaarmaking van leeftijd van minderjarige modellen
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=ID van modelrelease
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Status van modelrelease
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=ID van eigendomsrelease
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Status van eigendomsrelease
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Kennisgeving over auteursrechten
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Maker
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Aanmaakdatum
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Bron
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=Voorraadnummer van bron
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=Titel
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Stad
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=ISO-landcode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Landnaam
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Provincie/staat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Sublocatie
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=Regio
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Stad
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=ISO-landcode
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Landnaam
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Provincie/staat
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Sublocatie
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=Regio
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Onderdeel-ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Organisatie-ID
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Modelo de Dom\u00ednio IPTC do Alfresco
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=Aspecto IPTC
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=Cidade
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=C\u00f3digo ISO do Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=Legenda/Descri\u00e7\u00e3o
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=T\u00edtulo
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=G\u00eanero Intelectual
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=Palavras-chave
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=Regi\u00e3o/Estado
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=C\u00f3digo de Cena IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=C\u00f3digo de Assunto IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=Subloca\u00e7\u00e3o
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=Data Criada
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=Escritor de Legenda/Descri\u00e7\u00e3o
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=Instru\u00e7\u00f5es
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=Identificador de Trabalho
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=T\u00edtulo
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=Aviso de Copyright
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=Criador
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=Cargo do Criador
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=Linha de Cr\u00e9dito
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=Termos de Uso dos Direitos
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=Fonte
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=Endere\u00e7o
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=Cidade
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=Email(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=Telefone(s)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=CEP
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=Estado/Regi\u00e3o
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=URL(s) da Web
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=Urg\u00eancia
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=Categoria
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=Categorias Suplementares
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=Informa\u00e7\u00e3o de Modelo Adicional
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=Capa ou Objeto na Imagem
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=C\u00f3digo de Organiza\u00e7\u00e3o em Destaque
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=Termo de Vocabul\u00e1rio Controlado
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=Idade do Modelo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=Nome de Organiza\u00e7\u00e3o em Destaque
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=Pessoa Exibida
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=Identificador de Imagem Digital
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=Tipo F\u00edsico ou Foto Original
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=Tipo de Fonte de Foto
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=Evento
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=ID de Fornecedor de Imagem
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=Identifica o fornecedor mais recente do item, que n\u00e3o necessariamente \u00e9 o propriet\u00e1rio ou o criador.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=Nome de Fornecedor de Imagem
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifica o fornecedor mais recente do item, que n\u00e3o necessariamente \u00e9 o propriet\u00e1rio ou o criador.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=Imagem da Identidade de Fornecedor de Imagem
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=\u00daltimos Campos IPTC Editados
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=Altura M\u00e1xima Dispon\u00edvel
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=Largura M\u00e1xima Dispon\u00edvel
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=Vers\u00e3o PLUS
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=ID(s) de Propriet\u00e1rio do Copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=Propriet\u00e1rio(s) do copyright da imagem licenciada.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=Nome(s) do Propriet\u00e1rio do Copyright
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Propriet\u00e1rio(s) do copyright da imagem licenciada.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=ID(s) do Criador da Imagem
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=Criador(es) da imagem.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=Nome(s) do Criador da Imagem
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Criador(es) da imagem.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=ID PLUS
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=ID de uma pessoa ou empresa que deve ser contatada a fim de obter uma licen\u00e7a para uso do item ou de quem o licenciou.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=Nome
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=Cidade
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=Email
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=Endere\u00e7o Completo
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=CEP
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=Regi\u00e3o
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=Endere\u00e7o
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=Telefone 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=Telefone 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=Declara\u00e7\u00e3o de Modelo Menor de Idade
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=Identidade do Lan\u00e7amento do Modelo
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=Status do Lan\u00e7amento do Modelo
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=Identidade do Lan\u00e7amento da Propriedade
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=Status do Lan\u00e7amento da Propriedade
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=Aviso de Copyright
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=Criador
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=Data Criada
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=Fonte
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=N\u00famero de Invent\u00e1rio da Fonte
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=T\u00edtulo
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=Cidade
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=C\u00f3digo ISO do Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=Nome do Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=Regi\u00e3o/Estado
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=Subloca\u00e7\u00e3o
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=Regi\u00e3o Mundial
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=Cidade
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=C\u00f3digo ISO do Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=Nome do Pa\u00eds
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=Regi\u00e3o/Estado
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=Subloca\u00e7\u00e3o
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=Regi\u00e3o Mundial
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=Identificador do Item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=Identificador de Organiza\u00e7\u00e3o
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u043c\u0435\u043d\u0430 IPTC Alfresco
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=\u0410\u0441\u043f\u0435\u043a\u0442 IPTC
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=\u0413\u043e\u0440\u043e\u0434
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=\u0421\u0442\u0440\u0430\u043d\u0430
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=\u041a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b ISO
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=\u0421\u0443\u0431\u0442\u0438\u0442\u0440\u044b/\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=\u0418\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0436\u0430\u043d\u0440
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=\u041e\u0431\u043b\u0430\u0441\u0442\u044c/\u0440\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 (\u0448\u0442\u0430\u0442)
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=\u041a\u043e\u0434 \u0441\u0446\u0435\u043d\u044b IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=\u041a\u043e\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=\u0423\u0442\u043e\u0447\u043d\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=\u0410\u0432\u0442\u043e\u0440 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432/\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=\u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0434\u0430\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u043c \u043f\u0440\u0430\u0432\u0435
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=\u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=\u0421\u0442\u0440\u043e\u043a\u0430 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0435\u0439
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=\u0410\u0434\u0440\u0435\u0441
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=\u0413\u043e\u0440\u043e\u0434
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=\u0421\u0442\u0440\u0430\u043d\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=\u0410\u0434\u0440\u0435\u0441(\u0430) \u044d\u043b. \u043f\u043e\u0447\u0442\u044b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=\u0422\u0435\u043b\u0435\u0444\u043e\u043d(\u044b)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=\u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 (\u0448\u0442\u0430\u0442)/\u043e\u0431\u043b\u0430\u0441\u0442\u044c
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=URL-\u0430\u0434\u0440\u0435\u0441(\u0430)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=\u0421\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043c\u043e\u0434\u0435\u043b\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=\u0420\u0438\u0441\u0443\u043d\u043e\u043a \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=\u041a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=\u041d\u0435\u0446\u0435\u043d\u0437\u0443\u0440\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=\u0412\u043e\u0437\u0440\u0430\u0441\u0442 \u043c\u043e\u0434\u0435\u043b\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043b\u0438\u0446\u043e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=\u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=\u0421\u043e\u0431\u044b\u0442\u0438\u0435
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f IPTC
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=\u0412\u0435\u0440\u0441\u0438\u044f PLUS
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440(\u044b) \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043f\u0440\u0430\u0432
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0438\u043b\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u044b \u043f\u0440\u0430\u0432 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=\u0418\u043c\u044f (\u0438\u043c\u0435\u043d\u0430) \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440(\u044b) \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=\u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=\u0418\u043c\u044f (\u0438\u043c\u0435\u043d\u0430) \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=\u0414\u041e\u041f\u041e\u041b\u041d\u0418\u0422\u0415\u041b\u042c\u041d\u042b\u0419 \u0418\u0414\u0415\u041d\u0422\u0418\u0424\u0418\u041a\u0410\u0422\u041e\u0420
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=\u0418\u043c\u044f
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=\u0413\u043e\u0440\u043e\u0434
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=\u0421\u0442\u0440\u0430\u043d\u0430
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=\u0420\u0435\u0433\u0438\u043e\u043d
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=\u0423\u043b\u0438\u0446\u0430
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=\u0422\u0435\u043b\u0435\u0444\u043e\u043d 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=\u0422\u0435\u043b\u0435\u0444\u043e\u043d 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL-\u0430\u0434\u0440\u0435\u0441
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u043c\u0430\u043b\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=\u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=\u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u044b\u043f\u0443\u0441\u043a\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u043e\u043c \u043f\u0440\u0430\u0432\u0435
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=\u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=\u0418\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=\u0413\u043e\u0440\u043e\u0434
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=ISO-\u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u044b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=\u041e\u0431\u043b\u0430\u0441\u0442\u044c/\u0440\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 (\u0448\u0442\u0430\u0442)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=\u0423\u0442\u043e\u0447\u043d\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=\u0420\u0435\u0433\u0438\u043e\u043d \u043c\u0438\u0440\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=\u0413\u043e\u0440\u043e\u0434
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=ISO-\u043a\u043e\u0434 \u0441\u0442\u0440\u0430\u043d\u044b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u044b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=\u041e\u0431\u043b\u0430\u0441\u0442\u044c/\u0440\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0430 (\u0448\u0442\u0430\u0442)
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=\u0423\u0442\u043e\u0447\u043d\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=\u0420\u0435\u0433\u0438\u043e\u043d \u043c\u0438\u0440\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -0,0 +1,195 @@
|
||||
# Display labels for IPTC Domain Model
|
||||
|
||||
iptcxmp_iptcmodel.description=Alfresco IPTC \u57df\u6a21\u578b
|
||||
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.title=IPTC
|
||||
iptcxmp_iptcmodel.aspect.iptcxmp_iptcxmpAspect.description=IPTC \u5207\u9762
|
||||
aspect.iptcxmp_iptcxmpAspect=IPTC
|
||||
|
||||
iptcxmp_iptcmodel.property.photoshop_City.title=\u57ce\u5e02
|
||||
iptcxmp_iptcmodel.property.photoshop_City.description=Name of the city the content is focussing on -- either the place shown in visual media or referenced by text or audio media. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.title=\u56fd\u5bb6/\u5730\u533a
|
||||
iptcxmp_iptcmodel.property.photoshop_Country.description=Full name of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top- down geographical hierarchy. The full name should be expressed as a verbal name and not as a code, a code should go to the element "CountryCode"
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.title=ISO \u56fd\u5bb6/\u5730\u533a\u4ee3\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CountryCode.description=Code of the country the content is focussing on -- either the country shown in visual media or referenced in text or audio media. This element is at the top/first level of a top-down geographical hierarchy. The code should be taken from ISO 3166 two or three letter code. The full name of a country should go to the "Country" element.
|
||||
iptcxmp_iptcmodel.property.dc_description.title=\u8bf4\u660e/\u63cf\u8ff0
|
||||
iptcxmp_iptcmodel.property.dc_description.description=A textual description, including captions, of the item's content, particularly used where the object is not text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.title=\u6807\u9898
|
||||
iptcxmp_iptcmodel.property.photoshop_Headline.description=A brief synopsis of the caption. Headline is not the same as Title.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.title=\u77e5\u8bc6\u7c7b\u578b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_IntellectualGenre.description=Describes the nature, intellectual, artistic or journalistic characteristic of a item, not specifically its content.
|
||||
iptcxmp_iptcmodel.property.dc_subject.title=\u5173\u952e\u5b57
|
||||
iptcxmp_iptcmodel.property.dc_subject.description=Keywords to express the subject of the content. Keywords may be free text and don't have to be taken from a controlled vocabulary. Codes from the controlled vocabulary IPTC Subject NewsCodes must go to the "Subject Code" field.
|
||||
iptcxmp_iptcmodel.property.photoshop_State.title=\u7701/\u5dde
|
||||
iptcxmp_iptcmodel.property.photoshop_State.description=Name of the subregion of a country -- either called province or state or anything else -- the content is focussing on -- either the subregion shown in visual media or referenced by text or audio media. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.title=IPTC \u573a\u666f\u4ee3\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Scene.description=Describes the scene of a news content. Specifies one or more terms from the IPTC "Scene-NewsCodes". Each Scene is represented as a string of 6 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.title=IPTC \u4e3b\u9898\u4ee3\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_SubjectCode.description=Specifies one or more Subjects from the IPTC Subject-NewsCodes taxonomy to categorise the content. Each Subject is represented as a string of 8 digits in an unordered list.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.title=\u5b50\u4f4d\u7f6e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_Location.description=Name of a sublocation the content is focussing on -- either the location shown in visual media or referenced by text or audio media. This location name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.title=\u521b\u5efa\u65e5\u671f
|
||||
iptcxmp_iptcmodel.property.photoshop_DateCreated.description=Designates the date and optionally the time the intellectual content was created rather than the date of the creation of the physical representation.
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.title=\u8bf4\u660e/\u63cf\u8ff0\u4f5c\u8005
|
||||
iptcxmp_iptcmodel.property.photoshop_CaptionWriter.description=Identifier or the name of the person involved in writing, editing or correcting the description of the content.
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.title=\u8bf4\u660e
|
||||
iptcxmp_iptcmodel.property.photoshop_Instructions.description=Any of a number of instructions from the provider or creator to the receiver of the item.
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.title=\u804c\u4e1a\u6807\u8bc6\u7b26
|
||||
iptcxmp_iptcmodel.property.photoshop_TransmissionReference.description=Number or identifier for the purpose of improved workflow handling. This is a user created identifier related to the job for which the item is supplied.
|
||||
iptcxmp_iptcmodel.property.dc_title.title=\u804c\u52a1
|
||||
iptcxmp_iptcmodel.property.dc_title.description=A shorthand reference for the item. Title provides a short human readable name which can be a text and/or numeric reference. It is not the same as Headline.
|
||||
iptcxmp_iptcmodel.property.dc_rights.title=\u7248\u6743\u58f0\u660e
|
||||
iptcxmp_iptcmodel.property.dc_rights.description=Contains any necessary copyright notice for claiming the intellectual property for this item and should identify the current owner of the copyright for the item. Other entities like the creator of the item may be added in the corresponding field. Notes on usage rights should be provided in "Rights usage terms".
|
||||
iptcxmp_iptcmodel.property.dc_creator.title=\u521b\u5efa\u8005
|
||||
iptcxmp_iptcmodel.property.dc_creator.description=Contains the name of the person who created the content of this item, a photographer for photos, a graphic artist for graphics, or a writer for textual news, but in cases where the photographer should not be identified the name of a company or organisation may be appropriate.
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.title=\u521b\u5efa\u8005\u7684\u804c\u52a1
|
||||
iptcxmp_iptcmodel.property.photoshop_AuthorsPosition.description=Contains the job title of the person who created the content of this item. As this is sort of a qualifier the Creator element has to be filled in as mandatory prerequisite for using Creator's Jobtitle.
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.title=\u4fe1\u7528\u989d\u5ea6
|
||||
iptcxmp_iptcmodel.property.photoshop_Credit.description=The credit to person(s) and/or organisation(s) required by the supplier of the item to be used when published. This is a free-text field.
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.title=\u7248\u6743\u4f7f\u7528\u6761\u6b3e
|
||||
iptcxmp_iptcmodel.property.xmpRights_UsageTerms.description=The licensing parameters of the item expressed in free-text.
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.title=\u6e90
|
||||
iptcxmp_iptcmodel.property.photoshop_Source.description=Identifies the original owner of the copyright for the intellectual content of the item. This could be an agency, a member of an agency or an individual. Source could be different from Creator and from the entities in the CopyrightNotice.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.title=\u5730\u5740
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrExtadr.description=The contact information address part. Comprises an optional company name and all required information to locate the building or postbox to which mail should be sent. To that end, the address is a multiline field.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.title=\u57ce\u5e02
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCity.description=The contact information city part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.title=\u56fd\u5bb6/\u5730\u533a
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrCtry.description=The contact information country part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.title=\u7535\u5b50\u90ae\u4ef6
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiEmailWork.description=The contact information email address part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.title=\u7535\u8bdd
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiTelWork.description=The contact information phone number part.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.title=\u90ae\u653f\u7f16\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrPcode.description=The contact information part denoting the local postal code.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.title=\u5dde/\u7701
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiAdrRegion.description=The contact information part denoting regional information such as state or province.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.title=Web URL
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpCore_CiUrlWork.description=The contact information web address part. Multiple addresses can be given, separated by a comma.
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.title=\u7d27\u6025
|
||||
iptcxmp_iptcmodel.property.photoshop_Urgency.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.title=\u7c7b\u522b
|
||||
iptcxmp_iptcmodel.property.photoshop_Category.description=Deprecated and outside the IPTC Core.
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.title=\u8865\u5145\u7c7b\u522b
|
||||
iptcxmp_iptcmodel.property.photoshop_SupplementalCategories.description=Deprecated and outside the IPTC Core.
|
||||
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.title=\u5176\u4ed6\u6a21\u578b\u4fe1\u606f
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AddlModelInfo.description=Information about the ethnicity and other facets of the model(s) in a model-released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.title=\u56fe\u50cf\u4e2d\u7684\u63d2\u56fe\u6216\u5bf9\u8c61
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ArtworkOrObject.description=A set of metadata about artwork or an object in the item
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.title=\u7cbe\u9009\u7ec4\u7ec7\u7684\u4ee3\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageCode.description=Code from a controlled vocabulary for identifying the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.title=\u53d7\u63a7\u5236\u8bcd\u6c47\u8868\u672f\u8bed
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_CVterm.description=A term to describe the content of the image by a value from a Controlled Vocabulary.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.title=\u6a21\u578b\u5b58\u5728\u65f6\u95f4
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_ModelAge.description=Age of the human model(s) at the time this image was taken in a model released image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.title=\u7cbe\u9009\u7ec4\u7ec7\u7684\u540d\u79f0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_OrganisationInImageName.description=Name of the organisation or company which is featured in the content.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.title=\u663e\u793a\u7684\u4eba\u5458
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_PersonInImage.description=Name of a person the content of the item is about. For photos that is a person shown in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.title=\u6570\u5b57\u56fe\u50cf\u6807\u8bc6\u7b26
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigImageGUID.description=Globally unique identifier for the item. It is created and applied by the creator of the item at the time of its creation . This value shall not be changed after that time.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.title=\u539f\u59cb\u7167\u7247\u7684\u7269\u7406\u7c7b\u578b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourcefileType.description=The type of the source digital file.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.title=\u7167\u7247\u6e90\u7c7b\u578b
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_DigitalSourceType.description=The type of the source of this digital image
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.title=\u4e8b\u4ef6
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_Event.description=Names or describes the specific event the content relates to.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.title=\u56fe\u50cf\u4f9b\u5e94\u5546 ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierID.description=\u786e\u5b9a\u9879\u76ee\u7684\u6700\u8fd1\u4f9b\u5e94\u5546\uff0c\u5176\u4e0d\u5fc5\u662f\u81ea\u5df1\u6216\u521b\u5efa\u8005\u3002
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.title=\u56fe\u50cf\u4f9b\u5e94\u5546\u540d\u79f0
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierName.description=Identifies the most recent supplier of the item, who is not necessarily its owner or creator.
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.title=\u56fe\u50cf\u4f9b\u5e94\u5546\u56fe\u50cf ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageSupplierImageID.description=Optional identifier assigned by the Image Supplier to the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.title=IPTC \u5b57\u6bb5\u4e0a\u6b21\u7f16\u8f91\u65f6\u95f4
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_IptcLastEdited.description=The date and optionally time when any of the IPTC edited
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.title=\u6700\u5927\u53ef\u7528\u9ad8\u5ea6
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailHeight.description=The maximum available height in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.title=\u6700\u5927\u53ef\u7528\u5bbd\u5ea6
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_MaxAvailWidth.description=The maximum available width in pixels of the original photo from which this photo has been derived by downsizing.
|
||||
iptcxmp_iptcmodel.property.plus_Version.title=PLUS \u7248\u672c
|
||||
iptcxmp_iptcmodel.property.plus_Version.description=The version number of the PLUS standards in place at the time of the transaction.
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.title=\u7248\u6743\u6240\u6709\u8005 ID
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerID.description=\u6388\u6743\u56fe\u50cf\u4e2d\u7248\u6743\u7684\u6240\u6709\u8005\u3002
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.title=\u7248\u6743\u6240\u6709\u8005\u59d3\u540d
|
||||
iptcxmp_iptcmodel.property.plus_CopyrightOwnerName.description=Owner or owners of the copyright in the licensed image.
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.title=\u56fe\u50cf\u521b\u5efa\u8005 ID
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorID.description=\u56fe\u50cf\u7684\u521b\u5efa\u8005\u3002
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.title=\u56fe\u50cf\u521b\u5efa\u8005\u59d3\u540d
|
||||
iptcxmp_iptcmodel.property.plus_ImageCreatorName.description=Creator or creators of the image.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.title=PLUS ID
|
||||
iptcxmp_iptcmodel.property.plus_LicensorID.description=\u9700\u8981\u8054\u7cfb\u4ee5\u83b7\u53d6\u4f7f\u7528\u9879\u76ee\u7684\u8bb8\u53ef\u8bc1\u6216\u6388\u6743\u8be5\u9879\u76ee\u7684\u4eba\u5458\u6216\u516c\u53f8\u7684 ID\u3002
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.title=\u540d\u79f0
|
||||
iptcxmp_iptcmodel.property.plus_LicensorName.description=Name of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.title=\u57ce\u5e02
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCity.description=City of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.title=\u56fd\u5bb6/\u5730\u533a
|
||||
iptcxmp_iptcmodel.property.plus_LicensorCountry.description=Country of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.title=\u7535\u5b50\u90ae\u4ef6
|
||||
iptcxmp_iptcmodel.property.plus_LicensorEmail.description=Email of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.title=\u6269\u5c55\u7684\u5730\u5740
|
||||
iptcxmp_iptcmodel.property.plus_LicensorExtendedAddress.description=Extended address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.title=\u90ae\u653f\u7f16\u7801
|
||||
iptcxmp_iptcmodel.property.plus_LicensorPostalCode.description=Postal code of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.title=\u533a\u57df
|
||||
iptcxmp_iptcmodel.property.plus_LicensorRegion.description=Region of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.title=\u8857\u9053\u5730\u5740
|
||||
iptcxmp_iptcmodel.property.plus_LicensorStreetAddress.description=Street address of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.title=\u7535\u8bdd 1
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone1.description=Telephone 1 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.title=\u7535\u8bdd 2
|
||||
iptcxmp_iptcmodel.property.plus_LicensorTelephone2.description=Telephone 2 of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.title=URL
|
||||
iptcxmp_iptcmodel.property.plus_LicensorURL.description=URL of a person or company that should be contacted to obtain a licence for using the item or who has licensed the item.
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.title=\u6b21\u8981\u6a21\u578b\u5b58\u5728\u65f6\u95f4\u663e\u793a
|
||||
iptcxmp_iptcmodel.property.plus_MinorModelAgeDisclosure.description=Age of the youngest model pictured in the image, at the time that the image was made.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.title=\u6a21\u578b\u7248\u672c ID
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseID.description=Optional identifier associated with each Model Release.
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.title=\u6a21\u578b\u7248\u672c\u72b6\u6001
|
||||
iptcxmp_iptcmodel.property.plus_ModelReleaseStatus.description=Summarizes the availability and scope of model releases authorizing usage of the likenesses of persons appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.title=\u5c5e\u6027\u7248\u672c ID
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseID.description=Optional identifier associated with each Property Release.
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.title=\u5c5e\u6027\u7248\u672c\u72b6\u6001
|
||||
iptcxmp_iptcmodel.property.plus_PropertyReleaseStatus.description=Summarises the availability and scope of property releases authorizing usage of the properties appearing in the photograph.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.title=\u7248\u6743\u58f0\u660e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCopyrightNotice.description=Contains any necessary copyright notice for claiming the intellectual property for artwork or an object in the image and should identify the current owner of the copyright of this work with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.title=\u521b\u5efa\u8005
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOCreator.description=Contains the name of the artist who has created artwork or an object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.title=\u521b\u5efa\u65e5\u671f
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AODateCreated.description=Designates the date and optionally the time the artwork or object in the image was created. This relates to artwork or objects with associated intellectual property rights.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.title=\u6e90
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSource.description=The organisation or body holding and registering the artwork or object in the image for inventory purposes.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.title=\u6e90\u5e93\u5b58\u7f16\u53f7
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOSourceInvNo.description=The inventory number issued by the organisation or body holding and registering the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.title=\u804c\u52a1
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_AOTitle.description=A reference for the artwork or object in the image.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.title=\u57ce\u5e02
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.title=\u56fd\u5bb6/\u5730\u533a ISO \u4ee3\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.title=\u56fd\u5bb6/\u5730\u533a\u540d\u79f0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.title=\u7701/\u5dde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.title=\u5b50\u4f4d\u7f6e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.title=\u4e16\u754c\u533a\u57df
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationShownWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.title=\u57ce\u5e02
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCity.description=Name of the city of a location. This element is at the fourth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.title=\u56fd\u5bb6/\u5730\u533a ISO \u4ee3\u7801
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryCode.description=The ISO code of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.title=\u56fd\u5bb6/\u5730\u533a\u540d\u79f0
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedCountryName.description=The name of a country of a location. This element is at the second level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.title=\u7701/\u5dde
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedProvinceState.description=The name of a subregion of a country - a province or state - of a location. This element is at the third level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.title=\u5b50\u4f4d\u7f6e
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedSublocation.description=Name of a sublocation. This sublocation name could either be the name of a sublocation to a city or the name of a well known location or (natural) monument outside a city. In the sense of a sublocation to a city this element is at the fifth level of a top-down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.title=\u4e16\u754c\u533a\u57df
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_LocationCreatedWorldRegion.description=The name of a world region of a location. This element is at the first (topI) level of a top- down geographical hierarchy.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.title=\u9879\u76ee\u6807\u8bc6\u7b26
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegItemId.description=A unique identifier created by a registry and applied by the creator of the item. This value shall not be changed after being applied. This identifier is linked to a corresponding Registry Organisation Identifier.
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.title=\u7ec4\u7ec7\u6807\u8bc6\u7b26
|
||||
iptcxmp_iptcmodel.property.Iptc4xmpExt_RegOrgId.description=An identifier for the registry which issued the corresponding Registry Image Id.
|
||||
|
||||
|
@@ -37,6 +37,8 @@ system.schema_comp.name_validator=name must match pattern ''{0}''
|
||||
system.schema_comp.index_columns_validator=Number of columns in index doesn''t match. Was {0}, but expected {1}
|
||||
system.schema_comp.column_names_validator=Column types do not match. Was {0}, but expected {1}
|
||||
system.schema_comp.schema_version_validator=version must be at least ''{0}''
|
||||
# Optional long running patch messages...
|
||||
system.schema_comp.patch_run_suggestion=The following problems will be resolved once the long running patch {0} has been run
|
||||
|
||||
# Clustering
|
||||
system.cluster.license.not_enabled=License does not permit clustering: clustering is disabled.
|
||||
|
621
repository/src/main/resources/alfresco/model/iptcModel.xml
Normal file
621
repository/src/main/resources/alfresco/model/iptcModel.xml
Normal file
@@ -0,0 +1,621 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<model name="iptcxmp:iptcmodel" xmlns="http://www.alfresco.org/model/dictionary/1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.alfresco.org/model/dictionary/1.0/modelSchema.xsd">
|
||||
|
||||
<description>IPTC Model</description>
|
||||
<author>rgauss</author>
|
||||
<version>1.0</version>
|
||||
|
||||
<imports>
|
||||
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
|
||||
</imports>
|
||||
|
||||
<namespaces>
|
||||
<namespace uri="http://www.alfresco.org/model/content/metadata/IPTCXMP/1.0" prefix="iptcxmp"/>
|
||||
<namespace uri="http://purl.org/dc/elements/1.1/" prefix="dc"/>
|
||||
<namespace uri="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" prefix="Iptc4xmpCore"/>
|
||||
<namespace uri="http://iptc.org/std/Iptc4xmpExt/2008-02-29/" prefix="Iptc4xmpExt"/>
|
||||
<namespace uri="http://ns.adobe.com/photoshop/1.0/" prefix="photoshop"/>
|
||||
<namespace uri="http://ns.useplus.org/ldf/xmp/1.0/" prefix="plus"/>
|
||||
<namespace uri="http://ns.adobe.com/xap/1.0/rights/" prefix="xmpRights"/>
|
||||
</namespaces>
|
||||
|
||||
<!-- Definition of new Content Aspect: IPTC -->
|
||||
<aspects>
|
||||
<aspect name="iptcxmp:iptcxmpAspect">
|
||||
<title>IPTC</title>
|
||||
<properties>
|
||||
|
||||
<!-- Start of IPTC Core -->
|
||||
<property name="photoshop:City">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:Country">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CountryCode">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="dc:description">
|
||||
<type>d:mltext</type>
|
||||
</property>
|
||||
<property name="photoshop:Headline">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:IntellectualGenre">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="dc:subject">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:State">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:Scene">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:SubjectCode">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:Location">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:DateCreated">
|
||||
<type>d:datetime</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:CaptionWriter">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:Instructions">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="photoshop:TransmissionReference">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="dc:title">
|
||||
<type>d:mltext</type>
|
||||
</property>
|
||||
<property name="dc:rights">
|
||||
<type>d:mltext</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="dc:creator">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:AuthorsPosition">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:Credit">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="xmpRights:UsageTerms">
|
||||
<type>d:mltext</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="photoshop:Source">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiAdrExtadr">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiAdrCity">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiAdrCtry">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiEmailWork">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiTelWork">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiAdrPcode">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiAdrRegion">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpCore:CiUrlWork">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
|
||||
<!-- Deprecated by IPTC
|
||||
<property name="photoshop:Urgency">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="photoshop:Category">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="photoshop:SupplementalCategories">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
</property>
|
||||
-->
|
||||
<!-- End of IPTC Core -->
|
||||
|
||||
<!-- Start of IPTC Ext -->
|
||||
<property name="Iptc4xmpExt:AddlModelInfo">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:OrganisationInImageCode">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:CVterm">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:ModelAge">
|
||||
<type>d:int</type>
|
||||
<multiple>true</multiple>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:OrganisationInImageName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:PersonInImage">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:DigImageGUID">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<!-- Deprecated by IPTC
|
||||
<property name="Iptc4xmpExt:DigitalSourcefileType">
|
||||
<type>d:text</type>
|
||||
</property>
|
||||
-->
|
||||
<property name="Iptc4xmpExt:DigitalSourceType">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:Event">
|
||||
<type>d:mltext</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ImageSupplierID">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ImageSupplierName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ImageSupplierImageID">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:IptcLastEdited">
|
||||
<type>d:datetime</type>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:MaxAvailHeight">
|
||||
<type>d:int</type>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:MaxAvailWidth">
|
||||
<type>d:int</type>
|
||||
</property>
|
||||
<property name="plus:Version">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:CopyrightOwnerID">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:CopyrightOwnerName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ImageCreatorID">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ImageCreatorName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorID">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorCity">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorCountry">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorEmail">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorExtendedAddress">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
</property>
|
||||
<property name="plus:LicensorPostalCode">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorRegion">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorStreetAddress">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
</property>
|
||||
<property name="plus:LicensorTelephone1">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorTelephoneType1">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorTelephone2">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorTelephoneType2">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:LicensorURL">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:MinorModelAgeDisclosure">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ModelReleaseID">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:ModelReleaseStatus">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:PropertyReleaseID">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="plus:PropertyReleaseStatus">
|
||||
<type>d:text</type>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:AOCopyrightNotice">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:AOCreator">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:AODateCreated">
|
||||
<type>d:datetime</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:AOSource">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:AOSourceInvNo">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:AOTitle">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationShownCity">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationShownCountryCode">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationShownCountryName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationShownProvinceState">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationShownSublocation">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationShownWorldRegion">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationCreatedCity">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationCreatedCountryCode">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationCreatedCountryName">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationCreatedProvinceState">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationCreatedSublocation">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>both</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:LocationCreatedWorldRegion">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:RegItemId">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
<property name="Iptc4xmpExt:RegOrgId">
|
||||
<type>d:text</type>
|
||||
<multiple>true</multiple>
|
||||
<index enabled="true">
|
||||
<tokenised>false</tokenised>
|
||||
</index>
|
||||
</property>
|
||||
|
||||
<!-- End of IPTC Ext -->
|
||||
|
||||
</properties>
|
||||
</aspect>
|
||||
|
||||
</aspects>
|
||||
|
||||
</model>
|
@@ -3,7 +3,7 @@
|
||||
repository.name=Main Repository
|
||||
|
||||
# Schema number
|
||||
version.schema=14100
|
||||
version.schema=15000
|
||||
|
||||
# Directory configuration
|
||||
|
||||
@@ -220,6 +220,8 @@ system.content.deletionFailureAction=IGNORE
|
||||
# The CRON expression to trigger the deletion of resources associated with orphaned content.
|
||||
system.content.orphanCleanup.cronExpression=0 0 4 * * ?
|
||||
|
||||
# The CRON expression to trigger the cleanup of deleted nodes and dangling transactions that are old enough
|
||||
system.nodeServiceCleanup.cronExpression=0 0 21 * * ?
|
||||
|
||||
# When transforming archive files (.zip etc) into text representations (such as
|
||||
# for full text indexing), should the files within the archive be processed too?
|
||||
@@ -1206,9 +1208,18 @@ repo.event2.filter.nodeAspects=sys:*
|
||||
repo.event2.filter.childAssocTypes=rn:rendition
|
||||
# Comma separated list of users which should be excluded
|
||||
# Note: username's case-sensitivity depends on the {user.name.caseSensitive} setting
|
||||
repo.event2.filter.users=System, null
|
||||
repo.event2.filter.users=
|
||||
# Topic name
|
||||
repo.event2.topic.endpoint=amqp:topic:alfresco.repo.event2
|
||||
# Thread pool for async enqueue of repo events
|
||||
repo.event2.queue.enqueueThreadPool.priority=1
|
||||
repo.event2.queue.enqueueThreadPool.coreSize=8
|
||||
repo.event2.queue.enqueueThreadPool.maximumSize=10
|
||||
# Thread pool for async dequeue and delivery of repo events
|
||||
repo.event2.queue.dequeueThreadPool.priority=1
|
||||
repo.event2.queue.dequeueThreadPool.coreSize=1
|
||||
repo.event2.queue.dequeueThreadPool.maximumSize=1
|
||||
|
||||
|
||||
# MNT-21083
|
||||
# --DELETE_NOT_EXISTS - default settings
|
||||
@@ -1227,4 +1238,4 @@ system.new-node-transaction-indexes.ignored=true
|
||||
|
||||
# Allows the configuration of maximum limits of the temp files to be deleted or the maximum time allowed to run for the job
|
||||
system.tempFileCleaner.maxFilesToDelete=
|
||||
system.tempFileCleaner.maxTimeToRun=
|
||||
system.tempFileCleaner.maxTimeToRun=
|
||||
|
@@ -107,7 +107,7 @@
|
||||
</property>
|
||||
</bean>
|
||||
<bean id="nodeServiceCleanupTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
|
||||
<property name="cronExpression" value="0 0 21 * * ?"/>
|
||||
<property name="cronExpression" value="${system.nodeServiceCleanup.cronExpression}"/>
|
||||
<property name="startDelay" value="${system.cronJob.startDelayMilliseconds}"/>
|
||||
<property name="jobDetail">
|
||||
<bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
|
||||
|
@@ -165,6 +165,8 @@
|
||||
<property name="keyResourceLoader" ref="springKeyResourceLoader"/>
|
||||
<property name="keyStoreParameters" ref="keyStoreParameters"/>
|
||||
<property name="encryptionParameters" ref="md5EncryptionParameters"/>
|
||||
<property name="sharedSecret" value="${solr.sharedSecret}"/>
|
||||
<property name="sharedSecretHeader" value="${solr.sharedSecret.header}"/>
|
||||
<property name="host" value="${solr.host}"/>
|
||||
<property name="port" value="${solr.port}"/>
|
||||
<property name="sslPort" value="${solr.port.ssl}"/>
|
||||
|
@@ -82,7 +82,9 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.node.db.DbNodeServiceImplTest.class,
|
||||
|
||||
org.alfresco.repo.node.cleanup.TransactionCleanupTest.class,
|
||||
org.alfresco.repo.security.person.GetPeopleCannedQueryTest.class
|
||||
org.alfresco.repo.security.person.GetPeopleCannedQueryTest.class,
|
||||
|
||||
org.alfresco.repo.domain.schema.script.DeleteNotExistsExecutorTest.class
|
||||
})
|
||||
public class AllDBTestsTestSuite
|
||||
{
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -43,10 +43,14 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.encryption.KeyStoreKeyProviderTest.class,
|
||||
org.alfresco.filesys.config.ServerConfigurationBeanTest.class,
|
||||
org.alfresco.filesys.repo.rules.ShuffleTest.class,
|
||||
org.alfresco.opencmis.AlfrescoCmisExceptionInterceptorTest.class,
|
||||
org.alfresco.repo.admin.Log4JHierarchyInitTest.class,
|
||||
org.alfresco.repo.attributes.PropTablesCleanupJobTest.class,
|
||||
org.alfresco.repo.cache.AbstractCacheFactoryTest.class,
|
||||
org.alfresco.repo.cache.DefaultCacheFactoryTest.class,
|
||||
org.alfresco.repo.cache.DefaultSimpleCacheTest.class,
|
||||
org.alfresco.repo.cache.InMemoryCacheStatisticsTest.class,
|
||||
org.alfresco.repo.cache.TransactionStatsTest.class,
|
||||
org.alfresco.repo.cache.lookup.EntityLookupCacheTest.class,
|
||||
org.alfresco.repo.calendar.CalendarHelpersTest.class,
|
||||
org.alfresco.repo.copy.CopyServiceImplUnitTest.class,
|
||||
@@ -56,13 +60,16 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.forms.processor.workflow.WorkflowFormProcessorTest.class,
|
||||
org.alfresco.repo.invitation.site.InviteSenderTest.class,
|
||||
org.alfresco.repo.invitation.site.InviteModeratedSenderTest.class,
|
||||
org.alfresco.repo.jscript.ScriptSearchTest.class,
|
||||
org.alfresco.repo.lock.LockUtilsTest.class,
|
||||
org.alfresco.repo.lock.mem.LockStoreImplTest.class,
|
||||
org.alfresco.repo.management.subsystems.CryptodocSwitchableApplicationContextFactoryTest.class,
|
||||
org.alfresco.repo.module.ModuleDetailsImplTest.class,
|
||||
org.alfresco.repo.module.ModuleVersionNumberTest.class,
|
||||
org.alfresco.repo.module.tool.ModuleManagementToolTest.class,
|
||||
org.alfresco.repo.module.tool.WarHelperImplTest.class,
|
||||
org.alfresco.repo.module.tool.ModuleServiceImplTest.class,
|
||||
org.alfresco.repo.node.integrity.IntegrityEventTest.class,
|
||||
org.alfresco.repo.policy.MTPolicyComponentTest.class,
|
||||
org.alfresco.repo.policy.PolicyComponentTest.class,
|
||||
org.alfresco.repo.rendition.RenditionNodeManagerTest.class,
|
||||
@@ -70,6 +77,7 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.replication.ReplicationServiceImplTest.class,
|
||||
org.alfresco.repo.service.StoreRedirectorProxyFactoryTest.class,
|
||||
org.alfresco.repo.site.RoleComparatorImplTest.class,
|
||||
org.alfresco.repo.tenant.MultiTAdminServiceImplTest.class,
|
||||
org.alfresco.repo.thumbnail.ThumbnailServiceImplParameterTest.class,
|
||||
org.alfresco.repo.transfer.ContentChunkerImplTest.class,
|
||||
org.alfresco.repo.transfer.HttpClientTransmitterImplTest.class,
|
||||
@@ -110,17 +118,27 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.util.schemacomp.validator.NameValidatorTest.class,
|
||||
org.alfresco.util.schemacomp.validator.SchemaVersionValidatorTest.class,
|
||||
org.alfresco.util.schemacomp.validator.TypeNameOnlyValidatorTest.class,
|
||||
org.alfresco.util.test.OmittedTestClassFinderUnitTest.class,
|
||||
org.alfresco.util.test.junitrules.TemporaryMockOverrideTest.class,
|
||||
org.alfresco.repo.search.impl.querymodel.impl.db.DBQueryEngineTest.class,
|
||||
org.alfresco.repo.search.impl.querymodel.impl.db.NodePermissionAssessorLimitsTest.class,
|
||||
org.alfresco.repo.search.impl.querymodel.impl.db.NodePermissionAssessorPermissionsTest.class,
|
||||
org.alfresco.repo.search.impl.solr.DbOrIndexSwitchingQueryLanguageTest.class,
|
||||
org.alfresco.repo.search.impl.solr.SolrQueryHTTPClientTest.class,
|
||||
org.alfresco.repo.search.impl.solr.SolrSQLHttpClientTest.class,
|
||||
org.alfresco.repo.search.impl.solr.SolrStatsResultTest.class,
|
||||
org.alfresco.repo.search.impl.solr.SolrSQLJSONResultMetadataSetTest.class,
|
||||
org.alfresco.repo.search.impl.solr.facet.SolrFacetComparatorTest.class,
|
||||
org.alfresco.repo.search.impl.solr.facet.FacetQNameUtilsTest.class,
|
||||
org.alfresco.util.BeanExtenderUnitTest.class,
|
||||
org.alfresco.repo.search.impl.solr.SpellCheckDecisionManagerTest.class,
|
||||
org.alfresco.repo.search.impl.solr.SolrStoreMappingWrapperTest.class,
|
||||
org.alfresco.repo.solr.SOLRTrackingComponentUnitTest.class,
|
||||
org.alfresco.repo.security.authentication.CompositePasswordEncoderTest.class,
|
||||
org.alfresco.repo.security.authentication.PasswordHashingTest.class,
|
||||
org.alfresco.repo.security.authority.script.ScriptAuthorityService_RegExTest.class,
|
||||
org.alfresco.repo.security.permissions.PermissionCheckCollectionTest.class,
|
||||
org.alfresco.repo.security.sync.LDAPUserRegistryTest.class,
|
||||
org.alfresco.traitextender.TraitExtenderIntegrationTest.class,
|
||||
org.alfresco.traitextender.AJExtensionsCompileTest.class,
|
||||
|
||||
@@ -157,8 +175,12 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.action.ActionConditionImplTest.class,
|
||||
org.alfresco.repo.action.CompositeActionImplTest.class,
|
||||
org.alfresco.repo.action.CompositeActionConditionImplTest.class,
|
||||
org.alfresco.repo.action.executer.TransformActionExecuterTest.class,
|
||||
org.alfresco.repo.audit.AuditableAnnotationTest.class,
|
||||
org.alfresco.repo.audit.PropertyAuditFilterTest.class,
|
||||
org.alfresco.repo.audit.access.NodeChangeTest.class,
|
||||
org.alfresco.repo.content.LimitedStreamCopierTest.class,
|
||||
org.alfresco.repo.content.filestore.FileIOTest.class,
|
||||
org.alfresco.repo.content.filestore.SpoofedTextContentReaderTest.class,
|
||||
org.alfresco.repo.content.ContentDataTest.class,
|
||||
org.alfresco.service.cmr.repository.TransformationOptionLimitsTest.class,
|
||||
@@ -170,7 +192,9 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.content.caching.quota.UnlimitedQuotaStrategyTest.class,
|
||||
org.alfresco.repo.content.caching.CachingContentStoreTest.class,
|
||||
org.alfresco.repo.content.caching.ContentCacheImplTest.class,
|
||||
org.alfresco.repo.domain.permissions.FixedAclUpdaterUnitTest.class,
|
||||
org.alfresco.repo.domain.propval.PropertyTypeConverterTest.class,
|
||||
org.alfresco.repo.domain.schema.script.ScriptBundleExecutorImplTest.class,
|
||||
org.alfresco.repo.search.MLAnaysisModeExpansionTest.class,
|
||||
org.alfresco.repo.search.DocumentNavigatorTest.class,
|
||||
org.alfresco.util.NumericEncodingTest.class,
|
||||
@@ -179,6 +203,7 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.search.impl.parsers.FTSTest.class,
|
||||
org.alfresco.repo.security.authentication.AlfrescoSSLSocketFactoryTest.class,
|
||||
org.alfresco.repo.security.authentication.AuthorizationTest.class,
|
||||
org.alfresco.repo.security.permissions.PermissionCheckedCollectionTest.class,
|
||||
org.alfresco.repo.security.permissions.impl.acegi.FilteringResultSetTest.class,
|
||||
org.alfresco.repo.security.authentication.ChainingAuthenticationServiceTest.class,
|
||||
org.alfresco.repo.security.authentication.NameBasedUserNameGeneratorTest.class,
|
||||
@@ -186,9 +211,10 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.version.common.VersionHistoryImplTest.class,
|
||||
org.alfresco.repo.version.common.versionlabel.SerialVersionLabelPolicyTest.class,
|
||||
org.alfresco.repo.workflow.activiti.WorklfowObjectFactoryTest.class,
|
||||
org.alfresco.repo.workflow.activiti.properties.ActivitiPriorityPropertyHandlerTest.class,
|
||||
org.alfresco.repo.workflow.WorkflowSuiteContextShutdownTest.class,
|
||||
org.alfresco.repo.search.LuceneUtilsTest.class,
|
||||
|
||||
|
||||
org.alfresco.heartbeat.HBDataCollectorServiceImplTest.class,
|
||||
org.alfresco.heartbeat.jobs.LockingJobTest.class,
|
||||
org.alfresco.heartbeat.jobs.QuartzJobSchedulerTest.class,
|
||||
@@ -196,6 +222,7 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.heartbeat.ConfigurationDataCollectorTest.class,
|
||||
org.alfresco.heartbeat.InfoDataCollectorTest.class,
|
||||
org.alfresco.heartbeat.ModelUsageDataCollectorTest.class,
|
||||
org.alfresco.heartbeat.SessionsUsageDataCollectorTest.class,
|
||||
org.alfresco.heartbeat.SystemUsageDataCollectorTest.class,
|
||||
|
||||
org.alfresco.util.BeanExtenderUnitTest.class,
|
||||
@@ -203,9 +230,12 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.util.resource.HierarchicalResourceLoaderTest.class,
|
||||
org.alfresco.repo.events.ClientUtilTest.class,
|
||||
org.alfresco.repo.rendition2.RenditionService2Test.class,
|
||||
org.alfresco.repo.rendition2.TransformationOptionsConverterTest.class,
|
||||
org.alfresco.transform.client.registry.TransformServiceRegistryConfigTest.class,
|
||||
|
||||
org.alfresco.repo.event2.RepoEvent2UnitSuite.class
|
||||
org.alfresco.repo.event2.RepoEvent2UnitSuite.class,
|
||||
|
||||
org.alfresco.util.schemacomp.SchemaDifferenceHelperUnitTest.class
|
||||
})
|
||||
public class AllUnitTestsSuite
|
||||
{
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2017 Alfresco Software Limited
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
@@ -85,6 +85,7 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.util.schemacomp.DbToXMLTest.class,
|
||||
org.alfresco.util.schemacomp.ExportDbTest.class,
|
||||
org.alfresco.util.schemacomp.SchemaReferenceFileTest.class,
|
||||
org.alfresco.util.schemacomp.SchemaBootstrapTest.class,
|
||||
org.alfresco.repo.module.ModuleComponentHelperTest.class,
|
||||
org.alfresco.repo.node.getchildren.GetChildrenCannedQueryTest.class,
|
||||
|
||||
|
@@ -75,7 +75,6 @@ import org.junit.runners.Suite;
|
||||
org.alfresco.repo.site.SiteServiceImplTest.class,
|
||||
|
||||
// [classpath:alfresco/application-context.xml, classpath:scriptexec/script-exec-test.xml]
|
||||
org.alfresco.repo.domain.schema.script.DeleteNotExistsExecutorTest.class,
|
||||
org.alfresco.repo.domain.schema.script.ScriptExecutorImplIntegrationTest.class,
|
||||
org.alfresco.repo.domain.schema.script.ScriptBundleExecutorImplIntegrationTest.class,
|
||||
|
||||
|
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2018 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.messaging.camel;
|
||||
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.apache.camel.CamelContext;
|
||||
import org.apache.camel.Produce;
|
||||
import org.apache.camel.ProducerTemplate;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Tests Camel components defined in the application's Spring context
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@Category(NeverRunsTests.class)
|
||||
@ContextConfiguration(locations = "/test-messaging-context.xml")
|
||||
public class CamelComponentsTest {
|
||||
@Autowired
|
||||
protected CamelContext camelContext;
|
||||
|
||||
@Produce("activemq:queue:alfresco.test")
|
||||
protected ProducerTemplate activemqTemplate;
|
||||
|
||||
@Produce("amqp:queue:alfresco.test")
|
||||
protected ProducerTemplate amqpTemplate;
|
||||
|
||||
@Produce("jms:queue:alfresco.test")
|
||||
protected ProducerTemplate jmsTemplate;
|
||||
|
||||
|
||||
@Test
|
||||
public void testActivemqComponent()
|
||||
{
|
||||
final String msg = "ping <activemq>";
|
||||
|
||||
activemqTemplate.sendBody(msg);
|
||||
|
||||
final Object reply = camelContext
|
||||
.createConsumerTemplate()
|
||||
.receiveBody("activemq:queue:alfresco.test", 2000);
|
||||
|
||||
assertEquals(msg, reply);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAmqpComponent()
|
||||
{
|
||||
final String msg = "ping <amqp>";
|
||||
|
||||
amqpTemplate.sendBody(msg);
|
||||
|
||||
final Object reply = camelContext
|
||||
.createConsumerTemplate()
|
||||
.receiveBody("amqp:queue:alfresco.test", 2000);
|
||||
|
||||
assertEquals(msg, reply);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testJmsComponent()
|
||||
{
|
||||
final String msg = "ping <jms>";
|
||||
|
||||
jmsTemplate.sendBody(msg);
|
||||
|
||||
final Object reply = camelContext
|
||||
.createConsumerTemplate()
|
||||
.receiveBody("jms:queue:alfresco.test", 2000);
|
||||
|
||||
assertEquals(msg, reply);
|
||||
}
|
||||
}
|
@@ -27,12 +27,14 @@ package org.alfresco.messaging.camel;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.apache.camel.CamelContext;
|
||||
import org.apache.camel.EndpointInject;
|
||||
import org.apache.camel.Produce;
|
||||
import org.apache.camel.ProducerTemplate;
|
||||
import org.apache.camel.component.mock.MockEndpoint;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
@@ -44,6 +46,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
* @author Ray Gauss II
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@Category(NeverRunsTests.class)
|
||||
@ContextConfiguration(locations = "/test-messaging-context.xml")
|
||||
public class CamelRoutesTest
|
||||
{
|
||||
@@ -61,76 +64,76 @@ public class CamelRoutesTest
|
||||
|
||||
@Produce("direct-vm:alfresco.test.1")
|
||||
protected ProducerTemplate template1;
|
||||
|
||||
|
||||
@Produce("direct-vm:alfresco.test.2")
|
||||
protected ProducerTemplate template2;
|
||||
|
||||
|
||||
@Produce("direct-vm:alfresco.default")
|
||||
protected ProducerTemplate template3;
|
||||
|
||||
|
||||
@Produce("direct-vm:alfresco.test.transacted")
|
||||
protected ProducerTemplate template4;
|
||||
|
||||
|
||||
@Autowired
|
||||
protected MockExceptionProcessor messagingExceptionProcessor;
|
||||
|
||||
|
||||
@Autowired
|
||||
protected MockConsumer mockConsumer;
|
||||
|
||||
|
||||
@Autowired
|
||||
protected MockExceptionThrowingConsumer mockExceptionThrowingConsumer;
|
||||
|
||||
@Test
|
||||
public void testMessageRouteXmlDefined() throws Exception {
|
||||
String expectedBody = "<matched.>";
|
||||
|
||||
|
||||
resultEndpoint1.expectedBodiesReceived(expectedBody);
|
||||
|
||||
|
||||
template1.sendBody(expectedBody);
|
||||
|
||||
|
||||
resultEndpoint1.assertIsSatisfied();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testMessageRoutePackageDefined() throws Exception {
|
||||
String expectedBody = "<matched.>";
|
||||
|
||||
|
||||
resultEndpoint2.expectedBodiesReceived(expectedBody);
|
||||
|
||||
|
||||
template2.sendBody(expectedBody);
|
||||
|
||||
|
||||
resultEndpoint2.assertIsSatisfied();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testMessageRouteXmlOverride() throws Exception {
|
||||
String expectedBody = "<matched.>";
|
||||
|
||||
|
||||
dlqEndpoint.expectedBodiesReceived(expectedBody);
|
||||
|
||||
|
||||
template3.sendBody(expectedBody);
|
||||
|
||||
|
||||
dlqEndpoint.assertIsSatisfied();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testTransactedRoute() throws Exception {
|
||||
String expectedBody = "<matched.>";
|
||||
|
||||
|
||||
template4.sendBody(expectedBody);
|
||||
|
||||
|
||||
// Wait for Camel and ActiveMQ to process
|
||||
Thread.sleep(2000);
|
||||
|
||||
|
||||
// Test that our exception processor received the error
|
||||
assertNotNull(messagingExceptionProcessor.getLastError());
|
||||
assertTrue(messagingExceptionProcessor.getLastError().getClass().equals(
|
||||
IllegalArgumentException.class));
|
||||
|
||||
|
||||
// Check that an error was thrown the first time
|
||||
assertTrue(mockExceptionThrowingConsumer.isErrorThrown());
|
||||
assertNull(mockExceptionThrowingConsumer.getLastMessage());
|
||||
|
||||
|
||||
// Check that the message was re-delivered to a second consumer
|
||||
assertEquals(expectedBody, mockConsumer.getLastMessage());
|
||||
}
|
||||
|
@@ -32,13 +32,16 @@ import org.alfresco.repo.action.evaluator.compare.ComparePropertyValueOperation;
|
||||
import org.alfresco.service.cmr.action.ActionService;
|
||||
import org.alfresco.service.cmr.action.ParameterConstraint;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
|
||||
/**
|
||||
* Action parameter constraint unit test
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
@Category(NeverRunsTests.class)
|
||||
public class ActionParameterConstraintTest extends BaseSpringTest
|
||||
{
|
||||
private static final String COMPARE_OP = "ac-compare-operations";
|
||||
|
@@ -34,7 +34,9 @@ import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
@@ -44,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
* @since 3.4
|
||||
*/
|
||||
@Transactional
|
||||
@Category(NeverRunsTests.class)
|
||||
public class HasChildEvaluatorTest extends BaseSpringTest
|
||||
{
|
||||
private NodeService nodeService;
|
||||
|
@@ -36,7 +36,9 @@ import org.alfresco.service.cmr.tagging.TaggingService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
@@ -45,6 +47,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
@Transactional
|
||||
@Category(NeverRunsTests.class)
|
||||
public class HasTagEvaluatorTest extends BaseSpringTest
|
||||
{
|
||||
private NodeService nodeService;
|
||||
|
@@ -36,6 +36,7 @@ import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -43,7 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
/**
|
||||
* Tests checkout using action executer
|
||||
*/
|
||||
@Category(BaseSpringTestsCategory.class)
|
||||
@Category({BaseSpringTestsCategory.class, NeverRunsTests.class})
|
||||
@Transactional
|
||||
public class CheckOutActionExecuterTest extends BaseSpringTest
|
||||
{
|
||||
|
@@ -51,6 +51,7 @@ import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
|
||||
@@ -68,7 +69,7 @@ import static org.alfresco.repo.rule.RuleModel.ASPECT_IGNORE_INHERITED_RULES;
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
@Category(BaseSpringTestsCategory.class)
|
||||
@Category({BaseSpringTestsCategory.class, NeverRunsTests.class})
|
||||
@Transactional
|
||||
public class ExecuteAllRulesActionExecuterTest extends BaseSpringTest
|
||||
{
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.action.executer;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -43,6 +43,7 @@ import org.alfresco.util.test.junitrules.RunAsFullyAuthenticatedRule;
|
||||
import org.alfresco.util.test.junitrules.TemporaryNodes;
|
||||
import org.alfresco.util.test.junitrules.TemporarySites;
|
||||
import org.alfresco.util.test.junitrules.TemporarySites.TestSiteAndMemberInfo;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Rule;
|
||||
@@ -51,7 +52,7 @@ import org.junit.experimental.categories.Category;
|
||||
import org.junit.rules.RuleChain;
|
||||
|
||||
/** Tests for {@link TakeOwnershipActionExecuter}. */
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class TakeOwnershipActionExecuterTest
|
||||
{
|
||||
// Rule to initialise the default Alfresco spring configuration
|
||||
|
@@ -38,6 +38,7 @@ import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.test_category.BaseSpringTestsCategory;
|
||||
import org.alfresco.util.BaseAlfrescoSpringTest;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
|
||||
@@ -46,7 +47,7 @@ import org.junit.experimental.categories.Category;
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
@Category(BaseSpringTestsCategory.class)
|
||||
@Category({BaseSpringTestsCategory.class, NeverRunsTests.class})
|
||||
public class TransitionSimpleWorkflowActionExecuterTest extends BaseAlfrescoSpringTest
|
||||
{
|
||||
private FileFolderService fileFolderService;
|
||||
|
@@ -41,6 +41,7 @@ import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.alfresco.util.testing.category.LuceneTests;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.extensions.surf.util.ISO8601DateFormat;
|
||||
@@ -50,7 +51,7 @@ import org.springframework.extensions.surf.util.ISO8601DateFormat;
|
||||
*
|
||||
* @author Andy Hind
|
||||
*/
|
||||
@Category({OwnJVMTestsCategory.class, LuceneTests.class})
|
||||
@Category({OwnJVMTestsCategory.class, LuceneTests.class, NeverRunsTests.class})
|
||||
public class FreeMarkerModelLuceneFunctionTest extends TestCase
|
||||
{
|
||||
//private static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssZ");
|
||||
|
@@ -77,7 +77,7 @@ import static org.junit.Assert.fail;
|
||||
* @since 4.0
|
||||
*/
|
||||
@Category(LuceneTests.class)
|
||||
public class AbstractBulkImportTests
|
||||
public abstract class AbstractBulkImportTests
|
||||
{
|
||||
protected static ApplicationContext ctx;
|
||||
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.content;
|
||||
|
||||
import java.io.File;
|
||||
@@ -37,6 +37,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.MimetypeService;
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.DataModelTestApplicationContextHelper;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@@ -47,7 +48,7 @@ import org.springframework.context.ApplicationContext;
|
||||
* @see org.alfresco.repo.content.MimetypeMap
|
||||
* @see org.alfresco.repo.content.MimetypeMapTest
|
||||
*/
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class MimetypeMapContentTest extends TestCase
|
||||
{
|
||||
private static ApplicationContext ctx = DataModelTestApplicationContextHelper.getApplicationContext();
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.content.caching;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -46,6 +46,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.junit.internal.runners.JUnit38ClassRunner;
|
||||
@@ -58,7 +59,7 @@ import org.junit.runner.RunWith;
|
||||
* @author Matt Ward
|
||||
*/
|
||||
@RunWith(JUnit38ClassRunner.class)
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class CachingContentStoreSpringTest extends AbstractWritableContentStoreTest
|
||||
{
|
||||
private CachingContentStore store;
|
||||
|
@@ -29,6 +29,7 @@ package org.alfresco.repo.content.filestore;
|
||||
import java.io.File;
|
||||
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
@@ -43,7 +44,7 @@ import static org.junit.Assert.assertTrue;
|
||||
* @author Andreea Dragoi
|
||||
*
|
||||
*/
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class BucketAwareFileContentStoreTest extends FileContentStoreTest
|
||||
{
|
||||
private static final int BUCKETS_PER_MINUTE = 20;
|
||||
|
@@ -29,6 +29,7 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
@@ -39,7 +40,7 @@ import static org.junit.Assert.assertTrue;
|
||||
* to route content from a store to a selection of filesystem volumes
|
||||
* @author Andreea Dragoi
|
||||
*/
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class VolumeAwareFileContentStoreTest extends FileContentStoreTest{
|
||||
|
||||
private static final String VOLUMES = "volumeA,volumeB,volumeC";
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.content.metadata.xml;
|
||||
|
||||
import static org.alfresco.repo.content.metadata.AbstractMetadataExtracterTest.QUICK_DESCRIPTION;
|
||||
@@ -33,7 +33,6 @@ import java.io.FileNotFoundException;
|
||||
import java.net.URL;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.action.ActionImpl;
|
||||
import org.alfresco.repo.action.executer.ActionExecuter;
|
||||
@@ -59,6 +58,8 @@ import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.PropertyMap;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
@@ -69,6 +70,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
*
|
||||
* @author Derek Hulley
|
||||
*/
|
||||
@Category(NeverRunsTests.class)
|
||||
public class XmlMetadataExtracterTest extends TestCase
|
||||
{
|
||||
private static final String FILE_ALFRESCO_MODEL = "xml-metadata/alfresco-model-sample.xml";
|
||||
|
@@ -40,6 +40,7 @@ import org.alfresco.service.cmr.repository.DirectAccessUrl;
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
@@ -69,7 +70,7 @@ import static org.mockito.Mockito.when;
|
||||
* @author Derek Hulley
|
||||
* @author Mark Rogers
|
||||
*/
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class AggregatingContentStoreTest extends AbstractWritableContentStoreTest
|
||||
{
|
||||
private static final String SOME_CONTENT = "The No. 1 Ladies' Detective Agency";
|
||||
|
@@ -28,6 +28,7 @@ package org.alfresco.repo.content.transform;
|
||||
import org.alfresco.service.cmr.repository.ContentReader;
|
||||
import org.alfresco.service.cmr.repository.ContentWriter;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpEntity;
|
||||
@@ -37,6 +38,7 @@ import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.Spy;
|
||||
@@ -61,6 +63,7 @@ import static org.springframework.test.util.AssertionErrors.assertTrue;
|
||||
* @deprecated The transformations code is being moved out of the codebase and replaced by the new async RenditionService2 or other external libraries.
|
||||
*/
|
||||
@Deprecated
|
||||
@Category(NeverRunsTests.class)
|
||||
public class RemoteTransformerClientTest
|
||||
{
|
||||
public static final int STARTUP_RETRY_PERIOD_SECONDS = 2;
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.dictionary;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
@@ -45,8 +45,10 @@ import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
|
||||
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.extensions.surf.util.I18NUtil;
|
||||
|
||||
/**
|
||||
@@ -54,6 +56,7 @@ import org.springframework.extensions.surf.util.I18NUtil;
|
||||
* @author sglover
|
||||
*
|
||||
*/
|
||||
@Category(NeverRunsTests.class)
|
||||
public class DictionaryDAOTest
|
||||
{
|
||||
public static final String TEST_RESOURCE_MESSAGES = "alfresco/messages/dictionary-messages";
|
||||
|
@@ -39,8 +39,10 @@ import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
|
||||
import org.alfresco.util.DynamicallySizedThreadPoolExecutor;
|
||||
import org.alfresco.util.TraceableThreadFactory;
|
||||
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.extensions.surf.util.I18NUtil;
|
||||
|
||||
/**
|
||||
@@ -48,6 +50,7 @@ import org.springframework.extensions.surf.util.I18NUtil;
|
||||
* @author sglover
|
||||
*
|
||||
*/
|
||||
@Category (NeverRunsTests.class)
|
||||
public class DictionaryLoadDAOTest
|
||||
{
|
||||
public static final String TEST_RESOURCE_MESSAGES = "alfresco/messages/dictionary-messages";
|
||||
|
@@ -92,12 +92,10 @@ public class NodeDAOTest extends TestCase
|
||||
public void testTransaction() throws Throwable
|
||||
{
|
||||
final boolean[] newTxn = new boolean[] {false};
|
||||
RetryingTransactionCallback<Long> getTxnIdCallback = new RetryingTransactionCallback<Long>()
|
||||
{
|
||||
public Long execute() throws Throwable
|
||||
{
|
||||
return nodeDAO.getCurrentTransactionId(newTxn[0]);
|
||||
}
|
||||
RetryingTransactionCallback<Pair<Long, Long>> getTxnIdCallback = () -> {
|
||||
Long currentTransactionId = nodeDAO.getCurrentTransactionId(newTxn[0]);
|
||||
Long currentTransactionCommitTime = nodeDAO.getCurrentTransactionCommitTime();
|
||||
return new Pair<>(currentTransactionId, currentTransactionCommitTime);
|
||||
};
|
||||
// No txn
|
||||
try
|
||||
@@ -110,14 +108,24 @@ public class NodeDAOTest extends TestCase
|
||||
// Expected
|
||||
}
|
||||
// Read-only
|
||||
assertNull("No Txn ID should be present in read-only txn", txnHelper.doInTransaction(getTxnIdCallback, true));
|
||||
Pair<Long, Long> txn0 = txnHelper.doInTransaction(getTxnIdCallback);
|
||||
Long txnId0 = txn0.getFirst();
|
||||
Long commitTime0 = txn0.getSecond();
|
||||
assertNull("No Txn ID should be present in read-only txn", txnId0);
|
||||
assertNull("No Txn Commit time should be present in read-only txn", commitTime0);
|
||||
// First success
|
||||
Long txnId1 = txnHelper.doInTransaction(getTxnIdCallback);
|
||||
Pair<Long, Long> txn1 = txnHelper.doInTransaction(getTxnIdCallback);
|
||||
Long txnId1 = txn1.getFirst();
|
||||
Long commitTime1 = txn1.getSecond();
|
||||
assertNull("No Txn ID should be present in untouched txn", txnId1);
|
||||
assertNull("No Txn Commit time should be present in untouched txn", commitTime1);
|
||||
// Second success
|
||||
newTxn[0] = true;
|
||||
Long txnId2 = txnHelper.doInTransaction(getTxnIdCallback);
|
||||
Pair<Long, Long> txn2 = txnHelper.doInTransaction(getTxnIdCallback);
|
||||
Long txnId2 = txn2.getFirst();
|
||||
Long commitTime2 = txn2.getSecond();
|
||||
assertNotNull("Txn ID should be present by forcing it", txnId2);
|
||||
assertNotNull("Txn commit time should be present by forcing it", commitTime2);
|
||||
}
|
||||
|
||||
public void testSelectNodePropertiesByTypes() throws Exception
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.node;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -50,6 +50,8 @@ import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.alfresco.util.EqualsHelper;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
/**
|
||||
@@ -60,6 +62,7 @@ import org.springframework.context.ApplicationContext;
|
||||
* @author Derek Hulley
|
||||
* @since 3.4
|
||||
*/
|
||||
@Category (NeverRunsTests.class)
|
||||
public class NodePropertyHelperTest extends TestCase
|
||||
{
|
||||
private static final QName QN_BOOLEAN = createQName("boolean");
|
||||
|
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.permissions;
|
||||
|
||||
import static org.alfresco.model.ContentModel.TYPE_BASE;
|
||||
import static org.alfresco.service.cmr.repository.StoreRef.STORE_REF_ARCHIVE_SPACESSTORE;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.MockitoAnnotations.openMocks;
|
||||
|
||||
import org.alfresco.repo.domain.node.NodeDAO;
|
||||
import org.alfresco.repo.domain.permissions.FixedAclUpdater.AclWorker;
|
||||
import org.alfresco.repo.policy.ClassPolicyDelegate;
|
||||
import org.alfresco.repo.security.permissions.PermissionServicePolicies.OnInheritPermissionsDisabled;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.alfresco.util.PolicyIgnoreUtil;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
|
||||
/** Mock-based unit tests for {@link FixedAclUpdater}. */
|
||||
public class FixedAclUpdaterUnitTest
|
||||
{
|
||||
private static final NodeRef NODE_REF = new NodeRef("test://node/ref");
|
||||
private static final long NODE_ID = 123L;
|
||||
private static final NodeRef ARCHIVED_NODE = new NodeRef(STORE_REF_ARCHIVE_SPACESSTORE, "archived");
|
||||
|
||||
@InjectMocks
|
||||
private FixedAclUpdater fixedAclUpdater = new FixedAclUpdater();
|
||||
/** The inner class under test. */
|
||||
private AclWorker aclWorker = fixedAclUpdater.createAclWorker();
|
||||
@Mock
|
||||
private NodeDAO nodeDAO;
|
||||
@Mock
|
||||
private AccessControlListDAO accessControlListDAO;
|
||||
@Mock
|
||||
private PolicyIgnoreUtil policyIgnoreUtil;
|
||||
@Mock
|
||||
private ClassPolicyDelegate<OnInheritPermissionsDisabled> onInheritPermissionsDisabledDelegate;
|
||||
@Mock
|
||||
private OnInheritPermissionsDisabled onInheritPermissionsDisabled;
|
||||
/** A pair of mock listeners. */
|
||||
@Mock
|
||||
private FixedAclUpdaterListener listenerA, listenerB;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
{
|
||||
openMocks(this);
|
||||
|
||||
fixedAclUpdater.registerListener(listenerA);
|
||||
fixedAclUpdater.registerListener(listenerB);
|
||||
}
|
||||
|
||||
/** Check that when the AclWorker successfully processes a node then the listeners are notified. */
|
||||
@Test
|
||||
public void testListenersNotifiedAboutUpdate() throws Throwable
|
||||
{
|
||||
when(nodeDAO.getNodePair(NODE_REF)).thenReturn(new Pair<>(NODE_ID, NODE_REF));
|
||||
when(onInheritPermissionsDisabledDelegate.get(TYPE_BASE)).thenReturn(onInheritPermissionsDisabled);
|
||||
|
||||
aclWorker.process(NODE_REF);
|
||||
|
||||
verify(listenerA).permissionsUpdatedAsynchronously(NODE_REF);
|
||||
verify(listenerB).permissionsUpdatedAsynchronously(NODE_REF);
|
||||
}
|
||||
|
||||
/** Check that archived nodes get the "Pending ACL" aspect removed without further updates, and the listeners are not notified. */
|
||||
@Test
|
||||
public void testListenersNotNotifiedAboutArchivedNode() throws Throwable
|
||||
{
|
||||
when(nodeDAO.getNodePair(ARCHIVED_NODE)).thenReturn(new Pair<>(NODE_ID, ARCHIVED_NODE));
|
||||
when(onInheritPermissionsDisabledDelegate.get(TYPE_BASE)).thenReturn(onInheritPermissionsDisabled);
|
||||
|
||||
aclWorker.process(ARCHIVED_NODE);
|
||||
|
||||
verify(accessControlListDAO).removePendingAclAspect(NODE_ID);
|
||||
verify(listenerA, never()).permissionsUpdatedAsynchronously(any(NodeRef.class));
|
||||
verify(listenerB, never()).permissionsUpdatedAsynchronously(any(NodeRef.class));
|
||||
}
|
||||
}
|
@@ -35,10 +35,14 @@ import java.util.Properties;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.alfresco.repo.domain.dialect.Dialect;
|
||||
import org.alfresco.repo.domain.dialect.MySQLInnoDBDialect;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.alfresco.util.testing.category.DBTests;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
@@ -48,11 +52,13 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
||||
*
|
||||
* @author Cristian Turlica
|
||||
*/
|
||||
@Category({DBTests.class})
|
||||
public class DeleteNotExistsExecutorTest
|
||||
{
|
||||
private static ApplicationContext ctx;
|
||||
private ScriptExecutor scriptExecutor;
|
||||
private DataSource dataSource;
|
||||
private Dialect dialect;
|
||||
private JdbcTemplate jdbcTmpl;
|
||||
|
||||
@BeforeClass
|
||||
@@ -67,9 +73,20 @@ public class DeleteNotExistsExecutorTest
|
||||
{
|
||||
scriptExecutor = ctx.getBean("simpleScriptExecutor", ScriptExecutorImpl.class);
|
||||
dataSource = ctx.getBean("dataSource", DataSource.class);
|
||||
dialect = ctx.getBean("dialect", Dialect.class);
|
||||
jdbcTmpl = new JdbcTemplate(dataSource);
|
||||
}
|
||||
|
||||
private DeleteNotExistsExecutor createDeleteNotExistsExecutor(Connection connection, String sql, int line, File scriptFile, Properties properties)
|
||||
{
|
||||
if (dialect instanceof MySQLInnoDBDialect)
|
||||
{
|
||||
return new MySQLDeleteNotExistsExecutor(connection, sql, line, scriptFile, properties, dataSource);
|
||||
}
|
||||
|
||||
return new DeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
}
|
||||
|
||||
@Test()
|
||||
public void testDefaultBehaviour() throws Exception
|
||||
{
|
||||
@@ -90,7 +107,7 @@ public class DeleteNotExistsExecutorTest
|
||||
{
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_READ_ONLY)).thenReturn("true");
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_TIMEOUT_SECONDS)).thenReturn("-1");
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = new DeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = createDeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
deleteNotExistsExecutor.execute();
|
||||
|
||||
List<String> res = jdbcTmpl.queryForList(select, String.class);
|
||||
@@ -100,7 +117,7 @@ public class DeleteNotExistsExecutorTest
|
||||
{
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_READ_ONLY)).thenReturn("false");
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_TIMEOUT_SECONDS)).thenReturn("-1");
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = new DeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = createDeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
deleteNotExistsExecutor.execute();
|
||||
|
||||
List<String> res = jdbcTmpl.queryForList(select, String.class);
|
||||
@@ -133,7 +150,7 @@ public class DeleteNotExistsExecutorTest
|
||||
{
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_DELETE_BATCH_SIZE)).thenReturn("1");
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_READ_ONLY)).thenReturn("false");
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = new DeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = createDeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
deleteNotExistsExecutor.execute();
|
||||
|
||||
List<String> res = jdbcTmpl.queryForList(select, String.class);
|
||||
@@ -167,7 +184,7 @@ public class DeleteNotExistsExecutorTest
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_BATCH_SIZE)).thenReturn("2");
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_READ_ONLY)).thenReturn("false");
|
||||
when(properties.getProperty(DeleteNotExistsExecutor.PROPERTY_TIMEOUT_SECONDS)).thenReturn("-1");
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = new DeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
DeleteNotExistsExecutor deleteNotExistsExecutor = createDeleteNotExistsExecutor(connection, sql, line, scriptFile, properties);
|
||||
deleteNotExistsExecutor.execute();
|
||||
|
||||
List<String> res = jdbcTmpl.queryForList(select, String.class);
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.domain.subscriptions;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
@@ -41,10 +41,11 @@ import org.alfresco.service.cmr.subscriptions.SubscriptionItemTypeEnum;
|
||||
import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.test_category.OwnJVMTestsCategory;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.alfresco.util.testing.category.NeverRunsTests;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
||||
@Category(OwnJVMTestsCategory.class)
|
||||
@Category({OwnJVMTestsCategory.class, NeverRunsTests.class})
|
||||
public class SubscriptionDAOTest extends TestCase
|
||||
{
|
||||
private ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
|
||||
|
@@ -30,6 +30,7 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
import static org.awaitility.Awaitility.await;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.jms.ConnectionFactory;
|
||||
@@ -77,17 +78,19 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public abstract class AbstractContextAwareRepoEvent extends BaseSpringTest
|
||||
{
|
||||
protected static final boolean DEBUG = false;
|
||||
|
||||
protected static final String TEST_NAMESPACE = "http://www.alfresco.org/test/ContextAwareRepoEvent";
|
||||
protected static final RepoEventContainer EVENT_CONTAINER = new RepoEventContainer();
|
||||
|
||||
private static final String BROKER_URL = "tcp://localhost:61616";
|
||||
private static final String TOPIC_NAME = "alfresco.repo.event2";
|
||||
private static final String CAMEL_ROUTE = "jms:topic:" + TOPIC_NAME;
|
||||
private static final RepoEventContainer EVENT_CONTAINER = new RepoEventContainer();
|
||||
private static final CamelContext CAMEL_CONTEXT = new DefaultCamelContext();
|
||||
|
||||
private static boolean isCamelConfigured;
|
||||
private static DataFormat dataFormat;
|
||||
|
||||
|
||||
@Autowired
|
||||
protected RetryingTransactionHelper retryingTransactionHelper;
|
||||
|
||||
@@ -104,6 +107,13 @@ public abstract class AbstractContextAwareRepoEvent extends BaseSpringTest
|
||||
@Autowired
|
||||
protected ObjectMapper event2ObjectMapper;
|
||||
|
||||
@Autowired @Qualifier("eventGeneratorV2")
|
||||
protected EventGenerator eventGenerator;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("eventGeneratorQueue")
|
||||
protected EventGeneratorQueue eventQueue;
|
||||
|
||||
protected NodeRef rootNodeRef;
|
||||
|
||||
@BeforeClass
|
||||
@@ -141,8 +151,35 @@ public abstract class AbstractContextAwareRepoEvent extends BaseSpringTest
|
||||
}
|
||||
return nodeService.getRootNode(storeRef);
|
||||
});
|
||||
|
||||
flushSpuriousEvents();
|
||||
}
|
||||
|
||||
/*
|
||||
* When running with an empty database some events related to the creation may
|
||||
* creep up here making the test fails. After attempting several other
|
||||
* strategies, a smart sleep seems to do the work.
|
||||
*/
|
||||
protected void flushSpuriousEvents() throws InterruptedException
|
||||
{
|
||||
int maxloops = 5;
|
||||
|
||||
int count = maxloops;
|
||||
do
|
||||
{
|
||||
Thread.sleep(165l);
|
||||
if (EVENT_CONTAINER.isEmpty())
|
||||
{
|
||||
count--;
|
||||
} else
|
||||
{
|
||||
EVENT_CONTAINER.reset();
|
||||
count = maxloops;
|
||||
}
|
||||
|
||||
} while (count > 0);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown()
|
||||
{
|
||||
@@ -179,6 +216,16 @@ public abstract class AbstractContextAwareRepoEvent extends BaseSpringTest
|
||||
propertyMap).getChildRef());
|
||||
}
|
||||
|
||||
protected NodeRef updateNodeName(NodeRef nodeRef, String newName)
|
||||
{
|
||||
PropertyMap propertyMap = new PropertyMap();
|
||||
propertyMap.put(ContentModel.PROP_NAME, newName);
|
||||
return retryingTransactionHelper.doInTransaction(() -> {
|
||||
nodeService.addProperties(nodeRef, propertyMap);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
protected void deleteNode(NodeRef nodeRef)
|
||||
{
|
||||
retryingTransactionHelper.doInTransaction(() -> {
|
||||
@@ -376,13 +423,18 @@ public abstract class AbstractContextAwareRepoEvent extends BaseSpringTest
|
||||
|
||||
public static class RepoEventContainer implements Processor
|
||||
{
|
||||
private final List<RepoEvent<?>> events = new ArrayList<>();
|
||||
private final List<RepoEvent<?>> events = Collections.synchronizedList(new ArrayList<>());
|
||||
|
||||
@Override
|
||||
public void process(Exchange exchange)
|
||||
{
|
||||
Object object = exchange.getIn().getBody();
|
||||
events.add((RepoEvent<?>) object);
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
System.err.println("XX: "+object);
|
||||
}
|
||||
}
|
||||
|
||||
public List<RepoEvent<?>> getEvents()
|
||||
@@ -404,6 +456,12 @@ public abstract class AbstractContextAwareRepoEvent extends BaseSpringTest
|
||||
{
|
||||
events.clear();
|
||||
}
|
||||
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return events.isEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@@ -26,9 +26,14 @@
|
||||
|
||||
package org.alfresco.repo.event2;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.domain.node.NodeDAO;
|
||||
import org.alfresco.repo.domain.node.Transaction;
|
||||
import org.alfresco.repo.event.v1.model.EventData;
|
||||
import org.alfresco.repo.event.v1.model.EventType;
|
||||
import org.alfresco.repo.event.v1.model.NodeResource;
|
||||
@@ -38,6 +43,7 @@ import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.GUID;
|
||||
import org.alfresco.util.PropertyMap;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
/**
|
||||
* @author Iulian Aftene
|
||||
@@ -45,6 +51,9 @@ import org.junit.Test;
|
||||
public class CreateRepoEventIT extends AbstractContextAwareRepoEvent
|
||||
{
|
||||
|
||||
@Autowired
|
||||
private NodeDAO nodeDAO;
|
||||
|
||||
@Test
|
||||
public void testCreateEvent()
|
||||
{
|
||||
@@ -149,9 +158,32 @@ public class CreateRepoEventIT extends AbstractContextAwareRepoEvent
|
||||
assertTrue("isFile flag should be TRUE for nodeType=cm:content. ", resource.isFile());
|
||||
assertFalse("isFolder flag should be FALSE for nodeType=cm:content. ", resource.isFolder());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEventTimestampEqualsToTransactionCommitTime()
|
||||
{
|
||||
String name = "TestFile-" + System.currentTimeMillis() + ".txt";
|
||||
PropertyMap propertyMap = new PropertyMap();
|
||||
propertyMap.put(ContentModel.PROP_NAME, name);
|
||||
|
||||
//create a node and return the transaction id required later
|
||||
Long transactionId = retryingTransactionHelper.doInTransaction(() -> {
|
||||
nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN,
|
||||
QName.createQName(TEST_NAMESPACE, GUID.generate()), ContentModel.TYPE_CONTENT, propertyMap).getChildRef();
|
||||
return nodeDAO.getCurrentTransactionId(false);
|
||||
});
|
||||
|
||||
RepoEvent<EventData<NodeResource>> resultRepoEvent = getRepoEvent(1);
|
||||
|
||||
Transaction transaction = nodeDAO.getTxnById(transactionId);
|
||||
Instant commitTimeMs = Instant.ofEpochMilli(transaction.getCommitTimeMs());
|
||||
ZonedDateTime timestamp = ZonedDateTime.ofInstant(commitTimeMs, ZoneOffset.UTC);
|
||||
|
||||
assertEquals(timestamp, resultRepoEvent.getTime());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCteateMultipleNodesInTheSameTransaction()
|
||||
public void testCreateMultipleNodesInTheSameTransaction()
|
||||
{
|
||||
retryingTransactionHelper.doInTransaction(() -> {
|
||||
for (int i = 0; i < 3; i++)
|
||||
|
@@ -0,0 +1,290 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2021 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.event2;
|
||||
|
||||
import static java.lang.Thread.sleep;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.alfresco.repo.event.v1.model.RepoEvent;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
public class EventGeneratorQueueUnitTest
|
||||
{
|
||||
private EventGeneratorQueue queue;
|
||||
|
||||
private Event2MessageProducer bus;
|
||||
private ExecutorService enqueuePool;
|
||||
private ExecutorService dequeuePool;
|
||||
private List<RepoEvent<?>> recordedEvents;
|
||||
private Map<String, RepoEvent<?>> events;
|
||||
|
||||
@Before
|
||||
public void setup()
|
||||
{
|
||||
queue = new EventGeneratorQueue();
|
||||
|
||||
enqueuePool = newThreadPool();
|
||||
queue.setEnqueueThreadPoolExecutor(enqueuePool);
|
||||
dequeuePool = newThreadPool();
|
||||
queue.setDequeueThreadPoolExecutor(dequeuePool);
|
||||
|
||||
bus = mock(Event2MessageProducer.class);
|
||||
queue.setEvent2MessageProducer(bus);
|
||||
|
||||
events = new HashMap<>();
|
||||
|
||||
setupEventsRecorder();
|
||||
}
|
||||
|
||||
@After
|
||||
public void teardown()
|
||||
{
|
||||
enqueuePool.shutdown();
|
||||
}
|
||||
|
||||
private void setupEventsRecorder()
|
||||
{
|
||||
recordedEvents = new CopyOnWriteArrayList<>();
|
||||
|
||||
Mockito.doAnswer(new Answer<Void>()
|
||||
{
|
||||
@Override
|
||||
public Void answer(InvocationOnMock invocation) throws Throwable
|
||||
{
|
||||
RepoEvent<?> event = invocation.getArgument(0, RepoEvent.class);
|
||||
recordedEvents.add(event);
|
||||
return null;
|
||||
}
|
||||
}).when(bus).send(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveSingleQuickMessage() throws Exception
|
||||
{
|
||||
queue.accept(messageWithDelay("A", 55l));
|
||||
|
||||
sleep(150l);
|
||||
|
||||
assertEquals(1, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotReceiveEventsWhenMessageIsNull() throws Exception
|
||||
{
|
||||
queue.accept(() -> { return null; });
|
||||
|
||||
sleep(150l);
|
||||
|
||||
assertEquals(0, recordedEvents.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveMultipleMessagesPreservingOrderScenarioOne() throws Exception {
|
||||
queue.accept(messageWithDelay("A", 0l));
|
||||
queue.accept(messageWithDelay("B", 100l));
|
||||
queue.accept(messageWithDelay("C", 200l));
|
||||
|
||||
sleep(450l);
|
||||
|
||||
assertEquals(3, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
assertEquals("B", recordedEvents.get(1).getId());
|
||||
assertEquals("C", recordedEvents.get(2).getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveMultipleMessagesPreservingOrderScenarioTwo() throws Exception
|
||||
{
|
||||
queue.accept(messageWithDelay("A", 300l));
|
||||
queue.accept(messageWithDelay("B", 150l));
|
||||
queue.accept(messageWithDelay("C", 0l));
|
||||
|
||||
sleep(950l);
|
||||
|
||||
assertEquals(3, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
assertEquals("B", recordedEvents.get(1).getId());
|
||||
assertEquals("C", recordedEvents.get(2).getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveMultipleMessagesPreservingOrderEvenWhenMakerPoisoned() throws Exception
|
||||
{
|
||||
queue.accept(messageWithDelay("A", 300l));
|
||||
queue.accept(() -> {throw new RuntimeException("Boom! (not to worry, this is a test)");});
|
||||
queue.accept(messageWithDelay("B", 55l));
|
||||
queue.accept(messageWithDelay("C", 0l));
|
||||
|
||||
sleep(950l);
|
||||
|
||||
assertEquals(3, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
assertEquals("B", recordedEvents.get(1).getId());
|
||||
assertEquals("C", recordedEvents.get(2).getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveMultipleMessagesPreservingOrderEvenWhenSenderPoisoned() throws Exception
|
||||
{
|
||||
Callable<RepoEvent<?>> makerB = messageWithDelay("B", 55l);
|
||||
RepoEvent<?> messageB = makerB.call();
|
||||
doThrow(new RuntimeException("Boom! (not to worry, this is a test)")).when(bus).send(messageB);
|
||||
queue.accept(messageWithDelay("A", 300l));
|
||||
queue.accept(makerB);
|
||||
queue.accept(messageWithDelay("C", 0l));
|
||||
|
||||
sleep(950l);
|
||||
|
||||
assertEquals(2, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
assertEquals("C", recordedEvents.get(1).getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveMultipleMessagesPreservingOrderEvenWhenMakerPoisonedWithError() throws Exception
|
||||
{
|
||||
queue.accept(messageWithDelay("A", 300l));
|
||||
queue.accept(() -> {throw new OutOfMemoryError("Boom! (not to worry, this is a test)");});
|
||||
queue.accept(messageWithDelay("B", 55l));
|
||||
queue.accept(messageWithDelay("C", 0l));
|
||||
|
||||
sleep(950l);
|
||||
|
||||
assertEquals(3, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
assertEquals("B", recordedEvents.get(1).getId());
|
||||
assertEquals("C", recordedEvents.get(2).getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveMultipleMessagesPreservingOrderEvenWhenSenderPoisonedWithError() throws Exception
|
||||
{
|
||||
Callable<RepoEvent<?>> makerB = messageWithDelay("B", 55l);
|
||||
RepoEvent<?> messageB = makerB.call();
|
||||
doThrow(new OutOfMemoryError("Boom! (not to worry, this is a test)")).when(bus).send(messageB);
|
||||
queue.accept(messageWithDelay("A", 300l));
|
||||
queue.accept(makerB);
|
||||
queue.accept(messageWithDelay("C", 0l));
|
||||
|
||||
sleep(950l);
|
||||
|
||||
assertEquals(2, recordedEvents.size());
|
||||
assertEquals("A", recordedEvents.get(0).getId());
|
||||
assertEquals("C", recordedEvents.get(1).getId());
|
||||
}
|
||||
|
||||
private Callable<RepoEvent<?>> messageWithDelay(String id, long delay)
|
||||
{
|
||||
Callable<RepoEvent<?>> res = new Callable<RepoEvent<?>>() {
|
||||
|
||||
@Override
|
||||
public RepoEvent<?> call() throws Exception
|
||||
{
|
||||
if(delay != 0)
|
||||
{
|
||||
sleep(delay);
|
||||
}
|
||||
return newRepoEvent(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
private RepoEvent<?> newRepoEvent(String id)
|
||||
{
|
||||
RepoEvent<?> ev = events.get(id);
|
||||
if (ev!=null)
|
||||
return ev;
|
||||
|
||||
ev = mock(RepoEvent.class);
|
||||
when(ev.getId()).thenReturn(id);
|
||||
when(ev.toString()).thenReturn(id);
|
||||
events.put(id, ev);
|
||||
|
||||
return ev;
|
||||
}
|
||||
|
||||
public static ExecutorService newThreadPool()
|
||||
{
|
||||
return new ThreadPoolExecutor(2, Integer.MAX_VALUE,
|
||||
60L, TimeUnit.SECONDS,
|
||||
new SynchronousQueue<Runnable>());
|
||||
}
|
||||
|
||||
public static final Executor SYNC_EXECUTOR_SAME_THREAD = new Executor()
|
||||
{
|
||||
@Override
|
||||
public void execute(Runnable command)
|
||||
{
|
||||
command.run();
|
||||
}
|
||||
};
|
||||
|
||||
public static final Executor SYNC_EXECUTOR_NEW_THREAD = new Executor()
|
||||
{
|
||||
@Override
|
||||
public void execute(Runnable command)
|
||||
{
|
||||
Thread t = new Thread(command);
|
||||
t.start();
|
||||
try
|
||||
{
|
||||
t.join();
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.event2;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.jms.Destination;
|
||||
import javax.jms.JMSException;
|
||||
import javax.jms.Message;
|
||||
import javax.jms.MessageConsumer;
|
||||
import javax.jms.MessageListener;
|
||||
import javax.jms.Session;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.event.databind.ObjectMapperFactory;
|
||||
import org.alfresco.repo.event.v1.model.RepoEvent;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.apache.activemq.ActiveMQConnection;
|
||||
import org.apache.activemq.ActiveMQConnectionFactory;
|
||||
import org.apache.activemq.advisory.DestinationSource;
|
||||
import org.apache.activemq.command.ActiveMQQueue;
|
||||
import org.apache.activemq.command.ActiveMQTextMessage;
|
||||
import org.apache.activemq.command.ActiveMQTopic;
|
||||
import org.awaitility.Awaitility;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public class EventGeneratorTest extends AbstractContextAwareRepoEvent
|
||||
{
|
||||
private static final String EVENT2_TOPIC_NAME = "alfresco.repo.event2";
|
||||
|
||||
private static final long DUMP_BROKER_TIMEOUT = 50000000l;
|
||||
|
||||
@Autowired @Qualifier("event2ObjectMapper")
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
private ActiveMQConnection connection;
|
||||
protected List<RepoEvent<?>> receivedEvents;
|
||||
|
||||
@Before
|
||||
public void startupTopicListener() throws Exception
|
||||
{
|
||||
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
|
||||
connection = (ActiveMQConnection) connectionFactory.createConnection();
|
||||
connection.start();
|
||||
|
||||
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
||||
Destination destination = session.createTopic(EVENT2_TOPIC_NAME);
|
||||
MessageConsumer consumer = session.createConsumer(destination);
|
||||
|
||||
receivedEvents = Collections.synchronizedList(new LinkedList<>());
|
||||
consumer.setMessageListener(new MessageListener()
|
||||
{
|
||||
@Override
|
||||
public void onMessage(Message message)
|
||||
{
|
||||
String text = getText(message);
|
||||
RepoEvent<?> event = toRepoEvent(text);
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
System.err.println("RX: " + event);
|
||||
}
|
||||
|
||||
receivedEvents.add(event);
|
||||
}
|
||||
|
||||
private RepoEvent<?> toRepoEvent(String json)
|
||||
{
|
||||
try
|
||||
{
|
||||
return objectMapper.readValue(json, RepoEvent.class);
|
||||
} catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (DEBUG)
|
||||
{
|
||||
System.err.println("Now actively listening on topic " + EVENT2_TOPIC_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
protected ObjectMapper createObjectMapper()
|
||||
{
|
||||
return ObjectMapperFactory.createInstance();
|
||||
}
|
||||
|
||||
@After
|
||||
public void shutdownTopicListener() throws Exception
|
||||
{
|
||||
connection.close();
|
||||
connection = null;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveEvent2EventsOnNodeCreation() throws Exception
|
||||
{
|
||||
createNode(ContentModel.TYPE_CONTENT);
|
||||
|
||||
Awaitility.await().atMost(6, TimeUnit.SECONDS).until(() -> receivedEvents.size() == 1);
|
||||
|
||||
RepoEvent<?> sent = getRepoEvent(1);
|
||||
RepoEvent<?> received = receivedEvents.get(0);
|
||||
assertEventsEquals("Events are different!", sent, received);
|
||||
}
|
||||
|
||||
private void assertEventsEquals(String message, RepoEvent<?> expected, RepoEvent<?> current)
|
||||
{
|
||||
if (DEBUG)
|
||||
{
|
||||
System.err.println("XP: " + expected);
|
||||
System.err.println("CU: " + current);
|
||||
}
|
||||
|
||||
assertEquals(message, expected, current);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReceiveEvent2EventsInOrder() throws Exception
|
||||
{
|
||||
NodeRef nodeRef = createNode(ContentModel.TYPE_CONTENT);
|
||||
updateNodeName(nodeRef, "TestFile-" + System.currentTimeMillis() + ".txt");
|
||||
deleteNode(nodeRef);
|
||||
|
||||
Awaitility.await().atMost(6, TimeUnit.SECONDS).until(() -> receivedEvents.size() == 3);
|
||||
|
||||
RepoEvent<?> sentCreation = getRepoEvent(1);
|
||||
RepoEvent<?> sentUpdate = getRepoEvent(2);
|
||||
RepoEvent<?> sentDeletion = getRepoEvent(3);
|
||||
assertEquals("Expected create event!", sentCreation, (RepoEvent<?>) receivedEvents.get(0));
|
||||
assertEquals("Expected update event!", sentUpdate, (RepoEvent<?>) receivedEvents.get(1));
|
||||
assertEquals("Expected delete event!", sentDeletion, (RepoEvent<?>) receivedEvents.get(2));
|
||||
}
|
||||
|
||||
private static String getText(Message message)
|
||||
{
|
||||
try
|
||||
{
|
||||
ActiveMQTextMessage am = (ActiveMQTextMessage) message;
|
||||
return am.getText();
|
||||
} catch (JMSException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// a simple main to investigate the contents of the local broker
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
dumpBroker("tcp://localhost:61616", DUMP_BROKER_TIMEOUT);
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
private static void dumpBroker(String url, long timeout) throws Exception
|
||||
{
|
||||
System.out.println("Broker at url: '" + url + "'");
|
||||
|
||||
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
|
||||
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory.createConnection();
|
||||
try
|
||||
{
|
||||
connection.start();
|
||||
|
||||
DestinationSource ds = connection.getDestinationSource();
|
||||
|
||||
Set<ActiveMQQueue> queues = ds.getQueues();
|
||||
System.out.println("\nFound " + queues.size() + " queues:");
|
||||
for (ActiveMQQueue queue : queues)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.out.println("- " + queue.getQueueName());
|
||||
} catch (JMSException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Set<ActiveMQTopic> topics = ds.getTopics();
|
||||
System.out.println("\nFound " + topics.size() + " topics:");
|
||||
for (ActiveMQTopic topic : topics)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.out.println("- " + topic.getTopicName());
|
||||
} catch (JMSException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
|
||||
Destination destination = session.createTopic(EVENT2_TOPIC_NAME);
|
||||
MessageConsumer consumer = session.createConsumer(destination);
|
||||
|
||||
System.out.println("\nListening to topic " + EVENT2_TOPIC_NAME + "...");
|
||||
consumer.setMessageListener(new MessageListener()
|
||||
{
|
||||
@Override
|
||||
public void onMessage(Message message)
|
||||
{
|
||||
String text = getText(message);
|
||||
System.out.println("Received message " + message + "\n" + text + "\n");
|
||||
}
|
||||
});
|
||||
|
||||
Thread.sleep(timeout);
|
||||
} finally
|
||||
{
|
||||
connection.close();
|
||||
}
|
||||
}
|
||||
}
|
@@ -34,7 +34,8 @@ import org.junit.runners.Suite.SuiteClasses;
|
||||
UpdateRepoEventIT.class,
|
||||
DeleteRepoEventIT.class,
|
||||
ChildAssociationRepoEventIT.class,
|
||||
PeerAssociationRepoEventIT.class
|
||||
PeerAssociationRepoEventIT.class,
|
||||
EventGeneratorTest.class
|
||||
})
|
||||
public class RepoEvent2ITSuite
|
||||
{
|
||||
|
@@ -33,7 +33,8 @@ import org.junit.runners.Suite.SuiteClasses;
|
||||
@RunWith(Suite.class)
|
||||
@SuiteClasses({ EventFilterUnitTest.class,
|
||||
EventConsolidatorUnitTest.class,
|
||||
EventJSONSchemaUnitTest.class
|
||||
EventJSONSchemaUnitTest.class,
|
||||
EventGeneratorQueueUnitTest.class
|
||||
})
|
||||
public class RepoEvent2UnitSuite
|
||||
{
|
||||
|
@@ -1,40 +1,40 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.imap;
|
||||
|
||||
import javax.mail.Flags;
|
||||
import javax.transaction.UserTransaction;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.mail.Flags;
|
||||
import javax.transaction.UserTransaction;
|
||||
import com.icegreen.greenmail.store.SimpleStoredMessage;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.importer.ACPImportPackageHandler;
|
||||
import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory;
|
||||
@@ -55,13 +55,14 @@ import org.alfresco.service.transaction.TransactionService;
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
import org.alfresco.util.PropertyMap;
|
||||
import org.alfresco.util.config.RepositoryFolderConfigBean;
|
||||
import org.alfresco.util.testing.category.PerformanceTests;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.junit.experimental.categories.Category;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import com.icegreen.greenmail.store.SimpleStoredMessage;
|
||||
|
||||
@Category(PerformanceTests.class)
|
||||
public class LoadTester extends TestCase
|
||||
{
|
||||
private Log logger = LogFactory.getLog(LoadTester.class);
|
||||
@@ -218,7 +219,7 @@ public class LoadTester extends TestCase
|
||||
|
||||
private void reauthenticate(String name, String password)
|
||||
{
|
||||
authenticationService.invalidateTicket(authenticationService.getCurrentTicket());
|
||||
authenticationService.invalidateTicket(authenticationService.getCurrentTicket());
|
||||
authenticationService.clearCurrentSecurityContext();
|
||||
authenticationService.authenticate(name, password.toCharArray());
|
||||
}
|
||||
|
@@ -1,28 +1,28 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.repo.imap;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
@@ -41,11 +41,14 @@ import javax.mail.Store;
|
||||
import javax.mail.internet.MimeMultipart;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
import org.alfresco.util.testing.category.PerformanceTests;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.junit.experimental.categories.Category;
|
||||
|
||||
import com.sun.mail.util.BASE64DecoderStream;
|
||||
|
||||
@Category(PerformanceTests.class)
|
||||
public class RemoteLoadTester extends TestCase
|
||||
{
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user