From 629bfa073522f116d65dbf8db959b6d7b87b52e9 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Mon, 4 Jul 2011 15:00:07 +0000 Subject: [PATCH] Merged V3.4-BUG-FIX to HEAD 28741: Merged DEV/TEMPORARY to V3.4-BUG-FIX 28740: ALF-8993: IMAP favourite star is not visible if imap is enabled via JMX The org.alfresco.repo.imap.ImapService interface was extended to expose getEnabled() and made the webscript to call ImapService.getEnabled(). 28742: ALF-8801: Broken French strings 28745: ALF-6470: French string correction 28746: ALF-5607: Installer deletion of directories on installation cancel. 28756: ALF-9211: Install fails when path selected that contains accents or double byte chars (e.g. Japanese) - Fix from Bitrock - Not internationalized yet 28758: Merged DEV to V3.4-BUG-FIX 28743: ALF-8029: JSON returned by some audit queries not valide Quote user in query.get.json.ftl if it has value. 28761: Merged DEV to V3.4-BUG-FIX 28739: ALF-9123 : "Content URL conversion failed" error being thrown Note: Actually changed the implementation but the principle remains. In future, use a thread-safe boolean e.g. AtomicBoolean to carry data around about the running state; don't use a class member variable as it can be manipulated by competing threads, etc. 28762: Fix ALF-9376: Typo in Version2Model 28763: Merged DEV to V3.4-BUG-FIX 28754: ALF-8461: Invalid property cm:source (cm:copiedFrom) causes not be become sys:incomplete Configurable property called 'propertiesToIgnore' was added to IncompleteNodeTagger,and configured to ignore "cm:source". Merge note: I fixed the stored 'propertiesToIgnore' to be a Set to prevent unnecessary conversions 28764: ALF-9036: Fix NPE on XForm session timeout 28765: ALF-9211: Externalized new installer message - Needs localizing 28789: ALF-9407: Single quote characters in messages containing {} need to be doubled git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28793 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../messages/avm-messages_it.properties | 2 +- .../messages/content-service.properties | 2 +- .../messages/content-service_de.properties | 2 +- .../messages/content-service_es.properties | 2 +- .../messages/content-service_fr.properties | 2 +- .../messages/content-service_it.properties | 2 +- .../messages/content-service_ja.properties | 2 +- .../messages/email-service.properties | 8 +-- .../messages/email-service_es.properties | 8 +-- .../messages/email-service_fr.properties | 4 +- .../messages/email-service_it.properties | 2 +- .../messages/email-service_ja.properties | 8 +-- .../messages/invitation-service.properties | 2 +- .../messages/patch-service.properties | 20 +++--- .../messages/schema-update.properties | 8 +-- .../messages/schema-update_de.properties | 6 +- .../messages/schema-update_es.properties | 6 +- .../messages/schema-update_fr.properties | 6 +- .../messages/schema-update_it.properties | 6 +- .../messages/schema-update_ja.properties | 6 +- .../messages/transfer-service_fr.properties | 4 +- config/alfresco/node-services-context.xml | 5 ++ .../alfresco/patch/patch-services-context.xml | 36 +++------- .../imap/default/imap-server-context.xml | 6 +- .../patch/impl/ContentUrlConverterPatch.java | 68 +++++++++---------- .../org/alfresco/repo/imap/ImapService.java | 8 ++- .../alfresco/repo/imap/ImapServiceImpl.java | 22 +++--- .../node/integrity/IncompleteNodeTagger.java | 19 ++++++ .../alfresco/repo/version/Version2Model.java | 2 +- 29 files changed, 145 insertions(+), 129 deletions(-) diff --git a/config/alfresco/messages/avm-messages_it.properties b/config/alfresco/messages/avm-messages_it.properties index 4d92ce1638..1aa79ad60c 100755 --- a/config/alfresco/messages/avm-messages_it.properties +++ b/config/alfresco/messages/avm-messages_it.properties @@ -1,7 +1,7 @@ # AVM related messages expiredcontent.workflow.title=Contenuto scaduto in ''{0}'' -avmlockservice.locked=Non si dispone dell'accesso a ''{0}''; attualmente \u00e8 bloccato dall'utente ''{1}''. +avmlockservice.locked=Non si dispone dell''accesso a ''{0}''; attualmente \u00e8 bloccato dall''utente ''{1}''. testserver.taken=Il server di test ''{0}'' selezionato \u00e8 stato assegnato a un altro utente, se possibile, selezionare un server diverso e riprovare. avm.cycle.create=Verrebbe creato un ciclo. diff --git a/config/alfresco/messages/content-service.properties b/config/alfresco/messages/content-service.properties index 1384e69172..44ee014a51 100644 --- a/config/alfresco/messages/content-service.properties +++ b/config/alfresco/messages/content-service.properties @@ -23,4 +23,4 @@ metadata.extraction.err.type_conversion=Metadata extraction failed because an ex transform.err.format_or_password=Failed to convert content, possibly due to an incorrectly formatted or password protected file. -content.routing.err.invalid_default_store=The 'defaultStoreName', ''{0}'' does not refer to a store in 'storesByName' ({1}). \ No newline at end of file +content.routing.err.invalid_default_store=The ''defaultStoreName'', ''{0}'' does not refer to a store in ''storesByName'' ({1}). \ No newline at end of file diff --git a/config/alfresco/messages/content-service_de.properties b/config/alfresco/messages/content-service_de.properties index abec384b00..4b4b86b907 100755 --- a/config/alfresco/messages/content-service_de.properties +++ b/config/alfresco/messages/content-service_de.properties @@ -23,4 +23,4 @@ metadata.extraction.err.type_conversion=Metadata extraction failed because an ex transform.err.format_or_password=Failed to convert content, possibly due to an incorrectly formatted or password protected file. -content.routing.err.invalid_default_store=The 'defaultStoreName', ''{0}'' does not refer to a store in 'storesByName' ({1}). +content.routing.err.invalid_default_store=The ''defaultStoreName'', ''{0}'' does not refer to a store in ''storesByName'' ({1}). diff --git a/config/alfresco/messages/content-service_es.properties b/config/alfresco/messages/content-service_es.properties index abec384b00..4b4b86b907 100755 --- a/config/alfresco/messages/content-service_es.properties +++ b/config/alfresco/messages/content-service_es.properties @@ -23,4 +23,4 @@ metadata.extraction.err.type_conversion=Metadata extraction failed because an ex transform.err.format_or_password=Failed to convert content, possibly due to an incorrectly formatted or password protected file. -content.routing.err.invalid_default_store=The 'defaultStoreName', ''{0}'' does not refer to a store in 'storesByName' ({1}). +content.routing.err.invalid_default_store=The ''defaultStoreName'', ''{0}'' does not refer to a store in ''storesByName'' ({1}). diff --git a/config/alfresco/messages/content-service_fr.properties b/config/alfresco/messages/content-service_fr.properties index abec384b00..4b4b86b907 100755 --- a/config/alfresco/messages/content-service_fr.properties +++ b/config/alfresco/messages/content-service_fr.properties @@ -23,4 +23,4 @@ metadata.extraction.err.type_conversion=Metadata extraction failed because an ex transform.err.format_or_password=Failed to convert content, possibly due to an incorrectly formatted or password protected file. -content.routing.err.invalid_default_store=The 'defaultStoreName', ''{0}'' does not refer to a store in 'storesByName' ({1}). +content.routing.err.invalid_default_store=The ''defaultStoreName'', ''{0}'' does not refer to a store in ''storesByName'' ({1}). diff --git a/config/alfresco/messages/content-service_it.properties b/config/alfresco/messages/content-service_it.properties index abec384b00..4b4b86b907 100755 --- a/config/alfresco/messages/content-service_it.properties +++ b/config/alfresco/messages/content-service_it.properties @@ -23,4 +23,4 @@ metadata.extraction.err.type_conversion=Metadata extraction failed because an ex transform.err.format_or_password=Failed to convert content, possibly due to an incorrectly formatted or password protected file. -content.routing.err.invalid_default_store=The 'defaultStoreName', ''{0}'' does not refer to a store in 'storesByName' ({1}). +content.routing.err.invalid_default_store=The ''defaultStoreName'', ''{0}'' does not refer to a store in ''storesByName'' ({1}). diff --git a/config/alfresco/messages/content-service_ja.properties b/config/alfresco/messages/content-service_ja.properties index abec384b00..4b4b86b907 100755 --- a/config/alfresco/messages/content-service_ja.properties +++ b/config/alfresco/messages/content-service_ja.properties @@ -23,4 +23,4 @@ metadata.extraction.err.type_conversion=Metadata extraction failed because an ex transform.err.format_or_password=Failed to convert content, possibly due to an incorrectly formatted or password protected file. -content.routing.err.invalid_default_store=The 'defaultStoreName', ''{0}'' does not refer to a store in 'storesByName' ({1}). +content.routing.err.invalid_default_store=The ''defaultStoreName'', ''{0}'' does not refer to a store in ''storesByName'' ({1}). diff --git a/config/alfresco/messages/email-service.properties b/config/alfresco/messages/email-service.properties index bc8eb99a91..60abfc4880 100644 --- a/config/alfresco/messages/email-service.properties +++ b/config/alfresco/messages/email-service.properties @@ -5,19 +5,19 @@ email.server.err.sender_blocked=''{0}'' has been denied access. email.server.err.inbound_mail_disabled=The Alfresco server is not configured to accept inbound emails. email.server.err.access_denied=''{0}'' has been denied access to ''{1}''. email.server.err.invalid_subject=The subject line must be a valid file name. -email.server.err.unknown_source_address=The 'from' email address was not recognised: {0}. +email.server.err.unknown_source_address=The ''from'' email address was not recognised: {0}. email.server.err.user_not_email_contributor=The user ''{0}'' in not in the email contributor group. email.server.err.no_email_contributor_group=The Email Contributor Group doesn't exist. email.server.err.invalid_node_address=The email address ''{0}'' does not reference a valid accessible node. email.server.err.handler_not_found=Email message handler was not found for node type ''{0}''. email.server.err.mail_read_error=An error occurred while reading the mail message: {0} email.server.err.failed_to_create_mime_message=Failed to create MIME message from input stream: {0} -email.server.err.extracting_from_address=Failed to extract the 'from' address: {0} +email.server.err.extracting_from_address=Failed to extract the ''from'' address: {0} email.server.err.no_from_address=The message has no 'from' address. -email.server.err.extracting_to_address=Failed to extract the 'to' address: {0} +email.server.err.extracting_to_address=Failed to extract the ''to'' address: {0} email.server.err.no_to_address=The message has no 'to' address. email.server.err.extracting_subject=Failed to extract the message subject: {0} -email.server.err.extracting_sent_date=Failed to extract the 'sent on' date: {0} +email.server.err.extracting_sent_date=Failed to extract the ''sent on'' date: {0} email.server.err.parse_message=Failed to parse the email message: {0} email.server.err.usupported_encoding=Encoding ''{0}'' is not supported email.server.err.failed_to_read_content_stream=Failed to read the message part content: {0} diff --git a/config/alfresco/messages/email-service_es.properties b/config/alfresco/messages/email-service_es.properties index 264bcfe5f7..0f6416644c 100755 --- a/config/alfresco/messages/email-service_es.properties +++ b/config/alfresco/messages/email-service_es.properties @@ -5,19 +5,19 @@ email.server.err.sender_blocked=A ''{0}'' le fue denegado el acceso. email.server.err.inbound_mail_disabled=El servidor Alfresco no est\u00e1 configurado para aceptar correos entrantes. email.server.err.access_denied=El acceso a ''{1}'' le fue denegado a ''{0}''. email.server.err.invalid_subject=La l\u00ednea de asunto debe ser un nombre de fichero v\u00e1lido. -email.server.err.unknown_source_address=La direcci\u00f3n de correo electr\u00f3nico 'desde' no fue reconocida: {0}. +email.server.err.unknown_source_address=La direcci\u00f3n de correo electr\u00f3nico ''desde'' no fue reconocida: {0}. email.server.err.user_not_email_contributor=El usuario ''{0}'' no est\u00e1 en el grupo contribuidor de correos. email.server.err.no_email_contributor_group=El grupo Contribuidor de correos no existe. email.server.err.invalid_node_address=La direcci\u00f3n correo electr\u00f3nico ''{0}'' no hace referencia a un nodo de acceso v\u00e1lido. email.server.err.handler_not_found=No se ha encontrado el controlador de mensajes de correo para el tipo de nodo ''{0}''. email.server.err.mail_read_error=Se produjo un error al leer el mensaje de correo: {0} email.server.err.failed_to_create_mime_message=No se pudo crear el mensaje MIME desde la corriente de entrada: {0} -email.server.err.extracting_from_address=No se pudo extraer la direcci\u00f3n 'desde': {0} +email.server.err.extracting_from_address=No se pudo extraer la direcci\u00f3n ''desde'': {0} email.server.err.no_from_address=El mensaje no tiene direcci\u00f3n 'desde'. -email.server.err.extracting_to_address=No se pudo extraer la direcci\u00f3n 'a': {0} +email.server.err.extracting_to_address=No se pudo extraer la direcci\u00f3n ''a'': {0} email.server.err.no_to_address=El mensaje no tiene direcci\u00f3n 'a'. email.server.err.extracting_subject=No se pudo extraer el asunto del mensaje: {0} -email.server.err.extracting_sent_date=No se pudo extraer la fecha 'enviado el': {0} +email.server.err.extracting_sent_date=No se pudo extraer la fecha ''enviado el'': {0} email.server.err.parse_message=No se pudo analizar sint\u00e1cticamente el mensaje correo: {0} email.server.err.usupported_encoding=Codificaci\u00f3n ''{0}'' no soportada email.server.err.failed_to_read_content_stream=No se pudo leer el contenido de la parte de mensaje: {0} diff --git a/config/alfresco/messages/email-service_fr.properties b/config/alfresco/messages/email-service_fr.properties index ca5133a630..4dec00ff97 100755 --- a/config/alfresco/messages/email-service_fr.properties +++ b/config/alfresco/messages/email-service_fr.properties @@ -6,9 +6,9 @@ email.server.err.inbound_mail_disabled=La configuration du serveur Alfresco ne p email.server.err.access_denied=''{0}'' s''est vu refuser l''acc\u00e8s \u00e0 ''{1}''. email.server.err.invalid_subject=La ligne d'objet doit \u00eatre un nom de fichier valide. email.server.err.unknown_source_address=L''adresse E-mail ''from'' n''est pas reconnue\u00a0: {0}. -email.server.err.user_not_email_contributor=L'utilisateur ''{0}'' ne fait pas partie du groupe des contributeurs par E-mail. +email.server.err.user_not_email_contributor=L''utilisateur ''{0}'' ne fait pas partie du groupe des contributeurs par E-mail. email.server.err.no_email_contributor_group=Le groupe de contributeurs par E-mail n'existe pas. -email.server.err.invalid_node_address=L'adresse E-mail ''{0}'' ne fait pas r\u00e9f\u00e9rence \u00e0 un n\u009cud accessible valide. +email.server.err.invalid_node_address=L''adresse E-mail ''{0}'' ne fait pas r\u00e9f\u00e9rence \u00e0 un n\u009cud accessible valide. email.server.err.handler_not_found=Le gestionnaire des E-mails est introuvable pour le type de n\u009cud ''{0}''. email.server.err.mail_read_error=Une erreur s''est produite lors de la lecture de l''E-mail\u00a0: {0} email.server.err.failed_to_create_mime_message=Impossible de cr\u00e9er le message\u00a0MIME \u00e0 partir du flux en entr\u00e9e\u00a0: {0} diff --git a/config/alfresco/messages/email-service_it.properties b/config/alfresco/messages/email-service_it.properties index 592553b7ef..55fb2c73cc 100755 --- a/config/alfresco/messages/email-service_it.properties +++ b/config/alfresco/messages/email-service_it.properties @@ -14,7 +14,7 @@ email.server.err.mail_read_error=Si \u00e8 verificato un errore durante la lettu email.server.err.failed_to_create_mime_message=Impossibile creare il messaggio MIME dal flusso di input: {0} email.server.err.extracting_from_address=Impossibile estrarre l''indirizzo del mittente: {0} email.server.err.no_from_address=Il messaggio non contiene un indirizzo del mittente: -email.server.err.extracting_to_address=Impossibile estrarre l'indirizzo del destinatario: {0} +email.server.err.extracting_to_address=Impossibile estrarre l''indirizzo del destinatario: {0} email.server.err.no_to_address=Il messaggio non contiene un indirizzo del destinatario. email.server.err.extracting_subject=Impossibile estrarre l''oggetto del messaggio: {0} email.server.err.extracting_sent_date=Impossibile estrarre la data di invio: {0} diff --git a/config/alfresco/messages/email-service_ja.properties b/config/alfresco/messages/email-service_ja.properties index d1afd5a2c2..43b359efa5 100755 --- a/config/alfresco/messages/email-service_ja.properties +++ b/config/alfresco/messages/email-service_ja.properties @@ -5,19 +5,19 @@ email.server.err.sender_blocked=''{0}''\u306e\u30a2\u30af\u30bb\u30b9\u304c\u62d email.server.err.inbound_mail_disabled=Alfresco\u30b5\u30fc\u30d0\u304c\u7740\u4fe1E\u30e1\u30fc\u30eb\u3092\u53d7\u3051\u5165\u308c\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 email.server.err.access_denied=''{0}''\u306e''{1}''\u3078\u306e\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002 email.server.err.invalid_subject=\u4ef6\u540d\u884c\u306f\u6709\u52b9\u306a\u30d5\u30a1\u30a4\u30eb\u540d\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -email.server.err.unknown_source_address='\u9001\u4fe1\u5143'E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f: {0}\u3002 +email.server.err.unknown_source_address=''\u9001\u4fe1\u5143''E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f: {0}\u3002 email.server.err.user_not_email_contributor=\u30e6\u30fc\u30b6''{0}''\u306fE\u30e1\u30fc\u30eb\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30b0\u30eb\u30fc\u30d7\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002 email.server.err.no_email_contributor_group=E\u30e1\u30fc\u30eb\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30b0\u30eb\u30fc\u30d7\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 email.server.err.invalid_node_address=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9''{0}''\u306f\u6709\u52b9\u306a\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u30ce\u30fc\u30c9\u3092\u53c2\u7167\u3057\u3066\u3044\u307e\u305b\u3093\u3002 email.server.err.handler_not_found=\u30ce\u30fc\u30c9\u30bf\u30a4\u30d7''{0}''\u306eE\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u30cf\u30f3\u30c9\u30e9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 email.server.err.mail_read_error=E\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u8aad\u53d6\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} email.server.err.failed_to_create_mime_message=\u5165\u529b\u30b9\u30c8\u30ea\u30fc\u30e0\u304b\u3089MIME\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u751f\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} -email.server.err.extracting_from_address='\u9001\u4fe1\u5143'\u30a2\u30c9\u30ec\u30b9\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} +email.server.err.extracting_from_address=''\u9001\u4fe1\u5143''\u30a2\u30c9\u30ec\u30b9\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} email.server.err.no_from_address=\u30e1\u30c3\u30bb\u30fc\u30b8\u306b'\u9001\u4fe1\u5143'\u30a2\u30c9\u30ec\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -email.server.err.extracting_to_address=\u5b9b\u5148'\u30a2\u30c9\u30ec\u30b9\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} +email.server.err.extracting_to_address=\u5b9b\u5148''\u30a2\u30c9\u30ec\u30b9\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} email.server.err.no_to_address=\u30e1\u30c3\u30bb\u30fc\u30b8\u306b'\u5b9b\u5148'\u30a2\u30c9\u30ec\u30b9\u304c\u3042\u308a\u307e\u305b\u3093\u3002 email.server.err.extracting_subject=\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u4ef6\u540d\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} -email.server.err.extracting_sent_date='\u9001\u4fe1\u65e5'\u306e\u65e5\u4ed8\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} +email.server.err.extracting_sent_date=''\u9001\u4fe1\u65e5''\u306e\u65e5\u4ed8\u306e\u62bd\u51fa\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} email.server.err.parse_message=E\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30d1\u30fc\u30b9\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} email.server.err.usupported_encoding=\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0''{0}''\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093 email.server.err.failed_to_read_content_stream=\u30e1\u30c3\u30bb\u30fc\u30b8\u90e8\u5206\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8aad\u8fbc\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} diff --git a/config/alfresco/messages/invitation-service.properties b/config/alfresco/messages/invitation-service.properties index bd91784f40..ee03a61bb5 100644 --- a/config/alfresco/messages/invitation-service.properties +++ b/config/alfresco/messages/invitation-service.properties @@ -8,7 +8,7 @@ invitation.error.invalid_inviteId_format="Invitation Id not valid format, valid invitation.invite.already_member="The user, {0} is already a member of {1} and cannot be invited again" invitation.cancel.not_site_manager="Current user, {0}, cannot cancel invitation: {1} because they are not a Site Manager for site: {2}" invitation.invite.not_site_manager="Current user, {0}, is not a Site Manager for site: {1}" -invitation.invite.unable_generate_id="Unable to generate a user name for invitee, which doesn't already belong to someone else firstName:{0} lastName:{1} email:{2}" +invitation.invite.unable_generate_id="Unable to generate a user name for invitee, which doesn''t already belong to someone else firstName:{0} lastName:{1} email:{2}" invitation.invite.already_finished="Invitation, {0} has already been accepted, cancelled or rejected" invitation.invite.authentication_chain="Authentication chain does not allow creation of new accounts" diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties index 222057b7ea..cf3fa02ba4 100644 --- a/config/alfresco/messages/patch-service.properties +++ b/config/alfresco/messages/patch-service.properties @@ -41,11 +41,11 @@ patch.savedSearchesFolder.result.exists=The saved searches folder already exists patch.savedSearchesFolder.result.created=The saved searches folder was successfully created: {0} patch.savedSearchesPermission.description=Sets required permissions on 'Saved Searches' folder. -patch.savedSearchesPermission.result.applied=Granted CONTRIBUTOR role to EVERYONE on 'Saved Searches' folder: {0}. +patch.savedSearchesPermission.result.applied=Granted CONTRIBUTOR role to EVERYONE on ''Saved Searches'' folder: {0}. patch.savedSearchesPermission.err.not_found='Saved Searches' folder could not be found. patch.updatePermissionData.description=Update permissions from 'folder' to 'cmobject' [JIRA: AR-344]. -patch.updatePermissionData.result=Changed {0} 'folder' access control entries to 'cmobject'. +patch.updatePermissionData.result=Changed {0} ''folder'' access control entries to ''cmobject''. patch.authoritiesFolder.description=Ensures the existence of the user authorities folder [JIRA: AR-497]. @@ -58,11 +58,11 @@ patch.fixNodeSerializableValues.description=Ensure that property values are not patch.fixNodeSerializableValues.result=Fixed {0} node property serialized values patch.updateGuestPermission.description=Rename guest permission from 'Guest' to 'Consumer' -patch.updateGuestPermission.result=Changed {0} 'Guest' access control entries to 'Consumer'. +patch.updateGuestPermission.result=Changed {0} ''Guest'' access control entries to ''Consumer''. patch.categoryRootPermission.description=Sets required permissions on 'Category Root' folder. -patch.categoryRootPermission.result=Granted CONSUMER role to GUEST on 'Category Root' folder: {0}. -patch.categoryRootPermission.err.not_found='Category Root' folder ({0}) could not be found. +patch.categoryRootPermission.result=Granted CONSUMER role to GUEST on ''Category Root'' folder: {0}. +patch.categoryRootPermission.err.not_found=''Category Root'' folder ({0}) could not be found. patch.guestPersonPermission.description=Change Guest Person permission from 'Consumer' to 'Read' patch.guestPersonPermission.result=Updated Guest Person permission from 'Consumer' to 'Read' @@ -71,7 +71,7 @@ patch.spacesRootPermission.description=Change Spaces store root permission from patch.spacesRootPermission.result=Updated Spaces store root permission from 'Consumer' to 'Read' patch.contentPermission.description=Update permission entries from 'cm:content' to 'sys:base'. -patch.contentPermission.result=Changed {0} 'cm:content' access control entries to 'sys:base'. +patch.contentPermission.result=Changed {0} ''cm:content'' access control entries to ''sys:base''. patch.forumsIcons.description=Updates forums icon references patch.forumsIcons.result=Updated {0} icon references @@ -170,7 +170,7 @@ patch.userAndPersonUserNamesAsIdentifiers.description=Reindex usr:user and cm:pe patch.userAndPersonUserNamesAsIdentifiers.result=Reindexed user:user and cm:person uids as identifiers patch.contentFormFolderType.description=Update WCM Content Form folder type. -patch.contentFormFolderType.result=Updated {0} WCM Content Form objects to 'wcm:formfolder' type. +patch.contentFormFolderType.result=Updated {0} WCM Content Form objects to ''wcm:formfolder'' type. patch.groupNamesAsIdentifiers.description=Reindex usr:authorityContainer gids as identifiers patch.groupNamesAsIdentifiers.result=Reindexed usr:authorityContainer with identifiers @@ -235,7 +235,7 @@ patch.deploymentMigration.reportMigrated=Deployment report for ''{0}'' from web patch.deploymentMigration.result=Deployment data has been migrated. patch.updateAvmPermissionData.description=Update avm permissions from 'webfolder' to 'cmobject'. -patch.updateAvmPermissionData.result=Changed {0} 'webfolder' access control entries to 'cmobject'. +patch.updateAvmPermissionData.result=Changed {0} ''webfolder'' access control entries to ''cmobject''. patch.updateAvmPermissions.description=Update ACLs on all avm objects to the new 2.2 permission model patch.updateAvmPermissions.result=Updated ACLs. Created {0} defining and {1} layered ACLs. @@ -319,7 +319,7 @@ patch.fixNameCrcValues.associationTypeNotDefined=Association type ''{0}'' has no patch.fixNameCrcValues.associationTypeNotChild=Association type ''{0}'' does not represent a child association but is used as one; for child association ID {1}. patch.personUsagePatch.description=Add person 'cm:sizeCurrent' property (if missing). -patch.personUsagePatch.result1=Added 'cm:sizeCurrent' property to {0} people that were missing this property. +patch.personUsagePatch.result1=Added ''cm:sizeCurrent'' property to {0} people that were missing this property. patch.personUsagePatch.result2=No people were missing the 'cm:sizeCurrent' property. patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow @@ -353,7 +353,7 @@ patch.convertContentUrls.store.done=This job is complete. Deactivate the schedu patch.fixAuthoritiesCrcValues.description=Fixes authority CRC32 values to match UTF-8 encoding. patch.fixAuthoritiesCrcValues.result=Fixed CRC32 values for UTF-8 encoding for {0} authorities. See file {1} for details. -patch.fixAuthoritiesCrcValues.fixed=Updated CRC32 values for authority '{0}'. +patch.fixAuthoritiesCrcValues.fixed=Updated CRC32 values for authority ''{0}''. patch.fixAuthoritiesCrcValues.unableToChange=Failed to update the CRC32 value for authority: \n Authority: {0} \n Error: {1} patch.updateMimetypes1.description=Fix mimetypes for Excel and Powerpoint. diff --git a/config/alfresco/messages/schema-update.properties b/config/alfresco/messages/schema-update.properties index 28c3626d39..32c2e5a5d0 100644 --- a/config/alfresco/messages/schema-update.properties +++ b/config/alfresco/messages/schema-update.properties @@ -24,7 +24,7 @@ schema.update.err.update_failed=Schema auto-update failed schema.update.err.validation_failed=Schema validation failed schema.update.err.update_script_not_run=The following schema upgrade script needs to be executed manually: {0} schema.update.err.script_not_found=The schema script could not be found at location {0} -schema.update.err.statement_include_before_sql=Script include '--INCLUDE:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_before_sql=Variable assignment with '--ASSIGN:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_format=Variable assignment uses format '--ASSIGN:x=col' where 'x' is the variable to assign to and 'col' is the column value to extract (line {0} of {1}). -schema.update.err.statement_terminator=Scripts must terminate all statements with ';' (line {0} of {1}). +schema.update.err.statement_include_before_sql=Script include ''--INCLUDE:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_before_sql=Variable assignment with ''--ASSIGN:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_format=Variable assignment uses format ''--ASSIGN:x=col'' where ''x'' is the variable to assign to and ''col'' is the column value to extract (line {0} of {1}). +schema.update.err.statement_terminator=Scripts must terminate all statements with '';'' (line {0} of {1}). diff --git a/config/alfresco/messages/schema-update_de.properties b/config/alfresco/messages/schema-update_de.properties index a7afca61c3..ae337aad21 100755 --- a/config/alfresco/messages/schema-update_de.properties +++ b/config/alfresco/messages/schema-update_de.properties @@ -24,6 +24,6 @@ schema.update.err.update_failed=Schema auto-update failed schema.update.err.validation_failed=Schema validation failed schema.update.err.update_script_not_run=The following schema upgrade script needs to be executed manually: {0} schema.update.err.script_not_found=The schema script could not be found at location {0} -schema.update.err.statement_var_assignment_before_sql=Variable assignment with '--ASSIGN:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_format=Variable assignment uses format '--ASSIGN:x=col' where 'x' is the variable to assign to and 'col' is the column value to extract (line {0} of {1}). -schema.update.err.statement_terminator=Scripts must terminate all statements with ';' (line {0} of {1}). +schema.update.err.statement_var_assignment_before_sql=Variable assignment with ''--ASSIGN:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_format=Variable assignment uses format ''--ASSIGN:x=col'' where ''x'' is the variable to assign to and ''col'' is the column value to extract (line {0} of {1}). +schema.update.err.statement_terminator=Scripts must terminate all statements with '';'' (line {0} of {1}). diff --git a/config/alfresco/messages/schema-update_es.properties b/config/alfresco/messages/schema-update_es.properties index a7afca61c3..ae337aad21 100755 --- a/config/alfresco/messages/schema-update_es.properties +++ b/config/alfresco/messages/schema-update_es.properties @@ -24,6 +24,6 @@ schema.update.err.update_failed=Schema auto-update failed schema.update.err.validation_failed=Schema validation failed schema.update.err.update_script_not_run=The following schema upgrade script needs to be executed manually: {0} schema.update.err.script_not_found=The schema script could not be found at location {0} -schema.update.err.statement_var_assignment_before_sql=Variable assignment with '--ASSIGN:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_format=Variable assignment uses format '--ASSIGN:x=col' where 'x' is the variable to assign to and 'col' is the column value to extract (line {0} of {1}). -schema.update.err.statement_terminator=Scripts must terminate all statements with ';' (line {0} of {1}). +schema.update.err.statement_var_assignment_before_sql=Variable assignment with ''--ASSIGN:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_format=Variable assignment uses format ''--ASSIGN:x=col'' where ''x'' is the variable to assign to and ''col'' is the column value to extract (line {0} of {1}). +schema.update.err.statement_terminator=Scripts must terminate all statements with '';'' (line {0} of {1}). diff --git a/config/alfresco/messages/schema-update_fr.properties b/config/alfresco/messages/schema-update_fr.properties index a7afca61c3..ae337aad21 100755 --- a/config/alfresco/messages/schema-update_fr.properties +++ b/config/alfresco/messages/schema-update_fr.properties @@ -24,6 +24,6 @@ schema.update.err.update_failed=Schema auto-update failed schema.update.err.validation_failed=Schema validation failed schema.update.err.update_script_not_run=The following schema upgrade script needs to be executed manually: {0} schema.update.err.script_not_found=The schema script could not be found at location {0} -schema.update.err.statement_var_assignment_before_sql=Variable assignment with '--ASSIGN:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_format=Variable assignment uses format '--ASSIGN:x=col' where 'x' is the variable to assign to and 'col' is the column value to extract (line {0} of {1}). -schema.update.err.statement_terminator=Scripts must terminate all statements with ';' (line {0} of {1}). +schema.update.err.statement_var_assignment_before_sql=Variable assignment with ''--ASSIGN:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_format=Variable assignment uses format ''--ASSIGN:x=col'' where ''x'' is the variable to assign to and ''col'' is the column value to extract (line {0} of {1}). +schema.update.err.statement_terminator=Scripts must terminate all statements with '';'' (line {0} of {1}). diff --git a/config/alfresco/messages/schema-update_it.properties b/config/alfresco/messages/schema-update_it.properties index a7afca61c3..ae337aad21 100755 --- a/config/alfresco/messages/schema-update_it.properties +++ b/config/alfresco/messages/schema-update_it.properties @@ -24,6 +24,6 @@ schema.update.err.update_failed=Schema auto-update failed schema.update.err.validation_failed=Schema validation failed schema.update.err.update_script_not_run=The following schema upgrade script needs to be executed manually: {0} schema.update.err.script_not_found=The schema script could not be found at location {0} -schema.update.err.statement_var_assignment_before_sql=Variable assignment with '--ASSIGN:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_format=Variable assignment uses format '--ASSIGN:x=col' where 'x' is the variable to assign to and 'col' is the column value to extract (line {0} of {1}). -schema.update.err.statement_terminator=Scripts must terminate all statements with ';' (line {0} of {1}). +schema.update.err.statement_var_assignment_before_sql=Variable assignment with ''--ASSIGN:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_format=Variable assignment uses format ''--ASSIGN:x=col'' where ''x'' is the variable to assign to and ''col'' is the column value to extract (line {0} of {1}). +schema.update.err.statement_terminator=Scripts must terminate all statements with '';'' (line {0} of {1}). diff --git a/config/alfresco/messages/schema-update_ja.properties b/config/alfresco/messages/schema-update_ja.properties index a7afca61c3..ae337aad21 100755 --- a/config/alfresco/messages/schema-update_ja.properties +++ b/config/alfresco/messages/schema-update_ja.properties @@ -24,6 +24,6 @@ schema.update.err.update_failed=Schema auto-update failed schema.update.err.validation_failed=Schema validation failed schema.update.err.update_script_not_run=The following schema upgrade script needs to be executed manually: {0} schema.update.err.script_not_found=The schema script could not be found at location {0} -schema.update.err.statement_var_assignment_before_sql=Variable assignment with '--ASSIGN:' must occur before starting the SQL statement (line {0} of {1}). -schema.update.err.statement_var_assignment_format=Variable assignment uses format '--ASSIGN:x=col' where 'x' is the variable to assign to and 'col' is the column value to extract (line {0} of {1}). -schema.update.err.statement_terminator=Scripts must terminate all statements with ';' (line {0} of {1}). +schema.update.err.statement_var_assignment_before_sql=Variable assignment with ''--ASSIGN:'' must occur before starting the SQL statement (line {0} of {1}). +schema.update.err.statement_var_assignment_format=Variable assignment uses format ''--ASSIGN:x=col'' where ''x'' is the variable to assign to and ''col'' is the column value to extract (line {0} of {1}). +schema.update.err.statement_terminator=Scripts must terminate all statements with '';'' (line {0} of {1}). diff --git a/config/alfresco/messages/transfer-service_fr.properties b/config/alfresco/messages/transfer-service_fr.properties index 2b605ab25b..6799ab459d 100755 --- a/config/alfresco/messages/transfer-service_fr.properties +++ b/config/alfresco/messages/transfer-service_fr.properties @@ -7,7 +7,7 @@ transfer_service.unable_to_transfer_async=Impossible de transf\u00e9rer de mani\ transfer_service.target_exists=Impossible de cr\u00e9er une cible de transfert portant le nom {0} car une cible porte d\u00e9j\u00e0 ce nom. transfer_service.comms.unsupported_protocol=Protocole non pris en charge : {0} transfer_service.comms.unsuccessful_response=Code de r\u00e9ponse infructueuse re\u00e7u depuis le serveur cible : {0}, {1} -transfer_service.comms.http_request_failed=Echec d'ex\u00e9cution de la requ\u00eate HTTP {0} vers la cible : {1} statut : {2} +transfer_service.comms.http_request_failed=Echec d''ex\u00e9cution de la requ\u00eate HTTP {0} vers la cible : {1} statut : {2} transfer_service.incompatible_versions=Transfert impossible entre des versions incompatibles. Identifiant de transfert : {0} de : {1} vers : {2} transfer_service.no_nodes=Aucun noeud \u00e0 transf\u00e9rer transfer_service.target_not_enabled=Cible de transfert non activ\u00e9e {0} @@ -23,7 +23,7 @@ transfer_service.receiver.lock_folder_not_found=Impossible de rep\u00e9rer l''em transfer_service.receiver.temp_folder_not_found=Impossible de rep\u00e9rer l''emplacement du dossier temporaire sp\u00e9cifi\u00e9 pour le transfert {0} : {1} transfer_service.receiver.lock_unavailable=Le verrou de transfert a \u00e9t\u00e9 r\u00e9clam\u00e9 pour un autre transfert entrant. Impossible de d\u00e9marrer un nouveau transfert. transfer_service.receiver.record_folder_not_found=Dossier sp\u00e9cifi\u00e9 pour contenir les enregistrements de transfert entrant introuvable : {0} -transfer_service.receiver.not_lock_owner=Echec de la tentative d'ex\u00e9cution de l'op\u00e9ration de transfert. Verrou non d\u00e9tenu par le transfert sp\u00e9cifi\u00e9 : {0} +transfer_service.receiver.not_lock_owner=Echec de la tentative d''ex\u00e9cution de l''op\u00e9ration de transfert. Verrou non d\u00e9tenu par le transfert sp\u00e9cifi\u00e9 : {0} transfer_service.receiver.error_ending_transfer=La requ\u00eate de fin d''un transfert ({0}) a entra\u00een\u00e9 une erreur. transfer_service.receiver.error_staging_snapshot=Une erreur s''est produite lors de l''activation du fichier de clich\u00e9 pour le transfert {0} transfer_service.receiver.error_staging_content=Une erreur s''est produite lors de l''activation d''un fichier de contenu pour le transfert {0}. L''identifiant du fichier est {1} diff --git a/config/alfresco/node-services-context.xml b/config/alfresco/node-services-context.xml index c7bbe87169..9fbf1af478 100644 --- a/config/alfresco/node-services-context.xml +++ b/config/alfresco/node-services-context.xml @@ -175,6 +175,11 @@ ${version.store.version2Store} + + + {http://www.alfresco.org/model/content/1.0}source + + diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index 07613be5cd..831b521968 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -2048,33 +2048,15 @@ - - - - - - - - - - - - - - - - - - - - ${system.content.contentUrlConverter.threadCount} - - - ${system.content.contentUrlConverter.batchSize} - - - ${system.content.contentUrlConverter.runAsScheduledJob} - + + + + + + + + + diff --git a/config/alfresco/subsystems/imap/default/imap-server-context.xml b/config/alfresco/subsystems/imap/default/imap-server-context.xml index d1465a16df..575a508a43 100644 --- a/config/alfresco/subsystems/imap/default/imap-server-context.xml +++ b/config/alfresco/subsystems/imap/default/imap-server-context.xml @@ -7,9 +7,6 @@ - - ${imap.server.enabled} - @@ -174,6 +171,9 @@ + + ${imap.server.enabled} + diff --git a/source/java/org/alfresco/repo/admin/patch/impl/ContentUrlConverterPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/ContentUrlConverterPatch.java index 1806245671..96ea2f1502 100644 --- a/source/java/org/alfresco/repo/admin/patch/impl/ContentUrlConverterPatch.java +++ b/source/java/org/alfresco/repo/admin/patch/impl/ContentUrlConverterPatch.java @@ -22,6 +22,7 @@ import java.sql.Savepoint; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.admin.patch.AbstractPatch; @@ -39,6 +40,7 @@ import org.alfresco.repo.domain.control.ControlDAO; import org.alfresco.repo.domain.patch.PatchDAO; import org.alfresco.repo.lock.JobLockService; import org.alfresco.repo.lock.LockAcquisitionException; +import org.alfresco.repo.lock.JobLockService.JobLockRefreshCallback; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; @@ -101,7 +103,6 @@ public class ContentUrlConverterPatch extends AbstractPatch // Lock as per patching private static Log logger = LogFactory.getLog(PatchExecuter.class); - private static VmShutdownListener shutdownListener = new VmShutdownListener("ContentUrlConverterPatch"); private RegistryService registryService; private JobLockService jobLockService; @@ -255,7 +256,7 @@ public class ContentUrlConverterPatch extends AbstractPatch logger.info(report); } } - + /** * Gets a set of work to do and executes it within this transaction. If kicked off via a job, * the task will exit before completion, on the assumption that it will be kicked off at regular @@ -278,7 +279,6 @@ public class ContentUrlConverterPatch extends AbstractPatch return I18NUtil.getMessage("patch.convertContentUrls.bypassingPatch"); } - boolean completed = false; // Lock in proportion to the batch size (0.1s per node or 0.8 min per 500) String lockToken = getLock(batchSize*100L); if (lockToken == null) @@ -294,16 +294,32 @@ public class ContentUrlConverterPatch extends AbstractPatch throw new RuntimeException("Unable to get job lock during patch execution. Only one server should perform the upgrade."); } } + // Use a flag to keep track of the running job + final AtomicBoolean running = new AtomicBoolean(true); + jobLockService.refreshLock(lockToken, LOCK, batchSize*100, new JobLockRefreshCallback() + { + @Override + public boolean isActive() + { + return running.get(); + } + @Override + public void lockReleased() + { + running.set(false); + } + }); + boolean completed = false; try { logger.info(I18NUtil.getMessage("patch.convertContentUrls.start")); logger.info(I18NUtil.getMessage("patch.convertContentUrls.adm.start")); - boolean admCompleted = applyADM(lockToken); + boolean admCompleted = applyADMLooping(running); logger.info(I18NUtil.getMessage("patch.convertContentUrls.avm.start")); - boolean avmCompleted = applyAVM(lockToken); + boolean avmCompleted = applyAVMLooping(running); logger.info(I18NUtil.getMessage("patch.convertContentUrls.store.start", contentStore)); - boolean urlLiftingCompleted = applyUrlLifting(lockToken); + boolean urlLiftingCompleted = applyUrlLifting(running); completed = admCompleted && avmCompleted && urlLiftingCompleted; } @@ -316,7 +332,8 @@ public class ContentUrlConverterPatch extends AbstractPatch } finally { - jobLockService.releaseLock(lockToken, LOCK); + // The lock will self-release if answer isActive in the negative + running.set(false); } if (completed) @@ -346,21 +363,7 @@ public class ContentUrlConverterPatch extends AbstractPatch } } - /** - * Attempts to get the lock. If it fails, the current transaction is marked for rollback. - * - * @return Returns the lock token - */ - private void refreshLock(String lockToken, long time) - { - if (lockToken == null) - { - throw new IllegalArgumentException("Must provide existing lockToken"); - } - jobLockService.refreshLock(lockToken, LOCK, time); - } - - private boolean applyADM(final String lockToken) + private boolean applyADMLooping(final AtomicBoolean running) { RetryingTransactionCallback callback = new RetryingTransactionCallback() { @@ -370,10 +373,8 @@ public class ContentUrlConverterPatch extends AbstractPatch } }; boolean done = false; - while (true && !shutdownListener.isVmShuttingDown()) + while (running.get()) { - refreshLock(lockToken, batchSize*100L); - done = transactionHelper.doInTransaction(callback, false, true); if (done) { @@ -467,7 +468,7 @@ public class ContentUrlConverterPatch extends AbstractPatch return false; } - private boolean applyAVM(final String lockToken) + private boolean applyAVMLooping(final AtomicBoolean running) { RetryingTransactionCallback callback = new RetryingTransactionCallback() { @@ -477,10 +478,8 @@ public class ContentUrlConverterPatch extends AbstractPatch } }; boolean done = false; - while (true && !shutdownListener.isVmShuttingDown()) + while (running.get()) { - refreshLock(lockToken, batchSize*100L); - done = transactionHelper.doInTransaction(callback, false, true); if (done) { @@ -565,19 +564,19 @@ public class ContentUrlConverterPatch extends AbstractPatch return false; } - private boolean applyUrlLifting(final String lockToken) throws Exception + private boolean applyUrlLifting(final AtomicBoolean running) throws Exception { RetryingTransactionCallback callback = new RetryingTransactionCallback() { public Boolean execute() throws Throwable { - return applyUrlLiftingInTxn(lockToken); + return applyUrlLiftingInTxn(running); } }; return transactionHelper.doInTransaction(callback, false, true); } - private boolean applyUrlLiftingInTxn(final String lockToken) throws Exception + private boolean applyUrlLiftingInTxn(final AtomicBoolean running) throws Exception { // Check the store if (!contentStore.isWriteSupported()) @@ -613,8 +612,9 @@ public class ContentUrlConverterPatch extends AbstractPatch private int allCount = 0; public void handle(String contentUrl) { - if (shutdownListener.isVmShuttingDown()) + if (!running.get()) { + // Either VM shutdown or lock release. Either way, bug out. throw new VmShutdownListener.VmShutdownException(); } @@ -643,8 +643,6 @@ public class ContentUrlConverterPatch extends AbstractPatch allCount++; if (allCount % batchSize == 0) { - // Update our lock - refreshLock(lockToken, batchSize*100L); if (totalSize < 0) { // Report diff --git a/source/java/org/alfresco/repo/imap/ImapService.java b/source/java/org/alfresco/repo/imap/ImapService.java index a3b1fc0872..3069a99474 100644 --- a/source/java/org/alfresco/repo/imap/ImapService.java +++ b/source/java/org/alfresco/repo/imap/ImapService.java @@ -279,5 +279,11 @@ public interface ImapService NodeRef messageFile, MimeMessage originalMessage) throws IOException, MessagingException; - + + /** + * Determines whether the IMAP server is enabled. + * + * @return true if enabled + */ + public boolean getImapServerEnabled(); } diff --git a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java index 1e2b681446..7f9c96f364 100644 --- a/source/java/org/alfresco/repo/imap/ImapServiceImpl.java +++ b/source/java/org/alfresco/repo/imap/ImapServiceImpl.java @@ -147,6 +147,8 @@ public class ImapServiceImpl implements ImapService, OnCreateChildAssociationPol private final static Map qNameToFlag; private final static Map flagToQname; + private boolean imapServerEnabled = false; + static { qNameToFlag = new HashMap(); @@ -175,22 +177,16 @@ public class ImapServiceImpl implements ImapService, OnCreateChildAssociationPol public static class ImapServiceBootstrap extends AbstractLifecycleBean { private ImapServiceImpl service; - private boolean imapServerEnabled; public void setService(ImapServiceImpl service) { this.service = service; } - public void setImapServerEnabled(boolean imapServerEnabled) - { - this.imapServerEnabled = imapServerEnabled; - } - @Override protected void onBootstrap(ApplicationEvent event) { - if (imapServerEnabled) + if (service.getImapServerEnabled()) { service.startup(); } @@ -199,7 +195,7 @@ public class ImapServiceImpl implements ImapService, OnCreateChildAssociationPol @Override protected void onShutdown(ApplicationEvent event) { - if (imapServerEnabled) + if (service.getImapServerEnabled()) { service.shutdown(); } @@ -305,6 +301,16 @@ public class ImapServiceImpl implements ImapService, OnCreateChildAssociationPol this.extractAttachmentsEnabled = extractAttachmentsEnabled; } + public void setImapServerEnabled(boolean enabled) + { + this.imapServerEnabled = enabled; + } + + public boolean getImapServerEnabled() + { + return this.imapServerEnabled; + } + // ---------------------- Lifecycle Methods ------------------------------ public void init() diff --git a/source/java/org/alfresco/repo/node/integrity/IncompleteNodeTagger.java b/source/java/org/alfresco/repo/node/integrity/IncompleteNodeTagger.java index d84aab030c..3086fa7aaa 100644 --- a/source/java/org/alfresco/repo/node/integrity/IncompleteNodeTagger.java +++ b/source/java/org/alfresco/repo/node/integrity/IncompleteNodeTagger.java @@ -77,6 +77,7 @@ public class IncompleteNodeTagger private DictionaryService dictionaryService; private NodeService nodeService; private List storesToIgnore = new ArrayList(0); + private Set propertiesToIgnore = new HashSet(); public IncompleteNodeTagger() { @@ -115,6 +116,19 @@ public class IncompleteNodeTagger this.storesToIgnore = storesToIgnore; } + /** + * @param propertiesToIgnore a list of property fully-qualified names to ignore + */ + public void setPropertiesToIgnore(List propertiesToIgnore) + { + this.propertiesToIgnore = new HashSet(); + for (String qnameStr : propertiesToIgnore) + { + QName qname = QName.createQName(qnameStr); + this.propertiesToIgnore.add(qname); + } + } + /** * Registers the system-level policy behaviours */ @@ -493,6 +507,11 @@ public class IncompleteNodeTagger { for (PropertyDefinition propertyDef : propertyDefs) { + if (propertiesToIgnore.contains(propertyDef.getName())) + { + continue; + } + if (!propertyDef.isMandatory()) { // The property isn't mandatory in any way diff --git a/source/java/org/alfresco/repo/version/Version2Model.java b/source/java/org/alfresco/repo/version/Version2Model.java index 6eef8101e4..e35441ced3 100644 --- a/source/java/org/alfresco/repo/version/Version2Model.java +++ b/source/java/org/alfresco/repo/version/Version2Model.java @@ -82,7 +82,7 @@ public interface Version2Model extends VersionBaseModel public static final String PROP_FROZEN_CREATED = "frozenCreated"; public static final QName PROP_QNAME_FROZEN_CREATED = QName.createQName(NAMESPACE_URI, PROP_FROZEN_CREATED); - public static final String PROP_FROZEN_MODIFIER = "frozenModifer"; + public static final String PROP_FROZEN_MODIFIER = "frozenModifier"; public static final QName PROP_QNAME_FROZEN_MODIFIER = QName.createQName(NAMESPACE_URI, PROP_FROZEN_MODIFIER); public static final String PROP_FROZEN_MODIFIED = "frozenModified";