From 9c563e35c6309b82f6bcb77e630aaa736da55f24 Mon Sep 17 00:00:00 2001 From: Dave Ward Date: Mon, 11 Apr 2011 15:57:26 +0000 Subject: [PATCH] Merged V3.4-BUG-FIX to HEAD 24662: 3.4.1 bug fix branch 24718: Merged V3.3 to V3.4-BUG-FIX 24717: Fix ALF-5555: It is impossible to edit review date from record's details page 24719: Fix for ALF-6106: Error on Check In operation with % symbol (SPP) 24733: Better fix for ALF-6106: Error on Check In operation with % symbol 24734: Fix for ALF-6089: Incorrect order of fields at 'Create Series', 'Create Category' and 'Create Folder' forms The name, title and description fields are now placed in their own group on the server, all other non custom rm fields are put in an 'other' group, the client side config then declares a set for each group and orders them appropriately. 24752: Merged V3.4 to V3.4-BUG-FIX 24751: Merged V3.3-BUG-FIX to V3.4 (RECORD ONLY) Restored V3.3-BUG-FIX mergeinfo, somehow truncated in revision 24274 24753: Merged V3.3-BUG-FIX to V3.4-BUG-FIX 23870: Merge Dev to V3.3_BUG_FIX ALF-4243: F5 load-balancer sending regular HTTP requests to Alfresco server causing Faces Servlet to throw java.lang.NullPointerException (MyFaces upgrade to from 1.1.5 to 1.1.7) 23897: Additional fixes and tweaks since introduction of MyFaces 1.1.7 library. 23919: More JSF component id related fixes. 23945: More MyFaces1.1.7 JSF page fix ups 23959: Another MyFaces 1.1.7 dup id issue fixed. 24008: ALF-4243 - Upgraded MyFaces from 1.1.7 to 1.1.8 to fix a bug seen in 1.1.7 - Added handling for the fact that valuebound properties that result in null now cause an exception where-as they were perfectly valid in 1.1.5. 24419: Merge from V3.3 to V3.3-BUG-FIX r.24418 Fix for ALF-6075. Running out of /tmp space on the server is causing uploads to fail. 24768: Fixes ALF-6295: Allows MySQL to not be installed via unattended installer invocation 24771: Merged BRANCHES/V3.4 to BRANCHES/DEV/V3.4-BUG-FIX: 24767: Merged BRANCHES/V3.3 to BRANCHES/V3.4: 24765: ALF-6547: fix intermittent test failure (AssetServiceImplTest renameFile/renameFolder) - fallout from ALF-1948 24779: Merge V3.3 to V3.4-BUG-FIX 24497 : ALF-3092 - deployment service - catch Throwable from Begin. 24684 : Merge DEV/BELARUS/V3.3-BUG-FIX-2010_10_04 to V3.3 23498 : ALF-5498 In Windows XP, placing a Folder with a Name that already Exists Removes all Content of the Existing Folder 24749 : ALF-6174 - Transfer Service fails with double peer assoc custom content type 24766 : ALF-5603 - It is impossible to assign workflow from workflow console to non-admin user 24802: Merged BRANCHES/V3.4 to BRANCHES/DEV/V3.4-BUG-FIX: 24801: Fix for ALF-3055: "SecurityTestSuite hangs when run in DOD5015 context - failed authentication audit hangs on DB connection" - do failed audits in a separate thread (from a thread pool) 24812: Fix ALF-6316: A new "spoof" multivalue text property (cm:tagScopeSummary) is now made available for TagScope nodes when accessed via the getProperty or getProperties operations on the standard node service. The values of this property take the form "=". A new interceptor has been added to the node service to do this (TagScopePropertyMethodInterceptor). WQS has been tweaked to make use of this new property, and the now defunct behaviour has been removed. 24820: Work in progress refactoring transaction handling of transfer unit tests. 24822: Merged BRANCHES/V3.4 to BRANCHES/DEV/V3.4-BUG-FIX: 24821: Fix for ALF-3055: "SecurityTestSuite hangs when run in DOD5015 context - failed authentication audit hangs on DB connection" - fix up unit tests 24834: ALF-6468 - Update the scheduled actions folder bootstrap to use localisable names and descriptions, following the normal pattern 24836: Added system property 'system.cache.disableImmutableSharedCaches' (false by default) - Equivalent to disabling Hibernate L2 cache for *immutable* entities - Allows distinction between mutable and immutable cache entries 24850: Fix ALF-6562: Moved property that is used to label the WQS dashlet on the "configure site dashboard" page out of the Slingshot project and into the WQS Share Module project. Corrected its value to "Web Quick Start" rather than "WCM Quick Start". 24857: Merged V3.4 to V3.4-BUG-FIX 24853: Merged V3.3 to V3.4 24852: Fixed ALF-6573 "Incorrect name of subgroups on "Groups" page" 24870: Removed svn:mergeinfo from root 24873: Merged V3.3 to V3.4-BUG-FIX (RECORD ONLY) 21789: ALF-4333: Fix - Updated RepoPrimaryManifestProcessorImpl so it can handle deletions that are reported by either pre-delete noderef or archived noderef (previously only handled the latter). - Updated TransferManifestNodeFactory so that it handles the case where the status of the node to transfer is "deleted". - Updated UnitTestTransferManifestNodeFactory so that it handles the change to TransferManifestNodeFactory above. - Added new tests for deletion cases. 23259: Merged HEAD to V3.3 23256: Fix ALF-4573: Start Workflow action is absent for edited document and working copy in Share 23346: Brought WebQS module in (including build process but not installer elements yet) 23371: "Simply" added wcmqs to installer 23391: ALF-5367: Copy dlls into tomcat/bin as appropriate. 23485: Merged V3.4 to V3.3 (fix backported for V3.3.x lines) 23472: Fixed ALF-5408: SQL Server missing ON DELETE CASCADE declarations 23515: Merged PATCHES/V3.2.0 to V3.3 23514: ALF-5554: Merged HEAD to V3.2.0 23153: When updating tag scopes following system shutdown/restore, be smarter about quickly skipping tag scopes that another (new) thread is currently working on 23283: More debugging level logging for tagging updates, to help identify the problem with periodic multi-threaded test failures on bamboo 23535: Merged V3.4 to V3.3 (complements 23517: ALF-5552) 23508: Fixed ALF-5559: Permission interceptors can fail if Lucene returns invalid NodeRefs 23564: ALF-5600: Merged V3.4 to V3.3 23424: Fixes: ALF-2989 - Incorrect sideId reference in URL for event in Site Calendar Dashlet Adds support for displaying events that start in the past but finish in the future (previously only events that start in the future were shown) 23586: MERGED V3.4 to V3.3 22864: Fix for ALF-5005: "Create and edit functions on AWE become "confused"" 23042: Fix ALF-5127: Impossible to create an article/blog (WCMQS) [Must clear panel hideEvent handler if manually hiding a YUI panel] 23561: Fixes: ALF-4569 - Removes universal override of input width box and switches the editor form panel to adjust it's width based on content rather than window size. Fixes: ALF-4570 - Adds an override for the CSS 'top' property of the form dialogue to ensure it's always below the ribbon. (Was being set automatically by the YUI widget.panel call) 23569: Fixes: ALF-5606 - Ribbon wasn't resizing correctly after the form events. 23630: Backport of installer 23631: Added 64-bit & deployment installers 23664: Fixes ALF-5691: TransferService: Multi-byte characters are not encoded correctly 23681: Fixes ALF-5699: TransferService: Snapshot file from source repo never contains complete MLText properties 23695: Fixed bug exposed after fixing ALF-5699. Parsing of MLText properties out of the transfer snapshot file was incorrect, and that was causing multi-lingual property values to be duplicated 23709: ALF-5699: Fix NPE in ManifestIntegrationTest 23734: Merged V3.4 to V3.3 23731: Fixes for ALF-3098 and ALF-3097 - Share - Security check on Personal Dashboard - only the owning user can view a user dashboard page - Share - Security issue on Customize Site Dashboard - private and moderated site dashboard pages no longer visible to non-members, customise site and dashboard pages only accessible to SiteManager 23747: ALF-5696: Merged V3.4 to V3.3 23585: Fixed ALF-5372 "JavaScript error on Groups management dialog with IE8 : document.getElementById is null" 23790: Fixed ALF-3823 "Share: RSS feed can't be read: http://cds-srv.sun.com:8700/rss/update/public/sunalert_update.xml - ok with other RSS client." 23883: Fixes ALF-5759: WQS: Attempt to copy a website section fails 23907: Merged DEV/BELARUS/V3.3-BUG-FIX-2010_09_20 to V33 22750: ALF-4846: Update rules are firing on inbound actions 23931: Undid rev 23907 (Reverse-merged /alfresco/BRANCHES/DEV/BELARUS/V3.3-BUG-FIX-2010_09_20:r22750) 23961: Fixed ALF-5686 "Incorrect behaviour of "All" filter in "My Tasks" dashlet" - Variables assigned in a <#macro> shall always be assigned using <#local> (using <#assign> makes them globally available which might cause naming collisions) 24132: Disable intermittent failing unit test 24148: ALF-6007: Merged HEAD to V3.3 23049: Fixed ALF-5099: Error when trying to go back in Create Web Content Wizard (only with certain XSDs) 24263: Merged from V3.3-BUG-FIX to V3.3 24264: V3.3-BUG-FIX to V3.3 24262: Stress test code for ALF-5025: Support background processing of archiving 24287: Added missing import 24336: Merged V3.4 to V3.3 23205: Fix for ALF-2111 - Download URLS are different on different pages, authentication fails when URL sent 24353: Merged V3.4 to V3.3 24352: Fix SQL fallout from ALF-6078 24510: Merged V3.4 to V3.3 21960: First round of date refactoring: Document Library pages now expect XML dates (ISO8601) from Share data webscripts 21961: Share client-side I18N utility now emulates sever-side handling of doubled-up single quotes. 24526: Merged V3.4 to V3.3 24402: Fix for performance degredation related to ALF-3823. RSS feed processing in JavaScript relies on Rhino impl of regex - this is extreemly slow as Rhino regex is by far the slowest component of the library. Switched code to use the Java Regex libraries to improve performance and reduce memory usage. 24587: Merged V3.4 to V3.3 24564: Fix for ALF-3727: Custom permissions aren't visible in Explorer UI 24604: Merged V3.4 to V3.3 24602: Build fix for RM permission model loading - collateral damage for R 24564 24774: Merged BRANCHES/V3.4 to BRANCHES/V3.3: 23492: Fixed ALF-5550: DB2: Unable to insert values into alf_string_value 24813: Merged BRANCHES/V3.4 to BRANCHES/V3.3: 24750: Limit installer builds to 2 threads 24874: Merged V3.4 to V3.4-BUG-FIX 24667: Resolve ALF-6202 - MT: fix offline edit (Share) 24672: Fixes from Gloria for: ALF-6339 and ALF-6337 24673: Merge V3.3 to V3.4 24668 : Upgrade of large repository to latest 3.3 fails on excession of mysql table lock size 24674: Fixes ALF-6294: Remove illegal CLI option 24675: Fix ALF-6099: CLONE - IE6: Sometimes errors occur on almost actions in Office Add-ins. Removed linebreaks from JSON response template & prevented "undefined" entries in URL. 24680: ALF-6120 : Version notes are lost for versioned items migrated from 2.2 to 3.4.0 24681: Merged BRANCHES/DEV/BELARUS/V3.4-2010_12_14 to BRANCHES/V3.4: 24609: MT - ALF-3563 24640: MT - ALF-3563 (merged w/ minor improvement) 24685: Fixes ALF-6403: Change installer window height on Linux 24688: Fix ALF-6029 (part II) - MT: cannot "Show Folders" for "Data Dictionary" in Afresco Share - part II adds patch and removes workaround 24689: Fixes: ALF-6219 - Incorrectly formatted variable in translation 24691: MT: ALF-3263 - Explorer login now fails with consistent error message ("Unable to login - unknown username/password.") if tenant does not exist or is disabled 24692: Fixes: ALF-6370 and ALF-6225 among others - sweep of FR and DE resource bundles for quote escaping. 24694: Fixes ALF-6424. Erased erroneous equals sign 24695: Fixes: ALF-6320 - removed the country specific portion of the language pack suffixes for French, German and Spanish. This enables speakers of those languages outside of those countries to benefit from the language packs. 24696: Fix for ALF-6299: XSS attack on editing blog post with XSS data in IE6&IE7 24700: Swaps _it_IT for _it to make Italian language pack available to Italian speakers outside of Italy. 24703: Avoid DB2 query failure if someone passes in a made-up UUID - Test RunningActionRestApiTest was making up a long node UUID - DB2 fails to set the parameter with SQLSTATE=22001 24706: Merged V3.4-BUG-FIX to V3.4 24705: Fix for ALF-6365, ALF-6335 24708: Fix ALF-6386: View Details and Edit Metadata icons are incorrect for folder 24709: Missing first/last name handling. 24711: Merged V3.3 to V3.4 24710: ALF-5535 - Fix to correctly format json number values (not as numeric human readable strings) 24713: Fix ALF-5404: It is now possible to configure who receives notifications of "Contact Us" requests by setting a configuration property on the WQS website node, such as "feedbackAssignee.Contact Request=brian" Also added missing Spring MVC source to 3rd Party. 24715: Fix for ALF-6412. OOoDirect always tries to connect to port 8100. Formerly the ooo.port property did not exist for the OOoDirect connector. It was added in r.23182 for the soffice process, but not for the connector bean. Now added for the connector too. 24721: Fix for ALF-6351 - Simple search breaks if override config is used and does not contain new 'repository-search' element 24728: Fixes: ALF-5685 - Incorrect encoding of Japanese Characters 24732: Fixes ALF-6381 and others - calendar strings appearing incorrectly. Problem was an unicode encoded comma preventing the property string being broken up into different days of the weeks or months. 24739: Fix ALF-6545: DB2: SQLCODE=-302, SQLSTATE=22001 (testCreateMultiLingualCategoryRoots) - Shortened Japanese name to 14 characters 24740: Fixes: ALF-6413 (with some translations still pending). 24742: Update readmes. 24744: Merged HEAD to BRANCHES/V3.4: 24137: Fixes: ALF-5642, ALF-3892, ALF-5043 & Brings Add Event dialog in line with other forms in share by disabling the popup validation error box. 24746: Build/test fix: PostgreSQL -AssetServiceImplTest.renameFolder 24755: Merged V3.3 to V3.4 (RECORD ONLY) 21789: ALF-4333: Fix - Updated RepoPrimaryManifestProcessorImpl so it can handle deletions that are reported by either pre-delete noderef or archived noderef (previously only handled the latter). - Updated TransferManifestNodeFactory so that it handles the case where the status of the node to transfer is "deleted". - Updated UnitTestTransferManifestNodeFactory so that it handles the change to TransferManifestNodeFactory above. - Added new tests for deletion cases. 23259: Merged HEAD to V3.3 23256: Fix ALF-4573: Start Workflow action is absent for edited document and working copy in Share 23346: Brought WebQS module in (including build process but not installer elements yet) 23371: "Simply" added wcmqs to installer 23391: ALF-5367: Copy dlls into tomcat/bin as appropriate. 23485: Merged V3.4 to V3.3 (fix backported for V3.3.x lines) 23472: Fixed ALF-5408: SQL Server missing ON DELETE CASCADE declarations 23515: Merged PATCHES/V3.2.0 to V3.3 23514: ALF-5554: Merged HEAD to V3.2.0 23153: When updating tag scopes following system shutdown/restore, be smarter about quickly skipping tag scopes that another (new) thread is currently working on 23283: More debugging level logging for tagging updates, to help identify the problem with periodic multi-threaded test failures on bamboo 23535: Merged V3.4 to V3.3 (complements 23517: ALF-5552) 23508: Fixed ALF-5559: Permission interceptors can fail if Lucene returns invalid NodeRefs 23564: ALF-5600: Merged V3.4 to V3.3 23424: Fixes: ALF-2989 - Incorrect sideId reference in URL for event in Site Calendar Dashlet Adds support for displaying events that start in the past but finish in the future (previously only events that start in the future were shown) 23586: MERGED V3.4 to V3.3 22864: Fix for ALF-5005: "Create and edit functions on AWE become "confused"" 23042: Fix ALF-5127: Impossible to create an article/blog (WCMQS) [Must clear panel hideEvent handler if manually hiding a YUI panel] 23561: Fixes: ALF-4569 - Removes universal override of input width box and switches the editor form panel to adjust it's width based on content rather than window size. Fixes: ALF-4570 - Adds an override for the CSS 'top' property of the form dialogue to ensure it's always below the ribbon. (Was being set automatically by the YUI widget.panel call) 23569: Fixes: ALF-5606 - Ribbon wasn't resizing correctly after the form events. 23630: Backport of installer 23631: Added 64-bit & deployment installers 23664: Fixes ALF-5691: TransferService: Multi-byte characters are not encoded correctly 23681: Fixes ALF-5699: TransferService: Snapshot file from source repo never contains complete MLText properties 23695: Fixed bug exposed after fixing ALF-5699. Parsing of MLText properties out of the transfer snapshot file was incorrect, and that was causing multi-lingual property values to be duplicated 23709: ALF-5699: Fix NPE in ManifestIntegrationTest 23734: Merged V3.4 to V3.3 23731: Fixes for ALF-3098 and ALF-3097 - Share - Security check on Personal Dashboard - only the owning user can view a user dashboard page - Share - Security issue on Customize Site Dashboard - private and moderated site dashboard pages no longer visible to non-members, customise site and dashboard pages only accessible to SiteManager 23747: ALF-5696: Merged V3.4 to V3.3 23585: Fixed ALF-5372 "JavaScript error on Groups management dialog with IE8 : document.getElementById is null" 23790: Fixed ALF-3823 "Share: RSS feed can't be read: http://cds-srv.sun.com:8700/rss/update/public/sunalert_update.xml - ok with other RSS client." 23883: Fixes ALF-5759: WQS: Attempt to copy a website section fails 23907: Merged DEV/BELARUS/V3.3-BUG-FIX-2010_09_20 to V33 - 22750: ALF-4846: Update rules are firing on inbound actions 23931: Undid rev 23907 (Reverse-merged /alfresco/BRANCHES/DEV/BELARUS/V3.3-BUG-FIX-2010_09_20:r22750) 23961: Fixed ALF-5686 "Incorrect behaviour of "All" filter in "My Tasks" dashlet" - Variables assigned in a <#macro> shall always be assigned using <#local> (using <#assign> makes them globally available which might cause naming collisions) 24132: Disable intermittent failing unit test 24148: ALF-6007: Merged HEAD to V3.3 23049: Fixed ALF-5099: Error when trying to go back in Create Web Content Wizard (only with certain XSDs) 24263: Merged from V3.3-BUG-FIX to V3.3 24264: Merged V3.3-BUG-FIX to V3.3 24262: Stress test code for ALF-5025: Support background processing of archiving 24287: Added missing import 24336: Merged V3.4 to V3.3 23205: Fix for ALF-2111 - Download URLS are different on different pages, authentication fails when URL sent 24353: Merged V3.4 to V3.3 24352: Fix SQL fallout from ALF-6078 24510: Merged V3.4 to V3.3 21960: First round of date refactoring: Document Library pages now expect XML dates (ISO8601) from Share data webscripts 21961: Share client-side I18N utility now emulates sever-side handling of doubled-up single quotes. 24526: Merged V3.4 to V3.3 24402: Fix for performance degredation related to ALF-3823. RSS feed processing in JavaScript relies on Rhino impl of regex - this is extreemly slow as Rhino regex is by far the slowest component of the library. Switched code to use the Java Regex libraries to improve performance and reduce memory usage. 24587: Merged V3.4 to V3.3 24564: Fix for ALF-3727: Custom permissions aren't visible in Explorer UI 24604: Merged V3.4 to V3.3 24602: Build fix for RM permission model loading - collateral damage for R 24564 24775: Merged BRANCHES/V3.3 to BRANCHES/V3.4: (RECORD-ONLY) - already in V3.4 24774: (RECORD-ONLY) Merged BRANCHES/V3.4 to BRANCHES/V3.3: 23492: Fixed ALF-5550: DB2: Unable to insert values into alf_string_value 24788: Add evaluation use message for OSX installer 24790: Removed svn:mergeinfo on root 24791: Fixed ALF-6560: MIME type not detected (set to application/octet-stream) when content written via FileFolderService - First access of content on a new file (FileFolderService.getWriter) guesses a mimetype - The initial mimetype guess *was* done during create, but that was expensive. - Added unit test to cover regression 24803: Merged BRANCHES/DEV/dwebster/ to BRANCHES/V3.4: 24773: DE bug fixes received from translators 10th Jan. 24776: ES files received from translators 10th Jan 24793: FR files received from translators 10th Jan 24792: IT files received from translators 10th Jan 24804: Temporarily removing Japanese language bundle 24856: Merged BRANCHES/DEV/dwebster/ to BRANCHES/V3.4: 24848: Latest Language updates from Translators 24863: ALF-6029 (MT Share - repo' view after upg) 24880: Merged V3.3 to V3.4-BUG-FIX 24463: Fixed ALF-4398 "Path to rule set is not displayed" ($html alias was missing from a merge) 24465: Merge V3.3 to V3.4 (RECORD ONLY) 24463: Fixed ALF-4398 "Path to rule set is not displayed" ($html alias was missing from a merge) 24493: Fix for Mac OS X CIFS logon problem, change UID to start at one as zero has special meaning, plus other minor fixes. JLAN-112. 24569: Fix for ALF-5333: Webdav - Online editing of files in a folder with German umlauts does not report correct characters 24611: Fix broken build due to merge #fail (r24460 / ALF-4015) 24668: ALF-4557 - Upgrade of large repository to latest 3.3 fails on excession of mysql table lock size 24707: Fix for handling of null first/last name in wiki page list 24710: ALF-5535 - Fix to correctly format json number values (not as numeric human readable strings) 24794: Fix for ALF-4984 - Outdated custom-slingshot-application-context.xml.sample file for share 24798: Fix for ALF-5806: Lucene query does not return expected result. - Alfresco FTS now supports the prefixes ~ and = for phrase queries 24814: Build fix after r24798: Fix for ALF-5806: Lucene query does not return expected result. 24823: Synchronization improvements to RemoteClient and http proxy hosts 24825: Fixed #3 of ALF-6308 "Share data issues" - Share falls back to use "html uploader" (in all browsers except IE) when "JSESSIONID" cookie is unreachable from javascript (like when "HttpOnly cookies" is activated on the server. 24835: Fixed ALF-5484: Check-in does not update association - Copy code when copying over an existing target node was NOT processing associations - Fallout from refactor and subsequent fixes related to ALF-958 (Target associations aren't copied) - Some commented-out unit tests reintroduced 24842: Fix for ALF-6308 item #4 - validate the redirect URL to ensure it is a relative url 24845: Merged DEV/DAVEW/SAP to V3.3 23874: ALF-5822: Correct Lucene throttling mechanism to prevent build up of excessive committed deltas - Also correct BatchProcessor's mechanism for single-threading batches with cross dependencies - Single-threaded batches must be sequenced in order 23876: ALF-5822: Default lucene.indexer.mergerTargetOverlaysBlockingFactor to 2 for better write performance under load 24022: ALF-5822: Refinement of fix - Don't block a thread that has already entered the prepare phase with another indexer (e.g. a cross-store commit). Otherwise it could block indefinitely and never enter the commit phase - Also added extra debug diagnostics and handle all Throwables on failure 24023: ALF-5822: Minor correction to debug log message 24421: ALF-6134: Do not export org.hibernate.jmx.StatisticsService through JMX to avoid excessive blocking under load 24422: ALF-6135: Remove lock contention from concurrent Lucene searches - Added a RW Lock and Thread local-based solution to org.apache.lucene.store.FSDirectory.FSIndexInput.readInternal() to avoid contention during multiple parallel Lucene searches. This is already recognized as a bottleneck by the Lucene developers, who offer NIOFSDirectory as an alternative, which unfortunately doesn't work on Windows. - Added RW lock to org.apache.lucene.index.TermInfosReader.ensureIndexIsRead() - Threads no longer hanging in lucene searches during load tests. Woohoo! 24423: ALF-6136: Don't call through to org.apache.log4j.NDC unless debug is enabled as it's heavily synchronized. Also avoid dynamic method invocation by using a delegate. 24426: ALF-6138 (SURF - PARTIAL): 'Warm' the java.beans.Introspector cache for key Freemarker accessible bean classes on loading in static initializers 24428: ALF-6139 (SURF - PARTIAL): First log in to Share is expensive due to 'lazy' dashboard creation and excessive synchronization - Added AVMRemoteStore.createDocuments() for creating multiple XML documents at once, all embedded within the same master XML document in the request body - Added corresponding saveDocuments() methods to Store, RemoteStore, Model, ModelObjectManager and ModelObjectPersister on the Surf side - Used this in PresetsManager - Removed excessive synchronization from StoreModelObjectPersister 24429: ALF-6140 (SURF - PARTIAL): Surf tweaks to allow concurrent execution of web scripts - Use StrongCacheStorage instead of MruCacheStorage in RepositoryTemplateProcessor to avoid use of a synchronized cache - Tweak cache sizes in FreeMarkerProcessor - Use thread local object wrapper delegates in QNameAwareObjectWrapper and PresentationTemplateProcessor to work around synchronization in DefaultObjectWrapper - Swap in the same object wrapper to WrappingTemplateModel - Use a concurrent HashMap in ModelObjectCache and ModelHelper and remove excessive synchronization - Use RW locks rather than synchronized blocks in AbstractWebScript 24431: ALF-6141: Improvements to IBatis DAO performance under load - Use lazyLoadingEnabled="false", enhancementEnabled="false" to avoid unnecessary blocking and generation of CGI proxies in IBATIS DAOs - Use useTransactionAwareDataSource="false" to prevent Spring from agressively unwrapping DBCP connections and bypassing the prepared statement cache 24432: ALF-6142: Remove dependency between RepositoryAuthenticationDAO and Lucene - Reworked RepositoryAuthenticationDAO to use a node service lookup by child association QName - This required adding a patch to 'upgrade' the qnames of existing authentication nodes, which previously all had the same QName 24433: ALF-6143: Remove net.sf.ehcache.use.classic.lru setting from EhCacheManagerFactoryBean and InternalEhCacheManagerFactoryBean to prevent serialization of accesses to shared caches by multiple executing threads 24434: ALF-6144: DirtySessionMethodInterceptor was causing contention between multiple threads calling the same DAO. - Unfortunately method.getAnnotation() is a synchronized call, and thus causes concurrent calls to the same method to contended with each other. - Added a non-blocking cache so that DAOs can be accessed in multiple threads without contending. 24435: ALF-6145: Use RW Locks in Subsystem Framework - The operations relied on by the dynamic proxies wrapping subsystems were synchronized and thus caused contention when multiple threads were calling in to the same subsystem - Replaced synchronized blocks with use of read write locks, thus allowing multiple concurrent readers 24436: ALF-6146: Regulate PermissionModel accesses with RW locks, rather than synchronized blocks and an excessive number of concurrent hashmaps. 24438: ALF-6136: Fix build classpath 24439: ALF-6142: Fixed seeding of admin user password 24444: ALF-6142: Fix unit test fallout - InviteServiceTest needs a transaction - RepositoryAuthenticationDao must listen for Person username changes and update authentication node qname accordingly - Correction to MT handling in RepositoryAuthenticationDao - Repository Authentication Component must 'normalize' the username before passing it through the DAO 24445: ALF-6145: Correction to lock handling when propagating destroy() events 24446: ALF-6142: Add new dependencies to unit test 24448: ALF-6142: Further fix ups 24461: ALF-6142: Fix unit test 24664: ALF-6408: Prevent possible deadlock during reindexing - waitForHeadOfQueue() now only called in beforeCommit() phase rather than afterCommit() to prevent deadlocking with Lucene throttler - indexes are also flushed beforehand in beforeCommit() so that indexing work can still be parallelized - also prevent potential deadlock caused by clearing of IndexInfo.thisThreadPreparing in a nested transaction 24810: ALF-6653: Use read write lock in Hibernate ReadWriteCache to avoid needless contention on L2 cache reads 24817: ALF-4725: Avoid excessive lock contention in dbcp by upgrading to 1.4 - also upgraded commons pool 24818: ALF-6658: Remove synchronization from LockService - transaction local collections used anyway 24844: ALF-6681: Don't let the PostLookup job stack up in multiple threads - Now only executes in one thread at a time and skips scheduled slots where it is already running 24864: Fix for ALF-5904: Explorer - Space model rights not duplicated when creating a space based on a template - copy service no longer uses hasPermission - added tests for permission copy scenarios with assorted rights - this fix assumed there is nothing special about templates - ie that they should always carry permissions and is the "default" copy behaviour to copy permissions if possible 24865: ALF-6145: Fix failing unit test 24878: ALF-6146: Correction to write lock around requiredPermissionsCache 24881: Increment version revision git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@26792 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/audit-services-context.xml | 14 +- .../alfresco/bootstrap/alfrescoUserStore.xml | 2 +- .../bootstrap/scheduledActionsFolder.xml | 32 +- config/alfresco/cache-context.xml | 40 +- config/alfresco/core-services-context.xml | 9 +- config/alfresco/dao/dao-context.xml | 2 + .../upgrade-from-2.1.sql | 30 +- .../upgrade-from-2.2SP1.sql | 25 +- .../ibatis/activities-SqlMapConfig.xml | 7 +- .../alfresco/ibatis/alfresco-SqlMapConfig.xml | 8 +- config/alfresco/ibatis/ibatis-context.xml | 2 + .../patch-common-SqlMap.xml | 2 + config/alfresco/import-export-context.xml | 2 + .../messages/action-config_de_DE.properties | 226 - .../messages/action-config_es_ES.properties | 226 - .../messages/action-config_fr_FR.properties | 226 - .../messages/action-config_it_IT.properties | 226 - .../messages/action-config_ja.properties | 226 - .../messages/action-service_de_DE.properties | 10 - .../messages/action-service_es_ES.properties | 9 - .../messages/action-service_fr_FR.properties | 9 - .../messages/action-service_it_IT.properties | 9 - .../messages/action-service_ja.properties | 9 - .../application-model_de_DE.properties | 43 - .../application-model_es_ES.properties | 42 - .../application-model_fr_FR.properties | 42 - .../application-model_it_IT.properties | 42 - .../messages/application-model_ja.properties | 42 - .../messages/avm-messages_de_DE.properties | 8 - .../messages/avm-messages_es_ES.properties | 8 - .../messages/avm-messages_fr_FR.properties | 8 - .../messages/avm-messages_it_IT.properties | 8 - .../messages/avm-messages_ja.properties | 8 - ...content-template-examples_de_DE.properties | 14 - ...content-template-examples_es_ES.properties | 14 - ...content-template-examples_fr_FR.properties | 14 - ...content-template-examples_it_IT.properties | 14 - ...ap-content-template-examples_ja.properties | 14 - ...strap-example-javascripts_de_DE.properties | 15 - ...strap-example-javascripts_es_ES.properties | 14 - ...strap-example-javascripts_fr_FR.properties | 14 - ...strap-example-javascripts_it_IT.properties | 14 - ...ootstrap-example-javascripts_ja.properties | 14 - .../bootstrap-imapScripts_de_DE.properties | 13 - .../bootstrap-imapScripts_es_ES.properties | 11 - .../bootstrap-imapScripts_fr_FR.properties | 12 - .../bootstrap-imapScripts_it_IT.properties | 11 - .../bootstrap-imapScripts_ja.properties | 12 - .../bootstrap-javascripts_de_DE.properties | 17 - .../bootstrap-javascripts_es_ES.properties | 17 - .../bootstrap-javascripts_fr_FR.properties | 17 - .../bootstrap-javascripts_it_IT.properties | 17 - .../bootstrap-javascripts_ja.properties | 17 - ...bootstrap-readme-template_de_DE.properties | 3 - ...bootstrap-readme-template_es_ES.properties | 2 - ...bootstrap-readme-template_fr_FR.properties | 2 - ...bootstrap-readme-template_it_IT.properties | 2 - .../bootstrap-readme-template_ja.properties | 2 - .../messages/bootstrap-spaces.properties | 3 + .../bootstrap-spaces_de_DE.properties | 100 - .../bootstrap-spaces_es_ES.properties | 100 - .../bootstrap-spaces_fr_FR.properties | 100 - .../bootstrap-spaces_it_IT.properties | 100 - .../messages/bootstrap-spaces_ja.properties | 101 - .../bootstrap-templates_de_DE.properties | 14 - .../bootstrap-templates_es_ES.properties | 14 - .../bootstrap-templates_fr_FR.properties | 14 - .../bootstrap-templates_it_IT.properties | 14 - .../bootstrap-templates_ja.properties | 14 - .../bootstrap-tutorial_de_DE.properties | 10 - .../bootstrap-tutorial_es_ES.properties | 9 - .../bootstrap-tutorial_fr_FR.properties | 8 - .../bootstrap-tutorial_it_IT.properties | 8 - .../messages/bootstrap-tutorial_ja.properties | 9 - ...trap-webScriptsExtensions_de_DE.properties | 6 - ...trap-webScriptsExtensions_es_ES.properties | 4 - ...trap-webScriptsExtensions_fr_FR.properties | 4 - ...trap-webScriptsExtensions_it_IT.properties | 6 - ...otstrap-webScriptsExtensions_ja.properties | 5 - .../bootstrap-webScripts_de_DE.properties | 5 - .../bootstrap-webScripts_es_ES.properties | 4 - .../bootstrap-webScripts_fr_FR.properties | 4 - .../bootstrap-webScripts_it_IT.properties | 3 - .../bootstrap-webScripts_ja.properties | 4 - .../messages/bpm-messages_de_DE.properties | 73 - .../messages/bpm-messages_es_ES.properties | 72 - .../messages/bpm-messages_fr_FR.properties | 72 - .../messages/bpm-messages_it_IT.properties | 72 - .../messages/bpm-messages_ja.properties | 72 - .../messages/coci-service_de_DE.properties | 12 - .../messages/coci-service_es_ES.properties | 11 - .../messages/coci-service_fr_FR.properties | 11 - .../messages/coci-service_it_IT.properties | 11 - .../messages/coci-service_ja.properties | 11 - .../content-filter-languages_de_DE.properties | 194 - .../content-filter-languages_es_ES.properties | 194 - .../content-filter-languages_fr_FR.properties | 194 - .../content-filter-languages_it_IT.properties | 194 - .../content-filter-languages_ja.properties | 194 - .../messages/content-model_de_DE.properties | 278 - .../messages/content-model_es_ES.properties | 276 - .../messages/content-model_fr_FR.properties | 276 - .../messages/content-model_it_IT.properties | 276 - .../messages/content-model_ja.properties | 276 - .../messages/content-service_de_DE.properties | 26 - .../messages/content-service_es_ES.properties | 26 - .../messages/content-service_fr_FR.properties | 26 - .../messages/content-service_it_IT.properties | 26 - .../messages/content-service_ja.properties | 26 - .../messages/copy-service_de_DE.properties | 3 - .../messages/copy-service_es_ES.properties | 3 - .../messages/copy-service_fr_FR.properties | 3 - .../messages/copy-service_it_IT.properties | 3 - .../messages/copy-service_ja.properties | 3 - .../messages/data-list-model_de_DE.properties | 103 - .../messages/data-list-model_es_ES.properties | 103 - .../messages/data-list-model_fr_FR.properties | 103 - .../messages/data-list-model_it_IT.properties | 103 - .../messages/data-list-model_ja.properties | 103 - .../discussion-messages_de_DE.properties | 3 - .../discussion-messages_es_ES.properties | 3 - .../discussion-messages_fr_FR.properties | 3 - .../discussion-messages_it_IT.properties | 3 - .../discussion-messages_ja.properties | 3 - .../email-server-model_de_DE.properties | 6 - .../email-server-model_es_ES.properties | 5 - .../email-server-model_fr_FR.properties | 4 - .../email-server-model_it_IT.properties | 4 - .../messages/email-server-model_ja.properties | 4 - .../messages/email-service_de_DE.properties | 25 - .../messages/email-service_es_ES.properties | 25 - .../messages/email-service_fr_FR.properties | 24 - .../messages/email-service_it_IT.properties | 24 - .../messages/email-service_ja.properties | 24 - .../messages/form-service_de_DE.properties | 22 - .../messages/form-service_es_ES.properties | 21 - .../messages/form-service_fr_FR.properties | 21 - .../messages/form-service_it_IT.properties | 21 - .../messages/form-service_ja.properties | 21 - .../messages/forum-model_de_DE.properties | 22 - .../messages/forum-model_es_ES.properties | 21 - .../messages/forum-model_fr_FR.properties | 21 - .../messages/forum-model_it_IT.properties | 21 - .../messages/forum-model_ja.properties | 21 - .../messages/imap-service_de_DE.properties | 15 - .../messages/imap-service_es_ES.properties | 13 - .../messages/imap-service_fr_FR.properties | 13 - .../messages/imap-service_it_IT.properties | 13 - .../messages/imap-service_ja.properties | 14 - .../invitation-service_de_DE.properties | 24 - .../invitation-service_es_ES.properties | 24 - .../invitation-service_fr_FR.properties | 24 - .../invitation-service_it_IT.properties | 24 - .../messages/invitation-service_ja.properties | 24 - .../jbpm-engine-messages_de_DE.properties | 45 - .../jbpm-engine-messages_es_ES.properties | 45 - .../jbpm-engine-messages_fr_FR.properties | 45 - .../jbpm-engine-messages_it_IT.properties | 45 - .../jbpm-engine-messages_ja.properties | 45 - .../messages/lock-service_de_DE.properties | 6 - .../messages/lock-service_es_ES.properties | 6 - .../messages/lock-service_fr_FR.properties | 6 - .../messages/lock-service_it_IT.properties | 6 - .../messages/lock-service_ja.properties | 6 - .../messages/module-messages_de_DE.properties | 20 - .../messages/module-messages_es_ES.properties | 20 - .../messages/module-messages_fr_FR.properties | 20 - .../messages/module-messages_it_IT.properties | 20 - .../messages/module-messages_ja.properties | 20 - .../messages/patch-service.properties | 6 + .../messages/patch-service_de_DE.properties | 379 - .../messages/patch-service_es_ES.properties | 379 - .../messages/patch-service_fr_FR.properties | 379 - .../messages/patch-service_it_IT.properties | 379 - .../messages/patch-service_ja.properties | 379 - .../messages/period-provider_de_DE.properties | 17 - .../messages/period-provider_es_ES.properties | 17 - .../messages/period-provider_fr_FR.properties | 17 - .../messages/period-provider_it_IT.properties | 17 - .../messages/period-provider_ja.properties | 17 - .../permissions-service_de_DE.properties | 2 - .../permissions-service_es_ES.properties | 2 - .../permissions-service_fr_FR.properties | 2 - .../permissions-service_it_IT.properties | 2 - .../permissions-service_ja.properties | 2 - .../rendition-config_de_DE.properties | 46 - .../rendition-config_es_ES.properties | 45 - .../rendition-config_fr_FR.properties | 45 - .../rendition-config_it_IT.properties | 45 - .../messages/rendition-config_ja.properties | 45 - ...epoadmin-interpreter-help_de_DE.properties | 1 - ...epoadmin-interpreter-help_es_ES.properties | 1 - ...epoadmin-interpreter-help_fr_FR.properties | 1 - ...epoadmin-interpreter-help_it_IT.properties | 1 - .../repoadmin-interpreter-help_ja.properties | 1 - .../messages/rule-config_de_DE.properties | 7 - .../messages/rule-config_es_ES.properties | 6 - .../messages/rule-config_fr_FR.properties | 6 - .../messages/rule-config_it_IT.properties | 6 - .../messages/rule-config_ja.properties | 6 - .../messages/schema-update_de_DE.properties | 29 - .../messages/schema-update_es_ES.properties | 29 - .../messages/schema-update_fr_FR.properties | 29 - .../messages/schema-update_it_IT.properties | 29 - .../messages/schema-update_ja.properties | 29 - .../messages/site-service_de_DE.properties | 12 - .../messages/site-service_es_ES.properties | 12 - .../messages/site-service_fr_FR.properties | 12 - .../messages/site-service_it_IT.properties | 12 - .../messages/site-service_ja.properties | 12 - .../messages/system-messages_de_DE.properties | 31 - .../messages/system-messages_es_ES.properties | 31 - .../messages/system-messages_fr_FR.properties | 31 - .../messages/system-messages_it_IT.properties | 31 - .../messages/system-messages_ja.properties | 31 - .../messages/system-model_de_DE.properties | 46 - .../messages/system-model_es_ES.properties | 45 - .../messages/system-model_fr_FR.properties | 45 - .../messages/system-model_it_IT.properties | 45 - .../messages/system-model_ja.properties | 45 - .../template-service_de_DE.properties | 6 - .../template-service_es_ES.properties | 5 - .../template-service_fr_FR.properties | 5 - .../template-service_it_IT.properties | 5 - .../messages/template-service_ja.properties | 5 - .../templates-messages_de_DE.properties | 90 - .../templates-messages_es_ES.properties | 81 - .../templates-messages_fr_FR.properties | 81 - .../templates-messages_it_IT.properties | 81 - .../messages/templates-messages_ja.properties | 81 - .../tenant-interpreter-help_de_DE.properties | 1 - .../tenant-interpreter-help_es_ES.properties | 1 - .../tenant-interpreter-help_fr_FR.properties | 1 - .../tenant-interpreter-help_it_IT.properties | 1 - .../tenant-interpreter-help_ja.properties | 1 - .../transfer-service_de_DE.properties | 47 - .../transfer-service_es_ES.properties | 46 - .../transfer-service_fr_FR.properties | 46 - .../transfer-service_it_IT.properties | 46 - .../messages/transfer-service_ja.properties | 46 - .../messages/version-service_de_DE.properties | 20 - .../messages/version-service_es_ES.properties | 20 - .../messages/version-service_fr_FR.properties | 20 - .../messages/version-service_it_IT.properties | 20 - .../messages/version-service_ja.properties | 20 - .../messages/wcm-services_de_DE.properties | 18 - .../messages/wcm-services_es_ES.properties | 17 - .../messages/wcm-services_fr_FR.properties | 17 - .../messages/wcm-services_it_IT.properties | 17 - .../messages/wcm-services_ja.properties | 17 - .../messages/webdav-messages_de_DE.properties | 14 - .../messages/webdav-messages_es_ES.properties | 13 - .../messages/webdav-messages_fr_FR.properties | 13 - .../messages/webdav-messages_it_IT.properties | 13 - .../messages/webdav-messages_ja.properties | 13 - ...workflow-interpreter-help_de_DE.properties | 1 - ...workflow-interpreter-help_es_ES.properties | 1 - ...workflow-interpreter-help_fr_FR.properties | 1 - ...workflow-interpreter-help_it_IT.properties | 1 - .../workflow-interpreter-help_ja.properties | 1 - config/alfresco/model/contentModel.xml | 7 + config/alfresco/node-services-context.xml | 1 + .../alfresco/patch/patch-services-context.xml | 71 +- config/alfresco/public-services-context.xml | 3 + config/alfresco/repository.properties | 13 +- .../alfresco-authentication-context.xml | 12 +- config/alfresco/tagging-services-context.xml | 6 + config/alfresco/version.properties | 4 +- config/alfresco/workflow-context.xml | 1 + ...derated-workflow-messages_de_DE.properties | 34 - ...derated-workflow-messages_es_ES.properties | 34 - ...derated-workflow-messages_fr_FR.properties | 34 - ...derated-workflow-messages_it_IT.properties | 34 - ...-moderated-workflow-messages_ja.properties | 34 - ...minated-workflow-messages_de_DE.properties | 56 - ...minated-workflow-messages_es_ES.properties | 56 - ...minated-workflow-messages_fr_FR.properties | 56 - ...minated-workflow-messages_it_IT.properties | 56 - ...-nominated-workflow-messages_ja.properties | 56 - .../wcm-workflow-messages_de_DE.properties | 90 - .../wcm-workflow-messages_es_ES.properties | 90 - .../wcm-workflow-messages_fr_FR.properties | 90 - .../wcm-workflow-messages_it_IT.properties | 90 - .../wcm-workflow-messages_ja.properties | 90 - .../workflow-messages_de_DE.properties | 122 - .../workflow-messages_es_ES.properties | 122 - .../workflow-messages_fr_FR.properties | 122 - .../workflow-messages_it_IT.properties | 122 - .../workflow/workflow-messages_ja.properties | 122 - .../cmis/search/CMISFTSQueryParser.java | 2 + .../filesys/repo/ContentDiskDriver.java | 18 +- .../activities/post/lookup/PostLookup.java | 13 + .../admin/patch/impl/FixUserQNamesPatch.java | 181 + .../MultiTFixAdminExistingTenantsPatch.java | 137 + .../repo/audit/AuditComponentTest.java | 20 +- .../repo/audit/AuditMethodInterceptor.java | 77 +- .../audit/model/AuditModelRegistryImpl.java | 65 +- .../alfresco/repo/batch/BatchProcessor.java | 54 +- .../repo/cache/EhCacheManagerFactoryBean.java | 2 +- .../InternalEhCacheManagerFactoryBean.java | 2 +- .../alfresco/repo/copy/CopyServiceImpl.java | 84 +- .../repo/copy/CopyServiceImplTest.java | 150 +- .../repo/deploy/DeploymentServiceImpl.java | 4 + .../repo/domain/node/ibatis/NodeDAOImpl.java | 7 +- .../repo/domain/permissions/AclDAOImpl.java | 111 +- .../alfresco/repo/lock/LockServiceImpl.java | 14 +- .../AbstractChainedSubsystemTest.java | 13 +- .../AbstractPropertyBackedBean.java | 265 +- .../ChildApplicationContextFactory.java | 78 +- .../subsystems/CompositeDataBean.java | 12 +- ...DefaultChildApplicationContextManager.java | 98 +- .../SwitchableApplicationContextFactory.java | 18 +- .../node/index/AbstractReindexComponent.java | 31 +- .../org/alfresco/repo/search/Indexer.java | 3 +- .../repo/search/IndexerComponent.java | 4 + .../repo/search/impl/NoActionIndexer.java | 4 + .../impl/lucene/ADMLuceneCategoryTest.java | 5 +- .../search/impl/lucene/ADMLuceneTest.java | 2 + ...stractLuceneIndexerAndSearcherFactory.java | 14 +- .../lucene/AbstractLuceneIndexerImpl.java | 64 +- .../repo/search/impl/lucene/LuceneConfig.java | 8 - .../search/impl/lucene/LuceneIndexer.java | 1 - .../search/impl/lucene/index/IndexInfo.java | 192 +- .../repo/search/impl/parsers/CMISLexer.java | 408 +- .../repo/search/impl/parsers/CMISParser.java | 676 +- .../search/impl/parsers/CMIS_FTSLexer.java | 62 +- .../search/impl/parsers/CMIS_FTSParser.java | 76 +- .../AbstractAuthenticationComponent.java | 2 +- .../AuthenticationComponent.java | 2 +- .../AuthenticationComponentImpl.java | 35 +- .../authentication/AuthenticationTest.java | 20 +- .../RepositoryAuthenticationDao.java | 201 +- .../authority/script/ScriptGroup.java | 2 +- .../impl/PublicServiceAccessServiceImpl.java | 125 +- .../impl/model/PermissionModel.java | 2296 ++--- .../TagScopePropertyMethodInterceptor.java | 196 + .../repo/tagging/TaggingServiceImplTest.java | 197 +- .../repo/tenant/MultiTAdminServiceImpl.java | 8 +- .../alfresco/repo/tenant/MultiTDemoTest.java | 220 + .../tenant/MultiTNodeServiceInterceptor.java | 8 +- .../RepoSecondaryManifestProcessorImpl.java | 206 +- .../transfer/TransferServiceImplTest.java | 7466 ++++------------- .../TransferServiceToBeRefactoredTest.java | 4990 +++++++++++ .../UnitTestTransferManifestNodeFactory.java | 30 + .../repo/workflow/WorkflowInterpreter.java | 86 + .../wcm/asset/AssetServiceImplTest.java | 2 +- .../apache/lucene/index/TermInfosReader.java | 351 + .../org/apache/lucene/store/FSDirectory.java | 97 +- 348 files changed, 11511 insertions(+), 20314 deletions(-) delete mode 100755 config/alfresco/messages/action-config_de_DE.properties delete mode 100755 config/alfresco/messages/action-config_es_ES.properties delete mode 100755 config/alfresco/messages/action-config_fr_FR.properties delete mode 100755 config/alfresco/messages/action-config_it_IT.properties delete mode 100755 config/alfresco/messages/action-config_ja.properties delete mode 100755 config/alfresco/messages/action-service_de_DE.properties delete mode 100755 config/alfresco/messages/action-service_es_ES.properties delete mode 100755 config/alfresco/messages/action-service_fr_FR.properties delete mode 100755 config/alfresco/messages/action-service_it_IT.properties delete mode 100755 config/alfresco/messages/action-service_ja.properties delete mode 100755 config/alfresco/messages/application-model_de_DE.properties delete mode 100755 config/alfresco/messages/application-model_es_ES.properties delete mode 100755 config/alfresco/messages/application-model_fr_FR.properties delete mode 100755 config/alfresco/messages/application-model_it_IT.properties delete mode 100755 config/alfresco/messages/application-model_ja.properties delete mode 100755 config/alfresco/messages/avm-messages_de_DE.properties delete mode 100755 config/alfresco/messages/avm-messages_es_ES.properties delete mode 100755 config/alfresco/messages/avm-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/avm-messages_it_IT.properties delete mode 100755 config/alfresco/messages/avm-messages_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-content-template-examples_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-content-template-examples_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-content-template-examples_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-content-template-examples_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-content-template-examples_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-example-javascripts_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-example-javascripts_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-example-javascripts_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-example-javascripts_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-example-javascripts_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-imapScripts_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-imapScripts_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-imapScripts_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-imapScripts_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-imapScripts_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-javascripts_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-javascripts_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-javascripts_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-javascripts_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-javascripts_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-readme-template_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-readme-template_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-readme-template_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-readme-template_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-readme-template_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-spaces_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-spaces_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-spaces_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-spaces_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-spaces_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-templates_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-templates_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-templates_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-templates_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-templates_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-tutorial_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-tutorial_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-tutorial_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-tutorial_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-tutorial_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-webScriptsExtensions_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-webScriptsExtensions_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-webScriptsExtensions_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-webScriptsExtensions_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-webScriptsExtensions_ja.properties delete mode 100755 config/alfresco/messages/bootstrap-webScripts_de_DE.properties delete mode 100755 config/alfresco/messages/bootstrap-webScripts_es_ES.properties delete mode 100755 config/alfresco/messages/bootstrap-webScripts_fr_FR.properties delete mode 100755 config/alfresco/messages/bootstrap-webScripts_it_IT.properties delete mode 100755 config/alfresco/messages/bootstrap-webScripts_ja.properties delete mode 100755 config/alfresco/messages/bpm-messages_de_DE.properties delete mode 100755 config/alfresco/messages/bpm-messages_es_ES.properties delete mode 100755 config/alfresco/messages/bpm-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/bpm-messages_it_IT.properties delete mode 100755 config/alfresco/messages/bpm-messages_ja.properties delete mode 100755 config/alfresco/messages/coci-service_de_DE.properties delete mode 100755 config/alfresco/messages/coci-service_es_ES.properties delete mode 100755 config/alfresco/messages/coci-service_fr_FR.properties delete mode 100755 config/alfresco/messages/coci-service_it_IT.properties delete mode 100755 config/alfresco/messages/coci-service_ja.properties delete mode 100755 config/alfresco/messages/content-filter-languages_de_DE.properties delete mode 100755 config/alfresco/messages/content-filter-languages_es_ES.properties delete mode 100755 config/alfresco/messages/content-filter-languages_fr_FR.properties delete mode 100755 config/alfresco/messages/content-filter-languages_it_IT.properties delete mode 100755 config/alfresco/messages/content-filter-languages_ja.properties delete mode 100755 config/alfresco/messages/content-model_de_DE.properties delete mode 100755 config/alfresco/messages/content-model_es_ES.properties delete mode 100755 config/alfresco/messages/content-model_fr_FR.properties delete mode 100755 config/alfresco/messages/content-model_it_IT.properties delete mode 100755 config/alfresco/messages/content-model_ja.properties delete mode 100755 config/alfresco/messages/content-service_de_DE.properties delete mode 100755 config/alfresco/messages/content-service_es_ES.properties delete mode 100755 config/alfresco/messages/content-service_fr_FR.properties delete mode 100755 config/alfresco/messages/content-service_it_IT.properties delete mode 100755 config/alfresco/messages/content-service_ja.properties delete mode 100755 config/alfresco/messages/copy-service_de_DE.properties delete mode 100755 config/alfresco/messages/copy-service_es_ES.properties delete mode 100755 config/alfresco/messages/copy-service_fr_FR.properties delete mode 100755 config/alfresco/messages/copy-service_it_IT.properties delete mode 100755 config/alfresco/messages/copy-service_ja.properties delete mode 100755 config/alfresco/messages/data-list-model_de_DE.properties delete mode 100755 config/alfresco/messages/data-list-model_es_ES.properties delete mode 100755 config/alfresco/messages/data-list-model_fr_FR.properties delete mode 100755 config/alfresco/messages/data-list-model_it_IT.properties delete mode 100755 config/alfresco/messages/data-list-model_ja.properties delete mode 100755 config/alfresco/messages/discussion-messages_de_DE.properties delete mode 100755 config/alfresco/messages/discussion-messages_es_ES.properties delete mode 100755 config/alfresco/messages/discussion-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/discussion-messages_it_IT.properties delete mode 100755 config/alfresco/messages/discussion-messages_ja.properties delete mode 100755 config/alfresco/messages/email-server-model_de_DE.properties delete mode 100755 config/alfresco/messages/email-server-model_es_ES.properties delete mode 100755 config/alfresco/messages/email-server-model_fr_FR.properties delete mode 100755 config/alfresco/messages/email-server-model_it_IT.properties delete mode 100755 config/alfresco/messages/email-server-model_ja.properties delete mode 100755 config/alfresco/messages/email-service_de_DE.properties delete mode 100755 config/alfresco/messages/email-service_es_ES.properties delete mode 100755 config/alfresco/messages/email-service_fr_FR.properties delete mode 100755 config/alfresco/messages/email-service_it_IT.properties delete mode 100755 config/alfresco/messages/email-service_ja.properties delete mode 100755 config/alfresco/messages/form-service_de_DE.properties delete mode 100755 config/alfresco/messages/form-service_es_ES.properties delete mode 100755 config/alfresco/messages/form-service_fr_FR.properties delete mode 100755 config/alfresco/messages/form-service_it_IT.properties delete mode 100755 config/alfresco/messages/form-service_ja.properties delete mode 100755 config/alfresco/messages/forum-model_de_DE.properties delete mode 100755 config/alfresco/messages/forum-model_es_ES.properties delete mode 100755 config/alfresco/messages/forum-model_fr_FR.properties delete mode 100755 config/alfresco/messages/forum-model_it_IT.properties delete mode 100755 config/alfresco/messages/forum-model_ja.properties delete mode 100755 config/alfresco/messages/imap-service_de_DE.properties delete mode 100755 config/alfresco/messages/imap-service_es_ES.properties delete mode 100755 config/alfresco/messages/imap-service_fr_FR.properties delete mode 100755 config/alfresco/messages/imap-service_it_IT.properties delete mode 100755 config/alfresco/messages/imap-service_ja.properties delete mode 100755 config/alfresco/messages/invitation-service_de_DE.properties delete mode 100755 config/alfresco/messages/invitation-service_es_ES.properties delete mode 100755 config/alfresco/messages/invitation-service_fr_FR.properties delete mode 100755 config/alfresco/messages/invitation-service_it_IT.properties delete mode 100755 config/alfresco/messages/invitation-service_ja.properties delete mode 100755 config/alfresco/messages/jbpm-engine-messages_de_DE.properties delete mode 100755 config/alfresco/messages/jbpm-engine-messages_es_ES.properties delete mode 100755 config/alfresco/messages/jbpm-engine-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/jbpm-engine-messages_it_IT.properties delete mode 100755 config/alfresco/messages/jbpm-engine-messages_ja.properties delete mode 100755 config/alfresco/messages/lock-service_de_DE.properties delete mode 100755 config/alfresco/messages/lock-service_es_ES.properties delete mode 100755 config/alfresco/messages/lock-service_fr_FR.properties delete mode 100755 config/alfresco/messages/lock-service_it_IT.properties delete mode 100755 config/alfresco/messages/lock-service_ja.properties delete mode 100755 config/alfresco/messages/module-messages_de_DE.properties delete mode 100755 config/alfresco/messages/module-messages_es_ES.properties delete mode 100755 config/alfresco/messages/module-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/module-messages_it_IT.properties delete mode 100755 config/alfresco/messages/module-messages_ja.properties delete mode 100755 config/alfresco/messages/patch-service_de_DE.properties delete mode 100755 config/alfresco/messages/patch-service_es_ES.properties delete mode 100755 config/alfresco/messages/patch-service_fr_FR.properties delete mode 100755 config/alfresco/messages/patch-service_it_IT.properties delete mode 100755 config/alfresco/messages/patch-service_ja.properties delete mode 100755 config/alfresco/messages/period-provider_de_DE.properties delete mode 100755 config/alfresco/messages/period-provider_es_ES.properties delete mode 100755 config/alfresco/messages/period-provider_fr_FR.properties delete mode 100755 config/alfresco/messages/period-provider_it_IT.properties delete mode 100755 config/alfresco/messages/period-provider_ja.properties delete mode 100755 config/alfresco/messages/permissions-service_de_DE.properties delete mode 100755 config/alfresco/messages/permissions-service_es_ES.properties delete mode 100755 config/alfresco/messages/permissions-service_fr_FR.properties delete mode 100755 config/alfresco/messages/permissions-service_it_IT.properties delete mode 100755 config/alfresco/messages/permissions-service_ja.properties delete mode 100755 config/alfresco/messages/rendition-config_de_DE.properties delete mode 100755 config/alfresco/messages/rendition-config_es_ES.properties delete mode 100755 config/alfresco/messages/rendition-config_fr_FR.properties delete mode 100755 config/alfresco/messages/rendition-config_it_IT.properties delete mode 100755 config/alfresco/messages/rendition-config_ja.properties delete mode 100755 config/alfresco/messages/repoadmin-interpreter-help_de_DE.properties delete mode 100755 config/alfresco/messages/repoadmin-interpreter-help_es_ES.properties delete mode 100755 config/alfresco/messages/repoadmin-interpreter-help_fr_FR.properties delete mode 100755 config/alfresco/messages/repoadmin-interpreter-help_it_IT.properties delete mode 100755 config/alfresco/messages/repoadmin-interpreter-help_ja.properties delete mode 100755 config/alfresco/messages/rule-config_de_DE.properties delete mode 100755 config/alfresco/messages/rule-config_es_ES.properties delete mode 100755 config/alfresco/messages/rule-config_fr_FR.properties delete mode 100755 config/alfresco/messages/rule-config_it_IT.properties delete mode 100755 config/alfresco/messages/rule-config_ja.properties delete mode 100755 config/alfresco/messages/schema-update_de_DE.properties delete mode 100755 config/alfresco/messages/schema-update_es_ES.properties delete mode 100755 config/alfresco/messages/schema-update_fr_FR.properties delete mode 100755 config/alfresco/messages/schema-update_it_IT.properties delete mode 100755 config/alfresco/messages/schema-update_ja.properties delete mode 100755 config/alfresco/messages/site-service_de_DE.properties delete mode 100755 config/alfresco/messages/site-service_es_ES.properties delete mode 100755 config/alfresco/messages/site-service_fr_FR.properties delete mode 100755 config/alfresco/messages/site-service_it_IT.properties delete mode 100755 config/alfresco/messages/site-service_ja.properties delete mode 100755 config/alfresco/messages/system-messages_de_DE.properties delete mode 100755 config/alfresco/messages/system-messages_es_ES.properties delete mode 100755 config/alfresco/messages/system-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/system-messages_it_IT.properties delete mode 100755 config/alfresco/messages/system-messages_ja.properties delete mode 100755 config/alfresco/messages/system-model_de_DE.properties delete mode 100755 config/alfresco/messages/system-model_es_ES.properties delete mode 100755 config/alfresco/messages/system-model_fr_FR.properties delete mode 100755 config/alfresco/messages/system-model_it_IT.properties delete mode 100755 config/alfresco/messages/system-model_ja.properties delete mode 100755 config/alfresco/messages/template-service_de_DE.properties delete mode 100755 config/alfresco/messages/template-service_es_ES.properties delete mode 100755 config/alfresco/messages/template-service_fr_FR.properties delete mode 100755 config/alfresco/messages/template-service_it_IT.properties delete mode 100755 config/alfresco/messages/template-service_ja.properties delete mode 100755 config/alfresco/messages/templates-messages_de_DE.properties delete mode 100755 config/alfresco/messages/templates-messages_es_ES.properties delete mode 100755 config/alfresco/messages/templates-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/templates-messages_it_IT.properties delete mode 100755 config/alfresco/messages/templates-messages_ja.properties delete mode 100755 config/alfresco/messages/tenant-interpreter-help_de_DE.properties delete mode 100755 config/alfresco/messages/tenant-interpreter-help_es_ES.properties delete mode 100755 config/alfresco/messages/tenant-interpreter-help_fr_FR.properties delete mode 100755 config/alfresco/messages/tenant-interpreter-help_it_IT.properties delete mode 100755 config/alfresco/messages/tenant-interpreter-help_ja.properties delete mode 100755 config/alfresco/messages/transfer-service_de_DE.properties delete mode 100755 config/alfresco/messages/transfer-service_es_ES.properties delete mode 100755 config/alfresco/messages/transfer-service_fr_FR.properties delete mode 100755 config/alfresco/messages/transfer-service_it_IT.properties delete mode 100755 config/alfresco/messages/transfer-service_ja.properties delete mode 100755 config/alfresco/messages/version-service_de_DE.properties delete mode 100755 config/alfresco/messages/version-service_es_ES.properties delete mode 100755 config/alfresco/messages/version-service_fr_FR.properties delete mode 100755 config/alfresco/messages/version-service_it_IT.properties delete mode 100755 config/alfresco/messages/version-service_ja.properties delete mode 100755 config/alfresco/messages/wcm-services_de_DE.properties delete mode 100755 config/alfresco/messages/wcm-services_es_ES.properties delete mode 100755 config/alfresco/messages/wcm-services_fr_FR.properties delete mode 100755 config/alfresco/messages/wcm-services_it_IT.properties delete mode 100755 config/alfresco/messages/wcm-services_ja.properties delete mode 100755 config/alfresco/messages/webdav-messages_de_DE.properties delete mode 100755 config/alfresco/messages/webdav-messages_es_ES.properties delete mode 100755 config/alfresco/messages/webdav-messages_fr_FR.properties delete mode 100755 config/alfresco/messages/webdav-messages_it_IT.properties delete mode 100755 config/alfresco/messages/webdav-messages_ja.properties delete mode 100755 config/alfresco/messages/workflow-interpreter-help_de_DE.properties delete mode 100755 config/alfresco/messages/workflow-interpreter-help_es_ES.properties delete mode 100755 config/alfresco/messages/workflow-interpreter-help_fr_FR.properties delete mode 100755 config/alfresco/messages/workflow-interpreter-help_it_IT.properties delete mode 100755 config/alfresco/messages/workflow-interpreter-help_ja.properties delete mode 100755 config/alfresco/workflow/invitation-moderated-workflow-messages_de_DE.properties delete mode 100755 config/alfresco/workflow/invitation-moderated-workflow-messages_es_ES.properties delete mode 100755 config/alfresco/workflow/invitation-moderated-workflow-messages_fr_FR.properties delete mode 100755 config/alfresco/workflow/invitation-moderated-workflow-messages_it_IT.properties delete mode 100755 config/alfresco/workflow/invitation-moderated-workflow-messages_ja.properties delete mode 100755 config/alfresco/workflow/invitation-nominated-workflow-messages_de_DE.properties delete mode 100755 config/alfresco/workflow/invitation-nominated-workflow-messages_es_ES.properties delete mode 100755 config/alfresco/workflow/invitation-nominated-workflow-messages_fr_FR.properties delete mode 100755 config/alfresco/workflow/invitation-nominated-workflow-messages_it_IT.properties delete mode 100755 config/alfresco/workflow/invitation-nominated-workflow-messages_ja.properties delete mode 100755 config/alfresco/workflow/wcm-workflow-messages_de_DE.properties delete mode 100755 config/alfresco/workflow/wcm-workflow-messages_es_ES.properties delete mode 100755 config/alfresco/workflow/wcm-workflow-messages_fr_FR.properties delete mode 100755 config/alfresco/workflow/wcm-workflow-messages_it_IT.properties delete mode 100755 config/alfresco/workflow/wcm-workflow-messages_ja.properties delete mode 100755 config/alfresco/workflow/workflow-messages_de_DE.properties delete mode 100755 config/alfresco/workflow/workflow-messages_es_ES.properties delete mode 100755 config/alfresco/workflow/workflow-messages_fr_FR.properties delete mode 100755 config/alfresco/workflow/workflow-messages_it_IT.properties delete mode 100755 config/alfresco/workflow/workflow-messages_ja.properties create mode 100644 source/java/org/alfresco/repo/admin/patch/impl/FixUserQNamesPatch.java create mode 100644 source/java/org/alfresco/repo/admin/patch/impl/MultiTFixAdminExistingTenantsPatch.java create mode 100644 source/java/org/alfresco/repo/tagging/TagScopePropertyMethodInterceptor.java create mode 100644 source/java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java create mode 100644 source/java/org/apache/lucene/index/TermInfosReader.java diff --git a/config/alfresco/audit-services-context.xml b/config/alfresco/audit-services-context.xml index 4a808fb0cc..53b3dd62fa 100644 --- a/config/alfresco/audit-services-context.xml +++ b/config/alfresco/audit-services-context.xml @@ -2,7 +2,19 @@ - + + + + defaultThreadPool + + + 1 + + + 1 + + + diff --git a/config/alfresco/bootstrap/alfrescoUserStore.xml b/config/alfresco/bootstrap/alfrescoUserStore.xml index 51ad310374..a1e187c835 100644 --- a/config/alfresco/bootstrap/alfrescoUserStore.xml +++ b/config/alfresco/bootstrap/alfrescoUserStore.xml @@ -8,7 +8,7 @@ - + ${alfresco_user_store.adminusername} ${alfresco_user_store.adminpassword} true diff --git a/config/alfresco/bootstrap/scheduledActionsFolder.xml b/config/alfresco/bootstrap/scheduledActionsFolder.xml index 763e709eb9..38c9ecfdca 100644 --- a/config/alfresco/bootstrap/scheduledActionsFolder.xml +++ b/config/alfresco/bootstrap/scheduledActionsFolder.xml @@ -1,19 +1,15 @@ - - - - - - - - space-icon-default - Scheduled Actions - - Scheduled Actions - - - Schedule of when persistent actions are executed - - - - \ No newline at end of file + + + + + workspace + SpacesStore + ${spaces.actions.scheduled_actions.name} + ${spaces.actions.scheduled_actions.name} + ${spaces.actions.scheduled_actions.description} + + + diff --git a/config/alfresco/cache-context.xml b/config/alfresco/cache-context.xml index 2a9b1783c5..9a74368599 100644 --- a/config/alfresco/cache-context.xml +++ b/config/alfresco/cache-context.xml @@ -46,7 +46,7 @@ - + @@ -112,7 +112,7 @@ - + @@ -145,7 +145,7 @@ - + @@ -1086,4 +1086,38 @@ + + + + + + + + + + + + + + org.alfresco.cache.tagscopeSummaryCache + + + + + + + + + + + + + org.alfresco.cache.tagscopeSummaryTransactionalCache + + + + + + + diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index c3122cb3a7..0a78775c07 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -661,9 +661,6 @@ ${lucene.indexer.mergerMergeFactor} - - ${lucene.indexer.mergerMergeBlockingFactor} - ${lucene.indexer.mergerMaxBufferedDocs} @@ -1181,6 +1178,12 @@ + + + + + + diff --git a/config/alfresco/dao/dao-context.xml b/config/alfresco/dao/dao-context.xml index a0cf32dbbb..320dbd1923 100644 --- a/config/alfresco/dao/dao-context.xml +++ b/config/alfresco/dao/dao-context.xml @@ -235,6 +235,8 @@ + + diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.1.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.1.sql index 7ef8ec187f..4813c3e30b 100644 --- a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.1.sql +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.1.sql @@ -734,7 +734,6 @@ CREATE TABLE t_alf_node_properties PRIMARY KEY (node_id, qname_id, list_index, locale_id) ) ENGINE=InnoDB; ---BEGIN TXN -- Copy values over --FOREACH alf_node_properties.node_id system.upgrade.t_alf_node_properties.batchsize INSERT INTO t_alf_node_properties @@ -903,37 +902,61 @@ CREATE TABLE t_del_attributes id BIGINT NOT NULL, PRIMARY KEY (id) ); + +--FOREACH alf_attributes.id system.upgrade.t_del_attributes.batchsize INSERT INTO t_del_attributes SELECT id FROM alf_attributes WHERE type = 'M' + AND alf_attributes.id >= ${LOWERBOUND} AND alf_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize DELETE t_del_attributes FROM t_del_attributes JOIN alf_map_attribute_entries ma ON (ma.attribute_id = t_del_attributes.id) + WHERE t_del_attributes.id >= ${LOWERBOUND} AND t_del_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize DELETE t_del_attributes FROM t_del_attributes JOIN alf_list_attribute_entries la ON (la.attribute_id = t_del_attributes.id) + WHERE t_del_attributes.id >= ${LOWERBOUND} AND t_del_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize DELETE t_del_attributes FROM t_del_attributes JOIN alf_global_attributes ga ON (ga.attribute = t_del_attributes.id) + WHERE t_del_attributes.id >= ${LOWERBOUND} AND t_del_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize INSERT INTO t_del_attributes SELECT a.id FROM t_del_attributes t JOIN alf_map_attribute_entries ma ON (ma.map_id = t.id) JOIN alf_attributes a ON (ma.attribute_id = a.id) + WHERE t.id >= ${LOWERBOUND} AND t.id <= ${UPPERBOUND} ; + +--FOREACH alf_map_attribute_entries.map_id system.upgrade.alf_map_attribute_entries.batchsize DELETE alf_map_attribute_entries FROM alf_map_attribute_entries JOIN t_del_attributes t ON (alf_map_attribute_entries.map_id = t.id) + WHERE alf_map_attribute_entries.map_id >= ${LOWERBOUND} AND alf_map_attribute_entries.map_id <= ${UPPERBOUND} ; + +--FOREACH alf_list_attribute_entries.list_id system.upgrade.alf_list_attribute_entries.batchsize DELETE alf_list_attribute_entries FROM alf_list_attribute_entries JOIN t_del_attributes t ON (alf_list_attribute_entries.list_id = t.id) + WHERE alf_list_attribute_entries.list_id >= ${LOWERBOUND} AND alf_list_attribute_entries.list_id <= ${UPPERBOUND} ; + +--FOREACH alf_attributes.id system.upgrade.alf_attributes.batchsize DELETE alf_attributes FROM alf_attributes JOIN t_del_attributes t ON (alf_attributes.id = t.id) + WHERE alf_attributes.id >= ${LOWERBOUND} AND alf_attributes.id <= ${UPPERBOUND} ; DROP TABLE t_del_attributes; @@ -1003,7 +1026,10 @@ ALTER TABLE alf_transaction ADD CONSTRAINT fk_alf_txn_svr FOREIGN KEY (server_id) REFERENCES alf_server (id), ADD INDEX idx_alf_txn_ctms (commit_time_ms) ; -UPDATE alf_transaction SET commit_time_ms = id WHERE commit_time_ms IS NULL; + +--FOREACH alf_transaction.id system.upgrade.alf_transaction.batchsize +UPDATE alf_transaction SET commit_time_ms = id WHERE commit_time_ms IS NULL +AND alf_transaction.id >= ${LOWERBOUND} AND alf_transaction.id <= ${UPPERBOUND}; ALTER TABLE avm_child_entries DROP INDEX fk_avm_ce_child, DROP FOREIGN KEY fk_avm_ce_child; -- (optional) ALTER TABLE avm_child_entries DROP INDEX fk_avm_ce_parent, DROP FOREIGN KEY fk_avm_ce_parent; -- (optional) diff --git a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.2SP1.sql b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.2SP1.sql index 7a84687b05..4b7a2b84ca 100644 --- a/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.2SP1.sql +++ b/config/alfresco/dbscripts/upgrade/2.2/org.hibernate.dialect.MySQLInnoDBDialect/upgrade-from-2.2SP1.sql @@ -449,7 +449,6 @@ CREATE TABLE t_alf_node_properties PRIMARY KEY (node_id, qname_id, list_index, locale_id) ) ENGINE=InnoDB; ---BEGIN TXN -- Copy values over --FOREACH alf_node_properties.node_id system.upgrade.t_alf_node_properties.batchsize INSERT INTO t_alf_node_properties @@ -601,37 +600,61 @@ CREATE TABLE t_del_attributes id BIGINT NOT NULL, PRIMARY KEY (id) ); + +--FOREACH alf_attributes.id system.upgrade.t_del_attributes.batchsize INSERT INTO t_del_attributes SELECT id FROM alf_attributes WHERE type = 'M' + AND alf_attributes.id >= ${LOWERBOUND} AND alf_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize DELETE t_del_attributes FROM t_del_attributes JOIN alf_map_attribute_entries ma ON (ma.attribute_id = t_del_attributes.id) + WHERE t_del_attributes.id >= ${LOWERBOUND} AND t_del_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize DELETE t_del_attributes FROM t_del_attributes JOIN alf_list_attribute_entries la ON (la.attribute_id = t_del_attributes.id) + WHERE t_del_attributes.id >= ${LOWERBOUND} AND t_del_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize DELETE t_del_attributes FROM t_del_attributes JOIN alf_global_attributes ga ON (ga.attribute = t_del_attributes.id) + WHERE t_del_attributes.id >= ${LOWERBOUND} AND t_del_attributes.id <= ${UPPERBOUND} ; + +--FOREACH t_del_attributes.id system.upgrade.t_del_attributes.batchsize INSERT INTO t_del_attributes SELECT a.id FROM t_del_attributes t JOIN alf_map_attribute_entries ma ON (ma.map_id = t.id) JOIN alf_attributes a ON (ma.attribute_id = a.id) + WHERE t.id >= ${LOWERBOUND} AND t.id <= ${UPPERBOUND} ; + +--FOREACH alf_map_attribute_entries.map_id system.upgrade.alf_map_attribute_entries.batchsize DELETE alf_map_attribute_entries FROM alf_map_attribute_entries JOIN t_del_attributes t ON (alf_map_attribute_entries.map_id = t.id) + WHERE alf_map_attribute_entries.map_id >= ${LOWERBOUND} AND alf_map_attribute_entries.map_id <= ${UPPERBOUND} ; + +--FOREACH alf_list_attribute_entries.list_id system.upgrade.alf_list_attribute_entries.batchsize DELETE alf_list_attribute_entries FROM alf_list_attribute_entries JOIN t_del_attributes t ON (alf_list_attribute_entries.list_id = t.id) + WHERE alf_list_attribute_entries.list_id >= ${LOWERBOUND} AND alf_list_attribute_entries.list_id <= ${UPPERBOUND} ; + +--FOREACH alf_attributes.id system.upgrade.alf_attributes.batchsize DELETE alf_attributes FROM alf_attributes JOIN t_del_attributes t ON (alf_attributes.id = t.id) + WHERE alf_attributes.id >= ${LOWERBOUND} AND alf_attributes.id <= ${UPPERBOUND} ; DROP TABLE t_del_attributes; diff --git a/config/alfresco/ibatis/activities-SqlMapConfig.xml b/config/alfresco/ibatis/activities-SqlMapConfig.xml index f47fcc6bf2..9ef3ed7ca7 100644 --- a/config/alfresco/ibatis/activities-SqlMapConfig.xml +++ b/config/alfresco/ibatis/activities-SqlMapConfig.xml @@ -6,7 +6,12 @@ - + diff --git a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml index 3be7e9183a..7be5713d5c 100644 --- a/config/alfresco/ibatis/alfresco-SqlMapConfig.xml +++ b/config/alfresco/ibatis/alfresco-SqlMapConfig.xml @@ -6,7 +6,13 @@ - + + diff --git a/config/alfresco/ibatis/ibatis-context.xml b/config/alfresco/ibatis/ibatis-context.xml index 457d183846..86d97dd573 100644 --- a/config/alfresco/ibatis/ibatis-context.xml +++ b/config/alfresco/ibatis/ibatis-context.xml @@ -45,6 +45,7 @@ + classpath:alfresco/ibatis/activities-SqlMapConfig.xml @@ -54,6 +55,7 @@ + classpath:alfresco/ibatis/alfresco-SqlMapConfig.xml diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml index d1ed64d022..5e0fa8e3d3 100644 --- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml +++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/patch-common-SqlMap.xml @@ -200,6 +200,8 @@ where ca.id >= #idTwo# and ca.id < #idThree# + order by + ca.id ASC ]]> diff --git a/config/alfresco/import-export-context.xml b/config/alfresco/import-export-context.xml index 482490d14c..05db9e0271 100644 --- a/config/alfresco/import-export-context.xml +++ b/config/alfresco/import-export-context.xml @@ -355,6 +355,7 @@ ${spaces.imap_templates.childname} ${spaces.emailActions.childname} ${spaces.searchAction.childname} + ${spaces.scheduled_actions.childname} ${spaces.rendition.rendering_actions.childname} ${spaces.replication.replication_actions.childname} ${spaces.wcm_deployed.childname} @@ -592,6 +593,7 @@ /${spaces.company_home.childname}/${spaces.dictionary.childname} alfresco/bootstrap/scheduledActionsFolder.xml + alfresco/messages/bootstrap-spaces diff --git a/config/alfresco/messages/action-config_de_DE.properties b/config/alfresco/messages/action-config_de_DE.properties deleted file mode 100755 index 6bba99c60d..0000000000 --- a/config/alfresco/messages/action-config_de_DE.properties +++ /dev/null @@ -1,226 +0,0 @@ -# Action parameter constraints -ac-compare-operations.equals=Gleich -ac-compare-operations.contains=Enth\u00e4lt -ac-compare-operations.begins=Beginnt mit -ac-compare-operations.ends=Endet mit -ac-compare-operations.greater_than=Gr\u00f6\u00dfer als -ac-compare-operations.greater_than_equal=Gr\u00f6\u00dfer gleich -ac-compare-operations.less_than=Kleiner als -ac-compare-operations.less_than_equal=Kleiner gleich - -ac-content-properties.mime_type=MimeType -ac-content-properties.encoding=Zeichencodierung -ac-content-properties.size=Gr\u00f6\u00dfe - -# Action conditions - -no-condition.title=Alle Elemente -no-condition.description=Diese Bedingung passt zu jedem zu dem Raum hinzugef\u00fcgten Element. Diese Funktion verwenden, wenn Sie eine Aktion auf alles anwenden wollen, wenn sie zu dem Raum hinzugef\u00fcgt wird. - -compare-property-value.title=Name enth\u00e4lt Wert -compare-property-value.description=Die Regel wird auf alle Elemente angewandt, die einen spezifischen Wert im Namen enthalten. -compare-property-value.property.display-label=Eigenschaft -compare-property-value.content-property.display-label=Eigenschaft des Inhalts -compare-property-value.value.display-label=Wert -compare-property-value.operation.display-label=Vergleichsvorgang - -in-category.title=Hat Kategorie -in-category.description=Die Regel wird auf alle Elemente angewandt, die den angegebenen Kategoriewert aufweisen. -in-category.category-aspect.display-label=Kategorieaspekt -in-category.category-value.display-label=Kategoriewert - -is-subtype.title=Inhalt des Typs oder Subtyps -is-subtype.description=Diese Regel wird auf alle Elemente angewandt, die zu einem spezifischen Typ oder dessen Subtypen geh\u00f6ren -is-subtype.type.display-label=Typ - -has-aspect.title=Hat Aspekt -has-aspect.description=Die Regel wird auf alle Elemente angewandt, auf die der angegebene Aspekt angewandt wird. -has-aspect.aspect.display-label=Aspekt - -compare-mime-type.title=MimeType Inhalt -compare-mime-type.description=Die Regel wird auf alle Elemente angewandt, die Inhalt des angegebenen MimeTypes aufweisen. -compare-mime-type.property.display-label=Eigenschaft -compare-mime-type.value.display-label=MimeType - -composite-condition.title=Zusammengesetzte Bedingung -composite-condition.description=Mehrere Bedingungen kombinieren, um eine kompliziertere Bedingung zu schaffen. - -compare-date-property.title=Eigenschaft mit Datumswert -compare-date-property.description=Eine Datumseigenschaft der Metadaten, des Aspekts oder Typs vergleichen - -compare-integer-property.title=Eigenschaft mit Zahlenwert -compare-integer-property.description=Eine Zahleneigenschaft der Metadaten, des Aspekts oder Typs vergleichen - -compare-text-property.title=Eigenschaft mit Textwert -compare-text-property.description=Eine Texteigenschaft der Metadaten, des Aspekts oder Typs vergleichen - -has-tag.title=Hat Tag -has-tag.description=Hat einen Tag, der auf einen Node angewandt wird. -has-tag.tag.display-label=Tag - -# Actions - -add-features.title=Aspekt hinzuf\u00fcgen -add-features.description=Damit wird ein Aspekt zu dem passenden Element hinzugef\u00fcgt. -add-features.aspect-name.display-label=Aspekt - -remove-features.title=Aspekt entfernen -remove-features.description=Damit wird ein Aspekt aus dem passenden Element entfernt. -remove-features.aspect-name.display-label=Aspekt - -simple-workflow.title=Einfachen Workflow hinzuf\u00fcgen. -simple-workflow.description=Hiermit wird ein einfacher Workflow zu dem passenden Element hinzugef\u00fcgt. Damit kann das Element f\u00fcr den n\u00e4chsten Schritt in einem Workflow in einen anderen Raum verschoben werden. Wenn Sie einen Schritt ablehnen wollen, k\u00f6nnen Sie auch einen Raum angeben, in den verschoben werden soll. -simple-workflow.approve-step.display-label=Schritt zustimmen -simple-workflow.approve-folder.display-label=Ordner Schrittt zustimmen -simple-workflow.approve-move.display-label=Verschieben zustimmen -simple-workflow.reject-step.display-label=Schritt ablehnen -simple-workflow.reject-folder.display-label=Ordner Schritt ablehnen -simple-workflow.reject-move.display-label=Verschieben ablehnen - -link-category.title=Mit Kategorie verlinken -link-category.description=Damit wird eine Kategorie auf das passende Element angewandt. -link-category.category-aspect.display-label=Kategorieaspekt -link-category.category-value.display-label=Kategoriewert - -transform.title=Inhalt umwandeln und kopieren -transform.description=Damit wird der passende Inhalt umgewandelt und das Ergebnis wird in einen bestimmten Raum kopiert -transform.mime-type.display-label=MimeType -transform.destination-folder.display-label=Zielordner -transform.assoc-type.display-label=Zuordnungstyp -transform.assoc-name.display-label=Zuordnungsname -transform.overwrite-copy.display-label=Kopie \u00fcberschreiben - -transform-image.title=Bild umwandeln und kopieren -transform-image.description=Damit wird das passende Bild umgewandelt und das Ergebnis in einen bestimmten Raum kopiert -transform-image.mime-type.display-label=MimeType -transform-image.destination-folder.display-label=Zielordner -transform-image.assoc-type.display-label=Zuordnungstyp -transform-image.assoc-name.display-label=Zuordnungsname -transform-image.overwrite-copy.display-label=Kopie \u00fcberschreiben -transform-image.convert-command.display-label=Umwandlungsbefehl - -copy.title=Kopieren -copy.description=Damit wird das passende Element in einen anderen Raum kopiert. -copy.destination-folder.display-label=Zielordner -copy.assoc-type.display-label=Zuordnungstyp -copy.assoc-name.display-label=Zuordnungsname -copy.deep-copy.display-label=Deep Copy -copy.overwrite-copy.display-label=Kopie \u00fcberschreiben - -move.title=Verschieben -move.description=Damit wird das passende Element in einen anderen Raum verschoben. -move.destination-folder.display-label=Zielordner -move.assoc-type.display-label=Zuordnungstyp -move.assoc-name.display-label=Zuordnungsname - -mail.title=E-Mail senden -mail.description=Damit wird bei passendem Inhalt eine E-Mail an eine Liste von Benutzern geschickt. -mail.to.display-label=An -mail.to_many.display-label=An -mail.subject.display-label=Betreff -mail.text.display-label=Textk\u00f6rper -mail.from.display-label=Von -mail.template.display-label=E-Mail Mustervorlage - -check-in.title=Einchecken -check-in.description=Damit wird der passende Inhalt eingecheckt. -check-in.description.display-label=Beschreibung -check-in.minorChange.display-label=Geringf\u00fcgige \u00c4nderung - -check-out.title=Auschecken -check-out.description=Damit wird der passende Inhalt ausgecheckt. -check-out.destination-folder.display-label=Zielordner -check-out.assoc-type.display-label=Zuordnungstyp -check-out.assoc-name.display-label=Zuordnungsname - -set-property-value.title=Wert einer Eigenschaft setzen -set-property-value.description=Damit wird der Wert einer Eigenschaft auf einen bestimmten Wert gesetzt. -set-property-value.property.display-label=Eigenschaft -set-property-value.value.display-label=Wert - -import.title=Import -import.description=Importiert ein Alfresco Inhaltspaket in das Repository. -import.encoding.display-label=Zeichencodierung -import.destination.display-label=Ziel - -extract-metadata.title=\u00dcbliche Metadaten-Felder extrahieren -extract-metadata.description=Importiert Titel, Autor und Beschreibung der Metadaten-Felder aus \u00fcblichen Inhaltstypen. - -specialise-type.title=Typ spezialisieren -specialise-type.description=Damit wird das passende Element auf einen bestimmten Typ spezialisiert. -specialise-type.type-name.display-label=Typ - -export.title=Raum exportieren -export.description=Exportiert einen Raum und optional dessen Kinder in ein Alfresco Exportpaket. -export.package.description=Alfresco Inhaltspaket f\u00fcr Raum "{0}". -export.root.package.description=Alfresco Inhaltspaket f\u00fcr vollst\u00e4ndiges Repository. -export.store.package.description=Alfresco Repository Export von Speicher "{0}". -export.generic.package.description=Export des Alfresco Repository. -export.package.error=Keine zu exportierende tempor\u00e4re Datei gefunden - -script.title=Skript ausf\u00fchren -script.description=Eine JavaScript-Datei ausf\u00fchren, um Aufgaben wie Anlage neuer Dateien oder Ordner auszuf\u00fchren. -script.script-ref.display-label=Skript - -counter.title=Z\u00e4hler hochsetzen -counter.counter=Eigenschaft des Z\u00e4hlers f\u00fcr das Element hochsetzen. - -execute-all-rules.title=Alle Regeln ausf\u00fchren -execute-all-rules.description=Alle Regeln f\u00fcr die Kinder-Elemente ausf\u00fchren. - -start-workflow.title=Arbeitsablauf beginnen -start-workflow.description=Damit wird der Arbeitsablauf f\u00fcr die passenden Elemente begonnen. -start-workflow.workflowName.display-label=Name des Arbeitsablaufs -start-workflow.endStartTask.display-label=Aufgabe -start-workflow.startTaskTransition.display-label=\u00dcbergang - -# WCM Actions - -simple-avm-submit.title=Einfaches direktes Vorlegen -simple-avm-submit.description=Damit werden neuere Nodes im passenden Element im entsprechenden Staging vorgelegt. - -simple-avm-promote.title=Einfache Sandbox Bef\u00f6rderung -simple-avm-promote.description=Damit werden neuere Nodes im passenden Element in die angegebene Ziel-Sandbox bef\u00f6rdert. -simple-avm-promote.target-store.display-label=Name des AVM-Zielspeichers - -avm-revert-store.title=Einen Single Node in einem Speicher zur\u00fccksetzen. -avm-revert-store.description=Damit werden alle Nodes einschlie\u00dflich des und nach dem Argument-Node in eine vorherige Version zur\u00fcckgesetzt. -avm-revert-store.version.display-label=Version, auf die zur\u00fcckgesetzt werden soll. - -avm-revert-list.title=Eine Node-Liste in einem Speicher zur\u00fccksetzen. -avm-revert-list.description=Damit werden alle in der Liste enthaltenen Nodes zur\u00fcckgesetzt. -avm-revert-list.version.display-label=Version, auf die zur\u00fcckgesetzt werden soll. -avm-revert-list.node-list.display-label=Die zur\u00fcckzusetzende, durch Strings codierte Node-Liste. -avm-revert-list.flatten.display-label=Soll nach dem Zur\u00fccksetzen auf Stagingspeicher geebnet werden? -avm-revert-list.store.display-label=Name des zur\u00fcckgesetzten Speichers, nur beim Ebnen erforderlich. -avm-revert-list.staging.display-label=Name des Stagingspeichers, auf den geebnet werden soll. -avm-revert-list.flatten-path.display-label=Relativer Speicher-Pfad, der geebnet werden soll. - -avm-revert-to-version.title=Einen Node auf eine besondere Version zur\u00fccksetzen. -avm-revert-to-version.description=Damit wird ein Node auf eine bestimmte Version dieses Nodes zur\u00fcckgesetzt. -avm-revert-to-version.to-revert.display-label=AVM Node Deskriptor der Version, auf die zur\u00fcckgesetzt werden soll. - -avm-undo-list.title=Eine Node-Liste in einem Speicher erstellen, der f\u00fcr das Staging transparent ist. -avm-undo-list.description=Das fungiert f\u00fcr die Sandbox eines Benutzers als L\u00f6scheinrichtung f\u00fcr Fehler. -avm-undo-list.node-list.display-label=Die zur\u00fcckzusetzende, durch Strings codierte Node-Liste. - -avm-deploy-website.title=Eine Website auf einen Remote Server aufspielen. -avm-deploy-website.description=Damit wird eine Website auf einen Remote Server aufgespielt. -avm-deploy-website.webproject.display-label=NodeRef des Netzwerkprojektes, von dem das Deploy stammt. -avm-deploy-website.server.display-label=NodeRef des Deployment Servers auf den aufgespielt werden soll. -avm-deploy-website.attempt.display-label=NodeRef des Deployment-Versuches, zu dem dieses Deployment geh\u00f6rt. -avm-deploy-website.callback.display-label=Das DeploymentCallback Empf\u00e4nger-Objekt. -avm-deploy-website.delay.display-label=Optionale Frist, die f\u00fcr den Beginn eines Deployment anzuwenden ist. - -start-avm-workflow.title=Einen WCM-Workflow starten -start-avm-workflow.description=Startet einen Workflow, der ein AVM-Workflowpaket erwartet -start-avm-workflow.store-name.display-label=Name f\u00fcr die begonnene Aufgabe speichern -start-avm-workflow.workflow-name.display-label=Name des zu aktivierenden WCM-Workflows. - -copy-to-web-project.title=Element in einen Ordner in einem Netzwerkprojekt kopieren -copy-to-web-project.description=Damit wird das passende Element in einen Ordner in einem Netzwerkprojekt kopiert. - -create-version.title=Erstellt neue Version -create-version.description=Erstellt eine neue Version -create-version.description.display-label=Versionsbeschreibung -create-version.minor-change.display-label=Wesentliche \u00c4nderung diff --git a/config/alfresco/messages/action-config_es_ES.properties b/config/alfresco/messages/action-config_es_ES.properties deleted file mode 100755 index 23074fa762..0000000000 --- a/config/alfresco/messages/action-config_es_ES.properties +++ /dev/null @@ -1,226 +0,0 @@ -# Action parameter constraints -ac-compare-operations.equals=Igual a -ac-compare-operations.contains=Contiene -ac-compare-operations.begins=Comienza por -ac-compare-operations.ends=Termina en -ac-compare-operations.greater_than=Mayor que -ac-compare-operations.greater_than_equal=Mayor o igual que -ac-compare-operations.less_than=Menor que -ac-compare-operations.less_than_equal=Menor o igual que - -ac-content-properties.mime_type=Tipo MIME -ac-content-properties.encoding=Codificaci\u00f3n -ac-content-properties.size=Tama\u00f1o - -# Action conditions - -no-condition.title=Todos los elementos -no-condition.description=Esta condici\u00f3n coincidir\u00e1 con todo elemento a\u00f1adido al espacio. Util\u00edcela cuando desee aplicar una acci\u00f3n a todo elemento al a\u00f1adirlo al espacio. - -compare-property-value.title=El nombre contiene un valor -compare-property-value.description=La regla se aplica a todos los elementos que tienen un valor espec\u00edfico en su nombre. -compare-property-value.property.display-label=Propiedad -compare-property-value.content-property.display-label=Propiedad del contenido -compare-property-value.value.display-label=Valor -compare-property-value.operation.display-label=Operaci\u00f3n de comparaci\u00f3n - -in-category.title=Tiene una categor\u00eda -in-category.description=La regla se aplica a todos los elementos que tienen el valor de categor\u00eda especificado. -in-category.category-aspect.display-label=Aspecto de categor\u00eda -in-category.category-value.display-label=Valor de categor\u00eda - -is-subtype.title=Contenido del tipo o subtipo -is-subtype.description=La regla se aplica a todos los elementos que son de un tipo especificado o de sus subtipos. -is-subtype.type.display-label=Tipo - -has-aspect.title=Tiene el aspecto -has-aspect.description=La regla se aplica a todos los elementos que tienen aplicado el aspecto especificado. -has-aspect.aspect.display-label=Aspecto - -compare-mime-type.title=Contenido de tipo MIME -compare-mime-type.description=La regla se aplica a todos los elementos que tienen el contenido del tipo MIME especificado. -compare-mime-type.property.display-label=Propiedad -compare-mime-type.value.display-label=Tipo MIME - -composite-condition.title=Condici\u00f3n mixta -composite-condition.description=Combinar varias condiciones para crear una condici\u00f3n m\u00e1s complicada. - -compare-date-property.title=Propiedad con valor de fecha -compare-date-property.description=Comparar una propiedad de fecha de metadatos, aspecto o tipo - -compare-integer-property.title=Propiedad con valor de n\u00famero -compare-integer-property.description=Comparar una propiedad de n\u00famero de metadatos, aspecto o tipo - -compare-text-property.title=Propiedad con valor de texto -compare-text-property.description=Comparar una propiedad de texto de metadatos, aspecto o tipo - -has-tag.title=Tiene etiqueta -has-tag.description=Tiene una etiqueta aplicada a un nodo. -has-tag.tag.display-label=Etiqueta - -# Actions - -add-features.title=A\u00f1adir aspecto -add-features.description=Esto a\u00f1adir\u00e1 un aspecto al elemento coincidente. -add-features.aspect-name.display-label=Aspecto - -remove-features.title=Quitar aspecto -remove-features.description=Esto quitar\u00e1 un aspecto del elemento coincidente. -remove-features.aspect-name.display-label=Aspecto - -simple-workflow.title=A\u00f1adir Flujo de trabajo sencillo -simple-workflow.description=Esto a\u00f1adir\u00e1 un flujo de trabajo sencillo al elemento coincidente. Esto permitir\u00e1 mover el elemento a un espacio diferente para su siguiente paso dentro de un flujo de trabajo. Tambi\u00e9n puede dar un espacio adonde moverlo si se desea tener un paso de rechazo. -simple-workflow.approve-step.display-label=Paso de aprobaci\u00f3n -simple-workflow.approve-folder.display-label=Carpeta de paso de aprobaci\u00f3n -simple-workflow.approve-move.display-label=Movimiento de aprobaci\u00f3n -simple-workflow.reject-step.display-label=Paso de rechazo -simple-workflow.reject-folder.display-label=Carpeta de paso de rechazo -simple-workflow.reject-move.display-label=Movimiento de rechazo - -link-category.title=Enlace a categor\u00eda -link-category.description=Esto aplicar\u00e1 una categor\u00eda al elemento coincidente. -link-category.category-aspect.display-label=Aspecto de categor\u00eda -link-category.category-value.display-label=Valor de categor\u00eda - -transform.title=Transformar y copiar contenidos -transform.description=Esto transformar\u00e1 el contenido coincidente y copiar\u00e1 el resultado a un espacio espec\u00edfico -transform.mime-type.display-label=Tipo MIME -transform.destination-folder.display-label=Carpeta de destino -transform.assoc-type.display-label=Tipo de asociaci\u00f3n -transform.assoc-name.display-label=Nombre de asociaci\u00f3n -transform.overwrite-copy.display-label=Sobrescribir copia - -transform-image.title=Transformar y copiar imagen -transform-image.description=Esto transformar\u00e1 la imagen coincidente y copiar\u00e1 el resultado a un espacio espec\u00edfico -transform-image.mime-type.display-label=Tipo MIME -transform-image.destination-folder.display-label=Carpeta de destino -transform-image.assoc-type.display-label=Tipo de asociaci\u00f3n -transform-image.assoc-name.display-label=Nombre de asociaci\u00f3n -transform-image.overwrite-copy.display-label=Sobrescribir copia -transform-image.convert-command.display-label=Comando de conversi\u00f3n - -copy.title=Copiar -copy.description=Esto copiar\u00e1 el elemento coincidente a otro espacio. -copy.destination-folder.display-label=Carpeta de destino -copy.assoc-type.display-label=Tipo de asociaci\u00f3n -copy.assoc-name.display-label=Nombre de asociaci\u00f3n -copy.deep-copy.display-label=Copia profunda -copy.overwrite-copy.display-label=Sobrescribir copia - -move.title=Mover -move.description=Esto mover\u00e1 el elemento coincidente a otro espacio. -move.destination-folder.display-label=Carpeta de destino -move.assoc-type.display-label=Tipo de asociaci\u00f3n -move.assoc-name.display-label=Nombre de asociaci\u00f3n - -mail.title=Enviar email -mail.description=Esto enviar\u00e1 un correo electr\u00f3nico a una lista de usuarios cuando coincida el contenido. -mail.to.display-label=A -mail.to_many.display-label=A -mail.subject.display-label=Asunto -mail.text.display-label=Cuerpo -mail.from.display-label=Desde -mail.template.display-label=Plantilla de email - -check-in.title=Desbloquear -check-in.description=Esto desbloquear\u00e1 el elemento coincidente. -check-in.description.display-label=Descripci\u00f3n -check-in.minorChange.display-label=Cambio menor - -check-out.title=Bloquear -check-out.description=Esto bloquear\u00e1 el elemento coincidente. -check-out.destination-folder.display-label=Carpeta de destino -check-out.assoc-type.display-label=Tipo de asociaci\u00f3n -check-out.assoc-name.display-label=Nombre de asociaci\u00f3n - -set-property-value.title=Establecer el valor de la propiedad -set-property-value.description=Esto establecer\u00e1 el valor de una propiedad a un valor dado. -set-property-value.property.display-label=Propiedad -set-property-value.value.display-label=Valor - -import.title=Importar -import.description=Importa un paquete de contenidos de Alfresco en el repositorio. -import.encoding.display-label=Codificaci\u00f3n -import.destination.display-label=Destino - -extract-metadata.title=Extraer campos de metadatos comunes -extract-metadata.description=Importa los campos de metadatos t\u00edtulo, autor y descripci\u00f3n desde los tipos de contenido com\u00fan. - -specialise-type.title=Especializar tipo -specialise-type.description=Esto especializar\u00e1 el elemento coincidente hacia un tipo dado. -specialise-type.type-name.display-label=Tipo - -export.title=Exportar espacio -export.description=Exporta un espacio y, opcionalmente, a sus hijos a un paquete de exportaci\u00f3n de Alfresco. -export.package.description=Paquete de contenidos Alfresco para el espacio ''{0}''. -export.root.package.description=Paquete de contenidos Alfresco para el repositorio completo. -export.store.package.description=Exportaci\u00f3n del almac\u00e9n ''{0}'' del repositorio Alfresco. -export.generic.package.description=Exportaci\u00f3n del repositorio Alfresco. -export.package.error=No se pudo encontrar un fichero temporal para exportaci\u00f3n - -script.title=Ejecutar script -script.description=Ejecutar un fichero JavaScript para realizar tareas tales como crear nuevos ficheros o carpetas. -script.script-ref.display-label=Script - -counter.title=Incrementar el contador -counter.counter=Incrementar la propiedad de contador para el elemento. - -execute-all-rules.title=Ejecutar todas las reglas -execute-all-rules.description=Ejecutar todas las reglas sobre los elementos hijos. - -start-workflow.title=Iniciar un flujo de trabajo -start-workflow.description=Esto iniciar\u00e1 un flujo de trabajo para los elementos coincidentes. -start-workflow.workflowName.display-label=Nombre de flujo de trabajo -start-workflow.endStartTask.display-label=Tarea -start-workflow.startTaskTransition.display-label=Transici\u00f3n - -# WCM Actions - -simple-avm-submit.title=Env\u00edo directo sencillo -simple-avm-submit.description=Esto enviar\u00e1 todo nodo nuevo en el elemento coincidente al \u00e1rea de preparaci\u00f3n correspondiente. - -simple-avm-promote.title=Promoci\u00f3n sencilla a espacio de prueba -simple-avm-promote.description=Esto promueve todo nodo nuevo en el elemento coincidente al espacio de prueba especificado. -simple-avm-promote.target-store.display-label=El nombre del almac\u00e9n AVM de destino. - -avm-revert-store.title=Restablecer un solo nodo en un almac\u00e9n. -avm-revert-store.description=Esto restablece a una versi\u00f3n anterior todos los nodos incluidos y por debajo del nodo de argumento. -avm-revert-store.version.display-label=La versi\u00f3n a la cual restablecer. - -avm-revert-list.title=Restablecer una lista de nodos en un almac\u00e9n. -avm-revert-list.description=Esto restablece todos los nodos incluidos en la lista. -avm-revert-list.version.display-label=Versi\u00f3n a la que se va a volver. -avm-revert-list.node-list.display-label=La lista codificada en cadena de nodos a restablecer. -avm-revert-list.flatten.display-label=Acoplar o no a un almac\u00e9n de preparaci\u00f3n despu\u00e9s de restablecer. -avm-revert-list.store.display-label=El nombre del almac\u00e9n que se restablece, necesario s\u00f3lo en caso de acoplamiento. -avm-revert-list.staging.display-label=El nombre del almac\u00e9n de preparaci\u00f3n adonde acoplar. -avm-revert-list.flatten-path.display-label=La ruta de acceso relativa al almac\u00e9n a acoplar. - -avm-revert-to-version.title=Restablecer un nodo a una determinada versi\u00f3n. -avm-revert-to-version.description=Esto restablece un nodo a una determinada versi\u00f3n de dicho nodo. -avm-revert-to-version.to-revert.display-label=El Descriptor de nodos de AVM al cual restablecer. - -avm-undo-list.title=Hacer una lista de nodos en un almac\u00e9n transparente para la preparaci\u00f3n. -avm-undo-list.description=Esto act\u00faa como borrador de errores para el espacio de prueba de un usuario. -avm-undo-list.node-list.display-label=La lista codificada en cadena de nodos a restablecer. - -avm-deploy-website.title=Desplegar un sitio web hacia un servidor remoto. -avm-deploy-website.description=Esto despliega un sitio web hacia un servidor remoto. -avm-deploy-website.webproject.display-label=NodeRef del proyecto web desde donde se produce el despliegue. -avm-deploy-website.server.display-label=NodeRef del servidor de despliegue adonde desplegar. -avm-deploy-website.attempt.display-label=NodeRef del intento de despliegue del que forma parte este despliegue. -avm-deploy-website.callback.display-label=El objeto detector DeploymentCallback. -avm-deploy-website.delay.display-label=Un retardo opcional a aplicar al inicio de un despliegue. - -start-avm-workflow.title=Iniciar un flujo de trabajo WCM -start-avm-workflow.description=Inicia un flujo de trabajo esperando un paquete de flujo de trabajo AVM -start-avm-workflow.store-name.display-label=Nombre de almac\u00e9n para la tarea inicial -start-avm-workflow.workflow-name.display-label=El nombre del flujo de trabajo WCM a invocar. - -copy-to-web-project.title=Copiar elemento a una carpeta en un proyecto web -copy-to-web-project.description=Esto copiar\u00e1 el elemento coincidente a una carpeta en un proyecto Web. - -create-version.title=Crea nueva versi\u00f3n -create-version.description=Crea una nueva versi\u00f3n -create-version.description.display-label=Descripci\u00f3n de versi\u00f3n -create-version.minor-change.display-label=Cambio mayor diff --git a/config/alfresco/messages/action-config_fr_FR.properties b/config/alfresco/messages/action-config_fr_FR.properties deleted file mode 100755 index 972b07f598..0000000000 --- a/config/alfresco/messages/action-config_fr_FR.properties +++ /dev/null @@ -1,226 +0,0 @@ -# Action parameter constraints -ac-compare-operations.equals=Est \u00e9gal \u00e0 -ac-compare-operations.contains=Contient -ac-compare-operations.begins=Commence par -ac-compare-operations.ends=Se termine par -ac-compare-operations.greater_than=Sup\u00e9rieur \u00e0 -ac-compare-operations.greater_than_equal=Sup\u00e9rieur ou \u00e9gal \u00e0 -ac-compare-operations.less_than=Inf\u00e9rieur \u00e0 -ac-compare-operations.less_than_equal=Inf\u00e9rieur ou \u00e9gal \u00e0 - -ac-content-properties.mime_type=Type MIME -ac-content-properties.encoding=Encodage -ac-content-properties.size=Taille - -# Action conditions - -no-condition.title=Tous les \u00e9l\u00e9ments -no-condition.description=Cette condition correspondra \u00e0 tout \u00e9l\u00e9ment de contenu ajout\u00e9 \u00e0 l'Espace. Utiliser celle-ci quand vous souhaitez appliquer une action \u00e0 tout ce qui est ajout\u00e9 \u00e0 l'Espace. - -compare-property-value.title=Le nom contient une valeur -compare-property-value.description=La r\u00e8gle s'applique \u00e0 tous les \u00e9l\u00e9ments dont les noms pr\u00e9sentent une valeur sp\u00e9cifique. -compare-property-value.property.display-label=Propri\u00e9t\u00e9 -compare-property-value.content-property.display-label=Propri\u00e9t\u00e9 du contenu -compare-property-value.value.display-label=Valeur -compare-property-value.operation.display-label=Op\u00e9ration de comparaison - -in-category.title=Poss\u00e8de une cat\u00e9gorie -in-category.description=La r\u00e8gle s'applique \u00e0 tous les \u00e9l\u00e9ments poss\u00e9dant la valeur de cat\u00e9gorie sp\u00e9cifi\u00e9e. -in-category.category-aspect.display-label=Aspect de la cat\u00e9gorie -in-category.category-value.display-label=Valeur de la cat\u00e9gorie - -is-subtype.title=Contenu du type ou du sous-type -is-subtype.description=La r\u00e8gle est appliqu\u00e9e \u00e0 tout \u00e9l\u00e9ment appartenant \u00e0 un type ou un sous-type sp\u00e9cifique -is-subtype.type.display-label=Type - -has-aspect.title=Poss\u00e8de un aspect -has-aspect.description=La r\u00e8gle est appliqu\u00e9e \u00e0 tout \u00e9l\u00e9ment li\u00e9 \u00e0 un certain aspect -has-aspect.aspect.display-label=Aspect - -compare-mime-type.title=Contenu du type MIME -compare-mime-type.description=La r\u00e8gle est appliqu\u00e9e \u00e0 tout \u00e9l\u00e9ment de ce type mime. -compare-mime-type.property.display-label=Propri\u00e9t\u00e9 -compare-mime-type.value.display-label=Type MIME - -composite-condition.title=Condition composite -composite-condition.description=Combine plusieurs conditions pour cr\u00e9er une condition plus complexe. - -compare-date-property.title=Propri\u00e9t\u00e9 avec valeur de date -compare-date-property.description=Compare une propri\u00e9t\u00e9 de type date dans les m\u00e9tadonn\u00e9es, aspects ou types. - -compare-integer-property.title=Propri\u00e9t\u00e9 avec valeur de nombre -compare-integer-property.description=Compare une propri\u00e9t\u00e9 de nombre de la m\u00e9tadonn\u00e9e, de l'aspect ou du type - -compare-text-property.title=Propri\u00e9t\u00e9 avec valeur de texte -compare-text-property.description=Compare une propri\u00e9t\u00e9 de type texte dans les m\u00e9tadonn\u00e9es, aspects ou types - -has-tag.title=Poss\u00e8de une \u00e9tiquette -has-tag.description=Poss\u00e8de une \u00e9tiquette appliqu\u00e9e sur un n\u009cud. -has-tag.tag.display-label=\u00c9tiquette - -# Actions - -add-features.title=Ajouter un aspect -add-features.description=Cette action ajoute un aspect \u00e0 l'\u00e9l\u00e9ment. -add-features.aspect-name.display-label=Aspect - -remove-features.title=Supprimer un aspect -remove-features.description=Cela va retirer l'aspect de l'\u00e9l\u00e9ment correspondant. -remove-features.aspect-name.display-label=Aspect - -simple-workflow.title=Ajouter un flux de travail simple -simple-workflow.description=Ceci ajoute un workflow basique \u00e0 l'\u00e9l\u00e9ment correspondant. Ce qui permet \u00e0 l'\u00e9l\u00e9ment d'\u00eatre d\u00e9plac\u00e9 vers un Dossier diff\u00e9rent avant de passer \u00e0 l'\u00e9tape suivante dans le workflow. Il est aussi possible de pr\u00e9ciser un Espace o\u00f9 il sera d\u00e9plac\u00e9 en cas de rejet. -simple-workflow.approve-step.display-label=Approuver l'\u00e9tape -simple-workflow.approve-folder.display-label=Approuver le dossier d'\u00e9tapes -simple-workflow.approve-move.display-label=Approuver le d\u00e9placement -simple-workflow.reject-step.display-label=Rejeter l'\u00e9tape -simple-workflow.reject-folder.display-label=Rejeter le dossier d'\u00e9tapes -simple-workflow.reject-move.display-label=Rejeter le d\u00e9placement - -link-category.title=Lier \u00e0 la cat\u00e9gorie -link-category.description=Cette action associe une cat\u00e9gorie \u00e0 l'\u00e9l\u00e9ment. -link-category.category-aspect.display-label=Aspect de la cat\u00e9gorie -link-category.category-value.display-label=Valeur de la cat\u00e9gorie - -transform.title=Transformer et copier le contenu -transform.description=Transforme le contenu mis en correspondance et copie le r\u00e9sultat dans un espace sp\u00e9cifique -transform.mime-type.display-label=Type MIME -transform.destination-folder.display-label=Dossier de destination -transform.assoc-type.display-label=Type d'association -transform.assoc-name.display-label=Nom de l'association -transform.overwrite-copy.display-label=\u00c9craser la copie - -transform-image.title=Transformer et copier l'image -transform-image.description=Cette action convertie une image et la copie vers un espace sp\u00e9cifique. -transform-image.mime-type.display-label=Type MIME -transform-image.destination-folder.display-label=Dossier de destination -transform-image.assoc-type.display-label=Type d'association -transform-image.assoc-name.display-label=Nom de l'association -transform-image.overwrite-copy.display-label=\u00c9craser la copie -transform-image.convert-command.display-label=Commande de conversion - -copy.title=Copier -copy.description=Cette action copie l'\u00e9l\u00e9ment vers une autre destination. -copy.destination-folder.display-label=Dossier de destination -copy.assoc-type.display-label=Type d'association -copy.assoc-name.display-label=Nom de l'association -copy.deep-copy.display-label=Copie compl\u00e8te -copy.overwrite-copy.display-label=\u00c9craser la copie - -move.title=D\u00e9placer -move.description=Cette action d\u00e9place l'\u00e9l\u00e9ment vers une autre destination. -move.destination-folder.display-label=Dossier de destination -move.assoc-type.display-label=Type d'association -move.assoc-name.display-label=Nom de l'association - -mail.title=Envoyer un e-mail -mail.description=Cette action envoie un courriel \u00e0 une liste d'utilisateurs. -mail.to.display-label=Vers -mail.to_many.display-label=Vers -mail.subject.display-label=Sujet -mail.text.display-label=Corps -mail.from.display-label=De -mail.template.display-label=Mod\u00e8le d'e-mail - -check-in.title=Lib\u00e9rer -check-in.description=Cette action enregistre l'\u00e9l\u00e9ment. -check-in.description.display-label=Description -check-in.minorChange.display-label=Modification mineure - -check-out.title=R\u00e9server -check-out.description=Cette action extrait une copie de travail de l'\u00e9l\u00e9ment. -check-out.destination-folder.display-label=Dossier de destination -check-out.assoc-type.display-label=Type d'association -check-out.assoc-name.display-label=Nom de l'association - -set-property-value.title=D\u00e9finir la valeur de la propri\u00e9t\u00e9 -set-property-value.description=Cela va fixer la valeur d'une propri\u00e9t\u00e9 sur une valeur sp\u00e9cifique. -set-property-value.property.display-label=Propri\u00e9t\u00e9 -set-property-value.value.display-label=Valeur - -import.title=Importer -import.description=Importer un paquetage de contenu dans l'entrep\u00f4t. -import.encoding.display-label=Encodage -import.destination.display-label=Destination - -extract-metadata.title=Extraire des champs de m\u00e9tadonn\u00e9es communs -extract-metadata.description=Importe les champs metadata titre, auteur et description des types de contenus classiques. - -specialise-type.title=Sp\u00e9cialiser le type -specialise-type.description=Sp\u00e9cialisation de l'\u00e9l\u00e9ment concern\u00e9 sur un type sp\u00e9cifi\u00e9. -specialise-type.type-name.display-label=Type - -export.title=Exporter l'espace -export.description=Exporte un espace et, facultativement, ses enfants dans un progiciel d'exportation Alfresco. -export.package.description=Paquetage de contenu Alfresco pour l''Espace ''{0}''. -export.root.package.description=Paquetage de contenu Alfresco pour l'Entrep\u00f4t complet. -export.store.package.description=Export de l''espace ''{0}'' de l''Entrep\u00f4t Alfresco. -export.generic.package.description=Export de l'Entrep\u00f4t Alfresco. -export.package.error=Fichier temporaire d'export non trouv\u00e9 - -script.title=Ex\u00e9cuter le script -script.description=Ex\u00e9cute un fichier Javascript pour r\u00e9aliser des actions comme la cr\u00e9ation de nouveaux fichiers ou r\u00e9pertoires. -script.script-ref.display-label=Script - -counter.title=Incr\u00e9menter le compteur -counter.counter=Incr\u00e9mente la propri\u00e9t\u00e9 compteur pour cet \u00e9l\u00e9ment. - -execute-all-rules.title=Ex\u00e9cuter toutes les r\u00e8gles -execute-all-rules.description=Ex\u00e9cute toutes les r\u00e8gles sur les \u00e9l\u00e9ments fils. - -start-workflow.title=D\u00e9marrer un workflow -start-workflow.description=D\u00e9marre un workflow pour les \u00e9l\u00e9ments. -start-workflow.workflowName.display-label=Nom du flux de travail -start-workflow.endStartTask.display-label=T\u00e2che -start-workflow.startTaskTransition.display-label=Transition - -# WCM Actions - -simple-avm-submit.title=Publication Directe Simple -simple-avm-submit.description=Transfert tout nouveau noeud de l'\u00e9l\u00e9ment dans l'environnement de recette correspondant. - -simple-avm-promote.title=Simple transfert vers un bac \u00e0 sable -simple-avm-promote.description=Transfert tout nouveau noeud de l'\u00e9l\u00e9ment dans le bac \u00e0 sable s\u00e9lectionn\u00e9. -simple-avm-promote.target-store.display-label=Le nom de l'entrep\u00f4t AVM cible. - -avm-revert-store.title=Remettre un noeud simple dans son \u00e9tat initial dans un entrep\u00f4t -avm-revert-store.description=Remet tous les noeuds dont celui ci-dessous dans sa version initiale. -avm-revert-store.version.display-label=La version vers laquelle revenir. - -avm-revert-list.title=Remettre une liste de noeuds dans un entrep\u00f4t dans leur \u00e9tat initial -avm-revert-list.description=Remet tous les noeuds inclus dans la liste dans leur \u00e9tat initial. -avm-revert-list.version.display-label=La version vers laquelle revenir. -avm-revert-list.node-list.display-label=La cha\u00eene encod\u00e9e de la liste des noeuds \u00e0 remettre dans leur \u00e9tat initial. -avm-revert-list.flatten.display-label=S'il faut finaliser un environnement de recette apr\u00e8s le retour en \u00e9tat initial. -avm-revert-list.store.display-label=Le nom de l'entrep\u00f4t remis en \u00e9tat initial, uniquement n\u00e9cessaire pour la finalisation. -avm-revert-list.staging.display-label=Le nom de l'entrep\u00f4t de recette pour la finalisation. -avm-revert-list.flatten-path.display-label=Le chemin relatif de l'entrep\u00f4t qui doit \u00eatre finalis\u00e9. - -avm-revert-to-version.title=Remettre un noeud dans une version particuli\u00e8re -avm-revert-to-version.description=Remet un noeud dans une version particuli\u00e8re de ce noeud. -avm-revert-to-version.to-revert.display-label=Le Descripteur de Noeud AVM de la version vers laquelle revenir. - -avm-undo-list.title=Construire une liste de Noeuds dans un entrep\u00f4t, transparant pour l'environnement de recette. -avm-undo-list.description=Retour arri\u00e8re dans le bac \u00e0 sable utilisateur. -avm-undo-list.node-list.display-label=La cha\u00eene encod\u00e9e de la liste des noeuds \u00e0 remettre dans leur \u00e9tat initial. - -avm-deploy-website.title=D\u00e9ploie un site vers un serveur distant -avm-deploy-website.description=Lance le d\u00e9ploiement d'un site web vers un serveur distant. -avm-deploy-website.webproject.display-label=NodeRef du projet Web \u00e0 partir duquel le d\u00e9ploiement est effectu\u00e9. -avm-deploy-website.server.display-label=NodeRef du serveur de d\u00e9ploiement vers lequel le d\u00e9ploiement est effectu\u00e9. -avm-deploy-website.attempt.display-label=NodeRef de la tentative de d\u00e9ploiement dont ce dernier fait partie. -avm-deploy-website.callback.display-label=Objet listener DeploymentCallback. -avm-deploy-website.delay.display-label=D\u00e9lai facultatif \u00e0 appliquer au d\u00e9but d'un d\u00e9ploiement. - -start-avm-workflow.title=D\u00e9marrer un workflow WCM -start-avm-workflow.description=D\u00e9marre un workflow n\u00e9cessitant un paquetage de workflow AVM. -start-avm-workflow.store-name.display-label=Nom de l'entrep\u00f4t de d\u00e9marrage de la t\u00e2che -start-avm-workflow.workflow-name.display-label=Le nom du workflow WCM \u00e0 ex\u00e9cuter. - -copy-to-web-project.title=Copier l'\u00e9l\u00e9ment vers un dossier d'un projet web -copy-to-web-project.description=Cette action copie l'\u00e9l\u00e9ment vers un dossier d'un projet web. - -create-version.title=Cr\u00e9e une version -create-version.description=Cr\u00e9e une version -create-version.description.display-label=Description de la version -create-version.minor-change.display-label=Modification majeure diff --git a/config/alfresco/messages/action-config_it_IT.properties b/config/alfresco/messages/action-config_it_IT.properties deleted file mode 100755 index f549af82a1..0000000000 --- a/config/alfresco/messages/action-config_it_IT.properties +++ /dev/null @@ -1,226 +0,0 @@ -# Action parameter constraints -ac-compare-operations.equals=\u00c8 uguale a -ac-compare-operations.contains=Contiene -ac-compare-operations.begins=Inizia con -ac-compare-operations.ends=Finisce con -ac-compare-operations.greater_than=\u00c8 maggiore di -ac-compare-operations.greater_than_equal=\u00c8 maggiore di o uguale a -ac-compare-operations.less_than=\u00c8 minore di -ac-compare-operations.less_than_equal=\u00c8 minore di o uguale a - -ac-content-properties.mime_type=Mimetype -ac-content-properties.encoding=Codifica -ac-content-properties.size=Dimensioni - -# Action conditions - -no-condition.title=Tutti gli elementi -no-condition.description=Questa condizione individua tutti gli elementi aggiunti allo spazio. Utilizzare questa condizione per applicare un'azione a tutti gli elementi quando viene aggiunta allo spazio. - -compare-property-value.title=Il nome contiene il valore -compare-property-value.description=La regola viene applicata a tutti gli elementi il cui nome contiene un valore specifico. -compare-property-value.property.display-label=Propriet\u00e0 -compare-property-value.content-property.display-label=Propriet\u00e0 di contenuto -compare-property-value.value.display-label=Valore -compare-property-value.operation.display-label=Operazione di confronto - -in-category.title=Ha la categoria -in-category.description=La regola viene applicata a tutti gli elementi con il valore di categoria specificato. -in-category.category-aspect.display-label=Aspetto della categoria -in-category.category-value.display-label=Valore della categoria - -is-subtype.title=Contenuto di tipo o sottotipo -is-subtype.description=La regola viene applicata a tutti gli elementi che sono del tipo specificato o dei relativi sottotipi. -is-subtype.type.display-label=Tipo - -has-aspect.title=Ha l'aspetto -has-aspect.description=La regola viene applicata a tutti gli elementi con l'aspetto specificato. -has-aspect.aspect.display-label=Aspetto - -compare-mime-type.title=Contenuto di mimetype -compare-mime-type.description=La regola viene applicata a tutti gli elementi il cui contenuto \u00e8 del mimetype specificato. -compare-mime-type.property.display-label=Propriet\u00e0 -compare-mime-type.value.display-label=Mimetype - -composite-condition.title=Condizione composita -composite-condition.description=Combina pi\u00f9 condizioni in modo da creare una condizione pi\u00f9 complessa. - -compare-date-property.title=Propriet\u00e0 con valore di data -compare-date-property.description=Confronta una propriet\u00e0 di data dei metadati, dell'aspetto o del tipo. - -compare-integer-property.title=Propriet\u00e0 con valore numerico -compare-integer-property.description=Confronta una propriet\u00e0 numerica dei metadati, dell'aspetto o del tipo. - -compare-text-property.title=Propriet\u00e0 con valore di testo -compare-text-property.description=Confronta una propriet\u00e0 di testo dei metadati, dell'aspetto o del tipo. - -has-tag.title=Ha il tag -has-tag.description=Ha un nodo a cui \u00e8 applicato un tag. -has-tag.tag.display-label=Tag - -# Actions - -add-features.title=Aggiungi aspetto -add-features.description=Aggiunge un aspetto all'elemento corrispondente. -add-features.aspect-name.display-label=Aspetto - -remove-features.title=Rimuovi aspetto -remove-features.description=Rimuove un aspetto dall'elemento corrispondente. -remove-features.aspect-name.display-label=Aspetto - -simple-workflow.title=Aggiungi workflow semplice -simple-workflow.description=Aggiunge un workflow semplice all'elemento corrispondente. In questo modo l'elemento pu\u00f2 essere spostato in uno spazio diverso per l'esecuzione del prossimo passo di un workflow. \u00c8 inoltre possibile specificare lo spazio in cui spostare l'elemento per un passo di rifiuto. -simple-workflow.approve-step.display-label=Passo di approvazione -simple-workflow.approve-folder.display-label=Cartella del passo di approvazione -simple-workflow.approve-move.display-label=Spostamento in caso di approvazione -simple-workflow.reject-step.display-label=Passo di rifiuto -simple-workflow.reject-folder.display-label=Cartella del passo di rifiuto -simple-workflow.reject-move.display-label=Spostamento in caso di rifiuto - -link-category.title=Collega a categoria -link-category.description=Applica una categoria all'elemento corrispondente. -link-category.category-aspect.display-label=Aspetto della categoria -link-category.category-value.display-label=Valore della categoria - -transform.title=Trasforma e copia contenuto -transform.description=Trasforma il contenuto corrispondente e copia il risultato in uno spazio specifico. -transform.mime-type.display-label=Mimetype -transform.destination-folder.display-label=Cartella di destinazione -transform.assoc-type.display-label=Tipo di associazione -transform.assoc-name.display-label=Nome di associazione -transform.overwrite-copy.display-label=Sovrascrivi copia - -transform-image.title=Trasforma e copia immagine -transform-image.description=Trasforma l'immagine corrispondente e copia il risultato in uno spazio specifico. -transform-image.mime-type.display-label=Mimetype -transform-image.destination-folder.display-label=Cartella di destinazione -transform-image.assoc-type.display-label=Tipo di associazione -transform-image.assoc-name.display-label=Nome di associazione -transform-image.overwrite-copy.display-label=Sovrascrivi copia -transform-image.convert-command.display-label=Comando di conversione - -copy.title=Copia -copy.description=Copia l'elemento corrispondente in un altro spazio. -copy.destination-folder.display-label=Cartella di destinazione -copy.assoc-type.display-label=Tipo di associazione -copy.assoc-name.display-label=Nome di associazione -copy.deep-copy.display-label=Copia completa -copy.overwrite-copy.display-label=Sovrascrivi copia - -move.title=Sposta -move.description=Sposta l'elemento corrispondente in un altro spazio. -move.destination-folder.display-label=Cartella di destinazione -move.assoc-type.display-label=Tipo di associazione -move.assoc-name.display-label=Nome di associazione - -mail.title=Invia e-mail -mail.description=Invia un messaggio e-mail a un elenco di utenti quando il contenuto corrisponde. -mail.to.display-label=A -mail.to_many.display-label=A -mail.subject.display-label=Oggetto -mail.text.display-label=Corpo -mail.from.display-label=Da -mail.template.display-label=Modello di e-mail - -check-in.title=Check In -check-in.description=Esegue il Check In del contenuto corrispondente. -check-in.description.display-label=Descrizione -check-in.minorChange.display-label=Cambiamento minore - -check-out.title=Check Out -check-out.description=Esegue il Check Out del contenuto corrispondente. -check-out.destination-folder.display-label=Cartella di destinazione -check-out.assoc-type.display-label=Tipo di associazione -check-out.assoc-name.display-label=Nome di associazione - -set-property-value.title=Imposta valore propriet\u00e0 -set-property-value.description=Imposta il valore di una propriet\u00e0 su un valore specificato. -set-property-value.property.display-label=Propriet\u00e0 -set-property-value.value.display-label=Valore - -import.title=Importa -import.description=Importa nel repository un pacchetto di contenuto Alfresco. -import.encoding.display-label=Codifica -import.destination.display-label=Destinazione - -extract-metadata.title=Estrai campi metadati comuni -extract-metadata.description=Importa i campi dei metadati relativi a titolo, autore e descrizione da tipi di contenuto comuni. - -specialise-type.title=Specializza tipo -specialise-type.description=Specializza l'elemento corrispondente su un tipo specificato. -specialise-type.type-name.display-label=Tipo - -export.title=Esporta spazio -export.description=Esporta uno spazio e, opzionalmente, i relativi figli in un pacchetto di esportazione Alfresco. -export.package.description=Pacchetto di contenuto Alfresco per lo spazio ''{0}''. -export.root.package.description=Pacchetto di contenuto Alfresco per il repository completo. -export.store.package.description=Esportazione nel repository Alfresco del deposito ''{0}''. -export.generic.package.description=Esportazione nel repository Alfresco. -export.package.error=Impossibile trovare il file temporaneo per l'esportazione - -script.title=Esegui script -script.description=Esegue un file JavaScript per l'esecuzione di compiti come la creazione di nuovi file o cartelle. -script.script-ref.display-label=Script - -counter.title=Incrementa contatore -counter.counter=Incrementa la propriet\u00e0 relativa al contatore per l'elemento. - -execute-all-rules.title=Esegui tutte le regole -execute-all-rules.description=Esegue tutte le regole sugli elementi figlio. - -start-workflow.title=Avvia workflow -start-workflow.description=Avvia un workflow per gli elementi corrispondenti. -start-workflow.workflowName.display-label=Nome workflow -start-workflow.endStartTask.display-label=Compito -start-workflow.startTaskTransition.display-label=Transizione - -# WCM Actions - -simple-avm-submit.title=Invio diretto semplice -simple-avm-submit.description=Invia tutti i nodi pi\u00f9 recenti presenti nell'elemento corrispondente all'area di gestione temporanea corrispondente. - -simple-avm-promote.title=Promozione sandbox semplice -simple-avm-promote.description=Promuove tutti i nodi pi\u00f9 recenti presenti nell'elemento corrispondente alla sandbox di destinazione specificata. -simple-avm-promote.target-store.display-label=Nome del deposito AVM di destinazione. - -avm-revert-store.title=Inverti un singolo nodo in un deposito. -avm-revert-store.description=Inverte in una versione precedente tutti i nodi al di sotto del nodo dell'argomento compreso. -avm-revert-store.version.display-label=Versione verso cui eseguire l'inversione. - -avm-revert-list.title=Inverti un elenco di nodi in un deposito. -avm-revert-list.description=Inverte tutti i nodi inclusi nell'elenco. -avm-revert-list.version.display-label=Versione verso cui eseguire l'inversione. -avm-revert-list.node-list.display-label=Elenco di stringhe codificate dei nodi da invertire. -avm-revert-list.flatten.display-label=Indica se appiattire in un deposito temporaneo dopo l'inversione. -avm-revert-list.store.display-label=Nome del deposito da invertire, necessario solo in caso di appiattimento. -avm-revert-list.staging.display-label=Nome del deposito temporaneo in cui eseguire l'appiattimento. -avm-revert-list.flatten-path.display-label=Percorso relativo del deposito da appiattire. - -avm-revert-to-version.title=Inverti un nodo in una versione specifica. -avm-revert-to-version.description=Inverte un nodo in una versione specifica di tale nodo. -avm-revert-to-version.to-revert.display-label=Descrittore di nodo AVM della versione verso cui eseguire l'inversione. - -avm-undo-list.title=Imposta un elenco di nodi in un deposito come trasparente per la gestione temporanea. -avm-undo-list.description=Serve per la cancellazione di errori dalla sandbox di un utente. -avm-undo-list.node-list.display-label=Elenco di stringhe codificate dei nodi da invertire. - -avm-deploy-website.title=Dispiega un sito web in un server remoto. -avm-deploy-website.description=Dispiega un sito web in un server remoto. -avm-deploy-website.webproject.display-label=Valore NodeRef del progetto web da cui viene eseguito il dispiegamento. -avm-deploy-website.server.display-label=Valore NodeRef del server in cui eseguire il dispiegamento. -avm-deploy-website.attempt.display-label=Valore NodeRef del tentativo di cui fa parte questo dispiegamento. -avm-deploy-website.callback.display-label=Oggetto listener DeploymentCallback. -avm-deploy-website.delay.display-label=Ritardo opzionale da applicare all'inizio di un dispiegamento. - -start-avm-workflow.title=Avvia un workflow WCM -start-avm-workflow.description=Avvia un workflow in attesa di un pacchetto di workflow AVM. -start-avm-workflow.store-name.display-label=Nome del deposito per il compito di inizio -start-avm-workflow.workflow-name.display-label=Nome del workflow WCM da richiamare. - -copy-to-web-project.title=Copia elemento in una cartella di un progetto web -copy-to-web-project.description=Copia l'elemento corrispondente in una cartella di un progetto web. - -create-version.title=Crea nuova versione -create-version.description=Crea una nuova versione -create-version.description.display-label=Descrizione della versione -create-version.minor-change.display-label=Cambiamento maggiore diff --git a/config/alfresco/messages/action-config_ja.properties b/config/alfresco/messages/action-config_ja.properties deleted file mode 100755 index c6c60d3d9f..0000000000 --- a/config/alfresco/messages/action-config_ja.properties +++ /dev/null @@ -1,226 +0,0 @@ -# Action parameter constraints -ac-compare-operations.equals=\u3068\u7b49\u3057\u3044 -ac-compare-operations.contains=\u542b\u3080 -ac-compare-operations.begins=\u3067\u59cb\u307e\u308b -ac-compare-operations.ends=\u3067\u7d42\u308f\u308b -ac-compare-operations.greater_than=\u3088\u308a\u5927\u304d\u3044 -ac-compare-operations.greater_than_equal=\u4ee5\u4e0a -ac-compare-operations.less_than=\u3088\u308a\u5c0f\u3055\u3044 -ac-compare-operations.less_than_equal=\u4ee5\u4e0b - -ac-content-properties.mime_type=MIME\u30bf\u30a4\u30d7 -ac-content-properties.encoding=\u30b3\u30fc\u30c9\u5316 -ac-content-properties.size=\u30b5\u30a4\u30ba - -# Action conditions - -no-condition.title=\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0 -no-condition.description=\u3053\u306e\u6761\u4ef6\u306f\u30b9\u30da\u30fc\u30b9\u306b\u8ffd\u52a0\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u30de\u30c3\u30c1\u3057\u307e\u3059\u3002 \u30b9\u30da\u30fc\u30b9\u306b\u8ffd\u52a0\u3055\u308c\u308b\u3042\u3089\u3086\u308b\u30a2\u30a4\u30c6\u30e0\u306b\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u9069\u7528\u3059\u308b\u5834\u5408\u306b\u4f7f\u3044\u307e\u3059\u3002 - -compare-property-value.title=\u5024\u3092\u542b\u3080\u540d\u524d -compare-property-value.description=\u305d\u306e\u540d\u524d\u306b\u7279\u5b9a\u306e\u540d\u524d\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u5bfe\u3057\u3066\u30eb\u30fc\u30eb\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002 -compare-property-value.property.display-label=\u5c5e\u6027 -compare-property-value.content-property.display-label=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5c5e\u6027 -compare-property-value.value.display-label=\u5024 -compare-property-value.operation.display-label=\u6bd4\u8f03\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3 - -in-category.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30ab\u30c6\u30b4\u30ea -in-category.description=\u30eb\u30fc\u30eb\u306f\u3001\u6307\u5b9a\u3057\u305f\u30ab\u30c6\u30b4\u30ea\u5024\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u5bfe\u3057\u3066\u9069\u7528\u3055\u308c\u307e\u3059\u3002 -in-category.category-aspect.display-label=\u30ab\u30c6\u30b4\u30ea\u30a2\u30b9\u30da\u30af\u30c8 -in-category.category-value.display-label=\u30ab\u30c6\u30b4\u30ea\u5024 - -is-subtype.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30bf\u30a4\u30d7\u3082\u3057\u304f\u306f\u30b5\u30d6\u30bf\u30a4\u30d7 -is-subtype.description=\u6307\u5b9a\u3057\u305f\u30bf\u30a4\u30d7\u307e\u305f\u306f\u305d\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u306e\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u5bfe\u3057\u3066\u30eb\u30fc\u30eb\u304c\u9069\u7528\u3055\u308c\u307e\u3059 -is-subtype.type.display-label=\u30bf\u30a4\u30d7 - -has-aspect.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30a2\u30b9\u30da\u30af\u30c8 -has-aspect.description=\u6307\u5b9a\u3057\u305f\u30a2\u30b9\u30da\u30af\u30c8\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u5bfe\u3057\u3066\u30eb\u30fc\u30eb\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002 -has-aspect.aspect.display-label=\u30a2\u30b9\u30da\u30af\u30c8 - -compare-mime-type.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u306eMIME\u30bf\u30a4\u30d7 -compare-mime-type.description=\u6307\u5b9a\u3057\u305fMIME\u30bf\u30a4\u30d7\u3092\u6301\u3064\u3059\u3079\u3066\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u5bfe\u3057\u3066\u30eb\u30fc\u30eb\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002 -compare-mime-type.property.display-label=\u5c5e\u6027 -compare-mime-type.value.display-label=MIME\u30bf\u30a4\u30d7 - -composite-condition.title=\u5408\u6210\u6761\u4ef6 -composite-condition.description=\u8907\u6570\u306e\u6761\u4ef6\u3092\u7d50\u5408\u3057\u3066\u3088\u308a\u8907\u96d1\u306a\u6761\u4ef6\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -compare-date-property.title=\u65e5\u4ed8\u578b\u306e\u5c5e\u6027 -compare-date-property.description=\u5c5e\u6027\u3001\u30a2\u30b9\u30da\u30af\u30c8\u307e\u305f\u306f\u30bf\u30a4\u30d7\u306e\u65e5\u4ed8\u578b\u5c5e\u6027\u3092\u6bd4\u8f03 - -compare-integer-property.title=\u6570\u5024\u578b\u306e\u5c5e\u6027 -compare-integer-property.description=\u5c5e\u6027\u3001\u30a2\u30b9\u30da\u30af\u30c8\u3001\u307e\u305f\u306f\u30bf\u30a4\u30d7\u306e\u6570\u5b57\u578b\u5c5e\u6027\u3092\u6bd4\u8f03 - -compare-text-property.title=\u30c6\u30ad\u30b9\u30c8\u5024\u306e\u5c5e\u6027 -compare-text-property.description=\u5c5e\u6027\u3001\u30a2\u30b9\u30da\u30af\u30c8\u307e\u305f\u306f\u30bf\u30a4\u30d7\u306e\u30c6\u30ad\u30b9\u30c8\u578b\u5c5e\u6027\u3092\u6bd4\u8f03 - -has-tag.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30bf\u30b0 -has-tag.description=\u30ce\u30fc\u30c9\u306b\u9069\u7528\u3055\u308c\u3066\u3044\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30bf\u30b0\u3002 -has-tag.tag.display-label=\u30bf\u30b0 - -# Actions - -add-features.title=\u30a2\u30b9\u30da\u30af\u30c8\u306e\u8ffd\u52a0 -add-features.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u306b\u30a2\u30b9\u30da\u30af\u30c8\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002 -add-features.aspect-name.display-label=\u30a2\u30b9\u30da\u30af\u30c8 - -remove-features.title=\u30a2\u30b9\u30da\u30af\u30c8\u3092\u53d6\u308a\u5916\u3059 -remove-features.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u304b\u3089\u30a2\u30b9\u30da\u30af\u30c8\u3092\u53d6\u308a\u5916\u3057\u307e\u3059\u3002 -remove-features.aspect-name.display-label=\u30a2\u30b9\u30da\u30af\u30c8 - -simple-workflow.title=\u7c21\u6613\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u8ffd\u52a0 -simple-workflow.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u3078\u7c21\u6613\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002 \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u5bfe\u3059\u308b\u4ed6\u306e\u30b9\u30da\u30fc\u30b9\u306b\u30a2\u30a4\u30c6\u30e0\u3092\u79fb\u52d5\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u62d2\u5426\u30b9\u30c6\u30c3\u30d7\u3092\u5e0c\u671b\u3059\u308b\u5834\u5408\u3001\u79fb\u52d5\u7528\u306e\u30b9\u30da\u30fc\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002 -simple-workflow.approve-step.display-label=\u30b9\u30c6\u30c3\u30d7\u306e\u627f\u8a8d -simple-workflow.approve-folder.display-label=\u30b9\u30c6\u30c3\u30d7\u30d5\u30a9\u30eb\u30c0\u306e\u627f\u8a8d -simple-workflow.approve-move.display-label=\u79fb\u52d5\u306e\u627f\u8a8d -simple-workflow.reject-step.display-label=\u30b9\u30c6\u30c3\u30d7\u306e\u62d2\u5426 -simple-workflow.reject-folder.display-label=\u30b9\u30c6\u30c3\u30d7\u30d5\u30a9\u30eb\u30c0\u306e\u62d2\u5426 -simple-workflow.reject-move.display-label=\u79fb\u52d5\u306e\u62d2\u5426 - -link-category.title=\u30ab\u30c6\u30b4\u30ea\u306b\u30ea\u30f3\u30af -link-category.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u306b\u30ab\u30c6\u30b4\u30ea\u3092\u9069\u7528\u3057\u307e\u3059\u3002 -link-category.category-aspect.display-label=\u30ab\u30c6\u30b4\u30ea\u30a2\u30b9\u30da\u30af\u30c8 -link-category.category-value.display-label=\u30ab\u30c6\u30b4\u30ea\u5024 - -transform.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5909\u63db\u3068\u30b3\u30d4\u30fc -transform.description=\u30de\u30c3\u30c1\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5909\u63db\u3057\u3001\u7d50\u679c\u3092\u7279\u5b9a\u30b9\u30da\u30fc\u30b9\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059 -transform.mime-type.display-label=MIME\u30bf\u30a4\u30d7 -transform.destination-folder.display-label=\u5b9b\u5148\u30d5\u30a9\u30eb\u30c0 -transform.assoc-type.display-label=\u95a2\u9023\u30bf\u30a4\u30d7 -transform.assoc-name.display-label=\u95a2\u9023\u540d -transform.overwrite-copy.display-label=\u4e0a\u66f8\u304d\u30b3\u30d4\u30fc - -transform-image.title=\u753b\u50cf\u306e\u5909\u63db\u3068\u30b3\u30d4\u30fc -transform-image.description=\u30de\u30c3\u30c1\u3059\u308b\u753b\u50cf\u3092\u5909\u63db\u3057\u3001\u7279\u5b9a\u30b9\u30da\u30fc\u30b9\u306b\u7d50\u679c\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059 -transform-image.mime-type.display-label=MIME\u30bf\u30a4\u30d7 -transform-image.destination-folder.display-label=\u5b9b\u5148\u30d5\u30a9\u30eb\u30c0 -transform-image.assoc-type.display-label=\u95a2\u9023\u30bf\u30a4\u30d7 -transform-image.assoc-name.display-label=\u95a2\u9023\u540d -transform-image.overwrite-copy.display-label=\u4e0a\u66f8\u304d\u30b3\u30d4\u30fc -transform-image.convert-command.display-label=\u5909\u63db\u30b3\u30de\u30f3\u30c9 - -copy.title=\u30b3\u30d4\u30fc -copy.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u3092\u4ed6\u306e\u30b9\u30da\u30fc\u30b9\u306b\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002 -copy.destination-folder.display-label=\u5b9b\u5148\u30d5\u30a9\u30eb\u30c0 -copy.assoc-type.display-label=\u95a2\u9023\u30bf\u30a4\u30d7 -copy.assoc-name.display-label=\u95a2\u9023\u540d -copy.deep-copy.display-label=\u6df1\u3044\u30b3\u30d4\u30fc -copy.overwrite-copy.display-label=\u4e0a\u66f8\u304d\u30b3\u30d4\u30fc - -move.title=\u79fb\u52d5 -move.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u3092\u4ed6\u306e\u30b9\u30da\u30fc\u30b9\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002 -move.destination-folder.display-label=\u5b9b\u5148\u30d5\u30a9\u30eb\u30c0 -move.assoc-type.display-label=\u95a2\u9023\u30bf\u30a4\u30d7 -move.assoc-name.display-label=\u95a2\u9023\u540d - -mail.title=E\u30e1\u30fc\u30eb\u9001\u4fe1 -mail.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u30de\u30c3\u30c1\u3059\u308b\u6642\u306b\u3001\u30e6\u30fc\u30b6\u306e\u30ea\u30b9\u30c8\u306bE\u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002 -mail.to.display-label=\u5b9b\u5148 -mail.to_many.display-label=\u5b9b\u5148 -mail.subject.display-label=\u4ef6\u540d -mail.text.display-label=\u672c\u6587 -mail.from.display-label=\u5dee\u51fa\u4eba -mail.template.display-label=E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -check-in.title=\u30c1\u30a7\u30c3\u30af\u30a4\u30f3 -check-in.description=\u30de\u30c3\u30c1\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30c1\u30a7\u30c3\u30af\u30a4\u30f3\u3057\u307e\u3059\u3002 -check-in.description.display-label=\u8aac\u660e -check-in.minorChange.display-label=\u5c0f\u3055\u306a\u5909\u66f4 - -check-out.title=\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8 -check-out.description=\u30de\u30c3\u30c1\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002 -check-out.destination-folder.display-label=\u5b9b\u5148\u30d5\u30a9\u30eb\u30c0 -check-out.assoc-type.display-label=\u95a2\u9023\u30bf\u30a4\u30d7 -check-out.assoc-name.display-label=\u95a2\u9023\u540d - -set-property-value.title=\u5c5e\u6027\u5024\u306e\u8a2d\u5b9a -set-property-value.description=\u4efb\u610f\u306e\u5024\u306b\u5c5e\u6027\u306e\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 -set-property-value.property.display-label=\u5c5e\u6027 -set-property-value.value.display-label=\u5024 - -import.title=\u30a4\u30f3\u30dd\u30fc\u30c8 -import.description=Alfresco\u30b3\u30f3\u30c6\u30f3\u30c4\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002 -import.encoding.display-label=\u30b3\u30fc\u30c9\u5316 -import.destination.display-label=\u5b9b\u5148 - -extract-metadata.title=\u5171\u901a\u5c5e\u6027\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u62bd\u51fa -extract-metadata.description=\u5171\u901a\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30a4\u30d7\u304b\u3089\u30bf\u30a4\u30c8\u30eb\u3001\u4f5c\u6210\u8005\u3001\u8aac\u660e\u7b49\u306e\u5c5e\u6027\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002 - -specialise-type.title=\u30bf\u30a4\u30d7\u3092\u7279\u6b8a\u5316\u3059\u308b -specialise-type.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u3092\u7279\u5b9a\u30bf\u30a4\u30d7\u306b\u7279\u6b8a\u5316\u3057\u307e\u3059\u3002 -specialise-type.type-name.display-label=\u30bf\u30a4\u30d7 - -export.title=\u30b9\u30da\u30fc\u30b9\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 -export.description=\u30b9\u30da\u30fc\u30b9\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u305d\u306e\u5b50\u3092Alfresco\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002 -export.package.description=\u30b9\u30da\u30fc\u30b9 ''{0}''\u306eAlfresco\u30b3\u30f3\u30c6\u30f3\u30c4\u30d1\u30c3\u30b1\u30fc\u30b8\u3002 -export.root.package.description=\u30ea\u30dd\u30b8\u30c8\u30ea\u5168\u4f53\u306eAlfresco\u30b3\u30f3\u30c6\u30f3\u30c4\u30d1\u30c3\u30b1\u30fc\u30b8\u3002 -export.store.package.description=\u30b9\u30c8\u30a2''{0}''\u306eAlfresco\u30ea\u30dd\u30b8\u30c8\u30ea\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3002 -export.generic.package.description=Alfresco\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3002 -export.package.error=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u7528\u306e\u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 - -script.title=\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u5b9f\u884c -script.description=\u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u3084\u30d5\u30a9\u30eb\u30c0\u306e\u4f5c\u6210\u306a\u3069\u3001\u30bf\u30b9\u30af\u3092\u5b9f\u65bd\u3059\u308bJavaScript\u30d5\u30a1\u30a4\u30eb\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 -script.script-ref.display-label=\u30b9\u30af\u30ea\u30d7\u30c8 - -counter.title=\u30ab\u30a6\u30f3\u30bf\u306e\u5897\u52a0 -counter.counter=\u30a2\u30a4\u30c6\u30e0\u306e\u30ab\u30a6\u30f3\u30bf\u306e\u5c5e\u6027\u3092\u5897\u52a0\u3057\u307e\u3059\u3002 - -execute-all-rules.title=\u5168\u30eb\u30fc\u30eb\u306e\u5b9f\u884c -execute-all-rules.description=\u5b50\u30a2\u30a4\u30c6\u30e0\u3067\u3059\u3079\u3066\u306e\u30eb\u30fc\u30eb\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002 - -start-workflow.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u958b\u59cb -start-workflow.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u306b\u5bfe\u3057\u3066\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u59cb\u3057\u307e\u3059\u3002 -start-workflow.workflowName.display-label=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u540d -start-workflow.endStartTask.display-label=\u30bf\u30b9\u30af -start-workflow.startTaskTransition.display-label=\u9077\u79fb - -# WCM Actions - -simple-avm-submit.title=\u5358\u7d14\u306a\u76f4\u63a5\u9001\u4fe1 -simple-avm-submit.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u306e\u3088\u308a\u65b0\u3057\u3044\u30ce\u30fc\u30c9\u304c\u5bfe\u5fdc\u3059\u308b\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u306b\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002 - -simple-avm-promote.title=\u5358\u7d14\u306a\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3 -simple-avm-promote.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u306e\u3088\u308a\u65b0\u3057\u3044\u30ce\u30fc\u30c9\u3092\u6307\u5b9a\u3055\u308c\u305f\u30bf\u30fc\u30b2\u30c3\u30c8\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u306b\u30d7\u30ed\u30e2\u30fc\u30c8\u3057\u307e\u3059\u3002 -simple-avm-promote.target-store.display-label=\u30bf\u30fc\u30b2\u30c3\u30c8AVM\u30b9\u30c8\u30a2\u540d\u3002 - -avm-revert-store.title=\u30b9\u30c8\u30a2\u306b\u5358\u4e00\u30ce\u30fc\u30c9\u3092\u623b\u3057\u307e\u3059\u3002 -avm-revert-store.description=\u5f15\u6570\u30ce\u30fc\u30c9\u4ee5\u4e0b\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u304c\u4ee5\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u623b\u308a\u307e\u3059\u3002 -avm-revert-store.version.display-label=\u4ee5\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3002 - -avm-revert-list.title=\u30ce\u30fc\u30c9\u306e\u30ea\u30b9\u30c8\u3092\u30b9\u30c8\u30a2\u306b\u623b\u3057\u307e\u3059\u3002 -avm-revert-list.description=\u30ea\u30b9\u30c8\u306b\u542b\u307e\u308c\u308b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u5143\u306b\u623b\u3057\u307e\u3059\u3002 -avm-revert-list.version.display-label=\u4ee5\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3002 -avm-revert-list.node-list.display-label=\u5fa9\u5e30\u30ce\u30fc\u30c9\u306e\u6587\u5b57\u5217\u30a8\u30f3\u30b3\u30fc\u30c9\u30ea\u30b9\u30c8\u3002 -avm-revert-list.flatten.display-label=\u5fa9\u5e30\u5f8c\u306b\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30b9\u30c8\u30a2\u3078\u5c55\u958b\u3057\u307e\u3059\u3002 -avm-revert-list.store.display-label=\u5fa9\u5e30\u3059\u308b\u30b9\u30c8\u30a2\u306e\u540d\u524d\uff08\u5c55\u958b\u6642\u306e\u307f\u5fc5\u8981\uff09\u3002 -avm-revert-list.staging.display-label=\u5c55\u958b\u3059\u308b\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30b9\u30c8\u30a2\u306e\u540d\u524d\u3002 -avm-revert-list.flatten-path.display-label=\u5c55\u958b\u3059\u308b\u30b9\u30c8\u30a2\u306e\u76f8\u5bfe\u30d1\u30b9\u3002 - -avm-revert-to-version.title=\u30ce\u30fc\u30c9\u3092\u7279\u5b9a\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u623b\u3057\u307e\u3059\u3002 -avm-revert-to-version.description=\u6307\u5b9a\u30ce\u30fc\u30c9\u3092\u7279\u5b9a\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u623b\u3057\u307e\u3059\u3002 -avm-revert-to-version.to-revert.display-label=\u5fa9\u5e30\u30d0\u30fc\u30b8\u30e7\u30f3\u306eAVM\u30ce\u30fc\u30c9\u8a18\u8ff0\u5b50\u3002 - -avm-undo-list.title=\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u306b\u900f\u660e\u306a\u30b9\u30c8\u30a2\u306b\u30ce\u30fc\u30c9\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 -avm-undo-list.description=\u30e6\u30fc\u30b6\u306e\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u3067\u306e\u30df\u30b9\u3092\u53d6\u308a\u6d88\u3057\u307e\u3059\u3002 -avm-undo-list.node-list.display-label=\u5fa9\u5e30\u30ce\u30fc\u30c9\u306e\u6587\u5b57\u5217\u30a8\u30f3\u30b3\u30fc\u30c9\u30ea\u30b9\u30c8\u3002 - -avm-deploy-website.title=Web\u30b5\u30a4\u30c8\u3092\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002 -avm-deploy-website.description=Web\u30b5\u30a4\u30c8\u304c\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d0\u306b\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u307e\u3059\u3002 -avm-deploy-website.webproject.display-label=\u30c7\u30d7\u30ed\u30a4\u5143\u306eWeb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30ce\u30fc\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3002 -avm-deploy-website.server.display-label=\u30c7\u30d7\u30ed\u30a4\u5148\u306e\u30c7\u30d7\u30ed\u30a4\u30b5\u30fc\u30d0\u306e\u30ce\u30fc\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3002 -avm-deploy-website.attempt.display-label=\u3053\u306e\u30c7\u30d7\u30ed\u30a4\u3092\u69cb\u6210\u3059\u308b\u30c7\u30d7\u30ed\u30a4\u8a66\u884c\u306e\u30ce\u30fc\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3002 -avm-deploy-website.callback.display-label=DeploymentCallback\u30ea\u30b9\u30ca\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3002 -avm-deploy-website.delay.display-label=\u30c7\u30d7\u30ed\u30a4\u958b\u59cb\u306b\u9069\u7528\u3055\u308c\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u9045\u5ef6\u3002 - -start-avm-workflow.title=WCM\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u958b\u59cb -start-avm-workflow.description=AVM\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4e88\u671f\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u958b\u59cb -start-avm-workflow.store-name.display-label=\u958b\u59cb\u30bf\u30b9\u30af\u306e\u30b9\u30c8\u30a2\u540d -start-avm-workflow.workflow-name.display-label=\u8d77\u52d5\u3059\u308bWCM\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u540d\u524d\u3002 - -copy-to-web-project.title=\u30a2\u30a4\u30c6\u30e0\u3092Web\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u30b3\u30d4\u30fc -copy-to-web-project.description=\u30de\u30c3\u30c1\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u3092Web\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5185\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e\u3059\u3002 - -create-version.title=\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4f5c\u6210 -create-version.description=\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059 -create-version.description.display-label=\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8aac\u660e -create-version.minor-change.display-label=\u5927\u304d\u306a\u5909\u66f4 diff --git a/config/alfresco/messages/action-service_de_DE.properties b/config/alfresco/messages/action-service_de_DE.properties deleted file mode 100755 index 7b7467bf9a..0000000000 --- a/config/alfresco/messages/action-service_de_DE.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Action service externalised display strings - -compare_property_value_evaluator.invalid_operation=Der Vorgang {0} kann nicht auf eine Eigenschaft des Typs {1} angewandt werden. -compare_property_value_evaluator.no_content_property=Es muss eine Inhaltseigenschaft angegeben werden, wenn mit einer Eigenschaft des Typs Inhalt verglichen wird. -numeric_property_value_comparator.invalid_operation=Der Vorgang {0} kann nicht auf eine numerische Eigenschaft angewandt werden. -text_property_value_comparator.invalid_operation=Der Vorgang {0} kann nicht auf eine Texteigenschaft angewandt werden. -date_property_value_comparator.invalid_operation=Der Vorgang {0} kann nicht auf eine Datumseigenschaft angewandt werden. -compare_mime_type_evaluator.not_a_content_type=Die angegebene Eigenschaft ist nicht vom Typ Inhalt, so dass MimeType nicht verglichen werden kann. -compare_mime_type_evaluator.no_property_definition_found=F\u00fcr die angegebene Eigenschaft kann keine Definition gefunden werden, so dass MimeType nicht verglichen werden kann. - diff --git a/config/alfresco/messages/action-service_es_ES.properties b/config/alfresco/messages/action-service_es_ES.properties deleted file mode 100755 index 1ee8ca2d74..0000000000 --- a/config/alfresco/messages/action-service_es_ES.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Action service externalised display strings - -compare_property_value_evaluator.invalid_operation=La operaci\u00f3n {0} no se puede aplicar a una propiedad de tipo {1}. -compare_property_value_evaluator.no_content_property=Debe especificarse una propiedad de contenido al comparar con una propiedad de tipo de contenido. -numeric_property_value_comparator.invalid_operation=La operaci\u00f3n {0} no se puede aplicar a una propiedad num\u00e9rica. -text_property_value_comparator.invalid_operation=La operaci\u00f3n {0} no se puede aplicar a una propiedad de texto. -date_property_value_comparator.invalid_operation=La operaci\u00f3n {0} no se puede aplicar a una propiedad de fecha. -compare_mime_type_evaluator.not_a_content_type=La propiedad especificada no es un tipo de contenido raz\u00f3n por la cual un tipo MIME no es comparable. -compare_mime_type_evaluator.no_property_definition_found=No se puede encontrar una definici\u00f3n para la propiedad especificada raz\u00f3n por la cual un tipo MIME no es comparable. diff --git a/config/alfresco/messages/action-service_fr_FR.properties b/config/alfresco/messages/action-service_fr_FR.properties deleted file mode 100755 index f5e141ebc0..0000000000 --- a/config/alfresco/messages/action-service_fr_FR.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Action service externalised display strings - -compare_property_value_evaluator.invalid_operation=L'op\u00e9ration {0} ne peut \u00eatre appliqu\u00e9e \u00e0 la propri\u00e9t\u00e9 de type {1}. -compare_property_value_evaluator.no_content_property=Une propri\u00e9t\u00e9 de contenu doit \u00eatre sp\u00e9cifi\u00e9e lors de la comparaison avec une propri\u00e9t\u00e9 de type contenu. -numeric_property_value_comparator.invalid_operation=L'op\u00e9ration {0} ne peut \u00eatre appliqu\u00e9e \u00e0 une propri\u00e9t\u00e9 de type num\u00e9rique. -text_property_value_comparator.invalid_operation=L'op\u00e9ration {0} ne peut \u00eatre appliqu\u00e9e \u00e0 une propri\u00e9t\u00e9 de type texte. -date_property_value_comparator.invalid_operation=L'op\u00e9ration {0} ne peut \u00eatre appliqu\u00e9e \u00e0 une propri\u00e9t\u00e9 de type date. -compare_mime_type_evaluator.not_a_content_type=La propri\u00e9t\u00e9 sp\u00e9cifi\u00e9e n'est pas de type contenu.Le type MIME ne peut donc pas \u00eatre compar\u00e9. -compare_mime_type_evaluator.no_property_definition_found=Aucune d\u00e9finition n'a \u00e9t\u00e9 trouv\u00e9e pour la propri\u00e9t\u00e9 sp\u00e9cifi\u00e9e.Le type MIME ne peut donc pas \u00eatre compar\u00e9. diff --git a/config/alfresco/messages/action-service_it_IT.properties b/config/alfresco/messages/action-service_it_IT.properties deleted file mode 100755 index 72f8707d1a..0000000000 --- a/config/alfresco/messages/action-service_it_IT.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Action service externalised display strings - -compare_property_value_evaluator.invalid_operation=L'operazione {0} non pu\u00f2 essere applicata a una propriet\u00e0 di tipo {1}. -compare_property_value_evaluator.no_content_property=Per un confronto con una propriet\u00e0 di tipo contenuto, \u00e8 necessario specificare una propriet\u00e0 di contenuto. -numeric_property_value_comparator.invalid_operation=L'operazione {0} non pu\u00f2 essere applicata a una propriet\u00e0 numerica. -text_property_value_comparator.invalid_operation=L'operazione {0} non pu\u00f2 essere applicata a una propriet\u00e0 di testo. -date_property_value_comparator.invalid_operation=L'operazione {0} non pu\u00f2 essere applicata a una propriet\u00e0 di data. -compare_mime_type_evaluator.not_a_content_type=Impossibile confrontare il mimetype perch\u00e9 la propriet\u00e0 specificata non \u00e8 di tipo contenuto. -compare_mime_type_evaluator.no_property_definition_found=Impossibile confrontare il mimetype perch\u00e9 non \u00e8 stata trovata alcuna definizione per la propriet\u00e0 specificata. diff --git a/config/alfresco/messages/action-service_ja.properties b/config/alfresco/messages/action-service_ja.properties deleted file mode 100755 index 525f4b7cec..0000000000 --- a/config/alfresco/messages/action-service_ja.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Action service externalised display strings - -compare_property_value_evaluator.invalid_operation=\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3{0}\u306f\u30bf\u30a4\u30d7{1}\u306e\u5c5e\u6027\u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -compare_property_value_evaluator.no_content_property=\u30bf\u30a4\u30d7\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5c5e\u6027\u3068\u6bd4\u8f03\u3059\u308b\u5834\u5408\u306f\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5c5e\u6027\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u3044\u3051\u307e\u305b\u3093\u3002 -numeric_property_value_comparator.invalid_operation=\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3{0}\u306f\u6570\u5024\u578b\u5c5e\u6027\u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -text_property_value_comparator.invalid_operation=\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3{0}\u306f\u30c6\u30ad\u30b9\u30c8\u578b\u5c5e\u6027\u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -date_property_value_comparator.invalid_operation=\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3{0}\u306f\u65e5\u4ed8\u578b\u5c5e\u6027\u306b\u9069\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -compare_mime_type_evaluator.not_a_content_type=\u6307\u5b9a\u3057\u305f\u5c5e\u6027\u306f\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30a4\u30d7\u3067\u306f\u306a\u3044\u306e\u3067MIME\u30bf\u30a4\u30d7\u3068\u6bd4\u8f03\u3067\u304d\u307e\u305b\u3093\u3002 -compare_mime_type_evaluator.no_property_definition_found=\u6307\u5b9a\u3057\u305f\u5c5e\u6027\u306e\u5b9a\u7fa9\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u305f\u3081MIME\u30bf\u30a4\u30d7\u3068\u6bd4\u8f03\u3067\u304d\u307e\u305b\u3093\u3002 diff --git a/config/alfresco/messages/application-model_de_DE.properties b/config/alfresco/messages/application-model_de_DE.properties deleted file mode 100755 index 1a53f4a6a9..0000000000 --- a/config/alfresco/messages/application-model_de_DE.properties +++ /dev/null @@ -1,43 +0,0 @@ -# Display labels for System Model - -app_applicationmodel.description=Alfresco Anwendungsmodell - -app_applicationmodel.type.app_glossary.title=Datenverzeichnis -app_applicationmodel.type.app_glossary.description=Datenverzeichnis - -app_applicationmodel.type.app_configurations.title=Konfigurationen -app_applicationmodel.type.app_configurations.description=Konfigurationen - -app_applicationmodel.aspect.app_uifacets.title=UI Facets -app_applicationmodel.aspect.app_uifacets.description=UI Facets -app_applicationmodel.property.app_icon.title=Icon -app_applicationmodel.property.app_icon.description=Icon - -app_applicationmodel.aspect.app_inlineeditable.title=Inline editierbar -app_applicationmodel.aspect.app_inlineeditable.description=Inline editierbar -app_applicationmodel.property.app_editInline.title=Inline bearbeiten -app_applicationmodel.property.app_editInline.description=Inline bearbeiten - -app_applicationmodel.aspect.app_workflow.title=Workflow -app_applicationmodel.aspect.app_workflow.description=Workflow - -app_applicationmodel.aspect.app_simpleworkflow.title=Workflow -app_applicationmodel.aspect.app_simpleworkflow.description=Workflow -app_applicationmodel.property.app_approveStep.title=Schritt zustimmen -app_applicationmodel.property.app_approveStep.description=Schritt zustimmen -app_applicationmodel.property.app_approveFolder.title=Ordner zustimmen -app_applicationmodel.property.app_approveFolder.description=Ordner zustimmen -app_applicationmodel.property.app_approveMove.title=Verschieben oder kopieren -app_applicationmodel.property.app_approveMove.description=Verschieben oder kopieren -app_applicationmodel.property.app_rejectStep.title=Schritt ablehnen -app_applicationmodel.property.app_rejectStep.description=Schritt ablehnen -app_applicationmodel.property.app_rejectFolder.title=Ordner ablehnen -app_applicationmodel.property.app_rejectFolder.description=Ordner ablehnen -app_applicationmodel.property.app_rejectMove.title=Verschieben oder kopieren -app_applicationmodel.property.app_rejectMove.description=Verschieben oder kopieren - -app_applicationmodel.aspect.app_configurable.title=Konfigurierbar -app_applicationmodel.aspect.app_configurable.description=Konfigurierbar -app_applicationmodel.association.app_configurations.title=Konfigurationen -app_applicationmodel.association.app_configurations.description=Konfigurationen - diff --git a/config/alfresco/messages/application-model_es_ES.properties b/config/alfresco/messages/application-model_es_ES.properties deleted file mode 100755 index be8bd9c59b..0000000000 --- a/config/alfresco/messages/application-model_es_ES.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Display labels for System Model - -app_applicationmodel.description=Modelo de aplicaci\u00f3n Alfresco - -app_applicationmodel.type.app_glossary.title=Diccionario de datos -app_applicationmodel.type.app_glossary.description=Diccionario de datos - -app_applicationmodel.type.app_configurations.title=Configuraciones -app_applicationmodel.type.app_configurations.description=Configuraciones - -app_applicationmodel.aspect.app_uifacets.title=Facetas de IU -app_applicationmodel.aspect.app_uifacets.description=Facetas de IU -app_applicationmodel.property.app_icon.title=Icono -app_applicationmodel.property.app_icon.description=Icono - -app_applicationmodel.aspect.app_inlineeditable.title=Editable en l\u00ednea -app_applicationmodel.aspect.app_inlineeditable.description=Editable en l\u00ednea -app_applicationmodel.property.app_editInline.title=Editar en l\u00ednea -app_applicationmodel.property.app_editInline.description=Editar en l\u00ednea - -app_applicationmodel.aspect.app_workflow.title=Flujo de trabajo -app_applicationmodel.aspect.app_workflow.description=Flujo de trabajo - -app_applicationmodel.aspect.app_simpleworkflow.title=Flujo de trabajo -app_applicationmodel.aspect.app_simpleworkflow.description=Flujo de trabajo -app_applicationmodel.property.app_approveStep.title=Aprobar paso -app_applicationmodel.property.app_approveStep.description=Aprobar paso -app_applicationmodel.property.app_approveFolder.title=Aprobar carpeta -app_applicationmodel.property.app_approveFolder.description=Aprobar carpeta -app_applicationmodel.property.app_approveMove.title=Mover o copiar -app_applicationmodel.property.app_approveMove.description=Mover o copiar -app_applicationmodel.property.app_rejectStep.title=Rechazar paso -app_applicationmodel.property.app_rejectStep.description=Rechazar paso -app_applicationmodel.property.app_rejectFolder.title=Rechazar carpeta -app_applicationmodel.property.app_rejectFolder.description=Rechazar carpeta -app_applicationmodel.property.app_rejectMove.title=Mover o copiar -app_applicationmodel.property.app_rejectMove.description=Mover o copiar - -app_applicationmodel.aspect.app_configurable.title=Configurable -app_applicationmodel.aspect.app_configurable.description=Configurable -app_applicationmodel.association.app_configurations.title=Configuraciones -app_applicationmodel.association.app_configurations.description=Configuraciones diff --git a/config/alfresco/messages/application-model_fr_FR.properties b/config/alfresco/messages/application-model_fr_FR.properties deleted file mode 100755 index 653d5c4e95..0000000000 --- a/config/alfresco/messages/application-model_fr_FR.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Display labels for System Model - -app_applicationmodel.description=Mod\u00e8le d'application Alfresco - -app_applicationmodel.type.app_glossary.title=Dictionnaire de donn\u00e9es -app_applicationmodel.type.app_glossary.description=Dictionnaire de donn\u00e9es - -app_applicationmodel.type.app_configurations.title=Configurations -app_applicationmodel.type.app_configurations.description=Configurations - -app_applicationmodel.aspect.app_uifacets.title=Facettes de l'Interface -app_applicationmodel.aspect.app_uifacets.description=Facettes de l'Interface -app_applicationmodel.property.app_icon.title=Ic\u00f4ne -app_applicationmodel.property.app_icon.description=Ic\u00f4ne - -app_applicationmodel.aspect.app_inlineeditable.title=Supporte l'\u00e9dition en ligne -app_applicationmodel.aspect.app_inlineeditable.description=Supporte l'\u00e9dition en ligne -app_applicationmodel.property.app_editInline.title=Editer en Ligne -app_applicationmodel.property.app_editInline.description=Editer en Ligne - -app_applicationmodel.aspect.app_workflow.title=Flux de travail -app_applicationmodel.aspect.app_workflow.description=Flux de travail - -app_applicationmodel.aspect.app_simpleworkflow.title=Flux de travail -app_applicationmodel.aspect.app_simpleworkflow.description=Flux de travail -app_applicationmodel.property.app_approveStep.title=Etape d'Approbation -app_applicationmodel.property.app_approveStep.description=Etape d'Approbation -app_applicationmodel.property.app_approveFolder.title=Dossier d'Approbation -app_applicationmodel.property.app_approveFolder.description=Dossier d'Approbation -app_applicationmodel.property.app_approveMove.title=D\u00e9placer ou Copier -app_applicationmodel.property.app_approveMove.description=D\u00e9placer ou Copier -app_applicationmodel.property.app_rejectStep.title=Etape de Rejet -app_applicationmodel.property.app_rejectStep.description=Etape de Rejet -app_applicationmodel.property.app_rejectFolder.title=Dossier des Rejets -app_applicationmodel.property.app_rejectFolder.description=Dossier des Rejets -app_applicationmodel.property.app_rejectMove.title=D\u00e9placer ou Copier -app_applicationmodel.property.app_rejectMove.description=D\u00e9placer ou Copier - -app_applicationmodel.aspect.app_configurable.title=Configurable -app_applicationmodel.aspect.app_configurable.description=Configurable -app_applicationmodel.association.app_configurations.title=Configurations -app_applicationmodel.association.app_configurations.description=Configurations diff --git a/config/alfresco/messages/application-model_it_IT.properties b/config/alfresco/messages/application-model_it_IT.properties deleted file mode 100755 index 48e8bdf3f5..0000000000 --- a/config/alfresco/messages/application-model_it_IT.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Display labels for System Model - -app_applicationmodel.description=Modello di applicazione Alfresco - -app_applicationmodel.type.app_glossary.title=Dizionario dei dati -app_applicationmodel.type.app_glossary.description=Dizionario dei dati - -app_applicationmodel.type.app_configurations.title=Configurazioni -app_applicationmodel.type.app_configurations.description=Configurazioni - -app_applicationmodel.aspect.app_uifacets.title=UI Facets -app_applicationmodel.aspect.app_uifacets.description=UI Facets -app_applicationmodel.property.app_icon.title=Icona -app_applicationmodel.property.app_icon.description=Icona - -app_applicationmodel.aspect.app_inlineeditable.title=Inline Editable -app_applicationmodel.aspect.app_inlineeditable.description=Inline Editable -app_applicationmodel.property.app_editInline.title=Modifica in linea -app_applicationmodel.property.app_editInline.description=Modifica in linea - -app_applicationmodel.aspect.app_workflow.title=Workflow -app_applicationmodel.aspect.app_workflow.description=Workflow - -app_applicationmodel.aspect.app_simpleworkflow.title=Workflow -app_applicationmodel.aspect.app_simpleworkflow.description=Workflow -app_applicationmodel.property.app_approveStep.title=Passo di approvazione -app_applicationmodel.property.app_approveStep.description=Passo di approvazione -app_applicationmodel.property.app_approveFolder.title=Cartella di approvazione -app_applicationmodel.property.app_approveFolder.description=Cartella di approvazione -app_applicationmodel.property.app_approveMove.title=Sposta o copia -app_applicationmodel.property.app_approveMove.description=Sposta o copia -app_applicationmodel.property.app_rejectStep.title=Passo di rifiuto -app_applicationmodel.property.app_rejectStep.description=Passo di rifiuto -app_applicationmodel.property.app_rejectFolder.title=Cartella di rifiuto -app_applicationmodel.property.app_rejectFolder.description=Cartella di rifiuto -app_applicationmodel.property.app_rejectMove.title=Sposta o copia -app_applicationmodel.property.app_rejectMove.description=Sposta o copia - -app_applicationmodel.aspect.app_configurable.title=Configurable -app_applicationmodel.aspect.app_configurable.description=Configurable -app_applicationmodel.association.app_configurations.title=Configurazioni -app_applicationmodel.association.app_configurations.description=Configurazioni diff --git a/config/alfresco/messages/application-model_ja.properties b/config/alfresco/messages/application-model_ja.properties deleted file mode 100755 index 15d13aaeb8..0000000000 --- a/config/alfresco/messages/application-model_ja.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Display labels for System Model - -app_applicationmodel.description=Alfresco\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30e2\u30c7\u30eb - -app_applicationmodel.type.app_glossary.title=\u30c7\u30fc\u30bf\u8f9e\u66f8 -app_applicationmodel.type.app_glossary.description=\u30c7\u30fc\u30bf\u8f9e\u66f8 - -app_applicationmodel.type.app_configurations.title=\u8a2d\u5b9a -app_applicationmodel.type.app_configurations.description=\u8a2d\u5b9a - -app_applicationmodel.aspect.app_uifacets.title=UI\u30d5\u30a1\u30bb\u30c3\u30c8 -app_applicationmodel.aspect.app_uifacets.description=UI\u30d5\u30a1\u30bb\u30c3\u30c8 -app_applicationmodel.property.app_icon.title=\u30a2\u30a4\u30b3\u30f3 -app_applicationmodel.property.app_icon.description=\u30a2\u30a4\u30b3\u30f3 - -app_applicationmodel.aspect.app_inlineeditable.title=\u30a4\u30f3\u30e9\u30a4\u30f3\u7de8\u96c6\u5bfe\u8c61 -app_applicationmodel.aspect.app_inlineeditable.description=\u30a4\u30f3\u30e9\u30a4\u30f3\u7de8\u96c6\u5bfe\u8c61 -app_applicationmodel.property.app_editInline.title=\u30a4\u30f3\u30e9\u30a4\u30f3\u7de8\u96c6 -app_applicationmodel.property.app_editInline.description=\u30a4\u30f3\u30e9\u30a4\u30f3\u7de8\u96c6 - -app_applicationmodel.aspect.app_workflow.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc -app_applicationmodel.aspect.app_workflow.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc - -app_applicationmodel.aspect.app_simpleworkflow.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc -app_applicationmodel.aspect.app_simpleworkflow.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc -app_applicationmodel.property.app_approveStep.title=\u627f\u8a8d\u30b9\u30c6\u30c3\u30d7 -app_applicationmodel.property.app_approveStep.description=\u627f\u8a8d\u30b9\u30c6\u30c3\u30d7 -app_applicationmodel.property.app_approveFolder.title=\u627f\u8a8d\u30d5\u30a9\u30eb\u30c0 -app_applicationmodel.property.app_approveFolder.description=\u627f\u8a8d\u30d5\u30a9\u30eb\u30c0 -app_applicationmodel.property.app_approveMove.title=\u79fb\u52d5\u307e\u305f\u306f\u30b3\u30d4\u30fc -app_applicationmodel.property.app_approveMove.description=\u79fb\u52d5\u307e\u305f\u306f\u30b3\u30d4\u30fc -app_applicationmodel.property.app_rejectStep.title=\u62d2\u5426\u30b9\u30c6\u30c3\u30d7 -app_applicationmodel.property.app_rejectStep.description=\u62d2\u5426\u30b9\u30c6\u30c3\u30d7 -app_applicationmodel.property.app_rejectFolder.title=\u62d2\u5426\u30d5\u30a9\u30eb\u30c0 -app_applicationmodel.property.app_rejectFolder.description=\u62d2\u5426\u30d5\u30a9\u30eb\u30c0 -app_applicationmodel.property.app_rejectMove.title=\u79fb\u52d5\u307e\u305f\u306f\u30b3\u30d4\u30fc -app_applicationmodel.property.app_rejectMove.description=\u79fb\u52d5\u307e\u305f\u306f\u30b3\u30d4\u30fc - -app_applicationmodel.aspect.app_configurable.title=\u8a2d\u5b9a\u53ef\u80fd -app_applicationmodel.aspect.app_configurable.description=\u8a2d\u5b9a\u53ef\u80fd -app_applicationmodel.association.app_configurations.title=\u8a2d\u5b9a -app_applicationmodel.association.app_configurations.description=\u8a2d\u5b9a diff --git a/config/alfresco/messages/avm-messages_de_DE.properties b/config/alfresco/messages/avm-messages_de_DE.properties deleted file mode 100755 index 59444cb98a..0000000000 --- a/config/alfresco/messages/avm-messages_de_DE.properties +++ /dev/null @@ -1,8 +0,0 @@ -# AVM related messages - -expiredcontent.workflow.title=Abgelaufener Inhalt in "{0}" -avmlockservice.locked=Sie haben keinen Zugriff auf "{0}"; "{0}"ist derzeit durch Benutzer "{1}" gesperrt. -testserver.taken=Der von Ihnen gew\u00e4hlte Testserver "{0}" wurde einem anderen Benutzer zugewiesen. Falls m\u00f6glich bitte einen anderen Server ausw\u00e4hlen und noch einmal versuchen. - -avm.cycle.create=Zyklus w\u00fcrde erstellt werden. -avm.cycle.lookup=Zyklus in Lookup. diff --git a/config/alfresco/messages/avm-messages_es_ES.properties b/config/alfresco/messages/avm-messages_es_ES.properties deleted file mode 100755 index c4bfef162b..0000000000 --- a/config/alfresco/messages/avm-messages_es_ES.properties +++ /dev/null @@ -1,8 +0,0 @@ -# AVM related messages - -expiredcontent.workflow.title=Contenido vencido en ''{0}'' -avmlockservice.locked=Usted no tiene acceso a ''{0}''; actualmente est\u00e1 bloqueado por el usuario {1}. -testserver.taken=El servidor de test ''{0}'' que ha seleccionado ha sido asignado a otro usuario, si es posible, seleccione un servidor diferente y vuelva a intentar. - -avm.cycle.create=El ciclo ser\u00eda creado. -avm.cycle.lookup=Ciclo en examen. diff --git a/config/alfresco/messages/avm-messages_fr_FR.properties b/config/alfresco/messages/avm-messages_fr_FR.properties deleted file mode 100755 index 7275614a9f..0000000000 --- a/config/alfresco/messages/avm-messages_fr_FR.properties +++ /dev/null @@ -1,8 +0,0 @@ -# AVM related messages - -expiredcontent.workflow.title=Contenu expir\u00e9 dans ''{0}'' -avmlockservice.locked=Vous n'avez pas acc\u00e8s \u00e0 "{0}'' car celui-ci est actuellement verrouill\u00e9 par l'utilisateur ''{1}''. -testserver.taken=Le serveur de test ''{0}'' s\u00e9lectionn\u00e9 a \u00e9t\u00e9 attribu\u00e9 \u00e0 un autre utilisateur. Si possible, s\u00e9lectionner un autre serveur et r\u00e9essayer. - -avm.cycle.create=Un cycle sera cr\u00e9\u00e9. -avm.cycle.lookup=Cycle en recherche. diff --git a/config/alfresco/messages/avm-messages_it_IT.properties b/config/alfresco/messages/avm-messages_it_IT.properties deleted file mode 100755 index db58ddb68a..0000000000 --- a/config/alfresco/messages/avm-messages_it_IT.properties +++ /dev/null @@ -1,8 +0,0 @@ -# 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}''. -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. -avm.cycle.lookup=Ciclo nella ricerca. diff --git a/config/alfresco/messages/avm-messages_ja.properties b/config/alfresco/messages/avm-messages_ja.properties deleted file mode 100755 index eca275341b..0000000000 --- a/config/alfresco/messages/avm-messages_ja.properties +++ /dev/null @@ -1,8 +0,0 @@ -# AVM related messages - -expiredcontent.workflow.title=''{0}''\u5185\u306e\u671f\u9650\u5207\u308c\u30b3\u30f3\u30c6\u30f3\u30c4 -avmlockservice.locked=''{0}'' \u3078\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u73fe\u5728\u30e6\u30fc\u30b6 ''{1}'' \u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -testserver.taken=\u9078\u629e\u3057\u305f\u30c6\u30b9\u30c8\u30b5\u30fc\u30d0''{0}''\u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u306b\u3088\u3063\u3066\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059\u3001\u53ef\u80fd\u3067\u3042\u308c\u3070\u4ed6\u306e\u30b5\u30fc\u30d0\u3092\u9078\u629e\u3057\u3066\u518d\u8a66\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -avm.cycle.create=\u30b5\u30a4\u30af\u30eb\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002 -avm.cycle.lookup=\u30b5\u30a4\u30af\u30eb\u306f\u691c\u67fb\u4e2d\u3067\u3059\u3002 diff --git a/config/alfresco/messages/bootstrap-content-template-examples_de_DE.properties b/config/alfresco/messages/bootstrap-content-template-examples_de_DE.properties deleted file mode 100755 index f61aaf2e33..0000000000 --- a/config/alfresco/messages/bootstrap-content-template-examples_de_DE.properties +++ /dev/null @@ -1,14 +0,0 @@ -content.template.calculates_if_the_document=Ermittelt, ob der "lokalisierbar Aspekt" auf das Dokument angewandt wird -content.template.displays_useful_information=Zeigt n\u00fctzliche Informationen \u00fcber das aktuelle Dokument an -content.template.displays_a_list_of_the_documents=Zeigt eine Liste der Dokumente in dem aktuellen Home-Arbeitsbereich des Benutzers an -content.template.displays_a_list_of_spaces=Zeigt eine Liste der R\u00e4ume in dem aktuellen Home-Arbeitsbereich des Benutzers an -content.template.shows_a_simple_summary_page=Zeigt eine einfache zusammenfassende Seite zu dem aktuellen Benutzer und dessen Home-Arbeitsbereich an -content.template.calculates_if_the_document_has=Ermittelt, ob der "\u00fcbersetzbar Aspekt" auf das Dokument angewandt wird -content.template.displays_a_list_of_the_documents_in_the_current_space=Zeigt eine Liste der Dokumente im aktuellen Raum an, die in den letzten 7 Tagen erstellt oder ge\u00e4ndert wurden -content.template.example_of_various_lists=Beispiel verschiedener Listen von Dokumenten, R\u00e4umen und zusammenfassender Informationen \u00fcber den aktuellen Benutzer -content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=Zeigt eine Liste der Dokumente in dem aktuellen Home-Arbeitsbereich des Benutzers an Inhalt des Textdokuments wird inline angezeigt, genau wie JPG-Inhalt als kleine Miniaturansichten. -content.template.displays_the_audit_trail=Zeigt den Audit-Pfad eines Objektes an. -email.template.email_template_for_notifying_users=E-Mail Mustervorlage f\u00fcr Benachrichtigung der Benutzer \u00fcber eine Regel oder Aktion -email.template.email_template_for_notifying_users_of_an_Invite=E-Mail Mustervorlage zur Benachrichtigung der Benutzer \u00fcber eine Einladung in einen Raum oder zu einem Dokument -rss.template.renders_a_valid_rss=Gibt ein g\u00fcltiges RSS2.0 XML-Dokument aus, das die Dokumente im aktuellen Raum anzeigt, die in den letzten 7 Tagen angelegt oder ge\u00e4ndert wurden. Die Mustervorlage sollte vor Anwendung konfiguriert werden, damit der geeignete Server und Ausgang verwendet werden. -rss.template.rss_recent_docs=RSS neueste Dokumente diff --git a/config/alfresco/messages/bootstrap-content-template-examples_es_ES.properties b/config/alfresco/messages/bootstrap-content-template-examples_es_ES.properties deleted file mode 100755 index 5452003003..0000000000 --- a/config/alfresco/messages/bootstrap-content-template-examples_es_ES.properties +++ /dev/null @@ -1,14 +0,0 @@ -content.template.calculates_if_the_document=Calcula si el documento tiene aplicado el aspecto traducible -content.template.displays_useful_information=Muestra informaci\u00f3n \u00fatil sobre el documento actual -content.template.displays_a_list_of_the_documents=Muestra una lista de los documentos en el espacio personal del usuario actual -content.template.displays_a_list_of_spaces=Muestra una lista de espacios en el espacio personal del usuario actual -content.template.shows_a_simple_summary_page=Muestra una p\u00e1gina de resumen sencilla sobre el usuario actual y su espacio personal -content.template.calculates_if_the_document_has=Calcula si el documento tiene aplicado el aspecto traducible -content.template.displays_a_list_of_the_documents_in_the_current_space=Muestra una lista de los documentos creados o modificados los \u00faltimos 7 d\u00edas en el espacio actual -content.template.example_of_various_lists=Ejemplo de varias listas de documentos, espacios e informaci\u00f3n resumida sobre el usuario actual -content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=Muestra una lista de los documentos en el espacio personal del usuario actual. Los contenidos del documento de texto se muestran en l\u00ednea, del mismo modo que los contenidos JPG lo son como im\u00e1genes en miniatura. -content.template.displays_the_audit_trail=Muestra la pista de auditor\u00eda para un objeto. -email.template.email_template_for_notifying_users=Plantilla de correo electr\u00f3nico para notificar a los usuarios una regla o acci\u00f3n -email.template.email_template_for_notifying_users_of_an_Invite=Plantilla de correo electr\u00f3nico para notificar a los usuarios una invitaci\u00f3n a un espacio o documento -rss.template.renders_a_valid_rss=Renderiza un documento RSS2.0 XML v\u00e1lido que muestra los documentos creados o modificados los \u00faltimos 7 d\u00edas en el espacio actual. La plantilla debe estar configurada para utilizar el servidor y el puerto apropiados antes de su uso. -rss.template.rss_recent_docs=Documentos recientes por RSS diff --git a/config/alfresco/messages/bootstrap-content-template-examples_fr_FR.properties b/config/alfresco/messages/bootstrap-content-template-examples_fr_FR.properties deleted file mode 100755 index d00fc8f3ec..0000000000 --- a/config/alfresco/messages/bootstrap-content-template-examples_fr_FR.properties +++ /dev/null @@ -1,14 +0,0 @@ -content.template.calculates_if_the_document=Calcule si l'aspect localisable a \u00e9t\u00e9 appliqu\u00e9 sur le document -content.template.displays_useful_information=Affiche des informations utiles sur le document actuel -content.template.displays_a_list_of_the_documents=Affiche une liste des documents dans l'espace personnel de l'utilisateur actuel -content.template.displays_a_list_of_spaces=Affiche une liste d'espaces dans l'espace personnel de l'utilisateur actuel -content.template.shows_a_simple_summary_page=Affiche une simple page r\u00e9capitulative sur l'utilisateur actuel et son espace personnel -content.template.calculates_if_the_document_has=Calcule si l'aspect traduisible a \u00e9t\u00e9 appliqu\u00e9 sur le document -content.template.displays_a_list_of_the_documents_in_the_current_space=Affiche une liste des documents dans l'espace actuel cr\u00e9\u00e9s ou modifi\u00e9s au cours des 7\u00a0derniers jours -content.template.example_of_various_lists=Exemples de listes de documents, d'espaces et d'informations r\u00e9capitulatives sur l'utilisateur actuel -content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=Affiche une liste des documents dans l'espace personnel de l'utilisateur actuel. Le contenu des documents texte s'affiche en ligne, tout comme le contenu\u00a0JPG sous la forme de petites vignettes miniatures. -content.template.displays_the_audit_trail=Affiche la piste d'audit d'un objet. -email.template.email_template_for_notifying_users=Mod\u00e8le d'e-mail de notification des utilisateurs \u00e0 partir d'une r\u00e8gle ou d'une action -email.template.email_template_for_notifying_users_of_an_Invite=Mod\u00e8le d'e-mail de notification des utilisateurs \u00e0 propos d'une invitation \u00e0 un espace ou \u00e0 un document -rss.template.renders_a_valid_rss=Rend un document\u00a0XML RSS2.0 valide, indiquant les documents de l'espace actuel cr\u00e9\u00e9s ou modifi\u00e9s au cours des 7\u00a0derniers jours. Le mod\u00e8le doit \u00eatre configur\u00e9 de mani\u00e8re \u00e0 utiliser le serveur et le port appropri\u00e9s avant son utilisation. -rss.template.rss_recent_docs=Documents r\u00e9cents\u00a0RSS diff --git a/config/alfresco/messages/bootstrap-content-template-examples_it_IT.properties b/config/alfresco/messages/bootstrap-content-template-examples_it_IT.properties deleted file mode 100755 index cffc15b9ea..0000000000 --- a/config/alfresco/messages/bootstrap-content-template-examples_it_IT.properties +++ /dev/null @@ -1,14 +0,0 @@ -content.template.calculates_if_the_document=Calcola se al documento \u00e8 applicato l'aspetto Localizable -content.template.displays_useful_information=Visualizza informazioni utili sul documento attuale -content.template.displays_a_list_of_the_documents=Visualizza l'elenco dei documenti presenti nello spazio di homepage dell'utente attuale -content.template.displays_a_list_of_spaces=Visualizza l'elenco degli spazi presenti nello spazio di homepage dell'utente attuale -content.template.shows_a_simple_summary_page=Mostra una pagina di sommario semplice riguardante l'utente attuale e il relativo spazio di homepage -content.template.calculates_if_the_document_has=Calcola se al documento \u00e8 applicato l'aspetto Translatable -content.template.displays_a_list_of_the_documents_in_the_current_space=Visualizza l'elenco dei documenti presenti nello spazio attuale creati o modificati negli ultimi 7 giorni -content.template.example_of_various_lists=Esempio con vari elenchi di documenti, spazi e informazioni di sommario riguardanti l'utente attuale -content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=Visualizza l'elenco dei documenti presenti nello spazio di homepage dell'utente attuale. Il contenuto dei documenti in formato testo viene mostrato in linea, il contenuto in formato JPG viene mostrato come immagini in miniatura. -content.template.displays_the_audit_trail=Visualizza l'audit trail di un oggetto. -email.template.email_template_for_notifying_users=Modello di e-mail utilizzato per inviare una notifica agli utenti in base a una regola o un'azione -email.template.email_template_for_notifying_users_of_an_Invite=Modello di e-mail utilizzato per inviare una notifica agli utenti riguardo a un invito a uno spazio o un documento -rss.template.renders_a_valid_rss=Trasforma un documento XML RSS2.0 valido contenente i documenti presenti nello spazio attuale creati o modificati negli ultimi 7 giorni. Si consiglia di configurare il modello in modo da utilizzare il server e la porta appropriati prima dell'uso. -rss.template.rss_recent_docs=Documenti RSS recenti diff --git a/config/alfresco/messages/bootstrap-content-template-examples_ja.properties b/config/alfresco/messages/bootstrap-content-template-examples_ja.properties deleted file mode 100755 index 29e2d47b79..0000000000 --- a/config/alfresco/messages/bootstrap-content-template-examples_ja.properties +++ /dev/null @@ -1,14 +0,0 @@ -content.template.calculates_if_the_document=\u6587\u66f8\u304c\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u5316\u53ef\u80fd\u30a2\u30b9\u30da\u30af\u30c8\u3092\u9069\u7528\u3057\u305f\u5834\u5408\u306b\u8a08\u7b97\u3057\u307e\u3059 -content.template.displays_useful_information=\u73fe\u5728\u306e\u6587\u66f8\u306b\u95a2\u3059\u308b\u6709\u7528\u306a\u60c5\u5831\u3092\u8868\u793a\u3057\u307e\u3059 -content.template.displays_a_list_of_the_documents=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u306e\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306b\u306e\u6587\u66f8\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059 -content.template.displays_a_list_of_spaces=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u306e\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306b\u30b9\u30da\u30fc\u30b9\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059 -content.template.shows_a_simple_summary_page=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u3068\u305d\u306e\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306b\u95a2\u3059\u308b\u5358\u7d14\u306a\u8981\u7d04\u30da\u30fc\u30b8\u3092\u8868\u793a\u3057\u307e\u3059 -content.template.calculates_if_the_document_has=\u6587\u66f8\u304c\u7ffb\u8a33\u53ef\u80fd\u30a2\u30b9\u30da\u30af\u30c8\u3092\u9069\u7528\u3057\u305f\u5834\u5408\u306b\u8a08\u7b97\u3057\u307e\u3059 -content.template.displays_a_list_of_the_documents_in_the_current_space=\u6700\u8fd17\u65e5\u4ee5\u5185\u306b\u4f5c\u6210\u307e\u305f\u306f\u4fee\u6b63\u3055\u308c\u305f\u73fe\u5728\u306e\u30b9\u30da\u30fc\u30b9\u306b\u3042\u308b\u3001\u6587\u66f8\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059 -content.template.example_of_various_lists=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u306b\u95a2\u3059\u308b\u6587\u66f8\u3001\u30b9\u30da\u30fc\u30b9\u3001\u8981\u7d04\u60c5\u5831\u306e\u3055\u307e\u3056\u307e\u306a\u30ea\u30b9\u30c8\u306e\u30b5\u30f3\u30d7\u30eb -content.template.displays_a_list_of_the_documents_in_the_current_user_Home_Space=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u306e\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306b\u6587\u66f8\u306e\u30ea\u30b9\u30c8\u3092\u8868\u793a\u3057\u307e\u3059\u3002 Jpeg\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u5c0f\u3055\u306a\u30b5\u30e0\u30cd\u30a4\u30eb\u753b\u50cf\u306b\u306a\u308b\u305f\u3081\u3001\u30c6\u30ad\u30b9\u30c8\u6587\u66f8\u30b3\u30f3\u30c6\u30f3\u30c4\u304c\u30a4\u30f3\u30e9\u30a4\u30f3\u8868\u793a\u3055\u308c\u307e\u3059\u3002 -content.template.displays_the_audit_trail=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u76e3\u67fb\u8a3c\u8de1\u3092\u8868\u793a\u3057\u307e\u3059\u3002 -email.template.email_template_for_notifying_users=\u30eb\u30fc\u30eb\u3084\u30a2\u30af\u30b7\u30e7\u30f3\u304b\u3089\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u3059\u308b\u305f\u3081\u306eE\u30e1\u30fc\u30eb\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -email.template.email_template_for_notifying_users_of_an_Invite=\u30b9\u30da\u30fc\u30b9\u3084\u6587\u66f8\u306b\u3001\u62db\u5f85\u3092\u884c\u3063\u305f\u3053\u3068\u3092\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u3059\u308bE\u30e1\u30fc\u30eb\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -rss.template.renders_a_valid_rss=\u6709\u52b9\u306aRSS2.0 XML\u6587\u66f8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u3066\u3001\u6700\u8fd17\u65e5\u4ee5\u5185\u306b\u4f5c\u6210\u307e\u305f\u306f\u4fee\u6b63\u3055\u308c\u305f\u73fe\u5728\u306e\u30b9\u30da\u30fc\u30b9\u306b\u6587\u66f8\u3092\u8868\u793a\u3057\u307e\u3059\u3002 \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u3042\u3089\u304b\u3058\u3081\u9069\u5207\u306a\u30b5\u30fc\u30d0\u3068\u30dd\u30fc\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 -rss.template.rss_recent_docs=RSS \u6700\u8fd1\u306e\u6587\u66f8 diff --git a/config/alfresco/messages/bootstrap-example-javascripts_de_DE.properties b/config/alfresco/messages/bootstrap-example-javascripts_de_DE.properties deleted file mode 100755 index d1b5b232d3..0000000000 --- a/config/alfresco/messages/bootstrap-example-javascripts_de_DE.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Javascript Exapmples Localization - -javascripts.example.backup.title=Backup Skript -javascripts.example.backup.description=Einfaches Dokumenten-Backup Skript -javascripts.example.test.title=Test Skript Beispiel -javascripts.example.test.description=Beispiel verschiedener API-Calls -javascripts.example.backupandlog.title=Skipt-Backup und -Protokollierung -javascripts.example.backupandlog.description=Sicherungsdatei erstellen und Datum und Uhrzeit protokollieren -javascripts.example.appendcopyright.title=Copyright an Datei anh\u00e4ngen -javascripts.example.appendcopyright.description=Copyright Zeile an Text oder HTML-Dateien anh\u00e4ngen -javascripts.example.testreturnvalue.title=Beispiel f\u00fcr R\u00fcckgabewert -javascripts.example.testreturnvalue.description=R\u00fcckgabe eines Wertes von einem Skript - f\u00fcr das Befehls-Servlet -javascripts.example.alfrescodocs.title=Alfresco Lucene Suche -javascripts.example.alfrescodocs.description=Alle Dokumente suchen und protokollieren, die Alfresco-Text beinhalten - diff --git a/config/alfresco/messages/bootstrap-example-javascripts_es_ES.properties b/config/alfresco/messages/bootstrap-example-javascripts_es_ES.properties deleted file mode 100755 index 1d19ec4151..0000000000 --- a/config/alfresco/messages/bootstrap-example-javascripts_es_ES.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Javascript Exapmples Localization - -javascripts.example.backup.title=Script de copia de seguridad -javascripts.example.backup.description=Script de copia de seguridad de documento sencillo -javascripts.example.test.title=Ejemplo de script de test -javascripts.example.test.description=Ejemplo de varias llamadas a la API -javascripts.example.backupandlog.title=Script de copia de seguridad y registro cronol\u00f3gico -javascripts.example.backupandlog.description=Salvaguarda los ficheros registrando fecha y hora -javascripts.example.appendcopyright.title=A\u00f1adir copyright a fichero -javascripts.example.appendcopyright.description=A\u00f1adir l\u00ednea de copyright a ficheros de texto o HTML -javascripts.example.testreturnvalue.title=Devolver ejemplos de un valor -javascripts.example.testreturnvalue.description=Devolver un valor desde un script - para el servlet de comandos -javascripts.example.alfrescodocs.title=B\u00fasqueda Lucene en Alfresco -javascripts.example.alfrescodocs.description=B\u00fasqueda y log de todos los documentos que contienen texto Alfresco diff --git a/config/alfresco/messages/bootstrap-example-javascripts_fr_FR.properties b/config/alfresco/messages/bootstrap-example-javascripts_fr_FR.properties deleted file mode 100755 index 16c2d8659b..0000000000 --- a/config/alfresco/messages/bootstrap-example-javascripts_fr_FR.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Javascript Exapmples Localization - -javascripts.example.backup.title=Script de sauvegarde -javascripts.example.backup.description=Script simple de sauvegarde de document -javascripts.example.test.title=Exemple de script de test -javascripts.example.test.description=Exemple de plusieurs appels d'API -javascripts.example.backupandlog.title=Script de sauvegarde et de journalisation -javascripts.example.backupandlog.description=Sauvegarder des fichiers et noter la date et l'heure -javascripts.example.appendcopyright.title=Ajouter un Copyright au fichier -javascripts.example.appendcopyright.description=Ajouter une ligne de Copyright aux fichiers texte ou HTML -javascripts.example.testreturnvalue.title=Retourner l'exemple de valeur -javascripts.example.testreturnvalue.description=Retourner une valeur \u00e0 partir d'un script - pour la command servlet -javascripts.example.alfrescodocs.title=Recherche Alfresco Lucene -javascripts.example.alfrescodocs.description=Rechercher et noter tous les documents incluant du texte Alfresco diff --git a/config/alfresco/messages/bootstrap-example-javascripts_it_IT.properties b/config/alfresco/messages/bootstrap-example-javascripts_it_IT.properties deleted file mode 100755 index 5eef1a4f39..0000000000 --- a/config/alfresco/messages/bootstrap-example-javascripts_it_IT.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Javascript Exapmples Localization - -javascripts.example.backup.title=Script di backup -javascripts.example.backup.description=Script semplice di backup dei documenti -javascripts.example.test.title=Script di test di esempio -javascripts.example.test.description=Esempio con varie chiamate di API -javascripts.example.backupandlog.title=Script di backup e registrazione -javascripts.example.backupandlog.description=Esegue il backup dei file e registra la data e l'ora -javascripts.example.appendcopyright.title=Aggiungi copyright al file -javascripts.example.appendcopyright.description=Aggiunge la riga di copyright a file di testo o HTML -javascripts.example.testreturnvalue.title=Esempio di restituzione di valore -javascripts.example.testreturnvalue.description=Restituisce un valore da uno script per la servlet di comando -javascripts.example.alfrescodocs.title=Ricerca Alfresco Lucene -javascripts.example.alfrescodocs.description=Cerca e registra tutti i documenti contenenti testo Alfresco diff --git a/config/alfresco/messages/bootstrap-example-javascripts_ja.properties b/config/alfresco/messages/bootstrap-example-javascripts_ja.properties deleted file mode 100755 index 2b3bf47c16..0000000000 --- a/config/alfresco/messages/bootstrap-example-javascripts_ja.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Javascript Examples Localization - -javascripts.example.backup.title=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30af\u30ea\u30d7\u30c8 -javascripts.example.backup.description=\u5358\u7d14\u306a\u6587\u66f8\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u30b9\u30af\u30ea\u30d7\u30c8 -javascripts.example.test.title=\u30b5\u30f3\u30d7\u30eb\u306e\u30c6\u30b9\u30c8\u30b9\u30af\u30ea\u30d7\u30c8 -javascripts.example.test.description=\u3055\u307e\u3056\u307e\u306aAPI\u30b3\u30fc\u30eb\u306e\u30b5\u30f3\u30d7\u30eb -javascripts.example.backupandlog.title=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u30ed\u30ae\u30f3\u30b0\u30b9\u30af\u30ea\u30d7\u30c8 -javascripts.example.backupandlog.description=\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u65e5\u4ed8\u3068\u6642\u523b\u3092\u30ed\u30b0\u3057\u307e\u3059 -javascripts.example.appendcopyright.title=Copyright\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059 -javascripts.example.appendcopyright.description=\u30c6\u30ad\u30b9\u30c8\u307e\u305f\u306fHTML\u30d5\u30a1\u30a4\u30eb\u306bCopyright\u884c\u3092\u8ffd\u52a0\u3057\u307e\u3059 -javascripts.example.testreturnvalue.title=\u623b\u308a\u5024\u306e\u30b5\u30f3\u30d7\u30eb -javascripts.example.testreturnvalue.description=\u30b3\u30de\u30f3\u30c9\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306e\u305f\u3081\u306e\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u304b\u3089\u5024\u3092\u623b\u3057\u307e\u3059 -javascripts.example.alfrescodocs.title=Alfresco Lucene\u691c\u7d22 -javascripts.example.alfrescodocs.description=Alfresco\u30c6\u30ad\u30b9\u30c8\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u6587\u66f8\u3092\u691c\u7d22\u3057\u30ed\u30b0\u3057\u307e\u3059 diff --git a/config/alfresco/messages/bootstrap-imapScripts_de_DE.properties b/config/alfresco/messages/bootstrap-imapScripts_de_DE.properties deleted file mode 100755 index 10854ad475..0000000000 --- a/config/alfresco/messages/bootstrap-imapScripts_de_DE.properties +++ /dev/null @@ -1,13 +0,0 @@ -imap.command_processor.name=command-processor.js -imap.command_processor.title=Befehlsprozessor -imap.command_processor.description=Email Befehlsprozessor-Skript - -imap.command_search.name=command-search.js -imap.command_search.title=Suchbefehl -imap.command_search.description=Skript zur Email-Suchbe - -imap.command_utils.name=command-utils.js -imap.command_utils.title=Befehl Utils -imap.command_utils.description=Email Befehl Utils - - diff --git a/config/alfresco/messages/bootstrap-imapScripts_es_ES.properties b/config/alfresco/messages/bootstrap-imapScripts_es_ES.properties deleted file mode 100755 index ccf5b1f439..0000000000 --- a/config/alfresco/messages/bootstrap-imapScripts_es_ES.properties +++ /dev/null @@ -1,11 +0,0 @@ -imap.command_processor.name=command-processor.js -imap.command_processor.title=Procesador de comandos -imap.command_processor.description=Script de procesador de comandos de email - -imap.command_search.name=command-search.js -imap.command_search.title=Comando Buscar -imap.command_search.description=Script de comandos de b\u00fasqueda de correo electr\u00f3nico - -imap.command_utils.name=command-utils.js -imap.command_utils.title=Utilidades de comandos -imap.command_utils.description=Utilidades de comandos de correo electr\u00f3nico diff --git a/config/alfresco/messages/bootstrap-imapScripts_fr_FR.properties b/config/alfresco/messages/bootstrap-imapScripts_fr_FR.properties deleted file mode 100755 index 47394b5840..0000000000 --- a/config/alfresco/messages/bootstrap-imapScripts_fr_FR.properties +++ /dev/null @@ -1,12 +0,0 @@ -imap.command_processor.name=command-processor.js -imap.command_processor.title=Processeur de commande -imap.command_processor.description=Script de processeur de commande d'e-mail - -imap.command_search.name=command-search.js -imap.command_search.title=Commande de recherche -imap.command_search.description=Script de commande de recherche d'e-mail - -imap.command_utils.name=command-utils.js -imap.command_utils.title=Utilitaires de commande -imap.command_utils.description=Utilitaires de commande d'e-mail - diff --git a/config/alfresco/messages/bootstrap-imapScripts_it_IT.properties b/config/alfresco/messages/bootstrap-imapScripts_it_IT.properties deleted file mode 100755 index 93f803af89..0000000000 --- a/config/alfresco/messages/bootstrap-imapScripts_it_IT.properties +++ /dev/null @@ -1,11 +0,0 @@ -imap.command_processor.name=command-processor.js -imap.command_processor.title=Processore di comandi -imap.command_processor.description=Script del processore di comandi di e-mail - -imap.command_search.name=command-search.js -imap.command_search.title=Comando di ricerca -imap.command_search.description=Script del comando di ricerca di e-mail - -imap.command_utils.name=command-utils.js -imap.command_utils.title=Utilit\u00e0 di comando -imap.command_utils.description=Utilit\u00e0 di comando di e-mail diff --git a/config/alfresco/messages/bootstrap-imapScripts_ja.properties b/config/alfresco/messages/bootstrap-imapScripts_ja.properties deleted file mode 100755 index 7083cd269c..0000000000 --- a/config/alfresco/messages/bootstrap-imapScripts_ja.properties +++ /dev/null @@ -1,12 +0,0 @@ -imap.command_processor.name=command-processor.js -imap.command_processor.title=\u30b3\u30de\u30f3\u30c9\u30d7\u30ed\u30bb\u30c3\u30b5 -imap.command_processor.description=E\u30e1\u30fc\u30eb\u30b3\u30de\u30f3\u30c9\u51e6\u7406\u7528\u306e\u30b9\u30af\u30ea\u30d7\u30c8 - -imap.command_search.name=command-search.js -imap.command_search.title=\u691c\u7d22\u30b3\u30de\u30f3\u30c9 -imap.command_search.description=E\u30e1\u30fc\u30eb\u691c\u7d22\u30b3\u30de\u30f3\u30c9\u306e\u30b9\u30af\u30ea\u30d7\u30c8 - -imap.command_utils.name=command-utils.js -imap.command_utils.title=\u30b3\u30de\u30f3\u30c9\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3 -imap.command_utils.description=E\u30e1\u30fc\u30eb\u30b3\u30de\u30f3\u30c9\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3 - diff --git a/config/alfresco/messages/bootstrap-javascripts_de_DE.properties b/config/alfresco/messages/bootstrap-javascripts_de_DE.properties deleted file mode 100755 index aa7f4db29e..0000000000 --- a/config/alfresco/messages/bootstrap-javascripts_de_DE.properties +++ /dev/null @@ -1,17 +0,0 @@ -javascripts.backup.description=Einfaches Dokumenten-Backup Skript -javascripts.backup.title=Backup Skript - -javascripts.examle_test.description=Beispiel verschiedener Alfresco API-Calls -javascripts.examle_test.title=Test Skript Beispiel - -javascripts.backup_and_log.description=Sicherungsdatei erstellen und Datum und Uhrzeit protokollieren -javascripts.backup_and_log.title=Skript-Backup und -Protokollierung - -javascripts.append_copyright.description=Copyright Zeile an Text oder HTML-Dateien anh\u00e4ngen -javascripts.append_copyright.title=Copyright an Datei anh\u00e4ngen - -javascripts.lucene_search.description=Alle Dokumente suchen und protokollieren, die Alfresco-Text beinhalten -javascripts.lucene_search.title=Alfresco Lucene Suche - -javascripts.return_value.description=R\u00fcckgabe eines Wertes von einem Skript - f\u00fcr das Befehls-Servlet -javascripts.return_value.title=Beispiel f\u00fcr R\u00fcckgabewert diff --git a/config/alfresco/messages/bootstrap-javascripts_es_ES.properties b/config/alfresco/messages/bootstrap-javascripts_es_ES.properties deleted file mode 100755 index 34722c3a79..0000000000 --- a/config/alfresco/messages/bootstrap-javascripts_es_ES.properties +++ /dev/null @@ -1,17 +0,0 @@ -javascripts.backup.description=Script de copia de seguridad de documento sencillo -javascripts.backup.title=Script de copia de seguridad - -javascripts.examle_test.description=Ejemplo de varias llamadas a la API Alfresco -javascripts.examle_test.title=Ejemplo de script de test - -javascripts.backup_and_log.description=Salvaguarda los ficheros registrando fecha y hora -javascripts.backup_and_log.title=Script de copia de seguridad y registro cronol\u00f3gico - -javascripts.append_copyright.description=A\u00f1adir l\u00ednea de copyright a ficheros de texto o HTML -javascripts.append_copyright.title=A\u00f1adir copyright a fichero - -javascripts.lucene_search.description=B\u00fasqueda y registro de todos los documentos que contienen texto Alfresco -javascripts.lucene_search.title=B\u00fasqueda Lucene en Alfresco - -javascripts.return_value.description=Devolver un valor de un script - para el servlet de comandos -javascripts.return_value.title=Devolver ejemplos de un valor diff --git a/config/alfresco/messages/bootstrap-javascripts_fr_FR.properties b/config/alfresco/messages/bootstrap-javascripts_fr_FR.properties deleted file mode 100755 index a4d5c7cf86..0000000000 --- a/config/alfresco/messages/bootstrap-javascripts_fr_FR.properties +++ /dev/null @@ -1,17 +0,0 @@ -javascripts.backup.description=Script simple de sauvegarde de document -javascripts.backup.title=Script de sauvegarde - -javascripts.examle_test.description=Exemple de plusieurs appels d'API Alfresco -javascripts.examle_test.title=Exemple de script de test - -javascripts.backup_and_log.description=Sauvegarder des fichiers et noter la date et l'heure -javascripts.backup_and_log.title=Script de sauvegarde et de journalisation - -javascripts.append_copyright.description=Ajouter une ligne de Copyright aux fichiers texte ou HTML -javascripts.append_copyright.title=Ajouter un Copyright au fichier - -javascripts.lucene_search.description=Rechercher et noter tous les documents incluant du texte Alfresco -javascripts.lucene_search.title=Recherche Alfresco Lucene - -javascripts.return_value.description=Retourner une valeur \u00e0 partir d'un script - pour la command servlet -javascripts.return_value.title=Retourner l'exemple de valeur diff --git a/config/alfresco/messages/bootstrap-javascripts_it_IT.properties b/config/alfresco/messages/bootstrap-javascripts_it_IT.properties deleted file mode 100755 index eacb75c62a..0000000000 --- a/config/alfresco/messages/bootstrap-javascripts_it_IT.properties +++ /dev/null @@ -1,17 +0,0 @@ -javascripts.backup.description=Script semplice di backup dei documenti -javascripts.backup.title=Script di backup - -javascripts.examle_test.description=Esempio con varie chiamate di API Alfresco -javascripts.examle_test.title=Script di test di esempio - -javascripts.backup_and_log.description=Esegue il backup dei file e registra la data e l'ora -javascripts.backup_and_log.title=Script di backup e registrazione - -javascripts.append_copyright.description=Aggiunge la riga di copyright a file di testo o HTML -javascripts.append_copyright.title=Aggiungi copyright al file - -javascripts.lucene_search.description=Cerca e registra tutti i documenti contenenti testo Alfresco -javascripts.lucene_search.title=Ricerca Alfresco Lucene - -javascripts.return_value.description=Restituisce un valore da uno script per la servlet di comando -javascripts.return_value.title=Esempio di restituzione di valore diff --git a/config/alfresco/messages/bootstrap-javascripts_ja.properties b/config/alfresco/messages/bootstrap-javascripts_ja.properties deleted file mode 100755 index aa0a45029b..0000000000 --- a/config/alfresco/messages/bootstrap-javascripts_ja.properties +++ /dev/null @@ -1,17 +0,0 @@ -javascripts.backup.description=\u5358\u7d14\u306a\u6587\u66f8\u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u30b9\u30af\u30ea\u30d7\u30c8 -javascripts.backup.title=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b9\u30af\u30ea\u30d7\u30c8 - -javascripts.examle_test.description=Alfresco API\u30b3\u30fc\u30eb\u306e\u30b5\u30f3\u30d7\u30eb -javascripts.examle_test.title=\u30b5\u30f3\u30d7\u30eb\u306e\u30c6\u30b9\u30c8\u30b9\u30af\u30ea\u30d7\u30c8 - -javascripts.backup_and_log.description=\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u65e5\u4ed8\u3068\u6642\u523b\u3092\u30ed\u30b0\u3057\u307e\u3059 -javascripts.backup_and_log.title=\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3068\u30ed\u30ae\u30f3\u30b0\u30b9\u30af\u30ea\u30d7\u30c8 - -javascripts.append_copyright.description=\u30c6\u30ad\u30b9\u30c8\u307e\u305f\u306fHTML\u30d5\u30a1\u30a4\u30eb\u306bCopyright\u884c\u3092\u8ffd\u52a0\u3057\u307e\u3059 -javascripts.append_copyright.title=Copyright\u3092\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u52a0\u3057\u307e\u3059 - -javascripts.lucene_search.description=Alfresco\u30c6\u30ad\u30b9\u30c8\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u6587\u66f8\u3092\u691c\u7d22\u3057\u30ed\u30b0\u3057\u307e\u3059 -javascripts.lucene_search.title=Alfresco Lucene\u691c\u7d22 - -javascripts.return_value.description=\u30b3\u30de\u30f3\u30c9\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306e\u305f\u3081\u306e\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u304b\u3089\u5024\u3092\u623b\u3057\u307e\u3059 -javascripts.return_value.title=\u623b\u308a\u5024\u306e\u30b5\u30f3\u30d7\u30eb diff --git a/config/alfresco/messages/bootstrap-readme-template_de_DE.properties b/config/alfresco/messages/bootstrap-readme-template_de_DE.properties deleted file mode 100755 index 8bffb9040f..0000000000 --- a/config/alfresco/messages/bootstrap-readme-template_de_DE.properties +++ /dev/null @@ -1,3 +0,0 @@ -readme.template.description=Inhalt einer Readme-Datei (readme.html oder readme.ftl genannt) anzeigen. -readme.template.title=readme.ftl - diff --git a/config/alfresco/messages/bootstrap-readme-template_es_ES.properties b/config/alfresco/messages/bootstrap-readme-template_es_ES.properties deleted file mode 100755 index c90a7d6e8d..0000000000 --- a/config/alfresco/messages/bootstrap-readme-template_es_ES.properties +++ /dev/null @@ -1,2 +0,0 @@ -readme.template.description=Mostrar el contenido de un fichero readme (llamado readme.html o readme.ftl) -readme.template.title=readme.ftl diff --git a/config/alfresco/messages/bootstrap-readme-template_fr_FR.properties b/config/alfresco/messages/bootstrap-readme-template_fr_FR.properties deleted file mode 100755 index e45c3ffcfb..0000000000 --- a/config/alfresco/messages/bootstrap-readme-template_fr_FR.properties +++ /dev/null @@ -1,2 +0,0 @@ -readme.template.description=Afficher le contenu d'un fichier readme (intitul\u00e9 readme.html ou readme.ftl) -readme.template.title=readme.ftl diff --git a/config/alfresco/messages/bootstrap-readme-template_it_IT.properties b/config/alfresco/messages/bootstrap-readme-template_it_IT.properties deleted file mode 100755 index cdb9b758e9..0000000000 --- a/config/alfresco/messages/bootstrap-readme-template_it_IT.properties +++ /dev/null @@ -1,2 +0,0 @@ -readme.template.description=Visualizza il contenuto di un file readme (denominato readme.html o readme.ftl) -readme.template.title=readme.ftl diff --git a/config/alfresco/messages/bootstrap-readme-template_ja.properties b/config/alfresco/messages/bootstrap-readme-template_ja.properties deleted file mode 100755 index 5b904a27d0..0000000000 --- a/config/alfresco/messages/bootstrap-readme-template_ja.properties +++ /dev/null @@ -1,2 +0,0 @@ -readme.template.description=Readme\u30d5\u30a1\u30a4\u30eb(\u3064\u307e\u308a\u3001readme.html\u307e\u305f\u306freadme.ftl)\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3057\u307e\u3059 -readme.template.title=readme.ftl diff --git a/config/alfresco/messages/bootstrap-spaces.properties b/config/alfresco/messages/bootstrap-spaces.properties index 09ca4e0734..e4076965a3 100644 --- a/config/alfresco/messages/bootstrap-spaces.properties +++ b/config/alfresco/messages/bootstrap-spaces.properties @@ -36,6 +36,9 @@ spaces.notify_templates.email.description=Email Notify templates spaces.templates.rss.name=RSS Templates spaces.templates.rss.description=RSS templates +spaces.actions.scheduled_actions.name=Scheduled Actions +spaces.actions.scheduled_actions.description=Schedule of when persistent actions are executed + spaces.rendition.rendering_actions.name=Rendering Actions Space spaces.rendition.rendering_actions.description=A space used by the system to persist rendering actions. diff --git a/config/alfresco/messages/bootstrap-spaces_de_DE.properties b/config/alfresco/messages/bootstrap-spaces_de_DE.properties deleted file mode 100755 index 18b36ecaf4..0000000000 --- a/config/alfresco/messages/bootstrap-spaces_de_DE.properties +++ /dev/null @@ -1,100 +0,0 @@ -## Labels used in bootstrap Space definitions - -spaces.company_home.name=Firmen-Home -spaces.company_home.description=Root-Raum der Firma - -spaces.dictionary.name=Datenverzeichnis -spaces.dictionary.description=Benutzerdefinierte Definitionen - -spaces.imapConfig.name=Imap Configs -spaces.imapConfig.description=Imap Configs - -spaces.imap_templates.name=Mustervorlagen -spaces.imap_templates.description=Mustervorlage f\u00fcr IMAP-generierte Nachrichten - -spaces.emailActions.name=E-Mail-Aktionen -spaces.emailActions.description=E-Mail-Aktionen - -spaces.searchAction.name=Suche -spaces.searchAction.description=Suche - -spaces.templates.name=Raum-Mustervorlagen -spaces.templates.description=Mustervorlagen Raum-Ordner - -spaces.templates.content.name=Pr\u00e4sentations-Mustervorlagen -spaces.templates.content.description=Pr\u00e4sentations-Mustervorlagen - -spaces.templates.email.name=E-Mail Mustervorlagen -spaces.templates.email.description=E-Mail Mustervorlagen - -spaces.invite_templates.email.name=E-Mail Einladungs-Mustervorlagen -spaces.invite_templates.email.description=E-Mail Einladungs-Mustervorlagen - -spaces.notify_templates.email.name=E-Mail Benachrichtigungs-Mustervorlagen -spaces.notify_templates.email.description=E-Mail Benachrichtigungs-Mustervorlagen - -spaces.templates.rss.name=RSS Mustervorlagen -spaces.templates.rss.description=RSS Mustervorlagen - -spaces.rendition.rendering_actions.name=Arbeitsbereich f\u00fcr Renderingaktionen -spaces.rendition.rendering_actions.description=Ein von dem System verwendeter Raum zur Umsetzung von Rendering-Aktionen. - -spaces.replication.replication_actions.name=Arbeitsbereich f\u00fcr Replikationsaktionen -spaces.replication.replication_actions.description=Ein von dem System verwendeter Raum zur Umsetzung von Replikations-Aktionen. - -spaces.savedsearches.name=Gespeicherte Suchen -spaces.savedsearches.description=Gespeicherte Suchen - -spaces.guest_home.name=Besucher-Home -spaces.guest_home.description=Root Arbeitsbereich f\u00fcr G\u00e4ste - -spaces.scripts.name=Skripte -spaces.scripts.description=JavaScript Dateien - -spaces.wcm.name=Web Projekte -spaces.wcm.description=Web Content Management R\u00e4ume - -spaces.wcm_content_forms.name=Web-Formulare -spaces.wcm_content_forms.description=Web Content Formulare - -spaces.user_homes.name=Benutzer-Homes -spaces.user_homes.description=Benutzer-Homes - -spaces.content_forms.name=Formulare -spaces.content_forms.description=Inhaltsformulare - -spaces.sites.name=Sites -spaces.sites.description=Collaboration Site Arbeitsr\u00e4ume - -spaces.templates.email.invite.name=einladen -spaces.templates.email.invite.description=E-Mail Mustervorlagen f\u00fcr Einladungen - -spaces.imap_home.name=IMAP Home -spaces.imap_home.description=IMAP Home - -spaces.templates.email.invite1.name=E-Mail Einladungs-Mustervorlagen -spaces.templates.email.invite1.description=E-Mail Einladungs-Mustervorlagen - -spaces.templates.email.notify.name=E-Mail Benachrichtigungs-Mustervorlagen -spaces.templates.email.notify.description=E-Mail Benachrichtigungs-Mustervorlagen - -spaces.templates.email.generate_the_invite_email.description=E-Mail Vorlage zur Generierung der Einladungsmail f\u00fcr Alfresco Share - -email.template.email_template_for_notifying_users=E-Mail Mustervorlage f\u00fcr Benachrichtigung der Benutzer \u00fcber eine Regel oder Aktion -email.template.email_template_for_notifying_users_of_an_Invite=E-Mail Mustervorlage zur Benachrichtigung der Benutzer \u00fcber eine Einladung in einen Raum oder zu einem Dokument - -spaces.web.client.extension.name=Web Client Erweiterung -spaces.web.client.extension.title=Parametrierter Web Client -spaces.web.client.extension.description=Parametrierter Web Client - -spaces.models.name=Modelle -spaces.models.title=Parametrierte Modelle -spaces.models.description=Parametrierte Modelle - -spaces.messages.name=Nachrichten -spaces.messages.title=Parametrierte Nachrichten -spaces.messages.description=Parametrierte Nachrichten - -spaces.workflow.definitions.name=Workflowdefinitionen -spaces.workflow.definitions.title=Parametrierte Definitionen f\u00fcr den Arbeitsablaufsprozess -spaces.workflow.definitions.description=Parametrierte Definitionen f\u00fcr den Arbeitsablaufsprozess \ No newline at end of file diff --git a/config/alfresco/messages/bootstrap-spaces_es_ES.properties b/config/alfresco/messages/bootstrap-spaces_es_ES.properties deleted file mode 100755 index 30c1bf25c7..0000000000 --- a/config/alfresco/messages/bootstrap-spaces_es_ES.properties +++ /dev/null @@ -1,100 +0,0 @@ -# Labels used in bootstrap Space definitions - -spaces.company_home.name=Espacio de empresa -spaces.company_home.description=El espacio ra\u00edz de empresa - -spaces.dictionary.name=Diccionario de datos -spaces.dictionary.description=Definiciones gestionadas por usuario - -spaces.imapConfig.name=Configuraciones IMAP -spaces.imapConfig.description=Configuraciones IMAP - -spaces.imap_templates.name=Plantillas -spaces.imap_templates.description=Plantillas para mensajes generados por IMAP - -spaces.emailActions.name=Acciones de correo electr\u00f3nico -spaces.emailActions.description=Acciones de correo electr\u00f3nico - -spaces.searchAction.name=buscar -spaces.searchAction.description=buscar - -spaces.templates.name=Plantillas de espacio -spaces.templates.description=Plantillas de carpeta de espacio - -spaces.templates.content.name=Plantillas de presentaci\u00f3n -spaces.templates.content.description=Plantillas de presentaci\u00f3n - -spaces.templates.email.name=Plantillas de correo electr\u00f3nico -spaces.templates.email.description=Plantillas de correo electr\u00f3nico - -spaces.invite_templates.email.name=Plantillas de invitaci\u00f3n por correo eletr\u00f3nico -spaces.invite_templates.email.description=Plantillas de invitaci\u00f3n por correo eletr\u00f3nico - -spaces.notify_templates.email.name=Plantillas de notificaci\u00f3n por correo electr\u00f3nico -spaces.notify_templates.email.description=Plantillas de notificaci\u00f3n por correo electr\u00f3nico - -spaces.templates.rss.name=Plantillas RSS -spaces.templates.rss.description=Plantillas RSS - -spaces.rendition.rendering_actions.name=Espacio de renderizaci\u00f3n de acciones -spaces.rendition.rendering_actions.description=Un espacio utilizado por el sistema para la persistencia de acciones de renderizaci\u00f3n. - -spaces.replication.replication_actions.name=Espacio de replicaci\u00f3n de acciones -spaces.replication.replication_actions.description=Un espacio utilizado por el sistema para la persistencia de acciones de replicaci\u00f3n. - -spaces.savedsearches.name=B\u00fasquedas guardadas -spaces.savedsearches.description=B\u00fasquedas guardadas - -spaces.guest_home.name=Espacio de invitado -spaces.guest_home.description=El espacio ra\u00edz de invitado - -spaces.scripts.name=Scripts -spaces.scripts.description=Ficheros JavaScript - -spaces.wcm.name=Proyectos Web -spaces.wcm.description=Espacios Web Content Management - -spaces.wcm_content_forms.name=Formularios Web -spaces.wcm_content_forms.description=Formularios de contenido Web - -spaces.user_homes.name=Espacios personales de usuario -spaces.user_homes.description=Espacios personales de usuario - -spaces.content_forms.name=Formularios -spaces.content_forms.description=Formularios de contenido - -spaces.sites.name=Sitios -spaces.sites.description=Espacios de colaboraci\u00f3n de sitio - -spaces.templates.email.invite.name=invitar -spaces.templates.email.invite.description=Plantillas de correo electr\u00f3nico de invitaci\u00f3n - -spaces.imap_home.name=Inicio IMAP -spaces.imap_home.description=Inicio IMAP - -spaces.templates.email.invite1.name=Plantillas de correo electr\u00f3nico de invitaci\u00f3n -spaces.templates.email.invite1.description=Plantillas de correo electr\u00f3nico de invitaci\u00f3n - -spaces.templates.email.notify.name=Plantillas de correo electr\u00f3nico de notificaci\u00f3n -spaces.templates.email.notify.description=Plantillas de correo electr\u00f3nico de notificaci\u00f3n - -spaces.templates.email.generate_the_invite_email.description=Plantilla correo electr\u00f3nico utilizada para generar el correo electr\u00f3nico de invitaci\u00f3n a Alfresco Share - -email.template.email_template_for_notifying_users=Plantilla de correo electr\u00f3nico para notificar a los usuarios una regla o acci\u00f3n -email.template.email_template_for_notifying_users_of_an_Invite=Plantilla de correo electr\u00f3nico para notificar a los usuarios una invitaci\u00f3n a un espacio o documento - -spaces.web.client.extension.name=Extensi\u00f3n de cliente Web -spaces.web.client.extension.title=Cliente Web personalizado -spaces.web.client.extension.description=Cliente Web personalizado - -spaces.models.name=Modelos -spaces.models.title=Modelos personalizados -spaces.models.description=Modelos personalizados - -spaces.messages.name=Mensajes -spaces.messages.title=Mensajes personalizados -spaces.messages.description=Mensajes personalizados - -spaces.workflow.definitions.name=Definiciones de flujo de trabajo -spaces.workflow.definitions.title=Definiciones personalizadas de procesos de flujo de trabajo -spaces.workflow.definitions.description=Definiciones personalizadas de procesos de flujo de trabajo diff --git a/config/alfresco/messages/bootstrap-spaces_fr_FR.properties b/config/alfresco/messages/bootstrap-spaces_fr_FR.properties deleted file mode 100755 index 7b23fbab9b..0000000000 --- a/config/alfresco/messages/bootstrap-spaces_fr_FR.properties +++ /dev/null @@ -1,100 +0,0 @@ -# Labels used in bootstrap Space definitions - -spaces.company_home.name=Espace racine -spaces.company_home.description=L'espace racine de la soci\u00e9t\u00e9 - -spaces.dictionary.name=Dictionnaire de donn\u00e9es -spaces.dictionary.description=D\u00e9finitions personnalis\u00e9es - -spaces.imapConfig.name=Configurations\u00a0IMAP -spaces.imapConfig.description=Configurations\u00a0IMAP - -spaces.imap_templates.name=Mod\u00e8les -spaces.imap_templates.description=Mod\u00e8les pour les messages g\u00e9n\u00e9r\u00e9s par IMAP - -spaces.emailActions.name=Actions d'e-mail -spaces.emailActions.description=Actions d'e-mail - -spaces.searchAction.name=recherche -spaces.searchAction.description=recherche - -spaces.templates.name=Mod\u00e8les d'espace -spaces.templates.description=Mod\u00e8les de dossier d'espace - -spaces.templates.content.name=Mod\u00e8les de pr\u00e9sentation -spaces.templates.content.description=Mod\u00e8les de pr\u00e9sentation - -spaces.templates.email.name=Mod\u00e8les d'e-mail -spaces.templates.email.description=Mod\u00e8les d'e-mail - -spaces.invite_templates.email.name=Mod\u00e8les d'invitation par e-mail -spaces.invite_templates.email.description=Mod\u00e8les d'invitation par e-mail - -spaces.notify_templates.email.name=Mod\u00e8les de notification par e-mail -spaces.notify_templates.email.description=Mod\u00e8les de notification par e-mail - -spaces.templates.rss.name=Mod\u00e8les\u00a0RSS -spaces.templates.rss.description=Mod\u00e8les\u00a0RSS - -spaces.rendition.rendering_actions.name=Espace d'actions de rendu -spaces.rendition.rendering_actions.description=Espace utilis\u00e9 par le syst\u00e8me afin de faire persister les actions de rendu. - -spaces.replication.replication_actions.name=Espace d'actions de r\u00e9plication -spaces.replication.replication_actions.description=Espace utilis\u00e9 par le syst\u00e8me afin de faire persister les actions de r\u00e9plication. - -spaces.savedsearches.name=Recherches enregistr\u00e9es -spaces.savedsearches.description=Recherches enregistr\u00e9es - -spaces.guest_home.name=Espace invit\u00e9 -spaces.guest_home.description=L'espace racine de l'Invit\u00e9 - -spaces.scripts.name=Scripts -spaces.scripts.description=Fichiers JavaScript - -spaces.wcm.name=Projets Web -spaces.wcm.description=Espaces de gestion de contenu Web - -spaces.wcm_content_forms.name=Formulaires web -spaces.wcm_content_forms.description=Formulaires de contenu Web - -spaces.user_homes.name=Espaces Utilisateurs -spaces.user_homes.description=Espaces Utilisateurs - -spaces.content_forms.name=Formulaires Web -spaces.content_forms.description=Formulaires de Contenu Web - -spaces.sites.name=Sites -spaces.sites.description=Espaces de collaboration (Sites) - -spaces.templates.email.invite.name=invitation -spaces.templates.email.invite.description=Mod\u00e8les d'e-mail d'invitation - -spaces.imap_home.name=Racine IMAP -spaces.imap_home.description=Racine IMAP - -spaces.templates.email.invite1.name=Mod\u00e8les d'e-mail d'invitation -spaces.templates.email.invite1.description=Mod\u00e8les d'e-mail d'invitation - -spaces.templates.email.notify.name=Mod\u00e8les d'e-mail de notification -spaces.templates.email.notify.description=Mod\u00e8les d'e-mail de notification - -spaces.templates.email.generate_the_invite_email.description=Mod\u00e8le d'e-mail utilis\u00e9 pour g\u00e9n\u00e9rer l'e-mail d'invitation pour Alfresco Share - -email.template.email_template_for_notifying_users=Mod\u00e8le d'e-mail de notification des utilisateurs \u00e0 partir d'une r\u00e8gle ou d'une action -email.template.email_template_for_notifying_users_of_an_Invite=Mod\u00e8le d'e-mail de notification des utilisateurs \u00e0 propos d'une invitation \u00e0 un espace ou \u00e0 un document - -spaces.web.client.extension.name=Extension client Web -spaces.web.client.extension.title=Client Web personnalis\u00e9 -spaces.web.client.extension.description=Client Web personnalis\u00e9 - -spaces.models.name=Mod\u00e8les -spaces.models.title=Mod\u00e8les personnalis\u00e9s -spaces.models.description=Mod\u00e8les personnalis\u00e9s - -spaces.messages.name=Messages -spaces.messages.title=Messages personnalis\u00e9s -spaces.messages.description=Messages personnalis\u00e9s - -spaces.workflow.definitions.name=D\u00e9finitions de flux de travail -spaces.workflow.definitions.title=D\u00e9finitions de processus de flux de travail personnalis\u00e9s -spaces.workflow.definitions.description=D\u00e9finitions de processus de flux de travail personnalis\u00e9s diff --git a/config/alfresco/messages/bootstrap-spaces_it_IT.properties b/config/alfresco/messages/bootstrap-spaces_it_IT.properties deleted file mode 100755 index 44d478dc8d..0000000000 --- a/config/alfresco/messages/bootstrap-spaces_it_IT.properties +++ /dev/null @@ -1,100 +0,0 @@ -# Labels used in bootstrap Space definitions - -spaces.company_home.name=Homepage dell'azienda -spaces.company_home.description=Spazio radice dell'azienda - -spaces.dictionary.name=Dizionario dei dati -spaces.dictionary.description=Definizioni gestite dall'utente - -spaces.imapConfig.name=Configurazioni IMAP -spaces.imapConfig.description=Configurazioni IMAP - -spaces.imap_templates.name=Modelli -spaces.imap_templates.description=Modelli per messaggi generati da IMAP - -spaces.emailActions.name=Azioni di e-mail -spaces.emailActions.description=Azioni di e-mail - -spaces.searchAction.name=cerca -spaces.searchAction.description=cerca - -spaces.templates.name=Modelli di spazio -spaces.templates.description=Modelli di cartella di spazio - -spaces.templates.content.name=Modelli di presentazione -spaces.templates.content.description=Modelli di presentazione - -spaces.templates.email.name=Modelli di e-mail -spaces.templates.email.description=Modelli di e-mail - -spaces.invite_templates.email.name=Modelli di invito tramite e-mail -spaces.invite_templates.email.description=Modelli di invito tramite e-mail - -spaces.notify_templates.email.name=Modelli di notifica tramite e-mail -spaces.notify_templates.email.description=Modelli di notifica tramite e-mail - -spaces.templates.rss.name=Modelli RSS -spaces.templates.rss.description=Modelli RSS - -spaces.rendition.rendering_actions.name=Spazio delle azioni di rendering -spaces.rendition.rendering_actions.description=Spazio utilizzato dal sistema per salvare le azioni di rendering - -spaces.replication.replication_actions.name=Spazio delle azioni di replica -spaces.replication.replication_actions.description=Spazio utilizzato dal sistema per salvare le azioni di replica - -spaces.savedsearches.name=Ricerche salvate -spaces.savedsearches.description=Ricerche salvate - -spaces.guest_home.name=Homepage dell'ospite -spaces.guest_home.description=Spazio radice dell'ospite - -spaces.scripts.name=Script -spaces.scripts.description=File JavaScript - -spaces.wcm.name=Progetti web -spaces.wcm.description=Spazi di gestione dei contenuti web - -spaces.wcm_content_forms.name=Moduli web -spaces.wcm_content_forms.description=Moduli di contenuto web - -spaces.user_homes.name=Homepage dell'utente -spaces.user_homes.description=Homepage dell'utente - -spaces.content_forms.name=Moduli -spaces.content_forms.description=Moduli di contenuto - -spaces.sites.name=Siti -spaces.sites.description=Spazi di collaborazione del sito - -spaces.templates.email.invite.name=invita -spaces.templates.email.invite.description=Modelli di e-mail di invito - -spaces.imap_home.name=Homepage IMAP -spaces.imap_home.description=Homepage IMAP - -spaces.templates.email.invite1.name=Modelli di e-mail di invito -spaces.templates.email.invite1.description=Modelli di e-mail di invito - -spaces.templates.email.notify.name=Modelli di e-mail di notifica -spaces.templates.email.notify.description=Modelli di e-mail di notifica - -spaces.templates.email.generate_the_invite_email.description=Modello di e-mail utilizzato per generare l'e-mail di invito per Alfresco Share - -email.template.email_template_for_notifying_users=Modello di e-mail utilizzato per inviare una notifica agli utenti in base a una regola o un'azione -email.template.email_template_for_notifying_users_of_an_Invite=Modello di e-mail utilizzato per inviare una notifica agli utenti riguardo a un invito a uno spazio o un documento - -spaces.web.client.extension.name=Estensione del client web -spaces.web.client.extension.title=Client web personalizzato -spaces.web.client.extension.description=Client web personalizzato - -spaces.models.name=Modelli -spaces.models.title=Modelli personalizzati -spaces.models.description=Modelli personalizzati - -spaces.messages.name=Messaggi -spaces.messages.title=Messaggi personalizzati -spaces.messages.description=Messaggi personalizzati - -spaces.workflow.definitions.name=Definizioni di workflow -spaces.workflow.definitions.title=Definizioni del processo di workflow personalizzate -spaces.workflow.definitions.description=Definizioni del processo di workflow personalizzate diff --git a/config/alfresco/messages/bootstrap-spaces_ja.properties b/config/alfresco/messages/bootstrap-spaces_ja.properties deleted file mode 100755 index 7bbb291dff..0000000000 --- a/config/alfresco/messages/bootstrap-spaces_ja.properties +++ /dev/null @@ -1,101 +0,0 @@ -# Labels used in bootstrap Space definitions - -spaces.company_home.name=\u30ab\u30f3\u30d1\u30cb\u30fc\u30db\u30fc\u30e0 -spaces.company_home.description=\u4f1a\u793e\u306e\u30eb\u30fc\u30c8\u30b9\u30da\u30fc\u30b9 - -spaces.dictionary.name=\u30c7\u30fc\u30bf\u8f9e\u66f8 -spaces.dictionary.description=\u30e6\u30fc\u30b6\u304c\u7ba1\u7406\u3059\u308b\u5404\u7a2e\u5b9a\u7fa9 - -spaces.imapConfig.name=Imap\u8a2d\u5b9a -spaces.imapConfig.description=Imap\u8a2d\u5b9a - -spaces.imap_templates.name=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.imap_templates.description=IMAP\u304c\u751f\u6210\u3057\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u7528\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.emailActions.name=E\u30e1\u30fc\u30eb\u30a2\u30af\u30b7\u30e7\u30f3 -spaces.emailActions.description=E\u30e1\u30fc\u30eb\u30a2\u30af\u30b7\u30e7\u30f3 - -spaces.searchAction.name=\u691c\u7d22 -spaces.searchAction.description=\u691c\u7d22 - -spaces.templates.name=\u30b9\u30da\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.templates.description=\u30b9\u30da\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.templates.content.name=\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.templates.content.description=\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.templates.email.name=E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.templates.email.description=E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.invite_templates.email.name=\u62db\u5f85\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306eE\u30e1\u30fc\u30eb\u9001\u4fe1 -spaces.invite_templates.email.description=\u62db\u5f85\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306eE\u30e1\u30fc\u30eb\u9001\u4fe1 - -spaces.notify_templates.email.name=\u901a\u77e5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306eE\u30e1\u30fc\u30eb\u9001\u4fe1 -spaces.notify_templates.email.description=\u901a\u77e5\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306eE\u30e1\u30fc\u30eb\u9001\u4fe1 - -spaces.templates.rss.name=RSS\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.templates.rss.description=RSS\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.rendition.rendering_actions.name=\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a2\u30af\u30b7\u30e7\u30f3\u30b9\u30da\u30fc\u30b9 -spaces.rendition.rendering_actions.description=\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u6301\u7d9a\u3059\u308b\u305f\u3081\u306b\u30b7\u30b9\u30c6\u30e0\u304c\u5229\u7528\u3059\u308b\u30b9\u30da\u30fc\u30b9 - -spaces.replication.replication_actions.name=\u30ec\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30af\u30b7\u30e7\u30f3\u30b9\u30da\u30fc\u30b9 -spaces.replication.replication_actions.description=\u30ec\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u6301\u7d9a\u3059\u308b\u305f\u3081\u306b\u30b7\u30b9\u30c6\u30e0\u304c\u5229\u7528\u3059\u308b\u30b9\u30da\u30fc\u30b9 - -spaces.savedsearches.name=\u4fdd\u5b58\u6e08\u691c\u7d22 -spaces.savedsearches.description=\u4fdd\u5b58\u6e08\u691c\u7d22 - -spaces.guest_home.name=\u30b2\u30b9\u30c8\u30db\u30fc\u30e0 -spaces.guest_home.description=\u30b2\u30b9\u30c8\u306e\u30eb\u30fc\u30c8\u30b9\u30da\u30fc\u30b9 - -spaces.scripts.name=\u30b9\u30af\u30ea\u30d7\u30c8 -spaces.scripts.description=JavaScript\u30d5\u30a1\u30a4\u30eb - -spaces.wcm.name=Web\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 -spaces.wcm.description=Web\u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b9\u30da\u30fc\u30b9 - -spaces.wcm_content_forms.name=Web\u30d5\u30a9\u30fc\u30e0 -spaces.wcm_content_forms.description=Web\u30b3\u30f3\u30c6\u30f3\u30c4\u30d5\u30a9\u30fc\u30e0 - -spaces.user_homes.name=\u30e6\u30fc\u30b6\u30db\u30fc\u30e0 -spaces.user_homes.description=\u30e6\u30fc\u30b6\u30db\u30fc\u30e0 - -spaces.content_forms.name=\u30d5\u30a9\u30fc\u30e0 -spaces.content_forms.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u30d5\u30a9\u30fc\u30e0 - -spaces.sites.name=\u30b5\u30a4\u30c8 -spaces.sites.description=\u30b5\u30a4\u30c8\u30b3\u30e9\u30dc\u30ec\u30fc\u30b7\u30e7\u30f3\u30b9\u30da\u30fc\u30b9 - -spaces.templates.email.invite.name=\u62db\u5f85 -spaces.templates.email.invite.description=\u62db\u5f85E\u30e1\u30fc\u30eb\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.imap_home.name=IMAP\u30db\u30fc\u30e0 -spaces.imap_home.description=IMAP\u30db\u30fc\u30e0 - -spaces.templates.email.invite1.name=\u62db\u5f85E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.templates.email.invite1.description=\u62db\u5f85E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.templates.email.notify.name=\u901a\u77e5E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -spaces.templates.email.notify.description=\u901a\u77e5E\u30e1\u30fc\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.templates.email.generate_the_invite_email.description=Alfresco Share\u3067\u62db\u5f85E\u30e1\u30fc\u30eb\u306e\u751f\u6210\u306b\u4f7f\u7528\u3055\u308c\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -email.template.email_template_for_notifying_users=\u30eb\u30fc\u30eb\u3084\u30a2\u30af\u30b7\u30e7\u30f3\u304b\u3089\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u3059\u308b\u305f\u3081\u306eE\u30e1\u30fc\u30eb\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -email.template.email_template_for_notifying_users_of_an_Invite=\u30b9\u30da\u30fc\u30b9\u3084\u6587\u66f8\u306b\u3001\u62db\u5f85\u3092\u884c\u3063\u305f\u3053\u3068\u3092\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u3059\u308bE\u30e1\u30fc\u30eb\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -spaces.web.client.extension.name=Web\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u62e1\u5f35\u5b50 -spaces.web.client.extension.title=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fWeb\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 -spaces.web.client.extension.description=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fWeb\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 - -spaces.models.name=\u30e2\u30c7\u30eb -spaces.models.title=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30e2\u30c7\u30eb -spaces.models.description=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30e2\u30c7\u30eb - -spaces.messages.name=\u30e1\u30c3\u30bb\u30fc\u30b8 -spaces.messages.title=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30e1\u30c3\u30bb\u30fc\u30b8 -spaces.messages.description=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30e1\u30c3\u30bb\u30fc\u30b8 - -spaces.workflow.definitions.name=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9 -spaces.workflow.definitions.title=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d7\u30ed\u30bb\u30b9\u5b9a\u7fa9 -spaces.workflow.definitions.description=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d7\u30ed\u30bb\u30b9\u5b9a\u7fa9 - diff --git a/config/alfresco/messages/bootstrap-templates_de_DE.properties b/config/alfresco/messages/bootstrap-templates_de_DE.properties deleted file mode 100755 index dcf6ec97c8..0000000000 --- a/config/alfresco/messages/bootstrap-templates_de_DE.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Labels used in bootstrap Template definitions - -templates.space.project=Softwareentwicklungs-Projekt -templates.space.documentation=Dokumentation -templates.space.drafts=Entw\u00fcrfe -templates.space.pending_approval=Zustimmung anh\u00e4ngig -templates.space.published=Publiziert -templates.space.samples=Muster -templates.document.system_overview.title=System\u00fcberblick -templates.document.system_overview.name=system-overview.html -templates.space.discussions=Diskussionen -templates.space.ui_design=UI Design -templates.space.presentations=Pr\u00e4sentationen -templates.space.quality_assurance=Qualit\u00e4tssicherung diff --git a/config/alfresco/messages/bootstrap-templates_es_ES.properties b/config/alfresco/messages/bootstrap-templates_es_ES.properties deleted file mode 100755 index 958c5fe9ce..0000000000 --- a/config/alfresco/messages/bootstrap-templates_es_ES.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Labels used in bootstrap Template definitions - -templates.space.project=Proyecto de ingenier\u00eda de software -templates.space.documentation=Documentaci\u00f3n -templates.space.drafts=Borradores -templates.space.pending_approval=Pendiente de aprobaci\u00f3n -templates.space.published=Publicado -templates.space.samples=Muestras -templates.document.system_overview.title=Visi\u00f3n de conjunto del sistema -templates.document.system_overview.name=system-overview.html -templates.space.discussions=Foros -templates.space.ui_design=Dise\u00f1o de IU -templates.space.presentations=Presentaciones -templates.space.quality_assurance=Aseguramiento de la calidad diff --git a/config/alfresco/messages/bootstrap-templates_fr_FR.properties b/config/alfresco/messages/bootstrap-templates_fr_FR.properties deleted file mode 100755 index edf32648f5..0000000000 --- a/config/alfresco/messages/bootstrap-templates_fr_FR.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Labels used in bootstrap Template definitions - -templates.space.project=Projet de conception logicielle -templates.space.documentation=Documentation -templates.space.drafts=Brouillons -templates.space.pending_approval=Approbation en attente -templates.space.published=Publi\u00e9 -templates.space.samples=Exemples -templates.document.system_overview.title=Vue globale du syst\u00e8me -templates.document.system_overview.name=system-overview.html -templates.space.discussions=Discussions -templates.space.ui_design=Design de l'interface -templates.space.presentations=Pr\u00e9sentations -templates.space.quality_assurance=Assurance qualit\u00e9 diff --git a/config/alfresco/messages/bootstrap-templates_it_IT.properties b/config/alfresco/messages/bootstrap-templates_it_IT.properties deleted file mode 100755 index bec5e313f6..0000000000 --- a/config/alfresco/messages/bootstrap-templates_it_IT.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Labels used in bootstrap Template definitions - -templates.space.project=Progetto di progettazione software -templates.space.documentation=Documentazione -templates.space.drafts=Bozze -templates.space.pending_approval=Approvazione in attesa -templates.space.published=Pubblicato -templates.space.samples=Esempi -templates.document.system_overview.title=Panoramica del sistema -templates.document.system_overview.name=system-overview.html -templates.space.discussions=Discussioni -templates.space.ui_design=Progettazione dell'interfaccia utente -templates.space.presentations=Presentazioni -templates.space.quality_assurance=Controllo qualit\u00c3\u00a0 diff --git a/config/alfresco/messages/bootstrap-templates_ja.properties b/config/alfresco/messages/bootstrap-templates_ja.properties deleted file mode 100755 index b3facf7f16..0000000000 --- a/config/alfresco/messages/bootstrap-templates_ja.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Labels used in bootstrap Template definitions - -templates.space.project=\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 -templates.space.documentation=\u6587\u66f8\u5316 -templates.space.drafts=\u30c9\u30e9\u30d5\u30c8 -templates.space.pending_approval=\u672a\u6c7a\u5b9a\u306e\u627f\u8a8d -templates.space.published=\u516c\u958b\u6e08 -templates.space.samples=\u30b5\u30f3\u30d7\u30eb -templates.document.system_overview.title=\u30b7\u30b9\u30c6\u30e0\u6982\u8981 -templates.document.system_overview.name=system-overview.html -templates.space.discussions=\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3 -templates.space.ui_design=UI\u30c7\u30b6\u30a4\u30f3 -templates.space.presentations=\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 -templates.space.quality_assurance=\u54c1\u8cea\u4fdd\u8a3c diff --git a/config/alfresco/messages/bootstrap-tutorial_de_DE.properties b/config/alfresco/messages/bootstrap-tutorial_de_DE.properties deleted file mode 100755 index 09e4774cf4..0000000000 --- a/config/alfresco/messages/bootstrap-tutorial_de_DE.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Labels used in bootstrap Tutorial definitions - -tutorial.space.name=Alfresco Tutorial -tutorial.space.description=Schritt f\u00fcr Schritt Einf\u00fchrung in die Alfresco-Anwendung - -tutorial.document.name=Alfresco-Tutorial.pdf -tutorial.document.title=Alfresco Tutorial -tutorial.document.description=Leitfaden zum Einstieg - - diff --git a/config/alfresco/messages/bootstrap-tutorial_es_ES.properties b/config/alfresco/messages/bootstrap-tutorial_es_ES.properties deleted file mode 100755 index 757bdc64a1..0000000000 --- a/config/alfresco/messages/bootstrap-tutorial_es_ES.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Labels used in bootstrap Tutorial definitions - -tutorial.space.name=Tutorial Alfresco -tutorial.space.description=Gu\u00eda paso a paso para la aplicaci\u00f3n Alfresco - -tutorial.document.name=Alfresco-Tutorial.pdf -tutorial.document.title=Tutorial Alfresco -tutorial.document.description=Gu\u00eda de inicio - diff --git a/config/alfresco/messages/bootstrap-tutorial_fr_FR.properties b/config/alfresco/messages/bootstrap-tutorial_fr_FR.properties deleted file mode 100755 index 5472c83760..0000000000 --- a/config/alfresco/messages/bootstrap-tutorial_fr_FR.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Labels used in bootstrap Tutorial definitions - -tutorial.space.name=Tutoriel Alfresco -tutorial.space.description=Guide pas \u00e0 pas d'utilisation d'Alfresco - -tutorial.document.name=Alfresco-Tutorial.pdf -tutorial.document.title=Tutoriel Alfresco -tutorial.document.description=Guide de d\u00e9marrage diff --git a/config/alfresco/messages/bootstrap-tutorial_it_IT.properties b/config/alfresco/messages/bootstrap-tutorial_it_IT.properties deleted file mode 100755 index 411d30a6fb..0000000000 --- a/config/alfresco/messages/bootstrap-tutorial_it_IT.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Labels used in bootstrap Tutorial definitions - -tutorial.space.name=Esercitazione Alfresco -tutorial.space.description=Guida passo passo all'applicazione Alfresco - -tutorial.document.name=Alfresco-Tutorial.pdf -tutorial.document.title=Esercitazione Alfresco -tutorial.document.description=Guida per iniziare diff --git a/config/alfresco/messages/bootstrap-tutorial_ja.properties b/config/alfresco/messages/bootstrap-tutorial_ja.properties deleted file mode 100755 index 63c5ecd11b..0000000000 --- a/config/alfresco/messages/bootstrap-tutorial_ja.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Labels used in bootstrap Tutorial definitions - -tutorial.space.name=Alfresco\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb -tutorial.space.description=Alfresco\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u30ac\u30a4\u30c9 - -tutorial.document.name=Alfresco-Tutorial.pdf -tutorial.document.title=Alfresco\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb -tutorial.document.description=\u30b9\u30bf\u30fc\u30c8\u30ac\u30a4\u30c9 - diff --git a/config/alfresco/messages/bootstrap-webScriptsExtensions_de_DE.properties b/config/alfresco/messages/bootstrap-webScriptsExtensions_de_DE.properties deleted file mode 100755 index 20450e9360..0000000000 --- a/config/alfresco/messages/bootstrap-webScriptsExtensions_de_DE.properties +++ /dev/null @@ -1,6 +0,0 @@ -webscriptsextentions.customized_web_scripts=Parametrierte Web Skripts -webscriptsextentions.url_addressable_web_service_extensions=URL-adressierbare Web Service Erweiterungen -webscriptsextentions.web_scripts_extensions=Web Skript Erweiterungen -webscriptsextentions.how_to_customize_an_existing_web_script=Wie wird ein bestehendes Web Skript parametriert - - diff --git a/config/alfresco/messages/bootstrap-webScriptsExtensions_es_ES.properties b/config/alfresco/messages/bootstrap-webScriptsExtensions_es_ES.properties deleted file mode 100755 index 794b1a1a07..0000000000 --- a/config/alfresco/messages/bootstrap-webScriptsExtensions_es_ES.properties +++ /dev/null @@ -1,4 +0,0 @@ -webscriptsextentions.customized_web_scripts=Web Scripts personalizados -webscriptsextentions.url_addressable_web_service_extensions=Extensiones de servicios Web con direcciones URL -webscriptsextentions.web_scripts_extensions=Extensiones de Web Scripts -webscriptsextentions.how_to_customize_an_existing_web_script=C\u00f3mo personalizar un Web Script existente diff --git a/config/alfresco/messages/bootstrap-webScriptsExtensions_fr_FR.properties b/config/alfresco/messages/bootstrap-webScriptsExtensions_fr_FR.properties deleted file mode 100755 index 9f708fcb49..0000000000 --- a/config/alfresco/messages/bootstrap-webScriptsExtensions_fr_FR.properties +++ /dev/null @@ -1,4 +0,0 @@ -webscriptsextentions.customized_web_scripts=Scripts Web personnalis\u00e9s -webscriptsextentions.url_addressable_web_service_extensions=Extensions de service Web adressable par URL -webscriptsextentions.web_scripts_extensions=Extensions de script Web -webscriptsextentions.how_to_customize_an_existing_web_script=Personnalisation d'un script Web existant diff --git a/config/alfresco/messages/bootstrap-webScriptsExtensions_it_IT.properties b/config/alfresco/messages/bootstrap-webScriptsExtensions_it_IT.properties deleted file mode 100755 index 1c1ecfc903..0000000000 --- a/config/alfresco/messages/bootstrap-webScriptsExtensions_it_IT.properties +++ /dev/null @@ -1,6 +0,0 @@ -webscriptsextentions.customized_web_scripts=Web Script personalizzati -webscriptsextentions.url_addressable_web_service_extensions=Estensioni dei servizi web identificabili con indirizzi URL -webscriptsextentions.web_scripts_extensions=Estensioni dei Web Script -webscriptsextentions.how_to_customize_an_existing_web_script=Come personalizzare un Web Script esistente - - diff --git a/config/alfresco/messages/bootstrap-webScriptsExtensions_ja.properties b/config/alfresco/messages/bootstrap-webScriptsExtensions_ja.properties deleted file mode 100755 index 39ad0fa507..0000000000 --- a/config/alfresco/messages/bootstrap-webScriptsExtensions_ja.properties +++ /dev/null @@ -1,5 +0,0 @@ -webscriptsextentions.customized_web_scripts=\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305fWeb\u30b9\u30af\u30ea\u30d7\u30c8 -webscriptsextentions.url_addressable_web_service_extensions=URL\u30a2\u30c9\u30ec\u30b9\u53ef\u80fd\u306aWeb\u30b5\u30fc\u30d3\u30b9\u62e1\u5f35\u5b50 -webscriptsextentions.web_scripts_extensions=Web\u30b9\u30af\u30ea\u30d7\u30c8\u62e1\u5f35\u5b50 -webscriptsextentions.how_to_customize_an_existing_web_script=\u65e2\u5b58\u306eWeb\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u65b9\u6cd5 - diff --git a/config/alfresco/messages/bootstrap-webScripts_de_DE.properties b/config/alfresco/messages/bootstrap-webScripts_de_DE.properties deleted file mode 100755 index 32e761c28d..0000000000 --- a/config/alfresco/messages/bootstrap-webScripts_de_DE.properties +++ /dev/null @@ -1,5 +0,0 @@ -webscripts.url_addressable_web_services=URL-adressierbare Web Services -webscripts.web_scripts=Web Skripts -webscripts.what_are_web_scripts=Was sind Web Skripts und wie werden sie erstellt? - - diff --git a/config/alfresco/messages/bootstrap-webScripts_es_ES.properties b/config/alfresco/messages/bootstrap-webScripts_es_ES.properties deleted file mode 100755 index 8daf08e17b..0000000000 --- a/config/alfresco/messages/bootstrap-webScripts_es_ES.properties +++ /dev/null @@ -1,4 +0,0 @@ -webscripts.url_addressable_web_services=Servicios Web con direcciones URL -webscripts.web_scripts=Web Scripts -webscripts.what_are_web_scripts=\u00bfQu\u00e9 son los Web Scripts y c\u00f3mo desarrollarlos? - diff --git a/config/alfresco/messages/bootstrap-webScripts_fr_FR.properties b/config/alfresco/messages/bootstrap-webScripts_fr_FR.properties deleted file mode 100755 index 5ab4c239e0..0000000000 --- a/config/alfresco/messages/bootstrap-webScripts_fr_FR.properties +++ /dev/null @@ -1,4 +0,0 @@ -webscripts.url_addressable_web_services=Services Web adressables par URL -webscripts.web_scripts=Scripts Web -webscripts.what_are_web_scripts=En quoi consistent les scripts Web et comment les d\u00e9veloppez-vous\u00a0? - diff --git a/config/alfresco/messages/bootstrap-webScripts_it_IT.properties b/config/alfresco/messages/bootstrap-webScripts_it_IT.properties deleted file mode 100755 index d4ec718430..0000000000 --- a/config/alfresco/messages/bootstrap-webScripts_it_IT.properties +++ /dev/null @@ -1,3 +0,0 @@ -webscripts.url_addressable_web_services=Servizi web identificabili con indirizzi URL -webscripts.web_scripts=Web Script -webscripts.what_are_web_scripts=Cosa sono i Web Script e come vengono sviluppati diff --git a/config/alfresco/messages/bootstrap-webScripts_ja.properties b/config/alfresco/messages/bootstrap-webScripts_ja.properties deleted file mode 100755 index fe37f24f0c..0000000000 --- a/config/alfresco/messages/bootstrap-webScripts_ja.properties +++ /dev/null @@ -1,4 +0,0 @@ -webscripts.url_addressable_web_services=URL\u30a2\u30c9\u30ec\u30b9\u53ef\u80fd\u306aWeb\u30b5\u30fc\u30d3\u30b9 -webscripts.web_scripts=Web\u30b9\u30af\u30ea\u30d7\u30c8 -webscripts.what_are_web_scripts=Web\u30b9\u30af\u30ea\u30d7\u30c8\u3068\u306f\u3001\u307e\u305f\u305d\u308c\u3092\u958b\u767a\u3059\u308b\u65b9\u6cd5\u306f? - diff --git a/config/alfresco/messages/bpm-messages_de_DE.properties b/config/alfresco/messages/bpm-messages_de_DE.properties deleted file mode 100755 index bae5530b53..0000000000 --- a/config/alfresco/messages/bpm-messages_de_DE.properties +++ /dev/null @@ -1,73 +0,0 @@ -# Display labels for base Business Process Model - -bpm_businessprocessmodel.title=Modell f\u00fcr Gesch\u00e4ftsprozess -bpm_businessprocessmodel.description=Grundlegende Definitionen aller Gesch\u00e4ftsprozesse - -# Default transition -bpm_businessprocessmodel.transition.title=Aufgabe erledigt -bpm_businessprocessmodel.transition.description=Aufgabe erledigt - -# Base Task -bpm_businessprocessmodel.type.bpm_task.title=Aufgabe -bpm_businessprocessmodel.type.bpm_task.description=Aufgabe -bpm_businessprocessmodel.property.bpm_taskId.title=Identifikator -bpm_businessprocessmodel.property.bpm_taskId.description=Identifikator -bpm_businessprocessmodel.property.bpm_startDate.title=Anfangsdatum -bpm_businessprocessmodel.property.bpm_startDate.description=Anfangsdatum -bpm_businessprocessmodel.property.bpm_completionDate.title=Abschlussdatum -bpm_businessprocessmodel.property.bpm_completionDate.description=Abschlussdatum -bpm_businessprocessmodel.property.bpm_dueDate.title=F\u00e4lligkeitsdatum -bpm_businessprocessmodel.property.bpm_dueDate.description=F\u00e4lligkeitsdatum -bpm_businessprocessmodel.property.bpm_status.title=Status -bpm_businessprocessmodel.property.bpm_status.description=Status -bpm_businessprocessmodel.property.bpm_priority.title=Priorit\u00e4t -bpm_businessprocessmodel.property.bpm_priority.description=Priorit\u00e4t -bpm_businessprocessmodel.property.bpm_percentComplete.title=Prozent abgeschlossen -bpm_businessprocessmodel.property.bpm_percentComplete.description=Prozent abgeschlossen -bpm_businessprocessmodel.property.bpm_comment.title=Kommentar -bpm_businessprocessmodel.property.bpm_comment.description=Kommentar -bpm_businessprocessmodel.association.bpm_pooledActors.title=Geb\u00fcndelte Benutzer -bpm_businessprocessmodel.association.bpm_pooledActors.description=Pool - -# Workflow Task -bpm_businessprocessmodel.type.bpm_workflowTask.title=Aufgabe im Workflow -bpm_businessprocessmodel.type.bpm_workflowTask.description=Vor einem Workflow zugewiesene Aufgabe -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.title=Definitions-ID des Workflows -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.description=Definitions-ID des Workflows -bpm_businessprocessmodel.property.bpm_workflowInstanceId.title=Vorgangs-ID des Workflows -bpm_businessprocessmodel.property.bpm_workflowInstanceId.description=Vorgangs-ID des Workflows -bpm_businessprocessmodel.property.bpm_context.title=Aufgabenkontext -bpm_businessprocessmodel.property.bpm_context.description=Der Kontext, in dem diese Aufgabe zugewiesen wurde -bpm_businessprocessmodel.property.bpm_description.title=Beschreibung -bpm_businessprocessmodel.property.bpm_description.description=Beschreibung des zu Erreichenden -bpm_businessprocessmodel.property.bpm_outcome.title=Ergebnis -bpm_businessprocessmodel.property.bpm_outcome.description=Beschluss nach Abschluss einer Aufgabe -bpm_businessprocessmodel.property.bpm_completedItems.title=Abgeschlossene Elemente -bpm_businessprocessmodel.property.bpm_completedItems.description=Als abgeschlossen markierte Elemente eines Pakets -bpm_businessprocessmodel.property.bpm_packageActionGroup.title=Paket-Aktionen -bpm_businessprocessmodel.property.bpm_packageActionGroup.description=F\u00fcr ein Workflow-Paket verf\u00fcgbare Aktionen -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.title=Aktionen f\u00fcr Paketelemente -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.description=F\u00fcr Elemente eines Workflows verf\u00fcgbare Aktionen -bpm_businessprocessmodel.association.bpm_package.title=Inhaltspaket -bpm_businessprocessmodel.association.bpm_package.description=Inhalte, die durch den Workflow weitergeleitet werden -bpm_businessprocessmodel.aspect.bpm_workflowPackage.title=Workflow-Paket -bpm_businessprocessmodel.aspect.bpm_workflowPackage.description=Inhalte, die durch den Workflow weitergeleitet werden - -# Workflow Start Task -bpm_businessprocessmodel.type.bpm_startTask.title=Startaufgabe des Workflows -bpm_businessprocessmodel.type.bpm_startTask.description=Aufgabe, die zur Sammlung der Informationen verwendet wird, die f\u00fcr die Initialisierung eines Workflows erforderlich sind -bpm_businessprocessmodel.property.bpm_workflowDescription.title=Beschreibung -bpm_businessprocessmodel.property.bpm_workflowDescription.description=Beschreibung -bpm_businessprocessmodel.property.bpm_workflowDueDate.title=F\u00e4lligkeitsdatum des Workflows -bpm_businessprocessmodel.property.bpm_workflowDueDate.description=F\u00e4lligkeitsdatum des Workflows -bpm_businessprocessmodel.property.bpm_workflowPriority.title=Priorit\u00e4t f\u00fcr den Workflow -bpm_businessprocessmodel.property.bpm_workflowPriority.description=Priorit\u00e4t f\u00fcr den Workflow -bpm_businessprocessmodel.association.bpm_assignee.title=Bevollm\u00e4chtigter des Workflows -bpm_businessprocessmodel.association.bpm_assignee.description=Bevollm\u00e4chtigter des Workflows -bpm_businessprocessmodel.association.bpm_assignees.title=Bevollm\u00e4chtigte des Workflows -bpm_businessprocessmodel.association.bpm_assignees.description=Bevollm\u00e4chtigte des Workflows -bpm_businessprocessmodel.association.bpm_groupAssignee.title=Bevollm\u00e4chtigter f\u00fcr die Gruppe der Workflows -bpm_businessprocessmodel.association.bpm_groupAssignee.description=Bevollm\u00e4chtigter f\u00fcr die Gruppe der Workflows -bpm_businessprocessmodel.association.bpm_groupAssignees.title=Bevollm\u00e4chtigte f\u00fcr die Gruppe der Workflows -bpm_businessprocessmodel.association.bpm_groupAssignees.description=Bevollm\u00e4chtigte f\u00fcr die Gruppe der Workflows - diff --git a/config/alfresco/messages/bpm-messages_es_ES.properties b/config/alfresco/messages/bpm-messages_es_ES.properties deleted file mode 100755 index 2d3aebcbb1..0000000000 --- a/config/alfresco/messages/bpm-messages_es_ES.properties +++ /dev/null @@ -1,72 +0,0 @@ -# Display labels for base Business Process Model - -bpm_businessprocessmodel.title=Modelo de procesos empresariales -bpm_businessprocessmodel.description=Definiciones b\u00e1sicas de todos los procesos empresariales - -# Default transition -bpm_businessprocessmodel.transition.title=Tarea hecha -bpm_businessprocessmodel.transition.description=Tarea hecha - -# Base Task -bpm_businessprocessmodel.type.bpm_task.title=Tarea -bpm_businessprocessmodel.type.bpm_task.description=Tarea -bpm_businessprocessmodel.property.bpm_taskId.title=Identificador -bpm_businessprocessmodel.property.bpm_taskId.description=Identificador -bpm_businessprocessmodel.property.bpm_startDate.title=Fecha de inicio -bpm_businessprocessmodel.property.bpm_startDate.description=Fecha de inicio -bpm_businessprocessmodel.property.bpm_completionDate.title=Fecha de terminaci\u00f3n -bpm_businessprocessmodel.property.bpm_completionDate.description=Fecha de terminaci\u00f3n -bpm_businessprocessmodel.property.bpm_dueDate.title=Fecha de vencimiento -bpm_businessprocessmodel.property.bpm_dueDate.description=Fecha de vencimiento -bpm_businessprocessmodel.property.bpm_status.title=Estado -bpm_businessprocessmodel.property.bpm_status.description=Estado -bpm_businessprocessmodel.property.bpm_priority.title=Prioridad -bpm_businessprocessmodel.property.bpm_priority.description=Prioridad -bpm_businessprocessmodel.property.bpm_percentComplete.title=Porcentaje completado -bpm_businessprocessmodel.property.bpm_percentComplete.description=Porcentaje completado -bpm_businessprocessmodel.property.bpm_comment.title=Comentario -bpm_businessprocessmodel.property.bpm_comment.description=Comentario -bpm_businessprocessmodel.association.bpm_pooledActors.title=Usuarios agrupados -bpm_businessprocessmodel.association.bpm_pooledActors.description=Grupo - -# Workflow Task -bpm_businessprocessmodel.type.bpm_workflowTask.title=Tarea de flujo de trabajo -bpm_businessprocessmodel.type.bpm_workflowTask.description=Tarea asignada por un flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.title=Id de definici\u00f3n de flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.description=Id de definici\u00f3n de flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowInstanceId.title=Id de instancia de flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowInstanceId.description=Id de instancia de flujo de trabajo -bpm_businessprocessmodel.property.bpm_context.title=Contexto de tarea -bpm_businessprocessmodel.property.bpm_context.description=El contexto en el que se ha asignado esta tarea -bpm_businessprocessmodel.property.bpm_description.title=Descripci\u00f3n -bpm_businessprocessmodel.property.bpm_description.description=Descripci\u00f3n de lo que es preciso lograr -bpm_businessprocessmodel.property.bpm_outcome.title=Resultado -bpm_businessprocessmodel.property.bpm_outcome.description=Decisi\u00f3n tomada sobre completar tarea -bpm_businessprocessmodel.property.bpm_completedItems.title=Elementos completados -bpm_businessprocessmodel.property.bpm_completedItems.description=Elementos del paquete marcados como completados -bpm_businessprocessmodel.property.bpm_packageActionGroup.title=Acciones en el paquete -bpm_businessprocessmodel.property.bpm_packageActionGroup.description=Acciones disponibles en el paquete de flujo de trabajo -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.title=Acciones en elementos del paquete -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.description=Acciones disponibles en elementos del paquete de flujo de trabajo -bpm_businessprocessmodel.association.bpm_package.title=Paquete de contenidos -bpm_businessprocessmodel.association.bpm_package.description=La colecci\u00f3n de contenidos enviados a trav\u00e9s del flujo de trabajo -bpm_businessprocessmodel.aspect.bpm_workflowPackage.title=Paquete de flujo de trabajo -bpm_businessprocessmodel.aspect.bpm_workflowPackage.description=La colecci\u00f3n de contenidos enviados a trav\u00e9s del flujo de trabajo - -# Workflow Start Task -bpm_businessprocessmodel.type.bpm_startTask.title=Tarea Inicial de flujo de trabajo -bpm_businessprocessmodel.type.bpm_startTask.description=Tarea utilizada para recolectar la informaci\u00f3n requerida para iniciar el flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowDescription.title=Descripci\u00f3n -bpm_businessprocessmodel.property.bpm_workflowDescription.description=Descripci\u00f3n -bpm_businessprocessmodel.property.bpm_workflowDueDate.title=Fecha de vencimiento del flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowDueDate.description=Fecha de vencimiento del flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowPriority.title=Prioridad del flujo de trabajo -bpm_businessprocessmodel.property.bpm_workflowPriority.description=Prioridad del flujo de trabajo -bpm_businessprocessmodel.association.bpm_assignee.title=Usuario a asignar la tarea del flujo de trabajo -bpm_businessprocessmodel.association.bpm_assignee.description=Usuario a asignar la tarea del flujo de trabajo -bpm_businessprocessmodel.association.bpm_assignees.title=Usuarios a asignar la tarea del flujo de trabajo -bpm_businessprocessmodel.association.bpm_assignees.description=Usuarios a asignar la tarea del flujo de trabajo -bpm_businessprocessmodel.association.bpm_groupAssignee.title=Usuario a asignar la tarea del grupo de flujo de trabajo -bpm_businessprocessmodel.association.bpm_groupAssignee.description=Usuario a asignar la tarea del grupo de flujo de trabajo -bpm_businessprocessmodel.association.bpm_groupAssignees.title=Usuarios a asignar la tarea del grupo de flujo de trabajo -bpm_businessprocessmodel.association.bpm_groupAssignees.description=Usuarios a asignar la tarea del grupo de flujo de trabajo diff --git a/config/alfresco/messages/bpm-messages_fr_FR.properties b/config/alfresco/messages/bpm-messages_fr_FR.properties deleted file mode 100755 index d8d7a478be..0000000000 --- a/config/alfresco/messages/bpm-messages_fr_FR.properties +++ /dev/null @@ -1,72 +0,0 @@ -# Display labels for base Business Process Model - -bpm_businessprocessmodel.title=Mod\u00e8le de Processus M\u00e9tier -bpm_businessprocessmodel.description=D\u00e9finitions de base de tous les Processus M\u00e9tier - -# Default transition -bpm_businessprocessmodel.transition.title=T\u00e2che Achev\u00e9e -bpm_businessprocessmodel.transition.description=T\u00e2che Achev\u00e9e - -# Base Task -bpm_businessprocessmodel.type.bpm_task.title=T\u00e2che -bpm_businessprocessmodel.type.bpm_task.description=T\u00e2che -bpm_businessprocessmodel.property.bpm_taskId.title=Identifiant -bpm_businessprocessmodel.property.bpm_taskId.description=Identifiant -bpm_businessprocessmodel.property.bpm_startDate.title=Date de D\u00e9but -bpm_businessprocessmodel.property.bpm_startDate.description=Date de D\u00e9but -bpm_businessprocessmodel.property.bpm_completionDate.title=Date d'ach\u00e8vement -bpm_businessprocessmodel.property.bpm_completionDate.description=Date d'ach\u00e8vement -bpm_businessprocessmodel.property.bpm_dueDate.title=Ech\u00e9ance -bpm_businessprocessmodel.property.bpm_dueDate.description=Ech\u00e9ance -bpm_businessprocessmodel.property.bpm_status.title=Etat -bpm_businessprocessmodel.property.bpm_status.description=Etat -bpm_businessprocessmodel.property.bpm_priority.title=Priorit\u00e9 -bpm_businessprocessmodel.property.bpm_priority.description=Priorit\u00e9 -bpm_businessprocessmodel.property.bpm_percentComplete.title=Pourcents achev\u00e9s -bpm_businessprocessmodel.property.bpm_percentComplete.description=Pourcents achev\u00e9s -bpm_businessprocessmodel.property.bpm_comment.title=Commentaire -bpm_businessprocessmodel.property.bpm_comment.description=Commentaire -bpm_businessprocessmodel.association.bpm_pooledActors.title=Liste -bpm_businessprocessmodel.association.bpm_pooledActors.description=Liste - -# Workflow Task -bpm_businessprocessmodel.type.bpm_workflowTask.title=T\u00e2che du workflow -bpm_businessprocessmodel.type.bpm_workflowTask.description=T\u00e2che assign\u00e9e par un Workflow -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.title=Identifiant de la d\u00e9finition du Workflow -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.description=Identifiant de la d\u00e9finition du Workflow -bpm_businessprocessmodel.property.bpm_workflowInstanceId.title=Identifiant de l'instance du Workflow -bpm_businessprocessmodel.property.bpm_workflowInstanceId.description=Identifiant de l'instance du Workflow -bpm_businessprocessmodel.property.bpm_context.title=Contexte de la t\u00e2che -bpm_businessprocessmodel.property.bpm_context.description=Le contexte au sein duquel une t\u00e2che a \u00e9t\u00e9 assign\u00e9e -bpm_businessprocessmodel.property.bpm_description.title=Description -bpm_businessprocessmodel.property.bpm_description.description=Description de ce qui doit \u00eatre r\u00e9alis\u00e9 -bpm_businessprocessmodel.property.bpm_outcome.title=R\u00e9sultat -bpm_businessprocessmodel.property.bpm_outcome.description=D\u00e9cision sur l'ach\u00e8vement de la T\u00e2che -bpm_businessprocessmodel.property.bpm_completedItems.title=El\u00e9ments Achev\u00e9s -bpm_businessprocessmodel.property.bpm_completedItems.description=Package d'\u00e9l\u00e9ments marqu\u00e9s comme achev\u00e9s -bpm_businessprocessmodel.property.bpm_packageActionGroup.title=Paquetage des actions -bpm_businessprocessmodel.property.bpm_packageActionGroup.description=Actions disponibles sur le paquetage du workflow -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.title=Actions des \u00e9l\u00e9ments du paquetage -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.description=Actions disponibles sur les \u00e9l\u00e9ments du paquetage du workflow -bpm_businessprocessmodel.association.bpm_package.title=Paquetage du Contenu -bpm_businessprocessmodel.association.bpm_package.description=La collection du contenu rout\u00e9 par le workflow -bpm_businessprocessmodel.aspect.bpm_workflowPackage.title=Package du Workflow -bpm_businessprocessmodel.aspect.bpm_workflowPackage.description=La collection du contenu rout\u00e9 par le workflow - -# Workflow Start Task -bpm_businessprocessmodel.type.bpm_startTask.title=T\u00e2che de D\u00e9marrage du Workflow -bpm_businessprocessmodel.type.bpm_startTask.description=T\u00e2che utilis\u00e9e pour collecter des informations n\u00e9cessaires pour d\u00e9marrer le Workflow -bpm_businessprocessmodel.property.bpm_workflowDescription.title=Description -bpm_businessprocessmodel.property.bpm_workflowDescription.description=Description -bpm_businessprocessmodel.property.bpm_workflowDueDate.title=Ech\u00e9ance du workflow -bpm_businessprocessmodel.property.bpm_workflowDueDate.description=Ech\u00e9ance du workflow -bpm_businessprocessmodel.property.bpm_workflowPriority.title=Priorit\u00e9 du Workflow -bpm_businessprocessmodel.property.bpm_workflowPriority.description=Priorit\u00e9 du Workflow -bpm_businessprocessmodel.association.bpm_assignee.title=Propri\u00e9taire du Workflow -bpm_businessprocessmodel.association.bpm_assignee.description=Propri\u00e9taire du Workflow -bpm_businessprocessmodel.association.bpm_assignees.title=Propri\u00e9taires du Workflow -bpm_businessprocessmodel.association.bpm_assignees.description=Propri\u00e9taires du Workflow -bpm_businessprocessmodel.association.bpm_groupAssignee.title=Propri\u00e9taire du Groupe de Workflow -bpm_businessprocessmodel.association.bpm_groupAssignee.description=Propri\u00e9taire du Groupe de Workflow -bpm_businessprocessmodel.association.bpm_groupAssignees.title=Propri\u00e9taires du Groupe de Workflow -bpm_businessprocessmodel.association.bpm_groupAssignees.description=Propri\u00e9taires du Groupe de Workflow diff --git a/config/alfresco/messages/bpm-messages_it_IT.properties b/config/alfresco/messages/bpm-messages_it_IT.properties deleted file mode 100755 index d9cab5a47c..0000000000 --- a/config/alfresco/messages/bpm-messages_it_IT.properties +++ /dev/null @@ -1,72 +0,0 @@ -# Display labels for base Business Process Model - -bpm_businessprocessmodel.title=Modello di processo aziendale -bpm_businessprocessmodel.description=Definizioni di base di tutti i processi aziendali - -# Default transition -bpm_businessprocessmodel.transition.title=Compito eseguito -bpm_businessprocessmodel.transition.description=Compito eseguito - -# Base Task -bpm_businessprocessmodel.type.bpm_task.title=Compito -bpm_businessprocessmodel.type.bpm_task.description=Compito -bpm_businessprocessmodel.property.bpm_taskId.title=Identificativo -bpm_businessprocessmodel.property.bpm_taskId.description=Identificativo -bpm_businessprocessmodel.property.bpm_startDate.title=Data di inizio -bpm_businessprocessmodel.property.bpm_startDate.description=Data di inizio -bpm_businessprocessmodel.property.bpm_completionDate.title=Data di completamento -bpm_businessprocessmodel.property.bpm_completionDate.description=Data di completamento -bpm_businessprocessmodel.property.bpm_dueDate.title=Data di scadenza -bpm_businessprocessmodel.property.bpm_dueDate.description=Data di scadenza -bpm_businessprocessmodel.property.bpm_status.title=Stato -bpm_businessprocessmodel.property.bpm_status.description=Stato -bpm_businessprocessmodel.property.bpm_priority.title=Priorit\u00e0 -bpm_businessprocessmodel.property.bpm_priority.description=Priorit\u00e0 -bpm_businessprocessmodel.property.bpm_percentComplete.title=Percentuale di completamento -bpm_businessprocessmodel.property.bpm_percentComplete.description=Percentuale di completamento -bpm_businessprocessmodel.property.bpm_comment.title=Commento -bpm_businessprocessmodel.property.bpm_comment.description=Commento -bpm_businessprocessmodel.association.bpm_pooledActors.title=Utenti nel pool -bpm_businessprocessmodel.association.bpm_pooledActors.description=Pool - -# Workflow Task -bpm_businessprocessmodel.type.bpm_workflowTask.title=Compito del workflow -bpm_businessprocessmodel.type.bpm_workflowTask.description=Compito assegnato da un workflow -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.title=ID di definizione del workflow -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.description=ID di definizione del workflow -bpm_businessprocessmodel.property.bpm_workflowInstanceId.title=ID di istanza del workflow -bpm_businessprocessmodel.property.bpm_workflowInstanceId.description=ID di istanza del workflow -bpm_businessprocessmodel.property.bpm_context.title=Contesto del compito -bpm_businessprocessmodel.property.bpm_context.description=Contesto in cui il compito \u00e8 stato assegnato -bpm_businessprocessmodel.property.bpm_description.title=Descrizione -bpm_businessprocessmodel.property.bpm_description.description=Descrizione degli obiettivi da raggiungere -bpm_businessprocessmodel.property.bpm_outcome.title=Risultato -bpm_businessprocessmodel.property.bpm_outcome.description=Decisione presa al termine del compito -bpm_businessprocessmodel.property.bpm_completedItems.title=Elementi completati -bpm_businessprocessmodel.property.bpm_completedItems.description=Elementi del pacchetto contrassegnati come completati -bpm_businessprocessmodel.property.bpm_packageActionGroup.title=Azioni pacchetto -bpm_businessprocessmodel.property.bpm_packageActionGroup.description=Azioni disponibili per il pacchetto del workflow -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.title=Azioni elementi pacchetto -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.description=Azioni disponibili per gli elementi del pacchetto del workflow -bpm_businessprocessmodel.association.bpm_package.title=Pacchetto di contenuto -bpm_businessprocessmodel.association.bpm_package.description=Raccolta di contenuto instradato attraverso il workflow -bpm_businessprocessmodel.aspect.bpm_workflowPackage.title=Pacchetto del workflow -bpm_businessprocessmodel.aspect.bpm_workflowPackage.description=Raccolta di contenuto instradato attraverso il workflow - -# Workflow Start Task -bpm_businessprocessmodel.type.bpm_startTask.title=Compito di avvio del workflow -bpm_businessprocessmodel.type.bpm_startTask.description=Compito utilizzato per raccogliere le informazioni richieste per l'avvio del workflow -bpm_businessprocessmodel.property.bpm_workflowDescription.title=Descrizione -bpm_businessprocessmodel.property.bpm_workflowDescription.description=Descrizione -bpm_businessprocessmodel.property.bpm_workflowDueDate.title=Data di scadenza del workflow -bpm_businessprocessmodel.property.bpm_workflowDueDate.description=Data di scadenza del workflow -bpm_businessprocessmodel.property.bpm_workflowPriority.title=Priorit\u00e0 del workflow -bpm_businessprocessmodel.property.bpm_workflowPriority.description=Priorit\u00e0 del workflow -bpm_businessprocessmodel.association.bpm_assignee.title=Assegnatario del workflow -bpm_businessprocessmodel.association.bpm_assignee.description=Assegnatario del workflow -bpm_businessprocessmodel.association.bpm_assignees.title=Assegnatari del workflow -bpm_businessprocessmodel.association.bpm_assignees.description=Assegnatari del workflow -bpm_businessprocessmodel.association.bpm_groupAssignee.title=Assegnatario del gruppo del workflow -bpm_businessprocessmodel.association.bpm_groupAssignee.description=Assegnatario del gruppo del workflow -bpm_businessprocessmodel.association.bpm_groupAssignees.title=Assegnatari del gruppo del workflow -bpm_businessprocessmodel.association.bpm_groupAssignees.description=Assegnatari del gruppo del workflow diff --git a/config/alfresco/messages/bpm-messages_ja.properties b/config/alfresco/messages/bpm-messages_ja.properties deleted file mode 100755 index 6076aa35af..0000000000 --- a/config/alfresco/messages/bpm-messages_ja.properties +++ /dev/null @@ -1,72 +0,0 @@ -# Display labels for base Business Process Model - -bpm_businessprocessmodel.title=\u30d3\u30b8\u30cd\u30b9\u30d7\u30ed\u30bb\u30b9\u30e2\u30c7\u30eb -bpm_businessprocessmodel.description=\u3059\u3079\u3066\u306e\u30d3\u30b8\u30cd\u30b9\u30d7\u30ed\u30bb\u30b9\u306e\u57fa\u790e\u5b9a\u7fa9 - -# Default transition -bpm_businessprocessmodel.transition.title=\u30bf\u30b9\u30af\u5b8c\u4e86 -bpm_businessprocessmodel.transition.description=\u30bf\u30b9\u30af\u5b8c\u4e86 - -# Base Task -bpm_businessprocessmodel.type.bpm_task.title=\u30bf\u30b9\u30af -bpm_businessprocessmodel.type.bpm_task.description=\u30bf\u30b9\u30af -bpm_businessprocessmodel.property.bpm_taskId.title=ID -bpm_businessprocessmodel.property.bpm_taskId.description=ID -bpm_businessprocessmodel.property.bpm_startDate.title=\u958b\u59cb\u65e5 -bpm_businessprocessmodel.property.bpm_startDate.description=\u958b\u59cb\u65e5 -bpm_businessprocessmodel.property.bpm_completionDate.title=\u5b8c\u4e86\u65e5 -bpm_businessprocessmodel.property.bpm_completionDate.description=\u5b8c\u4e86\u65e5 -bpm_businessprocessmodel.property.bpm_dueDate.title=\u7de0\u5207\u65e5 -bpm_businessprocessmodel.property.bpm_dueDate.description=\u7de0\u5207\u65e5 -bpm_businessprocessmodel.property.bpm_status.title=\u30b9\u30c6\u30fc\u30bf\u30b9 -bpm_businessprocessmodel.property.bpm_status.description=\u30b9\u30c6\u30fc\u30bf\u30b9 -bpm_businessprocessmodel.property.bpm_priority.title=\u512a\u5148 -bpm_businessprocessmodel.property.bpm_priority.description=\u512a\u5148 -bpm_businessprocessmodel.property.bpm_percentComplete.title=\u9032\u6357\u5ea6 -bpm_businessprocessmodel.property.bpm_percentComplete.description=\u9032\u6357\u5ea6 -bpm_businessprocessmodel.property.bpm_comment.title=\u30b3\u30e1\u30f3\u30c8 -bpm_businessprocessmodel.property.bpm_comment.description=\u30b3\u30e1\u30f3\u30c8 -bpm_businessprocessmodel.association.bpm_pooledActors.title=\u30d7\u30fc\u30eb\u3055\u308c\u305f\u30e6\u30fc\u30b6 -bpm_businessprocessmodel.association.bpm_pooledActors.description=\u30d7\u30fc\u30eb - -# Workflow Task -bpm_businessprocessmodel.type.bpm_workflowTask.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30bf\u30b9\u30af -bpm_businessprocessmodel.type.bpm_workflowTask.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u3088\u3063\u3066\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u30bf\u30b9\u30af -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9ID -bpm_businessprocessmodel.property.bpm_workflowDefinitionId.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9a\u7fa9ID -bpm_businessprocessmodel.property.bpm_workflowInstanceId.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9ID -bpm_businessprocessmodel.property.bpm_workflowInstanceId.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9ID -bpm_businessprocessmodel.property.bpm_context.title=\u30bf\u30b9\u30af\u30b3\u30f3\u30c6\u30af\u30b9\u30c8 -bpm_businessprocessmodel.property.bpm_context.description=\u3053\u306e\u30bf\u30b9\u30af\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u308b\u30b3\u30f3\u30c6\u30af\u30b9\u30c8 -bpm_businessprocessmodel.property.bpm_description.title=\u8aac\u660e -bpm_businessprocessmodel.property.bpm_description.description=\u3053\u306e\u30bf\u30b9\u30af\u306e\u76ee\u7684\u306e\u8aac\u660e -bpm_businessprocessmodel.property.bpm_outcome.title=\u7d50\u679c -bpm_businessprocessmodel.property.bpm_outcome.description=\u30bf\u30b9\u30af\u5b8c\u4e86\u6642\u306b\u4e0b\u3055\u308c\u305f\u5224\u65ad -bpm_businessprocessmodel.property.bpm_completedItems.title=\u5b8c\u4e86\u6e08\u30a2\u30a4\u30c6\u30e0 -bpm_businessprocessmodel.property.bpm_completedItems.description=\u5b8c\u4e86\u6e08\u3068\u30de\u30fc\u30af\u3055\u308c\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u30a2\u30a4\u30c6\u30e0 -bpm_businessprocessmodel.property.bpm_packageActionGroup.title=\u30d1\u30c3\u30b1\u30fc\u30b8\u30a2\u30af\u30b7\u30e7\u30f3 -bpm_businessprocessmodel.property.bpm_packageActionGroup.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30c3\u30b1\u30fc\u30b8\u4e0a\u3067\u5229\u7528\u53ef\u80fd\u306a\u30a2\u30af\u30b7\u30e7\u30f3 -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.title=\u30d1\u30c3\u30b1\u30fc\u30b8\u30a2\u30a4\u30c6\u30e0\u30a2\u30af\u30b7\u30e7\u30f3 -bpm_businessprocessmodel.property.bpm_packageItemActionGroup.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30c3\u30b1\u30fc\u30b8\u30a2\u30a4\u30c6\u30e0\u3067\u5229\u7528\u53ef\u80fd\u306a\u30a2\u30af\u30b7\u30e7\u30f3 -bpm_businessprocessmodel.association.bpm_package.title=\u30b3\u30f3\u30c6\u30f3\u30c4\u30d1\u30c3\u30b1\u30fc\u30b8 -bpm_businessprocessmodel.association.bpm_package.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u901a\u3058\u3066\u9001\u3089\u308c\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u96c6\u307e\u308a -bpm_businessprocessmodel.aspect.bpm_workflowPackage.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30d1\u30c3\u30b1\u30fc\u30b8 -bpm_businessprocessmodel.aspect.bpm_workflowPackage.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u901a\u3058\u3066\u9001\u3089\u308c\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u96c6\u307e\u308a - -# Workflow Start Task -bpm_businessprocessmodel.type.bpm_startTask.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u958b\u59cb\u30bf\u30b9\u30af -bpm_businessprocessmodel.type.bpm_startTask.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u958b\u59cb\u306b\u5fc5\u8981\u306a\u60c5\u5831\u53ce\u96c6\u306b\u4f7f\u7528\u3055\u308c\u308b\u30bf\u30b9\u30af -bpm_businessprocessmodel.property.bpm_workflowDescription.title=\u8aac\u660e -bpm_businessprocessmodel.property.bpm_workflowDescription.description=\u8aac\u660e -bpm_businessprocessmodel.property.bpm_workflowDueDate.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u7de0\u5207\u65e5 -bpm_businessprocessmodel.property.bpm_workflowDueDate.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u7de0\u5207\u65e5 -bpm_businessprocessmodel.property.bpm_workflowPriority.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u512a\u5148 -bpm_businessprocessmodel.property.bpm_workflowPriority.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u512a\u5148 -bpm_businessprocessmodel.association.bpm_assignee.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_assignee.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_assignees.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_assignees.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_groupAssignee.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30b0\u30eb\u30fc\u30d7\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_groupAssignee.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30b0\u30eb\u30fc\u30d7\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_groupAssignees.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30b0\u30eb\u30fc\u30d7\u62c5\u5f53\u8005 -bpm_businessprocessmodel.association.bpm_groupAssignees.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30b0\u30eb\u30fc\u30d7\u62c5\u5f53\u8005 diff --git a/config/alfresco/messages/coci-service_de_DE.properties b/config/alfresco/messages/coci-service_de_DE.properties deleted file mode 100755 index d293004432..0000000000 --- a/config/alfresco/messages/coci-service_de_DE.properties +++ /dev/null @@ -1,12 +0,0 @@ -# coci service externalised display strings - -coci_service.working_copy_label=(Arbeitskopie) -coci_service.err_bad_copy=Das Original ist nicht aufzufinden. Vielleicht ist die Kopie besch\u00e4digt oder das Original wurde gel\u00f6scht oder verschoben. -coci_service.err_not_owner=Dieser Benutzer ist nicht Eigent\u00fcmer der Arbeitskopie und kann diese nicht einchecken. -coci_service.err_workingcopy_checkout=Eine Arbeitskopie kann nicht ausgescheckt werden. -coci_service.err_not_authenticated=Kann die von dem CheckOutCheckIn Service geforderten, derzeit authentifizierten Benutzerangaben nicht finden. -coci_service.err_workingcopy_has_no_mimetype=Node der Arbeitskopie ({0}) hat keinen MimeType -coci_service.err_already_checkedout=Dieser Node wurde bereits ausgecheckt. -coci_service.err_cannot_rename=Kann nicht von {0} in {1} umbenennen. -coci_service.discussion_for={0} Diskussion - diff --git a/config/alfresco/messages/coci-service_es_ES.properties b/config/alfresco/messages/coci-service_es_ES.properties deleted file mode 100755 index 44d30fdbee..0000000000 --- a/config/alfresco/messages/coci-service_es_ES.properties +++ /dev/null @@ -1,11 +0,0 @@ -# coci service externalised display strings - -coci_service.working_copy_label=(Copia de trabajo) -coci_service.err_bad_copy=El nodo original no puede ser encontrado. Tal vez la copia ha sido alterada o el original ha sido eliminado o movido. -coci_service.err_not_owner=Este usuario no es el propietario de la copia de trabajo y no puede desbloquearla -coci_service.err_workingcopy_checkout=Una copia de trabajo no puede ser bloqueada. -coci_service.err_not_authenticated=No se puede encontrar los detalles del usuario actualmente autenticado requeridos por el servicio CheckOutCheckIn (bloqueo-desbloqueo). -coci_service.err_workingcopy_has_no_mimetype=El nodo de copia de trabajo ({0}) no tiene ning\u00fan tipo MIME -coci_service.err_already_checkedout=Este nodo ya est\u00e1 bloqueado. -coci_service.err_cannot_rename=No se puede renombrar de {0} a {1}. -coci_service.discussion_for={0} foro diff --git a/config/alfresco/messages/coci-service_fr_FR.properties b/config/alfresco/messages/coci-service_fr_FR.properties deleted file mode 100755 index 20966e22ea..0000000000 --- a/config/alfresco/messages/coci-service_fr_FR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# coci service externalised display strings - -coci_service.working_copy_label=(Copie de Travail) -coci_service.err_bad_copy=Le n\u009cud original est introuvable. La copie a peut-\u00eatre \u00e9t\u00e9 corrompue ou l'original a \u00e9t\u00e9 supprim\u00e9 ou d\u00e9plac\u00e9. -coci_service.err_not_owner=L'utilisateur n'est pas le propri\u00e9taire de la copie de travail et ne peut pas lib\u00e9rer celle-ci. -coci_service.err_workingcopy_checkout=Vous ne pouvez pas r\u00e9server une copie de travail. -coci_service.err_not_authenticated=Les d\u00e9tails de l'utilisateur actuellement authentifi\u00e9, requis par le service CheckOutCheckIn, sont introuvables. -coci_service.err_workingcopy_has_no_mimetype=La copie de travail ({0}) n''a pas de type mime -coci_service.err_already_checkedout=Ce noeud a d\u00e9j\u00e0 \u00e9t\u00e9 archiv\u00e9. -coci_service.err_cannot_rename=Impossible de renommer {0} en {1}. -coci_service.discussion_for=Discussion {0} diff --git a/config/alfresco/messages/coci-service_it_IT.properties b/config/alfresco/messages/coci-service_it_IT.properties deleted file mode 100755 index 673db88dee..0000000000 --- a/config/alfresco/messages/coci-service_it_IT.properties +++ /dev/null @@ -1,11 +0,0 @@ -# coci service externalised display strings - -coci_service.working_copy_label=(Copia di lavoro) -coci_service.err_bad_copy=Impossibile trovare il nodo originale. \u00c8 possibile che la copia sia danneggiata oppure che l'originale sia stato eliminato o spostato. -coci_service.err_not_owner=Questo utente non \u00e8 il proprietario della copia di lavoro e non pu\u00f2 eseguirne il Check In. -coci_service.err_workingcopy_checkout=Impossibile eseguire il Check Out di una copia di lavoro. -coci_service.err_not_authenticated=Impossibile trovare i dettagli dell'utente attualmente autenticato richiesti dal servizio CheckOutCheckIn. -coci_service.err_workingcopy_has_no_mimetype=Il nodo ({0}) della copia di lavoro non dispone di mimetype -coci_service.err_already_checkedout=Questo nodo \u00e8 gi\u00e0 stato sottoposto a Check Out. -coci_service.err_cannot_rename=Impossibile rinominare {0} in {1}. -coci_service.discussion_for=Discussione {0} diff --git a/config/alfresco/messages/coci-service_ja.properties b/config/alfresco/messages/coci-service_ja.properties deleted file mode 100755 index 5b3901949b..0000000000 --- a/config/alfresco/messages/coci-service_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# coci service externalised display strings - -coci_service.working_copy_label=(\u4f5c\u696d\u7528\u30b3\u30d4\u30fc) -coci_service.err_bad_copy=\u5143\u306e\u30ce\u30fc\u30c9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u30b3\u30d4\u30fc\u304c\u58ca\u308c\u3066\u3044\u308b\u304b\u3001\u5143\u306e\u30ce\u30fc\u30c9\u304c\u524a\u9664\u307e\u305f\u306f\u79fb\u52d5\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -coci_service.err_not_owner=\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4f5c\u696d\u30b3\u30d4\u30fc\u306e\u30aa\u30fc\u30ca\u30fc\u3067\u306a\u3044\u305f\u3081\u3001\u30c1\u30a7\u30c3\u30af\u30a4\u30f3\u3067\u304d\u307e\u305b\u3093\u3002 -coci_service.err_workingcopy_checkout=\u4f5c\u696d\u30b3\u30d4\u30fc\u306f\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3067\u304d\u307e\u305b\u3093\u3002 -coci_service.err_not_authenticated=CheckOutCheckIn\u30b5\u30fc\u30d3\u30b9\u306b\u8981\u6c42\u3055\u308c\u308b\u3001\u73fe\u5728\u8a8d\u8a3c\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 -coci_service.err_workingcopy_has_no_mimetype=\u4f5c\u696d\u30b3\u30d4\u30fc\u30ce\u30fc\u30c9({0})\u306bMIME\u30bf\u30a4\u30d7\u304c\u3042\u308a\u307e\u305b\u3093 -coci_service.err_already_checkedout=\u3053\u306e\u30ce\u30fc\u30c9\u306f\u3059\u3067\u306b\u30c1\u30a7\u30c3\u30af\u30a2\u30a6\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -coci_service.err_cannot_rename={0} \u304b\u3089 {1} \u306b\u540d\u524d\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002 -coci_service.discussion_for={0} \u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3 diff --git a/config/alfresco/messages/content-filter-languages_de_DE.properties b/config/alfresco/messages/content-filter-languages_de_DE.properties deleted file mode 100755 index ddc4d5d8b7..0000000000 --- a/config/alfresco/messages/content-filter-languages_de_DE.properties +++ /dev/null @@ -1,194 +0,0 @@ -## Translations of ISO 639-1 languages codes - -content_filter_lang.aa=Afarisch -content_filter_lang.ab=Abchasisch -content_filter_lang.ae=Avestanisch -content_filter_lang.af=Afrikaans -content_filter_lang.ak=Akan -content_filter_lang.am=Amharisch -content_filter_lang.an=Aragonesich -content_filter_lang.ar=Arabisch -content_filter_lang.as=Assamesisch -content_filter_lang.av=Avarisch -content_filter_lang.ay=Aymara -content_filter_lang.az=Aserbeidschanisch -content_filter_lang.ba=Baschkirisch -content_filter_lang.be=Belorussisch -content_filter_lang.bg=Bulgarisch -content_filter_lang.bh=Bihari -content_filter_lang.bi=Bislama -content_filter_lang.bm=Bambara -content_filter_lang.bn=Bengalisch -content_filter_lang.bo=Tibetanisch -content_filter_lang.br=Bretonisch -content_filter_lang.bs=Bosnisch -content_filter_lang.ca=Katalanisch, Valenzianisch -content_filter_lang.ce=Tschetschenisch -content_filter_lang.ch=Chamorro -content_filter_lang.co=Korsisch -content_filter_lang.cr=Cree -content_filter_lang.cs=Tschechisch -content_filter_lang.cu=Slawisch -content_filter_lang.cv=Tschuwaschisch -content_filter_lang.cy=Walisisch -content_filter_lang.da=D\u00e4nisch -content_filter_lang.de=Deutsch -content_filter_lang.dv=Maledivisch -content_filter_lang.dz=Dzongkha -content_filter_lang.ee=Ewe -content_filter_lang.el=Griechisch -content_filter_lang.en=Englisch -content_filter_lang.eo=Esperanto -content_filter_lang.es=Spanisch -content_filter_lang.et=Estnisch -content_filter_lang.eu=Baskisch -content_filter_lang.fa=Persisch -content_filter_lang.ff=Fulfulde -content_filter_lang.fi=Finnisch -content_filter_lang.fj=Fidschi -content_filter_lang.fo=F\u00e4r\u00f6isch -content_filter_lang.fr=Franz\u00f6sisch -content_filter_lang.fy=Westfriesisch -content_filter_lang.ga=Irisch -content_filter_lang.gd=G\u00e4lisch -content_filter_lang.gl=Galizisch -content_filter_lang.gn=Guarani -content_filter_lang.gu=Gujarati -content_filter_lang.gv=Manx -content_filter_lang.ha=Hausa -content_filter_lang.he=Hebr\u00e4isch -content_filter_lang.hi=Hindi -content_filter_lang.ho=Hiri Motu -content_filter_lang.hr=Kroatisch -content_filter_lang.ht=Haitianisch -content_filter_lang.hu=Ungarisch -content_filter_lang.hy=Armenisch -content_filter_lang.hz=Herero -content_filter_lang.ia=Interlingua -content_filter_lang.id=Indonesisch -content_filter_lang.ie=Interlingue -content_filter_lang.ig=Igbo -content_filter_lang.ii=Yi -content_filter_lang.ik=Inupiaq -content_filter_lang.io=Ido -content_filter_lang.is=Isl\u00e4ndisch -content_filter_lang.it=Italienisch -content_filter_lang.iu=Inuktitut -content_filter_lang.ja=Japanisch -content_filter_lang.jv=Javanisch -content_filter_lang.ka=Georgisch -content_filter_lang.kg=Kongolesisch -content_filter_lang.ki=Kikuyu; Gikuyu -content_filter_lang.kj=Kwanyama -content_filter_lang.kk=Kasachisch -content_filter_lang.kl=Kalaallisut; Gr\u00f6nl\u00e4ndisch -content_filter_lang.km=Khmer-Sprache -content_filter_lang.kn=Kannada -content_filter_lang.ko=Koreanisch -content_filter_lang.kr=Kanuri -content_filter_lang.ks=Kaschmiri -content_filter_lang.ku=Kurdisch -content_filter_lang.kv=Komi -content_filter_lang.kw=Kornische Sprache -content_filter_lang.ky=Kirgisisch -content_filter_lang.la=Lateinisch -content_filter_lang.lb=Luxemburgisch; Letzeburgisch -content_filter_lang.lg=Ganda -content_filter_lang.li=Limburgisch; Limburger -content_filter_lang.ln=Lingala -content_filter_lang.lo=Lao -content_filter_lang.lt=Litauisch -content_filter_lang.lu=Luba-Katanga -content_filter_lang.lv=Lettisch -content_filter_lang.mg=Malagasy -content_filter_lang.mh=Marshallesisch -content_filter_lang.mi=Maori -content_filter_lang.mk=Mazedonisch -content_filter_lang.ml=Malayalam -content_filter_lang.mn=Mongolisch -content_filter_lang.mo=Moldawisch -content_filter_lang.mr=Marathi -content_filter_lang.ms=Malaiisch -content_filter_lang.mt=Maltesisch -content_filter_lang.my=Burmesisch -content_filter_lang.na=Nauru -content_filter_lang.nb=Norwegisch Bokm\u00e5l -content_filter_lang.nd=Nord-Ndebele -content_filter_lang.ne=Nepalesisch -content_filter_lang.ng=Ndonga -content_filter_lang.nl=Niederl\u00e4ndisch -content_filter_lang.nn=Norwegisch Nynorsk -content_filter_lang.no=Norwegisch -content_filter_lang.nr=S\u00fcd-Ndebele -content_filter_lang.nv=Navajo; Navaho -content_filter_lang.ny=Chichewa; Chewa; Nyanja -content_filter_lang.oc=Okzitanisch (nach 1500); Provenzalisch -content_filter_lang.oj=Ojibwa -content_filter_lang.om=Oromo -content_filter_lang.or=Oriya -content_filter_lang.os=Ossetisch -content_filter_lang.pa=Panjabi; Punjabi -content_filter_lang.pi=Pali -content_filter_lang.pl=Polnisch -content_filter_lang.ps=Pushto -content_filter_lang.pt=Portugiesisch -content_filter_lang.qu=Quechua -content_filter_lang.rm=R\u00e4toromanisch -content_filter_lang.rn=Rundi -content_filter_lang.ro=Rum\u00e4nisch -content_filter_lang.ru=Russisch -content_filter_lang.rw=Kinyarwanda -content_filter_lang.sa=Sanskrit -content_filter_lang.sc=Sardisch -content_filter_lang.sd=Sindhi -content_filter_lang.se=Nord-Sami -content_filter_lang.sg=Sango -content_filter_lang.si=Sinhala; Sinhalesisch -content_filter_lang.sk=Slowakisch -content_filter_lang.sl=Slowenisch -content_filter_lang.sm=Samoisch -content_filter_lang.sn=Shona -content_filter_lang.so=Somalisch -content_filter_lang.sq=Albanisch -content_filter_lang.sr=Serbisch -content_filter_lang.ss=Swati -content_filter_lang.st=S\u00fcdl. Sotho -content_filter_lang.su=Sudanesisch -content_filter_lang.sv=Schwedisch -content_filter_lang.sw=Swahili -content_filter_lang.ta=Tamil -content_filter_lang.te=Telugu -content_filter_lang.tg=Tajik -content_filter_lang.th=Thai -content_filter_lang.ti=Tigrinya -content_filter_lang.tk=Turkmenisch -content_filter_lang.tl=Tagalog -content_filter_lang.tn=Tswana -content_filter_lang.to=Tonga (Tonga Inseln) -content_filter_lang.tr=T\u00fcrkisch -content_filter_lang.tr=T\u00fcrkisch -content_filter_lang.ts=Tsonga -content_filter_lang.tt=Tatarisch -content_filter_lang.tw=Twi -content_filter_lang.ty=Tahitisch -content_filter_lang.ug=Uigurisch -content_filter_lang.uk=Ukrainisch -content_filter_lang.ur=Urdu -content_filter_lang.uz=Usbekisch -content_filter_lang.ve=Venda -content_filter_lang.vi=Vietnamesisch -content_filter_lang.vo=Volap\u00fck -content_filter_lang.wa=Wallonisch -content_filter_lang.wo=Wolof -content_filter_lang.xh=Xhosa -content_filter_lang.yi=Jiddisch -content_filter_lang.yo=Yoruba -content_filter_lang.za=Zhuang; Chuang -content_filter_lang.zh=Chinesisch -content_filter_lang.zu=Zulu - -## Duplicate messages to take in account the old -## ISO code. -content_filter_lang.iw=Hebr\u00e4isch -content_filter_lang.in=Indonesisch -content_filter_lang.ji=Jiddisch diff --git a/config/alfresco/messages/content-filter-languages_es_ES.properties b/config/alfresco/messages/content-filter-languages_es_ES.properties deleted file mode 100755 index 5d0d03aa3c..0000000000 --- a/config/alfresco/messages/content-filter-languages_es_ES.properties +++ /dev/null @@ -1,194 +0,0 @@ -## Translations of ISO 639-1 languages codes - -content_filter_lang.aa=Afar -content_filter_lang.ab=Abjasio -content_filter_lang.ae=Av\u00e9stico -content_filter_lang.af=Afrikaans -content_filter_lang.ak=Akan -content_filter_lang.am=Am\u00e1rico -content_filter_lang.an=Aragon\u00e9s -content_filter_lang.ar=\u00c1rabe -content_filter_lang.as=Assam\u00e9s -content_filter_lang.av=Avar -content_filter_lang.ay=Aimara -content_filter_lang.az=Azerbaiyano -content_filter_lang.ba=Bashkir -content_filter_lang.be=Bielorruso -content_filter_lang.bg=B\u00falgaro -content_filter_lang.bh=Bihari -content_filter_lang.bi=Bislama -content_filter_lang.bm=Bambara -content_filter_lang.bn=Bengal\u00ed -content_filter_lang.bo=Tibetano -content_filter_lang.br=Bret\u00f3n -content_filter_lang.bs=Bosnio -content_filter_lang.ca=Catal\u00e1n; Valenciano -content_filter_lang.ce=Checheno -content_filter_lang.ch=Chamorro -content_filter_lang.co=Corso -content_filter_lang.cr=Cree -content_filter_lang.cs=Checo -content_filter_lang.cu=Eslavo -content_filter_lang.cv=Chuvasio -content_filter_lang.cy=Gal\u00e9s -content_filter_lang.da=Dan\u00e9s -content_filter_lang.de=Alem\u00e1n -content_filter_lang.dv=Maldivo -content_filter_lang.dz=Dzongkha -content_filter_lang.ee=Ewe -content_filter_lang.el=Griego -content_filter_lang.en=Ingl\u00e9s -content_filter_lang.eo=Esperanto -content_filter_lang.es=Espa\u00f1ol -content_filter_lang.et=Estonio -content_filter_lang.eu=Vasco -content_filter_lang.fa=Persa -content_filter_lang.ff=Fulah -content_filter_lang.fi=Fin\u00e9s -content_filter_lang.fj=Fiyiano -content_filter_lang.fo=Feroano -content_filter_lang.fr=Franc\u00e9s -content_filter_lang.fy=Fris\u00f3n Occidental -content_filter_lang.ga=Irland\u00e9s -content_filter_lang.gd=Ga\u00e9lico -content_filter_lang.gl=Gallego -content_filter_lang.gn=Guaran\u00ed -content_filter_lang.gu=Guyarati -content_filter_lang.gv=Manx -content_filter_lang.ha=Hausa -content_filter_lang.he=Hebreo -content_filter_lang.hi=Hindi -content_filter_lang.ho=Hiri Motu -content_filter_lang.hr=Croata -content_filter_lang.ht=Haitiano -content_filter_lang.hu=H\u00fangaro -content_filter_lang.hy=Armenio -content_filter_lang.hz=Herero -content_filter_lang.ia=Interlingua -content_filter_lang.id=Indonesio -content_filter_lang.ie=Interlingue -content_filter_lang.ig=Igbo -content_filter_lang.ii=Sichuan Yi -content_filter_lang.ik=Inupiaq -content_filter_lang.io=Ido -content_filter_lang.is=Island\u00e9s -content_filter_lang.it=Italiano -content_filter_lang.iu=Inuktitut -content_filter_lang.ja=Japon\u00e9s -content_filter_lang.jv=Javan\u00e9s -content_filter_lang.ka=Georgiano -content_filter_lang.kg=Kongo -content_filter_lang.ki=Kikuyu; Gikuyu -content_filter_lang.kj=Kuanyama; Kwanyama -content_filter_lang.kk=Kazajo -content_filter_lang.kl=Kalaallisut; Groenland\u00e9s -content_filter_lang.km=Jmer -content_filter_lang.kn=Canar\u00e9s -content_filter_lang.ko=Coreano -content_filter_lang.kr=Kanuri -content_filter_lang.ks=Cachemir -content_filter_lang.ku=Kurdo -content_filter_lang.kv=Komi -content_filter_lang.kw=Cornuall\u00e9s -content_filter_lang.ky=Kirguiz -content_filter_lang.la=Lat\u00edn -content_filter_lang.lb=Luxemburgu\u00e9s; Letzeburgesch -content_filter_lang.lg=Ganda -content_filter_lang.li=Limburgan; Limburger; Limburgu\u00e9s -content_filter_lang.ln=Lingala -content_filter_lang.lo=Laosiano -content_filter_lang.lt=Lituano -content_filter_lang.lu=Luba-Katanga -content_filter_lang.lv=Let\u00f3n -content_filter_lang.mg=Malgache -content_filter_lang.mh=Marshal\u00e9s -content_filter_lang.mi=Maor\u00ed -content_filter_lang.mk=Macedonio -content_filter_lang.ml=Malabar -content_filter_lang.mn=Mongol -content_filter_lang.mo=Moldavo -content_filter_lang.mr=Marat\u00ed -content_filter_lang.ms=Malayo -content_filter_lang.mt=Malt\u00e9s -content_filter_lang.my=Birmano -content_filter_lang.na=Nauru -content_filter_lang.nb=Noruego Bokm\u00e5l -content_filter_lang.nd=Ndebele del Norte -content_filter_lang.ne=Nepal\u00e9s -content_filter_lang.ng=Ndonga -content_filter_lang.nl=Holand\u00e9s -content_filter_lang.nn=Noruego Nynorsk -content_filter_lang.no=Noruego -content_filter_lang.nr=Ndebele del Sur -content_filter_lang.nv=Navajo; Navaho -content_filter_lang.ny=Chichewa; Chewa; Nyanja -content_filter_lang.oc=Occitano (despu\u00e9s de 1500); Provenzal -content_filter_lang.oj=Ojibwa -content_filter_lang.om=Oromo -content_filter_lang.or=Oriya -content_filter_lang.os=Osetio -content_filter_lang.pa=Panyab\u00ed, Punyab\u00ed -content_filter_lang.pi=Pali -content_filter_lang.pl=Polaco -content_filter_lang.ps=Pashto -content_filter_lang.pt=Portugu\u00e9s -content_filter_lang.qu=Quichua -content_filter_lang.rm=Retorromance -content_filter_lang.rn=Rundi -content_filter_lang.ro=Rumano -content_filter_lang.ru=Ruso -content_filter_lang.rw=Kinyarwanda -content_filter_lang.sa=S\u00e1nscrito -content_filter_lang.sc=Sardo -content_filter_lang.sd=Sindhi -content_filter_lang.se=Sami del norte -content_filter_lang.sg=Sango -content_filter_lang.si=Cingal\u00e9s -content_filter_lang.sk=Eslovaco -content_filter_lang.sl=Esloveno -content_filter_lang.sm=Samoano -content_filter_lang.sn=Shona -content_filter_lang.so=Somal\u00ed -content_filter_lang.sq=Alban\u00e9s -content_filter_lang.sr=Serbio -content_filter_lang.ss=Swazi -content_filter_lang.st=Sotho del Sur -content_filter_lang.su=Sundan\u00e9s -content_filter_lang.sv=Sueco -content_filter_lang.sw=Swahili -content_filter_lang.ta=Tamil -content_filter_lang.te=Telugu -content_filter_lang.tg=Tayiko -content_filter_lang.th=Tailand\u00e9s -content_filter_lang.ti=Tigrinya -content_filter_lang.tk=Turkmeno -content_filter_lang.tl=Tagalo -content_filter_lang.tn=Tswana -content_filter_lang.to=Tonga (Islas Tonga) -content_filter_lang.tr=Turco -content_filter_lang.tr=Turco -content_filter_lang.ts=Tsonga -content_filter_lang.tt=T\u00e1rtaro -content_filter_lang.tw=Twi -content_filter_lang.ty=Tahitiano -content_filter_lang.ug=Uigur -content_filter_lang.uk=Ucraniano -content_filter_lang.ur=Urd\u00fa -content_filter_lang.uz=Uzbeko -content_filter_lang.ve=Luvenda -content_filter_lang.vi=Vietnam\u00e9s -content_filter_lang.vo=Volapuck -content_filter_lang.wa=Val\u00f3n -content_filter_lang.wo=Wolof -content_filter_lang.xh=Xhosa -content_filter_lang.yi=Y\u00eddish -content_filter_lang.yo=Yoruba -content_filter_lang.za=Zhuang; Chuang -content_filter_lang.zh=Chino -content_filter_lang.zu=Zul\u00fa - -## Duplicate messages to take in account the old -## ISO code. -content_filter_lang.iw=Hebreo -content_filter_lang.in=Indonesio -content_filter_lang.ji=Y\u00eddish diff --git a/config/alfresco/messages/content-filter-languages_fr_FR.properties b/config/alfresco/messages/content-filter-languages_fr_FR.properties deleted file mode 100755 index a528648262..0000000000 --- a/config/alfresco/messages/content-filter-languages_fr_FR.properties +++ /dev/null @@ -1,194 +0,0 @@ -## Translations of ISO 639-1 languages codes - -content_filter_lang.aa=Afar -content_filter_lang.ab=Abkhaze -content_filter_lang.ae=Avestique -content_filter_lang.af=Afrikaans -content_filter_lang.ak=Akan -content_filter_lang.am=Amharique -content_filter_lang.an=Aragonais -content_filter_lang.ar=Arabe -content_filter_lang.as=Assamais -content_filter_lang.av=Avar -content_filter_lang.ay=Aymara -content_filter_lang.az=Az\u00e9ri -content_filter_lang.ba=Bachkir -content_filter_lang.be=Bi\u00e9lorusse -content_filter_lang.bg=Bulgare -content_filter_lang.bh=Bihari -content_filter_lang.bi=Bichlamar -content_filter_lang.bm=Bambara -content_filter_lang.bn=Bengal\u00ee -content_filter_lang.bo=Tib\u00e9tain -content_filter_lang.br=Breton -content_filter_lang.bs=Bosniaque -content_filter_lang.ca=Catalan; Valencien -content_filter_lang.ce=Tch\u00e9tch\u00e8ne -content_filter_lang.ch=Chamorro -content_filter_lang.co=Corse -content_filter_lang.cr=Cri -content_filter_lang.cs=Tch\u00e8que -content_filter_lang.cu=Slavon D'\u00c9glise; Vieux Slave; Slavon Liturgique; Vieux Bulgare -content_filter_lang.cv=Tchouvache -content_filter_lang.cy=Gallois -content_filter_lang.da=Danois -content_filter_lang.de=Allemand -content_filter_lang.dv=Maldivien -content_filter_lang.dz=Dzongkha -content_filter_lang.ee=\u00c9w\u00e9 -content_filter_lang.el=Grec Moderne (Apr\u00e8s 1453) -content_filter_lang.en=Anglais -content_filter_lang.eo=Esp\u00e9ranto -content_filter_lang.es=Espagnol; Castillan -content_filter_lang.et=Estonien -content_filter_lang.eu=Basque -content_filter_lang.fa=Persan -content_filter_lang.ff=Peul -content_filter_lang.fi=Finnois -content_filter_lang.fj=Fidjien -content_filter_lang.fo=F\u00e9ro\u00efen -content_filter_lang.fr=Fran\u00e7ais -content_filter_lang.fy=Frison Occidental -content_filter_lang.ga=Irlandais -content_filter_lang.gd=Ga\u00e9lique; Ga\u00e9lique \u00c9cossais -content_filter_lang.gl=Galicien -content_filter_lang.gn=Guarani -content_filter_lang.gu=Goudjrati -content_filter_lang.gv=Manx; Mannois -content_filter_lang.ha=Haoussa -content_filter_lang.he=H\u00e9breu -content_filter_lang.hi=Hindi -content_filter_lang.ho=Hiri Motu -content_filter_lang.hr=Croate -content_filter_lang.ht=Ha\u00eftien; Cr\u00e9ole Ha\u00eftien -content_filter_lang.hu=Hongrois -content_filter_lang.hy=Arm\u00e9nien -content_filter_lang.hz=H\u00e9r\u00e9ro -content_filter_lang.ia=Interlingua (Langue Auxiliaire Internationale) -content_filter_lang.id=Indon\u00e9sien -content_filter_lang.ie=Interlingue -content_filter_lang.ig=Igbo -content_filter_lang.ii=Yi De Sichuan -content_filter_lang.ik=Inupiaq -content_filter_lang.io=Ido -content_filter_lang.is=Islandais -content_filter_lang.it=Italien -content_filter_lang.iu=Inuktitut -content_filter_lang.ja=Japonais -content_filter_lang.jv=Javanais -content_filter_lang.ka=G\u00e9orgien -content_filter_lang.kg=Kikongo -content_filter_lang.ki=Kikuyu -content_filter_lang.kj=Kuanyama\u00a0; Kwanyama -content_filter_lang.kk=Kazakh -content_filter_lang.kl=Groenlandais -content_filter_lang.km=Khmer Central -content_filter_lang.kn=Kannada -content_filter_lang.ko=Cor\u00e9en -content_filter_lang.kr=Kanouri -content_filter_lang.ks=Kashmiri -content_filter_lang.ku=Kurde -content_filter_lang.kv=Kom -content_filter_lang.kw=Cornique -content_filter_lang.ky=Kirghiz -content_filter_lang.la=Latin -content_filter_lang.lb=Luxembourgeois -content_filter_lang.lg=Ganda -content_filter_lang.li=Limbourgeois -content_filter_lang.ln=Lingala -content_filter_lang.lo=Lao -content_filter_lang.lt=Lituanien -content_filter_lang.lu=Luba-katanga -content_filter_lang.lv=Letton -content_filter_lang.mg=Malgache -content_filter_lang.mh=Marshall -content_filter_lang.mi=Maori -content_filter_lang.mk=Mac\u00e9donien -content_filter_lang.ml=Malay\u00e2lam -content_filter_lang.mn=Mongol -content_filter_lang.mo=Moldave -content_filter_lang.mr=Marathe -content_filter_lang.ms=Malais -content_filter_lang.mt=Maltais -content_filter_lang.my=Birman -content_filter_lang.na=Nauruan -content_filter_lang.nb=Bokm\u00e5l -content_filter_lang.nd=Nd\u00e9b\u00e9l\u00e9 Du Nord -content_filter_lang.ne=N\u00e9palais -content_filter_lang.ng=Ndonga -content_filter_lang.nl=N\u00e9erlandais; Flamand -content_filter_lang.nn=Norv\u00e9gien Nynorsk; Nynorsk, Norv\u00e9gien -content_filter_lang.no=Norv\u00e9gien -content_filter_lang.nr=Nd\u00e9b\u00e9l\u00e9 Du Sud -content_filter_lang.nv=Navaho -content_filter_lang.ny=Chichewa\u00a0; Chewa\u00a0; Chinyanja -content_filter_lang.oc=Occitan (apr\u00e8s 1500)\u00a0; Proven\u00e7al -content_filter_lang.oj=Ojibwa -content_filter_lang.om=Galla -content_filter_lang.or=Oriya -content_filter_lang.os=Oss\u00e8te -content_filter_lang.pa=Pendjabi -content_filter_lang.pi=Pali -content_filter_lang.pl=Polonais -content_filter_lang.ps=Pachto -content_filter_lang.pt=Portugais -content_filter_lang.qu=Quechua -content_filter_lang.rm=Romanche -content_filter_lang.rn=Kirundi -content_filter_lang.ro=Roumain -content_filter_lang.ru=Russe -content_filter_lang.rw=Rwanda -content_filter_lang.sa=Sanskrit -content_filter_lang.sc=Sarde -content_filter_lang.sd=Sindh\u00ee -content_filter_lang.se=Sami Du Nord -content_filter_lang.sg=Sango -content_filter_lang.si=Singhalais -content_filter_lang.sk=Slovaque -content_filter_lang.sl=Slov\u00e8ne -content_filter_lang.sm=Samoan -content_filter_lang.sn=Shona -content_filter_lang.so=Somali -content_filter_lang.sq=Albanais -content_filter_lang.sr=Serbe -content_filter_lang.ss=Swati -content_filter_lang.st=Sotho Du Sud -content_filter_lang.su=Soundanais -content_filter_lang.sv=Su\u00e9dois -content_filter_lang.sw=Swahili -content_filter_lang.ta=Tamoul -content_filter_lang.te=T\u00e9lougou -content_filter_lang.tg=Tadjik -content_filter_lang.th=Tha\u00ef -content_filter_lang.ti=Tigrigna -content_filter_lang.tk=Turkm\u00e8ne -content_filter_lang.tl=Tagalog -content_filter_lang.tn=Tswana -content_filter_lang.to=Tongan (\u00celes Tonga) -content_filter_lang.tr=Turc -content_filter_lang.tr=Turc -content_filter_lang.ts=Tsonga -content_filter_lang.tt=Tatar -content_filter_lang.tw=Twi -content_filter_lang.ty=Tahitien -content_filter_lang.ug=Ou\u00efgour -content_filter_lang.uk=Ukrainien -content_filter_lang.ur=Ourdou -content_filter_lang.uz=Ouszbek -content_filter_lang.ve=Venda -content_filter_lang.vi=Vietnamien -content_filter_lang.vo=Volap\u00fck -content_filter_lang.wa=Wallon -content_filter_lang.wo=Wolof -content_filter_lang.xh=Xhosa -content_filter_lang.yi=Yiddish -content_filter_lang.yo=Yoruba -content_filter_lang.za=Zhuang -content_filter_lang.zh=Chinois -content_filter_lang.zu=Zoulou - -## Duplicate messages to take in account the old -## ISO code. -content_filter_lang.iw=H\u00e9breu -content_filter_lang.in=Indon\u00e9sien -content_filter_lang.ji=Yiddish diff --git a/config/alfresco/messages/content-filter-languages_it_IT.properties b/config/alfresco/messages/content-filter-languages_it_IT.properties deleted file mode 100755 index c86d70469b..0000000000 --- a/config/alfresco/messages/content-filter-languages_it_IT.properties +++ /dev/null @@ -1,194 +0,0 @@ -## Translations of ISO 639-1 languages codes - -content_filter_lang.aa=Afar -content_filter_lang.ab=Abcaso -content_filter_lang.ae=Avestico -content_filter_lang.af=Afrikaans -content_filter_lang.ak=Akan -content_filter_lang.am=Amarico -content_filter_lang.an=Aragonese -content_filter_lang.ar=Arabo -content_filter_lang.as=Assamese -content_filter_lang.av=Avaro -content_filter_lang.ay=Aymara -content_filter_lang.az=Azero -content_filter_lang.ba=Baschiro -content_filter_lang.be=Bielorusso -content_filter_lang.bg=Bulgaro -content_filter_lang.bh=Bihari -content_filter_lang.bi=Bislama -content_filter_lang.bm=Bambara -content_filter_lang.bn=Bengali -content_filter_lang.bo=Tibetano -content_filter_lang.br=Bretone -content_filter_lang.bs=Bosniaco -content_filter_lang.ca=Catalano; Valenziano -content_filter_lang.ce=Ceceno -content_filter_lang.ch=Chamorro -content_filter_lang.co=Corso -content_filter_lang.cr=Cree -content_filter_lang.cs=Ceco -content_filter_lang.cu=Slavo -content_filter_lang.cv=Ciuvascio -content_filter_lang.cy=Gallese -content_filter_lang.da=Danese -content_filter_lang.de=Tedesco -content_filter_lang.dv=Maldiviano -content_filter_lang.dz=Dzongkha -content_filter_lang.ee=Ewe -content_filter_lang.el=Greco -content_filter_lang.en=Inglese -content_filter_lang.eo=Esperanto -content_filter_lang.es=Spagnolo -content_filter_lang.et=Estone -content_filter_lang.eu=Basco -content_filter_lang.fa=Persiano -content_filter_lang.ff=Fula -content_filter_lang.fi=Finlandese -content_filter_lang.fj=Figiano -content_filter_lang.fo=Faroese -content_filter_lang.fr=Francese -content_filter_lang.fy=Frisone occidentale -content_filter_lang.ga=Irlandese -content_filter_lang.gd=Gaelico -content_filter_lang.gl=Gallego -content_filter_lang.gn=Guarani -content_filter_lang.gu=Gujarati -content_filter_lang.gv=Manx -content_filter_lang.ha=Hausa -content_filter_lang.he=Ebraico -content_filter_lang.hi=Hindi -content_filter_lang.ho=Hiri motu -content_filter_lang.hr=Croato -content_filter_lang.ht=Haitiano -content_filter_lang.hu=Ungherese -content_filter_lang.hy=Armeno -content_filter_lang.hz=Herero -content_filter_lang.ia=Interlingua -content_filter_lang.id=Indonesiano -content_filter_lang.ie=Interlingua -content_filter_lang.ig=Ibo -content_filter_lang.ii=Sichuan Yi -content_filter_lang.ik=Inupiaq -content_filter_lang.io=Ido -content_filter_lang.is=Islandese -content_filter_lang.it=Italiano -content_filter_lang.iu=Inuktitut -content_filter_lang.ja=Giapponese -content_filter_lang.jv=Giavanese -content_filter_lang.ka=Georgiano -content_filter_lang.kg=Kongo -content_filter_lang.ki=Kikuyu; Gikuyu -content_filter_lang.kj=Kuanyama; Kwanyama -content_filter_lang.kk=Kazaco -content_filter_lang.kl=Kalaallisut; Groenlandese -content_filter_lang.km=Khmer -content_filter_lang.kn=Kannada -content_filter_lang.ko=Coreano -content_filter_lang.kr=Kanuri -content_filter_lang.ks=Kashmiri -content_filter_lang.ku=Curdo -content_filter_lang.kv=Komi -content_filter_lang.kw=Cornico -content_filter_lang.ky=Kirghiso -content_filter_lang.la=Latino -content_filter_lang.lb=Lussemburghese -content_filter_lang.lg=Ganda -content_filter_lang.li=Limburghese -content_filter_lang.ln=Lingala -content_filter_lang.lo=Lao -content_filter_lang.lt=Lituano -content_filter_lang.lu=Luba-katanga -content_filter_lang.lv=Lettone -content_filter_lang.mg=Malgascio -content_filter_lang.mh=Marshallese -content_filter_lang.mi=Maori -content_filter_lang.mk=Macedone -content_filter_lang.ml=Malayalam -content_filter_lang.mn=Mongolo -content_filter_lang.mo=Moldavo -content_filter_lang.mr=Marathi -content_filter_lang.ms=Malese -content_filter_lang.mt=Maltese -content_filter_lang.my=Birmano -content_filter_lang.na=Nauru -content_filter_lang.nb=Norvegese Bokm\u00e5l -content_filter_lang.nd=Ndebele settentrionale -content_filter_lang.ne=Nepalese -content_filter_lang.ng=Ndonga -content_filter_lang.nl=Olandese -content_filter_lang.nn=Norvegese Nynorsk -content_filter_lang.no=Norvegese -content_filter_lang.nr=Ndebele meridionale -content_filter_lang.nv=Navajo; Navaho -content_filter_lang.ny=Chichewa; Chewa; Nyanja -content_filter_lang.oc=Occitano (dopo il 1500); Provenzale -content_filter_lang.oj=Ojibwa -content_filter_lang.om=Oromo -content_filter_lang.or=Oriya -content_filter_lang.os=Osseto -content_filter_lang.pa=Panjabi; Punjabi -content_filter_lang.pi=Pali -content_filter_lang.pl=Polacco -content_filter_lang.ps=Pushto -content_filter_lang.pt=Portoghese -content_filter_lang.qu=Quechua -content_filter_lang.rm=Reto-romanzo -content_filter_lang.rn=Rundi -content_filter_lang.ro=Romeno -content_filter_lang.ru=Russo -content_filter_lang.rw=Kinyarwanda -content_filter_lang.sa=Sanscrito -content_filter_lang.sc=Sardo -content_filter_lang.sd=Sindhi -content_filter_lang.se=Sami settentrionale -content_filter_lang.sg=Sango -content_filter_lang.si=Sinhala; Singalese -content_filter_lang.sk=Slovacco -content_filter_lang.sl=Sloveno -content_filter_lang.sm=Samoano -content_filter_lang.sn=Shona -content_filter_lang.so=Somalo -content_filter_lang.sq=Albanese -content_filter_lang.sr=Serbo -content_filter_lang.ss=Swati -content_filter_lang.st=Sotho meridionale -content_filter_lang.su=Sundanese -content_filter_lang.sv=Svedese -content_filter_lang.sw=Swahili -content_filter_lang.ta=Tamil -content_filter_lang.te=Telugu -content_filter_lang.tg=Tagico -content_filter_lang.th=Thai -content_filter_lang.ti=Tigrino -content_filter_lang.tk=Turkmeno -content_filter_lang.tl=Tagalog -content_filter_lang.tn=Tswana -content_filter_lang.to=Tonga (Isole di Tonga) -content_filter_lang.tr=Turco -content_filter_lang.tr=Turco -content_filter_lang.ts=Tsonga -content_filter_lang.tt=Tataro -content_filter_lang.tw=Twi -content_filter_lang.ty=Tahitiano -content_filter_lang.ug=Uighuro; Uyghur -content_filter_lang.uk=Ucraino -content_filter_lang.ur=Urdu -content_filter_lang.uz=Uzbeco -content_filter_lang.ve=Venda -content_filter_lang.vi=Vietnamita -content_filter_lang.vo=Volap\u00fck -content_filter_lang.wa=Vallone -content_filter_lang.wo=Wolof -content_filter_lang.xh=Xhosa -content_filter_lang.yi=Yiddish -content_filter_lang.yo=Yoruba -content_filter_lang.za=Zhuang; Chuang -content_filter_lang.zh=Cinese -content_filter_lang.zu=Zulu - -## Duplicate messages to take in account the old -## ISO code. -content_filter_lang.iw=Ebraico -content_filter_lang.in=Indonesiano -content_filter_lang.ji=Yiddish diff --git a/config/alfresco/messages/content-filter-languages_ja.properties b/config/alfresco/messages/content-filter-languages_ja.properties deleted file mode 100755 index 7539a606d1..0000000000 --- a/config/alfresco/messages/content-filter-languages_ja.properties +++ /dev/null @@ -1,194 +0,0 @@ -## Translations of ISO 639-1 languages codes - -content_filter_lang.aa=\u30a2\u30d5\u30a1\u30eb\u8a9e -content_filter_lang.ab=\u30a2\u30d6\u30cf\u30ba\u8a9e -content_filter_lang.ae=\u30a2\u30f4\u30a7\u30b9\u30bf\u30fc\u8a9e -content_filter_lang.af=\u30a2\u30d5\u30ea\u30ab\u30fc\u30f3\u30b9\u8a9e -content_filter_lang.ak=\u30a2\u30ab\u30f3\u8a9e -content_filter_lang.am=\u30a2\u30e0\u30cf\u30e9\u8a9e -content_filter_lang.an=\u30a2\u30e9\u30b4\u30f3\u65b9\u8a00 -content_filter_lang.ar=\u30a2\u30e9\u30d3\u30a2\u8a9e -content_filter_lang.as=\u30a2\u30c3\u30b5\u30e0\u8a9e -content_filter_lang.av=\u30a2\u30f4\u30a1\u30ea\u30af\u8a9e -content_filter_lang.ay=\u30a2\u30a4\u30de\u30e9\u8a9e -content_filter_lang.az=\u30a2\u30bc\u30eb\u30d0\u30a4\u30b8\u30e3\u30f3\u8a9e -content_filter_lang.ba=\u30d0\u30b7\u30ad\u30fc\u30eb\u8a9e -content_filter_lang.be=\u30d9\u30e9\u30eb\u30fc\u30b7\u8a9e -content_filter_lang.bg=\u30d6\u30eb\u30ac\u30ea\u30a2\u8a9e -content_filter_lang.bh=\u30d3\u30cf\u30fc\u30eb\u8a9e -content_filter_lang.bi=\u30d3\u30b9\u30e9\u30de\u8a9e -content_filter_lang.bm=\u30d0\u30f3\u30d0\u30e9\u8a9e -content_filter_lang.bn=\u30d9\u30f3\u30ac\u30eb\u8a9e -content_filter_lang.bo=\u30c1\u30d9\u30c3\u30c8\u8a9e -content_filter_lang.br=\u30d6\u30eb\u30bf\u30f3\u8a9e -content_filter_lang.bs=\u30dc\u30b9\u30cb\u30a2\u8a9e -content_filter_lang.ca=\u30ab\u30bf\u30ed\u30cb\u30a2\u8a9e\u3001\u30d0\u30ec\u30f3\u30b7\u30a2\u8a9e -content_filter_lang.ce=\u30c1\u30a7\u30c1\u30a7\u30f3\u8a9e -content_filter_lang.ch=\u30c1\u30e3\u30e2\u30ed\u8a9e -content_filter_lang.co=\u30b3\u30eb\u30b7\u30ab\u65b9\u8a00 -content_filter_lang.cr=\u30af\u30ea\u30fc\u8a9e -content_filter_lang.cs=\u30c1\u30a7\u30b3\u8a9e -content_filter_lang.cu=\u30b9\u30e9\u30d6\u8a9e -content_filter_lang.cv=\u30c1\u30e5\u30d0\u30b7\u8a9e -content_filter_lang.cy=\u30a6\u30a7\u30fc\u30eb\u30ba\u8a9e -content_filter_lang.da=\u30c7\u30f3\u30de\u30fc\u30af\u8a9e -content_filter_lang.de=\u30c9\u30a4\u30c4\u8a9e -content_filter_lang.dv=\u30e2\u30eb\u30b8\u30d6\u8a9e -content_filter_lang.dz=\u30be\u30f3\u30ab\u8a9e -content_filter_lang.ee=\u30a8\u30a6\u30a7\u8a9e -content_filter_lang.el=\u30ae\u30ea\u30b7\u30e3\u8a9e -content_filter_lang.en=\u82f1\u8a9e -content_filter_lang.eo=\u30a8\u30b9\u30da\u30e9\u30f3\u30c8\u8a9e -content_filter_lang.es=\u30b9\u30da\u30a4\u30f3\u8a9e -content_filter_lang.et=\u30a8\u30b9\u30c8\u30cb\u30a2\u8a9e -content_filter_lang.eu=\u30d0\u30b9\u30af\u8a9e -content_filter_lang.fa=\u30da\u30eb\u30b7\u30e3\u8a9e -content_filter_lang.ff=\u30d5\u30e9\u8a9e -content_filter_lang.fi=\u30d5\u30a3\u30f3\u30e9\u30f3\u30c9\u8a9e -content_filter_lang.fj=\u30d5\u30a3\u30fc\u30b8\u30fc\u8a9e -content_filter_lang.fo=\u30d5\u30a7\u30ed\u30fc\u8a9e -content_filter_lang.fr=\u30d5\u30e9\u30f3\u30b9\u8a9e -content_filter_lang.fy=\u897f\u30d5\u30ea\u30b8\u30a2\u8a9e -content_filter_lang.ga=\u30a2\u30a4\u30eb\u30e9\u30f3\u30c9\u8a9e -content_filter_lang.gd=\u30b2\u30fc\u30eb\u8a9e -content_filter_lang.gl=\u30ac\u30ea\u30b7\u30a2\u8a9e -content_filter_lang.gn=\u30b0\u30a2\u30e9\u30cb\u8a9e -content_filter_lang.gu=\u30b0\u30b8\u30e3\u30e9\u30fc\u30c8\u8a9e -content_filter_lang.gv=\u30de\u30f3\u5cf6\u8a9e -content_filter_lang.ha=\u30cf\u30a6\u30b5\u8a9e -content_filter_lang.he=\u30d8\u30d6\u30e9\u30a4\u8a9e -content_filter_lang.hi=\u30d2\u30f3\u30c7\u30a3\u30fc\u8a9e -content_filter_lang.ho=\u30d2\u30ea\u30fb\u30e2\u30c4\u8a9e -content_filter_lang.hr=\u30af\u30ed\u30a2\u30c1\u30a2\u8a9e -content_filter_lang.ht=\u30cf\u30a4\u30c1\u8a9e -content_filter_lang.hu=\u30cf\u30f3\u30ac\u30ea\u30fc\u8a9e -content_filter_lang.hy=\u30a2\u30eb\u30e1\u30cb\u30a2\u8a9e -content_filter_lang.hz=\u30d8\u30ec\u30ed\u8a9e -content_filter_lang.ia=\u30a4\u30f3\u30bf\u30fc\u30ea\u30f3\u30b0\u30a2 -content_filter_lang.id=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u8a9e -content_filter_lang.ie=\u30a4\u30f3\u30bf\u30fc\u30ea\u30f3\u30b0 -content_filter_lang.ig=\u30a4\u30dc\u8a9e -content_filter_lang.ii=\u30b7\u30c1\u30e5\u30a2\u30f3\u30fb\u30a4\u8a9e -content_filter_lang.ik=\u30a4\u30cc\u30d4\u30a2\u30c3\u30af\u8a9e -content_filter_lang.io=\u30a4\u30c9\u8a9e -content_filter_lang.is=\u30a2\u30a4\u30b9\u30e9\u30f3\u30c9\u8a9e -content_filter_lang.it=\u30a4\u30bf\u30ea\u30a2\u8a9e -content_filter_lang.iu=\u30a4\u30cc\u30af\u30c6\u30a3\u30c8\u30a5\u30c8\u8a9e -content_filter_lang.ja=\u65e5\u672c\u8a9e -content_filter_lang.jv=\u30b8\u30e3\u30ef\u8a9e -content_filter_lang.ka=\u30b0\u30eb\u30b8\u30a2\u8a9e -content_filter_lang.kg=\u30b3\u30f3\u30b4\u8a9e -content_filter_lang.ki=\u30ad\u30af\u30e6\u8a9e\u3001\u30ae\u30af\u30e6\u8a9e -content_filter_lang.kj=\u30af\u30a2\u30f3\u30e4\u30de\u8a9e\u3001\u30af\u30ef\u30f3\u30e4\u30de\u8a9e -content_filter_lang.kk=\u30ab\u30b6\u30d5\u30b9\u30bf\u30f3\u8a9e -content_filter_lang.kl=\u30ab\u30e9\u30fc\u30ea\u30c3\u30c8\u8a9e\u3001\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u8a9e -content_filter_lang.km=\u30af\u30e1\u30fc\u30eb\u8a9e -content_filter_lang.kn=\u30ab\u30f3\u30ca\u30c0\u8a9e -content_filter_lang.ko=\u671d\u9bae\u8a9e -content_filter_lang.kr=\u30ab\u30cc\u30ea\u8a9e -content_filter_lang.ks=\u30ab\u30b7\u30df\u30fc\u30eb\u8a9e -content_filter_lang.ku=\u30af\u30eb\u30c9\u8a9e -content_filter_lang.kv=\u30b3\u30df\u8a9e -content_filter_lang.kw=\u30b3\u30fc\u30f3\u30a6\u30a9\u30fc\u30eb\u8a9e -content_filter_lang.ky=\u30ad\u30eb\u30ae\u30b9\u8a9e -content_filter_lang.la=\u30e9\u30c6\u30f3\u8a9e -content_filter_lang.lb=\u30eb\u30af\u30bb\u30f3\u30d6\u30eb\u30b0\u8a9e -content_filter_lang.lg=\u30ac\u30f3\u30c0\u8a9e -content_filter_lang.li=\u30ea\u30f3\u30d6\u30eb\u30ac\u30fc\u8a9e -content_filter_lang.ln=\u30ea\u30f3\u30ac\u30e9\u8a9e -content_filter_lang.lo=\u30e9\u30aa\u8a9e -content_filter_lang.lt=\u30ea\u30c8\u30a2\u30cb\u30a2\u8a9e -content_filter_lang.lu=\u30eb\u30d0\u30fb\u30ab\u30bf\u30f3\u30ac\u8a9e -content_filter_lang.lv=\u30e9\u30c8\u30d3\u30a2\u8a9e -content_filter_lang.mg=\u30de\u30e9\u30ac\u30b7\u8a9e -content_filter_lang.mh=\u30de\u30fc\u30b7\u30e3\u30eb\u8a9e -content_filter_lang.mi=\u30de\u30aa\u30ea\u8a9e -content_filter_lang.mk=\u30de\u30b1\u30c9\u30cb\u30a2\u8a9e -content_filter_lang.ml=\u30de\u30e9\u30e4\u30fc\u30e9\u30e0\u8a9e -content_filter_lang.mn=\u30e2\u30f3\u30b4\u30eb\u8a9e -content_filter_lang.mo=\u30e2\u30eb\u30c9\u30d0\u8a9e -content_filter_lang.mr=\u30de\u30e9\u30fc\u30c6\u30a3\u30fc\u8a9e -content_filter_lang.ms=\u30de\u30e9\u30a4\u8a9e -content_filter_lang.mt=\u30de\u30eb\u30bf\u8a9e -content_filter_lang.my=\u30d3\u30eb\u30de\u8a9e -content_filter_lang.na=\u30ca\u30a6\u30eb\u8a9e -content_filter_lang.nb=\u30ce\u30eb\u30a6\u30a7\u30fc\u8a9e\uff08\u30d6\u30fc\u30af\u30e2\u30fc\u30eb\uff09 -content_filter_lang.nd=\u5317\u30f3\u30c7\u30d9\u30ec\u8a9e -content_filter_lang.ne=\u30cd\u30d1\u30fc\u30eb\u8a9e -content_filter_lang.ng=\u30c9\u30a5\u30f3\u30ac\u8a9e -content_filter_lang.nl=\u30aa\u30e9\u30f3\u30c0\u8a9e -content_filter_lang.nn=\u30ce\u30eb\u30a6\u30a7\u30fc\u8a9e\uff08\u30cb\u30e5\u30fc\u30ce\u30eb\u30b9\u30af\uff09 -content_filter_lang.no=\u30ce\u30eb\u30a6\u30a7\u30fc\u8a9e -content_filter_lang.nr=\u5357\u30f3\u30c7\u30d9\u30ec\u8a9e -content_filter_lang.nv=\u30ca\u30f4\u30a1\u30db\u8a9e -content_filter_lang.ny=\u30cb\u30e3\u30f3\u30b8\u30e3\u8a9e -content_filter_lang.oc=\u30aa\u30c3\u30af\u8a9e -content_filter_lang.oj=\u30aa\u30b8\u30d6\u30a6\u30a7\u30fc\u8a9e -content_filter_lang.om=\u30aa\u30ed\u30e2\u8a9e -content_filter_lang.or=\u30aa\u30ea\u30e4\u30fc\u8a9e -content_filter_lang.os=\u30aa\u30bb\u30c8\u8a9e -content_filter_lang.pa=\u30d1\u30f3\u30b8\u30e3\u30d6\u8a9e -content_filter_lang.pi=\u30d1\u30fc\u30ea\u8a9e -content_filter_lang.pl=\u30dd\u30fc\u30e9\u30f3\u30c9\u8a9e -content_filter_lang.ps=\u30d1\u30b7\u30e5\u30c8\u30fc\u8a9e -content_filter_lang.pt=\u30dd\u30eb\u30c8\u30ac\u30eb\u8a9e -content_filter_lang.qu=\u30b1\u30c1\u30e5\u30a2\u8a9e -content_filter_lang.rm=\u30ec\u30c8\u30ed\u30de\u30f3\u8a9e -content_filter_lang.rn=\u30eb\u30f3\u30b2\u30a3\u8a9e -content_filter_lang.ro=\u30eb\u30fc\u30de\u30cb\u30a2\u8a9e -content_filter_lang.ru=\u30ed\u30b7\u30a2\u8a9e -content_filter_lang.rw=\u30ad\u30cb\u30e4\u30eb\u30ef\u30f3\u30c0\u8a9e -content_filter_lang.sa=\u30b5\u30f3\u30b9\u30af\u30ea\u30c3\u30c8\u8a9e -content_filter_lang.sc=\u30b5\u30eb\u30c7\u30fc\u30cb\u30e3\u8a9e -content_filter_lang.sd=\u30b7\u30f3\u30c7\u30a3\u30fc\u8a9e -content_filter_lang.se=\u5317\u30b5\u30fc\u30df\u8a9e -content_filter_lang.sg=\u30b5\u30f3\u30b4\u8a9e -content_filter_lang.si=\u30b7\u30f3\u30cf\u30e9\u8a9e -content_filter_lang.sk=\u30b9\u30ed\u30d0\u30ad\u30a2\u8a9e -content_filter_lang.sl=\u30b9\u30ed\u30d9\u30cb\u30a2\u8a9e -content_filter_lang.sm=\u30b5\u30e2\u30a2\u8a9e -content_filter_lang.sn=\u30b7\u30e7\u30ca\u8a9e -content_filter_lang.so=\u30bd\u30de\u30ea\u8a9e -content_filter_lang.sq=\u30a2\u30eb\u30d0\u30cb\u30a2\u8a9e -content_filter_lang.sr=\u30bb\u30eb\u30d3\u30a2\u8a9e -content_filter_lang.ss=\u30b9\u30ef\u30b8\u8a9e -content_filter_lang.st=\u30bd\u30c8\u8a9e\uff08\u30bb\u30bd\u30c8\u8a9e\uff09 -content_filter_lang.su=\u30b9\u30f3\u30c0\u8a9e -content_filter_lang.sv=\u30b9\u30a6\u30a7\u30fc\u30c7\u30f3\u8a9e -content_filter_lang.sw=\u30b9\u30ef\u30d2\u30ea\u8a9e -content_filter_lang.ta=\u30bf\u30df\u30eb\u8a9e -content_filter_lang.te=\u30c6\u30eb\u30b0\u8a9e -content_filter_lang.tg=\u30bf\u30b8\u30af\u8a9e -content_filter_lang.th=\u30bf\u30a4\u8a9e -content_filter_lang.ti=\u30c6\u30a3\u30b0\u30ea\u30cb\u30e3\u8a9e -content_filter_lang.tk=\u30c8\u30eb\u30af\u30e1\u30f3\u8a9e -content_filter_lang.tl=\u30bf\u30ac\u30ed\u30b0\u8a9e -content_filter_lang.tn=\u30c4\u30ef\u30ca\u8a9e -content_filter_lang.to=\u30c8\u30f3\u30ac\u8a9e\uff08\u30c8\u30f3\u30ac\u8af8\u5cf6\uff09 -content_filter_lang.tr=\u30c8\u30eb\u30b3\u8a9e -content_filter_lang.tr=\u30c8\u30eb\u30b3\u8a9e -content_filter_lang.ts=\u30c4\u30a9\u30f3\u30ac\u8a9e -content_filter_lang.tt=\u30bf\u30bf\u30fc\u30eb\u8a9e -content_filter_lang.tw=\u30c8\u30a6\u30a3\u8a9e -content_filter_lang.ty=\u30bf\u30d2\u30c1\u8a9e -content_filter_lang.ug=\u30a6\u30a4\u30b0\u30eb\u8a9e -content_filter_lang.uk=\u30a6\u30af\u30e9\u30a4\u30ca\u8a9e -content_filter_lang.ur=\u30a6\u30eb\u30c9\u30a5\u30fc\u8a9e -content_filter_lang.uz=\u30a6\u30ba\u30d9\u30af\u8a9e -content_filter_lang.ve=\u30d9\u30f3\u30c0\u8a9e -content_filter_lang.vi=\u30d9\u30c8\u30ca\u30e0\u8a9e -content_filter_lang.vo=\u30dc\u30e9\u30d4\u30e5\u30af\u8a9e -content_filter_lang.wa=\u30ef\u30ed\u30f3\u8a9e -content_filter_lang.wo=\u30a6\u30a9\u30ed\u30d5\u8a9e -content_filter_lang.xh=\u30b3\u30b5\u8a9e -content_filter_lang.yi=\u30a4\u30c7\u30a3\u30c3\u30b7\u30e5\u8a9e -content_filter_lang.yo=\u30e8\u30eb\u30d0\u8a9e -content_filter_lang.za=\u30c1\u30ef\u30f3\u8a9e -content_filter_lang.zh=\u4e2d\u56fd\u8a9e -content_filter_lang.zu=\u30ba\u30fc\u30eb\u30fc\u8a9e - -## Duplicate messages to take in account the old -## ISO code. -content_filter_lang.iw=\u30d8\u30d6\u30e9\u30a4\u8a9e -content_filter_lang.in=\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u8a9e -content_filter_lang.ji=\u30a4\u30c7\u30a3\u30c3\u30b7\u30e5\u8a9e diff --git a/config/alfresco/messages/content-model_de_DE.properties b/config/alfresco/messages/content-model_de_DE.properties deleted file mode 100755 index 8833f92d91..0000000000 --- a/config/alfresco/messages/content-model_de_DE.properties +++ /dev/null @@ -1,278 +0,0 @@ -# Display labels for Content Domain Model - -cm_contentmodel.description=Alfresco Content Domain Modell - -cm_contentmodel.type.cm_object.title=Objekt -cm_contentmodel.type.cm_object.description=Basisinhalt Domain-Objekt -cm_contentmodel.property.cm_name.title=Name -cm_contentmodel.property.cm_name.description=Name - -cm_contentmodel.type.cm_folder.title=Ordner -cm_contentmodel.type.cm_folder.description=Ordner -cm_contentmodel.property.cm_orderedchildren.title=Geordnete Kinder -cm_contentmodel.property.cm_orderedchildren.description=Zeigt an, ob die Kinder des Ordners geordnet sind -cm_contentmodel.association.cm_contains.title=Enth\u00e4lt -cm_contentmodel.association.cm_contains.description=Enth\u00e4lt - -cm_contentmodel.type.cm_content.title=Inhalt -cm_contentmodel.type.cm_content.description=Basis-Inhalts-Objekt -cm_contentmodel.property.cm_content.title=Inhalt -cm_contentmodel.property.cm_content.description=Inhalt - -cm_contentmodel.type.cm_linkfile.title=Dateilink -cm_contentmodel.type.cm_linkfile.description=Link zu einer anderen Datei -cm_contentmodel.property.cm_path.title=Link Dateipfad -cm_contentmodel.property.cm_path.description=Pfad zur verlinkten Datei - -cm_contentmodel.type.cm_savedquery.title=Gespeicherte Anfrage -cm_contentmodel.type.cm_savedquery.description=Gespeicherte Anfrage - -cm_contentmodel.type.cm_systemfolder.title=Systemordner -cm_contentmodel.type.cm_systemfolder.description=Ordner f\u00fcr Elemente auf Systemebene - -cm_contentmodel.type.cm_person.title=Person -cm_contentmodel.type.cm_person.description=Person - -cm_contentmodel.property.cm_userName.title=Benutzername -cm_contentmodel.property.cm_userName.description=Benutzername der Person -cm_contentmodel.property.cm_homeFolder.title=Home Ordner -cm_contentmodel.property.cm_homeFolder.description=Home Ordner der Person -cm_contentmodel.property.cm_firstName.title=Vorname -cm_contentmodel.property.cm_firstName.description=Vorname der Person -cm_contentmodel.property.cm_lastName.title=Nachname -cm_contentmodel.property.cm_lastName.description=Nachname der Person -cm_contentmodel.property.cm_middleName.title=Zweitname -cm_contentmodel.property.cm_middleName.description=Zweitname der Person -cm_contentmodel.property.cm_email.title=E-Mail Adresse -cm_contentmodel.property.cm_email.description=E-Mail Adresse der Person -cm_contentmodel.property.cm_organizationId.title=Organisation -cm_contentmodel.property.cm_organizationId.description=Organisation der Person - -cm_contentmodel.type.cm_category_root.title=Kategorie Root -cm_contentmodel.type.cm_category_root.description=Root-Kategorie -cm_contentmodel.association.cm_categories.title=Kategorien -cm_contentmodel.association.cm_categories.description=Kategorien innerhalb der Kategorie Root - -cm_contentmodel.type.cm_category.title=Kategorie -cm_contentmodel.type.cm_category.description=Kategorie -cm_contentmodel.association.cm_subcategories.title=Kategorien -cm_contentmodel.association.cm_subcategories.description=Subkategorien innerhalb der Kategorie - -cm_contentmodel.aspect.cm_titled.title=Betitelt -cm_contentmodel.aspect.cm_titled.description=Betitelt -cm_contentmodel.property.cm_title.title=Titel -cm_contentmodel.property.cm_title.description=Titel des Inhalts -cm_contentmodel.property.cm_description.title=Beschreibung -cm_contentmodel.property.cm_description.description=Beschreibung des Inhalts - -cm_contentmodel.aspect.cm_auditable.title=Audit-f\u00e4hig -cm_contentmodel.aspect.cm_auditable.description=Audit-f\u00e4hig -cm_contentmodel.property.cm_created.title=Datum der Erstellung -cm_contentmodel.property.cm_created.description=Datum der Erstellung -cm_contentmodel.property.cm_creator.title=Ersteller -cm_contentmodel.property.cm_creator.description=Wer dieses Element erstellt hat -cm_contentmodel.property.cm_modified.title=Datum der \u00c4nderung -cm_contentmodel.property.cm_modified.description=Wann dieses Element zuletzt ge\u00e4ndert wurde -cm_contentmodel.property.cm_modifier.title=Bearbeiter -cm_contentmodel.property.cm_modifier.description=Wer dieses Element zuletzt ge\u00e4ndert hat -cm_contentmodel.property.cm_accessed.title=Datum des letzten Aufrufs -cm_contentmodel.property.cm_accessed.description=Wann dieses Element zuletzt aufgerufen wurde - -cm_contentmodel.aspect.cm_author.title=Autor -cm_contentmodel.aspect.cm_author.description=Autor -cm_contentmodel.property.cm_author.title=Autor -cm_contentmodel.property.cm_author.description=Autor - -cm_contentmodel.aspect.cm_localizable.title=Lokalisierbar -cm_contentmodel.aspect.cm_localizable.description=Lokalisierbar -cm_contentmodel.property.cm_locale.title=Sprachumgebung -cm_contentmodel.property.cm_locale.description=Sprachumgebung - -cm_contentmodel.aspect.cm_translatable.title=\u00dcbersetzbar -cm_contentmodel.aspect.cm_translatable.description=\u00dcbersetzbar -cm_contentmodel.association.cm_translations.title=\u00dcbersetzungen -cm_contentmodel.association.cm_translations.description=\u00dcbersetzungen - -cm_contentmodel.aspect.cm_transformable.title=Umwandelbar -cm_contentmodel.aspect.cm_transformable.description=Umwandelbar -cm_contentmodel.association.cm_formats.title=Formate -cm_contentmodel.association.cm_formats.description=Umgewandelte Elemente - -cm_contentmodel.aspect.cm_templatable.title=Vorlagenf\u00e4hig -cm_contentmodel.aspect.cm_templatable.description=Vorlagenf\u00e4hig -cm_contentmodel.property.cm_template.title=Mustervorlage -cm_contentmodel.property.cm_template.description=Mustervorlage - -cm_contentmodel.aspect.cm_complianceable.title=Einhaltbar -cm_contentmodel.aspect.cm_complianceable.description=Einhaltbar -cm_contentmodel.property.cm_removeAfter.title=Entfernen nach -cm_contentmodel.property.cm_removeAfter.description=Entfernen nach - -cm_contentmodel.aspect.cm_ownable.title=Sch\u00fctzbar -cm_contentmodel.aspect.cm_ownable.description=Sch\u00fctzbar -cm_contentmodel.property.cm_owner.title=Eigent\u00fcmer -cm_contentmodel.property.cm_owner.description=Eigent\u00fcmer - -cm_contentmodel.aspect.cm_dublincore.title=Dublin Core -cm_contentmodel.aspect.cm_dublincore.description=Dublin Core -cm_contentmodel.property.cm_publisher.title=Herausgeber -cm_contentmodel.property.cm_publisher.description=Herausgeber -cm_contentmodel.property.cm_contributor.title=Beitragender -cm_contentmodel.property.cm_contributor.description=Beitragender -cm_contentmodel.property.cm_type.title=Typ -cm_contentmodel.property.cm_type.description=Typ -cm_contentmodel.property.cm_identifier.title=Identifikator -cm_contentmodel.property.cm_identifier.description=Identifikator -cm_contentmodel.property.cm_dcsource.title=Quelle -cm_contentmodel.property.cm_dcsource.description=Quelle -cm_contentmodel.property.cm_coverage.title=Anwendungsbereich -cm_contentmodel.property.cm_coverage.description=Anwendungsbereich -cm_contentmodel.property.cm_rights.title=Rechte -cm_contentmodel.property.cm_rights.description=Rechte -cm_contentmodel.property.cm_subject.title=Betreff -cm_contentmodel.property.cm_subject.description=Betreff - -cm_contentmodel.aspect.cm_basable.title=Basierbar -cm_contentmodel.aspect.cm_basable.description=Basierbar -cm_contentmodel.association.cm_basis.title=Basis -cm_contentmodel.association.cm_basis.description=Basis - -cm_contentmodel.aspect.cm_partable.title=Teilbar -cm_contentmodel.aspect.cm_partable.description=Teilbar -cm_contentmodel.association.cm_parts.title=Teile -cm_contentmodel.association.cm_parts.description=Teile - -cm_contentmodel.aspect.cm_referencing.title=Referenzierung -cm_contentmodel.aspect.cm_referencing.description=Referenzierung -cm_contentmodel.association.cm_references.title=Referenzen -cm_contentmodel.association.cm_references.description=Referenzen - -cm_contentmodel.aspect.cm_replacable.title=Ersetzbar -cm_contentmodel.aspect.cm_replacable.description=Ersetzbar -cm_contentmodel.association.cm_replaces.title=Ersetzt -cm_contentmodel.association.cm_replaces.description=Ersetzt - -cm_contentmodel.aspect.cm_effectivity.title=Wirksamkeit -cm_contentmodel.aspect.cm_effectivity.description=Wirksamkeit -cm_contentmodel.property.cm_from.title=Wirksam ab -cm_contentmodel.property.cm_from.description=Wirksam ab -cm_contentmodel.property.cm_to.title=Wirksam bis -cm_contentmodel.property.cm_to.description=Wirksam bis - -cm_contentmodel.aspect.cm_summarizable.title=Zusammenfassbar -cm_contentmodel.aspect.cm_summarizable.description=Zusammenfassbar -cm_contentmodel.property.cm_summary.title=Zusammenfassung -cm_contentmodel.property.cm_summary.description=Zusammenfassung - -cm_contentmodel.aspect.cm_countable.title=Z\u00e4hlbar -cm_contentmodel.aspect.cm_countable.description=Z\u00e4hlbar -cm_contentmodel.property.cm_hits.title=Treffer -cm_contentmodel.property.cm_hits.description=Treffer - -cm_contentmodel.aspect.cm_copiedFrom.title=Kopiert von -cm_contentmodel.aspect.cm_copiedFrom.description=Kopiert von -cm_contentmodel.property.cm_source.title=Quelle -cm_contentmodel.property.cm_source.description=Quelle - -cm_contentmodel.aspect.cm_workingcopy.title=Arbeitskopie -cm_contentmodel.aspect.cm_workingcopy.description=Arbeitskopie -cm_contentmodel.property.cm_workingCopyOwner.title=Eigent\u00fcmer der Arbeitskopie -cm_contentmodel.property.cm_workingCopyOwner.description=Eigent\u00fcmer der Arbeitskopie - -cm_contentmodel.aspect.cm_versionable.title=Versionierbar -cm_contentmodel.aspect.cm_versionable.description=Versionierbar -cm_contentmodel.property.cm_versionLabel.title=Versionslabel -cm_contentmodel.property.cm_versionLabel.description=Versionslabel -cm_contentmodel.property.cm_autoVersion.title=Auto Version -cm_contentmodel.property.cm_autoVersion.description=Auto Version -cm_contentmodel.property.cm_initialVersion.title=Urspr\u00fcngliche Version -cm_contentmodel.property.cm_initialVersion.description=Urspr\u00fcngliche Version - -cm_contentmodel.aspect.cm_lockable.title=Sperrbar -cm_contentmodel.aspect.cm_lockable.description=Sperrbar -cm_contentmodel.property.cm_lockOwner.title=Eigent\u00fcmer der Sperrung -cm_contentmodel.property.cm_lockOwner.description=Eigent\u00fcmer der Sperrung -cm_contentmodel.property.cm_lockType.title=Typ Sperrung -cm_contentmodel.property.cm_lockType.description=Typ Sperrung -cm_contentmodel.property.cm_expiryDate.title=Ablaufdatum -cm_contentmodel.property.cm_expiryDate.description=Ablaufdatum -cm_contentmodel.property.cm_lockIsDeep.title=Deep Lock -cm_contentmodel.property.cm_lockIsDeep.description=Deep Lock - -cm_contentmodel.aspect.cm_subscribable.title=Abonnierbar -cm_contentmodel.aspect.cm_subscribable.description=Abonnierbar -cm_contentmodel.association.cm_subscribedBy.title=Abonniert von -cm_contentmodel.association.cm_subscribedBy.description=Abonniert von - -cm_contentmodel.aspect.cm_classifiable.title=Klassifizierbar -cm_contentmodel.aspect.cm_classifiable.description=Klassifizierbar - -cm_contentmodel.aspect.cm_generalclassifiable.title=Klassifizierbar -cm_contentmodel.aspect.cm_generalclassifiable.description=Klassifizierbar -cm_contentmodel.property.cm_categories.title=Kategorien -cm_contentmodel.property.cm_categories.description=Kategorien - -cm_contentmodel.aspect.cm_taggable.title=Tag-f\u00e4hig -cm_contentmodel.aspect.cm_taggable.description=Tag-f\u00e4hig -cm_contentmodel.property.cm_taggable.title=Tags -cm_contentmodel.property.cm_taggable.description=Tags - -cm_contentmodel.aspect.cm_attachable.title=Anhangf\u00e4hig -cm_contentmodel.aspect.cm_attachable.description=L\u00e4sst andere Repository Objekte als Anhang zu -cm_contentmodel.association.cm_attachments.title=Anlagen -cm_contentmodel.association.cm_attachments.description=Angeh\u00e4ngte Repository-Objekte - -cm_contentmodel.aspect.cm_emailed.title=Per E-Mail versandt -cm_contentmodel.aspect.cm_emailed.description=Per E-Mail versandt -cm_contentmodel.property.cm_originator.title=Urheber -cm_contentmodel.property.cm_originator.description=Urheber -cm_contentmodel.property.cm_addressee.title=Adressat -cm_contentmodel.property.cm_addressee.description=Adressat -cm_contentmodel.property.cm_addressees.title=Adressaten -cm_contentmodel.property.cm_addressees.description=Adressaten -cm_contentmodel.property.cm_subjectline.title=Betreff -cm_contentmodel.property.cm_subjectline.description=Betreff -cm_contentmodel.property.cm_sentdate.title=Sendedatum -cm_contentmodel.property.cm_sentdate.description=Sendedatum - -cm_contentmodel.aspect.cm_geographic.title=Geografisch -cm_contentmodel.aspect.cm_geographic.description=Geografisch -cm_contentmodel.property.cm_latitude.title=Breitengrad -cm_contentmodel.property.cm_latitude.description=Breitengrad -cm_contentmodel.property.cm_longitude.title=L\u00e4ngengrad -cm_contentmodel.property.cm_longitude.description=L\u00e4ngengrad - -cm_contentmodel.aspect.exif_exif.title=EXIF -cm_contentmodel.aspect.exif_exif.description=Untermenge der Standard-EXIF Metadaten -cm_contentmodel.property.exif_dateTimeOriginal.title=Datum und Uhrzeit -cm_contentmodel.property.exif_dateTimeOriginal.description=Datum und Uhrzeit der Generierung des urspr\u00fcnglichen Bildes -cm_contentmodel.property.exif_pixelXDimension.title=Bildbreite -cm_contentmodel.property.exif_pixelXDimension.description=Bildbreite in Pixel -cm_contentmodel.property.exif_pixelYDimension.title=Bildh\u00f6he -cm_contentmodel.property.exif_pixelYDimension.description=Bildh\u00f6he in Pixel -cm_contentmodel.property.exif_exposureTime.title=Expositionszeit -cm_contentmodel.property.exif_exposureTime.description=Expositionszeit in Sekunden -cm_contentmodel.property.exif_fNumber.title=F-Nummer -cm_contentmodel.property.exif_fNumber.description=F-Nummer -cm_contentmodel.property.exif_flash.title=Blitz eingeschaltet -cm_contentmodel.property.exif_flash.description=Ob der Blitz bei der Aufnahme eingeschaltet war -cm_contentmodel.property.exif_focalLength.title=Brennweite -cm_contentmodel.property.exif_focalLength.description=Brennweite der Linse in Millimeter -cm_contentmodel.property.exif_isoSpeedRatings.title=ISO Geschwindigkeit -cm_contentmodel.property.exif_isoSpeedRatings.description=ISO Geschwindigkeit -cm_contentmodel.property.exif_manufacturer.title=Hersteller der Kamera -cm_contentmodel.property.exif_manufacturer.description=Hersteller der Kamera, mit der das Bild aufgenommen wurde -cm_contentmodel.property.exif_model.title=Kameramodell -cm_contentmodel.property.exif_model.description=Kameramodell, mit dem das Bild aufgenommen wurde -cm_contentmodel.property.exif_software.title=Kamerasoftware -cm_contentmodel.property.exif_software.description=Software der Kamera, mit der das Bild aufgenommen wurde -cm_contentmodel.property.exif_orientation.title=Ausrichtung -cm_contentmodel.property.exif_orientation.description=Ausrichtung des Bildes -cm_contentmodel.property.exif_xResolution.title=Horizontale Aufl\u00f6sung -cm_contentmodel.property.exif_xResolution.description=Horizontale Aufl\u00f6sung in Pixel pro Einheit -cm_contentmodel.property.exif_yResolution.title=Vertikale Aufl\u00f6sung -cm_contentmodel.property.exif_yResolution.description=Vertikale Aufl\u00f6sung in Pixel pro Einheit -cm_contentmodel.property.exif_resolutionUnit.title=Aufl\u00f6sungseinheit -cm_contentmodel.property.exif_resolutionUnit.description=Einheit f\u00fcr die horizontale und vertikale Aufl\u00f6sung - - diff --git a/config/alfresco/messages/content-model_es_ES.properties b/config/alfresco/messages/content-model_es_ES.properties deleted file mode 100755 index 323fe075a5..0000000000 --- a/config/alfresco/messages/content-model_es_ES.properties +++ /dev/null @@ -1,276 +0,0 @@ -# Display labels for Content Domain Model - -cm_contentmodel.description=Modelo de dominio de contenido de Alfresco - -cm_contentmodel.type.cm_object.title=Objeto -cm_contentmodel.type.cm_object.description=Objeto b\u00e1sico de dominio de contenido -cm_contentmodel.property.cm_name.title=Nombre -cm_contentmodel.property.cm_name.description=Nombre - -cm_contentmodel.type.cm_folder.title=Carpeta -cm_contentmodel.type.cm_folder.description=Carpeta -cm_contentmodel.property.cm_orderedchildren.title=Hijos ordenados -cm_contentmodel.property.cm_orderedchildren.description=Indica si los hijos de la carpeta est\u00e1n ordenados -cm_contentmodel.association.cm_contains.title=Contiene -cm_contentmodel.association.cm_contains.description=Contiene - -cm_contentmodel.type.cm_content.title=Contenido -cm_contentmodel.type.cm_content.description=Objeto b\u00e1sico de contenido -cm_contentmodel.property.cm_content.title=Contenido -cm_contentmodel.property.cm_content.description=Contenido - -cm_contentmodel.type.cm_linkfile.title=Enlace de fichero -cm_contentmodel.type.cm_linkfile.description=Enlace a otro fichero -cm_contentmodel.property.cm_path.title=Ruta de enlace de fichero -cm_contentmodel.property.cm_path.description=Ruta al fichero enlazado - -cm_contentmodel.type.cm_savedquery.title=Consulta guardada -cm_contentmodel.type.cm_savedquery.description=Consulta guardada - -cm_contentmodel.type.cm_systemfolder.title=Carpeta de sistema -cm_contentmodel.type.cm_systemfolder.description=Carpeta para contener elementos a nivel de sistema - -cm_contentmodel.type.cm_person.title=Persona -cm_contentmodel.type.cm_person.description=Persona - -cm_contentmodel.property.cm_userName.title=Nombre de usuario -cm_contentmodel.property.cm_userName.description=Nombre de usuario de la persona -cm_contentmodel.property.cm_homeFolder.title=Carpeta de inicio -cm_contentmodel.property.cm_homeFolder.description=Carpeta de inicio de la persona -cm_contentmodel.property.cm_firstName.title=Nombre -cm_contentmodel.property.cm_firstName.description=Nombre de la persona -cm_contentmodel.property.cm_lastName.title=Apellido -cm_contentmodel.property.cm_lastName.description=Apellido de la persona -cm_contentmodel.property.cm_middleName.title=Segundo nombre -cm_contentmodel.property.cm_middleName.description=Segundo nombre de la persona -cm_contentmodel.property.cm_email.title=Direcci\u00f3n de correo electr\u00f3nico -cm_contentmodel.property.cm_email.description=Direcci\u00f3n email de la persona -cm_contentmodel.property.cm_organizationId.title=Organizaci\u00f3n -cm_contentmodel.property.cm_organizationId.description=Organizaci\u00f3n de la persona - -cm_contentmodel.type.cm_category_root.title=Ra\u00edz de categor\u00eda -cm_contentmodel.type.cm_category_root.description=Categor\u00eda ra\u00edz -cm_contentmodel.association.cm_categories.title=Categor\u00edas -cm_contentmodel.association.cm_categories.description=Categor\u00edas dentro de la ra\u00edz de categor\u00eda - -cm_contentmodel.type.cm_category.title=Categor\u00eda -cm_contentmodel.type.cm_category.description=Categor\u00eda -cm_contentmodel.association.cm_subcategories.title=Categor\u00edas -cm_contentmodel.association.cm_subcategories.description=Subcategor\u00edas dentro de la categor\u00eda - -cm_contentmodel.aspect.cm_titled.title=Titulada -cm_contentmodel.aspect.cm_titled.description=Titulada -cm_contentmodel.property.cm_title.title=T\u00edtulo -cm_contentmodel.property.cm_title.description=T\u00edtulo de contenido -cm_contentmodel.property.cm_description.title=Descripci\u00f3n -cm_contentmodel.property.cm_description.description=Descripci\u00f3n de contenido - -cm_contentmodel.aspect.cm_auditable.title=Auditable -cm_contentmodel.aspect.cm_auditable.description=Auditable -cm_contentmodel.property.cm_created.title=Fecha de creaci\u00f3n -cm_contentmodel.property.cm_created.description=Fecha de creaci\u00f3n -cm_contentmodel.property.cm_creator.title=Creador -cm_contentmodel.property.cm_creator.description=Qui\u00e9n cre\u00f3 este elemento -cm_contentmodel.property.cm_modified.title=Fecha de modificaci\u00f3n -cm_contentmodel.property.cm_modified.description=Cu\u00e1ndo tuvo lugar la \u00faltima modificaci\u00f3n de este elemento -cm_contentmodel.property.cm_modifier.title=Modificador -cm_contentmodel.property.cm_modifier.description=Qui\u00e9n hizo la \u00faltima modificaci\u00f3n de este elemento -cm_contentmodel.property.cm_accessed.title=Fecha del \u00faltimo acceso -cm_contentmodel.property.cm_accessed.description=Cu\u00e1ndo tuvo lugar el \u00faltimo acceso a este elemento - -cm_contentmodel.aspect.cm_author.title=Autor -cm_contentmodel.aspect.cm_author.description=Autor -cm_contentmodel.property.cm_author.title=Autor -cm_contentmodel.property.cm_author.description=Autor - -cm_contentmodel.aspect.cm_localizable.title=Localizable -cm_contentmodel.aspect.cm_localizable.description=Localizable -cm_contentmodel.property.cm_locale.title=Idioma -cm_contentmodel.property.cm_locale.description=Idioma - -cm_contentmodel.aspect.cm_translatable.title=Traducible -cm_contentmodel.aspect.cm_translatable.description=Traducible -cm_contentmodel.association.cm_translations.title=Traducciones -cm_contentmodel.association.cm_translations.description=Traducciones - -cm_contentmodel.aspect.cm_transformable.title=Transformable -cm_contentmodel.aspect.cm_transformable.description=Transformable -cm_contentmodel.association.cm_formats.title=Formatos -cm_contentmodel.association.cm_formats.description=Elementos transformados - -cm_contentmodel.aspect.cm_templatable.title=Hacer plantilla -cm_contentmodel.aspect.cm_templatable.description=Hacer plantilla -cm_contentmodel.property.cm_template.title=Plantilla -cm_contentmodel.property.cm_template.description=Plantilla - -cm_contentmodel.aspect.cm_complianceable.title=Armonizable -cm_contentmodel.aspect.cm_complianceable.description=Armonizable -cm_contentmodel.property.cm_removeAfter.title=Quitar Despu\u00e9s -cm_contentmodel.property.cm_removeAfter.description=Quitar Despu\u00e9s - -cm_contentmodel.aspect.cm_ownable.title=Pose\u00edble -cm_contentmodel.aspect.cm_ownable.description=Pose\u00edble -cm_contentmodel.property.cm_owner.title=Propietario -cm_contentmodel.property.cm_owner.description=Propietario - -cm_contentmodel.aspect.cm_dublincore.title=Dublin Core -cm_contentmodel.aspect.cm_dublincore.description=Dublin Core -cm_contentmodel.property.cm_publisher.title=Editor -cm_contentmodel.property.cm_publisher.description=Editor -cm_contentmodel.property.cm_contributor.title=Contribuidor -cm_contentmodel.property.cm_contributor.description=Contribuidor -cm_contentmodel.property.cm_type.title=Tipo -cm_contentmodel.property.cm_type.description=Tipo -cm_contentmodel.property.cm_identifier.title=Identificador -cm_contentmodel.property.cm_identifier.description=Identificador -cm_contentmodel.property.cm_dcsource.title=Origen -cm_contentmodel.property.cm_dcsource.description=Origen -cm_contentmodel.property.cm_coverage.title=Cobertura -cm_contentmodel.property.cm_coverage.description=Cobertura -cm_contentmodel.property.cm_rights.title=Derechos -cm_contentmodel.property.cm_rights.description=Derechos -cm_contentmodel.property.cm_subject.title=Asunto -cm_contentmodel.property.cm_subject.description=Asunto - -cm_contentmodel.aspect.cm_basable.title=Basable -cm_contentmodel.aspect.cm_basable.description=Basable -cm_contentmodel.association.cm_basis.title=Base -cm_contentmodel.association.cm_basis.description=Base - -cm_contentmodel.aspect.cm_partable.title=Particionable -cm_contentmodel.aspect.cm_partable.description=Particionable -cm_contentmodel.association.cm_parts.title=Partes -cm_contentmodel.association.cm_parts.description=Partes - -cm_contentmodel.aspect.cm_referencing.title=Referenciaci\u00f3n -cm_contentmodel.aspect.cm_referencing.description=Referenciaci\u00f3n -cm_contentmodel.association.cm_references.title=Referencias -cm_contentmodel.association.cm_references.description=Referencias - -cm_contentmodel.aspect.cm_replacable.title=Reemplazable -cm_contentmodel.aspect.cm_replacable.description=Reemplazable -cm_contentmodel.association.cm_replaces.title=Sustituye -cm_contentmodel.association.cm_replaces.description=Sustituye - -cm_contentmodel.aspect.cm_effectivity.title=Vigencia -cm_contentmodel.aspect.cm_effectivity.description=Vigencia -cm_contentmodel.property.cm_from.title=Vigente desde -cm_contentmodel.property.cm_from.description=Vigente desde -cm_contentmodel.property.cm_to.title=Vigente hasta -cm_contentmodel.property.cm_to.description=Vigente hasta - -cm_contentmodel.aspect.cm_summarizable.title=Resumible -cm_contentmodel.aspect.cm_summarizable.description=Resumible -cm_contentmodel.property.cm_summary.title=Resumen -cm_contentmodel.property.cm_summary.description=Resumen - -cm_contentmodel.aspect.cm_countable.title=Contabilizable -cm_contentmodel.aspect.cm_countable.description=Contabilizable -cm_contentmodel.property.cm_hits.title=Impactos -cm_contentmodel.property.cm_hits.description=Impactos - -cm_contentmodel.aspect.cm_copiedFrom.title=Copiado desde -cm_contentmodel.aspect.cm_copiedFrom.description=Copiado desde -cm_contentmodel.property.cm_source.title=Origen -cm_contentmodel.property.cm_source.description=Origen - -cm_contentmodel.aspect.cm_workingcopy.title=Copia de trabajo -cm_contentmodel.aspect.cm_workingcopy.description=Copia de trabajo -cm_contentmodel.property.cm_workingCopyOwner.title=Propietario de copia de trabajo -cm_contentmodel.property.cm_workingCopyOwner.description=Propietario de copia de trabajo - -cm_contentmodel.aspect.cm_versionable.title=Versionable -cm_contentmodel.aspect.cm_versionable.description=Versionable -cm_contentmodel.property.cm_versionLabel.title=Etiqueta de versi\u00f3n -cm_contentmodel.property.cm_versionLabel.description=Etiqueta de versi\u00f3n -cm_contentmodel.property.cm_autoVersion.title=Versi\u00f3n autom\u00e1tica -cm_contentmodel.property.cm_autoVersion.description=Versi\u00f3n autom\u00e1tica -cm_contentmodel.property.cm_initialVersion.title=Versi\u00f3n inicial -cm_contentmodel.property.cm_initialVersion.description=Versi\u00f3n inicial - -cm_contentmodel.aspect.cm_lockable.title=Bloqueable -cm_contentmodel.aspect.cm_lockable.description=Bloqueable -cm_contentmodel.property.cm_lockOwner.title=Propietario del bloqueo -cm_contentmodel.property.cm_lockOwner.description=Propietario del bloqueo -cm_contentmodel.property.cm_lockType.title=Tipo de bloqueo -cm_contentmodel.property.cm_lockType.description=Tipo de bloqueo -cm_contentmodel.property.cm_expiryDate.title=Fecha de expiraci\u00f3n -cm_contentmodel.property.cm_expiryDate.description=Fecha de expiraci\u00f3n -cm_contentmodel.property.cm_lockIsDeep.title=Bloqueo profundo -cm_contentmodel.property.cm_lockIsDeep.description=Bloqueo profundo - -cm_contentmodel.aspect.cm_subscribable.title=Suscribible -cm_contentmodel.aspect.cm_subscribable.description=Suscribible -cm_contentmodel.association.cm_subscribedBy.title=Suscrito por -cm_contentmodel.association.cm_subscribedBy.description=Suscrito por - -cm_contentmodel.aspect.cm_classifiable.title=Clasificable -cm_contentmodel.aspect.cm_classifiable.description=Clasificable - -cm_contentmodel.aspect.cm_generalclassifiable.title=Clasificable -cm_contentmodel.aspect.cm_generalclassifiable.description=Clasificable -cm_contentmodel.property.cm_categories.title=Categor\u00edas -cm_contentmodel.property.cm_categories.description=Categor\u00edas - -cm_contentmodel.aspect.cm_taggable.title=Etiquetable -cm_contentmodel.aspect.cm_taggable.description=Etiquetable -cm_contentmodel.property.cm_taggable.title=Etiquetas -cm_contentmodel.property.cm_taggable.description=Etiquetas - -cm_contentmodel.aspect.cm_attachable.title=Adjuntable -cm_contentmodel.aspect.cm_attachable.description=Permite adjuntar otros objetos de repositorio -cm_contentmodel.association.cm_attachments.title=Adjuntos -cm_contentmodel.association.cm_attachments.description=Objetos de repositorio adjuntados - -cm_contentmodel.aspect.cm_emailed.title=Enviado por email -cm_contentmodel.aspect.cm_emailed.description=Enviado por email -cm_contentmodel.property.cm_originator.title=Creador -cm_contentmodel.property.cm_originator.description=Creador -cm_contentmodel.property.cm_addressee.title=Destinatario -cm_contentmodel.property.cm_addressee.description=Destinatario -cm_contentmodel.property.cm_addressees.title=Destinatarios -cm_contentmodel.property.cm_addressees.description=Destinatarios -cm_contentmodel.property.cm_subjectline.title=Asunto -cm_contentmodel.property.cm_subjectline.description=Asunto -cm_contentmodel.property.cm_sentdate.title=Fecha de env\u00edo -cm_contentmodel.property.cm_sentdate.description=Fecha de env\u00edo - -cm_contentmodel.aspect.cm_geographic.title=Geogr\u00e1fico -cm_contentmodel.aspect.cm_geographic.description=Geogr\u00e1fico -cm_contentmodel.property.cm_latitude.title=Latitud -cm_contentmodel.property.cm_latitude.description=Latitud -cm_contentmodel.property.cm_longitude.title=Longitud -cm_contentmodel.property.cm_longitude.description=Longitud - -cm_contentmodel.aspect.exif_exif.title=EXIF -cm_contentmodel.aspect.exif_exif.description=Subconjunto de metadatos norma EXIF -cm_contentmodel.property.exif_dateTimeOriginal.title=Fecha y hora -cm_contentmodel.property.exif_dateTimeOriginal.description=Fecha y hora de generaci\u00f3n de la imagen original -cm_contentmodel.property.exif_pixelXDimension.title=Ancho de imagen -cm_contentmodel.property.exif_pixelXDimension.description=El ancho de la imagen en p\u00edxeles -cm_contentmodel.property.exif_pixelYDimension.title=Altura de imagen -cm_contentmodel.property.exif_pixelYDimension.description=lo alto de la imagen en p\u00edxeles -cm_contentmodel.property.exif_exposureTime.title=Tiempo de exposici\u00f3n -cm_contentmodel.property.exif_exposureTime.description=Tiempo de exposici\u00f3n, en segundos -cm_contentmodel.property.exif_fNumber.title=N\u00famero F -cm_contentmodel.property.exif_fNumber.description=N\u00famero F -cm_contentmodel.property.exif_flash.title=Flash activado -cm_contentmodel.property.exif_flash.description=Si fue activado el flash al tomar la fotograf\u00eda -cm_contentmodel.property.exif_focalLength.title=Distancia focal -cm_contentmodel.property.exif_focalLength.description=Distancia focal del objetivo, en mil\u00edmetros -cm_contentmodel.property.exif_isoSpeedRatings.title=Velocidad ISO -cm_contentmodel.property.exif_isoSpeedRatings.description=Velocidad ISO -cm_contentmodel.property.exif_manufacturer.title=Fabricante de la c\u00e1mara -cm_contentmodel.property.exif_manufacturer.description=Fabricante de la c\u00e1mara que tom\u00f3 la fotograf\u00eda -cm_contentmodel.property.exif_model.title=Modelo de c\u00e1mara -cm_contentmodel.property.exif_model.description=Modelo de la c\u00e1mara que tom\u00f3 la fotograf\u00eda -cm_contentmodel.property.exif_software.title=Software de la c\u00e1mara -cm_contentmodel.property.exif_software.description=Software en la c\u00e1mara que tom\u00f3 la fotograf\u00eda -cm_contentmodel.property.exif_orientation.title=Orientaci\u00f3n -cm_contentmodel.property.exif_orientation.description=Orientaci\u00f3n de la imagen -cm_contentmodel.property.exif_xResolution.title=Resoluci\u00f3n horizontal -cm_contentmodel.property.exif_xResolution.description=Resoluci\u00f3n horizontal en p\u00edxeles por unidad -cm_contentmodel.property.exif_yResolution.title=Resoluci\u00f3n vertical -cm_contentmodel.property.exif_yResolution.description=Resoluci\u00f3n vertical en p\u00edxeles por unidad -cm_contentmodel.property.exif_resolutionUnit.title=Unidad de resoluci\u00f3n -cm_contentmodel.property.exif_resolutionUnit.description=Unidad utilizada para la resoluci\u00f3n horizontal y vertical diff --git a/config/alfresco/messages/content-model_fr_FR.properties b/config/alfresco/messages/content-model_fr_FR.properties deleted file mode 100755 index 5682344f1e..0000000000 --- a/config/alfresco/messages/content-model_fr_FR.properties +++ /dev/null @@ -1,276 +0,0 @@ -# Display labels for Content Domain Model - -cm_contentmodel.description=Mod\u00e8le de contenu Alfresco - -cm_contentmodel.type.cm_object.title=Objet -cm_contentmodel.type.cm_object.description=Objet domaine du contenu de base -cm_contentmodel.property.cm_name.title=Nom -cm_contentmodel.property.cm_name.description=Nom - -cm_contentmodel.type.cm_folder.title=Dossier -cm_contentmodel.type.cm_folder.description=Dossier -cm_contentmodel.property.cm_orderedchildren.title=Sous-dossiers tri\u00e9s -cm_contentmodel.property.cm_orderedchildren.description=Indique si les sous-dossiers du dossier sont tri\u00e9s -cm_contentmodel.association.cm_contains.title=Contient -cm_contentmodel.association.cm_contains.description=Contient - -cm_contentmodel.type.cm_content.title=Contenu -cm_contentmodel.type.cm_content.description=Objet de contenu de base -cm_contentmodel.property.cm_content.title=Contenu -cm_contentmodel.property.cm_content.description=Contenu - -cm_contentmodel.type.cm_linkfile.title=Lien vers un Fichier -cm_contentmodel.type.cm_linkfile.description=Lien vers un autre Fichier -cm_contentmodel.property.cm_path.title=Chemin du Lien vers le Fichier -cm_contentmodel.property.cm_path.description=Chemin du Fichier li\u00e9 - -cm_contentmodel.type.cm_savedquery.title=Requ\u00eate sauv\u00e9e -cm_contentmodel.type.cm_savedquery.description=Requ\u00eate sauv\u00e9e - -cm_contentmodel.type.cm_systemfolder.title=Dossier syst\u00e8me -cm_contentmodel.type.cm_systemfolder.description=Dossier contenant les \u00e9l\u00e9ments syst\u00e8mes - -cm_contentmodel.type.cm_person.title=Personne -cm_contentmodel.type.cm_person.description=Personne - -cm_contentmodel.property.cm_userName.title=Nom d'utilisateur -cm_contentmodel.property.cm_userName.description=Nom de l'utilisateur -cm_contentmodel.property.cm_homeFolder.title=Dossier personnel -cm_contentmodel.property.cm_homeFolder.description=Dossier personnel de l'utilisateur -cm_contentmodel.property.cm_firstName.title=Pr\u00e9nom -cm_contentmodel.property.cm_firstName.description=Pr\u00e9nom de l'utilisateur -cm_contentmodel.property.cm_lastName.title=Nom -cm_contentmodel.property.cm_lastName.description=Nom de l'utilisateur -cm_contentmodel.property.cm_middleName.title=Autres pr\u00e9noms -cm_contentmodel.property.cm_middleName.description=Autres pr\u00e9noms de l'utilisateur -cm_contentmodel.property.cm_email.title=Adresse Mel -cm_contentmodel.property.cm_email.description=Adresse mel de l'utilisateur -cm_contentmodel.property.cm_organizationId.title=Soci\u00e9t\u00e9 -cm_contentmodel.property.cm_organizationId.description=Soci\u00e9t\u00e9 de l'utilisateur - -cm_contentmodel.type.cm_category_root.title=Cat\u00e9gorie Racine -cm_contentmodel.type.cm_category_root.description=Cat\u00e9gorie Racine -cm_contentmodel.association.cm_categories.title=Cat\u00e9gories -cm_contentmodel.association.cm_categories.description=Cat\u00e9gories de la Cat\u00e9gorie Racine - -cm_contentmodel.type.cm_category.title=Cat\u00e9gorie -cm_contentmodel.type.cm_category.description=Cat\u00e9gorie -cm_contentmodel.association.cm_subcategories.title=Cat\u00e9gories -cm_contentmodel.association.cm_subcategories.description=Sous-cat\u00e9gories de la Cat\u00e9gorie - -cm_contentmodel.aspect.cm_titled.title=Titre -cm_contentmodel.aspect.cm_titled.description=Titre -cm_contentmodel.property.cm_title.title=Titre -cm_contentmodel.property.cm_title.description=Titre du Contenu -cm_contentmodel.property.cm_description.title=Description -cm_contentmodel.property.cm_description.description=Description du Contenu - -cm_contentmodel.aspect.cm_auditable.title=V\u00e9rifiable -cm_contentmodel.aspect.cm_auditable.description=V\u00e9rifiable -cm_contentmodel.property.cm_created.title=Date de cr\u00e9ation -cm_contentmodel.property.cm_created.description=Date de cr\u00e9ation -cm_contentmodel.property.cm_creator.title=Cr\u00e9ateur -cm_contentmodel.property.cm_creator.description=Celui qui a cr\u00e9e cet \u00e9l\u00e9ment -cm_contentmodel.property.cm_modified.title=Date de Modification -cm_contentmodel.property.cm_modified.description=Quand cet \u00e9l\u00e9ment a \u00e9t\u00e9 modifi\u00e9 pour la derni\u00e8re fois -cm_contentmodel.property.cm_modifier.title=Modificateur -cm_contentmodel.property.cm_modifier.description=Qui a modifi\u00e9 cet \u00e9l\u00e9ment en dernier -cm_contentmodel.property.cm_accessed.title=Date de dernier acc\u00e8sLast Accessed Date -cm_contentmodel.property.cm_accessed.description=Quand cet \u00e9l\u00e9ment a \u00e9t\u00e9 acc\u00e9d\u00e9 pour la derni\u00e8re fois - -cm_contentmodel.aspect.cm_author.title=Auteur -cm_contentmodel.aspect.cm_author.description=Auteur -cm_contentmodel.property.cm_author.title=Auteur -cm_contentmodel.property.cm_author.description=Auteur - -cm_contentmodel.aspect.cm_localizable.title=Localisable -cm_contentmodel.aspect.cm_localizable.description=Localisable -cm_contentmodel.property.cm_locale.title=Local -cm_contentmodel.property.cm_locale.description=Local - -cm_contentmodel.aspect.cm_translatable.title=Traduisible -cm_contentmodel.aspect.cm_translatable.description=Traduisible -cm_contentmodel.association.cm_translations.title=Traductions -cm_contentmodel.association.cm_translations.description=Traductions - -cm_contentmodel.aspect.cm_transformable.title=Transformable -cm_contentmodel.aspect.cm_transformable.description=Transformable -cm_contentmodel.association.cm_formats.title=Formats -cm_contentmodel.association.cm_formats.description=El\u00e9ments transform\u00e9s - -cm_contentmodel.aspect.cm_templatable.title=Transformable en Mod\u00e8le -cm_contentmodel.aspect.cm_templatable.description=Transformable en Mod\u00e8le -cm_contentmodel.property.cm_template.title=Mod\u00e8le -cm_contentmodel.property.cm_template.description=Mod\u00e8le - -cm_contentmodel.aspect.cm_complianceable.title=Possibilit\u00e9 de mise en conformit\u00e9 -cm_contentmodel.aspect.cm_complianceable.description=Possibilit\u00e9 de mise en conformit\u00e9 -cm_contentmodel.property.cm_removeAfter.title=Supprimer Apr\u00e8s -cm_contentmodel.property.cm_removeAfter.description=Supprimer Apr\u00e8s - -cm_contentmodel.aspect.cm_ownable.title=Accessible en propri\u00e9t\u00e9 -cm_contentmodel.aspect.cm_ownable.description=Accessible en propri\u00e9t\u00e9 -cm_contentmodel.property.cm_owner.title=Propri\u00e9taire -cm_contentmodel.property.cm_owner.description=Propri\u00e9taire - -cm_contentmodel.aspect.cm_dublincore.title=Dublin Core -cm_contentmodel.aspect.cm_dublincore.description=Dublin Core -cm_contentmodel.property.cm_publisher.title=\u00c9diteur -cm_contentmodel.property.cm_publisher.description=\u00c9diteur -cm_contentmodel.property.cm_contributor.title=Contributeur -cm_contentmodel.property.cm_contributor.description=Contributeur -cm_contentmodel.property.cm_type.title=Type -cm_contentmodel.property.cm_type.description=Type -cm_contentmodel.property.cm_identifier.title=Identifiant -cm_contentmodel.property.cm_identifier.description=Identifiant -cm_contentmodel.property.cm_dcsource.title=Origine -cm_contentmodel.property.cm_dcsource.description=Origine -cm_contentmodel.property.cm_coverage.title=Couverture -cm_contentmodel.property.cm_coverage.description=Couverture -cm_contentmodel.property.cm_rights.title=Droits d'acc\u00e8s -cm_contentmodel.property.cm_rights.description=Droits d'acc\u00e8s -cm_contentmodel.property.cm_subject.title=Sujet -cm_contentmodel.property.cm_subject.description=Sujet - -cm_contentmodel.aspect.cm_basable.title=Peut \u00eatre bas\u00e9 -cm_contentmodel.aspect.cm_basable.description=Peut \u00eatre bas\u00e9 -cm_contentmodel.association.cm_basis.title=Base -cm_contentmodel.association.cm_basis.description=Base - -cm_contentmodel.aspect.cm_partable.title=D\u00e9coupable -cm_contentmodel.aspect.cm_partable.description=D\u00e9coupable -cm_contentmodel.association.cm_parts.title=Parties -cm_contentmodel.association.cm_parts.description=Parties - -cm_contentmodel.aspect.cm_referencing.title=R\u00e9f\u00e9ren\u00e7able -cm_contentmodel.aspect.cm_referencing.description=R\u00e9f\u00e9ren\u00e7able -cm_contentmodel.association.cm_references.title=R\u00e9f\u00e9rences -cm_contentmodel.association.cm_references.description=R\u00e9f\u00e9rences - -cm_contentmodel.aspect.cm_replacable.title=Rempla\u00e7able -cm_contentmodel.aspect.cm_replacable.description=Rempla\u00e7able -cm_contentmodel.association.cm_replaces.title=Remplace -cm_contentmodel.association.cm_replaces.description=Remplace - -cm_contentmodel.aspect.cm_effectivity.title=Validit\u00e9 -cm_contentmodel.aspect.cm_effectivity.description=Validit\u00e9 -cm_contentmodel.property.cm_from.title=Valide de -cm_contentmodel.property.cm_from.description=Valide de -cm_contentmodel.property.cm_to.title=Valide jusqu'\u00e0 -cm_contentmodel.property.cm_to.description=Valide jusqu'\u00e0 - -cm_contentmodel.aspect.cm_summarizable.title=Peut \u00eatre r\u00e9sum\u00e9 -cm_contentmodel.aspect.cm_summarizable.description=Peut \u00eatre r\u00e9sum\u00e9 -cm_contentmodel.property.cm_summary.title=R\u00e9sum\u00e9 -cm_contentmodel.property.cm_summary.description=R\u00e9sum\u00e9 - -cm_contentmodel.aspect.cm_countable.title=Peut \u00eatre compt\u00e9 -cm_contentmodel.aspect.cm_countable.description=Peut \u00eatre compt\u00e9 -cm_contentmodel.property.cm_hits.title=D\u00e9compte -cm_contentmodel.property.cm_hits.description=D\u00e9compte - -cm_contentmodel.aspect.cm_copiedFrom.title=Copi\u00e9 Depuis -cm_contentmodel.aspect.cm_copiedFrom.description=Copi\u00e9 Depuis -cm_contentmodel.property.cm_source.title=Origine -cm_contentmodel.property.cm_source.description=Origine - -cm_contentmodel.aspect.cm_workingcopy.title=Copie de travail -cm_contentmodel.aspect.cm_workingcopy.description=Copie de travail -cm_contentmodel.property.cm_workingCopyOwner.title=Propri\u00e9taire de la Copie de Travail -cm_contentmodel.property.cm_workingCopyOwner.description=Propri\u00e9taire de la Copie de Travail - -cm_contentmodel.aspect.cm_versionable.title=Versionnable -cm_contentmodel.aspect.cm_versionable.description=Versionnable -cm_contentmodel.property.cm_versionLabel.title=Version -cm_contentmodel.property.cm_versionLabel.description=Version -cm_contentmodel.property.cm_autoVersion.title=Version Automatique -cm_contentmodel.property.cm_autoVersion.description=Version Automatique -cm_contentmodel.property.cm_initialVersion.title=Version Initiale -cm_contentmodel.property.cm_initialVersion.description=Version Initiale - -cm_contentmodel.aspect.cm_lockable.title=Verrouillable -cm_contentmodel.aspect.cm_lockable.description=Verrouillable -cm_contentmodel.property.cm_lockOwner.title=Propri\u00e9taire du Verrou -cm_contentmodel.property.cm_lockOwner.description=Propri\u00e9taire du Verrou -cm_contentmodel.property.cm_lockType.title=Type de Verrou -cm_contentmodel.property.cm_lockType.description=Type de Verrou -cm_contentmodel.property.cm_expiryDate.title=Date d'Expiration -cm_contentmodel.property.cm_expiryDate.description=Date d'Expiration -cm_contentmodel.property.cm_lockIsDeep.title=Verrou Profond -cm_contentmodel.property.cm_lockIsDeep.description=Verrou Profond - -cm_contentmodel.aspect.cm_subscribable.title=Souscription possible -cm_contentmodel.aspect.cm_subscribable.description=Souscription possible -cm_contentmodel.association.cm_subscribedBy.title=Souscrit Par -cm_contentmodel.association.cm_subscribedBy.description=Souscrit Par - -cm_contentmodel.aspect.cm_classifiable.title=Cat\u00e9gorisable -cm_contentmodel.aspect.cm_classifiable.description=Cat\u00e9gorisable - -cm_contentmodel.aspect.cm_generalclassifiable.title=Cat\u00e9gorisable -cm_contentmodel.aspect.cm_generalclassifiable.description=Cat\u00e9gorisable -cm_contentmodel.property.cm_categories.title=Cat\u00e9gories -cm_contentmodel.property.cm_categories.description=Cat\u00e9gories - -cm_contentmodel.aspect.cm_taggable.title=Peut \u00eatre tagg\u00e9 -cm_contentmodel.aspect.cm_taggable.description=Peut \u00eatre tagg\u00e9 -cm_contentmodel.property.cm_taggable.title=\u00c9tiquettes -cm_contentmodel.property.cm_taggable.description=\u00c9tiquettes - -cm_contentmodel.aspect.cm_attachable.title=Pi\u00e8ces jointes possibles -cm_contentmodel.aspect.cm_attachable.description=Permet \u00e0 d'autres objets de l'entrepot d'\u00eatre attach\u00e9s -cm_contentmodel.association.cm_attachments.title=El\u00e9ments attach\u00e9s -cm_contentmodel.association.cm_attachments.description=Objets de r\u00e9f\u00e9rentiel joints - -cm_contentmodel.aspect.cm_emailed.title=Envoy\u00e9 par mail -cm_contentmodel.aspect.cm_emailed.description=Envoy\u00e9 par mail -cm_contentmodel.property.cm_originator.title=Exp\u00e9diteur -cm_contentmodel.property.cm_originator.description=Exp\u00e9diteur -cm_contentmodel.property.cm_addressee.title=Destinataire -cm_contentmodel.property.cm_addressee.description=Destinataire -cm_contentmodel.property.cm_addressees.title=En copie -cm_contentmodel.property.cm_addressees.description=En copie -cm_contentmodel.property.cm_subjectline.title=Sujet -cm_contentmodel.property.cm_subjectline.description=Sujet -cm_contentmodel.property.cm_sentdate.title=Date d'envoi -cm_contentmodel.property.cm_sentdate.description=Date d'envoi - -cm_contentmodel.aspect.cm_geographic.title=Positionnement g\u00e9ographique -cm_contentmodel.aspect.cm_geographic.description=Positionnement g\u00e9ographique -cm_contentmodel.property.cm_latitude.title=Latitude -cm_contentmodel.property.cm_latitude.description=Latitude -cm_contentmodel.property.cm_longitude.title=Longitude -cm_contentmodel.property.cm_longitude.description=Longitude - -cm_contentmodel.aspect.exif_exif.title=EXIF -cm_contentmodel.aspect.exif_exif.description=Sous-ensemble des m\u00e9tadonn\u00e9es\u00a0EXIF standard -cm_contentmodel.property.exif_dateTimeOriginal.title=Date et Heure -cm_contentmodel.property.exif_dateTimeOriginal.description=Date et heure de g\u00e9n\u00e9ration de l'image originale -cm_contentmodel.property.exif_pixelXDimension.title=Largeur de l'image -cm_contentmodel.property.exif_pixelXDimension.description=Largeur de l'image, en pixels -cm_contentmodel.property.exif_pixelYDimension.title=Hauteur de l'image -cm_contentmodel.property.exif_pixelYDimension.description=Hauteur de l'image, en pixels -cm_contentmodel.property.exif_exposureTime.title=Temps d'exposition -cm_contentmodel.property.exif_exposureTime.description=Temps d'exposition, en secondes -cm_contentmodel.property.exif_fNumber.title=Ouverture num\u00e9rique -cm_contentmodel.property.exif_fNumber.description=Ouverture num\u00e9rique -cm_contentmodel.property.exif_flash.title=Flash activ\u00e9 -cm_contentmodel.property.exif_flash.description=Indique si le flash s'est d\u00e9clench\u00e9 lors de la prise de la photo -cm_contentmodel.property.exif_focalLength.title=Longueur focale -cm_contentmodel.property.exif_focalLength.description=Longueur focale de l'objectif, en millim\u00e8tres -cm_contentmodel.property.exif_isoSpeedRatings.title=Sensibilit\u00e9\u00a0ISO -cm_contentmodel.property.exif_isoSpeedRatings.description=Sensibilit\u00e9\u00a0ISO -cm_contentmodel.property.exif_manufacturer.title=Fabricant de l'appareil photo -cm_contentmodel.property.exif_manufacturer.description=Fabricant de l'appareil ayant r\u00e9alis\u00e9 la photo -cm_contentmodel.property.exif_model.title=Mod\u00e8le d'appareil photo -cm_contentmodel.property.exif_model.description=Mod\u00e8le de l'appareil ayant r\u00e9alis\u00e9 la photo -cm_contentmodel.property.exif_software.title=Logiciel de l'appareil photo -cm_contentmodel.property.exif_software.description=Logiciel int\u00e9gr\u00e9 dans l'appareil ayant r\u00e9alis\u00e9 la photo -cm_contentmodel.property.exif_orientation.title=Orientation -cm_contentmodel.property.exif_orientation.description=Orientation de la photo -cm_contentmodel.property.exif_xResolution.title=R\u00e9solution horizontale -cm_contentmodel.property.exif_xResolution.description=R\u00e9solution horizontale, en pixels par unit\u00e9 -cm_contentmodel.property.exif_yResolution.title=R\u00e9solution verticale -cm_contentmodel.property.exif_yResolution.description=R\u00e9solution verticale, en pixels par unit\u00e9 -cm_contentmodel.property.exif_resolutionUnit.title=Unit\u00e9 de r\u00e9solution -cm_contentmodel.property.exif_resolutionUnit.description=Unit\u00e9 utilis\u00e9e pour les r\u00e9solutions horizontale et verticale diff --git a/config/alfresco/messages/content-model_it_IT.properties b/config/alfresco/messages/content-model_it_IT.properties deleted file mode 100755 index 887ff0501d..0000000000 --- a/config/alfresco/messages/content-model_it_IT.properties +++ /dev/null @@ -1,276 +0,0 @@ -# Display labels for Content Domain Model - -cm_contentmodel.description=Modello di dominio di contenuto Alfresco - -cm_contentmodel.type.cm_object.title=Oggetto -cm_contentmodel.type.cm_object.description=Oggetto del dominio di contenuto di base -cm_contentmodel.property.cm_name.title=Nome -cm_contentmodel.property.cm_name.description=Nome - -cm_contentmodel.type.cm_folder.title=Cartella -cm_contentmodel.type.cm_folder.description=Cartella -cm_contentmodel.property.cm_orderedchildren.title=Figli ordinati -cm_contentmodel.property.cm_orderedchildren.description=Indica se i figli della cartella sono ordinati -cm_contentmodel.association.cm_contains.title=Contiene -cm_contentmodel.association.cm_contains.description=Contiene - -cm_contentmodel.type.cm_content.title=Contenuto -cm_contentmodel.type.cm_content.description=Oggetto contenuto di base -cm_contentmodel.property.cm_content.title=Contenuto -cm_contentmodel.property.cm_content.description=Contenuto - -cm_contentmodel.type.cm_linkfile.title=Link a file -cm_contentmodel.type.cm_linkfile.description=Link a un altro file -cm_contentmodel.property.cm_path.title=Percorso file collegato -cm_contentmodel.property.cm_path.description=Percorso del file collegato - -cm_contentmodel.type.cm_savedquery.title=Query salvata -cm_contentmodel.type.cm_savedquery.description=Query salvata - -cm_contentmodel.type.cm_systemfolder.title=Cartella di sistema -cm_contentmodel.type.cm_systemfolder.description=Cartella in cui inserire elementi a livello di sistema - -cm_contentmodel.type.cm_person.title=Persona -cm_contentmodel.type.cm_person.description=Persona - -cm_contentmodel.property.cm_userName.title=Nome utente -cm_contentmodel.property.cm_userName.description=Nome utente della persona -cm_contentmodel.property.cm_homeFolder.title=Cartella homepage -cm_contentmodel.property.cm_homeFolder.description=Cartella della homepage della persona -cm_contentmodel.property.cm_firstName.title=Nome -cm_contentmodel.property.cm_firstName.description=Nome della persona -cm_contentmodel.property.cm_lastName.title=Cognome -cm_contentmodel.property.cm_lastName.description=Cognome della persona -cm_contentmodel.property.cm_middleName.title=Secondo nome -cm_contentmodel.property.cm_middleName.description=Secondo nome della persona -cm_contentmodel.property.cm_email.title=Indirizzo e-mail -cm_contentmodel.property.cm_email.description=Indirizzo e-mail della persona -cm_contentmodel.property.cm_organizationId.title=Organizzazione -cm_contentmodel.property.cm_organizationId.description=Organizzazione della persona - -cm_contentmodel.type.cm_category_root.title=Radice categorie -cm_contentmodel.type.cm_category_root.description=Categoria radice -cm_contentmodel.association.cm_categories.title=Categorie -cm_contentmodel.association.cm_categories.description=Categorie presenti nella radice - -cm_contentmodel.type.cm_category.title=Categoria -cm_contentmodel.type.cm_category.description=Categoria -cm_contentmodel.association.cm_subcategories.title=Categorie -cm_contentmodel.association.cm_subcategories.description=Sottocategorie della categoria - -cm_contentmodel.aspect.cm_titled.title=Titled -cm_contentmodel.aspect.cm_titled.description=Titled -cm_contentmodel.property.cm_title.title=Titolo -cm_contentmodel.property.cm_title.description=Titolo del contenuto -cm_contentmodel.property.cm_description.title=Descrizione -cm_contentmodel.property.cm_description.description=Descrizione del contenuto - -cm_contentmodel.aspect.cm_auditable.title=Auditable -cm_contentmodel.aspect.cm_auditable.description=Auditable -cm_contentmodel.property.cm_created.title=Data di creazione -cm_contentmodel.property.cm_created.description=Data di creazione -cm_contentmodel.property.cm_creator.title=Creatore -cm_contentmodel.property.cm_creator.description=Utente da cui \u00e8 stato creato l'elemento -cm_contentmodel.property.cm_modified.title=Data di modifica -cm_contentmodel.property.cm_modified.description=Data dell'ultima modifica dell'elemento -cm_contentmodel.property.cm_modifier.title=Modificatore -cm_contentmodel.property.cm_modifier.description=Utente che ha apportato l'ultima modifica all'elemento -cm_contentmodel.property.cm_accessed.title=Data di ultimo accesso -cm_contentmodel.property.cm_accessed.description=Data dell'ultimo accesso all'elemento - -cm_contentmodel.aspect.cm_author.title=Author -cm_contentmodel.aspect.cm_author.description=Author -cm_contentmodel.property.cm_author.title=Autore -cm_contentmodel.property.cm_author.description=Autore - -cm_contentmodel.aspect.cm_localizable.title=Localizable -cm_contentmodel.aspect.cm_localizable.description=Localizable -cm_contentmodel.property.cm_locale.title=Impostazioni locali -cm_contentmodel.property.cm_locale.description=Impostazioni locali - -cm_contentmodel.aspect.cm_translatable.title=Translatable -cm_contentmodel.aspect.cm_translatable.description=Translatable -cm_contentmodel.association.cm_translations.title=Traduzioni -cm_contentmodel.association.cm_translations.description=Traduzioni - -cm_contentmodel.aspect.cm_transformable.title=Transformable -cm_contentmodel.aspect.cm_transformable.description=Transformable -cm_contentmodel.association.cm_formats.title=Formati -cm_contentmodel.association.cm_formats.description=Elementi trasformati - -cm_contentmodel.aspect.cm_templatable.title=Templatable -cm_contentmodel.aspect.cm_templatable.description=Templatable -cm_contentmodel.property.cm_template.title=Modello -cm_contentmodel.property.cm_template.description=Modello - -cm_contentmodel.aspect.cm_complianceable.title=Complianceable -cm_contentmodel.aspect.cm_complianceable.description=Complianceable -cm_contentmodel.property.cm_removeAfter.title=Rimuovi dopo -cm_contentmodel.property.cm_removeAfter.description=Rimuovi dopo - -cm_contentmodel.aspect.cm_ownable.title=Ownable -cm_contentmodel.aspect.cm_ownable.description=Ownable -cm_contentmodel.property.cm_owner.title=Proprietario -cm_contentmodel.property.cm_owner.description=Proprietario - -cm_contentmodel.aspect.cm_dublincore.title=Dublin Core -cm_contentmodel.aspect.cm_dublincore.description=Dublin Core -cm_contentmodel.property.cm_publisher.title=Editore -cm_contentmodel.property.cm_publisher.description=Editore -cm_contentmodel.property.cm_contributor.title=Contributore -cm_contentmodel.property.cm_contributor.description=Contributore -cm_contentmodel.property.cm_type.title=Tipo -cm_contentmodel.property.cm_type.description=Tipo -cm_contentmodel.property.cm_identifier.title=Identificativo -cm_contentmodel.property.cm_identifier.description=Identificativo -cm_contentmodel.property.cm_dcsource.title=Fonte -cm_contentmodel.property.cm_dcsource.description=Fonte -cm_contentmodel.property.cm_coverage.title=Copertura -cm_contentmodel.property.cm_coverage.description=Copertura -cm_contentmodel.property.cm_rights.title=Diritti -cm_contentmodel.property.cm_rights.description=Diritti -cm_contentmodel.property.cm_subject.title=Oggetto -cm_contentmodel.property.cm_subject.description=Oggetto - -cm_contentmodel.aspect.cm_basable.title=Basable -cm_contentmodel.aspect.cm_basable.description=Basable -cm_contentmodel.association.cm_basis.title=Base -cm_contentmodel.association.cm_basis.description=Base - -cm_contentmodel.aspect.cm_partable.title=Partable -cm_contentmodel.aspect.cm_partable.description=Partable -cm_contentmodel.association.cm_parts.title=Parti -cm_contentmodel.association.cm_parts.description=Parti - -cm_contentmodel.aspect.cm_referencing.title=Referencing -cm_contentmodel.aspect.cm_referencing.description=Referencing -cm_contentmodel.association.cm_references.title=Riferimenti -cm_contentmodel.association.cm_references.description=Riferimenti - -cm_contentmodel.aspect.cm_replacable.title=Replaceable -cm_contentmodel.aspect.cm_replacable.description=Replaceable -cm_contentmodel.association.cm_replaces.title=Sostituzioni -cm_contentmodel.association.cm_replaces.description=Sostituzioni - -cm_contentmodel.aspect.cm_effectivity.title=Effectivity -cm_contentmodel.aspect.cm_effectivity.description=Effectivity -cm_contentmodel.property.cm_from.title=Valido da -cm_contentmodel.property.cm_from.description=Valido da -cm_contentmodel.property.cm_to.title=Valido fino a -cm_contentmodel.property.cm_to.description=Valido fino a - -cm_contentmodel.aspect.cm_summarizable.title=Summarizable -cm_contentmodel.aspect.cm_summarizable.description=Summarizable -cm_contentmodel.property.cm_summary.title=Sommario -cm_contentmodel.property.cm_summary.description=Sommario - -cm_contentmodel.aspect.cm_countable.title=Countable -cm_contentmodel.aspect.cm_countable.description=Countable -cm_contentmodel.property.cm_hits.title=Conteggio -cm_contentmodel.property.cm_hits.description=Conteggio - -cm_contentmodel.aspect.cm_copiedFrom.title=Copied From -cm_contentmodel.aspect.cm_copiedFrom.description=Copied From -cm_contentmodel.property.cm_source.title=Fonte -cm_contentmodel.property.cm_source.description=Fonte - -cm_contentmodel.aspect.cm_workingcopy.title=Working Copy -cm_contentmodel.aspect.cm_workingcopy.description=Working Copy -cm_contentmodel.property.cm_workingCopyOwner.title=Proprietario della copia di lavoro -cm_contentmodel.property.cm_workingCopyOwner.description=Proprietario della copia di lavoro - -cm_contentmodel.aspect.cm_versionable.title=Versionable -cm_contentmodel.aspect.cm_versionable.description=Versionable -cm_contentmodel.property.cm_versionLabel.title=Etichetta della versione -cm_contentmodel.property.cm_versionLabel.description=Etichetta della versione -cm_contentmodel.property.cm_autoVersion.title=Versione automatica -cm_contentmodel.property.cm_autoVersion.description=Versione automatica -cm_contentmodel.property.cm_initialVersion.title=Versione iniziale -cm_contentmodel.property.cm_initialVersion.description=Versione iniziale - -cm_contentmodel.aspect.cm_lockable.title=Lockable -cm_contentmodel.aspect.cm_lockable.description=Lockable -cm_contentmodel.property.cm_lockOwner.title=Proprietario del blocco -cm_contentmodel.property.cm_lockOwner.description=Proprietario del blocco -cm_contentmodel.property.cm_lockType.title=Tipo di blocco -cm_contentmodel.property.cm_lockType.description=Tipo di blocco -cm_contentmodel.property.cm_expiryDate.title=Data di scadenza -cm_contentmodel.property.cm_expiryDate.description=Data di scadenza -cm_contentmodel.property.cm_lockIsDeep.title=Blocco completo -cm_contentmodel.property.cm_lockIsDeep.description=Blocco completo - -cm_contentmodel.aspect.cm_subscribable.title=Subscribable -cm_contentmodel.aspect.cm_subscribable.description=Subscribable -cm_contentmodel.association.cm_subscribedBy.title=Sottoscritto da -cm_contentmodel.association.cm_subscribedBy.description=Sottoscritto da - -cm_contentmodel.aspect.cm_classifiable.title=Classifiable -cm_contentmodel.aspect.cm_classifiable.description=Classifiable - -cm_contentmodel.aspect.cm_generalclassifiable.title=Classifiable -cm_contentmodel.aspect.cm_generalclassifiable.description=Classifiable -cm_contentmodel.property.cm_categories.title=Categorie -cm_contentmodel.property.cm_categories.description=Categorie - -cm_contentmodel.aspect.cm_taggable.title=Taggable -cm_contentmodel.aspect.cm_taggable.description=Taggable -cm_contentmodel.property.cm_taggable.title=Tag -cm_contentmodel.property.cm_taggable.description=Tag - -cm_contentmodel.aspect.cm_attachable.title=Attachable -cm_contentmodel.aspect.cm_attachable.description=Consente di allegare altri oggetti del repository -cm_contentmodel.association.cm_attachments.title=Allegati -cm_contentmodel.association.cm_attachments.description=Oggetti del repository allegati - -cm_contentmodel.aspect.cm_emailed.title=Emailed -cm_contentmodel.aspect.cm_emailed.description=Emailed -cm_contentmodel.property.cm_originator.title=Originatore -cm_contentmodel.property.cm_originator.description=Originatore -cm_contentmodel.property.cm_addressee.title=Destinatario -cm_contentmodel.property.cm_addressee.description=Destinatario -cm_contentmodel.property.cm_addressees.title=Destinatari -cm_contentmodel.property.cm_addressees.description=Destinatari -cm_contentmodel.property.cm_subjectline.title=Oggetto -cm_contentmodel.property.cm_subjectline.description=Oggetto -cm_contentmodel.property.cm_sentdate.title=Data di invio -cm_contentmodel.property.cm_sentdate.description=Data di invio - -cm_contentmodel.aspect.cm_geographic.title=Geographic -cm_contentmodel.aspect.cm_geographic.description=Geographic -cm_contentmodel.property.cm_latitude.title=Latitudine -cm_contentmodel.property.cm_latitude.description=Latitudine -cm_contentmodel.property.cm_longitude.title=Longitudine -cm_contentmodel.property.cm_longitude.description=Longitudine - -cm_contentmodel.aspect.exif_exif.title=EXIF -cm_contentmodel.aspect.exif_exif.description=Sottoinsieme di metadati EXIF standard -cm_contentmodel.property.exif_dateTimeOriginal.title=Data e ora -cm_contentmodel.property.exif_dateTimeOriginal.description=Data e ora in cui \u00e8 stata generata l'immagine originale -cm_contentmodel.property.exif_pixelXDimension.title=Larghezza immagine -cm_contentmodel.property.exif_pixelXDimension.description=Larghezza dell'immagine in pixel -cm_contentmodel.property.exif_pixelYDimension.title=Altezza immagine -cm_contentmodel.property.exif_pixelYDimension.description=Altezza dell'immagine in pixel -cm_contentmodel.property.exif_exposureTime.title=Tempo di esposizione -cm_contentmodel.property.exif_exposureTime.description=Tempo di esposizione in secondi -cm_contentmodel.property.exif_fNumber.title=Numero di diaframma -cm_contentmodel.property.exif_fNumber.description=Numero di diaframma -cm_contentmodel.property.exif_flash.title=Flash attivato -cm_contentmodel.property.exif_flash.description=Indica se il flash era attivato quando \u00e8 stata scattata l'immagine -cm_contentmodel.property.exif_focalLength.title=Lunghezza focale -cm_contentmodel.property.exif_focalLength.description=Lunghezza focale della lente in millimetri -cm_contentmodel.property.exif_isoSpeedRatings.title=Velocit\u00e0 ISO -cm_contentmodel.property.exif_isoSpeedRatings.description=Velocit\u00e0 ISO -cm_contentmodel.property.exif_manufacturer.title=Produttore fotocamera -cm_contentmodel.property.exif_manufacturer.description=Produttore della fotocamera da cui \u00e8 stata scattata l'immagine -cm_contentmodel.property.exif_model.title=Modello fotocamera -cm_contentmodel.property.exif_model.description=Modello della fotocamera da cui \u00e8 stata scattata l'immagine -cm_contentmodel.property.exif_software.title=Software fotocamera -cm_contentmodel.property.exif_software.description=Software installato nella fotocamera da cui \u00e8 stata scattata l'immagine -cm_contentmodel.property.exif_orientation.title=Orientamento -cm_contentmodel.property.exif_orientation.description=Orientamento dell'immagine -cm_contentmodel.property.exif_xResolution.title=Risoluzione orizzontale -cm_contentmodel.property.exif_xResolution.description=Risoluzione orizzontale in pixel per unit\u00e0 -cm_contentmodel.property.exif_yResolution.title=Risoluzione verticale -cm_contentmodel.property.exif_yResolution.description=Risoluzione verticale in pixel per unit\u00e0 -cm_contentmodel.property.exif_resolutionUnit.title=Unit\u00e0 di risoluzione -cm_contentmodel.property.exif_resolutionUnit.description=Unit\u00e0 utilizzata per la risoluzione orizzontale e verticale diff --git a/config/alfresco/messages/content-model_ja.properties b/config/alfresco/messages/content-model_ja.properties deleted file mode 100755 index 3536bd6ac3..0000000000 --- a/config/alfresco/messages/content-model_ja.properties +++ /dev/null @@ -1,276 +0,0 @@ -# Display labels for Content Domain Model - -cm_contentmodel.description=Alfresco\u30b3\u30f3\u30c6\u30f3\u30c4\u30c9\u30e1\u30a4\u30f3\u30e2\u30c7\u30eb - -cm_contentmodel.type.cm_object.title=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 -cm_contentmodel.type.cm_object.description=\u57fa\u672c\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u30c9\u30e1\u30a4\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 -cm_contentmodel.property.cm_name.title=\u540d\u524d -cm_contentmodel.property.cm_name.description=\u540d\u524d - -cm_contentmodel.type.cm_folder.title=\u30d5\u30a9\u30eb\u30c0 -cm_contentmodel.type.cm_folder.description=\u30d5\u30a9\u30eb\u30c0 -cm_contentmodel.property.cm_orderedchildren.title=\u9806\u5e8f\u4ed8\u3051\u3089\u308c\u305f\u5b50 -cm_contentmodel.property.cm_orderedchildren.description=\u30d5\u30a9\u30eb\u30c0\u306e\u5b50\u304c\u6b63\u3057\u304f\u4e26\u3079\u3089\u308c\u305f\u304b\u3069\u3046\u304b\u3092\u793a\u3057\u307e\u3059 -cm_contentmodel.association.cm_contains.title=\u542b\u3080 -cm_contentmodel.association.cm_contains.description=\u542b\u3080 - -cm_contentmodel.type.cm_content.title=\u30b3\u30f3\u30c6\u30f3\u30c4 -cm_contentmodel.type.cm_content.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u57fa\u672c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 -cm_contentmodel.property.cm_content.title=\u30b3\u30f3\u30c6\u30f3\u30c4 -cm_contentmodel.property.cm_content.description=\u30b3\u30f3\u30c6\u30f3\u30c4 - -cm_contentmodel.type.cm_linkfile.title=\u30d5\u30a1\u30a4\u30eb\u30ea\u30f3\u30af -cm_contentmodel.type.cm_linkfile.description=\u4ed6\u306e\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30ea\u30f3\u30af -cm_contentmodel.property.cm_path.title=\u30ea\u30f3\u30af\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9 -cm_contentmodel.property.cm_path.description=\u30ea\u30f3\u30af\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30d1\u30b9 - -cm_contentmodel.type.cm_savedquery.title=\u4fdd\u5b58\u6e08\u30af\u30a8\u30ea -cm_contentmodel.type.cm_savedquery.description=\u4fdd\u5b58\u6e08\u30af\u30a8\u30ea - -cm_contentmodel.type.cm_systemfolder.title=\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30eb\u30c0 -cm_contentmodel.type.cm_systemfolder.description=\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\u306e\u30a2\u30a4\u30c6\u30e0\u3092\u542b\u3080\u30d5\u30a9\u30eb\u30c0 - -cm_contentmodel.type.cm_person.title=\u4eba -cm_contentmodel.type.cm_person.description=\u4eba - -cm_contentmodel.property.cm_userName.title=\u30e6\u30fc\u30b6\u540d -cm_contentmodel.property.cm_userName.description=\u4eba\u306e\u30e6\u30fc\u30b6\u540d -cm_contentmodel.property.cm_homeFolder.title=\u30db\u30fc\u30e0\u30d5\u30a9\u30eb\u30c0 -cm_contentmodel.property.cm_homeFolder.description=\u4eba\u306e\u30db\u30fc\u30e0\u30d5\u30a9\u30eb\u30c0 -cm_contentmodel.property.cm_firstName.title=\u540d -cm_contentmodel.property.cm_firstName.description=\u4eba\u306e\u540d -cm_contentmodel.property.cm_lastName.title=\u59d3 -cm_contentmodel.property.cm_lastName.description=\u4eba\u306e\u59d3 -cm_contentmodel.property.cm_middleName.title=\u30df\u30c9\u30eb\u30cd\u30fc\u30e0 -cm_contentmodel.property.cm_middleName.description=\u4eba\u306e\u30df\u30c9\u30eb\u30cd\u30fc\u30e0 -cm_contentmodel.property.cm_email.title=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -cm_contentmodel.property.cm_email.description=\u4eba\u306eE\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -cm_contentmodel.property.cm_organizationId.title=\u7d44\u7e54 -cm_contentmodel.property.cm_organizationId.description=\u4eba\u306e\u7d44\u7e54 - -cm_contentmodel.type.cm_category_root.title=\u30ab\u30c6\u30b4\u30ea\u30eb\u30fc\u30c8 -cm_contentmodel.type.cm_category_root.description=\u30eb\u30fc\u30c8\u30ab\u30c6\u30b4\u30ea -cm_contentmodel.association.cm_categories.title=\u30ab\u30c6\u30b4\u30ea -cm_contentmodel.association.cm_categories.description=\u30ab\u30c6\u30b4\u30ea\u30eb\u30fc\u30c8\u306b\u542b\u307e\u308c\u308b\u30ab\u30c6\u30b4\u30ea - -cm_contentmodel.type.cm_category.title=\u30ab\u30c6\u30b4\u30ea -cm_contentmodel.type.cm_category.description=\u30ab\u30c6\u30b4\u30ea -cm_contentmodel.association.cm_subcategories.title=\u30ab\u30c6\u30b4\u30ea -cm_contentmodel.association.cm_subcategories.description=\u30ab\u30c6\u30b4\u30ea\u306b\u542b\u307e\u308c\u308b\u30b5\u30d6\u30ab\u30c6\u30b4\u30ea - -cm_contentmodel.aspect.cm_titled.title=\u30bf\u30a4\u30c8\u30eb\u306e\u3042\u308b -cm_contentmodel.aspect.cm_titled.description=\u30bf\u30a4\u30c8\u30eb\u306e\u3042\u308b -cm_contentmodel.property.cm_title.title=\u30bf\u30a4\u30c8\u30eb -cm_contentmodel.property.cm_title.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u30bf\u30a4\u30c8\u30eb -cm_contentmodel.property.cm_description.title=\u8aac\u660e -cm_contentmodel.property.cm_description.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8aac\u660e - -cm_contentmodel.aspect.cm_auditable.title=\u76e3\u67fb\u53ef\u80fd -cm_contentmodel.aspect.cm_auditable.description=\u76e3\u67fb\u53ef\u80fd -cm_contentmodel.property.cm_created.title=\u4f5c\u6210\u65e5 -cm_contentmodel.property.cm_created.description=\u4f5c\u6210\u65e5 -cm_contentmodel.property.cm_creator.title=\u4f5c\u6210\u8005 -cm_contentmodel.property.cm_creator.description=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u4f5c\u6210\u8005 -cm_contentmodel.property.cm_modified.title=\u5909\u66f4\u65e5 -cm_contentmodel.property.cm_modified.description=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u6700\u7d42\u5909\u66f4\u65e5 -cm_contentmodel.property.cm_modifier.title=\u5909\u66f4\u8005 -cm_contentmodel.property.cm_modifier.description=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u306e\u6700\u7d42\u5909\u66f4\u8005 -cm_contentmodel.property.cm_accessed.title=\u6700\u5f8c\u306e\u30a2\u30af\u30bb\u30b9\u65e5 -cm_contentmodel.property.cm_accessed.description=\u3053\u306e\u30a2\u30a4\u30c6\u30e0\u3078\u306e\u6700\u7d42\u30a2\u30af\u30bb\u30b9\u65e5 - -cm_contentmodel.aspect.cm_author.title=\u4f5c\u6210\u8005 -cm_contentmodel.aspect.cm_author.description=\u4f5c\u6210\u8005 -cm_contentmodel.property.cm_author.title=\u4f5c\u6210\u8005 -cm_contentmodel.property.cm_author.description=\u4f5c\u6210\u8005 - -cm_contentmodel.aspect.cm_localizable.title=\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u53ef\u80fd -cm_contentmodel.aspect.cm_localizable.description=\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u53ef\u80fd -cm_contentmodel.property.cm_locale.title=\u5730\u57df -cm_contentmodel.property.cm_locale.description=\u5730\u57df - -cm_contentmodel.aspect.cm_translatable.title=\u7ffb\u8a33\u53ef\u80fd -cm_contentmodel.aspect.cm_translatable.description=\u7ffb\u8a33\u53ef\u80fd -cm_contentmodel.association.cm_translations.title=\u7ffb\u8a33 -cm_contentmodel.association.cm_translations.description=\u7ffb\u8a33 - -cm_contentmodel.aspect.cm_transformable.title=\u5909\u63db\u53ef\u80fd -cm_contentmodel.aspect.cm_transformable.description=\u5909\u63db\u53ef\u80fd -cm_contentmodel.association.cm_formats.title=\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 -cm_contentmodel.association.cm_formats.description=\u5909\u63db\u6e08\u30a2\u30a4\u30c6\u30e0 - -cm_contentmodel.aspect.cm_templatable.title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5316\u5bfe\u8c61 -cm_contentmodel.aspect.cm_templatable.description=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u5316\u5bfe\u8c61 -cm_contentmodel.property.cm_template.title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -cm_contentmodel.property.cm_template.description=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -cm_contentmodel.aspect.cm_complianceable.title=\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u5bfe\u8c61 -cm_contentmodel.aspect.cm_complianceable.description=\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u5bfe\u8c61 -cm_contentmodel.property.cm_removeAfter.title=\u305d\u306e\u5f8c\u53d6\u308a\u5916\u3059 -cm_contentmodel.property.cm_removeAfter.description=\u305d\u306e\u5f8c\u53d6\u308a\u5916\u3059 - -cm_contentmodel.aspect.cm_ownable.title=\u6240\u6709\u53ef\u80fd -cm_contentmodel.aspect.cm_ownable.description=\u6240\u6709\u53ef\u80fd -cm_contentmodel.property.cm_owner.title=\u6240\u6709\u8005 -cm_contentmodel.property.cm_owner.description=\u6240\u6709\u8005 - -cm_contentmodel.aspect.cm_dublincore.title=\u30c0\u30d6\u30ea\u30f3\u30b3\u30a2\u60c5\u5831\u4ed8\u304d -cm_contentmodel.aspect.cm_dublincore.description=\u30c0\u30d6\u30ea\u30f3\u30b3\u30a2\u60c5\u5831\u4ed8\u304d -cm_contentmodel.property.cm_publisher.title=\u767a\u884c\u8005 -cm_contentmodel.property.cm_publisher.description=\u767a\u884c\u8005 -cm_contentmodel.property.cm_contributor.title=\u53c2\u52a0\u8005 -cm_contentmodel.property.cm_contributor.description=\u53c2\u52a0\u8005 -cm_contentmodel.property.cm_type.title=\u30bf\u30a4\u30d7 -cm_contentmodel.property.cm_type.description=\u30bf\u30a4\u30d7 -cm_contentmodel.property.cm_identifier.title=ID -cm_contentmodel.property.cm_identifier.description=ID -cm_contentmodel.property.cm_dcsource.title=\u30bd\u30fc\u30b9 -cm_contentmodel.property.cm_dcsource.description=\u30bd\u30fc\u30b9 -cm_contentmodel.property.cm_coverage.title=\u30ab\u30d0\u30ec\u30c3\u30b8 -cm_contentmodel.property.cm_coverage.description=\u30ab\u30d0\u30ec\u30c3\u30b8 -cm_contentmodel.property.cm_rights.title=\u6a29\u5229 -cm_contentmodel.property.cm_rights.description=\u6a29\u5229 -cm_contentmodel.property.cm_subject.title=\u4ef6\u540d -cm_contentmodel.property.cm_subject.description=\u4ef6\u540d - -cm_contentmodel.aspect.cm_basable.title=\u30d9\u30fc\u30b9\u5316\u53ef\u80fd -cm_contentmodel.aspect.cm_basable.description=\u30d9\u30fc\u30b9\u5316\u53ef\u80fd -cm_contentmodel.association.cm_basis.title=\u57fa\u90e8 -cm_contentmodel.association.cm_basis.description=\u57fa\u90e8 - -cm_contentmodel.aspect.cm_partable.title=\u30d1\u30fc\u30c4\u5316\u53ef\u80fd -cm_contentmodel.aspect.cm_partable.description=\u30d1\u30fc\u30c4\u5316\u53ef\u80fd -cm_contentmodel.association.cm_parts.title=\u30d1\u30fc\u30c4 -cm_contentmodel.association.cm_parts.description=\u30d1\u30fc\u30c4 - -cm_contentmodel.aspect.cm_referencing.title=\u53c2\u7167\u306e -cm_contentmodel.aspect.cm_referencing.description=\u53c2\u7167\u306e -cm_contentmodel.association.cm_references.title=\u53c2\u7167 -cm_contentmodel.association.cm_references.description=\u53c2\u7167 - -cm_contentmodel.aspect.cm_replacable.title=\u7f6e\u304d\u63db\u3048\u53ef\u80fd -cm_contentmodel.aspect.cm_replacable.description=\u7f6e\u304d\u63db\u3048\u53ef\u80fd -cm_contentmodel.association.cm_replaces.title=\u7f6e\u304d\u63db\u3048 -cm_contentmodel.association.cm_replaces.description=\u7f6e\u304d\u63db\u3048 - -cm_contentmodel.aspect.cm_effectivity.title=\u6709\u52b9\u671f\u9650\u8a2d\u5b9a\u5bfe\u8c61 -cm_contentmodel.aspect.cm_effectivity.description=\u6709\u52b9\u671f\u9650\u8a2d\u5b9a\u5bfe\u8c61 -cm_contentmodel.property.cm_from.title=\u6709\u52b9\u671f\u9650\u958b\u59cb\u65e5 -cm_contentmodel.property.cm_from.description=\u6709\u52b9\u671f\u9650\u958b\u59cb\u65e5 -cm_contentmodel.property.cm_to.title=\u6709\u52b9\u671f\u9650\u7d42\u4e86\u65e5 -cm_contentmodel.property.cm_to.description=\u6709\u52b9\u671f\u9650\u7d42\u4e86\u65e5 - -cm_contentmodel.aspect.cm_summarizable.title=\u8981\u7d04\u5bfe\u8c61 -cm_contentmodel.aspect.cm_summarizable.description=\u8981\u7d04\u5bfe\u8c61 -cm_contentmodel.property.cm_summary.title=\u8981\u7d04 -cm_contentmodel.property.cm_summary.description=\u8981\u7d04 - -cm_contentmodel.aspect.cm_countable.title=\u53ef\u7b97\u306e -cm_contentmodel.aspect.cm_countable.description=\u53ef\u7b97\u306e -cm_contentmodel.property.cm_hits.title=\u30d2\u30c3\u30c8 -cm_contentmodel.property.cm_hits.description=\u30d2\u30c3\u30c8 - -cm_contentmodel.aspect.cm_copiedFrom.title=\u30b3\u30d4\u30fc\u5143 -cm_contentmodel.aspect.cm_copiedFrom.description=\u30b3\u30d4\u30fc\u5143 -cm_contentmodel.property.cm_source.title=\u30bd\u30fc\u30b9 -cm_contentmodel.property.cm_source.description=\u30bd\u30fc\u30b9 - -cm_contentmodel.aspect.cm_workingcopy.title=\u4f5c\u696d\u7528\u30b3\u30d4\u30fc -cm_contentmodel.aspect.cm_workingcopy.description=\u4f5c\u696d\u7528\u30b3\u30d4\u30fc -cm_contentmodel.property.cm_workingCopyOwner.title=\u4f5c\u696d\u7528\u30b3\u30d4\u30fc\u6240\u6709\u8005 -cm_contentmodel.property.cm_workingCopyOwner.description=\u4f5c\u696d\u7528\u30b3\u30d4\u30fc\u6240\u6709\u8005 - -cm_contentmodel.aspect.cm_versionable.title=\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u5bfe\u8c61 -cm_contentmodel.aspect.cm_versionable.description=\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u5bfe\u8c61 -cm_contentmodel.property.cm_versionLabel.title=\u30d0\u30fc\u30b8\u30e7\u30f3\u30e9\u30d9\u30eb -cm_contentmodel.property.cm_versionLabel.description=\u30d0\u30fc\u30b8\u30e7\u30f3\u30e9\u30d9\u30eb -cm_contentmodel.property.cm_autoVersion.title=\u81ea\u52d5\u30d0\u30fc\u30b8\u30e7\u30f3 -cm_contentmodel.property.cm_autoVersion.description=\u81ea\u52d5\u30d0\u30fc\u30b8\u30e7\u30f3 -cm_contentmodel.property.cm_initialVersion.title=\u521d\u671f\u30d0\u30fc\u30b8\u30e7\u30f3 -cm_contentmodel.property.cm_initialVersion.description=\u521d\u671f\u30d0\u30fc\u30b8\u30e7\u30f3 - -cm_contentmodel.aspect.cm_lockable.title=\u30ed\u30c3\u30af\u53ef\u80fd -cm_contentmodel.aspect.cm_lockable.description=\u30ed\u30c3\u30af\u53ef\u80fd -cm_contentmodel.property.cm_lockOwner.title=\u30ed\u30c3\u30af\u6240\u6709\u8005 -cm_contentmodel.property.cm_lockOwner.description=\u30ed\u30c3\u30af\u6240\u6709\u8005 -cm_contentmodel.property.cm_lockType.title=\u30ed\u30c3\u30af\u30bf\u30a4\u30d7 -cm_contentmodel.property.cm_lockType.description=\u30ed\u30c3\u30af\u30bf\u30a4\u30d7 -cm_contentmodel.property.cm_expiryDate.title=\u6709\u52b9\u671f\u9650 -cm_contentmodel.property.cm_expiryDate.description=\u6709\u52b9\u671f\u9650 -cm_contentmodel.property.cm_lockIsDeep.title=\u6df1\u3044\u30ed\u30c3\u30af -cm_contentmodel.property.cm_lockIsDeep.description=\u6df1\u3044\u30ed\u30c3\u30af - -cm_contentmodel.aspect.cm_subscribable.title=\u8cfc\u8aad\u53ef\u80fd -cm_contentmodel.aspect.cm_subscribable.description=\u8cfc\u8aad\u53ef\u80fd -cm_contentmodel.association.cm_subscribedBy.title=\u8cfc\u8aad\u8005 -cm_contentmodel.association.cm_subscribedBy.description=\u8cfc\u8aad\u8005 - -cm_contentmodel.aspect.cm_classifiable.title=\u5206\u985e\u5bfe\u8c61 -cm_contentmodel.aspect.cm_classifiable.description=\u5206\u985e\u5bfe\u8c61 - -cm_contentmodel.aspect.cm_generalclassifiable.title=\u5206\u985e\u5bfe\u8c61 -cm_contentmodel.aspect.cm_generalclassifiable.description=\u5206\u985e\u5bfe\u8c61 -cm_contentmodel.property.cm_categories.title=\u30ab\u30c6\u30b4\u30ea -cm_contentmodel.property.cm_categories.description=\u30ab\u30c6\u30b4\u30ea - -cm_contentmodel.aspect.cm_taggable.title=\u30bf\u30b0\u4ed8\u3051\u5bfe\u8c61 -cm_contentmodel.aspect.cm_taggable.description=\u30bf\u30b0\u4ed8\u3051\u5bfe\u8c61 -cm_contentmodel.property.cm_taggable.title=\u30bf\u30b0 -cm_contentmodel.property.cm_taggable.description=\u30bf\u30b0 - -cm_contentmodel.aspect.cm_attachable.title=\u6dfb\u4ed8\u53ef\u80fd -cm_contentmodel.aspect.cm_attachable.description=\u4ed6\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u6dfb\u4ed8\u53ef\u80fd\u3067\u3059\u3002 -cm_contentmodel.association.cm_attachments.title=\u6dfb\u4ed8 -cm_contentmodel.association.cm_attachments.description=\u6dfb\u4ed8\u3055\u308c\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u30aa\u30d6\u30b8\u30a7\u30af\u30c8 - -cm_contentmodel.aspect.cm_emailed.title=E\u30e1\u30fc\u30eb\u9001\u4fe1\u5bfe\u8c61 -cm_contentmodel.aspect.cm_emailed.description=E\u30e1\u30fc\u30eb\u9001\u4fe1\u5bfe\u8c61 -cm_contentmodel.property.cm_originator.title=\u767a\u4fe1\u5143 -cm_contentmodel.property.cm_originator.description=\u767a\u4fe1\u5143 -cm_contentmodel.property.cm_addressee.title=\u53d7\u4fe1\u8005 -cm_contentmodel.property.cm_addressee.description=\u53d7\u4fe1\u8005 -cm_contentmodel.property.cm_addressees.title=\u53d7\u4fe1\u8005 -cm_contentmodel.property.cm_addressees.description=\u53d7\u4fe1\u8005 -cm_contentmodel.property.cm_subjectline.title=\u4ef6\u540d -cm_contentmodel.property.cm_subjectline.description=\u4ef6\u540d -cm_contentmodel.property.cm_sentdate.title=\u9001\u4fe1\u65e5 -cm_contentmodel.property.cm_sentdate.description=\u9001\u4fe1\u65e5 - -cm_contentmodel.aspect.cm_geographic.title=\u5730\u7406\u60c5\u5831\u4ed8\u304d -cm_contentmodel.aspect.cm_geographic.description=\u5730\u7406\u60c5\u5831\u4ed8\u304d -cm_contentmodel.property.cm_latitude.title=\u7def\u5ea6 -cm_contentmodel.property.cm_latitude.description=\u7def\u5ea6 -cm_contentmodel.property.cm_longitude.title=\u7d4c\u5ea6 -cm_contentmodel.property.cm_longitude.description=\u7d4c\u5ea6 - -cm_contentmodel.aspect.exif_exif.title=EXIF\u60c5\u5831\u4ed8\u304d -cm_contentmodel.aspect.exif_exif.description=\u6a19\u6e96EXIF\u5c5e\u6027\u306e\u4ef6\u540d -cm_contentmodel.property.exif_dateTimeOriginal.title=\u65e5\u6642 -cm_contentmodel.property.exif_dateTimeOriginal.description=\u5143\u306e\u753b\u50cf\u304c\u751f\u6210\u3055\u308c\u305f\u65e5\u6642 -cm_contentmodel.property.exif_pixelXDimension.title=\u753b\u50cf\u5e45 -cm_contentmodel.property.exif_pixelXDimension.description=\u753b\u50cf\u5e45\uff08\u30d4\u30af\u30bb\u30eb\uff09 -cm_contentmodel.property.exif_pixelYDimension.title=\u753b\u50cf\u9ad8 -cm_contentmodel.property.exif_pixelYDimension.description=\u753b\u50cf\u9ad8\uff08\u30d4\u30af\u30bb\u30eb\uff09 -cm_contentmodel.property.exif_exposureTime.title=\u9732\u5149\u6642\u9593 -cm_contentmodel.property.exif_exposureTime.description=\u9732\u5149\u6642\u9593\uff08\u79d2\uff09 -cm_contentmodel.property.exif_fNumber.title=F\u30ca\u30f3\u30d0\u30fc -cm_contentmodel.property.exif_fNumber.description=F\u30ca\u30f3\u30d0\u30fc -cm_contentmodel.property.exif_flash.title=\u6709\u52b9\u306b\u306a\u3063\u305f\u30d5\u30e9\u30c3\u30b7\u30e5 -cm_contentmodel.property.exif_flash.description=\u5199\u771f\u3092\u64ae\u5f71\u3059\u308b\u3068\u304d\u3001\u30d5\u30e9\u30c3\u30b7\u30e5\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b -cm_contentmodel.property.exif_focalLength.title=\u7126\u70b9\u8ddd\u96e2 -cm_contentmodel.property.exif_focalLength.description=\u30ec\u30f3\u30ba\u306e\u7126\u70b9\u8ddd\u96e2\uff08\u30df\u30ea\u30e1\u30fc\u30c8\u30eb\uff09 -cm_contentmodel.property.exif_isoSpeedRatings.title=ISO\u901f\u5ea6 -cm_contentmodel.property.exif_isoSpeedRatings.description=ISO\u901f\u5ea6 -cm_contentmodel.property.exif_manufacturer.title=\u30ab\u30e1\u30e9\u30e1\u30fc\u30ab\u30fc -cm_contentmodel.property.exif_manufacturer.description=\u5199\u771f\u3092\u64ae\u5f71\u3057\u305f\u30ab\u30e1\u30e9\u306e\u30e1\u30fc\u30ab\u30fc -cm_contentmodel.property.exif_model.title=\u30ab\u30e1\u30e9\u30e2\u30c7\u30eb -cm_contentmodel.property.exif_model.description=\u5199\u771f\u3092\u64ae\u5f71\u3057\u305f\u30ab\u30e1\u30e9\u306e\u30e2\u30c7\u30eb -cm_contentmodel.property.exif_software.title=\u30ab\u30e1\u30e9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 -cm_contentmodel.property.exif_software.description=\u5199\u771f\u3092\u64ae\u5f71\u3057\u305f\u30ab\u30e1\u30e9\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 -cm_contentmodel.property.exif_orientation.title=\u65b9\u5411 -cm_contentmodel.property.exif_orientation.description=\u5199\u771f\u306e\u65b9\u5411 -cm_contentmodel.property.exif_xResolution.title=\u6c34\u5e73\u89e3\u50cf\u5ea6 -cm_contentmodel.property.exif_xResolution.description=\u6c34\u5e73\u89e3\u50cf\u5ea6\uff08\u30d4\u30af\u30bb\u30eb/\u5358\u4f4d\uff09 -cm_contentmodel.property.exif_yResolution.title=\u5782\u76f4\u89e3\u50cf\u5ea6 -cm_contentmodel.property.exif_yResolution.description=\u5782\u76f4\u89e3\u50cf\u5ea6\uff08\u30d4\u30af\u30bb\u30eb/\u5358\u4f4d\uff09 -cm_contentmodel.property.exif_resolutionUnit.title=\u89e3\u50cf\u5ea6\u5358\u4f4d -cm_contentmodel.property.exif_resolutionUnit.description=\u6c34\u5e73\u304a\u3088\u3073\u5782\u76f4\u89e3\u50cf\u5ea6\u306b\u4f7f\u7528\u3055\u308c\u308b\u5358\u4f4d diff --git a/config/alfresco/messages/content-service_de_DE.properties b/config/alfresco/messages/content-service_de_DE.properties deleted file mode 100755 index 2e9a89fd19..0000000000 --- a/config/alfresco/messages/content-service_de_DE.properties +++ /dev/null @@ -1,26 +0,0 @@ -# Content-related messages - -content.content_missing=The node''s content is missing: \n node: {0} \n reader: {1} \n Please contact your system administrator. -content.runtime_exec.property_moved=The property ''errorCodes'' has moved down onto the RuntimeExec class - -index.recovery.out_of_date=The indexes are not synchronized with the database. -index.tracking.starting=Index recovery started. -index.tracking.complete=Index recovery completed. -index.tracking.progress=\tProcessing transactions around {0}. -index.recovery.starting=Index recovery started: {0} transactions. -index.recovery.complete=Index recovery completed. -index.recovery.progress=\t{0} % complete. -index.recovery.terminated=Index recovery terminated. - -node.archive.msg.busy=A bulk purge or restore operation is currently in progress - -content.http_reader.err.no_connection=Unable to connect to remote Alfresco server via HTTP: {0} -content.http_reader.err.no_authentication=The HTTP reader was unable to authenticate on the remote server: {0} \n -content.http_reader.err.check_cluster=Please ensure that 'replicateUpdates' and 'replicateUpdatesViaCopy' is enabled for the cache 'org.alfresco.cache.ticketsCache'. Check that the general cluster configuration is correct and working. -content.http_reader.err.unrecognized=An unrecognized error occurred when attempting to download content from remote server:\n Server: {0} \n Content: {1} \n HTTP Response: {2} - -metadata.extraction.err.type_conversion=Metadata extraction failed because an extracted value failed to convert to the required type: \n Extractor: {0} \n Target Property QName: {1} \n Required Type: {2} \n Extracted Value: {3} - -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 diff --git a/config/alfresco/messages/content-service_es_ES.properties b/config/alfresco/messages/content-service_es_ES.properties deleted file mode 100755 index 2e9a89fd19..0000000000 --- a/config/alfresco/messages/content-service_es_ES.properties +++ /dev/null @@ -1,26 +0,0 @@ -# Content-related messages - -content.content_missing=The node''s content is missing: \n node: {0} \n reader: {1} \n Please contact your system administrator. -content.runtime_exec.property_moved=The property ''errorCodes'' has moved down onto the RuntimeExec class - -index.recovery.out_of_date=The indexes are not synchronized with the database. -index.tracking.starting=Index recovery started. -index.tracking.complete=Index recovery completed. -index.tracking.progress=\tProcessing transactions around {0}. -index.recovery.starting=Index recovery started: {0} transactions. -index.recovery.complete=Index recovery completed. -index.recovery.progress=\t{0} % complete. -index.recovery.terminated=Index recovery terminated. - -node.archive.msg.busy=A bulk purge or restore operation is currently in progress - -content.http_reader.err.no_connection=Unable to connect to remote Alfresco server via HTTP: {0} -content.http_reader.err.no_authentication=The HTTP reader was unable to authenticate on the remote server: {0} \n -content.http_reader.err.check_cluster=Please ensure that 'replicateUpdates' and 'replicateUpdatesViaCopy' is enabled for the cache 'org.alfresco.cache.ticketsCache'. Check that the general cluster configuration is correct and working. -content.http_reader.err.unrecognized=An unrecognized error occurred when attempting to download content from remote server:\n Server: {0} \n Content: {1} \n HTTP Response: {2} - -metadata.extraction.err.type_conversion=Metadata extraction failed because an extracted value failed to convert to the required type: \n Extractor: {0} \n Target Property QName: {1} \n Required Type: {2} \n Extracted Value: {3} - -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 diff --git a/config/alfresco/messages/content-service_fr_FR.properties b/config/alfresco/messages/content-service_fr_FR.properties deleted file mode 100755 index 2e9a89fd19..0000000000 --- a/config/alfresco/messages/content-service_fr_FR.properties +++ /dev/null @@ -1,26 +0,0 @@ -# Content-related messages - -content.content_missing=The node''s content is missing: \n node: {0} \n reader: {1} \n Please contact your system administrator. -content.runtime_exec.property_moved=The property ''errorCodes'' has moved down onto the RuntimeExec class - -index.recovery.out_of_date=The indexes are not synchronized with the database. -index.tracking.starting=Index recovery started. -index.tracking.complete=Index recovery completed. -index.tracking.progress=\tProcessing transactions around {0}. -index.recovery.starting=Index recovery started: {0} transactions. -index.recovery.complete=Index recovery completed. -index.recovery.progress=\t{0} % complete. -index.recovery.terminated=Index recovery terminated. - -node.archive.msg.busy=A bulk purge or restore operation is currently in progress - -content.http_reader.err.no_connection=Unable to connect to remote Alfresco server via HTTP: {0} -content.http_reader.err.no_authentication=The HTTP reader was unable to authenticate on the remote server: {0} \n -content.http_reader.err.check_cluster=Please ensure that 'replicateUpdates' and 'replicateUpdatesViaCopy' is enabled for the cache 'org.alfresco.cache.ticketsCache'. Check that the general cluster configuration is correct and working. -content.http_reader.err.unrecognized=An unrecognized error occurred when attempting to download content from remote server:\n Server: {0} \n Content: {1} \n HTTP Response: {2} - -metadata.extraction.err.type_conversion=Metadata extraction failed because an extracted value failed to convert to the required type: \n Extractor: {0} \n Target Property QName: {1} \n Required Type: {2} \n Extracted Value: {3} - -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 diff --git a/config/alfresco/messages/content-service_it_IT.properties b/config/alfresco/messages/content-service_it_IT.properties deleted file mode 100755 index 2e9a89fd19..0000000000 --- a/config/alfresco/messages/content-service_it_IT.properties +++ /dev/null @@ -1,26 +0,0 @@ -# Content-related messages - -content.content_missing=The node''s content is missing: \n node: {0} \n reader: {1} \n Please contact your system administrator. -content.runtime_exec.property_moved=The property ''errorCodes'' has moved down onto the RuntimeExec class - -index.recovery.out_of_date=The indexes are not synchronized with the database. -index.tracking.starting=Index recovery started. -index.tracking.complete=Index recovery completed. -index.tracking.progress=\tProcessing transactions around {0}. -index.recovery.starting=Index recovery started: {0} transactions. -index.recovery.complete=Index recovery completed. -index.recovery.progress=\t{0} % complete. -index.recovery.terminated=Index recovery terminated. - -node.archive.msg.busy=A bulk purge or restore operation is currently in progress - -content.http_reader.err.no_connection=Unable to connect to remote Alfresco server via HTTP: {0} -content.http_reader.err.no_authentication=The HTTP reader was unable to authenticate on the remote server: {0} \n -content.http_reader.err.check_cluster=Please ensure that 'replicateUpdates' and 'replicateUpdatesViaCopy' is enabled for the cache 'org.alfresco.cache.ticketsCache'. Check that the general cluster configuration is correct and working. -content.http_reader.err.unrecognized=An unrecognized error occurred when attempting to download content from remote server:\n Server: {0} \n Content: {1} \n HTTP Response: {2} - -metadata.extraction.err.type_conversion=Metadata extraction failed because an extracted value failed to convert to the required type: \n Extractor: {0} \n Target Property QName: {1} \n Required Type: {2} \n Extracted Value: {3} - -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 diff --git a/config/alfresco/messages/content-service_ja.properties b/config/alfresco/messages/content-service_ja.properties deleted file mode 100755 index 2e9a89fd19..0000000000 --- a/config/alfresco/messages/content-service_ja.properties +++ /dev/null @@ -1,26 +0,0 @@ -# Content-related messages - -content.content_missing=The node''s content is missing: \n node: {0} \n reader: {1} \n Please contact your system administrator. -content.runtime_exec.property_moved=The property ''errorCodes'' has moved down onto the RuntimeExec class - -index.recovery.out_of_date=The indexes are not synchronized with the database. -index.tracking.starting=Index recovery started. -index.tracking.complete=Index recovery completed. -index.tracking.progress=\tProcessing transactions around {0}. -index.recovery.starting=Index recovery started: {0} transactions. -index.recovery.complete=Index recovery completed. -index.recovery.progress=\t{0} % complete. -index.recovery.terminated=Index recovery terminated. - -node.archive.msg.busy=A bulk purge or restore operation is currently in progress - -content.http_reader.err.no_connection=Unable to connect to remote Alfresco server via HTTP: {0} -content.http_reader.err.no_authentication=The HTTP reader was unable to authenticate on the remote server: {0} \n -content.http_reader.err.check_cluster=Please ensure that 'replicateUpdates' and 'replicateUpdatesViaCopy' is enabled for the cache 'org.alfresco.cache.ticketsCache'. Check that the general cluster configuration is correct and working. -content.http_reader.err.unrecognized=An unrecognized error occurred when attempting to download content from remote server:\n Server: {0} \n Content: {1} \n HTTP Response: {2} - -metadata.extraction.err.type_conversion=Metadata extraction failed because an extracted value failed to convert to the required type: \n Extractor: {0} \n Target Property QName: {1} \n Required Type: {2} \n Extracted Value: {3} - -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 diff --git a/config/alfresco/messages/copy-service_de_DE.properties b/config/alfresco/messages/copy-service_de_DE.properties deleted file mode 100755 index 818c8b314f..0000000000 --- a/config/alfresco/messages/copy-service_de_DE.properties +++ /dev/null @@ -1,3 +0,0 @@ -# copy service externalised display strings - -copy_service.copy_of_label=Kopie von {0} diff --git a/config/alfresco/messages/copy-service_es_ES.properties b/config/alfresco/messages/copy-service_es_ES.properties deleted file mode 100755 index e0c086f9f3..0000000000 --- a/config/alfresco/messages/copy-service_es_ES.properties +++ /dev/null @@ -1,3 +0,0 @@ -# copy service externalised display strings - -copy_service.copy_of_label=Copia de {0} diff --git a/config/alfresco/messages/copy-service_fr_FR.properties b/config/alfresco/messages/copy-service_fr_FR.properties deleted file mode 100755 index 4d0ac4f0b8..0000000000 --- a/config/alfresco/messages/copy-service_fr_FR.properties +++ /dev/null @@ -1,3 +0,0 @@ -# copy service externalised display strings - -copy_service.copy_of_label=Copie de {0} diff --git a/config/alfresco/messages/copy-service_it_IT.properties b/config/alfresco/messages/copy-service_it_IT.properties deleted file mode 100755 index e6c8d6f00b..0000000000 --- a/config/alfresco/messages/copy-service_it_IT.properties +++ /dev/null @@ -1,3 +0,0 @@ -# copy service externalised display strings - -copy_service.copy_of_label=Copia di {0} diff --git a/config/alfresco/messages/copy-service_ja.properties b/config/alfresco/messages/copy-service_ja.properties deleted file mode 100755 index 79d8c873fa..0000000000 --- a/config/alfresco/messages/copy-service_ja.properties +++ /dev/null @@ -1,3 +0,0 @@ -# copy service externalised display strings - -copy_service.copy_of_label={0} \u306e\u30b3\u30d4\u30fc diff --git a/config/alfresco/messages/data-list-model_de_DE.properties b/config/alfresco/messages/data-list-model_de_DE.properties deleted file mode 100755 index fcb3ef8eec..0000000000 --- a/config/alfresco/messages/data-list-model_de_DE.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Display labels for Share Data Lists Model -dl_datalistmodel.description=Alfresco Share Modell Datenlisten - -dl_datalistmodel.type.dl_dataList.title=Ordnertyp der Datenliste -dl_datalistmodel.type.dl_dataList.description=H\u00e4lt Datenlisten-Elemente des angegebenen Typs in der Eigenschaft dl: dataListItemType. -dl_datalistmodel.property.dl_dataListItemType.title=Data List Item Type -dl_datalistmodel.property.dl_dataListItemType.description=Legt fest, welcher Subtyp von dl: dataListItem verwendet wird, wenn neue Elemente in der Datenliste erstellt werden. - -dl_datalistmodel.type.dl_dataListItem.title=Elterntyp der Datenliste -dl_datalistmodel.type.dl_dataListItem.description=Elterntyp, von dem Mustertypen von Elementen der Datenliste abgeleitet werden - -## Simple "To do" List -dl_datalistmodel.type.dl_todoList.title=Liste zu erledigender Aufgaben -dl_datalistmodel.type.dl_todoList.description=Einfache Liste zu erledigender Aufgaben mit optionalem Bevollm\u00e4chtigten -dl_datalistmodel.property.dl_todoTitle.title=Titel -dl_datalistmodel.property.dl_todoDueDate.title=F\u00e4lligkeitsdatum -dl_datalistmodel.property.dl_todoPriority.title=Priorit\u00e4t -dl_datalistmodel.property.dl_todoStatus.title=Status -dl_datalistmodel.property.dl_todoNotes.title=Notizen -dl_datalistmodel.association.dl_assignee.title=Bevollm\u00e4chtigter - -# Gantt Aspect -dl_datalistmodel.property.dl_ganttStartDate.title=Anfangsdatum -dl_datalistmodel.property.dl_ganttEndDate.title=Ende Datum -dl_datalistmodel.property.dl_ganttPercentComplete.title=% Abgeschlossen - -# Task List (Advanced) -dl_datalistmodel.type.dl_task.title=Aufgabenliste (Erweitert) -dl_datalistmodel.type.dl_task.description=Erweiterte Aufgabenliste einschlie\u00dflich Titel, Beschreibung, Anfangs- und Enddatum, Priorit\u00e4t, Status, Bemerkungen, Bevollm\u00e4chtigte und Anlagen. -dl_datalistmodel.property.dl_taskPriority.title=Priorit\u00e4t -dl_datalistmodel.property.dl_taskStatus.title=Status -dl_datalistmodel.property.dl_taskComments.title=Kommentare -dl_datalistmodel.property.dl_taskAssignee.title=Bevollm\u00e4chtigter - -# Task List (Simple) -dl_datalistmodel.type.dl_simpletask.title=Aufgabenliste (Einfach) -dl_datalistmodel.type.dl_simpletask.description=Einfache Aufgabenliste einschlie\u00dflich Titel, Beschreibung, F\u00e4lligkeitsdatum, Priorit\u00e4t, Status, Kommentaren -dl_datalistmodel.property.dl_simpletaskDueDate.title=F\u00e4lligkeitsdatum -dl_datalistmodel.property.dl_simpletaskPriority.title=Priorit\u00e4t -dl_datalistmodel.property.dl_simpletaskStatus.title=Status -dl_datalistmodel.property.dl_simpletaskComments.title=Kommentare - -# Contact -dl_datalistmodel.type.dl_contact.title=Liste der Kontakte -dl_datalistmodel.type.dl_contact.description=Liste der Kontakte einschlie\u00dflich Vornamen, Nachnamen, vollst\u00e4ndigem Namen, E-Mail, Jobtitel, Telefon (B\u00fcro), Telefon (Mobil). -dl_datalistmodel.property.dl_contactFirstName.title=Vorname -dl_datalistmodel.property.dl_contactLastName.title=Nachname -dl_datalistmodel.property.dl_contactEmail.title=E-Mail -dl_datalistmodel.property.dl_contactCompany.title=Firma -dl_datalistmodel.property.dl_contactJobTitle.title=Jobtitel -dl_datalistmodel.property.dl_contactPhoneOffice.title=Telefon (B\u00fcro) -dl_datalistmodel.property.dl_contactPhoneMobile.title=Telefon (Mobil) -dl_datalistmodel.property.dl_contactNotes.title=Notizen - -# Issues -dl_datalistmodel.type.dl_issue.title=Themenliste -dl_datalistmodel.type.dl_issue.description=Themenliste, die ID, Status, Priorit\u00e4t, Beschreibung, F\u00e4lligkeitsdatum, zugewiesen zu und verwandte Themen enth\u00e4lt. -dl_datalistmodel.property.dl_issueID.title=Themen ID -dl_datalistmodel.property.dl_issueStatus.title=Status -dl_datalistmodel.property.dl_issuePriority.title=Priorit\u00e4t -dl_datalistmodel.property.dl_issueDescription.title=Beschreibung -dl_datalistmodel.property.dl_issueDueDate.title=F\u00e4lligkeitsdatum -dl_datalistmodel.property.dl_issueComments.title=Kommentare -dl_datalistmodel.property.dl_issueAssignedTo.title=Zugewiesen an -dl_datalistmodel.property.dl_issueRelatedIssues.title=\u00c4hnliche Elemente - -# Event -dl_datalistmodel.type.dl_event.title=Ereignisliste -dl_datalistmodel.type.dl_event.description=Ereignisliste einschlie\u00dflich Titel, Beschreibung, Speicherstelle, Anfangs- und Enddatum/-zeit -dl_datalistmodel.property.dl_eventLocation.title=Speicherstelle -dl_datalistmodel.property.dl_eventStartDate.title=Anfangsdatum -dl_datalistmodel.property.dl_eventEndDate.title=Enddatum -dl_datalistmodel.property.dl_eventRegistrations.title=Registrierungen -dl_datalistmodel.property.dl_eventNote.title=Notizen - -# Location -dl_datalistmodel.type.dl_location.title=Liste Speicherstelle -dl_datalistmodel.type.dl_location.description=Liste Speicherstellen/Adressen -dl_datalistmodel.property.dl_locationAddress1.title=Adresse Zeile 1 -dl_datalistmodel.property.dl_locationAddress2.title=Adresse Zeile 2 -dl_datalistmodel.property.dl_locationAddress3.title=Adresse Zeile 3 -dl_datalistmodel.property.dl_locationZip.title=Postleitzahl -dl_datalistmodel.property.dl_locationState.title=Bundesland -dl_datalistmodel.property.dl_locationCountry.title=Land -dl_datalistmodel.property.dl_locationNote.title=Notizen - -# Meeting Agenda -dl_datalistmodel.type.dl_meetingAgenda.title=Sitzungskalender -dl_datalistmodel.type.dl_meetingAgenda.description=Verwaltung von Elementen des Sitzungskalenders einschlie\u00dflich Beschreibung, Eigent\u00fcmer, zugewiesene Zeit -dl_datalistmodel.property.dl_meetingAgendaRef.title=Referenz -dl_datalistmodel.property.dl_meetingAgendaTime.title=Zeit (Minuten) -dl_datalistmodel.property.dl_meetingAgendaOwner.title=Eigent\u00fcmer - -# Event Agenda -dl_datalistmodel.type.dl_eventAgenda.title=Ereigniskalender -dl_datalistmodel.type.dl_eventAgenda.description=Ereigniskalender einschlie\u00dflich Namen der Sitzungen, Pr\u00e4sentatoren, Anfangs- und Endzeit verwalten. -dl_datalistmodel.property.dl_eventAgendaRef.title=Referenz -dl_datalistmodel.property.dl_eventAgendaStartTime.title=Anfangszeit -dl_datalistmodel.property.dl_eventAgendaEndTime.title=Endzeit -dl_datalistmodel.property.dl_eventAgendaSessionName.title=Name der Sitzung -dl_datalistmodel.property.dl_eventAgendaPresenter.title=Pr\u00e4sentator -dl_datalistmodel.property.dl_eventAgendaAudience.title=Publikum -dl_datalistmodel.property.dl_eventAgendaNotes.title=Notizen diff --git a/config/alfresco/messages/data-list-model_es_ES.properties b/config/alfresco/messages/data-list-model_es_ES.properties deleted file mode 100755 index 9e92d13611..0000000000 --- a/config/alfresco/messages/data-list-model_es_ES.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Display labels for Share Data Lists Model -dl_datalistmodel.description=Modelo de Lista de datos de Alfresco Share - -dl_datalistmodel.type.dl_dataList.title=Tipo de carpeta de Lista de datos -dl_datalistmodel.type.dl_dataList.description=Contiene elementos de Lista de datos del tipo especificado en la propiedad dl:dataListItemType. -dl_datalistmodel.property.dl_dataListItemType.title=Tipo de elemento de Lista de datos -dl_datalistmodel.property.dl_dataListItemType.description=Determina qu\u00e9 subtipo de dl:DataListItem se utilizar\u00e1 al crear nuevos elementos en la Lista de datos. - -dl_datalistmodel.type.dl_dataListItem.title=Tipo de padre de Lista de datos -dl_datalistmodel.type.dl_dataListItem.description=Tipo de padre del que se derivan los tipos de elementos de muestra de Listas de datos. - -## Simple "To do" List -dl_datalistmodel.type.dl_todoList.title=Lista de tareas pendientes -dl_datalistmodel.type.dl_todoList.description=Una lista sencilla de tareas pendientes con usuario opcional a asignar la tarea. -dl_datalistmodel.property.dl_todoTitle.title=T\u00edtulo -dl_datalistmodel.property.dl_todoDueDate.title=Fecha de vencimiento -dl_datalistmodel.property.dl_todoPriority.title=Prioridad -dl_datalistmodel.property.dl_todoStatus.title=Estado -dl_datalistmodel.property.dl_todoNotes.title=Notas -dl_datalistmodel.association.dl_assignee.title=Usuario a asignar la tarea - -# Gantt Aspect -dl_datalistmodel.property.dl_ganttStartDate.title=Fecha de inicio -dl_datalistmodel.property.dl_ganttEndDate.title=Fecha de fin -dl_datalistmodel.property.dl_ganttPercentComplete.title=% Completado - -# Task List (Advanced) -dl_datalistmodel.type.dl_task.title=Lista de tareas (Avanzada) -dl_datalistmodel.type.dl_task.description=Lista de tareas avanzada, incluyendo t\u00edtulo, descripci\u00f3n, fechas de inicio y finalizaci\u00f3n, prioridad, estado, comentarios, usuarios a asignar la tarea y adjuntos. -dl_datalistmodel.property.dl_taskPriority.title=Prioridad -dl_datalistmodel.property.dl_taskStatus.title=Estado -dl_datalistmodel.property.dl_taskComments.title=Comentarios -dl_datalistmodel.property.dl_taskAssignee.title=Usuario a asignar la tarea - -# Task List (Simple) -dl_datalistmodel.type.dl_simpletask.title=Lista de tareas (sencillas) -dl_datalistmodel.type.dl_simpletask.description=Lista de tareas sencilla, incluyendo t\u00edtulo, descripci\u00f3n, fecha de vencimiento, prioridad, estado, comentarios. -dl_datalistmodel.property.dl_simpletaskDueDate.title=Fecha de vencimiento -dl_datalistmodel.property.dl_simpletaskPriority.title=Prioridad -dl_datalistmodel.property.dl_simpletaskStatus.title=Estado -dl_datalistmodel.property.dl_simpletaskComments.title=Comentarios - -# Contact -dl_datalistmodel.type.dl_contact.title=Lista de contactos -dl_datalistmodel.type.dl_contact.description=Lista de contactos incluyendo nombre, apellido, nombre completo, email, t\u00edtulo del trabajo, tel\u00e9fono (oficina), tel\u00e9fono (m\u00f3vil). -dl_datalistmodel.property.dl_contactFirstName.title=Nombre -dl_datalistmodel.property.dl_contactLastName.title=Apellidos -dl_datalistmodel.property.dl_contactEmail.title=Email -dl_datalistmodel.property.dl_contactCompany.title=Empresa -dl_datalistmodel.property.dl_contactJobTitle.title=Cargo -dl_datalistmodel.property.dl_contactPhoneOffice.title=Tel\u00e9fono (Oficina) -dl_datalistmodel.property.dl_contactPhoneMobile.title=Tel\u00e9fono (M\u00f3vil) -dl_datalistmodel.property.dl_contactNotes.title=Notas - -# Issues -dl_datalistmodel.type.dl_issue.title=Lista de temas -dl_datalistmodel.type.dl_issue.description=Lista de temas incluyendo ID, estado, prioridad, descripci\u00f3n, fechas de vencimiento, comentarios, asignar a, temas relacionados. -dl_datalistmodel.property.dl_issueID.title=ID de tema -dl_datalistmodel.property.dl_issueStatus.title=Estado -dl_datalistmodel.property.dl_issuePriority.title=Prioridad -dl_datalistmodel.property.dl_issueDescription.title=Descripci\u00f3n -dl_datalistmodel.property.dl_issueDueDate.title=Fecha de vencimiento -dl_datalistmodel.property.dl_issueComments.title=Comentarios -dl_datalistmodel.property.dl_issueAssignedTo.title=Asignado a -dl_datalistmodel.property.dl_issueRelatedIssues.title=Temas relacionados - -# Event -dl_datalistmodel.type.dl_event.title=Lista de eventos -dl_datalistmodel.type.dl_event.description=Lista de eventos, incluyendo t\u00edtulo, descripci\u00f3n, ubicaci\u00f3n, fecha/hora de inicio y fin. -dl_datalistmodel.property.dl_eventLocation.title=Ubicaci\u00f3n -dl_datalistmodel.property.dl_eventStartDate.title=Fecha de inicio -dl_datalistmodel.property.dl_eventEndDate.title=Fecha de fin -dl_datalistmodel.property.dl_eventRegistrations.title=Inscripciones -dl_datalistmodel.property.dl_eventNote.title=Notas - -# Location -dl_datalistmodel.type.dl_location.title=Lista de ubicaciones -dl_datalistmodel.type.dl_location.description=Lista de ubicaciones/direcciones -dl_datalistmodel.property.dl_locationAddress1.title=Direcci\u00f3n l\u00ednea 1 -dl_datalistmodel.property.dl_locationAddress2.title=Direcci\u00f3n l\u00ednea 2 -dl_datalistmodel.property.dl_locationAddress3.title=Direcci\u00f3n l\u00ednea 3 -dl_datalistmodel.property.dl_locationZip.title=Zip/C\u00f3digo postal -dl_datalistmodel.property.dl_locationState.title=Estado/Condado -dl_datalistmodel.property.dl_locationCountry.title=Pa\u00eds -dl_datalistmodel.property.dl_locationNote.title=Notas - -# Meeting Agenda -dl_datalistmodel.type.dl_meetingAgenda.title=Agenda de reuni\u00f3n -dl_datalistmodel.type.dl_meetingAgenda.description=Administrar elementos de agenda de reuni\u00f3n, incluyendo descripci\u00f3n, propietario, el tiempo asignado. -dl_datalistmodel.property.dl_meetingAgendaRef.title=Referencia -dl_datalistmodel.property.dl_meetingAgendaTime.title=Tiempo (min) -dl_datalistmodel.property.dl_meetingAgendaOwner.title=Propietario - -# Event Agenda -dl_datalistmodel.type.dl_eventAgenda.title=Agenda de eventos -dl_datalistmodel.type.dl_eventAgenda.description=Administrar agenda de eventos incluyendo nombres de sesi\u00f3n, participantes, horas de inicio y fin. -dl_datalistmodel.property.dl_eventAgendaRef.title=Referencia -dl_datalistmodel.property.dl_eventAgendaStartTime.title=Hora de inicio -dl_datalistmodel.property.dl_eventAgendaEndTime.title=Hora de fin -dl_datalistmodel.property.dl_eventAgendaSessionName.title=Nombre de sesi\u00f3n -dl_datalistmodel.property.dl_eventAgendaPresenter.title=Participante -dl_datalistmodel.property.dl_eventAgendaAudience.title=Audiencia -dl_datalistmodel.property.dl_eventAgendaNotes.title=Notas diff --git a/config/alfresco/messages/data-list-model_fr_FR.properties b/config/alfresco/messages/data-list-model_fr_FR.properties deleted file mode 100755 index 812a453f8f..0000000000 --- a/config/alfresco/messages/data-list-model_fr_FR.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Display labels for Share Data Lists Model -dl_datalistmodel.description=Mod\u00e8le de liste de donn\u00e9es Alfresco Share - -dl_datalistmodel.type.dl_dataList.title=Type de dossier de liste de donn\u00e9es -dl_datalistmodel.type.dl_dataList.description=Stocke les \u00e9l\u00e9ments de liste de donn\u00e9es du type sp\u00e9cifi\u00e9 dans la propri\u00e9t\u00e9 dl:dataListItemType. -dl_datalistmodel.property.dl_dataListItemType.title=Type d'\u00e9l\u00e9ment de liste de donn\u00e9es -dl_datalistmodel.property.dl_dataListItemType.description=D\u00e9termine quel sous-type de dl:dataListItem sera utilis\u00e9 quand un nouvel \u00e9l\u00e9ment de la liste de donn\u00e9es sera cr\u00e9\u00e9. - -dl_datalistmodel.type.dl_dataListItem.title=Type parent de liste de donn\u00e9es -dl_datalistmodel.type.dl_dataListItem.description=Type parent \u00e0 partir duquel d\u00e9rivent les types d'\u00e9l\u00e9ment de liste de donn\u00e9es. - -## Simple "To do" List -dl_datalistmodel.type.dl_todoList.title=Liste de t\u00e2ches -dl_datalistmodel.type.dl_todoList.description=Une liste de t\u00e2ches avec acteur facultatif. -dl_datalistmodel.property.dl_todoTitle.title=Titre -dl_datalistmodel.property.dl_todoDueDate.title=Ech\u00e9ance -dl_datalistmodel.property.dl_todoPriority.title=Priorit\u00e9 -dl_datalistmodel.property.dl_todoStatus.title=Etat -dl_datalistmodel.property.dl_todoNotes.title=Notes -dl_datalistmodel.association.dl_assignee.title=Personne assign\u00e9e - -# Gantt Aspect -dl_datalistmodel.property.dl_ganttStartDate.title=Date de D\u00e9but -dl_datalistmodel.property.dl_ganttEndDate.title=Date de fin -dl_datalistmodel.property.dl_ganttPercentComplete.title=% achev\u00e9 - -# Task List (Advanced) -dl_datalistmodel.type.dl_task.title=Liste de t\u00e2ches (avanc\u00e9es) -dl_datalistmodel.type.dl_task.description=Liste de t\u00e2ches avanc\u00e9es comprenant le titre, la description, les dates de d\u00e9but et de fin, la priorit\u00e9, le statut, les commentaires, les acteurs et les pi\u00e8ces jointes. -dl_datalistmodel.property.dl_taskPriority.title=Priorit\u00e9 -dl_datalistmodel.property.dl_taskStatus.title=Etat -dl_datalistmodel.property.dl_taskComments.title=Commentaires -dl_datalistmodel.property.dl_taskAssignee.title=Personne assign\u00e9e - -# Task List (Simple) -dl_datalistmodel.type.dl_simpletask.title=Liste de t\u00e2ches (simples) -dl_datalistmodel.type.dl_simpletask.description=Liste de t\u00e2ches simples comprenant le titre, la description, la date d'\u00e9ch\u00e9ance, la priorit\u00e9, le statut et les commentaires. -dl_datalistmodel.property.dl_simpletaskDueDate.title=Ech\u00e9ance -dl_datalistmodel.property.dl_simpletaskPriority.title=Priorit\u00e9 -dl_datalistmodel.property.dl_simpletaskStatus.title=Etat -dl_datalistmodel.property.dl_simpletaskComments.title=Commentaires - -# Contact -dl_datalistmodel.type.dl_contact.title=Liste de contacts -dl_datalistmodel.type.dl_contact.description=Liste de contacts comprenant le pr\u00e9nom, le nom, le nom complet, l'e-mail, l'intitul\u00e9 du poste, le num\u00e9ro de t\u00e9l\u00e9phone (bureau) et le num\u00e9ro de t\u00e9l\u00e9phone (portable). -dl_datalistmodel.property.dl_contactFirstName.title=Pr\u00e9nom -dl_datalistmodel.property.dl_contactLastName.title=Nom -dl_datalistmodel.property.dl_contactEmail.title=Courriel -dl_datalistmodel.property.dl_contactCompany.title=Soci\u00e9t\u00e9 -dl_datalistmodel.property.dl_contactJobTitle.title=Intitul\u00e9 du poste -dl_datalistmodel.property.dl_contactPhoneOffice.title=T\u00e9l\u00e9phone (bureau) -dl_datalistmodel.property.dl_contactPhoneMobile.title=T\u00e9l\u00e9phone (portable) -dl_datalistmodel.property.dl_contactNotes.title=Notes - -# Issues -dl_datalistmodel.type.dl_issue.title=Liste de publications -dl_datalistmodel.type.dl_issue.description=Liste de publications comprenant l'identifiant, le statut, la priorit\u00e9, la description, la date d'\u00e9ch\u00e9ance, les commentaires, l'assignation et les publications apparent\u00e9es. -dl_datalistmodel.property.dl_issueID.title=Identifiant de publication -dl_datalistmodel.property.dl_issueStatus.title=Etat -dl_datalistmodel.property.dl_issuePriority.title=Priorit\u00e9 -dl_datalistmodel.property.dl_issueDescription.title=Description -dl_datalistmodel.property.dl_issueDueDate.title=Ech\u00e9ance -dl_datalistmodel.property.dl_issueComments.title=Commentaires -dl_datalistmodel.property.dl_issueAssignedTo.title=Assign\u00e9 \u00e0 -dl_datalistmodel.property.dl_issueRelatedIssues.title=Publications apparent\u00e9es - -# Event -dl_datalistmodel.type.dl_event.title=Liste d'\u00e9v\u00e9nements -dl_datalistmodel.type.dl_event.description=Liste d'\u00e9v\u00e9nements comprenant le titre, la description, le lieu et les dates/heures de d\u00e9but et de fin. -dl_datalistmodel.property.dl_eventLocation.title=Emplacement -dl_datalistmodel.property.dl_eventStartDate.title=Date de D\u00e9but -dl_datalistmodel.property.dl_eventEndDate.title=Date de fin -dl_datalistmodel.property.dl_eventRegistrations.title=Inscriptions -dl_datalistmodel.property.dl_eventNote.title=Notes - -# Location -dl_datalistmodel.type.dl_location.title=Carnet d'adresses -dl_datalistmodel.type.dl_location.description=Carnet d'adresses -dl_datalistmodel.property.dl_locationAddress1.title=Adresse (ligne\u00a01) -dl_datalistmodel.property.dl_locationAddress2.title=Adresse (ligne\u00a02) -dl_datalistmodel.property.dl_locationAddress3.title=Adresse (ligne\u00a03) -dl_datalistmodel.property.dl_locationZip.title=Code postal -dl_datalistmodel.property.dl_locationState.title=D\u00e9partement -dl_datalistmodel.property.dl_locationCountry.title=Pays -dl_datalistmodel.property.dl_locationNote.title=Notes - -# Meeting Agenda -dl_datalistmodel.type.dl_meetingAgenda.title=Ordre du jour -dl_datalistmodel.type.dl_meetingAgenda.description=G\u00e9rer un ordre du jour comprenant la description, le propri\u00e9taire et le temps imparti. -dl_datalistmodel.property.dl_meetingAgendaRef.title=R\u00e9f\u00e9rence -dl_datalistmodel.property.dl_meetingAgendaTime.title=Temps (min) -dl_datalistmodel.property.dl_meetingAgendaOwner.title=Propri\u00e9taire - -# Event Agenda -dl_datalistmodel.type.dl_eventAgenda.title=Agenda d'\u00e9v\u00e9nement -dl_datalistmodel.type.dl_eventAgenda.description=G\u00e9rer un agenda d'\u00e9v\u00e9nement comprenant les noms de s\u00e9ances, les intervenants et les heures de d\u00e9but et de fin de s\u00e9ance. -dl_datalistmodel.property.dl_eventAgendaRef.title=R\u00e9f\u00e9rence -dl_datalistmodel.property.dl_eventAgendaStartTime.title=Heure de d\u00e9but -dl_datalistmodel.property.dl_eventAgendaEndTime.title=Heure de fin -dl_datalistmodel.property.dl_eventAgendaSessionName.title=Nom de la s\u00e9ance -dl_datalistmodel.property.dl_eventAgendaPresenter.title=Intervenant -dl_datalistmodel.property.dl_eventAgendaAudience.title=Auditoire -dl_datalistmodel.property.dl_eventAgendaNotes.title=Notes diff --git a/config/alfresco/messages/data-list-model_it_IT.properties b/config/alfresco/messages/data-list-model_it_IT.properties deleted file mode 100755 index 16f6e5598e..0000000000 --- a/config/alfresco/messages/data-list-model_it_IT.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Display labels for Share Data Lists Model -dl_datalistmodel.description=Modello di elenco dati Alfresco Share - -dl_datalistmodel.type.dl_dataList.title=Tipo di cartella dell'elenco dati -dl_datalistmodel.type.dl_dataList.description=Contiene elementi dell'elenco dati del tipo specificato nella propriet\u00e0 dl:dataListItemType. -dl_datalistmodel.property.dl_dataListItemType.title=Tipo di elemento dell'elenco dati -dl_datalistmodel.property.dl_dataListItemType.description=Determina il sottotipo di dl:dataListItem che verr\u00e0 utilizzato durante la creazione di nuovi elementi nell'elenco dati. - -dl_datalistmodel.type.dl_dataListItem.title=Tipo di genitore dell'elenco dati -dl_datalistmodel.type.dl_dataListItem.description=Tipo di genitore da cui derivano i tipi di elementi dell'elenco dati di esempio. - -## Simple "To do" List -dl_datalistmodel.type.dl_todoList.title=Elenco Da fare -dl_datalistmodel.type.dl_todoList.description=Semplice elenco di compiti da eseguire con assegnatario opzionale. -dl_datalistmodel.property.dl_todoTitle.title=Titolo -dl_datalistmodel.property.dl_todoDueDate.title=Data di scadenza -dl_datalistmodel.property.dl_todoPriority.title=Priorit\u00e0 -dl_datalistmodel.property.dl_todoStatus.title=Stato -dl_datalistmodel.property.dl_todoNotes.title=Note -dl_datalistmodel.association.dl_assignee.title=Assegnatario - -# Gantt Aspect -dl_datalistmodel.property.dl_ganttStartDate.title=Data di inizio -dl_datalistmodel.property.dl_ganttEndDate.title=Data di fine -dl_datalistmodel.property.dl_ganttPercentComplete.title=Percentuale di completamento - -# Task List (Advanced) -dl_datalistmodel.type.dl_task.title=Elenco di compiti (avanzato) -dl_datalistmodel.type.dl_task.description=Elenco di compiti avanzato contenente il titolo, la descrizione, le date di inizio e di fine, la priorit\u00e0, lo stato, i commenti, gli assegnatari e gli allegati. -dl_datalistmodel.property.dl_taskPriority.title=Priorit\u00e0 -dl_datalistmodel.property.dl_taskStatus.title=Stato -dl_datalistmodel.property.dl_taskComments.title=Commenti -dl_datalistmodel.property.dl_taskAssignee.title=Assegnatario - -# Task List (Simple) -dl_datalistmodel.type.dl_simpletask.title=Elenco di compiti (semplice) -dl_datalistmodel.type.dl_simpletask.description=Elenco di compiti semplice contenente il titolo, la descrizione, la data di scadenza, la priorit\u00e0, lo stato e i commenti. -dl_datalistmodel.property.dl_simpletaskDueDate.title=Data di scadenza -dl_datalistmodel.property.dl_simpletaskPriority.title=Priorit\u00e0 -dl_datalistmodel.property.dl_simpletaskStatus.title=Stato -dl_datalistmodel.property.dl_simpletaskComments.title=Commenti - -# Contact -dl_datalistmodel.type.dl_contact.title=Elenco di contatti -dl_datalistmodel.type.dl_contact.description=Elenco di contatti contenente il nome, il cognome, il nome completo, l'indirizzo e-mail, la qualifica, il telefono dell'ufficio e il cellulare. -dl_datalistmodel.property.dl_contactFirstName.title=Nome -dl_datalistmodel.property.dl_contactLastName.title=Cognome -dl_datalistmodel.property.dl_contactEmail.title=E-mail -dl_datalistmodel.property.dl_contactCompany.title=Azienda -dl_datalistmodel.property.dl_contactJobTitle.title=Qualifica -dl_datalistmodel.property.dl_contactPhoneOffice.title=Telefono (ufficio) -dl_datalistmodel.property.dl_contactPhoneMobile.title=Cellulare -dl_datalistmodel.property.dl_contactNotes.title=Note - -# Issues -dl_datalistmodel.type.dl_issue.title=Elenco di problemi -dl_datalistmodel.type.dl_issue.description=Elenco di problemi contenente l'ID, lo stato, la priorit\u00e0, la descrizione, la data di scadenza, i commenti, l'assegnatario e i problemi correlati. -dl_datalistmodel.property.dl_issueID.title=ID problema -dl_datalistmodel.property.dl_issueStatus.title=Stato -dl_datalistmodel.property.dl_issuePriority.title=Priorit\u00e0 -dl_datalistmodel.property.dl_issueDescription.title=Descrizione -dl_datalistmodel.property.dl_issueDueDate.title=Data di scadenza -dl_datalistmodel.property.dl_issueComments.title=Commenti -dl_datalistmodel.property.dl_issueAssignedTo.title=Assegnato a -dl_datalistmodel.property.dl_issueRelatedIssues.title=Problemi correlati - -# Event -dl_datalistmodel.type.dl_event.title=Elenco di eventi -dl_datalistmodel.type.dl_event.description=Elenco di eventi contenente il titolo, la descrizione, la localit\u00e0 e la data/ora di inizio e di fine. -dl_datalistmodel.property.dl_eventLocation.title=Localit\u00e0 -dl_datalistmodel.property.dl_eventStartDate.title=Data di inizio -dl_datalistmodel.property.dl_eventEndDate.title=Data di fine -dl_datalistmodel.property.dl_eventRegistrations.title=Registrazioni -dl_datalistmodel.property.dl_eventNote.title=Note - -# Location -dl_datalistmodel.type.dl_location.title=Elenco di localit\u00e0 -dl_datalistmodel.type.dl_location.description=Elenco di localit\u00e0/indirizzi -dl_datalistmodel.property.dl_locationAddress1.title=Riga 1 indirizzo -dl_datalistmodel.property.dl_locationAddress2.title=Riga 2 indirizzo -dl_datalistmodel.property.dl_locationAddress3.title=Riga 3 indirizzo -dl_datalistmodel.property.dl_locationZip.title=CAP/Codice postale -dl_datalistmodel.property.dl_locationState.title=Stato -dl_datalistmodel.property.dl_locationCountry.title=Paese -dl_datalistmodel.property.dl_locationNote.title=Note - -# Meeting Agenda -dl_datalistmodel.type.dl_meetingAgenda.title=Agenda riunioni -dl_datalistmodel.type.dl_meetingAgenda.description=Consente di gestire le voci dell'agenda delle riunioni, tra cui la descrizione, il proprietario e l'ora di assegnazione. -dl_datalistmodel.property.dl_meetingAgendaRef.title=Riferimento -dl_datalistmodel.property.dl_meetingAgendaTime.title=Ora (minuti) -dl_datalistmodel.property.dl_meetingAgendaOwner.title=Proprietario - -# Event Agenda -dl_datalistmodel.type.dl_eventAgenda.title=Agenda eventi -dl_datalistmodel.type.dl_eventAgenda.description=Consente di gestire le voci dell'agenda degli eventi, tra cui i nomi delle sessioni, i relatori e le ore di inizio e di fine. -dl_datalistmodel.property.dl_eventAgendaRef.title=Riferimento -dl_datalistmodel.property.dl_eventAgendaStartTime.title=Ora di inizio -dl_datalistmodel.property.dl_eventAgendaEndTime.title=Ora di fine -dl_datalistmodel.property.dl_eventAgendaSessionName.title=Nome sessione -dl_datalistmodel.property.dl_eventAgendaPresenter.title=Relatore -dl_datalistmodel.property.dl_eventAgendaAudience.title=Destinatari -dl_datalistmodel.property.dl_eventAgendaNotes.title=Note diff --git a/config/alfresco/messages/data-list-model_ja.properties b/config/alfresco/messages/data-list-model_ja.properties deleted file mode 100755 index 0bef3574f6..0000000000 --- a/config/alfresco/messages/data-list-model_ja.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Display labels for Share Data Lists Model -dl_datalistmodel.description=Alfresco Share\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u30e2\u30c7\u30eb - -dl_datalistmodel.type.dl_dataList.title=\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u30d5\u30a9\u30eb\u30c0\u30bf\u30a4\u30d7 -dl_datalistmodel.type.dl_dataList.description= dl:dataListItemType\u5c5e\u6027\u3067\u6307\u5b9a\u3055\u308c\u308b\u30bf\u30a4\u30d7\u306e\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u30a2\u30a4\u30c6\u30e0\u3092\u4fdd\u6301\u3057\u307e\u3059\u3002 -dl_datalistmodel.property.dl_dataListItemType.title=\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u30a2\u30a4\u30c6\u30e0\u30bf\u30a4\u30d7 -dl_datalistmodel.property.dl_dataListItemType.description=\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u5185\u306b\u65b0\u3057\u3044\u30a2\u30a4\u30c6\u30e0\u304c\u4f5c\u3089\u308c\u305f\u6642\u306b\u3001\u3069\u306edl:dataListItem\u306e\u30b5\u30d6\u30bf\u30a4\u30d7\u3092\u4f7f\u7528\u3059\u308b\u304b\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002 - -dl_datalistmodel.type.dl_dataListItem.title=\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u89aa\u30bf\u30a4\u30d7 -dl_datalistmodel.type.dl_dataListItem.description=\u30b5\u30f3\u30d7\u30eb\u306e\u30c7\u30fc\u30bf\u30ea\u30b9\u30c8\u30a2\u30a4\u30c6\u30e0\u30bf\u30a4\u30d7\u3092\u6d3e\u751f\u3059\u308b\u89aa\u30bf\u30a4\u30d7\u3002 - -## Simple "To do" List -dl_datalistmodel.type.dl_todoList.title=\u4e88\u5b9a\u30ea\u30b9\u30c8 -dl_datalistmodel.type.dl_todoList.description=\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u62c5\u5f53\u8005\u3092\u5272\u308a\u5f53\u3066\u308b\u5358\u7d14\u306a\u30ea\u30b9\u30c8 -dl_datalistmodel.property.dl_todoTitle.title=\u30bf\u30a4\u30c8\u30eb -dl_datalistmodel.property.dl_todoDueDate.title=\u7de0\u5207\u65e5 -dl_datalistmodel.property.dl_todoPriority.title=\u512a\u5148 -dl_datalistmodel.property.dl_todoStatus.title=\u30b9\u30c6\u30fc\u30bf\u30b9 -dl_datalistmodel.property.dl_todoNotes.title=\u30e1\u30e2 -dl_datalistmodel.association.dl_assignee.title=\u62c5\u5f53\u8005 - -# Gantt Aspect -dl_datalistmodel.property.dl_ganttStartDate.title=\u958b\u59cb\u65e5 -dl_datalistmodel.property.dl_ganttEndDate.title=\u7d42\u4e86\u65e5 -dl_datalistmodel.property.dl_ganttPercentComplete.title=% \u5b8c\u4e86 - -# Task List (Advanced) -dl_datalistmodel.type.dl_task.title=\u30bf\u30b9\u30af\u30ea\u30b9\u30c8\uff08\u30a2\u30c9\u30d0\u30f3\u30b9\u30c9\uff09 -dl_datalistmodel.type.dl_task.description=\u30a2\u30c9\u30d0\u30f3\u30b9\u30c9\u30bf\u30b9\u30af\u30ea\u30b9\u30c8\u306b\u306f\u30bf\u30a4\u30c8\u30eb\u3001\u8aac\u660e\u3001\u958b\u59cb\u65e5\u3068\u7d42\u4e86\u65e5\u3001\u512a\u5148\u5ea6\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u3001\u30b3\u30e1\u30f3\u30c8\u3001\u62c5\u5f53\u8005\u3001\u6dfb\u4ed8\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_taskPriority.title=\u512a\u5148 -dl_datalistmodel.property.dl_taskStatus.title=\u30b9\u30c6\u30fc\u30bf\u30b9 -dl_datalistmodel.property.dl_taskComments.title=\u30b3\u30e1\u30f3\u30c8 -dl_datalistmodel.property.dl_taskAssignee.title=\u62c5\u5f53\u8005 - -# Task List (Simple) -dl_datalistmodel.type.dl_simpletask.title=\u30bf\u30b9\u30af\u30ea\u30b9\u30c8\uff08\u7c21\u6613\u7248\uff09 -dl_datalistmodel.type.dl_simpletask.description=\u7c21\u6613\u7248\u30bf\u30b9\u30af\u30ea\u30b9\u30c8\u306b\u306f\u30bf\u30a4\u30c8\u30eb\u3001\u8aac\u660e\u3001\u7de0\u5207\u65e5\u3001\u512a\u5148\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u3001\u30b3\u30e1\u30f3\u30c8\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_simpletaskDueDate.title=\u7de0\u5207\u65e5 -dl_datalistmodel.property.dl_simpletaskPriority.title=\u512a\u5148 -dl_datalistmodel.property.dl_simpletaskStatus.title=\u30b9\u30c6\u30fc\u30bf\u30b9 -dl_datalistmodel.property.dl_simpletaskComments.title=\u30b3\u30e1\u30f3\u30c8 - -# Contact -dl_datalistmodel.type.dl_contact.title=\u30b3\u30f3\u30bf\u30af\u30c8\u30ea\u30b9\u30c8 -dl_datalistmodel.type.dl_contact.description=\u30b3\u30f3\u30bf\u30af\u30c8\u30ea\u30b9\u30c8\u306b\u306f\u3001\u59d3\u3001\u540d\u3001\u30d5\u30eb\u30cd\u30fc\u30e0\u3001E\u30e1\u30fc\u30eb\u3001\u5f79\u8077\u540d\u3001\u96fb\u8a71\uff08\u30aa\u30d5\u30a3\u30b9\uff09\u3001\u96fb\u8a71\uff08\u643a\u5e2f\uff09\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_contactFirstName.title=\u540d -dl_datalistmodel.property.dl_contactLastName.title=\u59d3 -dl_datalistmodel.property.dl_contactEmail.title=E\u30e1\u30fc\u30eb -dl_datalistmodel.property.dl_contactCompany.title=\u4f1a\u793e -dl_datalistmodel.property.dl_contactJobTitle.title=\u5f79\u8077\u540d -dl_datalistmodel.property.dl_contactPhoneOffice.title=\u96fb\u8a71\uff08\u30aa\u30d5\u30a3\u30b9\uff09 -dl_datalistmodel.property.dl_contactPhoneMobile.title=\u96fb\u8a71\uff08\u643a\u5e2f\uff09 -dl_datalistmodel.property.dl_contactNotes.title=\u30e1\u30e2 - -# Issues -dl_datalistmodel.type.dl_issue.title=\u554f\u984c\u30ea\u30b9\u30c8 -dl_datalistmodel.type.dl_issue.description=\u554f\u984c\u30ea\u30b9\u30c8\u306b\u306fID\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u3001\u512a\u5148\u3001\u8aac\u660e\u3001\u7de0\u5207\u65e5\u3001\u30b3\u30e1\u30f3\u30c8\u3001\u62c5\u5f53\u8005\u3001\u95a2\u9023\u554f\u984c\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_issueID.title=\u554f\u984cID -dl_datalistmodel.property.dl_issueStatus.title=\u30b9\u30c6\u30fc\u30bf\u30b9 -dl_datalistmodel.property.dl_issuePriority.title=\u512a\u5148 -dl_datalistmodel.property.dl_issueDescription.title=\u8aac\u660e -dl_datalistmodel.property.dl_issueDueDate.title=\u7de0\u5207\u65e5 -dl_datalistmodel.property.dl_issueComments.title=\u30b3\u30e1\u30f3\u30c8 -dl_datalistmodel.property.dl_issueAssignedTo.title=\u62c5\u5f53\u8005 -dl_datalistmodel.property.dl_issueRelatedIssues.title=\u95a2\u9023\u8ab2\u984c - -# Event -dl_datalistmodel.type.dl_event.title=\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30c8 -dl_datalistmodel.type.dl_event.description=\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30c8\u306b\u306f\u3001\u30bf\u30a4\u30c8\u30eb\u3001\u8aac\u660e\u3001\u5834\u6240\u3001\u958b\u59cb\u65e5\u6642/\u7d42\u4e86\u65e5\u6642\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_eventLocation.title=\u5834\u6240 -dl_datalistmodel.property.dl_eventStartDate.title=\u958b\u59cb\u65e5 -dl_datalistmodel.property.dl_eventEndDate.title=\u7d42\u4e86\u65e5 -dl_datalistmodel.property.dl_eventRegistrations.title=\u767b\u9332 -dl_datalistmodel.property.dl_eventNote.title=\u30e1\u30e2 - -# Location -dl_datalistmodel.type.dl_location.title=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u30ea\u30b9\u30c8 -dl_datalistmodel.type.dl_location.description=\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3/\u4f4f\u6240\u30ea\u30b9\u30c8 -dl_datalistmodel.property.dl_locationAddress1.title=\u4f4f\u6240\uff081\u884c\u76ee\uff09 -dl_datalistmodel.property.dl_locationAddress2.title=\u4f4f\u6240\uff082\u884c\u76ee\uff09 -dl_datalistmodel.property.dl_locationAddress3.title=\u4f4f\u6240\uff083\u884c\u76ee\uff09 -dl_datalistmodel.property.dl_locationZip.title=\u90f5\u4fbf\u756a\u53f7 -dl_datalistmodel.property.dl_locationState.title=\u90fd\u9053\u5e9c\u770c -dl_datalistmodel.property.dl_locationCountry.title=\u56fd -dl_datalistmodel.property.dl_locationNote.title=\u30e1\u30e2 - -# Meeting Agenda -dl_datalistmodel.type.dl_meetingAgenda.title=\u4f1a\u8b70\u30a2\u30b8\u30a7\u30f3\u30c0 -dl_datalistmodel.type.dl_meetingAgenda.description=\u4f1a\u8b70\u30a2\u30b8\u30a7\u30f3\u30c0\u306e\u30a2\u30a4\u30c6\u30e0\u306b\u306f\u8aac\u660e\u3001\u6240\u6709\u8005\u3001\u5272\u308a\u5f53\u3066\u6e08\u6642\u9593\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_meetingAgendaRef.title=\u53c2\u7167 -dl_datalistmodel.property.dl_meetingAgendaTime.title=\u6642\u9593\uff08\u5206\uff09 -dl_datalistmodel.property.dl_meetingAgendaOwner.title=\u6240\u6709\u8005 - -# Event Agenda -dl_datalistmodel.type.dl_eventAgenda.title=\u30a4\u30d9\u30f3\u30c8\u30a2\u30b8\u30a7\u30f3\u30c0 -dl_datalistmodel.type.dl_eventAgenda.description=\u7ba1\u7406\u30a4\u30d9\u30f3\u30c8\u30a2\u30b8\u30a7\u30f3\u30c0\u30a2\u30a4\u30c6\u30e0\u306b\u306f\u30bb\u30c3\u30b7\u30e7\u30f3\u540d\u3001\u767a\u8868\u8005\u3001\u958b\u59cb/\u7d42\u4e86\u6642\u9593\u304c\u542b\u307e\u308c\u307e\u3059\u3002 -dl_datalistmodel.property.dl_eventAgendaRef.title=\u53c2\u7167 -dl_datalistmodel.property.dl_eventAgendaStartTime.title=\u958b\u59cb\u6642\u9593 -dl_datalistmodel.property.dl_eventAgendaEndTime.title=\u7d42\u4e86\u6642\u9593 -dl_datalistmodel.property.dl_eventAgendaSessionName.title=\u30bb\u30c3\u30b7\u30e7\u30f3\u540d -dl_datalistmodel.property.dl_eventAgendaPresenter.title=\u767a\u8868\u8005 -dl_datalistmodel.property.dl_eventAgendaAudience.title=\u8074\u8846 -dl_datalistmodel.property.dl_eventAgendaNotes.title=\u30e1\u30e2 diff --git a/config/alfresco/messages/discussion-messages_de_DE.properties b/config/alfresco/messages/discussion-messages_de_DE.properties deleted file mode 100755 index bbeb9afd5b..0000000000 --- a/config/alfresco/messages/discussion-messages_de_DE.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Discussion-related messages - -discussion.discussion_for={0} Diskussion diff --git a/config/alfresco/messages/discussion-messages_es_ES.properties b/config/alfresco/messages/discussion-messages_es_ES.properties deleted file mode 100755 index ce499713a1..0000000000 --- a/config/alfresco/messages/discussion-messages_es_ES.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Discussion-related messages - -discussion.discussion_for={0} foro diff --git a/config/alfresco/messages/discussion-messages_fr_FR.properties b/config/alfresco/messages/discussion-messages_fr_FR.properties deleted file mode 100755 index 973273fdc9..0000000000 --- a/config/alfresco/messages/discussion-messages_fr_FR.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Discussion-related messages - -discussion.discussion_for=Discussion {0} diff --git a/config/alfresco/messages/discussion-messages_it_IT.properties b/config/alfresco/messages/discussion-messages_it_IT.properties deleted file mode 100755 index 5ef92284f2..0000000000 --- a/config/alfresco/messages/discussion-messages_it_IT.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Discussion-related messages - -discussion.discussion_for=Discussione {0} diff --git a/config/alfresco/messages/discussion-messages_ja.properties b/config/alfresco/messages/discussion-messages_ja.properties deleted file mode 100755 index f67349ba7d..0000000000 --- a/config/alfresco/messages/discussion-messages_ja.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Discussion-related messages - -discussion.discussion_for={0} \u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3 diff --git a/config/alfresco/messages/email-server-model_de_DE.properties b/config/alfresco/messages/email-server-model_de_DE.properties deleted file mode 100755 index dbbd1f87d0..0000000000 --- a/config/alfresco/messages/email-server-model_de_DE.properties +++ /dev/null @@ -1,6 +0,0 @@ -eemailserver_emailserverModel.aspect.emailserver_aliasable.title=E-Mail Alias -emailserver_emailserverModel.aspect.emailserver_aliasable.description=E-Mail Alias -emailserver_emailserverModel.property.emailserver_alias.title=Alias -emailserver_emailserverModel.property.emailserver_alias.description=Alias - - diff --git a/config/alfresco/messages/email-server-model_es_ES.properties b/config/alfresco/messages/email-server-model_es_ES.properties deleted file mode 100755 index dda667dc6e..0000000000 --- a/config/alfresco/messages/email-server-model_es_ES.properties +++ /dev/null @@ -1,5 +0,0 @@ -emailserver_emailserverModel.aspect.emailserver_aliasable.title=Alias de correo electr\u00f3nico -emailserver_emailserverModel.aspect.emailserver_aliasable.description=Alias de correo electr\u00f3nico -emailserver_emailserverModel.property.emailserver_alias.title=Alias -emailserver_emailserverModel.property.emailserver_alias.description=Alias - diff --git a/config/alfresco/messages/email-server-model_fr_FR.properties b/config/alfresco/messages/email-server-model_fr_FR.properties deleted file mode 100755 index c96d7bc44e..0000000000 --- a/config/alfresco/messages/email-server-model_fr_FR.properties +++ /dev/null @@ -1,4 +0,0 @@ -emailserver_emailserverModel.aspect.emailserver_aliasable.title=Alias email -emailserver_emailserverModel.aspect.emailserver_aliasable.description=Alias email -emailserver_emailserverModel.property.emailserver_alias.title=Alias -emailserver_emailserverModel.property.emailserver_alias.description=Alias diff --git a/config/alfresco/messages/email-server-model_it_IT.properties b/config/alfresco/messages/email-server-model_it_IT.properties deleted file mode 100755 index 04cc3c0ff5..0000000000 --- a/config/alfresco/messages/email-server-model_it_IT.properties +++ /dev/null @@ -1,4 +0,0 @@ -emailserver_emailserverModel.aspect.emailserver_aliasable.title=Email Alias -emailserver_emailserverModel.aspect.emailserver_aliasable.description=Email Alias -emailserver_emailserverModel.property.emailserver_alias.title=Alias -emailserver_emailserverModel.property.emailserver_alias.description=Alias diff --git a/config/alfresco/messages/email-server-model_ja.properties b/config/alfresco/messages/email-server-model_ja.properties deleted file mode 100755 index 95112f8650..0000000000 --- a/config/alfresco/messages/email-server-model_ja.properties +++ /dev/null @@ -1,4 +0,0 @@ -emailserver_emailserverModel.aspect.emailserver_aliasable.title=E\u30e1\u30fc\u30eb\u30a8\u30a4\u30ea\u30a2\u30b9 -emailserver_emailserverModel.aspect.emailserver_aliasable.description=E\u30e1\u30fc\u30eb\u30a8\u30a4\u30ea\u30a2\u30b9 -emailserver_emailserverModel.property.emailserver_alias.title=\u30a8\u30a4\u30ea\u30a2\u30b9 -emailserver_emailserverModel.property.emailserver_alias.description=\u30a8\u30a4\u30ea\u30a2\u30b9 diff --git a/config/alfresco/messages/email-service_de_DE.properties b/config/alfresco/messages/email-service_de_DE.properties deleted file mode 100755 index 3586bd5dd0..0000000000 --- a/config/alfresco/messages/email-service_de_DE.properties +++ /dev/null @@ -1,25 +0,0 @@ -email.server.msg.received_by_smtp=Via SMTP von "{0}" empfangen. -email.server.msg.default_subject=E-Mail-{0} - -email.server.err.sender_blocked={0}' wurde der Zugriff verweigert. -email.server.err.inbound_mail_disabled=Der Alfresco Server ist nicht f\u00fcr die Annahme eingehender E-Mails konfiguriert. -email.server.err.access_denied={0}' wurde der Zugriff auf "{1}" verweigert. -email.server.err.invalid_subject=Die Betreffzeile muss ein g\u00fcltiger Dateiname sein. -email.server.err.unknown_source_address=Die E-Mail Adresse 'von' wurde nicht erkannt: {0}. -email.server.err.user_not_email_contributor=Der Benutzer "{0}" ist nicht in der E-Mail Gruppe Beitragender. -email.server.err.no_email_contributor_group=Die E-Mail Gruppe Beitragender existiert nicht. -email.server.err.invalid_node_address=Die E-Mail Adresse "{0}" referenziert keinen g\u00fcltigen, zug\u00e4nglichen Node. -email.server.err.handler_not_found=Der E-Mail Nachrichten-Handler wurde f\u00fcr den Node Typ "{0}" nicht gefunden. -email.server.err.mail_read_error=Es ist ein Fehler beim Lesen der Mail-Nachricht aufgetreten: {0} -email.server.err.failed_to_create_mime_message=MIME-Nachricht konnte vom Input Datenstrom nicht erstellt werden: {0} -email.server.err.extracting_from_address=Die Adresse 'von' konnte nicht extrahiert werden: {0} -email.server.err.no_from_address=Diese Nachricht beinhaltet keine 'von' Adresse. -email.server.err.extracting_to_address=Die Adresse 'an' konnte nicht extrahiert werden: {0} -email.server.err.no_to_address=Diese Nachricht beinhaltet keine 'an' Adresse. -email.server.err.extracting_subject=Der Betreff der Nachricht konnte nicht extrahiert werden: {0} -email.server.err.extracting_sent_date=Das Datum 'gesendet am' konnte nicht extrahiert werden: {0} -email.server.err.parse_message=Die E-Mail Nachricht konnte nicht geparst werden: {0} -email.server.err.usupported_encoding=Zeichencodierung "{0}" wird nicht unterst\u00fctzt -email.server.err.failed_to_read_content_stream=Teilinhalt der Nachricht konnte nicht gelesen werden: {0} -email.server.err.incorrect_message_part=Fehlerhafter Nachrichtenteil: {0} - diff --git a/config/alfresco/messages/email-service_es_ES.properties b/config/alfresco/messages/email-service_es_ES.properties deleted file mode 100755 index 264bcfe5f7..0000000000 --- a/config/alfresco/messages/email-service_es_ES.properties +++ /dev/null @@ -1,25 +0,0 @@ -email.server.msg.received_by_smtp=Recibido v\u00eda SMTP desde ''{0}''. -email.server.msg.default_subject=Correo electr\u00f3nico -{0} - -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.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.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.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.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} -email.server.err.incorrect_message_part=Parte de mensaje incorrecta: {0} - diff --git a/config/alfresco/messages/email-service_fr_FR.properties b/config/alfresco/messages/email-service_fr_FR.properties deleted file mode 100755 index 4b014eef6a..0000000000 --- a/config/alfresco/messages/email-service_fr_FR.properties +++ /dev/null @@ -1,24 +0,0 @@ -email.server.msg.received_by_smtp=Re\u00e7u par SMTP de ''{0}''. -email.server.msg.default_subject=E-mail-{0} - -email.server.err.sender_blocked='{0}'' s'est vu refuser l'acc\u00e8s. -email.server.err.inbound_mail_disabled=La configuration du serveur Alfresco ne permet pas d'accepter les E-mails entrants. -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.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.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} -email.server.err.extracting_from_address=Impossible d'extraire l'adresse 'from'\u00a0: {0} -email.server.err.no_from_address=Aucune adresse 'from' n'est sp\u00e9cifi\u00e9e pour le message. -email.server.err.extracting_to_address=Impossible d'extraire l'adresse 'to'\u00a0: {0} -email.server.err.no_to_address=Aucune adresse 'to' n'est sp\u00e9cifi\u00e9e pour le message. -email.server.err.extracting_subject=Impossible d'extraire l'objet du message\u00a0: {0} -email.server.err.extracting_sent_date=Impossible d'extraire la date 'sent on'\u00a0: {0} -email.server.err.parse_message=Impossible d'analyser l'E-mail\u00a0: {0} -email.server.err.usupported_encoding=L'encodage ''{0}'' n'est pas pris en charge -email.server.err.failed_to_read_content_stream=Impossible de lire le contenu partiel du message\u00a0: {0} -email.server.err.incorrect_message_part=Partie incorrecte du message\u00a0: {0} diff --git a/config/alfresco/messages/email-service_it_IT.properties b/config/alfresco/messages/email-service_it_IT.properties deleted file mode 100755 index 1384253f46..0000000000 --- a/config/alfresco/messages/email-service_it_IT.properties +++ /dev/null @@ -1,24 +0,0 @@ -email.server.msg.received_by_smtp=Ricevuto tramite SMTP da ''{0}''. -email.server.msg.default_subject=E-mail - {0} - -email.server.err.sender_blocked=A ''{0}'' \u00e8 stato negato l'accesso. -email.server.err.inbound_mail_disabled=Il server Alfresco non \u00e8 configurato in modo da accettare e-mail in arrivo. -email.server.err.access_denied=A ''{0}'' \u00e8 stato negato l'accesso per ''{1}''. -email.server.err.invalid_subject=La riga dell'oggetto deve contenere un nome di file valido. -email.server.err.unknown_source_address=L'indirizzo e-mail del mittente non \u00e8 stato riconosciuto: {0}. -email.server.err.user_not_email_contributor=L'utente ''{0}'' non fa parte del gruppo di contributori ai messaggi e-mail. -email.server.err.no_email_contributor_group=Il gruppo di contributori ai messaggi e-mail non esiste. -email.server.err.invalid_node_address=L'indirizzo e-mail ''{0}'' non referenzia un nodo accessibile valido. -email.server.err.handler_not_found=Impossibile trovare il gestore dei messaggi e-mail per il tipo di nodo ''{0}''. -email.server.err.mail_read_error=Si \u00e8 verificato un errore durante la lettura del messaggio e-mail: {0} -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.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} -email.server.err.parse_message=Impossibile analizzare il messaggio e-mail: {0} -email.server.err.usupported_encoding=La codifica ''{0}'' non \u00e8 supportata -email.server.err.failed_to_read_content_stream=Impossibile leggere il contenuto della parte del messaggio: {0} -email.server.err.incorrect_message_part=Parte del messaggio non corretta: {0} diff --git a/config/alfresco/messages/email-service_ja.properties b/config/alfresco/messages/email-service_ja.properties deleted file mode 100755 index a061232a46..0000000000 --- a/config/alfresco/messages/email-service_ja.properties +++ /dev/null @@ -1,24 +0,0 @@ -email.server.msg.received_by_smtp=''{0}''\u304b\u3089SMTP\u3067\u53d7\u4fe1\u3057\u307e\u3057\u305f\u3002 -email.server.msg.default_subject=E\u30e1\u30fc\u30eb-{0} - -email.server.err.sender_blocked=''{0}''\u306e\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002 -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.user_not_email_contributor=\u30e6\u30fc\u30b6''{0}''\u306fE\u30e1\u30fc\u30eb\u53c2\u52a0\u8005\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\u53c2\u52a0\u8005\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\u307f\u53d6\u308a\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.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.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.parse_message=E\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u69cb\u6587\u89e3\u6790\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} -email.server.err.usupported_encoding=\u30b3\u30fc\u30c9\u5316''{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\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} -email.server.err.incorrect_message_part=\u9593\u9055\u3063\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u90e8\u5206: {0} diff --git a/config/alfresco/messages/form-service_de_DE.properties b/config/alfresco/messages/form-service_de_DE.properties deleted file mode 100755 index 553c8cc5d7..0000000000 --- a/config/alfresco/messages/form-service_de_DE.properties +++ /dev/null @@ -1,22 +0,0 @@ -# form service externalised display strings - -form_service.mimetype.label=MimeType -form_service.mimetype.description=MimeType des Inhalts -form_service.encoding.label=Zeichencodierung -form_service.encoding.description=Zeichencodierung des Inhalts -form_service.size.label=Gr\u00f6\u00dfe -form_service.size.description=Gr\u00f6\u00dfe des Inhalts in Bytes - -form_service.message.label=Nachricht -form_service.message.description=Von dem Benutzer zu Beginn des Workflows eingegebene Nachricht -form_service.message.value.none=(Keine Nachricht) - -form_service.transitions.label=Transitions -form_service.transitions.description=Die f\u00fcr die Aufgabe verf\u00fcgbaren Transitions - -form_service.package.items.label=Elemente -form_service.package.items.description=Elemente, die Bestandteil des Workflows sind - -form_service.task.owner.label=Eigent\u00fcmer -form_service.task.owner.description=Benutzer, der Eigent\u00fcmer der Aufgabe ist - diff --git a/config/alfresco/messages/form-service_es_ES.properties b/config/alfresco/messages/form-service_es_ES.properties deleted file mode 100755 index 6d9a523c17..0000000000 --- a/config/alfresco/messages/form-service_es_ES.properties +++ /dev/null @@ -1,21 +0,0 @@ -# form service externalised display strings - -form_service.mimetype.label=Tipo MIME -form_service.mimetype.description=Tipo MIME del contenido -form_service.encoding.label=Codificaci\u00f3n -form_service.encoding.description=Codificaci\u00f3n del contenido -form_service.size.label=Tama\u00f1o -form_service.size.description=Tama\u00f1o del contenido en bytes - -form_service.message.label=Mensaje -form_service.message.description=Mensaje introducido por el usuario al iniciar el flujo de trabajo -form_service.message.value.none=(No hay mensajes) - -form_service.transitions.label=Transiciones -form_service.transitions.description=Las transiciones disponibles para la tarea - -form_service.package.items.label=Elementos -form_service.package.items.description=Elementos que forman parte del flujo de trabajo. - -form_service.task.owner.label=Propietario -form_service.task.owner.description=El usuario que posee la tarea diff --git a/config/alfresco/messages/form-service_fr_FR.properties b/config/alfresco/messages/form-service_fr_FR.properties deleted file mode 100755 index b15b474d05..0000000000 --- a/config/alfresco/messages/form-service_fr_FR.properties +++ /dev/null @@ -1,21 +0,0 @@ -# form service externalised display strings - -form_service.mimetype.label=Type MIME -form_service.mimetype.description=Type\u00a0MIME du contenu -form_service.encoding.label=Encodage -form_service.encoding.description=Encodage du contenu -form_service.size.label=Taille -form_service.size.description=Taille du contenu, en octets - -form_service.message.label=Message -form_service.message.description=Message saisi par l'utilisateur lors du d\u00e9marrage du flux de travail -form_service.message.value.none=(Aucun message) - -form_service.transitions.label=Transitions -form_service.transitions.description=Transitions disponibles pour la t\u00e2che - -form_service.package.items.label=El\u00e9ment(s) -form_service.package.items.description=\u00c9l\u00e9ments faisant partie du flux de travail - -form_service.task.owner.label=Propri\u00e9taire -form_service.task.owner.description=Utilisateur propri\u00e9taire de la t\u00e2che diff --git a/config/alfresco/messages/form-service_it_IT.properties b/config/alfresco/messages/form-service_it_IT.properties deleted file mode 100755 index 8f4957df0e..0000000000 --- a/config/alfresco/messages/form-service_it_IT.properties +++ /dev/null @@ -1,21 +0,0 @@ -# form service externalised display strings - -form_service.mimetype.label=Mimetype -form_service.mimetype.description=Mimetype del contenuto -form_service.encoding.label=Codifica -form_service.encoding.description=Codifica del contenuto -form_service.size.label=Dimensioni -form_service.size.description=Dimensioni del contenuto in byte - -form_service.message.label=Messaggio -form_service.message.description=Messaggio immesso dall'utente all'avvio del workflow -form_service.message.value.none=(Nessun messaggio) - -form_service.transitions.label=Transizioni -form_service.transitions.description=Transizioni disponibili per il compito - -form_service.package.items.label=Elementi -form_service.package.items.description=Elementi facenti parte del workflow - -form_service.task.owner.label=Proprietario -form_service.task.owner.description=Utente proprietario del compito diff --git a/config/alfresco/messages/form-service_ja.properties b/config/alfresco/messages/form-service_ja.properties deleted file mode 100755 index eea80971db..0000000000 --- a/config/alfresco/messages/form-service_ja.properties +++ /dev/null @@ -1,21 +0,0 @@ -# form service externalised display strings - -form_service.mimetype.label=MIME\u30bf\u30a4\u30d7 -form_service.mimetype.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306eMIME\u30bf\u30a4\u30d7 -form_service.encoding.label=\u30b3\u30fc\u30c9\u5316 -form_service.encoding.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30b3\u30fc\u30c9\u5316 -form_service.size.label=\u30b5\u30a4\u30ba -form_service.size.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30b5\u30a4\u30ba(\u30d0\u30a4\u30c8) - -form_service.message.label=\u30e1\u30c3\u30bb\u30fc\u30b8 -form_service.message.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u958b\u59cb\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u5165\u529b\u3055\u308c\u305f\u30e6\u30fc\u30b6\u3092\u7ba1\u7406 -form_service.message.value.none=(\u30e1\u30c3\u30bb\u30fc\u30b8\u306a\u3057) - -form_service.transitions.label=\u9077\u79fb -form_service.transitions.description=\u30bf\u30b9\u30af\u3067\u4f7f\u7528\u53ef\u80fd\u306a\u9077\u79fb - -form_service.package.items.label=\u30a2\u30a4\u30c6\u30e0 -form_service.package.items.description=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u4e00\u90e8\u3067\u3042\u308b\u30a2\u30a4\u30c6\u30e0 - -form_service.task.owner.label=\u6240\u6709\u8005 -form_service.task.owner.description=\u30bf\u30b9\u30af\u3092\u6240\u6709\u3059\u308b\u30e6\u30fc\u30b6 diff --git a/config/alfresco/messages/forum-model_de_DE.properties b/config/alfresco/messages/forum-model_de_DE.properties deleted file mode 100755 index 37c4bfbe7b..0000000000 --- a/config/alfresco/messages/forum-model_de_DE.properties +++ /dev/null @@ -1,22 +0,0 @@ -# Display labels for System Model - -fm_forummodel.description=Forenmodell - -fm_forummodel.type.fm_forums.title=Forenraum -fm_forummodel.type.fm_forums.description=Raum, der Foren enth\u00e4lt - -fm_forummodel.type.fm_forum.title=Forum -fm_forummodel.type.fm_forum.description=Raum, der Themen enth\u00e4lt - -fm_forummodel.type.fm_topic.title=Thema -fm_forummodel.type.fm_topic.description=Raum, der Forenartikel (Posts) enth\u00e4lt - -fm_forummodel.type.fm_post.title=Forenartikel -fm_forummodel.type.fm_post.description=Zu einem Thema geposteter Forenartikel - -fm_forummodel.aspect.fm_discussable.title=Diskussionsf\u00e4hig -fm_forummodel.aspect.fm_discussable.description=L\u00e4sst die Diskussion eines Objektes zu - -fm_forummodel.association.fm_discussion.title=Diskussion -fm_forummodel.association.fm_discussion.description=Das Forum mit der Diskussion zum Objekt, auf das der Aspekt angewandt wird - diff --git a/config/alfresco/messages/forum-model_es_ES.properties b/config/alfresco/messages/forum-model_es_ES.properties deleted file mode 100755 index a289710de8..0000000000 --- a/config/alfresco/messages/forum-model_es_ES.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Display labels for System Model - -fm_forummodel.description=Modelo de foro - -fm_forummodel.type.fm_forums.title=Espacio de foro -fm_forummodel.type.fm_forums.description=Espacio que contiene foros - -fm_forummodel.type.fm_forum.title=Foro -fm_forummodel.type.fm_forum.description=Espacio que contiene temas - -fm_forummodel.type.fm_topic.title=Tema -fm_forummodel.type.fm_topic.description=Espacio que contiene art\u00edculos de foro (mensajes) - -fm_forummodel.type.fm_post.title=Art\u00edculo de foro -fm_forummodel.type.fm_post.description=Art\u00edculo de foro enviado a un tema - -fm_forummodel.aspect.fm_discussable.title=A debatir -fm_forummodel.aspect.fm_discussable.description=Habilita un objeto de debate - -fm_forummodel.association.fm_discussion.title=Foro -fm_forummodel.association.fm_discussion.description=El foro donde se debate acerca del objeto al cual se aplica el aspecto diff --git a/config/alfresco/messages/forum-model_fr_FR.properties b/config/alfresco/messages/forum-model_fr_FR.properties deleted file mode 100755 index 4a5fe4962a..0000000000 --- a/config/alfresco/messages/forum-model_fr_FR.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Display labels for System Model - -fm_forummodel.description=Mod\u00e8le de forum - -fm_forummodel.type.fm_forums.title=Espace forum -fm_forummodel.type.fm_forums.description=Espace contenant les forums - -fm_forummodel.type.fm_forum.title=Forum -fm_forummodel.type.fm_forum.description=Espace contenant les sujets - -fm_forummodel.type.fm_topic.title=Discussion -fm_forummodel.type.fm_topic.description=Espace contenant les articles - -fm_forummodel.type.fm_post.title=Article du forum -fm_forummodel.type.fm_post.description=Article du forum post\u00e9 sur un sujet - -fm_forummodel.aspect.fm_discussable.title=A d\u00e9battre -fm_forummodel.aspect.fm_discussable.description=Autorise une discussion sur un \u00e9l\u00e9ment - -fm_forummodel.association.fm_discussion.title=Discussion -fm_forummodel.association.fm_discussion.description=Le forum contenant la discussion sur un \u00e9l\u00e9ment sur lequel l'aspect est appliqu\u00e9 diff --git a/config/alfresco/messages/forum-model_it_IT.properties b/config/alfresco/messages/forum-model_it_IT.properties deleted file mode 100755 index f9b7b84084..0000000000 --- a/config/alfresco/messages/forum-model_it_IT.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Display labels for System Model - -fm_forummodel.description=Modello di forum - -fm_forummodel.type.fm_forums.title=Spazio di forum -fm_forummodel.type.fm_forums.description=Spazio contenente forum - -fm_forummodel.type.fm_forum.title=Forum -fm_forummodel.type.fm_forum.description=Spazio contenente argomenti - -fm_forummodel.type.fm_topic.title=Argomento -fm_forummodel.type.fm_topic.description=Spazio contenente articoli del forum (post) - -fm_forummodel.type.fm_post.title=Articolo del forum -fm_forummodel.type.fm_post.description=Articolo del forum postato in un argomento - -fm_forummodel.aspect.fm_discussable.title=Discussable -fm_forummodel.aspect.fm_discussable.description=Consente di creare una discussione su un oggetto - -fm_forummodel.association.fm_discussion.title=Discussione -fm_forummodel.association.fm_discussion.description=Il forum contenente la discussione sull'oggetto a cui viene applicato l'aspetto \ No newline at end of file diff --git a/config/alfresco/messages/forum-model_ja.properties b/config/alfresco/messages/forum-model_ja.properties deleted file mode 100755 index 8a5965fe23..0000000000 --- a/config/alfresco/messages/forum-model_ja.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Display labels for System Model - -fm_forummodel.description=\u30d5\u30a9\u30fc\u30e9\u30e0\u30e2\u30c7\u30eb - -fm_forummodel.type.fm_forums.title=\u30d5\u30a9\u30fc\u30e9\u30e0\u30b9\u30da\u30fc\u30b9 -fm_forummodel.type.fm_forums.description=\u30d5\u30a9\u30fc\u30e9\u30e0\u3092\u542b\u3080\u30b9\u30da\u30fc\u30b9 - -fm_forummodel.type.fm_forum.title=\u30d5\u30a9\u30fc\u30e9\u30e0 -fm_forummodel.type.fm_forum.description=\u30c8\u30d4\u30c3\u30af\u3092\u542b\u3080\u30b9\u30da\u30fc\u30b9 - -fm_forummodel.type.fm_topic.title=\u30c8\u30d4\u30c3\u30af -fm_forummodel.type.fm_topic.description=\u30d5\u30a9\u30fc\u30e9\u30e0\u306e\u8a18\u4e8b\uff08\u6295\u7a3f\uff09\u3092\u542b\u3080\u30b9\u30da\u30fc\u30b9 - -fm_forummodel.type.fm_post.title=\u30d5\u30a9\u30fc\u30e9\u30e0\u306e\u8a18\u4e8b -fm_forummodel.type.fm_post.description=\u6295\u7a3f\u3055\u308c\u305f\u30d5\u30a9\u30fc\u30e9\u30e0\u306e\u8a18\u4e8b - -fm_forummodel.aspect.fm_discussable.title=\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3\u53ef\u80fd -fm_forummodel.aspect.fm_discussable.description=\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3\u3059\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u8a31\u53ef\u3059\u308b - -fm_forummodel.association.fm_discussion.title=\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3 -fm_forummodel.association.fm_discussion.description=\u30a2\u30b9\u30da\u30af\u30c8\u304c\u9069\u7528\u3055\u308c\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u95a2\u3059\u308b\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3\u304c\u958b\u50ac\u3055\u308c\u3066\u3044\u308b\u30d5\u30a9\u30fc\u30e9\u30e0 diff --git a/config/alfresco/messages/imap-service_de_DE.properties b/config/alfresco/messages/imap-service_de_DE.properties deleted file mode 100755 index 1892af0c3f..0000000000 --- a/config/alfresco/messages/imap-service_de_DE.properties +++ /dev/null @@ -1,15 +0,0 @@ -# -# Imap I18N messages -# - -# Information messages. prefix 'imap.server.info' -imap.server.info.message_body_not_found="Die Body-Teile der Nachricht k\u00f6nnen nicht gefunden werden." - -# Error messages. prefix 'imap.server.error' -imap.server.error.properties_dont_exist="Es gibt keine geeigneten Eigenschaften." -imap.server.error.permission_denied="Kann keinen Ordner anlegen - Zugriff verweigert." -imap.server.error.folder_already_exist="Ordner bereits vorhanden." -imap.server.error.mailbox_name_is_mandatory="Name der Mailbox ist ein Pflichtparameter." -imap.server.error.cannot_get_a_folder="Kann keinen Ordner mit Namen "{0} erhalten." - - diff --git a/config/alfresco/messages/imap-service_es_ES.properties b/config/alfresco/messages/imap-service_es_ES.properties deleted file mode 100755 index 3d7745cf2c..0000000000 --- a/config/alfresco/messages/imap-service_es_ES.properties +++ /dev/null @@ -1,13 +0,0 @@ -# -# Imap I18N messages -# - -# Information messages. prefix 'imap.server.info' -imap.server.info.message_body_not_found = "No se encuentran las partes del cuerpo del mensaje." - -# Error messages. prefix 'imap.server.error' -imap.server.error.properties_dont_exist = "No existen las propiedades adecuadas." -imap.server.error.permission_denied = "No se puede crear una carpeta - Permiso denegado." -imap.server.error.folder_already_exist = "Ya existe la carpeta ." -imap.server.error.mailbox_name_is_mandatory = "Nombre de buz\u00f3n es un par\u00e1metro obligatorio." -imap.server.error.cannot_get_a_folder = "No se puede obtener una carpeta con nombre ''{0}''." diff --git a/config/alfresco/messages/imap-service_fr_FR.properties b/config/alfresco/messages/imap-service_fr_FR.properties deleted file mode 100755 index 029c41be30..0000000000 --- a/config/alfresco/messages/imap-service_fr_FR.properties +++ /dev/null @@ -1,13 +0,0 @@ -# -# Imap I18N messages -# - -# Information messages. prefix 'imap.server.info' -imap.server.info.message_body_not_found = ''Les parties du corps du message sont introuvables.'' - -# Error messages. prefix 'imap.server.error' -imap.server.error.properties_dont_exist = ''Les propri\u00e9t\u00e9s appropri\u00e9es n'existent pas.'' -imap.server.error.permission_denied = ''Impossible de cr\u00e9er le dossier - Permission refus\u00e9e.'' -imap.server.error.folder_already_exist = ''Le dossier existe d\u00e9j\u00e0.'' -imap.server.error.mailbox_name_is_mandatory = ''Vous devez obligatoirement indiquer un nom de bo\u00eete aux lettres.'' -imap.server.error.cannot_get_a_folder = ''Dossier comportant le nom ''{0}'' introuvable.'' diff --git a/config/alfresco/messages/imap-service_it_IT.properties b/config/alfresco/messages/imap-service_it_IT.properties deleted file mode 100755 index ffec4246a4..0000000000 --- a/config/alfresco/messages/imap-service_it_IT.properties +++ /dev/null @@ -1,13 +0,0 @@ -# -# Imap I18N messages -# - -# Information messages. prefix 'imap.server.info' -imap.server.info.message_body_not_found = "Impossibile trovare le parti del corpo del messaggio." - -# Error messages. prefix 'imap.server.error' -imap.server.error.properties_dont_exist = "Non esistono propriet\u00e0 appropriate." -imap.server.error.permission_denied = "Impossibile creare la cartella - Permesso negato." -imap.server.error.folder_already_exist = "La cartella esiste gi\u00e0." -imap.server.error.mailbox_name_is_mandatory = "Il nome della cassetta postale \u00e8 un parametro obbligatorio." -imap.server.error.cannot_get_a_folder = "Impossibile recuperare una cartella con il nome ''{0}''." diff --git a/config/alfresco/messages/imap-service_ja.properties b/config/alfresco/messages/imap-service_ja.properties deleted file mode 100755 index 97287c9039..0000000000 --- a/config/alfresco/messages/imap-service_ja.properties +++ /dev/null @@ -1,14 +0,0 @@ -# -# Imap I18N messages -# - -# Information messages. prefix 'imap.server.info' -imap.server.info.message_body_not_found ="\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u672c\u6587\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002" - -# Error messages. prefix 'imap.server.error' -imap.server.error.properties_dont_exist ="\u9069\u5207\u306a\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u5b58\u5728\u3057\u3066\u3044\u307e\u305b\u3093\u3002" -imap.server.error.permission_denied ="\u30d5\u30a9\u30eb\u30c0\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093 - \u6a29\u9650\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002" -imap.server.error.folder_already_exist ="\u30d5\u30a9\u30eb\u30c0\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059\u3002" -imap.server.error.mailbox_name_is_mandatory ="\u30e1\u30fc\u30eb\u30dc\u30c3\u30af\u30b9\u540d\u306f\u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf\u3067\u3059\u3002" -imap.server.error.cannot_get_a_folder ="\u540d\u524d ''{0}'' \u3067\u30d5\u30a9\u30eb\u30c0\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3002" - diff --git a/config/alfresco/messages/invitation-service_de_DE.properties b/config/alfresco/messages/invitation-service_de_DE.properties deleted file mode 100755 index 0b589f96a1..0000000000 --- a/config/alfresco/messages/invitation-service_de_DE.properties +++ /dev/null @@ -1,24 +0,0 @@ -# -# Invitation service messages -# - -invitation.error.noworkflow=Einladungsworkflow wurde nicht gefunden, Name des Workflows: {0} -invitation.error.not_found=Einladung nicht gefunden, Einladungs-ID: {0} -invitation.error.invalid_inviteId_format=Einladungs-ID hat ung\u00fcltiges Format, g\u00fcltige Formate sind $: {0} -invitation.invite.already_member=Der Benutzer {0} ist bereits Mitglied von {1} und kann nicht noch einmal eingeladen werden -invitation.cancel.not_site_manager=Aktueller Benutzer {0} kann Einladung: {1} nicht abbrechen, da sie nicht Site Manger f\u00fcr Site: {2} sind -invitation.invite.not_site_manager="Aktueller Benutzer {0} ist kein Site Manager f\u00fcr Site: {1} -invitation.invite.unable_generate_id=Kann keinen Benutzernamen f\u00fcr Eingeladenen generieren, der nicht schon jemand anderem geh\u00f6rt Vorname:{0} Nachname: {1} E-Mail:{2} -invitation.invite.already_finished="Einladung {0} wurde bereits angenommen, abgebrochen oder abgelehnt" -invitation.invite.authentication_chain="Authentifizierungskette l\u00e4sst das Erstellen neuer Konten nicht zu" - -# InviteSender messages -invitation.invitesender.email.subject=Einladung, der Site {0} beizutreten -invitation.invitesender.email.role.SiteManager=Site Manager -invitation.invitesender.email.role.SiteCollaborator=Site Mitarbeiter -invitation.invitesender.email.role.SiteContributor=Site Beitragender -invitation.invitesender.email.role.SiteConsumer=Site Konsument - -# Invitation workflow task description -invitation.nominated.workflow.description=Einladung, der Website {0} beizutreten -invitation.moderated.workflow.description=Anfrage, der Website {0} beizutreten diff --git a/config/alfresco/messages/invitation-service_es_ES.properties b/config/alfresco/messages/invitation-service_es_ES.properties deleted file mode 100755 index dea5735b36..0000000000 --- a/config/alfresco/messages/invitation-service_es_ES.properties +++ /dev/null @@ -1,24 +0,0 @@ -# -# Invitation service messages -# - -invitation.error.noworkflow=No se encuentra el flujo de trabajo de invitaci\u00f3n, nombre de flujo de trabajo: {0} -invitation.error.not_found=Invitaci\u00f3n no encontrada, invitationId: {0} -invitation.error.invalid_inviteId_format=Formato del Id de invitaci\u00f3n inv\u00e1lido, los formatos v\u00e1lidos son $: {0} -invitation.invite.already_member=El usuario {0} ya es un miembro de {1} y no puede ser invitado de nuevo -invitation.cancel.not_site_manager=El usuario actual, {0}, no puede cancelar la invitaci\u00f3n: {1} porque no es administrador del sitio en el siguiente sitio: {2} -invitation.invite.not_site_manager=El usuario actual, {0}, no es administrador del sitio para el siguiente sitio: {1} -invitation.invite.unable_generate_id=No se puede generar un nombre de usuario para el invitado, que contenga Nombre:{0} Apellidos:{1} correo electr\u00f3nico:{2} de otra persona -invitation.invite.already_finished="La invitaci\u00f3n, {0} ya ha sido aceptada, cancelada o rechazada" -invitation.invite.authentication_chain="El m\u00e9todo de autenticaci\u00f3n establecido no permite crear nuevas cuentas" - -# InviteSender messages -invitation.invitesender.email.subject=Invitaci\u00f3n a unirse al sitio {0} -invitation.invitesender.email.role.SiteManager=Administrador de sitio -invitation.invitesender.email.role.SiteCollaborator=Colaborador de sitio -invitation.invitesender.email.role.SiteContributor=Contribuidor de sitio -invitation.invitesender.email.role.SiteConsumer=Consumidor de sitio - -# Invitation workflow task description -invitation.nominated.workflow.description=Invitaci\u00f3n a unirse al sitio {0} -invitation.moderated.workflow.description=Solicitud de unirse al sitio {0} diff --git a/config/alfresco/messages/invitation-service_fr_FR.properties b/config/alfresco/messages/invitation-service_fr_FR.properties deleted file mode 100755 index df193c5bb0..0000000000 --- a/config/alfresco/messages/invitation-service_fr_FR.properties +++ /dev/null @@ -1,24 +0,0 @@ -# -# Invitation service messages -# - -invitation.error.noworkflow =Flux de travail d'invitation introuvable, nom du flux de travail\u00a0: {0} -invitation.error.not_found =Invitation introuvable, identifiant de l'invitation\u00a0: {0} -invitation.error.invalid_inviteId_format =Format de l'identifiant de l'invitation invalide, les formats valides sont $\u00a0: {0} -invitation.invite.already_member =L'utilisateur {0} est d\u00e9j\u00e0 membre de {1} et ne peut pas \u00eatre \u00e0 nouveau invit\u00e9 -invitation.cancel.not_site_manager =L'utilisateur actuel {0}ne peut pas annuler l'invitation suivante\u00a0: {1}, car il n'est pas un gestionnaire du site suivant\u00a0: {2} -invitation.invite.not_site_manager= ''L'utilisateur actuel {0} n'est pas un gestionnaire du site suivant\u00a0: {1} -invitation.invite.unable_generate_id =Impossible de g\u00e9n\u00e9rer un nom d'utilisateur pour l'invit\u00e9 qui n'appartient pas d\u00e9j\u00e0 \u00e0 une autre personne firstName:{0} lastName:{1} email:{2} -invitation.invite.already_finished= ''L'invitation {0} a d\u00e9j\u00e0 \u00e9t\u00e9 accept\u00e9e, annul\u00e9e ou rejet\u00e9e'' -invitation.invite.authentication_chain= ''La cha\u00eene d'authentification ne permet pas la cr\u00e9ation de nouveaux comptes'' - -# InviteSender messages -invitation.invitesender.email.subject=Invitation \u00e0 rejoindre le site {0} -invitation.invitesender.email.role.SiteManager=Gestionnaire du site -invitation.invitesender.email.role.SiteCollaborator=Collaborateur du site -invitation.invitesender.email.role.SiteContributor=Contributeur du site -invitation.invitesender.email.role.SiteConsumer=Visiteur du site - -# Invitation workflow task description -invitation.nominated.workflow.description=Invitation \u00e0 rejoindre le site {0} -invitation.moderated.workflow.description=Requ\u00eate pour rejoindre le site {0} diff --git a/config/alfresco/messages/invitation-service_it_IT.properties b/config/alfresco/messages/invitation-service_it_IT.properties deleted file mode 100755 index cce4c838f7..0000000000 --- a/config/alfresco/messages/invitation-service_it_IT.properties +++ /dev/null @@ -1,24 +0,0 @@ -# -# Invitation service messages -# - -invitation.error.noworkflow=Impossibile trovare il workflow di invito con nome: {0} -invitation.error.not_found=Impossibile trovare l'invito con ID: {0} -invitation.error.invalid_inviteId_format=Il formato dell'ID di invito non \u00e8 valido. I formati validi sono $: {0} -invitation.invite.already_member=L'utente {0} \u00e8 gi\u00e0 un membro di {1} e non pu\u00f2 essere invitato di nuovo -invitation.cancel.not_site_manager=L'utente attuale {0} non pu\u00f2 annullare l'invito: {1} perch\u00e9 non \u00e8 un manager del sito: {2} -invitation.invite.not_site_manager="L'utente attuale {0} non \u00e8 un manager del sito: {1} -invitation.invite.unable_generate_id=Impossibile generare per l'invitato un nome utente che non appartiene gi\u00e0 a un altro utente firstName:{0} lastName:{1} email:{2} -invitation.invite.already_finished="L'invito {0} \u00e8 gi\u00e0 stato accettato, annullato o respinto" -invitation.invite.authentication_chain="La catena di autenticazione non consente la creazione di nuovi account" - -# InviteSender messages -invitation.invitesender.email.subject=Invito al sito {0} -invitation.invitesender.email.role.SiteManager=Manager sito -invitation.invitesender.email.role.SiteCollaborator=Collaboratore sito -invitation.invitesender.email.role.SiteContributor=Contributore sito -invitation.invitesender.email.role.SiteConsumer=Consumatore sito - -# Invitation workflow task description -invitation.nominated.workflow.description=Invito a partecipare al sito {0} -invitation.moderated.workflow.description=Richiesta di partecipare al sito {0} diff --git a/config/alfresco/messages/invitation-service_ja.properties b/config/alfresco/messages/invitation-service_ja.properties deleted file mode 100755 index 39853b279f..0000000000 --- a/config/alfresco/messages/invitation-service_ja.properties +++ /dev/null @@ -1,24 +0,0 @@ -# -# Invitation service messages -# - -invitation.error.noworkflow ="\u62db\u5f85\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u540d : {0}" -invitation.error.not_found ="\u62db\u5f85\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u62db\u5f85ID: {0}" -invitation.error.invalid_inviteId_format="\u62db\u5f85ID\u306e\u5f62\u5f0f\u304c\u6709\u52b9\u3067\u3042\u308a\u307e\u305b\u3093\u3002\u6709\u52b9\u306a\u5f62\u5f0f\u306f$\u3068\u306a\u308a\u307e\u3059: {0}" -invitation.invite.already_member ="\u30e6\u30fc\u30b6 {0} \u306f\u3059\u3067\u306b {1} \u306e\u30e1\u30f3\u30d0\u3067\u3067\u3042\u308b\u305f\u3081\u3001\u518d\u5ea6\u62db\u5f85\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093" -invitation.cancel.not_site_manager ="\u73fe\u5728\u306e\u30e6\u30fc\u30b6 {0} \u306f\u30b5\u30a4\u30c8: {2} \u306e\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u3067\u306a\u3044\u305f\u3081\u3001\u62db\u5f85: {1} \u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3067\u304d\u307e\u305b\u3093 -invitation.invite.not_site_manager="\u73fe\u5728\u306e\u30e6\u30fc\u30b6 {0} \u306f\u30b5\u30a4\u30c8 {1} \u306e\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u3067\u306f\u3042\u308a\u307e\u305b\u3093 -invitation.invite.unable_generate_id ="\u62db\u5f85\u7528\u306e\u30e6\u30fc\u30b6\u540d\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u308c\u306f\u3001\u8ab0\u304b\u4ed6\u306e\u540d:{0} \u59d3:{1} E\u30e1\u30fc\u30eb:{2}\u306b\u5c5e\u3057\u3066\u3044\u307e\u305b\u3093" -invitation.invite.already_finished="\u62db\u5f85 {0} \u306f\u3059\u3067\u306b\u53d7\u9818\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u3001\u62d2\u5426\u306e\u3044\u305a\u308c\u304b\u304c\u5b8c\u4e86\u3057\u3066\u3044\u307e\u3059" -invitation.invite.authentication_chain="\u8a8d\u8a3c\u30c1\u30a7\u30fc\u30f3\u3067\u306f\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u306f\u8a31\u53ef\u3055\u308c\u307e\u305b\u3093" - -# InviteSender messages -invitation.invitesender.email.subject={0} \u30b5\u30a4\u30c8\u3078\u306e\u53c2\u52a0\u62db\u5f85 -invitation.invitesender.email.role.SiteManager=\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3 -invitation.invitesender.email.role.SiteCollaborator=\u30b5\u30a4\u30c8\u5171\u540c\u4f5c\u696d\u8005 -invitation.invitesender.email.role.SiteContributor=\u30b5\u30a4\u30c8\u53c2\u52a0\u8005 -invitation.invitesender.email.role.SiteConsumer=\u30b5\u30a4\u30c8\u30b2\u30b9\u30c8 - -# Invitation workflow task description -invitation.nominated.workflow.description={0}\u30b5\u30a4\u30c8\u3078\u306e\u53c2\u52a0\u62db\u5f85 -invitation.moderated.workflow.description={0}\u30b5\u30a4\u30c8\u3078\u306e\u53c2\u52a0\u30ea\u30af\u30a8\u30b9\u30c8 diff --git a/config/alfresco/messages/jbpm-engine-messages_de_DE.properties b/config/alfresco/messages/jbpm-engine-messages_de_DE.properties deleted file mode 100755 index ce02277a05..0000000000 --- a/config/alfresco/messages/jbpm-engine-messages_de_DE.properties +++ /dev/null @@ -1,45 +0,0 @@ -Jbpm.engine.mandatory.properties.missing=Mandatory task properties have not been provided! {0} -jbpm.engine.deploy.workflow.error=Failed to deploy workflow definition. -jbpm.engine.is.workflow.deployed.error=Failed to determine if workflow definition is already deployed. -jbpm.engine.undeploy.workflow.error=Failed to undeploy workflow definition {0}. -jbpm.engine.get.workflow.definition.error=Failed to retrieve workflow definitions. -jbpm.engine.get.workflow.definition.by.id.error=Failed to retrieve workflow definition for id {0}. -jbpm.engine.get.workflow.definition.by.name.error=Failed to retrieve workflow definition for name {0}. -jbpm.engine.get.all.workflow.definitions.by.name.error=Failed to retrieve all definitions for workflow {0}. -jbpm.engine.get.workflow.definition.image.error=Failed to retrieve workflow definition image for {0}. -jbpm.engine.get.task.definitions.error=Failed to retrieve workflow task definitions for workflow definition {0}. -jbpm.engine.get.process.definition.error=Workflow definition {0} does not exist. -jbpm.enginestart.workflow.error=Failed to start workflow {0}. -jbpm.engine.get.active.workflows.error=Failed to retrieve workflow instances for definition {0}. -jbpm.engine.get.workflow.instance.by.id.error=Failed to retrieve workflow instance with Id {0}. -jbpm.engine.get.process.instance.error=Workflow instance does not exist for Id {0}. -jbpm.engine.get.workflow.paths.error=Failed to retrieve workflow paths for workflow instance {0}. -jbpm.engine.get.path.properties.error=Failed to retrieve properties of path {0}. -jbpm.engine.cancel.workflow.error=Failed to cancel workflow instance {0}. -jbpm.engine.delete.workflow.error=Failed to delete workflow instance {0}. -jbpm.engine.signal.transition.error=Failed to signal transition {0} from workflow path {1}.. -jbpm.engine.invalid.event=Event {0} is not a valid event, this event name is reserved. -jbpm.engine.fire.event.error=Failed to fire event {0} on workflow path {1}. -jbpm.engine.get.tasks.for.path.error=Failed to retrieve tasks assigned to Workflow path {0}. -jbpm.engine.get.timers.error=Could not retrieve any timers for workflow {0}. -jbpm.engine.find.completed.task.instances.error=Failed to retrieve completed task instances list for actor {0}. -jbpm.engine.get.assigned.tasks.error=Failed to retrieve tasks assigned to authority {0} in state {1}. -jbpm.engine.get.pooled.tasks.error=Failed to retrieve pooled tasks for authorities {0}. -jbpm.engine.query.tasks.error=Failed to query tasks. Query: {0}. -jbpm.engine.get.task.instance.error=Task instance {0} does not exist. -jbpm.engine.update.task.error=Failed to update workflow task {0}. -jbpm.engine.end.task.invalid.transition=Transition {0} is invalid for Workflow task {1}. -jbpm.engine.end.task.error=Failed to signal transition {0} from workflow task {1}. -jbpm.engine.get.task.by.id.error=Failed to retrieve task {0}. -jbpm.engine.compile.process.definition.zip.error=Failed to parse process definition from jBPM zip archive stream. -jbpm.engine.compile.process.definition.xml.error=Failed to parse process definition from jBPM xml stream. -jbpm.engine.compile.process.definition.unsupported.error=Failed to parse process definition - unsupported mime type {0} -jbpm.engine.get.task.definition.error=Failed to find type definition {0}. -jbpm.engine.get.jbpm.id.error=Format of id {0} is invalid. -jbpm.engine.get.workflow.token.invalid=Invalid workflow path {0}. -jbpm.engine.get.workflow.token.is.null=Workflow path {0} does not exist. -jbpm.engine.set.task.properties.invalid.value=The value {0} is invalid for the task property {1}. -jbpm.engine.package.already.associated.error=Cannot associate workflow package {0} with workflow instance {1} as its already associated with workflow instance {2}". -jbpm.engine.convert.value.error=Unable to convert jBPM value {0} to Alfresco Value since it is not Serializable. -jbpm.engine.get.company.home.invalid=Invalid company home path {0}. -jbpm.engine.get.company.home.multiple=Invalid company home path {0}. Expected 1 match but found {1} matches. \ No newline at end of file diff --git a/config/alfresco/messages/jbpm-engine-messages_es_ES.properties b/config/alfresco/messages/jbpm-engine-messages_es_ES.properties deleted file mode 100755 index ce02277a05..0000000000 --- a/config/alfresco/messages/jbpm-engine-messages_es_ES.properties +++ /dev/null @@ -1,45 +0,0 @@ -Jbpm.engine.mandatory.properties.missing=Mandatory task properties have not been provided! {0} -jbpm.engine.deploy.workflow.error=Failed to deploy workflow definition. -jbpm.engine.is.workflow.deployed.error=Failed to determine if workflow definition is already deployed. -jbpm.engine.undeploy.workflow.error=Failed to undeploy workflow definition {0}. -jbpm.engine.get.workflow.definition.error=Failed to retrieve workflow definitions. -jbpm.engine.get.workflow.definition.by.id.error=Failed to retrieve workflow definition for id {0}. -jbpm.engine.get.workflow.definition.by.name.error=Failed to retrieve workflow definition for name {0}. -jbpm.engine.get.all.workflow.definitions.by.name.error=Failed to retrieve all definitions for workflow {0}. -jbpm.engine.get.workflow.definition.image.error=Failed to retrieve workflow definition image for {0}. -jbpm.engine.get.task.definitions.error=Failed to retrieve workflow task definitions for workflow definition {0}. -jbpm.engine.get.process.definition.error=Workflow definition {0} does not exist. -jbpm.enginestart.workflow.error=Failed to start workflow {0}. -jbpm.engine.get.active.workflows.error=Failed to retrieve workflow instances for definition {0}. -jbpm.engine.get.workflow.instance.by.id.error=Failed to retrieve workflow instance with Id {0}. -jbpm.engine.get.process.instance.error=Workflow instance does not exist for Id {0}. -jbpm.engine.get.workflow.paths.error=Failed to retrieve workflow paths for workflow instance {0}. -jbpm.engine.get.path.properties.error=Failed to retrieve properties of path {0}. -jbpm.engine.cancel.workflow.error=Failed to cancel workflow instance {0}. -jbpm.engine.delete.workflow.error=Failed to delete workflow instance {0}. -jbpm.engine.signal.transition.error=Failed to signal transition {0} from workflow path {1}.. -jbpm.engine.invalid.event=Event {0} is not a valid event, this event name is reserved. -jbpm.engine.fire.event.error=Failed to fire event {0} on workflow path {1}. -jbpm.engine.get.tasks.for.path.error=Failed to retrieve tasks assigned to Workflow path {0}. -jbpm.engine.get.timers.error=Could not retrieve any timers for workflow {0}. -jbpm.engine.find.completed.task.instances.error=Failed to retrieve completed task instances list for actor {0}. -jbpm.engine.get.assigned.tasks.error=Failed to retrieve tasks assigned to authority {0} in state {1}. -jbpm.engine.get.pooled.tasks.error=Failed to retrieve pooled tasks for authorities {0}. -jbpm.engine.query.tasks.error=Failed to query tasks. Query: {0}. -jbpm.engine.get.task.instance.error=Task instance {0} does not exist. -jbpm.engine.update.task.error=Failed to update workflow task {0}. -jbpm.engine.end.task.invalid.transition=Transition {0} is invalid for Workflow task {1}. -jbpm.engine.end.task.error=Failed to signal transition {0} from workflow task {1}. -jbpm.engine.get.task.by.id.error=Failed to retrieve task {0}. -jbpm.engine.compile.process.definition.zip.error=Failed to parse process definition from jBPM zip archive stream. -jbpm.engine.compile.process.definition.xml.error=Failed to parse process definition from jBPM xml stream. -jbpm.engine.compile.process.definition.unsupported.error=Failed to parse process definition - unsupported mime type {0} -jbpm.engine.get.task.definition.error=Failed to find type definition {0}. -jbpm.engine.get.jbpm.id.error=Format of id {0} is invalid. -jbpm.engine.get.workflow.token.invalid=Invalid workflow path {0}. -jbpm.engine.get.workflow.token.is.null=Workflow path {0} does not exist. -jbpm.engine.set.task.properties.invalid.value=The value {0} is invalid for the task property {1}. -jbpm.engine.package.already.associated.error=Cannot associate workflow package {0} with workflow instance {1} as its already associated with workflow instance {2}". -jbpm.engine.convert.value.error=Unable to convert jBPM value {0} to Alfresco Value since it is not Serializable. -jbpm.engine.get.company.home.invalid=Invalid company home path {0}. -jbpm.engine.get.company.home.multiple=Invalid company home path {0}. Expected 1 match but found {1} matches. \ No newline at end of file diff --git a/config/alfresco/messages/jbpm-engine-messages_fr_FR.properties b/config/alfresco/messages/jbpm-engine-messages_fr_FR.properties deleted file mode 100755 index ce02277a05..0000000000 --- a/config/alfresco/messages/jbpm-engine-messages_fr_FR.properties +++ /dev/null @@ -1,45 +0,0 @@ -Jbpm.engine.mandatory.properties.missing=Mandatory task properties have not been provided! {0} -jbpm.engine.deploy.workflow.error=Failed to deploy workflow definition. -jbpm.engine.is.workflow.deployed.error=Failed to determine if workflow definition is already deployed. -jbpm.engine.undeploy.workflow.error=Failed to undeploy workflow definition {0}. -jbpm.engine.get.workflow.definition.error=Failed to retrieve workflow definitions. -jbpm.engine.get.workflow.definition.by.id.error=Failed to retrieve workflow definition for id {0}. -jbpm.engine.get.workflow.definition.by.name.error=Failed to retrieve workflow definition for name {0}. -jbpm.engine.get.all.workflow.definitions.by.name.error=Failed to retrieve all definitions for workflow {0}. -jbpm.engine.get.workflow.definition.image.error=Failed to retrieve workflow definition image for {0}. -jbpm.engine.get.task.definitions.error=Failed to retrieve workflow task definitions for workflow definition {0}. -jbpm.engine.get.process.definition.error=Workflow definition {0} does not exist. -jbpm.enginestart.workflow.error=Failed to start workflow {0}. -jbpm.engine.get.active.workflows.error=Failed to retrieve workflow instances for definition {0}. -jbpm.engine.get.workflow.instance.by.id.error=Failed to retrieve workflow instance with Id {0}. -jbpm.engine.get.process.instance.error=Workflow instance does not exist for Id {0}. -jbpm.engine.get.workflow.paths.error=Failed to retrieve workflow paths for workflow instance {0}. -jbpm.engine.get.path.properties.error=Failed to retrieve properties of path {0}. -jbpm.engine.cancel.workflow.error=Failed to cancel workflow instance {0}. -jbpm.engine.delete.workflow.error=Failed to delete workflow instance {0}. -jbpm.engine.signal.transition.error=Failed to signal transition {0} from workflow path {1}.. -jbpm.engine.invalid.event=Event {0} is not a valid event, this event name is reserved. -jbpm.engine.fire.event.error=Failed to fire event {0} on workflow path {1}. -jbpm.engine.get.tasks.for.path.error=Failed to retrieve tasks assigned to Workflow path {0}. -jbpm.engine.get.timers.error=Could not retrieve any timers for workflow {0}. -jbpm.engine.find.completed.task.instances.error=Failed to retrieve completed task instances list for actor {0}. -jbpm.engine.get.assigned.tasks.error=Failed to retrieve tasks assigned to authority {0} in state {1}. -jbpm.engine.get.pooled.tasks.error=Failed to retrieve pooled tasks for authorities {0}. -jbpm.engine.query.tasks.error=Failed to query tasks. Query: {0}. -jbpm.engine.get.task.instance.error=Task instance {0} does not exist. -jbpm.engine.update.task.error=Failed to update workflow task {0}. -jbpm.engine.end.task.invalid.transition=Transition {0} is invalid for Workflow task {1}. -jbpm.engine.end.task.error=Failed to signal transition {0} from workflow task {1}. -jbpm.engine.get.task.by.id.error=Failed to retrieve task {0}. -jbpm.engine.compile.process.definition.zip.error=Failed to parse process definition from jBPM zip archive stream. -jbpm.engine.compile.process.definition.xml.error=Failed to parse process definition from jBPM xml stream. -jbpm.engine.compile.process.definition.unsupported.error=Failed to parse process definition - unsupported mime type {0} -jbpm.engine.get.task.definition.error=Failed to find type definition {0}. -jbpm.engine.get.jbpm.id.error=Format of id {0} is invalid. -jbpm.engine.get.workflow.token.invalid=Invalid workflow path {0}. -jbpm.engine.get.workflow.token.is.null=Workflow path {0} does not exist. -jbpm.engine.set.task.properties.invalid.value=The value {0} is invalid for the task property {1}. -jbpm.engine.package.already.associated.error=Cannot associate workflow package {0} with workflow instance {1} as its already associated with workflow instance {2}". -jbpm.engine.convert.value.error=Unable to convert jBPM value {0} to Alfresco Value since it is not Serializable. -jbpm.engine.get.company.home.invalid=Invalid company home path {0}. -jbpm.engine.get.company.home.multiple=Invalid company home path {0}. Expected 1 match but found {1} matches. \ No newline at end of file diff --git a/config/alfresco/messages/jbpm-engine-messages_it_IT.properties b/config/alfresco/messages/jbpm-engine-messages_it_IT.properties deleted file mode 100755 index ce02277a05..0000000000 --- a/config/alfresco/messages/jbpm-engine-messages_it_IT.properties +++ /dev/null @@ -1,45 +0,0 @@ -Jbpm.engine.mandatory.properties.missing=Mandatory task properties have not been provided! {0} -jbpm.engine.deploy.workflow.error=Failed to deploy workflow definition. -jbpm.engine.is.workflow.deployed.error=Failed to determine if workflow definition is already deployed. -jbpm.engine.undeploy.workflow.error=Failed to undeploy workflow definition {0}. -jbpm.engine.get.workflow.definition.error=Failed to retrieve workflow definitions. -jbpm.engine.get.workflow.definition.by.id.error=Failed to retrieve workflow definition for id {0}. -jbpm.engine.get.workflow.definition.by.name.error=Failed to retrieve workflow definition for name {0}. -jbpm.engine.get.all.workflow.definitions.by.name.error=Failed to retrieve all definitions for workflow {0}. -jbpm.engine.get.workflow.definition.image.error=Failed to retrieve workflow definition image for {0}. -jbpm.engine.get.task.definitions.error=Failed to retrieve workflow task definitions for workflow definition {0}. -jbpm.engine.get.process.definition.error=Workflow definition {0} does not exist. -jbpm.enginestart.workflow.error=Failed to start workflow {0}. -jbpm.engine.get.active.workflows.error=Failed to retrieve workflow instances for definition {0}. -jbpm.engine.get.workflow.instance.by.id.error=Failed to retrieve workflow instance with Id {0}. -jbpm.engine.get.process.instance.error=Workflow instance does not exist for Id {0}. -jbpm.engine.get.workflow.paths.error=Failed to retrieve workflow paths for workflow instance {0}. -jbpm.engine.get.path.properties.error=Failed to retrieve properties of path {0}. -jbpm.engine.cancel.workflow.error=Failed to cancel workflow instance {0}. -jbpm.engine.delete.workflow.error=Failed to delete workflow instance {0}. -jbpm.engine.signal.transition.error=Failed to signal transition {0} from workflow path {1}.. -jbpm.engine.invalid.event=Event {0} is not a valid event, this event name is reserved. -jbpm.engine.fire.event.error=Failed to fire event {0} on workflow path {1}. -jbpm.engine.get.tasks.for.path.error=Failed to retrieve tasks assigned to Workflow path {0}. -jbpm.engine.get.timers.error=Could not retrieve any timers for workflow {0}. -jbpm.engine.find.completed.task.instances.error=Failed to retrieve completed task instances list for actor {0}. -jbpm.engine.get.assigned.tasks.error=Failed to retrieve tasks assigned to authority {0} in state {1}. -jbpm.engine.get.pooled.tasks.error=Failed to retrieve pooled tasks for authorities {0}. -jbpm.engine.query.tasks.error=Failed to query tasks. Query: {0}. -jbpm.engine.get.task.instance.error=Task instance {0} does not exist. -jbpm.engine.update.task.error=Failed to update workflow task {0}. -jbpm.engine.end.task.invalid.transition=Transition {0} is invalid for Workflow task {1}. -jbpm.engine.end.task.error=Failed to signal transition {0} from workflow task {1}. -jbpm.engine.get.task.by.id.error=Failed to retrieve task {0}. -jbpm.engine.compile.process.definition.zip.error=Failed to parse process definition from jBPM zip archive stream. -jbpm.engine.compile.process.definition.xml.error=Failed to parse process definition from jBPM xml stream. -jbpm.engine.compile.process.definition.unsupported.error=Failed to parse process definition - unsupported mime type {0} -jbpm.engine.get.task.definition.error=Failed to find type definition {0}. -jbpm.engine.get.jbpm.id.error=Format of id {0} is invalid. -jbpm.engine.get.workflow.token.invalid=Invalid workflow path {0}. -jbpm.engine.get.workflow.token.is.null=Workflow path {0} does not exist. -jbpm.engine.set.task.properties.invalid.value=The value {0} is invalid for the task property {1}. -jbpm.engine.package.already.associated.error=Cannot associate workflow package {0} with workflow instance {1} as its already associated with workflow instance {2}". -jbpm.engine.convert.value.error=Unable to convert jBPM value {0} to Alfresco Value since it is not Serializable. -jbpm.engine.get.company.home.invalid=Invalid company home path {0}. -jbpm.engine.get.company.home.multiple=Invalid company home path {0}. Expected 1 match but found {1} matches. \ No newline at end of file diff --git a/config/alfresco/messages/jbpm-engine-messages_ja.properties b/config/alfresco/messages/jbpm-engine-messages_ja.properties deleted file mode 100755 index ce02277a05..0000000000 --- a/config/alfresco/messages/jbpm-engine-messages_ja.properties +++ /dev/null @@ -1,45 +0,0 @@ -Jbpm.engine.mandatory.properties.missing=Mandatory task properties have not been provided! {0} -jbpm.engine.deploy.workflow.error=Failed to deploy workflow definition. -jbpm.engine.is.workflow.deployed.error=Failed to determine if workflow definition is already deployed. -jbpm.engine.undeploy.workflow.error=Failed to undeploy workflow definition {0}. -jbpm.engine.get.workflow.definition.error=Failed to retrieve workflow definitions. -jbpm.engine.get.workflow.definition.by.id.error=Failed to retrieve workflow definition for id {0}. -jbpm.engine.get.workflow.definition.by.name.error=Failed to retrieve workflow definition for name {0}. -jbpm.engine.get.all.workflow.definitions.by.name.error=Failed to retrieve all definitions for workflow {0}. -jbpm.engine.get.workflow.definition.image.error=Failed to retrieve workflow definition image for {0}. -jbpm.engine.get.task.definitions.error=Failed to retrieve workflow task definitions for workflow definition {0}. -jbpm.engine.get.process.definition.error=Workflow definition {0} does not exist. -jbpm.enginestart.workflow.error=Failed to start workflow {0}. -jbpm.engine.get.active.workflows.error=Failed to retrieve workflow instances for definition {0}. -jbpm.engine.get.workflow.instance.by.id.error=Failed to retrieve workflow instance with Id {0}. -jbpm.engine.get.process.instance.error=Workflow instance does not exist for Id {0}. -jbpm.engine.get.workflow.paths.error=Failed to retrieve workflow paths for workflow instance {0}. -jbpm.engine.get.path.properties.error=Failed to retrieve properties of path {0}. -jbpm.engine.cancel.workflow.error=Failed to cancel workflow instance {0}. -jbpm.engine.delete.workflow.error=Failed to delete workflow instance {0}. -jbpm.engine.signal.transition.error=Failed to signal transition {0} from workflow path {1}.. -jbpm.engine.invalid.event=Event {0} is not a valid event, this event name is reserved. -jbpm.engine.fire.event.error=Failed to fire event {0} on workflow path {1}. -jbpm.engine.get.tasks.for.path.error=Failed to retrieve tasks assigned to Workflow path {0}. -jbpm.engine.get.timers.error=Could not retrieve any timers for workflow {0}. -jbpm.engine.find.completed.task.instances.error=Failed to retrieve completed task instances list for actor {0}. -jbpm.engine.get.assigned.tasks.error=Failed to retrieve tasks assigned to authority {0} in state {1}. -jbpm.engine.get.pooled.tasks.error=Failed to retrieve pooled tasks for authorities {0}. -jbpm.engine.query.tasks.error=Failed to query tasks. Query: {0}. -jbpm.engine.get.task.instance.error=Task instance {0} does not exist. -jbpm.engine.update.task.error=Failed to update workflow task {0}. -jbpm.engine.end.task.invalid.transition=Transition {0} is invalid for Workflow task {1}. -jbpm.engine.end.task.error=Failed to signal transition {0} from workflow task {1}. -jbpm.engine.get.task.by.id.error=Failed to retrieve task {0}. -jbpm.engine.compile.process.definition.zip.error=Failed to parse process definition from jBPM zip archive stream. -jbpm.engine.compile.process.definition.xml.error=Failed to parse process definition from jBPM xml stream. -jbpm.engine.compile.process.definition.unsupported.error=Failed to parse process definition - unsupported mime type {0} -jbpm.engine.get.task.definition.error=Failed to find type definition {0}. -jbpm.engine.get.jbpm.id.error=Format of id {0} is invalid. -jbpm.engine.get.workflow.token.invalid=Invalid workflow path {0}. -jbpm.engine.get.workflow.token.is.null=Workflow path {0} does not exist. -jbpm.engine.set.task.properties.invalid.value=The value {0} is invalid for the task property {1}. -jbpm.engine.package.already.associated.error=Cannot associate workflow package {0} with workflow instance {1} as its already associated with workflow instance {2}". -jbpm.engine.convert.value.error=Unable to convert jBPM value {0} to Alfresco Value since it is not Serializable. -jbpm.engine.get.company.home.invalid=Invalid company home path {0}. -jbpm.engine.get.company.home.multiple=Invalid company home path {0}. Expected 1 match but found {1} matches. \ No newline at end of file diff --git a/config/alfresco/messages/lock-service_de_DE.properties b/config/alfresco/messages/lock-service_de_DE.properties deleted file mode 100755 index d078941608..0000000000 --- a/config/alfresco/messages/lock-service_de_DE.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Lock service externalised display strings - -lock_service.insufficent_privileges=Ihre Berechtigungen reichen nicht aus, um die Sperrung des Node (ID: {0}) aufzuheben. Der Node wurde von einem anderen Benutzer gesperrt. -lock_service.node_locked=Der Norde (ID: {0}) konnte nicht gesperrt werden, da er bereits von einem anderen Benutzer gesperrt ist. -lock_service.no_op=Vorgang kann nicht ausgef\u00fchrt werden, da der Node (ID: {0}) gesperrt ist. -lock_service.no_op2=Vorgang {0} kann nicht ausgef\u00fchrt werden, da der Node (ID: {1}) gesperrt ist. diff --git a/config/alfresco/messages/lock-service_es_ES.properties b/config/alfresco/messages/lock-service_es_ES.properties deleted file mode 100755 index 012b8af738..0000000000 --- a/config/alfresco/messages/lock-service_es_ES.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Lock service externalised display strings - -lock_service.insufficent_privileges=Usted carece de privilegios suficientes para actuar sobre el bloqueo en el nodo (id: {0}). El nodo est\u00e1 bloqueado por otro usuario. -lock_service.node_locked=El nodo (id: {0}) no pudo ser bloqueado, puesto que ya est\u00e1 bloqueado por otro usuario. -lock_service.no_op=No se puede realizar la operaci\u00f3n dado el nodo (id:{0}) est\u00e1 bloqueado. -lock_service.no_op2=No se puede realizar la operaci\u00f3n {0} dado el nodo (id:{1}) est\u00e1 bloqueado. diff --git a/config/alfresco/messages/lock-service_fr_FR.properties b/config/alfresco/messages/lock-service_fr_FR.properties deleted file mode 100755 index d4d27e0cc0..0000000000 --- a/config/alfresco/messages/lock-service_fr_FR.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Lock service externalised display strings - -lock_service.insufficent_privileges=Vos privil\u00e8ges sont insuffisants pour d\u00e9verrouiller le n\u009cud (identifiant\u00a0: {0}). Le noeud est verrouill\u00e9 par un autre utilisateur. -lock_service.node_locked=Le n\u009cud (identifiant\u00a0: {0}) n'a pas pu \u00eatre verrouill\u00e9 car il est d\u00e9j\u00e0 verrouill\u00e9 par un autre utilisateur. -lock_service.no_op=Impossible d'ex\u00e9cuter l'op\u00e9ration car le n\u009cud (identifiant\u00a0: {0}) est verrouill\u00e9. -lock_service.no_op2=Impossible de r\u00e9aliser l''op\u00e9ration {0} car le noeud (id : {1}) est verrouill\u00e9. diff --git a/config/alfresco/messages/lock-service_it_IT.properties b/config/alfresco/messages/lock-service_it_IT.properties deleted file mode 100755 index c013420393..0000000000 --- a/config/alfresco/messages/lock-service_it_IT.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Lock service externalised display strings - -lock_service.insufficent_privileges=Privilegi insufficienti per rilasciare il blocco del nodo (ID: {0}). Il nodo \u00e8 bloccato da un altro utente. -lock_service.node_locked=Impossibile bloccare il nodo (ID: {0}) perch\u00e9 \u00e8 gi\u00e0 bloccato da un altro utente. -lock_service.no_op=Impossibile eseguire l'operazione perch\u00e9 il nodo (ID:{0}) \u00e8 bloccato. -lock_service.no_op2=Impossibile eseguire l'operazione {0} perch\u00e9 il nodo (ID:{1}) \u00e8 bloccato. diff --git a/config/alfresco/messages/lock-service_ja.properties b/config/alfresco/messages/lock-service_ja.properties deleted file mode 100755 index be9b2736af..0000000000 --- a/config/alfresco/messages/lock-service_ja.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Lock service externalised display strings - -lock_service.insufficent_privileges=\u3053\u306e\u30ce\u30fc\u30c9(id: {0})\u306e\u30ed\u30c3\u30af\u3092\u89e3\u9664\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002 \u3053\u306e\u30ce\u30fc\u30c9\u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u306b\u3088\u3063\u3066\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -lock_service.node_locked=\u3053\u306e\u30ce\u30fc\u30c9(id: {0}) \u306f\u4ed6\u306e\u30e6\u30fc\u30b6\u306b\u3088\u3063\u3066\u3059\u3067\u306b\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30ed\u30c3\u30af\u3067\u304d\u307e\u305b\u3093\u3002 -lock_service.no_op=\u30ce\u30fc\u30c9(id:{0})\u304c\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 -lock_service.no_op2=\u30ce\u30fc\u30c9(id:{1})\u304c\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3 {0} \u3092\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002 diff --git a/config/alfresco/messages/module-messages_de_DE.properties b/config/alfresco/messages/module-messages_de_DE.properties deleted file mode 100755 index 930ad2a92e..0000000000 --- a/config/alfresco/messages/module-messages_de_DE.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Module messages - -module.msg.found_modules=Found {0} module(s). -module.msg.starting= Starting module ''{0}'' version {1}. -module.msg.installing= Installing module ''{0}'' version {1}. -module.msg.upgrading= Upgrading module ''{0}'' version {1} (was {2}). -module.msg.missing= A previously-installed module ''{0}'' (version {1}) is not present in your distribution. -module.msg.dependencies= Module ''{0}'' version {1} has the following dependencies: {1} - -module.warn.no_install_version=Module ''{0}'' had no install version. Assuming version {1} was installed. - -module.err.missing_dependency=\nModule ''{0}'' version {1} depends on module ''{2}'', which has not been installed. -module.err.downgrading_not_supported=\nDowngrading of modules is not supported.\nModule ''{0}'' version {1} is currently installed and must be uninstalled before version {2} can be installed. -module.err.unsupported_repo_version=\nModule ''{0}'' version {1} is incompatible with the current repository version {2}.\n The repository version required must be in range [{3} : {4}]. -module.err.already_executed=The module component has already been executed: {0}.{1} -module.err.execution_failed=A module component ''{0}'' failed to execute: {1} -module.err.component_already_registered=A component named ''{0}'' has already been registered for module ''{1}''. -module.err.unable_to_open_module_properties=The module properties file ''{0}'' could not be read. -module.err.component_in_missing_module=The component ''{0}'' belongs to a non-existent module ''{1}''. -module.err.orphaned_components={0} module components were not considered for execution. diff --git a/config/alfresco/messages/module-messages_es_ES.properties b/config/alfresco/messages/module-messages_es_ES.properties deleted file mode 100755 index 930ad2a92e..0000000000 --- a/config/alfresco/messages/module-messages_es_ES.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Module messages - -module.msg.found_modules=Found {0} module(s). -module.msg.starting= Starting module ''{0}'' version {1}. -module.msg.installing= Installing module ''{0}'' version {1}. -module.msg.upgrading= Upgrading module ''{0}'' version {1} (was {2}). -module.msg.missing= A previously-installed module ''{0}'' (version {1}) is not present in your distribution. -module.msg.dependencies= Module ''{0}'' version {1} has the following dependencies: {1} - -module.warn.no_install_version=Module ''{0}'' had no install version. Assuming version {1} was installed. - -module.err.missing_dependency=\nModule ''{0}'' version {1} depends on module ''{2}'', which has not been installed. -module.err.downgrading_not_supported=\nDowngrading of modules is not supported.\nModule ''{0}'' version {1} is currently installed and must be uninstalled before version {2} can be installed. -module.err.unsupported_repo_version=\nModule ''{0}'' version {1} is incompatible with the current repository version {2}.\n The repository version required must be in range [{3} : {4}]. -module.err.already_executed=The module component has already been executed: {0}.{1} -module.err.execution_failed=A module component ''{0}'' failed to execute: {1} -module.err.component_already_registered=A component named ''{0}'' has already been registered for module ''{1}''. -module.err.unable_to_open_module_properties=The module properties file ''{0}'' could not be read. -module.err.component_in_missing_module=The component ''{0}'' belongs to a non-existent module ''{1}''. -module.err.orphaned_components={0} module components were not considered for execution. diff --git a/config/alfresco/messages/module-messages_fr_FR.properties b/config/alfresco/messages/module-messages_fr_FR.properties deleted file mode 100755 index 930ad2a92e..0000000000 --- a/config/alfresco/messages/module-messages_fr_FR.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Module messages - -module.msg.found_modules=Found {0} module(s). -module.msg.starting= Starting module ''{0}'' version {1}. -module.msg.installing= Installing module ''{0}'' version {1}. -module.msg.upgrading= Upgrading module ''{0}'' version {1} (was {2}). -module.msg.missing= A previously-installed module ''{0}'' (version {1}) is not present in your distribution. -module.msg.dependencies= Module ''{0}'' version {1} has the following dependencies: {1} - -module.warn.no_install_version=Module ''{0}'' had no install version. Assuming version {1} was installed. - -module.err.missing_dependency=\nModule ''{0}'' version {1} depends on module ''{2}'', which has not been installed. -module.err.downgrading_not_supported=\nDowngrading of modules is not supported.\nModule ''{0}'' version {1} is currently installed and must be uninstalled before version {2} can be installed. -module.err.unsupported_repo_version=\nModule ''{0}'' version {1} is incompatible with the current repository version {2}.\n The repository version required must be in range [{3} : {4}]. -module.err.already_executed=The module component has already been executed: {0}.{1} -module.err.execution_failed=A module component ''{0}'' failed to execute: {1} -module.err.component_already_registered=A component named ''{0}'' has already been registered for module ''{1}''. -module.err.unable_to_open_module_properties=The module properties file ''{0}'' could not be read. -module.err.component_in_missing_module=The component ''{0}'' belongs to a non-existent module ''{1}''. -module.err.orphaned_components={0} module components were not considered for execution. diff --git a/config/alfresco/messages/module-messages_it_IT.properties b/config/alfresco/messages/module-messages_it_IT.properties deleted file mode 100755 index 930ad2a92e..0000000000 --- a/config/alfresco/messages/module-messages_it_IT.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Module messages - -module.msg.found_modules=Found {0} module(s). -module.msg.starting= Starting module ''{0}'' version {1}. -module.msg.installing= Installing module ''{0}'' version {1}. -module.msg.upgrading= Upgrading module ''{0}'' version {1} (was {2}). -module.msg.missing= A previously-installed module ''{0}'' (version {1}) is not present in your distribution. -module.msg.dependencies= Module ''{0}'' version {1} has the following dependencies: {1} - -module.warn.no_install_version=Module ''{0}'' had no install version. Assuming version {1} was installed. - -module.err.missing_dependency=\nModule ''{0}'' version {1} depends on module ''{2}'', which has not been installed. -module.err.downgrading_not_supported=\nDowngrading of modules is not supported.\nModule ''{0}'' version {1} is currently installed and must be uninstalled before version {2} can be installed. -module.err.unsupported_repo_version=\nModule ''{0}'' version {1} is incompatible with the current repository version {2}.\n The repository version required must be in range [{3} : {4}]. -module.err.already_executed=The module component has already been executed: {0}.{1} -module.err.execution_failed=A module component ''{0}'' failed to execute: {1} -module.err.component_already_registered=A component named ''{0}'' has already been registered for module ''{1}''. -module.err.unable_to_open_module_properties=The module properties file ''{0}'' could not be read. -module.err.component_in_missing_module=The component ''{0}'' belongs to a non-existent module ''{1}''. -module.err.orphaned_components={0} module components were not considered for execution. diff --git a/config/alfresco/messages/module-messages_ja.properties b/config/alfresco/messages/module-messages_ja.properties deleted file mode 100755 index 930ad2a92e..0000000000 --- a/config/alfresco/messages/module-messages_ja.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Module messages - -module.msg.found_modules=Found {0} module(s). -module.msg.starting= Starting module ''{0}'' version {1}. -module.msg.installing= Installing module ''{0}'' version {1}. -module.msg.upgrading= Upgrading module ''{0}'' version {1} (was {2}). -module.msg.missing= A previously-installed module ''{0}'' (version {1}) is not present in your distribution. -module.msg.dependencies= Module ''{0}'' version {1} has the following dependencies: {1} - -module.warn.no_install_version=Module ''{0}'' had no install version. Assuming version {1} was installed. - -module.err.missing_dependency=\nModule ''{0}'' version {1} depends on module ''{2}'', which has not been installed. -module.err.downgrading_not_supported=\nDowngrading of modules is not supported.\nModule ''{0}'' version {1} is currently installed and must be uninstalled before version {2} can be installed. -module.err.unsupported_repo_version=\nModule ''{0}'' version {1} is incompatible with the current repository version {2}.\n The repository version required must be in range [{3} : {4}]. -module.err.already_executed=The module component has already been executed: {0}.{1} -module.err.execution_failed=A module component ''{0}'' failed to execute: {1} -module.err.component_already_registered=A component named ''{0}'' has already been registered for module ''{1}''. -module.err.unable_to_open_module_properties=The module properties file ''{0}'' could not be read. -module.err.component_in_missing_module=The component ''{0}'' belongs to a non-existent module ''{1}''. -module.err.orphaned_components={0} module components were not considered for execution. diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties index 5d46f02b77..06e5f9b670 100644 --- a/config/alfresco/messages/patch-service.properties +++ b/config/alfresco/messages/patch-service.properties @@ -377,3 +377,9 @@ patch.transfer.targetrule.description=Creates the transfer target rule for the d patch.actions.scheduledfolder.description=Creates the scheduled actions folder in the Data Dictionary. patch.removingLinkValidationMetadata.description=Fixes ALF-5185: Removes all Link Validation reports from schema + +patch.mtFixAdminExistingTenants.description=Fix bootstrapped creator/modifier +patch.mtFixAdminExistingTenants.result=Fix bootstrapped creator/modifier + +patch.fixUserQNames.description=Fixes user store qnames to improve native authentication performance +patch.fixUserQNames.result=Generated qnames for {0} users. diff --git a/config/alfresco/messages/patch-service_de_DE.properties b/config/alfresco/messages/patch-service_de_DE.properties deleted file mode 100755 index f8f7075084..0000000000 --- a/config/alfresco/messages/patch-service_de_DE.properties +++ /dev/null @@ -1,379 +0,0 @@ -# PatchService messages -patch.service.preceeded_by_alternative=Preceded by alternative patch ''{0}''. -patch.service.not_relevant=Not relevant to schema {0} -patch.executer.checking=Checking for patches to apply ... -patch.service.applying_patch=\tApplying patch ''{0}'' ({1}). -patch.progress=\t\tPatch {0} {1}% complete, estimated complete at {2}. -patch.validation.failed=Validation of patch ''{0}'' failed. Patch is applicable to a newer schema than the schema of this build ({1}).\nfixesToSchema: {2}\ntargetSchema: {3}.\nIf this patch should always be run once on every installation, please ensure that the ''fixesToSchema'' value is set to '''${version.schema}'''. -patch.executer.no_patches_required=No patches were required. -patch.executer.system_readonly=Patches cannot be applied to a read-only system. Possible incompatibilities may exist between the application code and the existing data. -patch.executer.not_executed =\n=== Recorded patch (not executed) === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.executed =\n=== Applied patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.failed =\n=== Failed to apply patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.noLongerSupportedPatch.err.use_incremental_upgrade = \nPatch ''{0}'' was last supported on version {1}.\n Please follow an incremental upgrade using version {2}. - -# General patch messages - -patch.genericBootstrap.result.exists=Bootstrap location already exists: {0} -patch.genericBootstrap.result.created=Imported view into bootstrap location: {0} ({1}) -patch.genericBootstrap.err.multiple_found=Multiple nodes found: {0} - -patch.general.property_not_set=Patch property ''{0}'' has not been set on this patch: {1} - -patch.QNamePatch.result=Successfully updated the ''{0}'' QName to ''{1}''. - -patch.genericMimetypeUpdate.start=Updating mimetypes. -patch.genericMimetypeUpdate.updated=\n\tUpdated {0} content references with mimetype ''{1}'' to use ''{2}''. -patch.genericMimetypeUpdate.indexed=\n\tIndexed {0} nodes in store ''{1}''. -patch.genericMimetypeUpdate.done=\n\tFinished updating mimetypes. -patch.genericMimetypeUpdate.doneReindex=\n\tFinished updating mimetypes. Selective reindexing was disabled; a reindex is required to search for the new mimetype(s). - -# Individual patch messages - -patch.noOpPatch.description=A placeholder patch; usually marks a superceded patch. -patch.noOpPatch.result=No-op patch - -patch.marker.description=Marker patch to record installations and upgrades -patch.marker.result=Marker patch applied - -patch.savedSearchesFolder.description=Ensures the existence of the 'Saved Searches' folder. -patch.savedSearchesFolder.result.exists=The saved searches folder already exists: {0} -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.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.authoritiesFolder.description=Ensures the existence of the user authorities folder [JIRA: AR-497]. - -patch.authoritiesFolderPermission.description=Ensures group authorities are visible to everyone. - -patch.guestUser.description=Add the guest user, guest home space; and fix permissions on company home, guest home and guest person. -patch.guestUser.result=Added guest user and fixed permissions. - -patch.fixNodeSerializableValues.description=Ensure that property values are not stored as Serializable if at all possible -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.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.guestPersonPermission.description=Change Guest Person permission from 'Consumer' to 'Read' -patch.guestPersonPermission.result=Updated Guest Person permission from 'Consumer' to 'Read' - -patch.spacesRootPermission.description=Change Spaces store root permission from 'Consumer' to 'Read' -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.forumsIcons.description=Updates forums icon references -patch.forumsIcons.result=Updated {0} icon references - -patch.emailTemplatesFolder.description=Ensures the existence of the 'Email Templates' folder. -patch.emailTemplatesFolder.result.exists=The email templates folder already exists: {0} -patch.emailTemplatesFolder.result.created=The email templates folder was successfully created: {0} - -patch.emailInviteAndNotifyTemplatesFolder.description=Ensures the existence of the 'Email Invite Templates' and 'Email Notify Templates' folders. -patch.emailNotifyTemplatesFolder.result.exists=The Email Notify Templates folder already exists: {0} -patch.emailNotifyTemplatesFolder.result.created=The Email Notify Templates folder was successfully created: {0} -patch.emailInviteTemplatesFolder.result.exists=The Email Invite Templates folder already exists: {0} -patch.emailInviteTemplatesFolder.result.created=The Email Invite Templates folder was successfully created: {0} - -patch.emailTemplatesContent.description=Loads the email templates into the Email Templates folder. -patch.emailTemplatesContent.result=Imported the Email Templates into the default folder. - -patch.descriptorUpdate.description=Update Repository descriptor -patch.descriptorUpdate.result=Repository descriptor updated - -patch.scriptsFolder.description=Ensures the existence of the 'Scripts' folder. -patch.scriptsFolder.result.exists=The scripts folder already exists: {0} -patch.scriptsFolder.result.created=The scripts folder was successfully created: {0} - -patch.topLevelGroupParentChildAssociationTypePatch.description=Ensure top level groups have the correct child association type. -patch.topLevelGroupParentChildAssociationTypePatch.result=Fixed {0} top level groups child association types. -patch.topLevelGroupParentChildAssociationTypePatch.err.sys_path_not_found=Required authority system path not found: {0} -patch.topLevelGroupParentChildAssociationTypePatch.err.auth_path_not_found=Required authority path not found: {0} - -patch.actionRuleDecouplingPatch.description=Migrate existing rules to the updated model where rules are decoupled from actions. -patch.actionRuleDecouplingPatch.result=Updated {0} rules. - -patch.systemWorkflowFolder.description=Ensures the existence of the system workflow container. -patch.systemWorkflowFolder.result.created=Created system workflow container {0}. - -patch.rssTemplatesFolder.description=Ensures the existence of the 'RSS Templates' folder. -patch.rssTemplatesFolder.result.exists=The RSS Templates folder already exists: {0}. Re-applying guest permissions. -patch.rssTemplatesFolder.result.created=The RSS Templates folder was successfully created: {0} - -patch.rendition.rendering_actions.exists=The Rendering Actions folder already exists: {0}. -patch.rendition.rendering_actions.created=The Rendering Actions folder was successfully created: {0} -patch.rendition.rendering_actions.description=Creates the Rendering Actions folder. - -patch.replication.replication_actions.exists=The Replication Actions folder already exists: {0}. -patch.replication.replication_actions.created=The Replication Actions folder was successfully created: {0} -patch.replication.replication_actions.description=Creates the Replication Actions folder. - -patch.uifacetsAspectRemovalPatch.description=Removes the incorrectly applied uifacets aspect from presentation template files. -patch.uifacetsAspectRemovalPatch.updated=Successfully removed the uifacets aspect from {0} presentation template files. - -patch.guestPersonPermission2.description=Change Guest Person permission to visible by all users as 'Consumer'. -patch.guestPersonPermission2.result=Updated Guest Person permission to visible by all users as 'Consumer'. - -patch.schemaUpgradeScript.description=Ensures that the database upgrade script has been run. -patch.schemaUpgradeScript.err.not_executed=The schema upgrade script, ''{0}'', has not been run against this database. - -patch.uniqueChildName.description=Checks and renames duplicate children. -patch.uniqueChildName.copyOf=({0}-{1}) -patch.uniqueChildName.result=Checked {0} associations and fixed {1} duplicates. See file {2} for details. -patch.uniqueChildName.err.unable_to_fix=Auto-fixing of duplicate names failed. See file {0} for details. - -patch.invalidNameEnding.description=Fixes names ending with a space or full stop. -patch.invalidNameEnding.result=Fixed {0} names ending with a space or full stop. See file {1} for details. -patch.invalidNameEnding.err.unable_to_fix=Auto-fixing of names ending with a space or full stop failed. See file {0} for details. -patch.invalidNameEnding.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemDescriptorContent.description=Adds the version properties content to the system descriptor. -patch.systemDescriptorContent.result=Added the version properties content to the system descriptor. -patch.systemDescriptorContent.err.no_version_properties=The version.properties resource could not be found. -patch.systemDescriptorContent.err.no_descriptor=The system descriptor could not be found. - -patch.versionHistoryPerformance.description=Improves the performance of version history lookups. -patch.versionHistoryPerformance.result=Updated {0} version history objects to improve performance. - -patch.multilingualBootstrap.description=Bootstraps the node that will hold the multilingual containers. - -patch.wcmFolders.description=Ensures the existance of the WCM specific 'Web Projects' and 'Web Forms' folders. -patch.wcmFolders.webprojects.result.exists=The Web Projects folder already exists: {0} -patch.wcmFolders.webprojects.result.created=The Web Projects folder was successfully created: {0} -patch.wcmFolders.webforms.result.exists=The Web Forms folder already exists: {0} -patch.wcmFolders.webforms.result.created=The Web Forms folder was successfully created: {0} - -patch.linkNodeExtension.description=Fixes link node file extensions to have a .url extension. -patch.linkNodeExtension.result=Fixed {0} link node file extensions. See file {1} for details. -patch.linkNodeExtension.err.unable_to_fix=Auto-fixing of link node file extensions failed. See file {0} for details. -patch.linkNodeExtension.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemRegistryBootstrap.description=Bootstraps the node that will hold system registry metadata. - -patch.userAndPersonUserNamesAsIdentifiers.description=Reindex usr:user and cm:person uids as identifiers -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.groupNamesAsIdentifiers.description=Reindex usr:authorityContainer gids as identifiers -patch.groupNamesAsIdentifiers.result=Reindexed usr:authorityContainer with identifiers - -patch.invalidUserPersonAndGroup.description=Fix up invalid uids for people and users; and invalid gids for groups -patch.invalidUserPersonAndGroup.result=Fixed ''{0}'' invalid user nodes, ''{1}'' invalid person nodes and ''{2}'' invalid authority nodes. - -patch.AVMGuidPatch.description=Set GUIDs on AVM nodes. -patch.AVMGuidPatch.result=AVM GUIDS set. - -patch.webscripts.description=Adds Web Scripts to Data Dictionary. -patch.webscripts2.description=Adds Web Scripts (second set) to Data Dictionary. -patch.webscripts3.description=Update Web Scripts ReadMe. -patch.webscriptsExtension.description=Adds Web Scripts Extension to Data Dictionary. - -patch.AVMLayeredSnapshot.description=Set indirectionVersion on Layered Nodes. -patch.AVMLayeredSnapshot.result=Layered Node indirectionVersions set. - -patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer members as identifiers - -patch.genericWorkflow.result.deployed=Re-deployed {0} workflows. - -patch.redeploySubmitProcess.description=Re-deploy WCM Submit Process Definition. -patch.deploySubmitDirectProcess.description=Deploy WCM Direct Submit Process Definition. - -patch.AVMAspects.description=Changes storage of aspects on AVM Nodes. -patch.AVMAspects.result=Aspects were moved. - -patch.ReadmeTemplate.description=Deployed ReadMe Template -patch.webScriptsReadme.description=Applied ReadMe template to Web Scripts folders - -patch.AVMProperties.description=Changes storage of properties on AVM Nodes. -patch.AVMProperties.result=Properties were moved. - -patch.customModels.description=Adds 'Models' folder to Data Dictionary -patch.customMessages.description=Adds 'Messages' folder to Data Dictionary -patch.customWebClientExtension.description=Adds 'Web Client Extension' folder to Data Dictionary - -patch.customWorkflowDefs.description=Adds 'Workflow Definitions' folder to Data Dictionary. - -patch.emailContributorGroup.description=Adds the 'GROUP_EMAIL_CONTRIBUTORS' group. - -patch.avmStoreAsIdentifier.description=Reindex wca:webfolder to make wca:avmstore an identifier -patch.avmStoreAsIdentifier.result=Reindexed wca:webfolder to make wca:avmstore an identifier - -patch.avmFormPropertyIdentifier.description=Reindex wca:webform to make wca:formname an identifier -patch.avmFormPropertyIdentifier.result=Reindexed wca:webform to make wca:formname an identifier - -patch.formsFolder.description=Adds 'Forms' folder to Data Dictionary. - -patch.tagRootCategory.description=Adds 'Tags' as new top-level category root. - -patch.sitesFolder.description=Adds 'Sites' folder to Company Home. - -patch.deploymentMigration.description=Migrates deployment data to the new model. -patch.deploymentMigration.webProjectName=Migrating deployment data for web project ''{0}'' -patch.deploymentMigration.serverMigrated=Server ''{0}'' from web project ''{1}'' has been migrated -patch.deploymentMigration.reportMigrated=Deployment report for ''{0}'' from web project ''{1}'' has been migrated -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.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. - -patch.wcmPermissionPatch.description=Fix ACLs so they are only set on the staging area store. -patch.wcmPermissionPatch.result=Updated ACLs: ACLS are moved to the staging area store and removed from all other stores. They are now applied via layering. - -patch.avmWebProjectInheritPermissions.description=Break inheritance of permissions on wca:webfolder object to hide access by default. -patch.avmWebProjectInheritPermissions.result=Removed inheritance of permissions on all wca:webfolder objects. - -patch.wcmPostPermissionSnapshotPatch.description=Snapshot stores (after fixing ACLs so they are only set on the staging area store). -patch.wcmPostPermissionSnapshotPatch.result=Snapshot complete after WCM ACL changes. - -patch.updateDmPermissions.description=Update ACLs on all DM node objects to the new 3.0 permission model -patch.updateDmPermissions.result=Updated ACLs. Created {0} defining ACLs. - -patch.db-V3.0-0-CreateActivitiesExtras.description=Replaced by 'patch.db-V3.0-ActivityTables', which must run first. - -patch.createSiteStore.description=Create the AVM store for site data structure for 3.0 web-tier clients. -patch.createSiteStore.result=Created the AVM site data store. - -patch.sitePermissionRefactorPatch.description=Create permission groups for sites. -patch.sitePermissionRefactorPatch.result=Groups have been created for all sites and user's allocated accordingly. - -patch.migrateVersionStore.description=Version Store migration (from lightWeightVersionStore to version2Store) -patch.migrateVersionStore.incomplete=Version Store migration incomplete. -patch.migrateVersionStore.done=Version Store migration completed. -patch.migrateVersionStore.bypassingPatch=Bypass Version Store migration patch since scheduled to run as job - -patch.inviteEmailTemplate.description=Adds invite email template to invite space - -patch.calendarModelNamespacePatch.description=Update the Calendar model namespace URI and reindex all calendar objects. -patch.calendarModelNamespacePatch.result=Updated the Calendar model namespace URI to http://www.alfresco.org/model/calendar and reindexed {0} calendar objects. - -patch.spacesStoreGuestPermission.description=Sets READ permissions for GUEST on root node of the SpacesStore. -patch.spacesStoreGuestPermission.result=Granted READ permissions for GUEST on root node of the SpacesStore. - -patch.administratorGroup.description=Adds the 'ALFRESCO_ADMINISTRATORS' group. - -patch.resetWCMToGroupBasedPermissionsPatch.description=Reset WCM to group based permissions. -patch.resetWCMToGroupBasedPermissionsPatch.result=WCM reset to group based permissions. - -patch.migrateVersionStoreUpdateCounter.description=Update internal version2Store counter (if needed). -patch.migrateVersionStoreUpdateCounter.result=Update internal version2Store counter (if needed): {0} - -patch.invitationMigration.description=Migrate invitations from old invite service to invitation service -patch.invitationMigration.result=Migrated {0} invitations from old invite service to invitation service. -patch.invitationMigration.no_invites=No invitations require migrating old invite service to invitation service. - -patch.webSiteAddModerated.description=Changing Web Site visibility from a boolean to enum. -patch.webSiteAddModerated.result=Changed Web Site visibility. - -patch.mtShareExistingTenants.description=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result.not_applicable=Patch applied, although no changes made since MT is not enabled. - -patch.redeployInvitationProcess.description=Re-deploy Invitation Process Definitions. - -patch.imapFolders.description=Creates folders tree necessary for IMAP functionality -patch.imapFolders.result.exists=The 'Imap Configs' folder already exists -patch.imapFolders.result.created=The 'Imap Configs' folder was successfully created - -patch.zonedAuthorities.description=Adds the remodelled cm:authority container to the spaces store - -patch.authorityMigration.description=Copies any old authorities from the user store to the spaces store. -patch.authorityMigration.process.name=Authority Migration -patch.authorityMigration.warning.assoc=Ignoring group memberships of non-existent user {1} -patch.authorityMigration.result=Migrated {0} groups and {1} group associations to the spaces store. - -patch.authorityDefaultZonesPatch.description=Adds groups and people to the appropriate zones for wcm, share and everything else. -patch.authorityDefaultZonesPatch.result=Unzoned groups and people added to the default zones. -patch.authorityDefaultZonesPatch.users= Adding users to zones ... -patch.authorityDefaultZonesPatch.groups= Adding groups to zones ... - -patch.fixNameCrcValues.description=Fixes name and qname CRC32 values to match UTF-8 encoding. -patch.fixNameCrcValues.result=Fixed CRC32 values for UTF-8 encoding for {0} node child associations. See file {1} for details. -patch.fixNameCrcValues.fixed=Updated CRC32 values for association ID {0}, name ''{1}'': {2} -> {3}, qname ''{4}'': {5} -> {6}. -patch.fixNameCrcValues.unableToChange=Failed to update the CRC32 value for association ID {0}: \n Node name: {1} \n name CRC old: {2} \n name CRC new: {3} \n qname: {4} \n qname CRC old: {5} \n qname CRC new: {6} \n Error: {7} -patch.fixNameCrcValues.fixingLocalname=Fixing invalid localname for association ID {0}: \n Was: ''{1}'' \n Now: ''{2}'' -patch.fixNameCrcValues.associationTypeNotDefined=Association type ''{0}'' has not been defined for child association ID {1}. -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.result2=No people were missing the 'cm:sizeCurrent' property. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.transferDefinitions.description=Add transfer definitions folder to data dictionary. -patch.transferDefinitions.result=Transfer definitions folder added to data dictionary. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.thumbnailsAssocQName.description=Update the 'cm:thumbnails' association QName to 'rn:rendition'. - -patch.convertContentUrls.description=Converts pre-3.2 content URLs to use the alf_content_data table. The conversion work can also be done on a schedule; please contact Alfresco Support for further details. -patch.convertContentUrls.bypassingPatch=Content URL conversion was NOT performed by this patch. Activate the scheduled job 'contentUrlConverterTrigger'. -patch.convertContentUrls.start=Content URL conversion progress: -patch.convertContentUrls.error=Content URL conversion failed: {0} -patch.convertContentUrls.inProgress=Content URL conversion increment completed. Awaiting next scheduled call... -patch.convertContentUrls.done=Content URL conversion completed. -patch.convertContentUrls.adm.start=\tProcessing ADM Content URLs. -patch.convertContentUrls.adm.done=\tFinished processing ADM nodes up to ID {0}. -patch.convertContentUrls.avm.start=\tProcessing AVM Content URLs. -patch.convertContentUrls.avm.done=\tFinished processing AVM nodes up to ID {0}. -patch.convertContentUrls.store.start=\tReading content URLs from store {0}. -patch.convertContentUrls.store.readOnly=\tNo content URLs will be marked for deletion. The content store is read-only. -patch.convertContentUrls.store.pending=\tContent URLs will be marked for deletion once the URL conversion process is complete. -patch.convertContentUrls.store.noSupport=\tNo content URLs will be marked for deletion. The store does not support URL enumeration. -patch.convertContentUrls.store.progress=\t\tProcessed {0} content URLs from store. -patch.convertContentUrls.store.scheduled=\tScheduled {0} content URLs for deletion from store: {1} -patch.convertContentUrls.store.done=This job is complete. Deactivate the scheduled job 'contentUrlConverterTrigger'. - -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.unableToChange=Failed to update the CRC32 value for authority: \n Authority: {0} \n Error: {1} - -patch.updateMimetypes1.description=Fix mimetypes for Excel and Powerpoint. -patch.updateMimetypes2.description=Fix mimetypes for Excel and Powerpoint. - -patch.db-V3.2-AddFKIndexes.description=Fixes ALF-3189: Added missing FK indexes. Note: The script is empty for MySQL. - -patch.eliminateDuplicates.description=Fixes ALF-4203: Searches for AVM duplicate nodes and changes their name - -patch.migrateAttrTenants.description=Migrate old Tenant attributes -patch.migrateAttrTenants.result=Processed {0} attributes - -patch.migrateAttrAVMLocks.description=Migrate old AVM Lock attributes -patch.migrateAttrAVMLocks.result=Processed {0} attributes - -patch.migrateAttrPropBackedBeans.description=Migrate old Property-Backed Bean component attributes -patch.migrateAttrPropBackedBeans.result=Processed {0} attributes ({1} properties) - -patch.migrateAttrChainingURS.description=Migrate old Chaining User Registry Synchronizer attributes -patch.migrateAttrChainingURS.result=Processed {0} attributes - -patch.migrateAttrDelete.description=Delete old attributes (if any) after they have been migrated -patch.migrateAttrDelete.result=Old attributes were deleted (if any) - -patch.transfer.targetrulefolder.description=Creates the transfer target rule folder for the default transfer group. - -patch.transfer.targetrule.description=Creates the transfer target rule for the default transfer group. - -patch.actions.scheduledfolder.description=Creates the scheduled actions folder in the Data Dictionary. - -patch.removingLinkValidationMetadata.description=Fixes ALF-5185: Removes all Link Validation reports from schema diff --git a/config/alfresco/messages/patch-service_es_ES.properties b/config/alfresco/messages/patch-service_es_ES.properties deleted file mode 100755 index f8f7075084..0000000000 --- a/config/alfresco/messages/patch-service_es_ES.properties +++ /dev/null @@ -1,379 +0,0 @@ -# PatchService messages -patch.service.preceeded_by_alternative=Preceded by alternative patch ''{0}''. -patch.service.not_relevant=Not relevant to schema {0} -patch.executer.checking=Checking for patches to apply ... -patch.service.applying_patch=\tApplying patch ''{0}'' ({1}). -patch.progress=\t\tPatch {0} {1}% complete, estimated complete at {2}. -patch.validation.failed=Validation of patch ''{0}'' failed. Patch is applicable to a newer schema than the schema of this build ({1}).\nfixesToSchema: {2}\ntargetSchema: {3}.\nIf this patch should always be run once on every installation, please ensure that the ''fixesToSchema'' value is set to '''${version.schema}'''. -patch.executer.no_patches_required=No patches were required. -patch.executer.system_readonly=Patches cannot be applied to a read-only system. Possible incompatibilities may exist between the application code and the existing data. -patch.executer.not_executed =\n=== Recorded patch (not executed) === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.executed =\n=== Applied patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.failed =\n=== Failed to apply patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.noLongerSupportedPatch.err.use_incremental_upgrade = \nPatch ''{0}'' was last supported on version {1}.\n Please follow an incremental upgrade using version {2}. - -# General patch messages - -patch.genericBootstrap.result.exists=Bootstrap location already exists: {0} -patch.genericBootstrap.result.created=Imported view into bootstrap location: {0} ({1}) -patch.genericBootstrap.err.multiple_found=Multiple nodes found: {0} - -patch.general.property_not_set=Patch property ''{0}'' has not been set on this patch: {1} - -patch.QNamePatch.result=Successfully updated the ''{0}'' QName to ''{1}''. - -patch.genericMimetypeUpdate.start=Updating mimetypes. -patch.genericMimetypeUpdate.updated=\n\tUpdated {0} content references with mimetype ''{1}'' to use ''{2}''. -patch.genericMimetypeUpdate.indexed=\n\tIndexed {0} nodes in store ''{1}''. -patch.genericMimetypeUpdate.done=\n\tFinished updating mimetypes. -patch.genericMimetypeUpdate.doneReindex=\n\tFinished updating mimetypes. Selective reindexing was disabled; a reindex is required to search for the new mimetype(s). - -# Individual patch messages - -patch.noOpPatch.description=A placeholder patch; usually marks a superceded patch. -patch.noOpPatch.result=No-op patch - -patch.marker.description=Marker patch to record installations and upgrades -patch.marker.result=Marker patch applied - -patch.savedSearchesFolder.description=Ensures the existence of the 'Saved Searches' folder. -patch.savedSearchesFolder.result.exists=The saved searches folder already exists: {0} -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.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.authoritiesFolder.description=Ensures the existence of the user authorities folder [JIRA: AR-497]. - -patch.authoritiesFolderPermission.description=Ensures group authorities are visible to everyone. - -patch.guestUser.description=Add the guest user, guest home space; and fix permissions on company home, guest home and guest person. -patch.guestUser.result=Added guest user and fixed permissions. - -patch.fixNodeSerializableValues.description=Ensure that property values are not stored as Serializable if at all possible -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.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.guestPersonPermission.description=Change Guest Person permission from 'Consumer' to 'Read' -patch.guestPersonPermission.result=Updated Guest Person permission from 'Consumer' to 'Read' - -patch.spacesRootPermission.description=Change Spaces store root permission from 'Consumer' to 'Read' -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.forumsIcons.description=Updates forums icon references -patch.forumsIcons.result=Updated {0} icon references - -patch.emailTemplatesFolder.description=Ensures the existence of the 'Email Templates' folder. -patch.emailTemplatesFolder.result.exists=The email templates folder already exists: {0} -patch.emailTemplatesFolder.result.created=The email templates folder was successfully created: {0} - -patch.emailInviteAndNotifyTemplatesFolder.description=Ensures the existence of the 'Email Invite Templates' and 'Email Notify Templates' folders. -patch.emailNotifyTemplatesFolder.result.exists=The Email Notify Templates folder already exists: {0} -patch.emailNotifyTemplatesFolder.result.created=The Email Notify Templates folder was successfully created: {0} -patch.emailInviteTemplatesFolder.result.exists=The Email Invite Templates folder already exists: {0} -patch.emailInviteTemplatesFolder.result.created=The Email Invite Templates folder was successfully created: {0} - -patch.emailTemplatesContent.description=Loads the email templates into the Email Templates folder. -patch.emailTemplatesContent.result=Imported the Email Templates into the default folder. - -patch.descriptorUpdate.description=Update Repository descriptor -patch.descriptorUpdate.result=Repository descriptor updated - -patch.scriptsFolder.description=Ensures the existence of the 'Scripts' folder. -patch.scriptsFolder.result.exists=The scripts folder already exists: {0} -patch.scriptsFolder.result.created=The scripts folder was successfully created: {0} - -patch.topLevelGroupParentChildAssociationTypePatch.description=Ensure top level groups have the correct child association type. -patch.topLevelGroupParentChildAssociationTypePatch.result=Fixed {0} top level groups child association types. -patch.topLevelGroupParentChildAssociationTypePatch.err.sys_path_not_found=Required authority system path not found: {0} -patch.topLevelGroupParentChildAssociationTypePatch.err.auth_path_not_found=Required authority path not found: {0} - -patch.actionRuleDecouplingPatch.description=Migrate existing rules to the updated model where rules are decoupled from actions. -patch.actionRuleDecouplingPatch.result=Updated {0} rules. - -patch.systemWorkflowFolder.description=Ensures the existence of the system workflow container. -patch.systemWorkflowFolder.result.created=Created system workflow container {0}. - -patch.rssTemplatesFolder.description=Ensures the existence of the 'RSS Templates' folder. -patch.rssTemplatesFolder.result.exists=The RSS Templates folder already exists: {0}. Re-applying guest permissions. -patch.rssTemplatesFolder.result.created=The RSS Templates folder was successfully created: {0} - -patch.rendition.rendering_actions.exists=The Rendering Actions folder already exists: {0}. -patch.rendition.rendering_actions.created=The Rendering Actions folder was successfully created: {0} -patch.rendition.rendering_actions.description=Creates the Rendering Actions folder. - -patch.replication.replication_actions.exists=The Replication Actions folder already exists: {0}. -patch.replication.replication_actions.created=The Replication Actions folder was successfully created: {0} -patch.replication.replication_actions.description=Creates the Replication Actions folder. - -patch.uifacetsAspectRemovalPatch.description=Removes the incorrectly applied uifacets aspect from presentation template files. -patch.uifacetsAspectRemovalPatch.updated=Successfully removed the uifacets aspect from {0} presentation template files. - -patch.guestPersonPermission2.description=Change Guest Person permission to visible by all users as 'Consumer'. -patch.guestPersonPermission2.result=Updated Guest Person permission to visible by all users as 'Consumer'. - -patch.schemaUpgradeScript.description=Ensures that the database upgrade script has been run. -patch.schemaUpgradeScript.err.not_executed=The schema upgrade script, ''{0}'', has not been run against this database. - -patch.uniqueChildName.description=Checks and renames duplicate children. -patch.uniqueChildName.copyOf=({0}-{1}) -patch.uniqueChildName.result=Checked {0} associations and fixed {1} duplicates. See file {2} for details. -patch.uniqueChildName.err.unable_to_fix=Auto-fixing of duplicate names failed. See file {0} for details. - -patch.invalidNameEnding.description=Fixes names ending with a space or full stop. -patch.invalidNameEnding.result=Fixed {0} names ending with a space or full stop. See file {1} for details. -patch.invalidNameEnding.err.unable_to_fix=Auto-fixing of names ending with a space or full stop failed. See file {0} for details. -patch.invalidNameEnding.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemDescriptorContent.description=Adds the version properties content to the system descriptor. -patch.systemDescriptorContent.result=Added the version properties content to the system descriptor. -patch.systemDescriptorContent.err.no_version_properties=The version.properties resource could not be found. -patch.systemDescriptorContent.err.no_descriptor=The system descriptor could not be found. - -patch.versionHistoryPerformance.description=Improves the performance of version history lookups. -patch.versionHistoryPerformance.result=Updated {0} version history objects to improve performance. - -patch.multilingualBootstrap.description=Bootstraps the node that will hold the multilingual containers. - -patch.wcmFolders.description=Ensures the existance of the WCM specific 'Web Projects' and 'Web Forms' folders. -patch.wcmFolders.webprojects.result.exists=The Web Projects folder already exists: {0} -patch.wcmFolders.webprojects.result.created=The Web Projects folder was successfully created: {0} -patch.wcmFolders.webforms.result.exists=The Web Forms folder already exists: {0} -patch.wcmFolders.webforms.result.created=The Web Forms folder was successfully created: {0} - -patch.linkNodeExtension.description=Fixes link node file extensions to have a .url extension. -patch.linkNodeExtension.result=Fixed {0} link node file extensions. See file {1} for details. -patch.linkNodeExtension.err.unable_to_fix=Auto-fixing of link node file extensions failed. See file {0} for details. -patch.linkNodeExtension.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemRegistryBootstrap.description=Bootstraps the node that will hold system registry metadata. - -patch.userAndPersonUserNamesAsIdentifiers.description=Reindex usr:user and cm:person uids as identifiers -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.groupNamesAsIdentifiers.description=Reindex usr:authorityContainer gids as identifiers -patch.groupNamesAsIdentifiers.result=Reindexed usr:authorityContainer with identifiers - -patch.invalidUserPersonAndGroup.description=Fix up invalid uids for people and users; and invalid gids for groups -patch.invalidUserPersonAndGroup.result=Fixed ''{0}'' invalid user nodes, ''{1}'' invalid person nodes and ''{2}'' invalid authority nodes. - -patch.AVMGuidPatch.description=Set GUIDs on AVM nodes. -patch.AVMGuidPatch.result=AVM GUIDS set. - -patch.webscripts.description=Adds Web Scripts to Data Dictionary. -patch.webscripts2.description=Adds Web Scripts (second set) to Data Dictionary. -patch.webscripts3.description=Update Web Scripts ReadMe. -patch.webscriptsExtension.description=Adds Web Scripts Extension to Data Dictionary. - -patch.AVMLayeredSnapshot.description=Set indirectionVersion on Layered Nodes. -patch.AVMLayeredSnapshot.result=Layered Node indirectionVersions set. - -patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer members as identifiers - -patch.genericWorkflow.result.deployed=Re-deployed {0} workflows. - -patch.redeploySubmitProcess.description=Re-deploy WCM Submit Process Definition. -patch.deploySubmitDirectProcess.description=Deploy WCM Direct Submit Process Definition. - -patch.AVMAspects.description=Changes storage of aspects on AVM Nodes. -patch.AVMAspects.result=Aspects were moved. - -patch.ReadmeTemplate.description=Deployed ReadMe Template -patch.webScriptsReadme.description=Applied ReadMe template to Web Scripts folders - -patch.AVMProperties.description=Changes storage of properties on AVM Nodes. -patch.AVMProperties.result=Properties were moved. - -patch.customModels.description=Adds 'Models' folder to Data Dictionary -patch.customMessages.description=Adds 'Messages' folder to Data Dictionary -patch.customWebClientExtension.description=Adds 'Web Client Extension' folder to Data Dictionary - -patch.customWorkflowDefs.description=Adds 'Workflow Definitions' folder to Data Dictionary. - -patch.emailContributorGroup.description=Adds the 'GROUP_EMAIL_CONTRIBUTORS' group. - -patch.avmStoreAsIdentifier.description=Reindex wca:webfolder to make wca:avmstore an identifier -patch.avmStoreAsIdentifier.result=Reindexed wca:webfolder to make wca:avmstore an identifier - -patch.avmFormPropertyIdentifier.description=Reindex wca:webform to make wca:formname an identifier -patch.avmFormPropertyIdentifier.result=Reindexed wca:webform to make wca:formname an identifier - -patch.formsFolder.description=Adds 'Forms' folder to Data Dictionary. - -patch.tagRootCategory.description=Adds 'Tags' as new top-level category root. - -patch.sitesFolder.description=Adds 'Sites' folder to Company Home. - -patch.deploymentMigration.description=Migrates deployment data to the new model. -patch.deploymentMigration.webProjectName=Migrating deployment data for web project ''{0}'' -patch.deploymentMigration.serverMigrated=Server ''{0}'' from web project ''{1}'' has been migrated -patch.deploymentMigration.reportMigrated=Deployment report for ''{0}'' from web project ''{1}'' has been migrated -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.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. - -patch.wcmPermissionPatch.description=Fix ACLs so they are only set on the staging area store. -patch.wcmPermissionPatch.result=Updated ACLs: ACLS are moved to the staging area store and removed from all other stores. They are now applied via layering. - -patch.avmWebProjectInheritPermissions.description=Break inheritance of permissions on wca:webfolder object to hide access by default. -patch.avmWebProjectInheritPermissions.result=Removed inheritance of permissions on all wca:webfolder objects. - -patch.wcmPostPermissionSnapshotPatch.description=Snapshot stores (after fixing ACLs so they are only set on the staging area store). -patch.wcmPostPermissionSnapshotPatch.result=Snapshot complete after WCM ACL changes. - -patch.updateDmPermissions.description=Update ACLs on all DM node objects to the new 3.0 permission model -patch.updateDmPermissions.result=Updated ACLs. Created {0} defining ACLs. - -patch.db-V3.0-0-CreateActivitiesExtras.description=Replaced by 'patch.db-V3.0-ActivityTables', which must run first. - -patch.createSiteStore.description=Create the AVM store for site data structure for 3.0 web-tier clients. -patch.createSiteStore.result=Created the AVM site data store. - -patch.sitePermissionRefactorPatch.description=Create permission groups for sites. -patch.sitePermissionRefactorPatch.result=Groups have been created for all sites and user's allocated accordingly. - -patch.migrateVersionStore.description=Version Store migration (from lightWeightVersionStore to version2Store) -patch.migrateVersionStore.incomplete=Version Store migration incomplete. -patch.migrateVersionStore.done=Version Store migration completed. -patch.migrateVersionStore.bypassingPatch=Bypass Version Store migration patch since scheduled to run as job - -patch.inviteEmailTemplate.description=Adds invite email template to invite space - -patch.calendarModelNamespacePatch.description=Update the Calendar model namespace URI and reindex all calendar objects. -patch.calendarModelNamespacePatch.result=Updated the Calendar model namespace URI to http://www.alfresco.org/model/calendar and reindexed {0} calendar objects. - -patch.spacesStoreGuestPermission.description=Sets READ permissions for GUEST on root node of the SpacesStore. -patch.spacesStoreGuestPermission.result=Granted READ permissions for GUEST on root node of the SpacesStore. - -patch.administratorGroup.description=Adds the 'ALFRESCO_ADMINISTRATORS' group. - -patch.resetWCMToGroupBasedPermissionsPatch.description=Reset WCM to group based permissions. -patch.resetWCMToGroupBasedPermissionsPatch.result=WCM reset to group based permissions. - -patch.migrateVersionStoreUpdateCounter.description=Update internal version2Store counter (if needed). -patch.migrateVersionStoreUpdateCounter.result=Update internal version2Store counter (if needed): {0} - -patch.invitationMigration.description=Migrate invitations from old invite service to invitation service -patch.invitationMigration.result=Migrated {0} invitations from old invite service to invitation service. -patch.invitationMigration.no_invites=No invitations require migrating old invite service to invitation service. - -patch.webSiteAddModerated.description=Changing Web Site visibility from a boolean to enum. -patch.webSiteAddModerated.result=Changed Web Site visibility. - -patch.mtShareExistingTenants.description=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result.not_applicable=Patch applied, although no changes made since MT is not enabled. - -patch.redeployInvitationProcess.description=Re-deploy Invitation Process Definitions. - -patch.imapFolders.description=Creates folders tree necessary for IMAP functionality -patch.imapFolders.result.exists=The 'Imap Configs' folder already exists -patch.imapFolders.result.created=The 'Imap Configs' folder was successfully created - -patch.zonedAuthorities.description=Adds the remodelled cm:authority container to the spaces store - -patch.authorityMigration.description=Copies any old authorities from the user store to the spaces store. -patch.authorityMigration.process.name=Authority Migration -patch.authorityMigration.warning.assoc=Ignoring group memberships of non-existent user {1} -patch.authorityMigration.result=Migrated {0} groups and {1} group associations to the spaces store. - -patch.authorityDefaultZonesPatch.description=Adds groups and people to the appropriate zones for wcm, share and everything else. -patch.authorityDefaultZonesPatch.result=Unzoned groups and people added to the default zones. -patch.authorityDefaultZonesPatch.users= Adding users to zones ... -patch.authorityDefaultZonesPatch.groups= Adding groups to zones ... - -patch.fixNameCrcValues.description=Fixes name and qname CRC32 values to match UTF-8 encoding. -patch.fixNameCrcValues.result=Fixed CRC32 values for UTF-8 encoding for {0} node child associations. See file {1} for details. -patch.fixNameCrcValues.fixed=Updated CRC32 values for association ID {0}, name ''{1}'': {2} -> {3}, qname ''{4}'': {5} -> {6}. -patch.fixNameCrcValues.unableToChange=Failed to update the CRC32 value for association ID {0}: \n Node name: {1} \n name CRC old: {2} \n name CRC new: {3} \n qname: {4} \n qname CRC old: {5} \n qname CRC new: {6} \n Error: {7} -patch.fixNameCrcValues.fixingLocalname=Fixing invalid localname for association ID {0}: \n Was: ''{1}'' \n Now: ''{2}'' -patch.fixNameCrcValues.associationTypeNotDefined=Association type ''{0}'' has not been defined for child association ID {1}. -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.result2=No people were missing the 'cm:sizeCurrent' property. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.transferDefinitions.description=Add transfer definitions folder to data dictionary. -patch.transferDefinitions.result=Transfer definitions folder added to data dictionary. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.thumbnailsAssocQName.description=Update the 'cm:thumbnails' association QName to 'rn:rendition'. - -patch.convertContentUrls.description=Converts pre-3.2 content URLs to use the alf_content_data table. The conversion work can also be done on a schedule; please contact Alfresco Support for further details. -patch.convertContentUrls.bypassingPatch=Content URL conversion was NOT performed by this patch. Activate the scheduled job 'contentUrlConverterTrigger'. -patch.convertContentUrls.start=Content URL conversion progress: -patch.convertContentUrls.error=Content URL conversion failed: {0} -patch.convertContentUrls.inProgress=Content URL conversion increment completed. Awaiting next scheduled call... -patch.convertContentUrls.done=Content URL conversion completed. -patch.convertContentUrls.adm.start=\tProcessing ADM Content URLs. -patch.convertContentUrls.adm.done=\tFinished processing ADM nodes up to ID {0}. -patch.convertContentUrls.avm.start=\tProcessing AVM Content URLs. -patch.convertContentUrls.avm.done=\tFinished processing AVM nodes up to ID {0}. -patch.convertContentUrls.store.start=\tReading content URLs from store {0}. -patch.convertContentUrls.store.readOnly=\tNo content URLs will be marked for deletion. The content store is read-only. -patch.convertContentUrls.store.pending=\tContent URLs will be marked for deletion once the URL conversion process is complete. -patch.convertContentUrls.store.noSupport=\tNo content URLs will be marked for deletion. The store does not support URL enumeration. -patch.convertContentUrls.store.progress=\t\tProcessed {0} content URLs from store. -patch.convertContentUrls.store.scheduled=\tScheduled {0} content URLs for deletion from store: {1} -patch.convertContentUrls.store.done=This job is complete. Deactivate the scheduled job 'contentUrlConverterTrigger'. - -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.unableToChange=Failed to update the CRC32 value for authority: \n Authority: {0} \n Error: {1} - -patch.updateMimetypes1.description=Fix mimetypes for Excel and Powerpoint. -patch.updateMimetypes2.description=Fix mimetypes for Excel and Powerpoint. - -patch.db-V3.2-AddFKIndexes.description=Fixes ALF-3189: Added missing FK indexes. Note: The script is empty for MySQL. - -patch.eliminateDuplicates.description=Fixes ALF-4203: Searches for AVM duplicate nodes and changes their name - -patch.migrateAttrTenants.description=Migrate old Tenant attributes -patch.migrateAttrTenants.result=Processed {0} attributes - -patch.migrateAttrAVMLocks.description=Migrate old AVM Lock attributes -patch.migrateAttrAVMLocks.result=Processed {0} attributes - -patch.migrateAttrPropBackedBeans.description=Migrate old Property-Backed Bean component attributes -patch.migrateAttrPropBackedBeans.result=Processed {0} attributes ({1} properties) - -patch.migrateAttrChainingURS.description=Migrate old Chaining User Registry Synchronizer attributes -patch.migrateAttrChainingURS.result=Processed {0} attributes - -patch.migrateAttrDelete.description=Delete old attributes (if any) after they have been migrated -patch.migrateAttrDelete.result=Old attributes were deleted (if any) - -patch.transfer.targetrulefolder.description=Creates the transfer target rule folder for the default transfer group. - -patch.transfer.targetrule.description=Creates the transfer target rule for the default transfer group. - -patch.actions.scheduledfolder.description=Creates the scheduled actions folder in the Data Dictionary. - -patch.removingLinkValidationMetadata.description=Fixes ALF-5185: Removes all Link Validation reports from schema diff --git a/config/alfresco/messages/patch-service_fr_FR.properties b/config/alfresco/messages/patch-service_fr_FR.properties deleted file mode 100755 index f8f7075084..0000000000 --- a/config/alfresco/messages/patch-service_fr_FR.properties +++ /dev/null @@ -1,379 +0,0 @@ -# PatchService messages -patch.service.preceeded_by_alternative=Preceded by alternative patch ''{0}''. -patch.service.not_relevant=Not relevant to schema {0} -patch.executer.checking=Checking for patches to apply ... -patch.service.applying_patch=\tApplying patch ''{0}'' ({1}). -patch.progress=\t\tPatch {0} {1}% complete, estimated complete at {2}. -patch.validation.failed=Validation of patch ''{0}'' failed. Patch is applicable to a newer schema than the schema of this build ({1}).\nfixesToSchema: {2}\ntargetSchema: {3}.\nIf this patch should always be run once on every installation, please ensure that the ''fixesToSchema'' value is set to '''${version.schema}'''. -patch.executer.no_patches_required=No patches were required. -patch.executer.system_readonly=Patches cannot be applied to a read-only system. Possible incompatibilities may exist between the application code and the existing data. -patch.executer.not_executed =\n=== Recorded patch (not executed) === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.executed =\n=== Applied patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.failed =\n=== Failed to apply patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.noLongerSupportedPatch.err.use_incremental_upgrade = \nPatch ''{0}'' was last supported on version {1}.\n Please follow an incremental upgrade using version {2}. - -# General patch messages - -patch.genericBootstrap.result.exists=Bootstrap location already exists: {0} -patch.genericBootstrap.result.created=Imported view into bootstrap location: {0} ({1}) -patch.genericBootstrap.err.multiple_found=Multiple nodes found: {0} - -patch.general.property_not_set=Patch property ''{0}'' has not been set on this patch: {1} - -patch.QNamePatch.result=Successfully updated the ''{0}'' QName to ''{1}''. - -patch.genericMimetypeUpdate.start=Updating mimetypes. -patch.genericMimetypeUpdate.updated=\n\tUpdated {0} content references with mimetype ''{1}'' to use ''{2}''. -patch.genericMimetypeUpdate.indexed=\n\tIndexed {0} nodes in store ''{1}''. -patch.genericMimetypeUpdate.done=\n\tFinished updating mimetypes. -patch.genericMimetypeUpdate.doneReindex=\n\tFinished updating mimetypes. Selective reindexing was disabled; a reindex is required to search for the new mimetype(s). - -# Individual patch messages - -patch.noOpPatch.description=A placeholder patch; usually marks a superceded patch. -patch.noOpPatch.result=No-op patch - -patch.marker.description=Marker patch to record installations and upgrades -patch.marker.result=Marker patch applied - -patch.savedSearchesFolder.description=Ensures the existence of the 'Saved Searches' folder. -patch.savedSearchesFolder.result.exists=The saved searches folder already exists: {0} -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.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.authoritiesFolder.description=Ensures the existence of the user authorities folder [JIRA: AR-497]. - -patch.authoritiesFolderPermission.description=Ensures group authorities are visible to everyone. - -patch.guestUser.description=Add the guest user, guest home space; and fix permissions on company home, guest home and guest person. -patch.guestUser.result=Added guest user and fixed permissions. - -patch.fixNodeSerializableValues.description=Ensure that property values are not stored as Serializable if at all possible -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.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.guestPersonPermission.description=Change Guest Person permission from 'Consumer' to 'Read' -patch.guestPersonPermission.result=Updated Guest Person permission from 'Consumer' to 'Read' - -patch.spacesRootPermission.description=Change Spaces store root permission from 'Consumer' to 'Read' -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.forumsIcons.description=Updates forums icon references -patch.forumsIcons.result=Updated {0} icon references - -patch.emailTemplatesFolder.description=Ensures the existence of the 'Email Templates' folder. -patch.emailTemplatesFolder.result.exists=The email templates folder already exists: {0} -patch.emailTemplatesFolder.result.created=The email templates folder was successfully created: {0} - -patch.emailInviteAndNotifyTemplatesFolder.description=Ensures the existence of the 'Email Invite Templates' and 'Email Notify Templates' folders. -patch.emailNotifyTemplatesFolder.result.exists=The Email Notify Templates folder already exists: {0} -patch.emailNotifyTemplatesFolder.result.created=The Email Notify Templates folder was successfully created: {0} -patch.emailInviteTemplatesFolder.result.exists=The Email Invite Templates folder already exists: {0} -patch.emailInviteTemplatesFolder.result.created=The Email Invite Templates folder was successfully created: {0} - -patch.emailTemplatesContent.description=Loads the email templates into the Email Templates folder. -patch.emailTemplatesContent.result=Imported the Email Templates into the default folder. - -patch.descriptorUpdate.description=Update Repository descriptor -patch.descriptorUpdate.result=Repository descriptor updated - -patch.scriptsFolder.description=Ensures the existence of the 'Scripts' folder. -patch.scriptsFolder.result.exists=The scripts folder already exists: {0} -patch.scriptsFolder.result.created=The scripts folder was successfully created: {0} - -patch.topLevelGroupParentChildAssociationTypePatch.description=Ensure top level groups have the correct child association type. -patch.topLevelGroupParentChildAssociationTypePatch.result=Fixed {0} top level groups child association types. -patch.topLevelGroupParentChildAssociationTypePatch.err.sys_path_not_found=Required authority system path not found: {0} -patch.topLevelGroupParentChildAssociationTypePatch.err.auth_path_not_found=Required authority path not found: {0} - -patch.actionRuleDecouplingPatch.description=Migrate existing rules to the updated model where rules are decoupled from actions. -patch.actionRuleDecouplingPatch.result=Updated {0} rules. - -patch.systemWorkflowFolder.description=Ensures the existence of the system workflow container. -patch.systemWorkflowFolder.result.created=Created system workflow container {0}. - -patch.rssTemplatesFolder.description=Ensures the existence of the 'RSS Templates' folder. -patch.rssTemplatesFolder.result.exists=The RSS Templates folder already exists: {0}. Re-applying guest permissions. -patch.rssTemplatesFolder.result.created=The RSS Templates folder was successfully created: {0} - -patch.rendition.rendering_actions.exists=The Rendering Actions folder already exists: {0}. -patch.rendition.rendering_actions.created=The Rendering Actions folder was successfully created: {0} -patch.rendition.rendering_actions.description=Creates the Rendering Actions folder. - -patch.replication.replication_actions.exists=The Replication Actions folder already exists: {0}. -patch.replication.replication_actions.created=The Replication Actions folder was successfully created: {0} -patch.replication.replication_actions.description=Creates the Replication Actions folder. - -patch.uifacetsAspectRemovalPatch.description=Removes the incorrectly applied uifacets aspect from presentation template files. -patch.uifacetsAspectRemovalPatch.updated=Successfully removed the uifacets aspect from {0} presentation template files. - -patch.guestPersonPermission2.description=Change Guest Person permission to visible by all users as 'Consumer'. -patch.guestPersonPermission2.result=Updated Guest Person permission to visible by all users as 'Consumer'. - -patch.schemaUpgradeScript.description=Ensures that the database upgrade script has been run. -patch.schemaUpgradeScript.err.not_executed=The schema upgrade script, ''{0}'', has not been run against this database. - -patch.uniqueChildName.description=Checks and renames duplicate children. -patch.uniqueChildName.copyOf=({0}-{1}) -patch.uniqueChildName.result=Checked {0} associations and fixed {1} duplicates. See file {2} for details. -patch.uniqueChildName.err.unable_to_fix=Auto-fixing of duplicate names failed. See file {0} for details. - -patch.invalidNameEnding.description=Fixes names ending with a space or full stop. -patch.invalidNameEnding.result=Fixed {0} names ending with a space or full stop. See file {1} for details. -patch.invalidNameEnding.err.unable_to_fix=Auto-fixing of names ending with a space or full stop failed. See file {0} for details. -patch.invalidNameEnding.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemDescriptorContent.description=Adds the version properties content to the system descriptor. -patch.systemDescriptorContent.result=Added the version properties content to the system descriptor. -patch.systemDescriptorContent.err.no_version_properties=The version.properties resource could not be found. -patch.systemDescriptorContent.err.no_descriptor=The system descriptor could not be found. - -patch.versionHistoryPerformance.description=Improves the performance of version history lookups. -patch.versionHistoryPerformance.result=Updated {0} version history objects to improve performance. - -patch.multilingualBootstrap.description=Bootstraps the node that will hold the multilingual containers. - -patch.wcmFolders.description=Ensures the existance of the WCM specific 'Web Projects' and 'Web Forms' folders. -patch.wcmFolders.webprojects.result.exists=The Web Projects folder already exists: {0} -patch.wcmFolders.webprojects.result.created=The Web Projects folder was successfully created: {0} -patch.wcmFolders.webforms.result.exists=The Web Forms folder already exists: {0} -patch.wcmFolders.webforms.result.created=The Web Forms folder was successfully created: {0} - -patch.linkNodeExtension.description=Fixes link node file extensions to have a .url extension. -patch.linkNodeExtension.result=Fixed {0} link node file extensions. See file {1} for details. -patch.linkNodeExtension.err.unable_to_fix=Auto-fixing of link node file extensions failed. See file {0} for details. -patch.linkNodeExtension.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemRegistryBootstrap.description=Bootstraps the node that will hold system registry metadata. - -patch.userAndPersonUserNamesAsIdentifiers.description=Reindex usr:user and cm:person uids as identifiers -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.groupNamesAsIdentifiers.description=Reindex usr:authorityContainer gids as identifiers -patch.groupNamesAsIdentifiers.result=Reindexed usr:authorityContainer with identifiers - -patch.invalidUserPersonAndGroup.description=Fix up invalid uids for people and users; and invalid gids for groups -patch.invalidUserPersonAndGroup.result=Fixed ''{0}'' invalid user nodes, ''{1}'' invalid person nodes and ''{2}'' invalid authority nodes. - -patch.AVMGuidPatch.description=Set GUIDs on AVM nodes. -patch.AVMGuidPatch.result=AVM GUIDS set. - -patch.webscripts.description=Adds Web Scripts to Data Dictionary. -patch.webscripts2.description=Adds Web Scripts (second set) to Data Dictionary. -patch.webscripts3.description=Update Web Scripts ReadMe. -patch.webscriptsExtension.description=Adds Web Scripts Extension to Data Dictionary. - -patch.AVMLayeredSnapshot.description=Set indirectionVersion on Layered Nodes. -patch.AVMLayeredSnapshot.result=Layered Node indirectionVersions set. - -patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer members as identifiers - -patch.genericWorkflow.result.deployed=Re-deployed {0} workflows. - -patch.redeploySubmitProcess.description=Re-deploy WCM Submit Process Definition. -patch.deploySubmitDirectProcess.description=Deploy WCM Direct Submit Process Definition. - -patch.AVMAspects.description=Changes storage of aspects on AVM Nodes. -patch.AVMAspects.result=Aspects were moved. - -patch.ReadmeTemplate.description=Deployed ReadMe Template -patch.webScriptsReadme.description=Applied ReadMe template to Web Scripts folders - -patch.AVMProperties.description=Changes storage of properties on AVM Nodes. -patch.AVMProperties.result=Properties were moved. - -patch.customModels.description=Adds 'Models' folder to Data Dictionary -patch.customMessages.description=Adds 'Messages' folder to Data Dictionary -patch.customWebClientExtension.description=Adds 'Web Client Extension' folder to Data Dictionary - -patch.customWorkflowDefs.description=Adds 'Workflow Definitions' folder to Data Dictionary. - -patch.emailContributorGroup.description=Adds the 'GROUP_EMAIL_CONTRIBUTORS' group. - -patch.avmStoreAsIdentifier.description=Reindex wca:webfolder to make wca:avmstore an identifier -patch.avmStoreAsIdentifier.result=Reindexed wca:webfolder to make wca:avmstore an identifier - -patch.avmFormPropertyIdentifier.description=Reindex wca:webform to make wca:formname an identifier -patch.avmFormPropertyIdentifier.result=Reindexed wca:webform to make wca:formname an identifier - -patch.formsFolder.description=Adds 'Forms' folder to Data Dictionary. - -patch.tagRootCategory.description=Adds 'Tags' as new top-level category root. - -patch.sitesFolder.description=Adds 'Sites' folder to Company Home. - -patch.deploymentMigration.description=Migrates deployment data to the new model. -patch.deploymentMigration.webProjectName=Migrating deployment data for web project ''{0}'' -patch.deploymentMigration.serverMigrated=Server ''{0}'' from web project ''{1}'' has been migrated -patch.deploymentMigration.reportMigrated=Deployment report for ''{0}'' from web project ''{1}'' has been migrated -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.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. - -patch.wcmPermissionPatch.description=Fix ACLs so they are only set on the staging area store. -patch.wcmPermissionPatch.result=Updated ACLs: ACLS are moved to the staging area store and removed from all other stores. They are now applied via layering. - -patch.avmWebProjectInheritPermissions.description=Break inheritance of permissions on wca:webfolder object to hide access by default. -patch.avmWebProjectInheritPermissions.result=Removed inheritance of permissions on all wca:webfolder objects. - -patch.wcmPostPermissionSnapshotPatch.description=Snapshot stores (after fixing ACLs so they are only set on the staging area store). -patch.wcmPostPermissionSnapshotPatch.result=Snapshot complete after WCM ACL changes. - -patch.updateDmPermissions.description=Update ACLs on all DM node objects to the new 3.0 permission model -patch.updateDmPermissions.result=Updated ACLs. Created {0} defining ACLs. - -patch.db-V3.0-0-CreateActivitiesExtras.description=Replaced by 'patch.db-V3.0-ActivityTables', which must run first. - -patch.createSiteStore.description=Create the AVM store for site data structure for 3.0 web-tier clients. -patch.createSiteStore.result=Created the AVM site data store. - -patch.sitePermissionRefactorPatch.description=Create permission groups for sites. -patch.sitePermissionRefactorPatch.result=Groups have been created for all sites and user's allocated accordingly. - -patch.migrateVersionStore.description=Version Store migration (from lightWeightVersionStore to version2Store) -patch.migrateVersionStore.incomplete=Version Store migration incomplete. -patch.migrateVersionStore.done=Version Store migration completed. -patch.migrateVersionStore.bypassingPatch=Bypass Version Store migration patch since scheduled to run as job - -patch.inviteEmailTemplate.description=Adds invite email template to invite space - -patch.calendarModelNamespacePatch.description=Update the Calendar model namespace URI and reindex all calendar objects. -patch.calendarModelNamespacePatch.result=Updated the Calendar model namespace URI to http://www.alfresco.org/model/calendar and reindexed {0} calendar objects. - -patch.spacesStoreGuestPermission.description=Sets READ permissions for GUEST on root node of the SpacesStore. -patch.spacesStoreGuestPermission.result=Granted READ permissions for GUEST on root node of the SpacesStore. - -patch.administratorGroup.description=Adds the 'ALFRESCO_ADMINISTRATORS' group. - -patch.resetWCMToGroupBasedPermissionsPatch.description=Reset WCM to group based permissions. -patch.resetWCMToGroupBasedPermissionsPatch.result=WCM reset to group based permissions. - -patch.migrateVersionStoreUpdateCounter.description=Update internal version2Store counter (if needed). -patch.migrateVersionStoreUpdateCounter.result=Update internal version2Store counter (if needed): {0} - -patch.invitationMigration.description=Migrate invitations from old invite service to invitation service -patch.invitationMigration.result=Migrated {0} invitations from old invite service to invitation service. -patch.invitationMigration.no_invites=No invitations require migrating old invite service to invitation service. - -patch.webSiteAddModerated.description=Changing Web Site visibility from a boolean to enum. -patch.webSiteAddModerated.result=Changed Web Site visibility. - -patch.mtShareExistingTenants.description=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result.not_applicable=Patch applied, although no changes made since MT is not enabled. - -patch.redeployInvitationProcess.description=Re-deploy Invitation Process Definitions. - -patch.imapFolders.description=Creates folders tree necessary for IMAP functionality -patch.imapFolders.result.exists=The 'Imap Configs' folder already exists -patch.imapFolders.result.created=The 'Imap Configs' folder was successfully created - -patch.zonedAuthorities.description=Adds the remodelled cm:authority container to the spaces store - -patch.authorityMigration.description=Copies any old authorities from the user store to the spaces store. -patch.authorityMigration.process.name=Authority Migration -patch.authorityMigration.warning.assoc=Ignoring group memberships of non-existent user {1} -patch.authorityMigration.result=Migrated {0} groups and {1} group associations to the spaces store. - -patch.authorityDefaultZonesPatch.description=Adds groups and people to the appropriate zones for wcm, share and everything else. -patch.authorityDefaultZonesPatch.result=Unzoned groups and people added to the default zones. -patch.authorityDefaultZonesPatch.users= Adding users to zones ... -patch.authorityDefaultZonesPatch.groups= Adding groups to zones ... - -patch.fixNameCrcValues.description=Fixes name and qname CRC32 values to match UTF-8 encoding. -patch.fixNameCrcValues.result=Fixed CRC32 values for UTF-8 encoding for {0} node child associations. See file {1} for details. -patch.fixNameCrcValues.fixed=Updated CRC32 values for association ID {0}, name ''{1}'': {2} -> {3}, qname ''{4}'': {5} -> {6}. -patch.fixNameCrcValues.unableToChange=Failed to update the CRC32 value for association ID {0}: \n Node name: {1} \n name CRC old: {2} \n name CRC new: {3} \n qname: {4} \n qname CRC old: {5} \n qname CRC new: {6} \n Error: {7} -patch.fixNameCrcValues.fixingLocalname=Fixing invalid localname for association ID {0}: \n Was: ''{1}'' \n Now: ''{2}'' -patch.fixNameCrcValues.associationTypeNotDefined=Association type ''{0}'' has not been defined for child association ID {1}. -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.result2=No people were missing the 'cm:sizeCurrent' property. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.transferDefinitions.description=Add transfer definitions folder to data dictionary. -patch.transferDefinitions.result=Transfer definitions folder added to data dictionary. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.thumbnailsAssocQName.description=Update the 'cm:thumbnails' association QName to 'rn:rendition'. - -patch.convertContentUrls.description=Converts pre-3.2 content URLs to use the alf_content_data table. The conversion work can also be done on a schedule; please contact Alfresco Support for further details. -patch.convertContentUrls.bypassingPatch=Content URL conversion was NOT performed by this patch. Activate the scheduled job 'contentUrlConverterTrigger'. -patch.convertContentUrls.start=Content URL conversion progress: -patch.convertContentUrls.error=Content URL conversion failed: {0} -patch.convertContentUrls.inProgress=Content URL conversion increment completed. Awaiting next scheduled call... -patch.convertContentUrls.done=Content URL conversion completed. -patch.convertContentUrls.adm.start=\tProcessing ADM Content URLs. -patch.convertContentUrls.adm.done=\tFinished processing ADM nodes up to ID {0}. -patch.convertContentUrls.avm.start=\tProcessing AVM Content URLs. -patch.convertContentUrls.avm.done=\tFinished processing AVM nodes up to ID {0}. -patch.convertContentUrls.store.start=\tReading content URLs from store {0}. -patch.convertContentUrls.store.readOnly=\tNo content URLs will be marked for deletion. The content store is read-only. -patch.convertContentUrls.store.pending=\tContent URLs will be marked for deletion once the URL conversion process is complete. -patch.convertContentUrls.store.noSupport=\tNo content URLs will be marked for deletion. The store does not support URL enumeration. -patch.convertContentUrls.store.progress=\t\tProcessed {0} content URLs from store. -patch.convertContentUrls.store.scheduled=\tScheduled {0} content URLs for deletion from store: {1} -patch.convertContentUrls.store.done=This job is complete. Deactivate the scheduled job 'contentUrlConverterTrigger'. - -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.unableToChange=Failed to update the CRC32 value for authority: \n Authority: {0} \n Error: {1} - -patch.updateMimetypes1.description=Fix mimetypes for Excel and Powerpoint. -patch.updateMimetypes2.description=Fix mimetypes for Excel and Powerpoint. - -patch.db-V3.2-AddFKIndexes.description=Fixes ALF-3189: Added missing FK indexes. Note: The script is empty for MySQL. - -patch.eliminateDuplicates.description=Fixes ALF-4203: Searches for AVM duplicate nodes and changes their name - -patch.migrateAttrTenants.description=Migrate old Tenant attributes -patch.migrateAttrTenants.result=Processed {0} attributes - -patch.migrateAttrAVMLocks.description=Migrate old AVM Lock attributes -patch.migrateAttrAVMLocks.result=Processed {0} attributes - -patch.migrateAttrPropBackedBeans.description=Migrate old Property-Backed Bean component attributes -patch.migrateAttrPropBackedBeans.result=Processed {0} attributes ({1} properties) - -patch.migrateAttrChainingURS.description=Migrate old Chaining User Registry Synchronizer attributes -patch.migrateAttrChainingURS.result=Processed {0} attributes - -patch.migrateAttrDelete.description=Delete old attributes (if any) after they have been migrated -patch.migrateAttrDelete.result=Old attributes were deleted (if any) - -patch.transfer.targetrulefolder.description=Creates the transfer target rule folder for the default transfer group. - -patch.transfer.targetrule.description=Creates the transfer target rule for the default transfer group. - -patch.actions.scheduledfolder.description=Creates the scheduled actions folder in the Data Dictionary. - -patch.removingLinkValidationMetadata.description=Fixes ALF-5185: Removes all Link Validation reports from schema diff --git a/config/alfresco/messages/patch-service_it_IT.properties b/config/alfresco/messages/patch-service_it_IT.properties deleted file mode 100755 index f8f7075084..0000000000 --- a/config/alfresco/messages/patch-service_it_IT.properties +++ /dev/null @@ -1,379 +0,0 @@ -# PatchService messages -patch.service.preceeded_by_alternative=Preceded by alternative patch ''{0}''. -patch.service.not_relevant=Not relevant to schema {0} -patch.executer.checking=Checking for patches to apply ... -patch.service.applying_patch=\tApplying patch ''{0}'' ({1}). -patch.progress=\t\tPatch {0} {1}% complete, estimated complete at {2}. -patch.validation.failed=Validation of patch ''{0}'' failed. Patch is applicable to a newer schema than the schema of this build ({1}).\nfixesToSchema: {2}\ntargetSchema: {3}.\nIf this patch should always be run once on every installation, please ensure that the ''fixesToSchema'' value is set to '''${version.schema}'''. -patch.executer.no_patches_required=No patches were required. -patch.executer.system_readonly=Patches cannot be applied to a read-only system. Possible incompatibilities may exist between the application code and the existing data. -patch.executer.not_executed =\n=== Recorded patch (not executed) === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.executed =\n=== Applied patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.failed =\n=== Failed to apply patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.noLongerSupportedPatch.err.use_incremental_upgrade = \nPatch ''{0}'' was last supported on version {1}.\n Please follow an incremental upgrade using version {2}. - -# General patch messages - -patch.genericBootstrap.result.exists=Bootstrap location already exists: {0} -patch.genericBootstrap.result.created=Imported view into bootstrap location: {0} ({1}) -patch.genericBootstrap.err.multiple_found=Multiple nodes found: {0} - -patch.general.property_not_set=Patch property ''{0}'' has not been set on this patch: {1} - -patch.QNamePatch.result=Successfully updated the ''{0}'' QName to ''{1}''. - -patch.genericMimetypeUpdate.start=Updating mimetypes. -patch.genericMimetypeUpdate.updated=\n\tUpdated {0} content references with mimetype ''{1}'' to use ''{2}''. -patch.genericMimetypeUpdate.indexed=\n\tIndexed {0} nodes in store ''{1}''. -patch.genericMimetypeUpdate.done=\n\tFinished updating mimetypes. -patch.genericMimetypeUpdate.doneReindex=\n\tFinished updating mimetypes. Selective reindexing was disabled; a reindex is required to search for the new mimetype(s). - -# Individual patch messages - -patch.noOpPatch.description=A placeholder patch; usually marks a superceded patch. -patch.noOpPatch.result=No-op patch - -patch.marker.description=Marker patch to record installations and upgrades -patch.marker.result=Marker patch applied - -patch.savedSearchesFolder.description=Ensures the existence of the 'Saved Searches' folder. -patch.savedSearchesFolder.result.exists=The saved searches folder already exists: {0} -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.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.authoritiesFolder.description=Ensures the existence of the user authorities folder [JIRA: AR-497]. - -patch.authoritiesFolderPermission.description=Ensures group authorities are visible to everyone. - -patch.guestUser.description=Add the guest user, guest home space; and fix permissions on company home, guest home and guest person. -patch.guestUser.result=Added guest user and fixed permissions. - -patch.fixNodeSerializableValues.description=Ensure that property values are not stored as Serializable if at all possible -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.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.guestPersonPermission.description=Change Guest Person permission from 'Consumer' to 'Read' -patch.guestPersonPermission.result=Updated Guest Person permission from 'Consumer' to 'Read' - -patch.spacesRootPermission.description=Change Spaces store root permission from 'Consumer' to 'Read' -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.forumsIcons.description=Updates forums icon references -patch.forumsIcons.result=Updated {0} icon references - -patch.emailTemplatesFolder.description=Ensures the existence of the 'Email Templates' folder. -patch.emailTemplatesFolder.result.exists=The email templates folder already exists: {0} -patch.emailTemplatesFolder.result.created=The email templates folder was successfully created: {0} - -patch.emailInviteAndNotifyTemplatesFolder.description=Ensures the existence of the 'Email Invite Templates' and 'Email Notify Templates' folders. -patch.emailNotifyTemplatesFolder.result.exists=The Email Notify Templates folder already exists: {0} -patch.emailNotifyTemplatesFolder.result.created=The Email Notify Templates folder was successfully created: {0} -patch.emailInviteTemplatesFolder.result.exists=The Email Invite Templates folder already exists: {0} -patch.emailInviteTemplatesFolder.result.created=The Email Invite Templates folder was successfully created: {0} - -patch.emailTemplatesContent.description=Loads the email templates into the Email Templates folder. -patch.emailTemplatesContent.result=Imported the Email Templates into the default folder. - -patch.descriptorUpdate.description=Update Repository descriptor -patch.descriptorUpdate.result=Repository descriptor updated - -patch.scriptsFolder.description=Ensures the existence of the 'Scripts' folder. -patch.scriptsFolder.result.exists=The scripts folder already exists: {0} -patch.scriptsFolder.result.created=The scripts folder was successfully created: {0} - -patch.topLevelGroupParentChildAssociationTypePatch.description=Ensure top level groups have the correct child association type. -patch.topLevelGroupParentChildAssociationTypePatch.result=Fixed {0} top level groups child association types. -patch.topLevelGroupParentChildAssociationTypePatch.err.sys_path_not_found=Required authority system path not found: {0} -patch.topLevelGroupParentChildAssociationTypePatch.err.auth_path_not_found=Required authority path not found: {0} - -patch.actionRuleDecouplingPatch.description=Migrate existing rules to the updated model where rules are decoupled from actions. -patch.actionRuleDecouplingPatch.result=Updated {0} rules. - -patch.systemWorkflowFolder.description=Ensures the existence of the system workflow container. -patch.systemWorkflowFolder.result.created=Created system workflow container {0}. - -patch.rssTemplatesFolder.description=Ensures the existence of the 'RSS Templates' folder. -patch.rssTemplatesFolder.result.exists=The RSS Templates folder already exists: {0}. Re-applying guest permissions. -patch.rssTemplatesFolder.result.created=The RSS Templates folder was successfully created: {0} - -patch.rendition.rendering_actions.exists=The Rendering Actions folder already exists: {0}. -patch.rendition.rendering_actions.created=The Rendering Actions folder was successfully created: {0} -patch.rendition.rendering_actions.description=Creates the Rendering Actions folder. - -patch.replication.replication_actions.exists=The Replication Actions folder already exists: {0}. -patch.replication.replication_actions.created=The Replication Actions folder was successfully created: {0} -patch.replication.replication_actions.description=Creates the Replication Actions folder. - -patch.uifacetsAspectRemovalPatch.description=Removes the incorrectly applied uifacets aspect from presentation template files. -patch.uifacetsAspectRemovalPatch.updated=Successfully removed the uifacets aspect from {0} presentation template files. - -patch.guestPersonPermission2.description=Change Guest Person permission to visible by all users as 'Consumer'. -patch.guestPersonPermission2.result=Updated Guest Person permission to visible by all users as 'Consumer'. - -patch.schemaUpgradeScript.description=Ensures that the database upgrade script has been run. -patch.schemaUpgradeScript.err.not_executed=The schema upgrade script, ''{0}'', has not been run against this database. - -patch.uniqueChildName.description=Checks and renames duplicate children. -patch.uniqueChildName.copyOf=({0}-{1}) -patch.uniqueChildName.result=Checked {0} associations and fixed {1} duplicates. See file {2} for details. -patch.uniqueChildName.err.unable_to_fix=Auto-fixing of duplicate names failed. See file {0} for details. - -patch.invalidNameEnding.description=Fixes names ending with a space or full stop. -patch.invalidNameEnding.result=Fixed {0} names ending with a space or full stop. See file {1} for details. -patch.invalidNameEnding.err.unable_to_fix=Auto-fixing of names ending with a space or full stop failed. See file {0} for details. -patch.invalidNameEnding.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemDescriptorContent.description=Adds the version properties content to the system descriptor. -patch.systemDescriptorContent.result=Added the version properties content to the system descriptor. -patch.systemDescriptorContent.err.no_version_properties=The version.properties resource could not be found. -patch.systemDescriptorContent.err.no_descriptor=The system descriptor could not be found. - -patch.versionHistoryPerformance.description=Improves the performance of version history lookups. -patch.versionHistoryPerformance.result=Updated {0} version history objects to improve performance. - -patch.multilingualBootstrap.description=Bootstraps the node that will hold the multilingual containers. - -patch.wcmFolders.description=Ensures the existance of the WCM specific 'Web Projects' and 'Web Forms' folders. -patch.wcmFolders.webprojects.result.exists=The Web Projects folder already exists: {0} -patch.wcmFolders.webprojects.result.created=The Web Projects folder was successfully created: {0} -patch.wcmFolders.webforms.result.exists=The Web Forms folder already exists: {0} -patch.wcmFolders.webforms.result.created=The Web Forms folder was successfully created: {0} - -patch.linkNodeExtension.description=Fixes link node file extensions to have a .url extension. -patch.linkNodeExtension.result=Fixed {0} link node file extensions. See file {1} for details. -patch.linkNodeExtension.err.unable_to_fix=Auto-fixing of link node file extensions failed. See file {0} for details. -patch.linkNodeExtension.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemRegistryBootstrap.description=Bootstraps the node that will hold system registry metadata. - -patch.userAndPersonUserNamesAsIdentifiers.description=Reindex usr:user and cm:person uids as identifiers -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.groupNamesAsIdentifiers.description=Reindex usr:authorityContainer gids as identifiers -patch.groupNamesAsIdentifiers.result=Reindexed usr:authorityContainer with identifiers - -patch.invalidUserPersonAndGroup.description=Fix up invalid uids for people and users; and invalid gids for groups -patch.invalidUserPersonAndGroup.result=Fixed ''{0}'' invalid user nodes, ''{1}'' invalid person nodes and ''{2}'' invalid authority nodes. - -patch.AVMGuidPatch.description=Set GUIDs on AVM nodes. -patch.AVMGuidPatch.result=AVM GUIDS set. - -patch.webscripts.description=Adds Web Scripts to Data Dictionary. -patch.webscripts2.description=Adds Web Scripts (second set) to Data Dictionary. -patch.webscripts3.description=Update Web Scripts ReadMe. -patch.webscriptsExtension.description=Adds Web Scripts Extension to Data Dictionary. - -patch.AVMLayeredSnapshot.description=Set indirectionVersion on Layered Nodes. -patch.AVMLayeredSnapshot.result=Layered Node indirectionVersions set. - -patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer members as identifiers - -patch.genericWorkflow.result.deployed=Re-deployed {0} workflows. - -patch.redeploySubmitProcess.description=Re-deploy WCM Submit Process Definition. -patch.deploySubmitDirectProcess.description=Deploy WCM Direct Submit Process Definition. - -patch.AVMAspects.description=Changes storage of aspects on AVM Nodes. -patch.AVMAspects.result=Aspects were moved. - -patch.ReadmeTemplate.description=Deployed ReadMe Template -patch.webScriptsReadme.description=Applied ReadMe template to Web Scripts folders - -patch.AVMProperties.description=Changes storage of properties on AVM Nodes. -patch.AVMProperties.result=Properties were moved. - -patch.customModels.description=Adds 'Models' folder to Data Dictionary -patch.customMessages.description=Adds 'Messages' folder to Data Dictionary -patch.customWebClientExtension.description=Adds 'Web Client Extension' folder to Data Dictionary - -patch.customWorkflowDefs.description=Adds 'Workflow Definitions' folder to Data Dictionary. - -patch.emailContributorGroup.description=Adds the 'GROUP_EMAIL_CONTRIBUTORS' group. - -patch.avmStoreAsIdentifier.description=Reindex wca:webfolder to make wca:avmstore an identifier -patch.avmStoreAsIdentifier.result=Reindexed wca:webfolder to make wca:avmstore an identifier - -patch.avmFormPropertyIdentifier.description=Reindex wca:webform to make wca:formname an identifier -patch.avmFormPropertyIdentifier.result=Reindexed wca:webform to make wca:formname an identifier - -patch.formsFolder.description=Adds 'Forms' folder to Data Dictionary. - -patch.tagRootCategory.description=Adds 'Tags' as new top-level category root. - -patch.sitesFolder.description=Adds 'Sites' folder to Company Home. - -patch.deploymentMigration.description=Migrates deployment data to the new model. -patch.deploymentMigration.webProjectName=Migrating deployment data for web project ''{0}'' -patch.deploymentMigration.serverMigrated=Server ''{0}'' from web project ''{1}'' has been migrated -patch.deploymentMigration.reportMigrated=Deployment report for ''{0}'' from web project ''{1}'' has been migrated -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.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. - -patch.wcmPermissionPatch.description=Fix ACLs so they are only set on the staging area store. -patch.wcmPermissionPatch.result=Updated ACLs: ACLS are moved to the staging area store and removed from all other stores. They are now applied via layering. - -patch.avmWebProjectInheritPermissions.description=Break inheritance of permissions on wca:webfolder object to hide access by default. -patch.avmWebProjectInheritPermissions.result=Removed inheritance of permissions on all wca:webfolder objects. - -patch.wcmPostPermissionSnapshotPatch.description=Snapshot stores (after fixing ACLs so they are only set on the staging area store). -patch.wcmPostPermissionSnapshotPatch.result=Snapshot complete after WCM ACL changes. - -patch.updateDmPermissions.description=Update ACLs on all DM node objects to the new 3.0 permission model -patch.updateDmPermissions.result=Updated ACLs. Created {0} defining ACLs. - -patch.db-V3.0-0-CreateActivitiesExtras.description=Replaced by 'patch.db-V3.0-ActivityTables', which must run first. - -patch.createSiteStore.description=Create the AVM store for site data structure for 3.0 web-tier clients. -patch.createSiteStore.result=Created the AVM site data store. - -patch.sitePermissionRefactorPatch.description=Create permission groups for sites. -patch.sitePermissionRefactorPatch.result=Groups have been created for all sites and user's allocated accordingly. - -patch.migrateVersionStore.description=Version Store migration (from lightWeightVersionStore to version2Store) -patch.migrateVersionStore.incomplete=Version Store migration incomplete. -patch.migrateVersionStore.done=Version Store migration completed. -patch.migrateVersionStore.bypassingPatch=Bypass Version Store migration patch since scheduled to run as job - -patch.inviteEmailTemplate.description=Adds invite email template to invite space - -patch.calendarModelNamespacePatch.description=Update the Calendar model namespace URI and reindex all calendar objects. -patch.calendarModelNamespacePatch.result=Updated the Calendar model namespace URI to http://www.alfresco.org/model/calendar and reindexed {0} calendar objects. - -patch.spacesStoreGuestPermission.description=Sets READ permissions for GUEST on root node of the SpacesStore. -patch.spacesStoreGuestPermission.result=Granted READ permissions for GUEST on root node of the SpacesStore. - -patch.administratorGroup.description=Adds the 'ALFRESCO_ADMINISTRATORS' group. - -patch.resetWCMToGroupBasedPermissionsPatch.description=Reset WCM to group based permissions. -patch.resetWCMToGroupBasedPermissionsPatch.result=WCM reset to group based permissions. - -patch.migrateVersionStoreUpdateCounter.description=Update internal version2Store counter (if needed). -patch.migrateVersionStoreUpdateCounter.result=Update internal version2Store counter (if needed): {0} - -patch.invitationMigration.description=Migrate invitations from old invite service to invitation service -patch.invitationMigration.result=Migrated {0} invitations from old invite service to invitation service. -patch.invitationMigration.no_invites=No invitations require migrating old invite service to invitation service. - -patch.webSiteAddModerated.description=Changing Web Site visibility from a boolean to enum. -patch.webSiteAddModerated.result=Changed Web Site visibility. - -patch.mtShareExistingTenants.description=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result.not_applicable=Patch applied, although no changes made since MT is not enabled. - -patch.redeployInvitationProcess.description=Re-deploy Invitation Process Definitions. - -patch.imapFolders.description=Creates folders tree necessary for IMAP functionality -patch.imapFolders.result.exists=The 'Imap Configs' folder already exists -patch.imapFolders.result.created=The 'Imap Configs' folder was successfully created - -patch.zonedAuthorities.description=Adds the remodelled cm:authority container to the spaces store - -patch.authorityMigration.description=Copies any old authorities from the user store to the spaces store. -patch.authorityMigration.process.name=Authority Migration -patch.authorityMigration.warning.assoc=Ignoring group memberships of non-existent user {1} -patch.authorityMigration.result=Migrated {0} groups and {1} group associations to the spaces store. - -patch.authorityDefaultZonesPatch.description=Adds groups and people to the appropriate zones for wcm, share and everything else. -patch.authorityDefaultZonesPatch.result=Unzoned groups and people added to the default zones. -patch.authorityDefaultZonesPatch.users= Adding users to zones ... -patch.authorityDefaultZonesPatch.groups= Adding groups to zones ... - -patch.fixNameCrcValues.description=Fixes name and qname CRC32 values to match UTF-8 encoding. -patch.fixNameCrcValues.result=Fixed CRC32 values for UTF-8 encoding for {0} node child associations. See file {1} for details. -patch.fixNameCrcValues.fixed=Updated CRC32 values for association ID {0}, name ''{1}'': {2} -> {3}, qname ''{4}'': {5} -> {6}. -patch.fixNameCrcValues.unableToChange=Failed to update the CRC32 value for association ID {0}: \n Node name: {1} \n name CRC old: {2} \n name CRC new: {3} \n qname: {4} \n qname CRC old: {5} \n qname CRC new: {6} \n Error: {7} -patch.fixNameCrcValues.fixingLocalname=Fixing invalid localname for association ID {0}: \n Was: ''{1}'' \n Now: ''{2}'' -patch.fixNameCrcValues.associationTypeNotDefined=Association type ''{0}'' has not been defined for child association ID {1}. -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.result2=No people were missing the 'cm:sizeCurrent' property. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.transferDefinitions.description=Add transfer definitions folder to data dictionary. -patch.transferDefinitions.result=Transfer definitions folder added to data dictionary. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.thumbnailsAssocQName.description=Update the 'cm:thumbnails' association QName to 'rn:rendition'. - -patch.convertContentUrls.description=Converts pre-3.2 content URLs to use the alf_content_data table. The conversion work can also be done on a schedule; please contact Alfresco Support for further details. -patch.convertContentUrls.bypassingPatch=Content URL conversion was NOT performed by this patch. Activate the scheduled job 'contentUrlConverterTrigger'. -patch.convertContentUrls.start=Content URL conversion progress: -patch.convertContentUrls.error=Content URL conversion failed: {0} -patch.convertContentUrls.inProgress=Content URL conversion increment completed. Awaiting next scheduled call... -patch.convertContentUrls.done=Content URL conversion completed. -patch.convertContentUrls.adm.start=\tProcessing ADM Content URLs. -patch.convertContentUrls.adm.done=\tFinished processing ADM nodes up to ID {0}. -patch.convertContentUrls.avm.start=\tProcessing AVM Content URLs. -patch.convertContentUrls.avm.done=\tFinished processing AVM nodes up to ID {0}. -patch.convertContentUrls.store.start=\tReading content URLs from store {0}. -patch.convertContentUrls.store.readOnly=\tNo content URLs will be marked for deletion. The content store is read-only. -patch.convertContentUrls.store.pending=\tContent URLs will be marked for deletion once the URL conversion process is complete. -patch.convertContentUrls.store.noSupport=\tNo content URLs will be marked for deletion. The store does not support URL enumeration. -patch.convertContentUrls.store.progress=\t\tProcessed {0} content URLs from store. -patch.convertContentUrls.store.scheduled=\tScheduled {0} content URLs for deletion from store: {1} -patch.convertContentUrls.store.done=This job is complete. Deactivate the scheduled job 'contentUrlConverterTrigger'. - -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.unableToChange=Failed to update the CRC32 value for authority: \n Authority: {0} \n Error: {1} - -patch.updateMimetypes1.description=Fix mimetypes for Excel and Powerpoint. -patch.updateMimetypes2.description=Fix mimetypes for Excel and Powerpoint. - -patch.db-V3.2-AddFKIndexes.description=Fixes ALF-3189: Added missing FK indexes. Note: The script is empty for MySQL. - -patch.eliminateDuplicates.description=Fixes ALF-4203: Searches for AVM duplicate nodes and changes their name - -patch.migrateAttrTenants.description=Migrate old Tenant attributes -patch.migrateAttrTenants.result=Processed {0} attributes - -patch.migrateAttrAVMLocks.description=Migrate old AVM Lock attributes -patch.migrateAttrAVMLocks.result=Processed {0} attributes - -patch.migrateAttrPropBackedBeans.description=Migrate old Property-Backed Bean component attributes -patch.migrateAttrPropBackedBeans.result=Processed {0} attributes ({1} properties) - -patch.migrateAttrChainingURS.description=Migrate old Chaining User Registry Synchronizer attributes -patch.migrateAttrChainingURS.result=Processed {0} attributes - -patch.migrateAttrDelete.description=Delete old attributes (if any) after they have been migrated -patch.migrateAttrDelete.result=Old attributes were deleted (if any) - -patch.transfer.targetrulefolder.description=Creates the transfer target rule folder for the default transfer group. - -patch.transfer.targetrule.description=Creates the transfer target rule for the default transfer group. - -patch.actions.scheduledfolder.description=Creates the scheduled actions folder in the Data Dictionary. - -patch.removingLinkValidationMetadata.description=Fixes ALF-5185: Removes all Link Validation reports from schema diff --git a/config/alfresco/messages/patch-service_ja.properties b/config/alfresco/messages/patch-service_ja.properties deleted file mode 100755 index f8f7075084..0000000000 --- a/config/alfresco/messages/patch-service_ja.properties +++ /dev/null @@ -1,379 +0,0 @@ -# PatchService messages -patch.service.preceeded_by_alternative=Preceded by alternative patch ''{0}''. -patch.service.not_relevant=Not relevant to schema {0} -patch.executer.checking=Checking for patches to apply ... -patch.service.applying_patch=\tApplying patch ''{0}'' ({1}). -patch.progress=\t\tPatch {0} {1}% complete, estimated complete at {2}. -patch.validation.failed=Validation of patch ''{0}'' failed. Patch is applicable to a newer schema than the schema of this build ({1}).\nfixesToSchema: {2}\ntargetSchema: {3}.\nIf this patch should always be run once on every installation, please ensure that the ''fixesToSchema'' value is set to '''${version.schema}'''. -patch.executer.no_patches_required=No patches were required. -patch.executer.system_readonly=Patches cannot be applied to a read-only system. Possible incompatibilities may exist between the application code and the existing data. -patch.executer.not_executed =\n=== Recorded patch (not executed) === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.executed =\n=== Applied patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.executer.failed =\n=== Failed to apply patch === \nID: {0}\nRESULT: \n{1}\n===================================== -patch.noLongerSupportedPatch.err.use_incremental_upgrade = \nPatch ''{0}'' was last supported on version {1}.\n Please follow an incremental upgrade using version {2}. - -# General patch messages - -patch.genericBootstrap.result.exists=Bootstrap location already exists: {0} -patch.genericBootstrap.result.created=Imported view into bootstrap location: {0} ({1}) -patch.genericBootstrap.err.multiple_found=Multiple nodes found: {0} - -patch.general.property_not_set=Patch property ''{0}'' has not been set on this patch: {1} - -patch.QNamePatch.result=Successfully updated the ''{0}'' QName to ''{1}''. - -patch.genericMimetypeUpdate.start=Updating mimetypes. -patch.genericMimetypeUpdate.updated=\n\tUpdated {0} content references with mimetype ''{1}'' to use ''{2}''. -patch.genericMimetypeUpdate.indexed=\n\tIndexed {0} nodes in store ''{1}''. -patch.genericMimetypeUpdate.done=\n\tFinished updating mimetypes. -patch.genericMimetypeUpdate.doneReindex=\n\tFinished updating mimetypes. Selective reindexing was disabled; a reindex is required to search for the new mimetype(s). - -# Individual patch messages - -patch.noOpPatch.description=A placeholder patch; usually marks a superceded patch. -patch.noOpPatch.result=No-op patch - -patch.marker.description=Marker patch to record installations and upgrades -patch.marker.result=Marker patch applied - -patch.savedSearchesFolder.description=Ensures the existence of the 'Saved Searches' folder. -patch.savedSearchesFolder.result.exists=The saved searches folder already exists: {0} -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.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.authoritiesFolder.description=Ensures the existence of the user authorities folder [JIRA: AR-497]. - -patch.authoritiesFolderPermission.description=Ensures group authorities are visible to everyone. - -patch.guestUser.description=Add the guest user, guest home space; and fix permissions on company home, guest home and guest person. -patch.guestUser.result=Added guest user and fixed permissions. - -patch.fixNodeSerializableValues.description=Ensure that property values are not stored as Serializable if at all possible -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.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.guestPersonPermission.description=Change Guest Person permission from 'Consumer' to 'Read' -patch.guestPersonPermission.result=Updated Guest Person permission from 'Consumer' to 'Read' - -patch.spacesRootPermission.description=Change Spaces store root permission from 'Consumer' to 'Read' -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.forumsIcons.description=Updates forums icon references -patch.forumsIcons.result=Updated {0} icon references - -patch.emailTemplatesFolder.description=Ensures the existence of the 'Email Templates' folder. -patch.emailTemplatesFolder.result.exists=The email templates folder already exists: {0} -patch.emailTemplatesFolder.result.created=The email templates folder was successfully created: {0} - -patch.emailInviteAndNotifyTemplatesFolder.description=Ensures the existence of the 'Email Invite Templates' and 'Email Notify Templates' folders. -patch.emailNotifyTemplatesFolder.result.exists=The Email Notify Templates folder already exists: {0} -patch.emailNotifyTemplatesFolder.result.created=The Email Notify Templates folder was successfully created: {0} -patch.emailInviteTemplatesFolder.result.exists=The Email Invite Templates folder already exists: {0} -patch.emailInviteTemplatesFolder.result.created=The Email Invite Templates folder was successfully created: {0} - -patch.emailTemplatesContent.description=Loads the email templates into the Email Templates folder. -patch.emailTemplatesContent.result=Imported the Email Templates into the default folder. - -patch.descriptorUpdate.description=Update Repository descriptor -patch.descriptorUpdate.result=Repository descriptor updated - -patch.scriptsFolder.description=Ensures the existence of the 'Scripts' folder. -patch.scriptsFolder.result.exists=The scripts folder already exists: {0} -patch.scriptsFolder.result.created=The scripts folder was successfully created: {0} - -patch.topLevelGroupParentChildAssociationTypePatch.description=Ensure top level groups have the correct child association type. -patch.topLevelGroupParentChildAssociationTypePatch.result=Fixed {0} top level groups child association types. -patch.topLevelGroupParentChildAssociationTypePatch.err.sys_path_not_found=Required authority system path not found: {0} -patch.topLevelGroupParentChildAssociationTypePatch.err.auth_path_not_found=Required authority path not found: {0} - -patch.actionRuleDecouplingPatch.description=Migrate existing rules to the updated model where rules are decoupled from actions. -patch.actionRuleDecouplingPatch.result=Updated {0} rules. - -patch.systemWorkflowFolder.description=Ensures the existence of the system workflow container. -patch.systemWorkflowFolder.result.created=Created system workflow container {0}. - -patch.rssTemplatesFolder.description=Ensures the existence of the 'RSS Templates' folder. -patch.rssTemplatesFolder.result.exists=The RSS Templates folder already exists: {0}. Re-applying guest permissions. -patch.rssTemplatesFolder.result.created=The RSS Templates folder was successfully created: {0} - -patch.rendition.rendering_actions.exists=The Rendering Actions folder already exists: {0}. -patch.rendition.rendering_actions.created=The Rendering Actions folder was successfully created: {0} -patch.rendition.rendering_actions.description=Creates the Rendering Actions folder. - -patch.replication.replication_actions.exists=The Replication Actions folder already exists: {0}. -patch.replication.replication_actions.created=The Replication Actions folder was successfully created: {0} -patch.replication.replication_actions.description=Creates the Replication Actions folder. - -patch.uifacetsAspectRemovalPatch.description=Removes the incorrectly applied uifacets aspect from presentation template files. -patch.uifacetsAspectRemovalPatch.updated=Successfully removed the uifacets aspect from {0} presentation template files. - -patch.guestPersonPermission2.description=Change Guest Person permission to visible by all users as 'Consumer'. -patch.guestPersonPermission2.result=Updated Guest Person permission to visible by all users as 'Consumer'. - -patch.schemaUpgradeScript.description=Ensures that the database upgrade script has been run. -patch.schemaUpgradeScript.err.not_executed=The schema upgrade script, ''{0}'', has not been run against this database. - -patch.uniqueChildName.description=Checks and renames duplicate children. -patch.uniqueChildName.copyOf=({0}-{1}) -patch.uniqueChildName.result=Checked {0} associations and fixed {1} duplicates. See file {2} for details. -patch.uniqueChildName.err.unable_to_fix=Auto-fixing of duplicate names failed. See file {0} for details. - -patch.invalidNameEnding.description=Fixes names ending with a space or full stop. -patch.invalidNameEnding.result=Fixed {0} names ending with a space or full stop. See file {1} for details. -patch.invalidNameEnding.err.unable_to_fix=Auto-fixing of names ending with a space or full stop failed. See file {0} for details. -patch.invalidNameEnding.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemDescriptorContent.description=Adds the version properties content to the system descriptor. -patch.systemDescriptorContent.result=Added the version properties content to the system descriptor. -patch.systemDescriptorContent.err.no_version_properties=The version.properties resource could not be found. -patch.systemDescriptorContent.err.no_descriptor=The system descriptor could not be found. - -patch.versionHistoryPerformance.description=Improves the performance of version history lookups. -patch.versionHistoryPerformance.result=Updated {0} version history objects to improve performance. - -patch.multilingualBootstrap.description=Bootstraps the node that will hold the multilingual containers. - -patch.wcmFolders.description=Ensures the existance of the WCM specific 'Web Projects' and 'Web Forms' folders. -patch.wcmFolders.webprojects.result.exists=The Web Projects folder already exists: {0} -patch.wcmFolders.webprojects.result.created=The Web Projects folder was successfully created: {0} -patch.wcmFolders.webforms.result.exists=The Web Forms folder already exists: {0} -patch.wcmFolders.webforms.result.created=The Web Forms folder was successfully created: {0} - -patch.linkNodeExtension.description=Fixes link node file extensions to have a .url extension. -patch.linkNodeExtension.result=Fixed {0} link node file extensions. See file {1} for details. -patch.linkNodeExtension.err.unable_to_fix=Auto-fixing of link node file extensions failed. See file {0} for details. -patch.linkNodeExtension.rewritten=Name ''{0}'' rewritten to ''{1}'' - -patch.systemRegistryBootstrap.description=Bootstraps the node that will hold system registry metadata. - -patch.userAndPersonUserNamesAsIdentifiers.description=Reindex usr:user and cm:person uids as identifiers -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.groupNamesAsIdentifiers.description=Reindex usr:authorityContainer gids as identifiers -patch.groupNamesAsIdentifiers.result=Reindexed usr:authorityContainer with identifiers - -patch.invalidUserPersonAndGroup.description=Fix up invalid uids for people and users; and invalid gids for groups -patch.invalidUserPersonAndGroup.result=Fixed ''{0}'' invalid user nodes, ''{1}'' invalid person nodes and ''{2}'' invalid authority nodes. - -patch.AVMGuidPatch.description=Set GUIDs on AVM nodes. -patch.AVMGuidPatch.result=AVM GUIDS set. - -patch.webscripts.description=Adds Web Scripts to Data Dictionary. -patch.webscripts2.description=Adds Web Scripts (second set) to Data Dictionary. -patch.webscripts3.description=Update Web Scripts ReadMe. -patch.webscriptsExtension.description=Adds Web Scripts Extension to Data Dictionary. - -patch.AVMLayeredSnapshot.description=Set indirectionVersion on Layered Nodes. -patch.AVMLayeredSnapshot.result=Layered Node indirectionVersions set. - -patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer members as identifiers - -patch.genericWorkflow.result.deployed=Re-deployed {0} workflows. - -patch.redeploySubmitProcess.description=Re-deploy WCM Submit Process Definition. -patch.deploySubmitDirectProcess.description=Deploy WCM Direct Submit Process Definition. - -patch.AVMAspects.description=Changes storage of aspects on AVM Nodes. -patch.AVMAspects.result=Aspects were moved. - -patch.ReadmeTemplate.description=Deployed ReadMe Template -patch.webScriptsReadme.description=Applied ReadMe template to Web Scripts folders - -patch.AVMProperties.description=Changes storage of properties on AVM Nodes. -patch.AVMProperties.result=Properties were moved. - -patch.customModels.description=Adds 'Models' folder to Data Dictionary -patch.customMessages.description=Adds 'Messages' folder to Data Dictionary -patch.customWebClientExtension.description=Adds 'Web Client Extension' folder to Data Dictionary - -patch.customWorkflowDefs.description=Adds 'Workflow Definitions' folder to Data Dictionary. - -patch.emailContributorGroup.description=Adds the 'GROUP_EMAIL_CONTRIBUTORS' group. - -patch.avmStoreAsIdentifier.description=Reindex wca:webfolder to make wca:avmstore an identifier -patch.avmStoreAsIdentifier.result=Reindexed wca:webfolder to make wca:avmstore an identifier - -patch.avmFormPropertyIdentifier.description=Reindex wca:webform to make wca:formname an identifier -patch.avmFormPropertyIdentifier.result=Reindexed wca:webform to make wca:formname an identifier - -patch.formsFolder.description=Adds 'Forms' folder to Data Dictionary. - -patch.tagRootCategory.description=Adds 'Tags' as new top-level category root. - -patch.sitesFolder.description=Adds 'Sites' folder to Company Home. - -patch.deploymentMigration.description=Migrates deployment data to the new model. -patch.deploymentMigration.webProjectName=Migrating deployment data for web project ''{0}'' -patch.deploymentMigration.serverMigrated=Server ''{0}'' from web project ''{1}'' has been migrated -patch.deploymentMigration.reportMigrated=Deployment report for ''{0}'' from web project ''{1}'' has been migrated -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.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. - -patch.wcmPermissionPatch.description=Fix ACLs so they are only set on the staging area store. -patch.wcmPermissionPatch.result=Updated ACLs: ACLS are moved to the staging area store and removed from all other stores. They are now applied via layering. - -patch.avmWebProjectInheritPermissions.description=Break inheritance of permissions on wca:webfolder object to hide access by default. -patch.avmWebProjectInheritPermissions.result=Removed inheritance of permissions on all wca:webfolder objects. - -patch.wcmPostPermissionSnapshotPatch.description=Snapshot stores (after fixing ACLs so they are only set on the staging area store). -patch.wcmPostPermissionSnapshotPatch.result=Snapshot complete after WCM ACL changes. - -patch.updateDmPermissions.description=Update ACLs on all DM node objects to the new 3.0 permission model -patch.updateDmPermissions.result=Updated ACLs. Created {0} defining ACLs. - -patch.db-V3.0-0-CreateActivitiesExtras.description=Replaced by 'patch.db-V3.0-ActivityTables', which must run first. - -patch.createSiteStore.description=Create the AVM store for site data structure for 3.0 web-tier clients. -patch.createSiteStore.result=Created the AVM site data store. - -patch.sitePermissionRefactorPatch.description=Create permission groups for sites. -patch.sitePermissionRefactorPatch.result=Groups have been created for all sites and user's allocated accordingly. - -patch.migrateVersionStore.description=Version Store migration (from lightWeightVersionStore to version2Store) -patch.migrateVersionStore.incomplete=Version Store migration incomplete. -patch.migrateVersionStore.done=Version Store migration completed. -patch.migrateVersionStore.bypassingPatch=Bypass Version Store migration patch since scheduled to run as job - -patch.inviteEmailTemplate.description=Adds invite email template to invite space - -patch.calendarModelNamespacePatch.description=Update the Calendar model namespace URI and reindex all calendar objects. -patch.calendarModelNamespacePatch.result=Updated the Calendar model namespace URI to http://www.alfresco.org/model/calendar and reindexed {0} calendar objects. - -patch.spacesStoreGuestPermission.description=Sets READ permissions for GUEST on root node of the SpacesStore. -patch.spacesStoreGuestPermission.result=Granted READ permissions for GUEST on root node of the SpacesStore. - -patch.administratorGroup.description=Adds the 'ALFRESCO_ADMINISTRATORS' group. - -patch.resetWCMToGroupBasedPermissionsPatch.description=Reset WCM to group based permissions. -patch.resetWCMToGroupBasedPermissionsPatch.result=WCM reset to group based permissions. - -patch.migrateVersionStoreUpdateCounter.description=Update internal version2Store counter (if needed). -patch.migrateVersionStoreUpdateCounter.result=Update internal version2Store counter (if needed): {0} - -patch.invitationMigration.description=Migrate invitations from old invite service to invitation service -patch.invitationMigration.result=Migrated {0} invitations from old invite service to invitation service. -patch.invitationMigration.no_invites=No invitations require migrating old invite service to invitation service. - -patch.webSiteAddModerated.description=Changing Web Site visibility from a boolean to enum. -patch.webSiteAddModerated.result=Changed Web Site visibility. - -patch.mtShareExistingTenants.description=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result=Update existing tenants for MT Share. -patch.mtShareExistingTenants.result.not_applicable=Patch applied, although no changes made since MT is not enabled. - -patch.redeployInvitationProcess.description=Re-deploy Invitation Process Definitions. - -patch.imapFolders.description=Creates folders tree necessary for IMAP functionality -patch.imapFolders.result.exists=The 'Imap Configs' folder already exists -patch.imapFolders.result.created=The 'Imap Configs' folder was successfully created - -patch.zonedAuthorities.description=Adds the remodelled cm:authority container to the spaces store - -patch.authorityMigration.description=Copies any old authorities from the user store to the spaces store. -patch.authorityMigration.process.name=Authority Migration -patch.authorityMigration.warning.assoc=Ignoring group memberships of non-existent user {1} -patch.authorityMigration.result=Migrated {0} groups and {1} group associations to the spaces store. - -patch.authorityDefaultZonesPatch.description=Adds groups and people to the appropriate zones for wcm, share and everything else. -patch.authorityDefaultZonesPatch.result=Unzoned groups and people added to the default zones. -patch.authorityDefaultZonesPatch.users= Adding users to zones ... -patch.authorityDefaultZonesPatch.groups= Adding groups to zones ... - -patch.fixNameCrcValues.description=Fixes name and qname CRC32 values to match UTF-8 encoding. -patch.fixNameCrcValues.result=Fixed CRC32 values for UTF-8 encoding for {0} node child associations. See file {1} for details. -patch.fixNameCrcValues.fixed=Updated CRC32 values for association ID {0}, name ''{1}'': {2} -> {3}, qname ''{4}'': {5} -> {6}. -patch.fixNameCrcValues.unableToChange=Failed to update the CRC32 value for association ID {0}: \n Node name: {1} \n name CRC old: {2} \n name CRC new: {3} \n qname: {4} \n qname CRC old: {5} \n qname CRC new: {6} \n Error: {7} -patch.fixNameCrcValues.fixingLocalname=Fixing invalid localname for association ID {0}: \n Was: ''{1}'' \n Now: ''{2}'' -patch.fixNameCrcValues.associationTypeNotDefined=Association type ''{0}'' has not been defined for child association ID {1}. -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.result2=No people were missing the 'cm:sizeCurrent' property. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.transferDefinitions.description=Add transfer definitions folder to data dictionary. -patch.transferDefinitions.result=Transfer definitions folder added to data dictionary. - -patch.redeployNominatedInvitationProcessWithPropsForShare.description=Redeploy nominated invitation workflow -patch.redeployNominatedInvitationProcessWithPropsForShare.result=Nominated invitation workflow redeployed - -patch.thumbnailsAssocQName.description=Update the 'cm:thumbnails' association QName to 'rn:rendition'. - -patch.convertContentUrls.description=Converts pre-3.2 content URLs to use the alf_content_data table. The conversion work can also be done on a schedule; please contact Alfresco Support for further details. -patch.convertContentUrls.bypassingPatch=Content URL conversion was NOT performed by this patch. Activate the scheduled job 'contentUrlConverterTrigger'. -patch.convertContentUrls.start=Content URL conversion progress: -patch.convertContentUrls.error=Content URL conversion failed: {0} -patch.convertContentUrls.inProgress=Content URL conversion increment completed. Awaiting next scheduled call... -patch.convertContentUrls.done=Content URL conversion completed. -patch.convertContentUrls.adm.start=\tProcessing ADM Content URLs. -patch.convertContentUrls.adm.done=\tFinished processing ADM nodes up to ID {0}. -patch.convertContentUrls.avm.start=\tProcessing AVM Content URLs. -patch.convertContentUrls.avm.done=\tFinished processing AVM nodes up to ID {0}. -patch.convertContentUrls.store.start=\tReading content URLs from store {0}. -patch.convertContentUrls.store.readOnly=\tNo content URLs will be marked for deletion. The content store is read-only. -patch.convertContentUrls.store.pending=\tContent URLs will be marked for deletion once the URL conversion process is complete. -patch.convertContentUrls.store.noSupport=\tNo content URLs will be marked for deletion. The store does not support URL enumeration. -patch.convertContentUrls.store.progress=\t\tProcessed {0} content URLs from store. -patch.convertContentUrls.store.scheduled=\tScheduled {0} content URLs for deletion from store: {1} -patch.convertContentUrls.store.done=This job is complete. Deactivate the scheduled job 'contentUrlConverterTrigger'. - -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.unableToChange=Failed to update the CRC32 value for authority: \n Authority: {0} \n Error: {1} - -patch.updateMimetypes1.description=Fix mimetypes for Excel and Powerpoint. -patch.updateMimetypes2.description=Fix mimetypes for Excel and Powerpoint. - -patch.db-V3.2-AddFKIndexes.description=Fixes ALF-3189: Added missing FK indexes. Note: The script is empty for MySQL. - -patch.eliminateDuplicates.description=Fixes ALF-4203: Searches for AVM duplicate nodes and changes their name - -patch.migrateAttrTenants.description=Migrate old Tenant attributes -patch.migrateAttrTenants.result=Processed {0} attributes - -patch.migrateAttrAVMLocks.description=Migrate old AVM Lock attributes -patch.migrateAttrAVMLocks.result=Processed {0} attributes - -patch.migrateAttrPropBackedBeans.description=Migrate old Property-Backed Bean component attributes -patch.migrateAttrPropBackedBeans.result=Processed {0} attributes ({1} properties) - -patch.migrateAttrChainingURS.description=Migrate old Chaining User Registry Synchronizer attributes -patch.migrateAttrChainingURS.result=Processed {0} attributes - -patch.migrateAttrDelete.description=Delete old attributes (if any) after they have been migrated -patch.migrateAttrDelete.result=Old attributes were deleted (if any) - -patch.transfer.targetrulefolder.description=Creates the transfer target rule folder for the default transfer group. - -patch.transfer.targetrule.description=Creates the transfer target rule for the default transfer group. - -patch.actions.scheduledfolder.description=Creates the scheduled actions folder in the Data Dictionary. - -patch.removingLinkValidationMetadata.description=Fixes ALF-5185: Removes all Link Validation reports from schema diff --git a/config/alfresco/messages/period-provider_de_DE.properties b/config/alfresco/messages/period-provider_de_DE.properties deleted file mode 100755 index ecaeda9b23..0000000000 --- a/config/alfresco/messages/period-provider_de_DE.properties +++ /dev/null @@ -1,17 +0,0 @@ -# PeriodProvider display label strings - -period_provider.cron=Kron. Ausdruck -period_provider.day=Tag -period_provider.fmend=Ende des Finanzmonats -period_provider.fqend=Ende des Finanzquartals -period_provider.fyend=Ende des Finanzjahrs -period_provider.immediately=Sofort -period_provider.monthend=Monatsende -period_provider.quarterend=Quartalsende -period_provider.yearend=Jahresende -period_provider.month=Monat -period_provider.none=Keine -period_provider.quarter=Quartal -period_provider.week=Woche -period_provider.duration=XML Dauer -period_provider.year=Jahr diff --git a/config/alfresco/messages/period-provider_es_ES.properties b/config/alfresco/messages/period-provider_es_ES.properties deleted file mode 100755 index e8a40a87d1..0000000000 --- a/config/alfresco/messages/period-provider_es_ES.properties +++ /dev/null @@ -1,17 +0,0 @@ -# PeriodProvider display label strings - -period_provider.cron=Expresi\u00f3n Cron -period_provider.day=D\u00eda -period_provider.fmend=Fin de mes financiero -period_provider.fqend=Fin de trimestre financiero -period_provider.fyend=Fin de a\u00f1o financiero -period_provider.immediately=Inmediatamente -period_provider.monthend=Fin de mes -period_provider.quarterend=Fin de trimestre -period_provider.yearend=Fin de a\u00f1o -period_provider.month=Mes -period_provider.none=Ninguna -period_provider.quarter=Trimestre -period_provider.week=Semana -period_provider.duration=Duraci\u00f3n XML -period_provider.year=A\u00f1o diff --git a/config/alfresco/messages/period-provider_fr_FR.properties b/config/alfresco/messages/period-provider_fr_FR.properties deleted file mode 100755 index 484f9f15c7..0000000000 --- a/config/alfresco/messages/period-provider_fr_FR.properties +++ /dev/null @@ -1,17 +0,0 @@ -# PeriodProvider display label strings - -period_provider.cron=Expression Cron -period_provider.day=Jour -period_provider.fmend=Fin du mois financier -period_provider.fqend=Fin du trimestre financier -period_provider.fyend=Fin de l'ann\u00e9e financi\u00e8re -period_provider.immediately=Imm\u00e9diatement -period_provider.monthend=Fin du mois calendaire -period_provider.quarterend=Fin du trimestre calendaire -period_provider.yearend=Fin de l'ann\u00e9e calendaire -period_provider.month=Mois -period_provider.none=Aucun -period_provider.quarter=Trimestre -period_provider.week=Semaine -period_provider.duration=Dur\u00e9e\u00a0XML -period_provider.year=Ann\u00e9e diff --git a/config/alfresco/messages/period-provider_it_IT.properties b/config/alfresco/messages/period-provider_it_IT.properties deleted file mode 100755 index bea4a52811..0000000000 --- a/config/alfresco/messages/period-provider_it_IT.properties +++ /dev/null @@ -1,17 +0,0 @@ -# PeriodProvider display label strings - -period_provider.cron=Espressione Cron -period_provider.day=Giorno -period_provider.fmend=Fine del mese finanziario -period_provider.fqend=Fine del trimestre finanziario -period_provider.fyend=Fine dell'anno finanziario -period_provider.immediately=Immediatamente -period_provider.monthend=Fine del mese -period_provider.quarterend=Fine del trimestre -period_provider.yearend=Fine dell'anno -period_provider.month=Mese -period_provider.none=Nessuno -period_provider.quarter=Trimestre -period_provider.week=Settimana -period_provider.duration=Durata XML -period_provider.year=Anno diff --git a/config/alfresco/messages/period-provider_ja.properties b/config/alfresco/messages/period-provider_ja.properties deleted file mode 100755 index 86d26cd227..0000000000 --- a/config/alfresco/messages/period-provider_ja.properties +++ /dev/null @@ -1,17 +0,0 @@ -# PeriodProvider display label strings - -period_provider.cron=Cron\u8868\u73fe -period_provider.day=\u65e5 -period_provider.fmend=\u4f1a\u8a08\u6708\u306e\u7d42\u308f\u308a -period_provider.fqend=\u56db\u534a\u671f\uff08\u4f1a\u8a08\u671f\uff09\u306e\u7d42\u308f\u308a -period_provider.fyend=\u4f1a\u8a08\u5e74\u306e\u7d42\u308f\u308a -period_provider.immediately=\u5373\u6642 -period_provider.monthend=\u6708\u672b -period_provider.quarterend=\u56db\u534a\u671f\u672b -period_provider.yearend=\u5e74\u672b -period_provider.month=\u6708 -period_provider.none=\u306a\u3057 -period_provider.quarter=\u56db\u534a\u671f -period_provider.week=\u9031 -period_provider.duration=XML\u6301\u7d9a\u671f\u9593 -period_provider.year=\u5e74 diff --git a/config/alfresco/messages/permissions-service_de_DE.properties b/config/alfresco/messages/permissions-service_de_DE.properties deleted file mode 100755 index 774c38f451..0000000000 --- a/config/alfresco/messages/permissions-service_de_DE.properties +++ /dev/null @@ -1,2 +0,0 @@ -permissions.err_access_denied=Zugriff verweigert. Sie verf\u00fcgen nicht \u00fcber die Berechtigungen, um diesen Vorgang durchzuf\u00fchren. -permissions.err_read_only=Zugriff verweigert. Das System befindet sich derzeit im Modus Nur Lesen. diff --git a/config/alfresco/messages/permissions-service_es_ES.properties b/config/alfresco/messages/permissions-service_es_ES.properties deleted file mode 100755 index 347dc2c424..0000000000 --- a/config/alfresco/messages/permissions-service_es_ES.properties +++ /dev/null @@ -1,2 +0,0 @@ -permissions.err_access_denied=Acceso denegado. Usted carece de los permisos adecuados para realizar esta operaci\u00f3n. -permissions.err_read_only=Acceso denegado. El sistema est\u00e1 actualmente en modo s\u00f3lo de lectura. diff --git a/config/alfresco/messages/permissions-service_fr_FR.properties b/config/alfresco/messages/permissions-service_fr_FR.properties deleted file mode 100755 index 1e6cb1c70c..0000000000 --- a/config/alfresco/messages/permissions-service_fr_FR.properties +++ /dev/null @@ -1,2 +0,0 @@ -permissions.err_access_denied=Access refus\u00e9. Vous n'avez pas la permission de r\u00e9aliser cette op\u00e9ration. -permissions.err_read_only=Access refus\u00e9. Le syst\u00e8me est actuellement en mode lecture seule. diff --git a/config/alfresco/messages/permissions-service_it_IT.properties b/config/alfresco/messages/permissions-service_it_IT.properties deleted file mode 100755 index da3498ddaa..0000000000 --- a/config/alfresco/messages/permissions-service_it_IT.properties +++ /dev/null @@ -1,2 +0,0 @@ -permissions.err_access_denied=Accesso negato. Non si dispone di permessi appropriati per eseguire questa operazione. -permissions.err_read_only=Accesso negato. Il sistema \u00e8 attualmente in modalit\u00e0 di sola lettura. diff --git a/config/alfresco/messages/permissions-service_ja.properties b/config/alfresco/messages/permissions-service_ja.properties deleted file mode 100755 index 720776c664..0000000000 --- a/config/alfresco/messages/permissions-service_ja.properties +++ /dev/null @@ -1,2 +0,0 @@ -permissions.err_access_denied=\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002 \u3053\u306e\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u9069\u5207\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -permissions.err_read_only=\u30a2\u30af\u30bb\u30b9\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f\u3002 \u30b7\u30b9\u30c6\u30e0\u306f\u73fe\u5728\u8aad\u307f\u8fbc\u307f\u5c02\u7528\u30e2\u30fc\u30c9\u3067\u3059\u3002 diff --git a/config/alfresco/messages/rendition-config_de_DE.properties b/config/alfresco/messages/rendition-config_de_DE.properties deleted file mode 100755 index cb2fe93283..0000000000 --- a/config/alfresco/messages/rendition-config_de_DE.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Rendering Engines i18n properties - -# The following are common to all rendering engines -baseRenderingAction.runAs.display-label=Ausf\u00fchren als -baseRenderingAction.update-renditions-on-any-property-change.display-label=Renditions bei jeder \u00c4nderungen von Eigenschaften aktualisieren -baseRenderingAction.rendition-nodetype.display-label=Rendition Node Typ -baseRenderingAction.placeHolderResourcePath.display-label=Ressourcenpfad f\u00fcr Platzhalter -baseRenderingAction.sourceContentProperty.display-label=Eigenschaft des Quellinhalts -baseRenderingAction.targetContentProperty.display-label=Eigenschaft des Zielinhalts -baseRenderingAction.destination-path-template.display-label=Mustervorlage des Zielpfads -baseRenderingAction.orphan-existing-rendition.display-label=Waise bestehender Rendition - -# The following are common to all template-based rendering engines -baseTemplateRenderingAction.model.display-label=Modell -baseTemplateRenderingAction.template_string.display-label=Mustervorlagen-String -baseTemplateRenderingAction.template_node.display-label=Mustervorlagen-Node -baseTemplateRenderingAction.template_path.display-label=Mustervorlagen-Pfad - -# reformat -reformat.title=Neuformatierungs-Rendition durchf\u00fchren -reformat.description=Gibt einen Inhalt in einem anderen Format wieder (MIME-Typ). -reformat.flashVersion.display-label=Flash Version -reformat.mime-type.display-label=MIME Typ - -# imageRenderingEngine -imageRenderingEngine.title=Eine Bildverarbeitungs-Rendition durchf\u00fchren -imageRenderingEngine.xsize.display-label=Breite -imageRenderingEngine.ysize.display-label=H\u00f6he -imageRenderingEngine.isAbsolute.display-label=Ist absolut -imageRenderingEngine.maintainAspectRatio.display-label=Seitenverh\u00e4ltnis beibehalten -imageRenderingEngine.resizeToThumbnail.display-label=Gr\u00f6\u00dfe auf Miniaturansicht \u00e4ndern -imageRenderingEngine.crop_gravity.display-label=Tiefe -imageRenderingEngine.crop_height.display-label=H\u00f6he beschneiden -imageRenderingEngine.crop_width.display-label=Breite beschneiden -imageRenderingEngine.crop_x.display-label=x beschneiden -imageRenderingEngine.crop_y.display-label=y beschneiden -imageRenderingEngine.percent_crop.display-label=Prozentual beschneiden -imageRenderingEngine.commandOptions.display-label=Befehlsoptionen - -# freemarkerRenderingEngine -freemarkerRenderingEngine.title=Rendition auf Freemarker-Basis durchf\u00fchren -freemarkerRenderingEngine.image_resolver.display-label=Bild Resolver - -# xsltRenderingEngine -xsltRenderingEngine.title=Rendition auf XSLT-Basis durchf\u00fchren - diff --git a/config/alfresco/messages/rendition-config_es_ES.properties b/config/alfresco/messages/rendition-config_es_ES.properties deleted file mode 100755 index 25cb4d0b47..0000000000 --- a/config/alfresco/messages/rendition-config_es_ES.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Rendering Engines i18n properties - -# The following are common to all rendering engines -baseRenderingAction.runAs.display-label=Ejecutar como -baseRenderingAction.update-renditions-on-any-property-change.display-label=Actualizar renderizaciones ante todo cambio de propiedad -baseRenderingAction.rendition-nodetype.display-label=Tipo de nodo de renderizaci\u00f3n -baseRenderingAction.placeHolderResourcePath.display-label=Ruta de recurso de marcador de posici\u00f3n -baseRenderingAction.sourceContentProperty.display-label=Propiedad de contenido origen -baseRenderingAction.targetContentProperty.display-label=Propiedad de contenido de destino -baseRenderingAction.destination-path-template.display-label=Plantilla de ruta de destino -baseRenderingAction.orphan-existing-rendition.display-label=Renderizaci\u00f3n existente hu\u00e9rfana - -# The following are common to all template-based rendering engines -baseTemplateRenderingAction.model.display-label=Modelo -baseTemplateRenderingAction.template_string.display-label=Cadena de plantilla -baseTemplateRenderingAction.template_node.display-label=Nodo de plantilla -baseTemplateRenderingAction.template_path.display-label=Ruta de plantilla - -# reformat -reformat.title=Realizar una renderizaci\u00f3n de reformateado -reformat.description=Renderiza un trozo de contenido en otro formato (tipo MIME). -reformat.flashVersion.display-label=Versi\u00f3n Flash -reformat.mime-type.display-label=Tipo MIME - -# imageRenderingEngine -imageRenderingEngine.title=Realizar una renderizaci\u00f3n de procesamiento de imagen -imageRenderingEngine.xsize.display-label=Ancho -imageRenderingEngine.ysize.display-label=Alto -imageRenderingEngine.isAbsolute.display-label=Es absoluto -imageRenderingEngine.maintainAspectRatio.display-label=Mantener relaci\u00f3n de aspecto -imageRenderingEngine.resizeToThumbnail.display-label=Redimensionar a miniatura -imageRenderingEngine.crop_gravity.display-label=Gravedad -imageRenderingEngine.crop_height.display-label=Cortar altura -imageRenderingEngine.crop_width.display-label=Cortar ancho -imageRenderingEngine.crop_x.display-label=Cortar x -imageRenderingEngine.crop_y.display-label=Cortar y -imageRenderingEngine.percent_crop.display-label=Porcentaje de corte -imageRenderingEngine.commandOptions.display-label=Opciones de comando - -# freemarkerRenderingEngine -freemarkerRenderingEngine.title=Efectuar una renderizaci\u00f3n basada en Freemarker -freemarkerRenderingEngine.image_resolver.display-label=Resoluci\u00f3n de imagen - -# xsltRenderingEngine -xsltRenderingEngine.title=Efectuar una renderizaci\u00f3n basada en XSLT diff --git a/config/alfresco/messages/rendition-config_fr_FR.properties b/config/alfresco/messages/rendition-config_fr_FR.properties deleted file mode 100755 index afb488dd38..0000000000 --- a/config/alfresco/messages/rendition-config_fr_FR.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Rendering Engines i18n properties - -# The following are common to all rendering engines -baseRenderingAction.runAs.display-label=Ex\u00e9cuter en tant que -baseRenderingAction.update-renditions-on-any-property-change.display-label=Mettre \u00e0 jour les interpr\u00e9tations en cas de modification d'une propri\u00e9t\u00e9 -baseRenderingAction.rendition-nodetype.display-label=Type de n\u009cud d'interpr\u00e9tation -baseRenderingAction.placeHolderResourcePath.display-label=Chemin de ressource de param\u00e8tre fictif -baseRenderingAction.sourceContentProperty.display-label=Propri\u00e9t\u00e9 du contenu source -baseRenderingAction.targetContentProperty.display-label=Propri\u00e9t\u00e9 du contenu cible -baseRenderingAction.destination-path-template.display-label=Mod\u00e8le de chemin de destination -baseRenderingAction.orphan-existing-rendition.display-label=Interpr\u00e9tation existante orpheline - -# The following are common to all template-based rendering engines -baseTemplateRenderingAction.model.display-label=Mod\u00e8le -baseTemplateRenderingAction.template_string.display-label=Cha\u00eene de mod\u00e8le -baseTemplateRenderingAction.template_node.display-label=N\u009cud de mod\u00e8le -baseTemplateRenderingAction.template_path.display-label=Chemin de mod\u00e8le - -# reformat -reformat.title=R\u00e9aliser une interpr\u00e9tation de remise en forme -reformat.description=Rend une portion de contenu dans un autre format (type\u00a0MIME). -reformat.flashVersion.display-label=Version Flash -reformat.mime-type.display-label=Type\u00a0MIME - -# imageRenderingEngine -imageRenderingEngine.title=R\u00e9aliser une interpr\u00e9tation de traitement d'image -imageRenderingEngine.xsize.display-label=Largeur -imageRenderingEngine.ysize.display-label=Hauteur -imageRenderingEngine.isAbsolute.display-label=Valeur absolue -imageRenderingEngine.maintainAspectRatio.display-label=Conserver les proportions -imageRenderingEngine.resizeToThumbnail.display-label=Obtenir une vignette -imageRenderingEngine.crop_gravity.display-label=Gravit\u00e9 -imageRenderingEngine.crop_height.display-label=Rogner la hauteur -imageRenderingEngine.crop_width.display-label=Rogner la largeur -imageRenderingEngine.crop_x.display-label=Rogner\u00a0x -imageRenderingEngine.crop_y.display-label=Rogner\u00a0y -imageRenderingEngine.percent_crop.display-label=Rognage par pourcentage -imageRenderingEngine.commandOptions.display-label=Options des commandes - -# freemarkerRenderingEngine -freemarkerRenderingEngine.title=R\u00e9aliser une interpr\u00e9tation bas\u00e9e sur Freemarker -freemarkerRenderingEngine.image_resolver.display-label=R\u00e9solveur d'image - -# xsltRenderingEngine -xsltRenderingEngine.title=R\u00e9aliser une interpr\u00e9tation bas\u00e9e sur XSLT diff --git a/config/alfresco/messages/rendition-config_it_IT.properties b/config/alfresco/messages/rendition-config_it_IT.properties deleted file mode 100755 index 22d999873e..0000000000 --- a/config/alfresco/messages/rendition-config_it_IT.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Rendering Engines i18n properties - -# The following are common to all rendering engines -baseRenderingAction.runAs.display-label=Esegui come -baseRenderingAction.update-renditions-on-any-property-change.display-label=Aggiorna trasformazioni a ogni cambiamento delle propriet\u00e0 -baseRenderingAction.rendition-nodetype.display-label=Tipo nodo trasformazione -baseRenderingAction.placeHolderResourcePath.display-label=Percorso risorsa segnaposto -baseRenderingAction.sourceContentProperty.display-label=Propriet\u00e0 di contenuto fonte -baseRenderingAction.targetContentProperty.display-label=Propriet\u00e0 di contenuto destinazione -baseRenderingAction.destination-path-template.display-label=Modello percorso di destinazione -baseRenderingAction.orphan-existing-rendition.display-label=Trasformazione esistente orfana - -# The following are common to all template-based rendering engines -baseTemplateRenderingAction.model.display-label=Modello -baseTemplateRenderingAction.template_string.display-label=Stringa modello -baseTemplateRenderingAction.template_node.display-label=Nodo modello -baseTemplateRenderingAction.template_path.display-label=Percorso modello - -# reformat -reformat.title=Esegui una trasformazione di riformattazione -reformat.description=Trasforma un contenuto in un altro formato (tipo MIME). -reformat.flashVersion.display-label=Versione di Flash -reformat.mime-type.display-label=Tipo MIME - -# imageRenderingEngine -imageRenderingEngine.title=Esegui una trasformazione di elaborazione immagine -imageRenderingEngine.xsize.display-label=Larghezza -imageRenderingEngine.ysize.display-label=Altezza -imageRenderingEngine.isAbsolute.display-label=Valore assoluto -imageRenderingEngine.maintainAspectRatio.display-label=Mantieni proporzioni -imageRenderingEngine.resizeToThumbnail.display-label=Ridimensiona come miniatura -imageRenderingEngine.crop_gravity.display-label=Gravit\u00e0 -imageRenderingEngine.crop_height.display-label=Altezza ritaglio -imageRenderingEngine.crop_width.display-label=Larghezza ritaglio -imageRenderingEngine.crop_x.display-label=X ritaglio -imageRenderingEngine.crop_y.display-label=Y ritaglio -imageRenderingEngine.percent_crop.display-label=Ritaglio percentuale -imageRenderingEngine.commandOptions.display-label=Opzioni di comando - -# freemarkerRenderingEngine -freemarkerRenderingEngine.title=Esegui una trasformazione basata su Freemarker -freemarkerRenderingEngine.image_resolver.display-label=Strumento di risoluzione immagine - -# xsltRenderingEngine -xsltRenderingEngine.title=Esegui una trasformazione basata su XSLT diff --git a/config/alfresco/messages/rendition-config_ja.properties b/config/alfresco/messages/rendition-config_ja.properties deleted file mode 100755 index 8238dccb69..0000000000 --- a/config/alfresco/messages/rendition-config_ja.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Rendering Engines i18n properties - -# The following are common to all rendering engines -baseRenderingAction.runAs.display-label=\u5b9f\u884c -baseRenderingAction.update-renditions-on-any-property-change.display-label=\u5c5e\u6027\u5909\u66f4\u6642\u306b\u63cf\u753b\u3092\u66f4\u65b0 -baseRenderingAction.rendition-nodetype.display-label=\u63cf\u753b\u30ce\u30fc\u30c9\u30bf\u30a4\u30d7 -baseRenderingAction.placeHolderResourcePath.display-label=\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u306e\u30ea\u30bd\u30fc\u30b9\u30d1\u30b9 -baseRenderingAction.sourceContentProperty.display-label=\u30bd\u30fc\u30b9\u30b3\u30f3\u30c6\u30f3\u30c4\u5c5e\u6027 -baseRenderingAction.targetContentProperty.display-label=\u30bf\u30fc\u30b2\u30c3\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\u5c5e\u6027 -baseRenderingAction.destination-path-template.display-label=\u5b9b\u5148\u30d1\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 -baseRenderingAction.orphan-existing-rendition.display-label=\u5b64\u7acb\u884c\u306e\u65e2\u5b58\u306e\u63cf\u753b - -# The following are common to all template-based rendering engines -baseTemplateRenderingAction.model.display-label=\u30e2\u30c7\u30eb -baseTemplateRenderingAction.template_string.display-label=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6587\u5b57\u5217 -baseTemplateRenderingAction.template_node.display-label=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30ce\u30fc\u30c9 -baseTemplateRenderingAction.template_path.display-label=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d1\u30b9 - -# reformat -reformat.title=\u63cf\u753b\u518d\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5b9f\u884c -reformat.description=\u4ed6\u306e\u5f62\u5f0f(MIME\u30bf\u30a4\u30d7)\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u90e8\u5206\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3057\u307e\u3059\u3002 -reformat.flashVersion.display-label=Flash\u30d0\u30fc\u30b8\u30e7\u30f3 -reformat.mime-type.display-label=MIME\u30bf\u30a4\u30d7 - -# imageRenderingEngine -imageRenderingEngine.title=\u753b\u50cf\u51e6\u7406\u63cf\u753b\u306e\u5b9f\u884c -imageRenderingEngine.xsize.display-label=\u5e45 -imageRenderingEngine.ysize.display-label=\u9ad8\u3055 -imageRenderingEngine.isAbsolute.display-label=\u7d76\u5bfe\u6307\u5b9a -imageRenderingEngine.maintainAspectRatio.display-label=\u30a2\u30b9\u30da\u30af\u30c8\u6bd4\u306e\u4fdd\u6301 -imageRenderingEngine.resizeToThumbnail.display-label=\u30b5\u30e0\u30cd\u30a4\u30eb\u306b\u30ea\u30b5\u30a4\u30ba -imageRenderingEngine.crop_gravity.display-label=\u91cd\u529b -imageRenderingEngine.crop_height.display-label=\u5207\u308a\u53d6\u308a\u9ad8\u3055 -imageRenderingEngine.crop_width.display-label=\u5207\u308a\u53d6\u308a\u5e45 -imageRenderingEngine.crop_x.display-label=\u5207\u308a\u53d6\u308a x -imageRenderingEngine.crop_y.display-label=\u5207\u308a\u53d6\u308a y -imageRenderingEngine.percent_crop.display-label=\u30d1\u30fc\u30bb\u30f3\u30c8\u5207\u308a\u53d6\u308a -imageRenderingEngine.commandOptions.display-label=\u30b3\u30de\u30f3\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3 - -# freemarkerRenderingEngine -freemarkerRenderingEngine.title=Freemarker\u30d9\u30fc\u30b9\u63cf\u753b\u306e\u5b9f\u884c -freemarkerRenderingEngine.image_resolver.display-label=\u753b\u50cf\u30ea\u30be\u30eb\u30d0 - -# xsltRenderingEngine -xsltRenderingEngine.title=XSLT\u30d9\u30fc\u30b9\u63cf\u753b\u306e\u5b9f\u884c diff --git a/config/alfresco/messages/repoadmin-interpreter-help_de_DE.properties b/config/alfresco/messages/repoadmin-interpreter-help_de_DE.properties deleted file mode 100755 index c5eb0c985f..0000000000 --- a/config/alfresco/messages/repoadmin-interpreter-help_de_DE.properties +++ /dev/null @@ -1 +0,0 @@ -repoadmin_console.help=alfresco/messages/repoadmin-interpreter-help.txt diff --git a/config/alfresco/messages/repoadmin-interpreter-help_es_ES.properties b/config/alfresco/messages/repoadmin-interpreter-help_es_ES.properties deleted file mode 100755 index c5eb0c985f..0000000000 --- a/config/alfresco/messages/repoadmin-interpreter-help_es_ES.properties +++ /dev/null @@ -1 +0,0 @@ -repoadmin_console.help=alfresco/messages/repoadmin-interpreter-help.txt diff --git a/config/alfresco/messages/repoadmin-interpreter-help_fr_FR.properties b/config/alfresco/messages/repoadmin-interpreter-help_fr_FR.properties deleted file mode 100755 index c5eb0c985f..0000000000 --- a/config/alfresco/messages/repoadmin-interpreter-help_fr_FR.properties +++ /dev/null @@ -1 +0,0 @@ -repoadmin_console.help=alfresco/messages/repoadmin-interpreter-help.txt diff --git a/config/alfresco/messages/repoadmin-interpreter-help_it_IT.properties b/config/alfresco/messages/repoadmin-interpreter-help_it_IT.properties deleted file mode 100755 index c5eb0c985f..0000000000 --- a/config/alfresco/messages/repoadmin-interpreter-help_it_IT.properties +++ /dev/null @@ -1 +0,0 @@ -repoadmin_console.help=alfresco/messages/repoadmin-interpreter-help.txt diff --git a/config/alfresco/messages/repoadmin-interpreter-help_ja.properties b/config/alfresco/messages/repoadmin-interpreter-help_ja.properties deleted file mode 100755 index c5eb0c985f..0000000000 --- a/config/alfresco/messages/repoadmin-interpreter-help_ja.properties +++ /dev/null @@ -1 +0,0 @@ -repoadmin_console.help=alfresco/messages/repoadmin-interpreter-help.txt diff --git a/config/alfresco/messages/rule-config_de_DE.properties b/config/alfresco/messages/rule-config_de_DE.properties deleted file mode 100755 index e59732bfbc..0000000000 --- a/config/alfresco/messages/rule-config_de_DE.properties +++ /dev/null @@ -1,7 +0,0 @@ -# Rule types - -inbound.display-label=Objekte werden hier erstellt oder hierhin verschoben -outbound.display-label=Objekte werden gel\u00f6scht oder aus diesem Ordner verschoben -update.display-label=Objekte werden aktualisiert -inboundAndUpdate.display-label=Objekte werden hier erstellt, hierhin verschoben oder hier aktualisiert - diff --git a/config/alfresco/messages/rule-config_es_ES.properties b/config/alfresco/messages/rule-config_es_ES.properties deleted file mode 100755 index 252b5c2ae9..0000000000 --- a/config/alfresco/messages/rule-config_es_ES.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Rule types - -inbound.display-label=Los elementos est\u00e1n creados o entran en esta carpeta -outbound.display-label=Los elementos est\u00e1n eliminados o salen de esta carpeta -update.display-label=Los elementos est\u00e1n actualizados -inboundAndUpdate.display-label=Los elementos est\u00e1n creados, entran en esta carpeta o est\u00e1n actualizados diff --git a/config/alfresco/messages/rule-config_fr_FR.properties b/config/alfresco/messages/rule-config_fr_FR.properties deleted file mode 100755 index 740974f763..0000000000 --- a/config/alfresco/messages/rule-config_fr_FR.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Rule types - -inbound.display-label=Des \u00e9l\u00e9ments sont cr\u00e9\u00e9s ou entrent dans ce dossier -outbound.display-label=Des \u00e9l\u00e9ments sont supprim\u00e9s ou quittent ce dossier -update.display-label=Des \u00e9l\u00e9ments sont mis \u00e0 jour -inboundAndUpdate.display-label=Des \u00e9l\u00e9ments sont cr\u00e9\u00e9s, entrent dans ce dossier ou sont mis \u00e0 jour diff --git a/config/alfresco/messages/rule-config_it_IT.properties b/config/alfresco/messages/rule-config_it_IT.properties deleted file mode 100755 index 39260f63c9..0000000000 --- a/config/alfresco/messages/rule-config_it_IT.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Rule types - -inbound.display-label=Gli elementi vengono creati o inseriti in questa cartella -outbound.display-label=Gli elementi vengono eliminati o rimossi da questa cartella -update.display-label=Gli elementi vengono aggiornati -inboundAndUpdate.display-label=Gli elementi vengono creati, inseriti in questa cartella o aggiornati diff --git a/config/alfresco/messages/rule-config_ja.properties b/config/alfresco/messages/rule-config_ja.properties deleted file mode 100755 index b52ec09d6c..0000000000 --- a/config/alfresco/messages/rule-config_ja.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Rule types - -inbound.display-label=\u30a2\u30a4\u30c6\u30e0\u306f\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u3067\u4f5c\u6210\u307e\u305f\u306f\u5165\u529b\u3055\u308c\u307e\u3059 -outbound.display-label=\u30a2\u30a4\u30c6\u30e0\u306f\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u304b\u3089\u524a\u9664\u307e\u305f\u306f\u6b8b\u3055\u308c\u307e\u3059 -update.display-label=\u30a2\u30a4\u30c6\u30e0\u304c\u66f4\u65b0\u3055\u308c\u307e\u3059 -inboundAndUpdate.display-label=\u30a2\u30a4\u30c6\u30e0\u304c\u4f5c\u6210\u3055\u308c\u3001\u3053\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u5165\u308b\u304b\u66f4\u65b0\u3055\u308c\u308b diff --git a/config/alfresco/messages/schema-update_de_DE.properties b/config/alfresco/messages/schema-update_de_DE.properties deleted file mode 100755 index a7afca61c3..0000000000 --- a/config/alfresco/messages/schema-update_de_DE.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Schema update messages - -schema.update.msg.dialect_used=Schema managed by database dialect {0}. -schema.update.msg.bypassing=Bypassing schema update checks. -schema.update.msg.normalized_schema=Normalized schema dumped to file {0}. -schema.update.msg.normalized_schema_pre=Normalized schema (pre-bootstrap) dumped to file {0}. -schema.update.msg.normalized_schema_post=Normalized schema (post-bootstrap) dumped to file {0}. -schema.update.msg.all_statements=All executed statements: {0}. -schema.update.msg.no_changes=No changes were made to the schema. -schema.update.msg.executing_generated_script=Executing database script {0} (Generated). -schema.update.msg.executing_copied_script=Executing database script {0} (Copied from {1}). -schema.update.msg.executing_statement= Executing statement: {0} -schema.update.msg.optional_statement_failed=Optional statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -schema.update.warn.dialect_unsupported=Alfresco should not be used with database dialect {0}. -schema.update.warn.dialect_hsql=Alfresco is using the HSQL default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_derby=Alfresco is using the Apache Derby default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_substituting=The dialect ''{0}'' is being changed to ''{1}''. -schema.update.err.forced_stop=The property 'stopAfterSchemaBootstrap' has been set. The bootstrap process is being terminated. -schema.update.err.dialect_should_use=The dialect ''{0}'' is unsupported. Please use ''{1}'' instead. -schema.update.err.found_multiple=\nMore than one Alfresco schema was found when querying the database metadata.\n Limit the database user's permissions or set the 'hibernate.default_schema' property in 'custom-hibernate-dialect.properties'. -schema.update.err.previous_failed=A previous schema upgrade failed or was not completed. Revert to the original database before attempting the upgrade again. -schema.update.err.statement_failed=Statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -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}). diff --git a/config/alfresco/messages/schema-update_es_ES.properties b/config/alfresco/messages/schema-update_es_ES.properties deleted file mode 100755 index a7afca61c3..0000000000 --- a/config/alfresco/messages/schema-update_es_ES.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Schema update messages - -schema.update.msg.dialect_used=Schema managed by database dialect {0}. -schema.update.msg.bypassing=Bypassing schema update checks. -schema.update.msg.normalized_schema=Normalized schema dumped to file {0}. -schema.update.msg.normalized_schema_pre=Normalized schema (pre-bootstrap) dumped to file {0}. -schema.update.msg.normalized_schema_post=Normalized schema (post-bootstrap) dumped to file {0}. -schema.update.msg.all_statements=All executed statements: {0}. -schema.update.msg.no_changes=No changes were made to the schema. -schema.update.msg.executing_generated_script=Executing database script {0} (Generated). -schema.update.msg.executing_copied_script=Executing database script {0} (Copied from {1}). -schema.update.msg.executing_statement= Executing statement: {0} -schema.update.msg.optional_statement_failed=Optional statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -schema.update.warn.dialect_unsupported=Alfresco should not be used with database dialect {0}. -schema.update.warn.dialect_hsql=Alfresco is using the HSQL default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_derby=Alfresco is using the Apache Derby default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_substituting=The dialect ''{0}'' is being changed to ''{1}''. -schema.update.err.forced_stop=The property 'stopAfterSchemaBootstrap' has been set. The bootstrap process is being terminated. -schema.update.err.dialect_should_use=The dialect ''{0}'' is unsupported. Please use ''{1}'' instead. -schema.update.err.found_multiple=\nMore than one Alfresco schema was found when querying the database metadata.\n Limit the database user's permissions or set the 'hibernate.default_schema' property in 'custom-hibernate-dialect.properties'. -schema.update.err.previous_failed=A previous schema upgrade failed or was not completed. Revert to the original database before attempting the upgrade again. -schema.update.err.statement_failed=Statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -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}). diff --git a/config/alfresco/messages/schema-update_fr_FR.properties b/config/alfresco/messages/schema-update_fr_FR.properties deleted file mode 100755 index a7afca61c3..0000000000 --- a/config/alfresco/messages/schema-update_fr_FR.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Schema update messages - -schema.update.msg.dialect_used=Schema managed by database dialect {0}. -schema.update.msg.bypassing=Bypassing schema update checks. -schema.update.msg.normalized_schema=Normalized schema dumped to file {0}. -schema.update.msg.normalized_schema_pre=Normalized schema (pre-bootstrap) dumped to file {0}. -schema.update.msg.normalized_schema_post=Normalized schema (post-bootstrap) dumped to file {0}. -schema.update.msg.all_statements=All executed statements: {0}. -schema.update.msg.no_changes=No changes were made to the schema. -schema.update.msg.executing_generated_script=Executing database script {0} (Generated). -schema.update.msg.executing_copied_script=Executing database script {0} (Copied from {1}). -schema.update.msg.executing_statement= Executing statement: {0} -schema.update.msg.optional_statement_failed=Optional statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -schema.update.warn.dialect_unsupported=Alfresco should not be used with database dialect {0}. -schema.update.warn.dialect_hsql=Alfresco is using the HSQL default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_derby=Alfresco is using the Apache Derby default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_substituting=The dialect ''{0}'' is being changed to ''{1}''. -schema.update.err.forced_stop=The property 'stopAfterSchemaBootstrap' has been set. The bootstrap process is being terminated. -schema.update.err.dialect_should_use=The dialect ''{0}'' is unsupported. Please use ''{1}'' instead. -schema.update.err.found_multiple=\nMore than one Alfresco schema was found when querying the database metadata.\n Limit the database user's permissions or set the 'hibernate.default_schema' property in 'custom-hibernate-dialect.properties'. -schema.update.err.previous_failed=A previous schema upgrade failed or was not completed. Revert to the original database before attempting the upgrade again. -schema.update.err.statement_failed=Statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -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}). diff --git a/config/alfresco/messages/schema-update_it_IT.properties b/config/alfresco/messages/schema-update_it_IT.properties deleted file mode 100755 index a7afca61c3..0000000000 --- a/config/alfresco/messages/schema-update_it_IT.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Schema update messages - -schema.update.msg.dialect_used=Schema managed by database dialect {0}. -schema.update.msg.bypassing=Bypassing schema update checks. -schema.update.msg.normalized_schema=Normalized schema dumped to file {0}. -schema.update.msg.normalized_schema_pre=Normalized schema (pre-bootstrap) dumped to file {0}. -schema.update.msg.normalized_schema_post=Normalized schema (post-bootstrap) dumped to file {0}. -schema.update.msg.all_statements=All executed statements: {0}. -schema.update.msg.no_changes=No changes were made to the schema. -schema.update.msg.executing_generated_script=Executing database script {0} (Generated). -schema.update.msg.executing_copied_script=Executing database script {0} (Copied from {1}). -schema.update.msg.executing_statement= Executing statement: {0} -schema.update.msg.optional_statement_failed=Optional statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -schema.update.warn.dialect_unsupported=Alfresco should not be used with database dialect {0}. -schema.update.warn.dialect_hsql=Alfresco is using the HSQL default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_derby=Alfresco is using the Apache Derby default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_substituting=The dialect ''{0}'' is being changed to ''{1}''. -schema.update.err.forced_stop=The property 'stopAfterSchemaBootstrap' has been set. The bootstrap process is being terminated. -schema.update.err.dialect_should_use=The dialect ''{0}'' is unsupported. Please use ''{1}'' instead. -schema.update.err.found_multiple=\nMore than one Alfresco schema was found when querying the database metadata.\n Limit the database user's permissions or set the 'hibernate.default_schema' property in 'custom-hibernate-dialect.properties'. -schema.update.err.previous_failed=A previous schema upgrade failed or was not completed. Revert to the original database before attempting the upgrade again. -schema.update.err.statement_failed=Statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -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}). diff --git a/config/alfresco/messages/schema-update_ja.properties b/config/alfresco/messages/schema-update_ja.properties deleted file mode 100755 index a7afca61c3..0000000000 --- a/config/alfresco/messages/schema-update_ja.properties +++ /dev/null @@ -1,29 +0,0 @@ -# Schema update messages - -schema.update.msg.dialect_used=Schema managed by database dialect {0}. -schema.update.msg.bypassing=Bypassing schema update checks. -schema.update.msg.normalized_schema=Normalized schema dumped to file {0}. -schema.update.msg.normalized_schema_pre=Normalized schema (pre-bootstrap) dumped to file {0}. -schema.update.msg.normalized_schema_post=Normalized schema (post-bootstrap) dumped to file {0}. -schema.update.msg.all_statements=All executed statements: {0}. -schema.update.msg.no_changes=No changes were made to the schema. -schema.update.msg.executing_generated_script=Executing database script {0} (Generated). -schema.update.msg.executing_copied_script=Executing database script {0} (Copied from {1}). -schema.update.msg.executing_statement= Executing statement: {0} -schema.update.msg.optional_statement_failed=Optional statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -schema.update.warn.dialect_unsupported=Alfresco should not be used with database dialect {0}. -schema.update.warn.dialect_hsql=Alfresco is using the HSQL default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_derby=Alfresco is using the Apache Derby default database. Please only use this while evaluating Alfresco, it is NOT recommended for production or deployment! -schema.update.warn.dialect_substituting=The dialect ''{0}'' is being changed to ''{1}''. -schema.update.err.forced_stop=The property 'stopAfterSchemaBootstrap' has been set. The bootstrap process is being terminated. -schema.update.err.dialect_should_use=The dialect ''{0}'' is unsupported. Please use ''{1}'' instead. -schema.update.err.found_multiple=\nMore than one Alfresco schema was found when querying the database metadata.\n Limit the database user's permissions or set the 'hibernate.default_schema' property in 'custom-hibernate-dialect.properties'. -schema.update.err.previous_failed=A previous schema upgrade failed or was not completed. Revert to the original database before attempting the upgrade again. -schema.update.err.statement_failed=Statement execution failed:\n SQL: {0}\n Error: {1}\n File: {2}\n Line: {3} -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}). diff --git a/config/alfresco/messages/site-service_de_DE.properties b/config/alfresco/messages/site-service_de_DE.properties deleted file mode 100755 index 6d37b451e5..0000000000 --- a/config/alfresco/messages/site-service_de_DE.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Site service externalised display strings - -site_service.unable_to_create=Site kann nicht erstellt werden, da ihre Kurzbezeichnung {0} bereits vergeben ist. Kurzbezeichnungen von Websites m\u00fcssen eindeutig sein. -site_service.visibility_group_missing=Site kann nicht erstellt werden, da die Gruppe {0} nicht existiert. -site_service.can_not_update=Site {0} kann nicht aktualisiert werden, da sie nicht existiert. -site_service.can_not_delete=Kann Site {0} nicht l\u00f6schen, da sie nicht existiert. -site_service.site_no_exist=Site {0} existiert nicht. -site_service.do_not_remove_manager=Eine Site ben\u00f6tigt mindestens einen Site Manager. Sie k\u00f6nnen {0} nicht aus der Site-Mitgliedschaft entfernen, da sie derzeit die einzigen Site Manager sind. -site_service.can_not_reomve_memebership=Der aktuelle Benutzer verf\u00fcgt nicht \u00fcber ausreichend Berechtigungen, um Mitgliedschaftsdetails der Site {0} zu l\u00f6schen. -site_service.do_not_change_manager=Eine Site ben\u00f6tigt mindestens einen Site Manager. Sie k\u00f6nnen die Rolle von {0} nicht \u00e4ndern, da sie derzeit die einzigen Site Manager sind. -site_service.can_not_change_memebership=Der aktuelle Benutzer verf\u00fcgt nicht \u00fcber die Berechtigungen, um Mitgliedschaftsdetails der Site {0} zu \u00e4ndern. -site_service.site_container_not_folder=Site Container {0} bezieht sich nicht auf einen Ordner. diff --git a/config/alfresco/messages/site-service_es_ES.properties b/config/alfresco/messages/site-service_es_ES.properties deleted file mode 100755 index f1b3cbb828..0000000000 --- a/config/alfresco/messages/site-service_es_ES.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Site service externalised display strings - -site_service.unable_to_create=No se puede crear el sitio debido a que el nombre corto del sitio {0} ya est\u00e1 en uso. Los nombres cortos de sitios deben ser \u00fanicos. -site_service.visibility_group_missing=No se puede crear el sitio debido a que el grupo de visibilidad {0} no existe. -site_service.can_not_update=No se puede actualizar el sitio {0} porque no existe. -site_service.can_not_delete=No se puede eliminar el sitio {0} porque no existe. -site_service.site_no_exist=El sitio {0} no existe. -site_service.do_not_remove_manager=Un sitio requiere al menos un administrador del sitio. Usted no puede quitar a {0} de la pertenencia al sitio, ya que actualmente es el \u00fanico administrador del sitio. -site_service.can_not_reomve_memebership=El usuario actual no tiene permisos suficientes para eliminar detalles de miembros del sitio {0}. -site_service.do_not_change_manager=Un sitio requiere al menos un administrador del sitio. Usted no puede cambiar el rol de {0}, ya que actualmente es el \u00fanico administrador del sitio. -site_service.can_not_change_memebership=El usuario actual no tiene permisos para modificar detalles de pertenencia al sitio {0}. -site_service.site_container_not_folder=El contenedor del sitio {0} no se refiere a una carpeta. diff --git a/config/alfresco/messages/site-service_fr_FR.properties b/config/alfresco/messages/site-service_fr_FR.properties deleted file mode 100755 index 0b968b2d50..0000000000 --- a/config/alfresco/messages/site-service_fr_FR.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Site service externalised display strings - -site_service.unable_to_create=Impossible de cr\u00e9er le site car le nom court du site {0} est d\u00e9j\u00e0 utilis\u00e9. Les noms courts de site doivent \u00eatre uniques. -site_service.visibility_group_missing=Impossible de cr\u00e9er le site car le groupe de visibilit\u00e9 {0} n'existe pas. -site_service.can_not_update=Impossible de mettre \u00e0 jour le site {0} car celui-ci n'existe pas. -site_service.can_not_delete=Impossible de supprimer le site {0} car celui-ci n'existe pas. -site_service.site_no_exist=Le site {0} n'existe pas. -site_service.do_not_remove_manager=Un site n\u00e9cessite au moins un gestionnaire de site. Vous ne pouvez pas retirer \u00e0 {0} l'acc\u00e8s au site car il s'agit du seul gestionnaire du site. -site_service.can_not_reomve_memebership=L'utilisateur actuel ne dispose pas des permissions suffisantes pour supprimer les d\u00e9tails d'appartenance du site {0}. -site_service.do_not_change_manager=Un site n\u00e9cessite au moins un gestionnaire de site. Vous ne pouvez pas modifier le r\u00f4le de 0 car il s'agit du seul gestionnaire du site. -site_service.can_not_change_memebership=L'utilisateur actuel ne dispose pas des permissions suffisantes pour modifier les d\u00e9tails d'appartenance du site {0}. -site_service.site_container_not_folder=Le conteneur de site {0} ne se r\u00e9f\u00e8re pas \u00e0 un dossier. diff --git a/config/alfresco/messages/site-service_it_IT.properties b/config/alfresco/messages/site-service_it_IT.properties deleted file mode 100755 index 491f128665..0000000000 --- a/config/alfresco/messages/site-service_it_IT.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Site service externalised display strings - -site_service.unable_to_create=Impossibile creare il sito perch\u00e9 il nome breve {0} \u00e8 gi\u00e0 in uso. I nomi brevi dei siti devono essere unici. -site_service.visibility_group_missing=Impossibile creare il sito perch\u00e9 il gruppo di visibilit\u00e0 {0} non esiste. -site_service.can_not_update=Impossibile aggiornare il sito {0} perch\u00e9 non esiste. -site_service.can_not_delete=Impossibile eliminare il sito {0} perch\u00e9 non esiste. -site_service.site_no_exist=Il sito {0} non esiste. -site_service.do_not_remove_manager=Un sito deve avere almeno un manager. Non \u00e8 possibile rimuovere {0} dalle appartenenze al sito perch\u00e9 attualmente \u00e8 l'unico manager. -site_service.can_not_reomve_memebership=L'utente attuale non dispone di permessi sufficienti per eliminare i dettagli delle appartenenze del sito {0}. -site_service.do_not_change_manager=Un sito deve avere almeno un manager. Non \u00e8 possibile cambiare il ruolo di {0} perch\u00e9 attualmente \u00e8 l'unico manager. -site_service.can_not_change_memebership=L'utente attuale non dispone di permessi per modificare i dettagli delle appartenenze del sito {0}. -site_service.site_container_not_folder=Il contenitore del sito {0} non referenzia una cartella. diff --git a/config/alfresco/messages/site-service_ja.properties b/config/alfresco/messages/site-service_ja.properties deleted file mode 100755 index 0579a09c4d..0000000000 --- a/config/alfresco/messages/site-service_ja.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Site service externalised display strings - -site_service.unable_to_create=\u30b5\u30a4\u30c8\u306e\u7701\u7565\u540d {0} \u304c\u3059\u3067\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30b5\u30a4\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 \u30b5\u30a4\u30c8\u306e\u7701\u7565\u540d\u306f\u552f\u4e00\u306e\u3082\u306e\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 -site_service.visibility_group_missing=\u516c\u958b\u30ec\u30d9\u30eb\u30b0\u30eb\u30fc\u30d7 {0} \u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u30b5\u30a4\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002 -site_service.can_not_update=\u30b5\u30a4\u30c8 {0} \u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u66f4\u65b0\u3067\u304d\u307e\u305b\u3093\u3002 -site_service.can_not_delete=\u30b5\u30a4\u30c8 {0} \u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002 -site_service.site_no_exist=\u30b5\u30a4\u30c8 {0} \u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 -site_service.do_not_remove_manager=\u30b5\u30a4\u30c8\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u30821\u4eba\u306e\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u5fc5\u8981\u3067\u3059\u3002 \u73fe\u57281\u4eba\u3057\u304b\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u3044\u306a\u3044\u305f\u3081\u3001\u30b5\u30a4\u30c8\u4f1a\u54e1\u304b\u3089 {0} \u3092\u53d6\u308a\u5916\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 -site_service.can_not_reomve_memebership=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u306b\u306f\u3001\u30b5\u30a4\u30c8 {0} \u306e\u4f1a\u54e1\u8a73\u7d30\u3092\u524a\u9664\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -site_service.do_not_change_manager=\u30b5\u30a4\u30c8\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u30821\u4eba\u306e\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u5fc5\u8981\u3067\u3059\u3002 \u73fe\u57281\u4eba\u3057\u304b\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u304c\u3044\u306a\u3044\u305f\u3081\u3001{0} \u306e\u5f79\u5272\u3092\u5909\u66f4\u3067\u304d\u307e\u305b\u3093\u3002 -site_service.can_not_change_memebership=\u73fe\u5728\u306e\u30e6\u30fc\u30b6\u306b\u306f\u3001\u30b5\u30a4\u30c8 {0} \u306e\u4f1a\u54e1\u8a73\u7d30\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306e\u5341\u5206\u306a\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002 -site_service.site_container_not_folder=\u30b5\u30a4\u30c8\u30b3\u30f3\u30c6\u30ca {0} \u304c\u30d5\u30a9\u30eb\u30c0\u3092\u53c2\u7167\u3057\u3066\u3044\u307e\u305b\u3093\u3002 diff --git a/config/alfresco/messages/system-messages_de_DE.properties b/config/alfresco/messages/system-messages_de_DE.properties deleted file mode 100755 index b84511f727..0000000000 --- a/config/alfresco/messages/system-messages_de_DE.properties +++ /dev/null @@ -1,31 +0,0 @@ -# System-related messages - -system.err.property_not_set=Property ''{0}'' has not been set: {1} ({2}) -system.err.duplicate_name=Duplicate child name not allowed: {0} - -# Bootstrap configuration check messages - -system.config_check.warn.dir_root=The Alfresco ''dir.root'' property is set to a relative path ''{0}''. ''dir.root'' should be overridden to point to a specific folder. -system.config_check.msg.dir_root=The Alfresco root data directory (''dir.root'') is: {0} -system.config_check.err.indexes.duplicate_root_node=The store ''{0}'' has a duplicate root node entry. -system.config_check.err.missing_index=CONTENT INTEGRITY ERROR: Indexes not found for {0} stores. -system.config_check.err.missing_content=CONTENT INTEGRITY ERROR: System content not found in content store. -system.config_check.err.fix_dir_root=Ensure that the ''dir.root'' property is pointing to the correct data location. -system.config_check.msg.howto_index_recover=You may set 'index.recovery.mode=FULL' if you need to rebuild the indexes. -system.config_check.warn.starting_with_errors=Alfresco is starting with errors. - -# OpenOffice -system.openoffice.info.connection_verified=The connection to OpenOffice has been established. -system.openoffice.err.connection_failed=An initial OpenOffice connection could not be established. -system.openoffice.err.connection_lost=The OpenOffice connection has been lost. -system.openoffice.err.connection_remade=The OpenOffice connection was re-established. - -# Locks -system.locks.err.failed_to_acquire_lock=Failed to get lock ''{0}'' using token ''{1}''. -system.locks.err.lock_resource_missing=Failed to manipulate lock ''{0}'' using token ''{1}''. The lock resource no longer exists. -system.locks.err.lock_update_count=Failed to update lock ''{0}'' using token ''{1}''. {2} locks were updated when {3} should have been. -system.locks.err.failed_to_release_lock=Failed to release lock ''{0}'' using token ''{1}''. The lock has expired and been taken by another process. -system.locks.err.excl_lock_exists=Failed to get lock ''{0}'' using token ''{1}''. An exclusive lock exists: {2} - -# Multi-Tenant -system.mt.warn.upgrade_mt_admin_context=Please update your alfresco/extension/mt/mt-admin-context.xml (to use latest alfresco/extension/mt/mt-admin-context.xml.sample). diff --git a/config/alfresco/messages/system-messages_es_ES.properties b/config/alfresco/messages/system-messages_es_ES.properties deleted file mode 100755 index b84511f727..0000000000 --- a/config/alfresco/messages/system-messages_es_ES.properties +++ /dev/null @@ -1,31 +0,0 @@ -# System-related messages - -system.err.property_not_set=Property ''{0}'' has not been set: {1} ({2}) -system.err.duplicate_name=Duplicate child name not allowed: {0} - -# Bootstrap configuration check messages - -system.config_check.warn.dir_root=The Alfresco ''dir.root'' property is set to a relative path ''{0}''. ''dir.root'' should be overridden to point to a specific folder. -system.config_check.msg.dir_root=The Alfresco root data directory (''dir.root'') is: {0} -system.config_check.err.indexes.duplicate_root_node=The store ''{0}'' has a duplicate root node entry. -system.config_check.err.missing_index=CONTENT INTEGRITY ERROR: Indexes not found for {0} stores. -system.config_check.err.missing_content=CONTENT INTEGRITY ERROR: System content not found in content store. -system.config_check.err.fix_dir_root=Ensure that the ''dir.root'' property is pointing to the correct data location. -system.config_check.msg.howto_index_recover=You may set 'index.recovery.mode=FULL' if you need to rebuild the indexes. -system.config_check.warn.starting_with_errors=Alfresco is starting with errors. - -# OpenOffice -system.openoffice.info.connection_verified=The connection to OpenOffice has been established. -system.openoffice.err.connection_failed=An initial OpenOffice connection could not be established. -system.openoffice.err.connection_lost=The OpenOffice connection has been lost. -system.openoffice.err.connection_remade=The OpenOffice connection was re-established. - -# Locks -system.locks.err.failed_to_acquire_lock=Failed to get lock ''{0}'' using token ''{1}''. -system.locks.err.lock_resource_missing=Failed to manipulate lock ''{0}'' using token ''{1}''. The lock resource no longer exists. -system.locks.err.lock_update_count=Failed to update lock ''{0}'' using token ''{1}''. {2} locks were updated when {3} should have been. -system.locks.err.failed_to_release_lock=Failed to release lock ''{0}'' using token ''{1}''. The lock has expired and been taken by another process. -system.locks.err.excl_lock_exists=Failed to get lock ''{0}'' using token ''{1}''. An exclusive lock exists: {2} - -# Multi-Tenant -system.mt.warn.upgrade_mt_admin_context=Please update your alfresco/extension/mt/mt-admin-context.xml (to use latest alfresco/extension/mt/mt-admin-context.xml.sample). diff --git a/config/alfresco/messages/system-messages_fr_FR.properties b/config/alfresco/messages/system-messages_fr_FR.properties deleted file mode 100755 index b84511f727..0000000000 --- a/config/alfresco/messages/system-messages_fr_FR.properties +++ /dev/null @@ -1,31 +0,0 @@ -# System-related messages - -system.err.property_not_set=Property ''{0}'' has not been set: {1} ({2}) -system.err.duplicate_name=Duplicate child name not allowed: {0} - -# Bootstrap configuration check messages - -system.config_check.warn.dir_root=The Alfresco ''dir.root'' property is set to a relative path ''{0}''. ''dir.root'' should be overridden to point to a specific folder. -system.config_check.msg.dir_root=The Alfresco root data directory (''dir.root'') is: {0} -system.config_check.err.indexes.duplicate_root_node=The store ''{0}'' has a duplicate root node entry. -system.config_check.err.missing_index=CONTENT INTEGRITY ERROR: Indexes not found for {0} stores. -system.config_check.err.missing_content=CONTENT INTEGRITY ERROR: System content not found in content store. -system.config_check.err.fix_dir_root=Ensure that the ''dir.root'' property is pointing to the correct data location. -system.config_check.msg.howto_index_recover=You may set 'index.recovery.mode=FULL' if you need to rebuild the indexes. -system.config_check.warn.starting_with_errors=Alfresco is starting with errors. - -# OpenOffice -system.openoffice.info.connection_verified=The connection to OpenOffice has been established. -system.openoffice.err.connection_failed=An initial OpenOffice connection could not be established. -system.openoffice.err.connection_lost=The OpenOffice connection has been lost. -system.openoffice.err.connection_remade=The OpenOffice connection was re-established. - -# Locks -system.locks.err.failed_to_acquire_lock=Failed to get lock ''{0}'' using token ''{1}''. -system.locks.err.lock_resource_missing=Failed to manipulate lock ''{0}'' using token ''{1}''. The lock resource no longer exists. -system.locks.err.lock_update_count=Failed to update lock ''{0}'' using token ''{1}''. {2} locks were updated when {3} should have been. -system.locks.err.failed_to_release_lock=Failed to release lock ''{0}'' using token ''{1}''. The lock has expired and been taken by another process. -system.locks.err.excl_lock_exists=Failed to get lock ''{0}'' using token ''{1}''. An exclusive lock exists: {2} - -# Multi-Tenant -system.mt.warn.upgrade_mt_admin_context=Please update your alfresco/extension/mt/mt-admin-context.xml (to use latest alfresco/extension/mt/mt-admin-context.xml.sample). diff --git a/config/alfresco/messages/system-messages_it_IT.properties b/config/alfresco/messages/system-messages_it_IT.properties deleted file mode 100755 index b84511f727..0000000000 --- a/config/alfresco/messages/system-messages_it_IT.properties +++ /dev/null @@ -1,31 +0,0 @@ -# System-related messages - -system.err.property_not_set=Property ''{0}'' has not been set: {1} ({2}) -system.err.duplicate_name=Duplicate child name not allowed: {0} - -# Bootstrap configuration check messages - -system.config_check.warn.dir_root=The Alfresco ''dir.root'' property is set to a relative path ''{0}''. ''dir.root'' should be overridden to point to a specific folder. -system.config_check.msg.dir_root=The Alfresco root data directory (''dir.root'') is: {0} -system.config_check.err.indexes.duplicate_root_node=The store ''{0}'' has a duplicate root node entry. -system.config_check.err.missing_index=CONTENT INTEGRITY ERROR: Indexes not found for {0} stores. -system.config_check.err.missing_content=CONTENT INTEGRITY ERROR: System content not found in content store. -system.config_check.err.fix_dir_root=Ensure that the ''dir.root'' property is pointing to the correct data location. -system.config_check.msg.howto_index_recover=You may set 'index.recovery.mode=FULL' if you need to rebuild the indexes. -system.config_check.warn.starting_with_errors=Alfresco is starting with errors. - -# OpenOffice -system.openoffice.info.connection_verified=The connection to OpenOffice has been established. -system.openoffice.err.connection_failed=An initial OpenOffice connection could not be established. -system.openoffice.err.connection_lost=The OpenOffice connection has been lost. -system.openoffice.err.connection_remade=The OpenOffice connection was re-established. - -# Locks -system.locks.err.failed_to_acquire_lock=Failed to get lock ''{0}'' using token ''{1}''. -system.locks.err.lock_resource_missing=Failed to manipulate lock ''{0}'' using token ''{1}''. The lock resource no longer exists. -system.locks.err.lock_update_count=Failed to update lock ''{0}'' using token ''{1}''. {2} locks were updated when {3} should have been. -system.locks.err.failed_to_release_lock=Failed to release lock ''{0}'' using token ''{1}''. The lock has expired and been taken by another process. -system.locks.err.excl_lock_exists=Failed to get lock ''{0}'' using token ''{1}''. An exclusive lock exists: {2} - -# Multi-Tenant -system.mt.warn.upgrade_mt_admin_context=Please update your alfresco/extension/mt/mt-admin-context.xml (to use latest alfresco/extension/mt/mt-admin-context.xml.sample). diff --git a/config/alfresco/messages/system-messages_ja.properties b/config/alfresco/messages/system-messages_ja.properties deleted file mode 100755 index b84511f727..0000000000 --- a/config/alfresco/messages/system-messages_ja.properties +++ /dev/null @@ -1,31 +0,0 @@ -# System-related messages - -system.err.property_not_set=Property ''{0}'' has not been set: {1} ({2}) -system.err.duplicate_name=Duplicate child name not allowed: {0} - -# Bootstrap configuration check messages - -system.config_check.warn.dir_root=The Alfresco ''dir.root'' property is set to a relative path ''{0}''. ''dir.root'' should be overridden to point to a specific folder. -system.config_check.msg.dir_root=The Alfresco root data directory (''dir.root'') is: {0} -system.config_check.err.indexes.duplicate_root_node=The store ''{0}'' has a duplicate root node entry. -system.config_check.err.missing_index=CONTENT INTEGRITY ERROR: Indexes not found for {0} stores. -system.config_check.err.missing_content=CONTENT INTEGRITY ERROR: System content not found in content store. -system.config_check.err.fix_dir_root=Ensure that the ''dir.root'' property is pointing to the correct data location. -system.config_check.msg.howto_index_recover=You may set 'index.recovery.mode=FULL' if you need to rebuild the indexes. -system.config_check.warn.starting_with_errors=Alfresco is starting with errors. - -# OpenOffice -system.openoffice.info.connection_verified=The connection to OpenOffice has been established. -system.openoffice.err.connection_failed=An initial OpenOffice connection could not be established. -system.openoffice.err.connection_lost=The OpenOffice connection has been lost. -system.openoffice.err.connection_remade=The OpenOffice connection was re-established. - -# Locks -system.locks.err.failed_to_acquire_lock=Failed to get lock ''{0}'' using token ''{1}''. -system.locks.err.lock_resource_missing=Failed to manipulate lock ''{0}'' using token ''{1}''. The lock resource no longer exists. -system.locks.err.lock_update_count=Failed to update lock ''{0}'' using token ''{1}''. {2} locks were updated when {3} should have been. -system.locks.err.failed_to_release_lock=Failed to release lock ''{0}'' using token ''{1}''. The lock has expired and been taken by another process. -system.locks.err.excl_lock_exists=Failed to get lock ''{0}'' using token ''{1}''. An exclusive lock exists: {2} - -# Multi-Tenant -system.mt.warn.upgrade_mt_admin_context=Please update your alfresco/extension/mt/mt-admin-context.xml (to use latest alfresco/extension/mt/mt-admin-context.xml.sample). diff --git a/config/alfresco/messages/system-model_de_DE.properties b/config/alfresco/messages/system-model_de_DE.properties deleted file mode 100755 index cf6501a503..0000000000 --- a/config/alfresco/messages/system-model_de_DE.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Display labels for System Model - -sys_systemmodel.description=Alfresco System Modell - -sys_systemmodel.type.sys_base.title=Basis -sys_systemmodel.type.sys_base.description=Basis - -sys_systemmodel.type.sys_container.title=Container -sys_systemmodel.type.sys_container.description=Container -sys_systemmodel.association.sys_children.title=Kinder -sys_systemmodel.association.sys_children.description=Kinder - -sys_systemmodel.type.sys_store_root.title=Store Root -sys_systemmodel.type.sys_store_root.description=Store Root - -sys_systemmodel.type.sys_reference.title=Referenz -sys_systemmodel.type.sys_reference.description=Referenz -sys_systemmodel.property.sys_reference.title=Referenz -sys_systemmodel.property.sys_reference.description=Referenz - -sys_systemmodel.property.sys_locale.title=Sprachumgebung -sys_systemmodel.property.sys_locale.description=Sprachumgebung - -sys_systemmodel.aspect.aspect_root.title=Root -sys_systemmodel.aspect.aspect_root.description=Root - -sys_systemmodel.aspect.sys_referenceable.title=Referenzierbar -sys_systemmodel.aspect.sys_referenceable.description=Referenzierbar -sys_systemmodel.property.sys_store-protocol.title=Store Protokoll -sys_systemmodel.property.sys_store-protocol.description=Store Protokoll -sys_systemmodel.property.sys_store-identifier.title=Store Identifikator -sys_systemmodel.property.sys_store-identifier.description=Store Identifikator -sys_systemmodel.property.sys_node-uuid.title=Node Identifikator -sys_systemmodel.property.sys_node-uuid.description=Node Identifikator -sys_systemmodel.property.sys_node-dbid.title=Node DB Identifikator -sys_systemmodel.property.sys_node-dbid.description=Node DB Identifikator - -sys_systemmodel.aspect.sys_archived.title=Archiviert -sys_systemmodel.aspect.sys_archived.description=Archivierter Node -sys_systemmodel.property.sys_archivedBy.title=Archiviert von -sys_systemmodel.property.sys_archivedBy.description=Archiviert von -sys_systemmodel.property.sys_archivedDate.title=Archivierungsdatum -sys_systemmodel.property.sys_archivedDate.description=Archivierungsdatum -sys_systemmodel.property.sys_archivedOriginalPath.title=Urspr\u00fcngliche Speicherstelle -sys_systemmodel.property.sys_archivedOriginalPath.description=Urspr\u00fcngliche Speicherstelle - diff --git a/config/alfresco/messages/system-model_es_ES.properties b/config/alfresco/messages/system-model_es_ES.properties deleted file mode 100755 index a83c21be4a..0000000000 --- a/config/alfresco/messages/system-model_es_ES.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Display labels for System Model - -sys_systemmodel.description=Modelo de sistema Alfresco - -sys_systemmodel.type.sys_base.title=Base -sys_systemmodel.type.sys_base.description=Base - -sys_systemmodel.type.sys_container.title=Contenedor -sys_systemmodel.type.sys_container.description=Contenedor -sys_systemmodel.association.sys_children.title=Hijos -sys_systemmodel.association.sys_children.description=Hijos - -sys_systemmodel.type.sys_store_root.title=Almac\u00e9n ra\u00edz -sys_systemmodel.type.sys_store_root.description=Almac\u00e9n ra\u00edz - -sys_systemmodel.type.sys_reference.title=Referencia -sys_systemmodel.type.sys_reference.description=Referencia -sys_systemmodel.property.sys_reference.title=Referencia -sys_systemmodel.property.sys_reference.description=Referencia - -sys_systemmodel.property.sys_locale.title=Idioma -sys_systemmodel.property.sys_locale.description=Idioma - -sys_systemmodel.aspect.aspect_root.title=Ra\u00edz -sys_systemmodel.aspect.aspect_root.description=Ra\u00edz - -sys_systemmodel.aspect.sys_referenceable.title=Referenciable -sys_systemmodel.aspect.sys_referenceable.description=Referenciable -sys_systemmodel.property.sys_store-protocol.title=Protocolo de almacenamiento -sys_systemmodel.property.sys_store-protocol.description=Protocolo de almacenamiento -sys_systemmodel.property.sys_store-identifier.title=Identificador de almac\u00e9n -sys_systemmodel.property.sys_store-identifier.description=Identificador de almac\u00e9n -sys_systemmodel.property.sys_node-uuid.title=Identificador de nodo -sys_systemmodel.property.sys_node-uuid.description=Identificador de nodo -sys_systemmodel.property.sys_node-dbid.title=Identificador de BD de nodo -sys_systemmodel.property.sys_node-dbid.description=Identificador de BD de nodo - -sys_systemmodel.aspect.sys_archived.title=Archivado -sys_systemmodel.aspect.sys_archived.description=Nodo archivado -sys_systemmodel.property.sys_archivedBy.title=Archivado por -sys_systemmodel.property.sys_archivedBy.description=Archivado por -sys_systemmodel.property.sys_archivedDate.title=Fecha de archivado -sys_systemmodel.property.sys_archivedDate.description=Fecha de archivado -sys_systemmodel.property.sys_archivedOriginalPath.title=Ubicaci\u00f3n original -sys_systemmodel.property.sys_archivedOriginalPath.description=Ubicaci\u00f3n original diff --git a/config/alfresco/messages/system-model_fr_FR.properties b/config/alfresco/messages/system-model_fr_FR.properties deleted file mode 100755 index 6761952c9f..0000000000 --- a/config/alfresco/messages/system-model_fr_FR.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Display labels for System Model - -sys_systemmodel.description=Mod\u00e8le syst\u00e8me d'Alfresco - -sys_systemmodel.type.sys_base.title=Base -sys_systemmodel.type.sys_base.description=Base - -sys_systemmodel.type.sys_container.title=Contenant -sys_systemmodel.type.sys_container.description=Contenant -sys_systemmodel.association.sys_children.title=Fils -sys_systemmodel.association.sys_children.description=Fils - -sys_systemmodel.type.sys_store_root.title=Entrep\u00f4t racine -sys_systemmodel.type.sys_store_root.description=Entrep\u00f4t racine - -sys_systemmodel.type.sys_reference.title=R\u00e9f\u00e9rence -sys_systemmodel.type.sys_reference.description=R\u00e9f\u00e9rence -sys_systemmodel.property.sys_reference.title=R\u00e9f\u00e9rence -sys_systemmodel.property.sys_reference.description=R\u00e9f\u00e9rence - -sys_systemmodel.property.sys_locale.title=Local -sys_systemmodel.property.sys_locale.description=Local - -sys_systemmodel.aspect.aspect_root.title=Racine -sys_systemmodel.aspect.aspect_root.description=Racine - -sys_systemmodel.aspect.sys_referenceable.title=R\u00e9f\u00e9ren\u00e7able -sys_systemmodel.aspect.sys_referenceable.description=R\u00e9f\u00e9ren\u00e7able -sys_systemmodel.property.sys_store-protocol.title=Protocole de Stockage (Entrep\u00f4t) -sys_systemmodel.property.sys_store-protocol.description=Protocole de Stockage (Entrep\u00f4t) -sys_systemmodel.property.sys_store-identifier.title=Identifiant d'Entrep\u00f4t -sys_systemmodel.property.sys_store-identifier.description=Identifiant d'Entrep\u00f4t -sys_systemmodel.property.sys_node-uuid.title=Identifiant de Noeud -sys_systemmodel.property.sys_node-uuid.description=Identifiant de Noeud -sys_systemmodel.property.sys_node-dbid.title=Identifiant de base de donn\u00e9es de n\u009cud -sys_systemmodel.property.sys_node-dbid.description=Identifiant de base de donn\u00e9es de n\u009cud - -sys_systemmodel.aspect.sys_archived.title=Archiv\u00e9 -sys_systemmodel.aspect.sys_archived.description=Noeud archiv\u00e9 -sys_systemmodel.property.sys_archivedBy.title=Archiv\u00e9 Par -sys_systemmodel.property.sys_archivedBy.description=Archiv\u00e9 Par -sys_systemmodel.property.sys_archivedDate.title=Date d'archivage -sys_systemmodel.property.sys_archivedDate.description=Date d'archivage -sys_systemmodel.property.sys_archivedOriginalPath.title=Emplacement Original -sys_systemmodel.property.sys_archivedOriginalPath.description=Emplacement Original diff --git a/config/alfresco/messages/system-model_it_IT.properties b/config/alfresco/messages/system-model_it_IT.properties deleted file mode 100755 index 97a6362283..0000000000 --- a/config/alfresco/messages/system-model_it_IT.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Display labels for System Model - -sys_systemmodel.description=Modello di sistema Alfresco - -sys_systemmodel.type.sys_base.title=Base -sys_systemmodel.type.sys_base.description=Base - -sys_systemmodel.type.sys_container.title=Contenitore -sys_systemmodel.type.sys_container.description=Contenitore -sys_systemmodel.association.sys_children.title=Figli -sys_systemmodel.association.sys_children.description=Figli - -sys_systemmodel.type.sys_store_root.title=Radice del deposito -sys_systemmodel.type.sys_store_root.description=Radice del deposito - -sys_systemmodel.type.sys_reference.title=Riferimento -sys_systemmodel.type.sys_reference.description=Riferimento -sys_systemmodel.property.sys_reference.title=Riferimento -sys_systemmodel.property.sys_reference.description=Riferimento - -sys_systemmodel.property.sys_locale.title=Impostazioni locali -sys_systemmodel.property.sys_locale.description=Impostazioni locali - -sys_systemmodel.aspect.aspect_root.title=Root -sys_systemmodel.aspect.aspect_root.description=Root - -sys_systemmodel.aspect.sys_referenceable.title=Referenceable -sys_systemmodel.aspect.sys_referenceable.description=Referenceable -sys_systemmodel.property.sys_store-protocol.title=Protocollo del deposito -sys_systemmodel.property.sys_store-protocol.description=Protocollo del deposito -sys_systemmodel.property.sys_store-identifier.title=Identificativo del deposito -sys_systemmodel.property.sys_store-identifier.description=Identificativo del deposito -sys_systemmodel.property.sys_node-uuid.title=Identificativo del nodo -sys_systemmodel.property.sys_node-uuid.description=Identificativo del nodo -sys_systemmodel.property.sys_node-dbid.title=Identificativo del database del nodo -sys_systemmodel.property.sys_node-dbid.description=Identificativo del database del nodo - -sys_systemmodel.aspect.sys_archived.title=Archived -sys_systemmodel.aspect.sys_archived.description=Archived Node -sys_systemmodel.property.sys_archivedBy.title=Archiviato da -sys_systemmodel.property.sys_archivedBy.description=Archiviato da -sys_systemmodel.property.sys_archivedDate.title=Data di archiviazione -sys_systemmodel.property.sys_archivedDate.description=Data di archiviazione -sys_systemmodel.property.sys_archivedOriginalPath.title=Posizione originale -sys_systemmodel.property.sys_archivedOriginalPath.description=Posizione originale diff --git a/config/alfresco/messages/system-model_ja.properties b/config/alfresco/messages/system-model_ja.properties deleted file mode 100755 index d127e9cc1b..0000000000 --- a/config/alfresco/messages/system-model_ja.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Display labels for System Model - -sys_systemmodel.description=Alfresco\u30b7\u30b9\u30c6\u30e0\u30e2\u30c7\u30eb - -sys_systemmodel.type.sys_base.title=\u30d9\u30fc\u30b9 -sys_systemmodel.type.sys_base.description=\u30d9\u30fc\u30b9 - -sys_systemmodel.type.sys_container.title=\u30b3\u30f3\u30c6\u30ca -sys_systemmodel.type.sys_container.description=\u30b3\u30f3\u30c6\u30ca -sys_systemmodel.association.sys_children.title=\u5b50 -sys_systemmodel.association.sys_children.description=\u5b50 - -sys_systemmodel.type.sys_store_root.title=\u30b9\u30c8\u30a2\u30eb\u30fc\u30c8 -sys_systemmodel.type.sys_store_root.description=\u30b9\u30c8\u30a2\u30eb\u30fc\u30c8 - -sys_systemmodel.type.sys_reference.title=\u53c2\u7167 -sys_systemmodel.type.sys_reference.description=\u53c2\u7167 -sys_systemmodel.property.sys_reference.title=\u53c2\u7167 -sys_systemmodel.property.sys_reference.description=\u53c2\u7167 - -sys_systemmodel.property.sys_locale.title=\u5730\u57df -sys_systemmodel.property.sys_locale.description=\u5730\u57df - -sys_systemmodel.aspect.aspect_root.title=\u30eb\u30fc\u30c8 -sys_systemmodel.aspect.aspect_root.description=\u30eb\u30fc\u30c8 - -sys_systemmodel.aspect.sys_referenceable.title=\u53c2\u7167\u53ef\u80fd -sys_systemmodel.aspect.sys_referenceable.description=\u53c2\u7167\u53ef\u80fd -sys_systemmodel.property.sys_store-protocol.title=\u30b9\u30c8\u30a2\u30d7\u30ed\u30c8\u30b3\u30eb -sys_systemmodel.property.sys_store-protocol.description=\u30b9\u30c8\u30a2\u30d7\u30ed\u30c8\u30b3\u30eb -sys_systemmodel.property.sys_store-identifier.title=\u30b9\u30c8\u30a2ID -sys_systemmodel.property.sys_store-identifier.description=\u30b9\u30c8\u30a2ID -sys_systemmodel.property.sys_node-uuid.title=\u30ce\u30fc\u30c9ID -sys_systemmodel.property.sys_node-uuid.description=\u30ce\u30fc\u30c9ID -sys_systemmodel.property.sys_node-dbid.title=\u30ce\u30fc\u30c9DB\u8b58\u5225\u5b50 -sys_systemmodel.property.sys_node-dbid.description=\u30ce\u30fc\u30c9DB\u8b58\u5225\u5b50 - -sys_systemmodel.aspect.sys_archived.title=\u30a2\u30fc\u30ab\u30a4\u30d6\u6e08 -sys_systemmodel.aspect.sys_archived.description=\u30a2\u30fc\u30ab\u30a4\u30d6 \u30ce\u30fc\u30c9 -sys_systemmodel.property.sys_archivedBy.title=\u30a2\u30fc\u30ab\u30a4\u30d6\u5b9f\u884c\u8005 -sys_systemmodel.property.sys_archivedBy.description=\u30a2\u30fc\u30ab\u30a4\u30d6\u5b9f\u884c\u8005 -sys_systemmodel.property.sys_archivedDate.title=\u30a2\u30fc\u30ab\u30a4\u30d6\u65e5\u4ed8 -sys_systemmodel.property.sys_archivedDate.description=\u30a2\u30fc\u30ab\u30a4\u30d6\u65e5\u4ed8 -sys_systemmodel.property.sys_archivedOriginalPath.title=\u5143\u306e\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3 -sys_systemmodel.property.sys_archivedOriginalPath.description=\u5143\u306e\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3 diff --git a/config/alfresco/messages/template-service_de_DE.properties b/config/alfresco/messages/template-service_de_DE.properties deleted file mode 100755 index 68799b645b..0000000000 --- a/config/alfresco/messages/template-service_de_DE.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Template Service externalised display strings - -error_no_template=Kann Mustervorlage "{0}" nicht finden. Bitte wenden Sie sich an Ihren Systemadministrator. -error_template_fail=Fehler bei der Verarbeitung der Mustervorlage "{0}". Bitte wenden Sie sich an Ihren Systemadministrator. -error_template_io=IO Fehler bei der Verarbeitung der Mustervorlage "{0}". Bitte wenden Sie sich an Ihren Systemadministrator. - diff --git a/config/alfresco/messages/template-service_es_ES.properties b/config/alfresco/messages/template-service_es_ES.properties deleted file mode 100755 index 8087d6f35b..0000000000 --- a/config/alfresco/messages/template-service_es_ES.properties +++ /dev/null @@ -1,5 +0,0 @@ -# Template Service externalised display strings - -error_no_template=No se puede encontrar la plantilla ''{0}''. Por favor, contacte con el administrador del sistema. -error_template_fail=Error durante el procesamiento de la plantilla ''{0}''. Por favor, contacte con el administrador del sistema. -error_template_io=Error E-S durante el procesamiento de la plantilla ''{0}''. Por favor, contacte con el administrador del sistema. diff --git a/config/alfresco/messages/template-service_fr_FR.properties b/config/alfresco/messages/template-service_fr_FR.properties deleted file mode 100755 index 0f180e21f0..0000000000 --- a/config/alfresco/messages/template-service_fr_FR.properties +++ /dev/null @@ -1,5 +0,0 @@ -# Template Service externalised display strings - -error_no_template=Mod\u00e8le ''{0}'' introuvable. Veuillez contacter votre administrateur syst\u00e8me. -error_template_fail=Erreur lors du traitement du mod\u00e8le ''{0}''. Veuillez contacter votre administrateur syst\u00e8me. -error_template_io=Erreur d'E/S lors du traitement du mod\u00e8le ''{0}''. Veuillez contacter votre administrateur syst\u00e8me. diff --git a/config/alfresco/messages/template-service_it_IT.properties b/config/alfresco/messages/template-service_it_IT.properties deleted file mode 100755 index 446ffcdbf0..0000000000 --- a/config/alfresco/messages/template-service_it_IT.properties +++ /dev/null @@ -1,5 +0,0 @@ -# Template Service externalised display strings - -error_no_template=Impossibile trovare il modello ''{0}''. Contattare l'amministratore di sistema. -error_template_fail=Errore durante l'elaborazione del modello ''{0}''. Contattare l'amministratore di sistema. -error_template_io=Errore di IO durante l'elaborazione del modello ''{0}''. Contattare l'amministratore di sistema. diff --git a/config/alfresco/messages/template-service_ja.properties b/config/alfresco/messages/template-service_ja.properties deleted file mode 100755 index c5bf67b7ee..0000000000 --- a/config/alfresco/messages/template-service_ja.properties +++ /dev/null @@ -1,5 +0,0 @@ -# Template Service externalised display strings - -error_no_template=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 ''{0}'' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 \u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002 -error_template_fail=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 ''{0}'' \u306e\u51e6\u7406\u4e2d\u306e\u30a8\u30e9\u30fc\u3067\u3059\u3002 \u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002 -error_template_io=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 ''{0}'' \u306e\u51e6\u7406\u4e2d\u306eI/O\u30a8\u30e9\u30fc\u3067\u3059\u3002 \u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002 diff --git a/config/alfresco/messages/templates-messages_de_DE.properties b/config/alfresco/messages/templates-messages_de_DE.properties deleted file mode 100755 index 08282757bc..0000000000 --- a/config/alfresco/messages/templates-messages_de_DE.properties +++ /dev/null @@ -1,90 +0,0 @@ -#translatable.ftl -templates.translatable.translatable=\u00dcbersetzbar: -templates.translatable.yes=Ja -templates.translatable.no=Nein -templates.translatable.no_document_found=Kein Dokument gefunden - -#show_audit.ftl -templates.show_audit.current_document_audit_info=Audit Info zu aktuellem Dokument -templates.show_audit.name=Name: -templates.show_audit.user_name=Benutzername -templates.show_audit.application=Anwendung -templates.show_audit.service=Service -templates.show_audit.method=Methode -templates.show_audit.timestamp=Zeitstempel -templates.show_audit.failed=Fehlgeschlagen -templates.show_audit.message=Nachricht -templates.show_audit.arg_1=Arg 1 -templates.show_audit.arg_2=Arg 2 -templates.show_audit.arg_3=Arg 3 -templates.show_audit.arg_4=Arg 4 -templates.show_audit.arg_5=Arg 5 -templates.show_audit.return=Zur\u00fcck -templates.show_audit.thowable=Throwable -templates.show_audit.tx=TX -templates.show_audit.current_space_audit_info=Audit Info zu aktuellem Arbeitsbereich: - -#recent_docs.ftl -templates.recent_docs.documents_created_or_modified_in_the_last_week=In der letzten Woche erstellte oder ge\u00e4nderte Dokumente -templates.recent_docs.name=Name -templates.recent_docs.created_date=Datum der Erstellung -templates.recent_docs.modified_date=Datum der \u00c4nderung - -#my_summary.ftl -templates.my_summary.name=Name: -templates.my_summary.user=Benutzer: -templates.my_summary.home_space_location=Speicherstelle des Home-Arbeitsbereichs: -templates.my_summary.items_in_home_space=Elemente im Home-Arbeitsbereich: -templates.my_summary.items_in_company_space=Elemente im Firmen-Arbeitsbereich: - -#my_docs.ftl -templates.my_docs.name=Name -templates.my_docs.size=Gr\u00f6\u00dfe -templates.my_docs.modified.date=Datum der \u00c4nderung -templates.my_docs.locked=Gesperrt -templates.my_docs.kb=KB -templates.my_docs.yes=Ja - -#localizable.ftl -templates.localizable.localisable=Lokalisierbar: -templates.localizable.yes=Ja -templates.localizable.locale=Sprachumgebung: -templates.localizable.no=Nein -templates.localizable.no_document_found=Kein Dokument gefunden! - -#general_example.ftl -templates.general_example.example_template_start= -templates.general_example.company_home_space=Firmen Home-Arbeitsbereich -templates.general_example.my_home_space=Mein Home-Arbeitsbereich: -templates.general_example.company_home_children_count=Anzahl der Kinder des Firmen-Home: -templates.general_example.company_home_first_child_node_name=Node-Name des ersten Kindes im Firmen-Home -templates.general_example.current_document_name=Aktueller Dokumentenname: -templates.general_example.current_space_name=Aktueller Name des Arbeitsbereiches: -templates.general_example.list_of_child_spaces_in_my_home_space=Liste der Kinder-R\u00e4ume in meinem Home-Arbeitsbereich: -templates.general_example.path=Pfad: -templates.general_example.list_of_docs_in_my_home_space=Liste der Dokumente in Meinem Home-Arbeitsbereich (nur Text, Inhalt wird inline, JPG-Bilder als Miniaturansichten angezeigt): -templates.general_example.assoc_example=Assoziierungsbeispiel -templates.general_example.example_template_end= - -#doc_info.ftl -templates.doc_info.current_document_info=Info zum aktuellen Dokument: -templates.doc_info.name=Name: -templates.doc_info.ref=Betreff -templates.doc_info.type=Typ: -templates.doc_info.dbid=DBID: -templates.doc_info.content_url=URL Inhalt: -templates.doc_info.locked=Gesperrt: -templates.doc_info.counter=Z\u00e4hler: -templates.doc_info.aspects=Aspekte: -templates.doc_info.assocs=Assoziierungen: -templates.doc_info.properties=Eigenschaften: -templates.doc_info.no_document_found=Kein Dokument gefunden! - - - - - - - - - diff --git a/config/alfresco/messages/templates-messages_es_ES.properties b/config/alfresco/messages/templates-messages_es_ES.properties deleted file mode 100755 index 2a3bf75ff4..0000000000 --- a/config/alfresco/messages/templates-messages_es_ES.properties +++ /dev/null @@ -1,81 +0,0 @@ -#translatable.ftl -templates.translatable.translatable=Traducible: -templates.translatable.yes=S\u00ed -templates.translatable.no=No -templates.translatable.no_document_found=Ning\u00fan documento encontrado - -#show_audit.ftl -templates.show_audit.current_document_audit_info=Informaci\u00f3n de auditor\u00eda del documento actual -templates.show_audit.name=Nombre: -templates.show_audit.user_name=Nombre de usuario -templates.show_audit.application=Aplicaci\u00f3n -templates.show_audit.service=Servicio -templates.show_audit.method=M\u00e9todo -templates.show_audit.timestamp=Marca de tiempo -templates.show_audit.failed=Fallado -templates.show_audit.message=Mensaje -templates.show_audit.arg_1=Arg 1 -templates.show_audit.arg_2=Arg 2 -templates.show_audit.arg_3=Arg 3 -templates.show_audit.arg_4=Arg 4 -templates.show_audit.arg_5=Arg 5 -templates.show_audit.return=Volver -templates.show_audit.thowable=Desechable -templates.show_audit.tx=TX -templates.show_audit.current_space_audit_info=Informaci\u00f3n de auditor\u00eda del espacio actual - -#recent_docs.ftl -templates.recent_docs.documents_created_or_modified_in_the_last_week=Documentos creados o modificados la \u00faltima semana -templates.recent_docs.name=Nombre -templates.recent_docs.created_date=Fecha de creaci\u00f3n -templates.recent_docs.modified_date=Fecha de modificaci\u00f3n - -#my_summary.ftl -templates.my_summary.name=Nombre: -templates.my_summary.user=Usuario: -templates.my_summary.home_space_location=Ubicaci\u00f3n de espacio personal: -templates.my_summary.items_in_home_space=Elementos en espacio personal: -templates.my_summary.items_in_company_space=Elementos en espacio de empresa: - -#my_docs.ftl -templates.my_docs.name=Nombre -templates.my_docs.size=Tama\u00f1o -templates.my_docs.modified.date=Fecha de modificaci\u00f3n -templates.my_docs.locked=Bloqueado -templates.my_docs.kb=KB -templates.my_docs.yes=S\u00ed - -#localizable.ftl -templates.localizable.localisable=Traducible: -templates.localizable.yes=S\u00ed -templates.localizable.locale=Idioma: -templates.localizable.no=No -templates.localizable.no_document_found=\u00a1Ning\u00fan documento encontrado! - -#general_example.ftl -templates.general_example.example_template_start= -templates.general_example.company_home_space=Espacio inicial de empresa: -templates.general_example.my_home_space=Mi Espacio Personal: -templates.general_example.company_home_children_count=Recuento de hijos de espacio de empresa: -templates.general_example.company_home_first_child_node_name=Nombre de nodo de primer hijo del espacio de empresa: -templates.general_example.current_document_name=Nombre del documento actual: -templates.general_example.current_space_name=Nombre del espacio actual: -templates.general_example.list_of_child_spaces_in_my_home_space=Lista de espacios hijos en Mi Espacio Personal: -templates.general_example.path=Ruta: -templates.general_example.list_of_docs_in_my_home_space=Lista de documentos en Mi Espacio Personal (contenido de s\u00f3lo texto mostrado en l\u00ednea, im\u00e1genes JPG mostradas como miniaturas): -templates.general_example.assoc_example=Ejemplo de asoc.: -templates.general_example.example_template_end= - -#doc_info.ftl -templates.doc_info.current_document_info=Informaci\u00f3n del documento actual: -templates.doc_info.name=Nombre: -templates.doc_info.ref=Ref.: -templates.doc_info.type=Tipo: -templates.doc_info.dbid=DBID: -templates.doc_info.content_url=URL de contenido: -templates.doc_info.locked=Bloqueado: -templates.doc_info.counter=Contador: -templates.doc_info.aspects=Aspectos: -templates.doc_info.assocs=Asociaciones: -templates.doc_info.properties=Propiedades: -templates.doc_info.no_document_found=\u00a1Ning\u00fan documento encontrado! diff --git a/config/alfresco/messages/templates-messages_fr_FR.properties b/config/alfresco/messages/templates-messages_fr_FR.properties deleted file mode 100755 index 13770e31e0..0000000000 --- a/config/alfresco/messages/templates-messages_fr_FR.properties +++ /dev/null @@ -1,81 +0,0 @@ -#translatable.ftl -templates.translatable.translatable=Traduisible\u00a0: -templates.translatable.yes=Oui -templates.translatable.no=Non -templates.translatable.no_document_found=Aucun document - -#show_audit.ftl -templates.show_audit.current_document_audit_info=Informations d'audit du document actuel -templates.show_audit.name=Nom : -templates.show_audit.user_name=Nom d'utilisateur -templates.show_audit.application=Application -templates.show_audit.service=Service -templates.show_audit.method=M\u00e9thode -templates.show_audit.timestamp=Horodatage -templates.show_audit.failed=Echec -templates.show_audit.message=Message -templates.show_audit.arg_1=Arg.\u00a01 -templates.show_audit.arg_2=Arg.\u00a02 -templates.show_audit.arg_3=Arg.\u00a03 -templates.show_audit.arg_4=Arg.\u00a04 -templates.show_audit.arg_5=Arg.\u00a05 -templates.show_audit.return=Retour -templates.show_audit.thowable=Throwable -templates.show_audit.tx=TX -templates.show_audit.current_space_audit_info=Informations d'audit de l'espace actuel\u00a0: - -#recent_docs.ftl -templates.recent_docs.documents_created_or_modified_in_the_last_week=Documents cr\u00e9\u00e9s ou modifi\u00e9s au cours de la derni\u00e8re semaine -templates.recent_docs.name=Nom -templates.recent_docs.created_date=Date de cr\u00e9ation -templates.recent_docs.modified_date=Date de Modification - -#my_summary.ftl -templates.my_summary.name=Nom : -templates.my_summary.user=Utilisateur\u00a0: -templates.my_summary.home_space_location=Emplacement de l'espace personnel\u00a0: -templates.my_summary.items_in_home_space=\u00c9l\u00e9ments dans l'espace personnel\u00a0: -templates.my_summary.items_in_company_space=\u00c9l\u00e9ments dans l'espace de l'entreprise\u00a0: - -#my_docs.ftl -templates.my_docs.name=Nom -templates.my_docs.size=Taille -templates.my_docs.modified.date=Date de Modification -templates.my_docs.locked=Verrouill\u00e9 -templates.my_docs.kb=Ko -templates.my_docs.yes=Oui - -#localizable.ftl -templates.localizable.localisable=Localisable\u00a0: -templates.localizable.yes=Oui -templates.localizable.locale=Param\u00e8tres r\u00e9gionaux\u00a0: -templates.localizable.no=Non -templates.localizable.no_document_found=Aucun document\u00a0! - -#general_example.ftl -templates.general_example.example_template_start= -templates.general_example.company_home_space=Espace personnel de l'entreprise\u00a0: -templates.general_example.my_home_space=Mon espace personnel\u00a0: -templates.general_example.company_home_children_count=Compte enfant de la racine de l'entrep\u00f4t\u00a0: -templates.general_example.company_home_first_child_node_name=Nom du n\u009cud du premier enfant de la racine de l'entrep\u00f4t\u00a0: -templates.general_example.current_document_name=Nom du document actuel\u00a0: -templates.general_example.current_space_name=Nom de l'espace actuel\u00a0: -templates.general_example.list_of_child_spaces_in_my_home_space=Liste des espaces enfants dans mon espace personnel\u00a0: -templates.general_example.path=Chemin: -templates.general_example.list_of_docs_in_my_home_space=Liste des documents dans mon espace personnel (contenu uniquement textuel affich\u00e9 en ligne, images\u00a0JPG affich\u00e9es sous la forme de vignettes)\u00a0: -templates.general_example.assoc_example=Exemple d'assoc.\u00a0: -templates.general_example.example_template_end= - -#doc_info.ftl -templates.doc_info.current_document_info=Informations du document actuel\u00a0: -templates.doc_info.name=Nom : -templates.doc_info.ref=R\u00e9f.\u00a0: -templates.doc_info.type=Type : -templates.doc_info.dbid=DBID\u00a0: -templates.doc_info.content_url=URL de contenu\u00a0: -templates.doc_info.locked=Verrouill\u00e9\u00a0: -templates.doc_info.counter=Compteur\u00a0: -templates.doc_info.aspects=Aspects\u00a0: -templates.doc_info.assocs=Assoc.\u00a0: -templates.doc_info.properties=Propri\u00e9t\u00e9s\u00a0: -templates.doc_info.no_document_found=Aucun document\u00a0! diff --git a/config/alfresco/messages/templates-messages_it_IT.properties b/config/alfresco/messages/templates-messages_it_IT.properties deleted file mode 100755 index f73ffb0bdc..0000000000 --- a/config/alfresco/messages/templates-messages_it_IT.properties +++ /dev/null @@ -1,81 +0,0 @@ -#translatable.ftl -templates.translatable.translatable=Traducibile: -templates.translatable.yes=S\u00ec -templates.translatable.no=No -templates.translatable.no_document_found=Nessun documento trovato - -#show_audit.ftl -templates.show_audit.current_document_audit_info=Info audit documento attuale -templates.show_audit.name=Nome: -templates.show_audit.user_name=Nome utente -templates.show_audit.application=Applicazione -templates.show_audit.service=Servizio -templates.show_audit.method=Metodo -templates.show_audit.timestamp=Timestamp -templates.show_audit.failed=Non riuscito -templates.show_audit.message=Messaggio -templates.show_audit.arg_1=Arg 1 -templates.show_audit.arg_2=Arg 2 -templates.show_audit.arg_3=Arg 3 -templates.show_audit.arg_4=Arg 4 -templates.show_audit.arg_5=Arg 5 -templates.show_audit.return=Risultato -templates.show_audit.thowable=Generabile -templates.show_audit.tx=TX -templates.show_audit.current_space_audit_info=Info audit spazio attuale: - -#recent_docs.ftl -templates.recent_docs.documents_created_or_modified_in_the_last_week=Documenti creati o modificati nell'ultima settimana -templates.recent_docs.name=Nome -templates.recent_docs.created_date=Data di creazione -templates.recent_docs.modified_date=Data di modifica - -#my_summary.ftl -templates.my_summary.name=Nome: -templates.my_summary.user=Utente: -templates.my_summary.home_space_location=Posizione dello spazio di homepage: -templates.my_summary.items_in_home_space=Elementi nello spazio di homepage: -templates.my_summary.items_in_company_space=Elementi nello spazio dell'azienda: - -#my_docs.ftl -templates.my_docs.name=Nome -templates.my_docs.size=Dimensioni -templates.my_docs.modified.date=Data di modifica -templates.my_docs.locked=Bloccato -templates.my_docs.kb=KB -templates.my_docs.yes=S\u00ec - -#localizable.ftl -templates.localizable.localisable=Localizzabile: -templates.localizable.yes=S\u00ec -templates.localizable.locale=Impostazioni locali: -templates.localizable.no=No -templates.localizable.no_document_found=Nessun documento trovato - -#general_example.ftl -templates.general_example.example_template_start= -templates.general_example.company_home_space=Spazio di homepage dell'azienda: -templates.general_example.my_home_space=Il mio spazio di homepage: -templates.general_example.company_home_children_count=Conteggio dei figli nella homepage dell'azienda: -templates.general_example.company_home_first_child_node_name=Nome del primo nodo figlio nella homepage dell'azienda: -templates.general_example.current_document_name=Nome del documento attuale: -templates.general_example.current_space_name=Nome dello spazio attuale: -templates.general_example.list_of_child_spaces_in_my_home_space=Elenco degli spazi figlio nel mio spazio di homepage: -templates.general_example.path=Percorso: -templates.general_example.list_of_docs_in_my_home_space=Elenco dei documenti nel mio spazio di homepage (il contenuto di solo testo viene mostrato in linea, le immagini JPG vengono mostrate come miniature): -templates.general_example.assoc_example=Esempio di associazione: -templates.general_example.example_template_end= - -#doc_info.ftl -templates.doc_info.current_document_info=Info documento attuale: -templates.doc_info.name=Nome: -templates.doc_info.ref=Rif: -templates.doc_info.type=Tipo: -templates.doc_info.dbid=DBID: -templates.doc_info.content_url=URL del contenuto: -templates.doc_info.locked=Bloccato: -templates.doc_info.counter=Contatore: -templates.doc_info.aspects=Aspetti: -templates.doc_info.assocs=Associazioni: -templates.doc_info.properties=Propriet\u00e0: -templates.doc_info.no_document_found=Nessun documento trovato diff --git a/config/alfresco/messages/templates-messages_ja.properties b/config/alfresco/messages/templates-messages_ja.properties deleted file mode 100755 index 2f1b31a6eb..0000000000 --- a/config/alfresco/messages/templates-messages_ja.properties +++ /dev/null @@ -1,81 +0,0 @@ -#translatable.ftl -templates.translatable.translatable=\u7ffb\u8a33\u53ef\u80fd: -templates.translatable.yes=\u306f\u3044 -templates.translatable.no=\u3044\u3044\u3048 -templates.translatable.no_document_found=\u6587\u66f8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 - -#show_audit.ftl -templates.show_audit.current_document_audit_info=\u73fe\u5728\u306e\u6587\u66f8\u306e\u76e3\u67fb\u60c5\u5831 -templates.show_audit.name=\u540d\u524d: -templates.show_audit.user_name=\u30e6\u30fc\u30b6\u540d -templates.show_audit.application=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 -templates.show_audit.service=\u30b5\u30fc\u30d3\u30b9 -templates.show_audit.method=\u65b9\u6cd5 -templates.show_audit.timestamp=\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7 -templates.show_audit.failed=\u5931\u6557 -templates.show_audit.message=\u30e1\u30c3\u30bb\u30fc\u30b8 -templates.show_audit.arg_1=\u5f15\u6570 1 -templates.show_audit.arg_2=\u5f15\u6570 2 -templates.show_audit.arg_3=\u5f15\u6570 3 -templates.show_audit.arg_4=\u5f15\u6570 4 -templates.show_audit.arg_5=\u5f15\u6570 5 -templates.show_audit.return=\u623b\u308a\u5024 -templates.show_audit.thowable=Throwable -templates.show_audit.tx=TX -templates.show_audit.current_space_audit_info=\u73fe\u5728\u306e\u30b9\u30da\u30fc\u30b9\u306e\u76e3\u67fb\u60c5\u5831: - -#recent_docs.ftl -templates.recent_docs.documents_created_or_modified_in_the_last_week=\u5148\u9031\u4f5c\u6210\u3082\u3057\u304f\u306f\u5909\u66f4\u3055\u308c\u305f\u6587\u66f8 -templates.recent_docs.name=\u540d\u524d -templates.recent_docs.created_date=\u4f5c\u6210\u65e5 -templates.recent_docs.modified_date=\u5909\u66f4\u65e5 - -#my_summary.ftl -templates.my_summary.name=\u540d\u524d: -templates.my_summary.user=\u30e6\u30fc\u30b6: -templates.my_summary.home_space_location=\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3: -templates.my_summary.items_in_home_space=\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u30a2\u30a4\u30c6\u30e0: -templates.my_summary.items_in_company_space=\u30ab\u30f3\u30d1\u30cb\u30fc\u30b9\u30da\u30fc\u30b9\u306e\u30a2\u30a4\u30c6\u30e0: - -#my_docs.ftl -templates.my_docs.name=\u540d\u524d -templates.my_docs.size=\u30b5\u30a4\u30ba -templates.my_docs.modified.date=\u5909\u66f4\u65e5 -templates.my_docs.locked=\u30ed\u30c3\u30af\u6e08\u307f -templates.my_docs.kb=KB -templates.my_docs.yes=\u306f\u3044 - -#localizable.ftl -templates.localizable.localisable=\u30ed\u30fc\u30ab\u30e9\u30a4\u30ba\u53ef\u80fd: -templates.localizable.yes=\u306f\u3044 -templates.localizable.locale=\u5730\u57df: -templates.localizable.no=\u3044\u3044\u3048 -templates.localizable.no_document_found=\u6587\u66f8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\uff01 - -#general_example.ftl -templates.general_example.example_template_start======\u30b5\u30f3\u30d7\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u958b\u59cb===== -templates.general_example.company_home_space=\u30ab\u30f3\u30d1\u30cb\u30fc\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9: -templates.general_example.my_home_space=\u30de\u30a4\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9: -templates.general_example.company_home_children_count=\u30ab\u30f3\u30d1\u30cb\u30fc\u30db\u30fc\u30e0\u306e\u5b50\u306e\u30ab\u30a6\u30f3\u30c8: -templates.general_example.company_home_first_child_node_name=\u30ab\u30f3\u30d1\u30cb\u30fc\u30db\u30fc\u30e0\u306e\u6700\u521d\u306e\u5b50\u30ce\u30fc\u30c9\u540d: -templates.general_example.current_document_name=\u73fe\u5728\u306e\u6587\u66f8\u540d: -templates.general_example.current_space_name=\u73fe\u5728\u306e\u30b9\u30da\u30fc\u30b9\u540d: -templates.general_example.list_of_child_spaces_in_my_home_space=\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u30b5\u30d6\u30b9\u30da\u30fc\u30b9\u306e\u30ea\u30b9\u30c8: -templates.general_example.path=\u30d1\u30b9: -templates.general_example.list_of_docs_in_my_home_space=\u30de\u30a4\u30db\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u6587\u66f8\u306e\u30ea\u30b9\u30c8 \uff08\u30c6\u30ad\u30b9\u30c8\u306e\u307f\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u30a4\u30f3\u30e9\u30a4\u30f3\u8868\u793a\u3001JPG\u753b\u50cf\u306f\u30b5\u30e0\u30cd\u30a4\u30eb\u8868\u793a\uff09: -templates.general_example.assoc_example=\u95a2\u9023\u30b5\u30f3\u30d7\u30eb: -templates.general_example.example_template_end======\u30b5\u30f3\u30d7\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u7d42\u4e86===== - -#doc_info.ftl -templates.doc_info.current_document_info=\u73fe\u5728\u306e\u6587\u66f8\u60c5\u5831: -templates.doc_info.name=\u540d\u524d: -templates.doc_info.ref=\u53c2\u7167: -templates.doc_info.type=\u30bf\u30a4\u30d7: -templates.doc_info.dbid=DBID: -templates.doc_info.content_url=\u30b3\u30f3\u30c6\u30f3\u30c4URL: -templates.doc_info.locked=\u30ed\u30c3\u30af\u6e08: -templates.doc_info.counter=\u30ab\u30a6\u30f3\u30bf: -templates.doc_info.aspects=\u30a2\u30b9\u30da\u30af\u30c8: -templates.doc_info.assocs=\u95a2\u9023: -templates.doc_info.properties=\u30d7\u30ed\u30d1\u30c6\u30a3: -templates.doc_info.no_document_found=\u6587\u66f8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\uff01 diff --git a/config/alfresco/messages/tenant-interpreter-help_de_DE.properties b/config/alfresco/messages/tenant-interpreter-help_de_DE.properties deleted file mode 100755 index 8314d0f5e3..0000000000 --- a/config/alfresco/messages/tenant-interpreter-help_de_DE.properties +++ /dev/null @@ -1 +0,0 @@ -tenant_console.help=alfresco/messages/tenant-interpreter-help.txt diff --git a/config/alfresco/messages/tenant-interpreter-help_es_ES.properties b/config/alfresco/messages/tenant-interpreter-help_es_ES.properties deleted file mode 100755 index 8314d0f5e3..0000000000 --- a/config/alfresco/messages/tenant-interpreter-help_es_ES.properties +++ /dev/null @@ -1 +0,0 @@ -tenant_console.help=alfresco/messages/tenant-interpreter-help.txt diff --git a/config/alfresco/messages/tenant-interpreter-help_fr_FR.properties b/config/alfresco/messages/tenant-interpreter-help_fr_FR.properties deleted file mode 100755 index 8314d0f5e3..0000000000 --- a/config/alfresco/messages/tenant-interpreter-help_fr_FR.properties +++ /dev/null @@ -1 +0,0 @@ -tenant_console.help=alfresco/messages/tenant-interpreter-help.txt diff --git a/config/alfresco/messages/tenant-interpreter-help_it_IT.properties b/config/alfresco/messages/tenant-interpreter-help_it_IT.properties deleted file mode 100755 index 8314d0f5e3..0000000000 --- a/config/alfresco/messages/tenant-interpreter-help_it_IT.properties +++ /dev/null @@ -1 +0,0 @@ -tenant_console.help=alfresco/messages/tenant-interpreter-help.txt diff --git a/config/alfresco/messages/tenant-interpreter-help_ja.properties b/config/alfresco/messages/tenant-interpreter-help_ja.properties deleted file mode 100755 index 8314d0f5e3..0000000000 --- a/config/alfresco/messages/tenant-interpreter-help_ja.properties +++ /dev/null @@ -1 +0,0 @@ -tenant_console.help=alfresco/messages/tenant-interpreter-help.txt diff --git a/config/alfresco/messages/transfer-service_de_DE.properties b/config/alfresco/messages/transfer-service_de_DE.properties deleted file mode 100755 index 34b18e378e..0000000000 --- a/config/alfresco/messages/transfer-service_de_DE.properties +++ /dev/null @@ -1,47 +0,0 @@ -# Transfer service externalised display strings - -transfer_service.unable_to_find_transfer_home=Kann Home der \u00dcbertragung nicht finden: {0} -transfer_service.unable_to_find_transfer_group=Kann \u00dcbertragungsgruppe mit Namen {0} nicht finden -transfer_service.unable_to_find_transfer_target=Kann \u00dcbertragungsziel mit Namen {0} nicht finden -transfer_service.unable_to_transfer_async=Kann Async nicht \u00fcbertragen -transfer_service.target_exists=Kann kein neues \u00dcbertragungsziel mit Namen {0} erstellen, da unter diesem Namen bereits ein Ziel existiert. -transfer_service.comms.unsupported_protocol=Nicht unterst\u00fctztes Protokoll: {0} -transfer_service.comms.unsuccessful_response=Von Zielserver erfolglsoen Antwort Code erhalten: {0}, {1} -transfer_service.comms.http_request_failed=HTTP Anfrage {0} an Ziel: {1} Status: {2} nicht ausgef\u00fchrt -transfer_service.no_nodes=Keine zu \u00fcbertragenden Nodes -transfer_service.target_not_enabled=\u00dcbertragungsziel nicht aktiviert {0} -transfer_service.cancelled=\u00dcbertragung abgebrochen -transfer_service.failed_to_get_transfer_status=Abrufen des \u00dcbertragungsstatus von Ziel {0} fehlgeschlagen -transfer_service.target_error=\u00dcbertragungsziel mit {0} fehlgeschlagen -transfer_service.unknown_target_error=Unbekannter Fehler -transfer_service.receiver.no_primary_parent_supplied=\u00dcbertragung nicht m\u00f6glich, kein Prim\u00e4relternteil angegeben. -transfer_service.receiver.orphans_exist=\u00dcbertragung nicht m\u00f6glich, Waisen vorhanden. -transfer_service.receiver.content_file_missing=\u00dcbertragung nicht m\u00f6glich, Inhaltsdateien fehlen. -transfer_service.receiver.failed_to_create_staging_folder=Staging-Verzeichnis f\u00fcr \u00dcbertragung {0} kann nicht erstellt werden -transfer_service.receiver.lock_folder_not_found=Angegebener Sperr-Ordner ist nicht auffindbar: {0} -transfer_service.receiver.temp_folder_not_found=Angegebener tempor\u00e4rer Ordner f\u00fcr \u00dcbertragung {0} ist nicht auffindbar: {1} -transfer_service.receiver.lock_unavailable=\u00dcbertragungssperrung wurde f\u00fcr eine andere eingehende \u00dcbertragung beansprucht. Neue \u00dcbertragung kann nicht gestartet werden. -transfer_service.receiver.record_folder_not_found=Angegebener Ordner f\u00fcr Protokolle eingehender \u00dcbertragungen wurde nicht gefunden: {0} -transfer_service.receiver.not_lock_owner=Fehlgeschlagener Versuch der Ausf\u00fchrung des \u00dcbertragungsvorgangs Sperrung wird nicht von angegebener \u00dcbertragung gehalten: {0} -transfer_service.receiver.error_ending_transfer=Anforderung zur Beendigung einer \u00dcbertragung ({0}) hat zu einem Fehler gef\u00fchrt. -transfer_service.receiver.error_staging_snapshot=Beim Staging der Momentaufnahme einer Datei zur \u00dcbertragung {0} ist ein Fehler aufgetreten -transfer_service.receiver.error_staging_content=Beim Staging einer Inhaltsdatei zur \u00dcbertragung {0} ist ein Fehler aufgetreten Datei-ID ist {1} -transfer_service.receiver.no_snapshot_received=Eine Anfrage nach Ausf\u00fchrung einer \u00dcbertragung ({0}) ist eingegangen, es ist aber keine passende Momentaufnahmen-Datei eingegangen. -transfer_service.receiver.error_committing_transfer=Beim Versuch der Ausf\u00fchrung der \u00dcbertragung {0} ist ein Fehler aufgetreten -transfer_service.receiver.transfer_not_found=Konnte kein Protokoll einer \u00dcbertragungsanfrage finden: {0} -transfer_service.receiver.transfer_cancelled=\u00dcbertragung wurde abgebrochen: {0} -transfer_service.no_encoding=Wert der Serialisierung konnte nicht r\u00fcckg\u00e4ngig gemacht werden, keine Umwandlung f\u00fcr Zeichencodierung {0} -transfer_service.unable_to_deserialise=Serialisierung des Wertes konnte nicht r\u00fcckg\u00e4ngig gemacht werden -transfer_service.receiver.lock_timed_out=\u00dcbertragungssperre, \u00dcbertragungs-Id abgelaufen: {0} -transfer_service.receiver.lock_not_found=\u00dcbertragungssperre nicht gefunden -transfer_service.receiver.error_start=\u00dcbertragung kann nicht gestartet werden -transfer_service.receiver.error_generating_requisite=\u00dcbertragungsanforderung kann nicht erzeugt werden -transfer_service.receiver.error.transfer_to_self=Übertragung an das gleiche Repository nicht zulässig - -transfer_service.missing_endpoint_path=F\u00fcr das \u00dcbertragungsziel wurde kein Endpunkt-Pfad angegeben: {0} -transfer_service.missing_endpoint_protocol=F\u00fcr das \u00dcbertragungsziel wurde kein Endpunkt-Protokoll angegeben: {0} -transfer_service.missing_endpoint_host=F\u00fcr das \u00dcbertragungsziel wurde kein Endpunkt-Host angegeben: {0} -transfer_service.missing_endpoint_port=F\u00fcr das \u00dcbertragungsziel wurde kein Endpunkt-Ausgang angegeben: {0} -transfer_service.missing_endpoint_username=F\u00fcr das \u00dcbertragungsziel wurde kein Endpunkt-Benutzername angegeben: {0} -transfer_service.missing_endpoint_password=F\u00fcr das \u00dcbertragungsziel wurde kein Endpunkt-Passwort angegeben: {0} - diff --git a/config/alfresco/messages/transfer-service_es_ES.properties b/config/alfresco/messages/transfer-service_es_ES.properties deleted file mode 100755 index 02ebdb96ec..0000000000 --- a/config/alfresco/messages/transfer-service_es_ES.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Transfer service externalised display strings - -transfer_service.unable_to_find_transfer_home=No se puede encontrar el inicio de transferencia. {0} -transfer_service.unable_to_find_transfer_group=No se puede encontrar grupo de transferencia con nombre, {0} -transfer_service.unable_to_find_transfer_target=No se puede encontrar destino de transferencia con nombre, {0} -transfer_service.unable_to_transfer_async=No se puede hacer transferencia as\u00edncrona. -transfer_service.target_exists=No se puede crear un nuevo destino de transferencia con el nombre {0}, porque ya existe un destino con ese nombre. -transfer_service.comms.unsupported_protocol=Protocolo no soportado: {0} -transfer_service.comms.unsuccessful_response=Recibido c\u00f3digo de respuesta sin \u00e9xito desde el servidor de destino: {0}, {1} -transfer_service.comms.http_request_failed=No se pudo ejecutar la solicitud HTTP {0} al destino: {1}, estado: {2} -transfer_service.no_nodes=Ning\u00fan nodo para transferir. -transfer_service.target_not_enabled=Destino de transferencia no activado {0} -transfer_service.cancelled=Transferencia cancelada -transfer_service.failed_to_get_transfer_status=No se ha podido recuperar el estado de transferencia desde el destino {0}. -transfer_service.target_error=Destino de transferencia fallido con {0} -transfer_service.unknown_target_error=Error desconocido -transfer_service.receiver.no_primary_parent_supplied=No se puede transferir ning\u00fan padre primario suministrado. -transfer_service.receiver.orphans_exist=No se puede transferir, existen hu\u00e9rfanos -transfer_service.receiver.content_file_missing=No se puede transferir, faltan ficheros de contenido. -transfer_service.receiver.failed_to_create_staging_folder=No se puede crear directorio de preparaci\u00f3n para transferencia {0} -transfer_service.receiver.lock_folder_not_found=No se puede localizar la carpeta de bloqueo especificada: {0} -transfer_service.receiver.temp_folder_not_found=No se puede localizar la carpeta temporaria para la transferencia {0}: {1} -transfer_service.receiver.lock_unavailable=El bloqueo de transferencia ha sido reclamado por otra transferencia entrante. No se puede iniciar una nueva transferencia. -transfer_service.receiver.record_folder_not_found=No se encontr\u00f3 la carpeta especificada para contener los registros de transferencia de entrada: {0} -transfer_service.receiver.not_lock_owner=Intento fallido de llevar a cabo operaci\u00f3n de transferencia. Bloqueo no contenido por la transferencia especificada: {0} -transfer_service.receiver.error_ending_transfer=La solicitud para poner fin a una transferencia ({0}) ha dado lugar a un error. -transfer_service.receiver.error_staging_snapshot=Ha ocurrido un error al preparar fichero de instant\u00e1nea para la transferencia {0} -transfer_service.receiver.error_staging_content=Ha ocurrido un error al preparar un fichero de contenido para la transferencia {0} ID del fichero es {1}. -transfer_service.receiver.no_snapshot_received=Se ha recibido una solicitud para validar la transferencia ({0}), pero no se ha recibido ning\u00fan fichero de instant\u00e1nea coincidente. -transfer_service.receiver.error_committing_transfer=Ha ocurrido un error al intentar validad la transferencia {0} -transfer_service.receiver.transfer_not_found=No se pudo encontrar ning\u00fan registro de la transferencia solicitada: {0} -transfer_service.receiver.transfer_cancelled=La transferencia ha sido cancelada. {0} -transfer_service.no_encoding=No se puede deserializar el valor, ninguna transformaci\u00f3n para la codificaci\u00f3n de {0} -transfer_service.unable_to_deserialise=No se puede deserializar el valor -transfer_service.receiver.lock_timed_out=Bloqueo de transferencia expirado con transferId: {0} -transfer_service.receiver.lock_not_found=No se encontr\u00f3 el bloqueo de transferencia -transfer_service.receiver.error_start=No se puede iniciar una nueva transferencia. -transfer_service.receiver.error_generating_requisite=No se puede iniciar un requisito de transferencia -transfer_service.receiver.error.transfer_to_self=No se permite la transferencia al mismo repositorio - -transfer_service.missing_endpoint_path=No se ha especificado una ruta del destino de transferencia: {0} -transfer_service.missing_endpoint_protocol=No se ha especificado un protocolo para el destino de transferencia: {0} -transfer_service.missing_endpoint_host=No se ha especificado el servidor para el destino de transferencia: {0} -transfer_service.missing_endpoint_port=No se ha especificado un puerto para el servidorl destino de transferencia: {0} -transfer_service.missing_endpoint_username=No se ha especificado el nombre de usuario para el servidor destino de la transferencia: {0} -transfer_service.missing_endpoint_password=No se ha especificado la contrase\u00f1a del destino de transferencia: {0} diff --git a/config/alfresco/messages/transfer-service_fr_FR.properties b/config/alfresco/messages/transfer-service_fr_FR.properties deleted file mode 100755 index 94a14a2242..0000000000 --- a/config/alfresco/messages/transfer-service_fr_FR.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Transfer service externalised display strings - -transfer_service.unable_to_find_transfer_home=Accueil du transfert introuvable\u00a0: {0} -transfer_service.unable_to_find_transfer_group=Groupe de transfert portant le nom {0} introuvable -transfer_service.unable_to_find_transfer_target=Cible de transfert portant le nom {0} introuvable -transfer_service.unable_to_transfer_async=Impossible de transf\u00e9rer de mani\u00e8re async. -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\u00a0: {0} -transfer_service.comms.unsuccessful_response=Code de r\u00e9ponse infructueuse re\u00e7u depuis le serveur cible\u00a0: {0}, {1} -transfer_service.comms.http_request_failed=\u00c9chec d'ex\u00e9cution de la requ\u00eate\u00a0HTTP {0} vers la cible\u00a0: {1} statut\u00a0: {2} -transfer_service.no_nodes=Aucun n\u009cud \u00e0 transf\u00e9rer -transfer_service.target_not_enabled=Cible de transfert non activ\u00e9e {0} -transfer_service.cancelled=Transfert annul\u00e9 -transfer_service.failed_to_get_transfer_status=\u00c9chec de r\u00e9cup\u00e9ration du statut de transfert depuis la cible {0} -transfer_service.target_error=\u00c9chec de la cible de transfert avec {0} -transfer_service.unknown_target_error=Erreur inconnue -transfer_service.receiver.no_primary_parent_supplied=Impossible de transf\u00e9rer le parent non primaire fourni. -transfer_service.receiver.orphans_exist=Transfert impossible, des orphelins sont pr\u00e9sents -transfer_service.receiver.content_file_missing=Transfert impossible, des fichiers de contenu sont manquants. -transfer_service.receiver.failed_to_create_staging_folder=Impossible de cr\u00e9er le r\u00e9pertoire d'activation pour le transfert {0} -transfer_service.receiver.lock_folder_not_found=Impossible de rep\u00e9rer l'emplacement du dossier du verrou sp\u00e9cifi\u00e9\u00a0: {0} -transfer_service.receiver.temp_folder_not_found=Impossible de rep\u00e9rer l'emplacement du dossier temporaire sp\u00e9cifi\u00e9 pour le transfert {0}\u00a0: {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\u00a0: {0} -transfer_service.receiver.not_lock_owner=\u00c9chec de la tentative d'ex\u00e9cution de l'op\u00e9ration de transfert. Verrou non d\u00e9tenu par le transfert sp\u00e9cifi\u00e9\u00a0: {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 capture d'\u00e9cran 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} -transfer_service.receiver.no_snapshot_received=Une requ\u00eate a \u00e9t\u00e9 re\u00e7ue pour la soumission d'un transfert ({0}) mais aucun fichier de capture d'\u00e9cran correspondant n'a \u00e9t\u00e9 re\u00e7u. -transfer_service.receiver.error_committing_transfer=Une erreur s'est produite lors de la tentative de soumission du transfert {0} -transfer_service.receiver.transfer_not_found=Aucun enregistrement du transfert requis n'a \u00e9t\u00e9 trouv\u00e9\u00a0: {0} -transfer_service.receiver.transfer_cancelled=Le transfert a \u00e9t\u00e9 annul\u00e9\u00a0: {0} -transfer_service.no_encoding=Impossible de d\u00e9s\u00e9rialiser la valeur, aucune transformation pour l'encodage {0} -transfer_service.unable_to_deserialise=Impossible de d\u00e9s\u00e9rialiser la valeur -transfer_service.receiver.lock_timed_out=Verrou de transfert expir\u00e9. Identifiant de transfert\u00a0: {0} -transfer_service.receiver.lock_not_found=Verrou de transfert introuvable -transfer_service.receiver.error_start=Impossible de d\u00e9marrer un transfert -transfer_service.receiver.error_generating_requisite=Impossible de g\u00e9n\u00e9rer une condition de transfert -transfer_service.receiver.error.transfer_to_self=Transfert vers le même entrepôt non autorisé - -transfer_service.missing_endpoint_path=Aucun chemin de point d'extr\u00e9mit\u00e9 n'a \u00e9t\u00e9 sp\u00e9cifi\u00e9 pour la cible de transfert\u00a0: {0} -transfer_service.missing_endpoint_protocol=Aucun protocole de point d'extr\u00e9mit\u00e9 n'a \u00e9t\u00e9 sp\u00e9cifi\u00e9 pour la cible de transfert\u00a0: {0} -transfer_service.missing_endpoint_host=Aucun h\u00f4te de point d'extr\u00e9mit\u00e9 n'a \u00e9t\u00e9 sp\u00e9cifi\u00e9 pour la cible de transfert\u00a0: {0} -transfer_service.missing_endpoint_port=Aucun port de point d'extr\u00e9mit\u00e9 n'a \u00e9t\u00e9 sp\u00e9cifi\u00e9 pour la cible de transfert\u00a0: {0} -transfer_service.missing_endpoint_username=Aucun nom d'utilisateur de point d'extr\u00e9mit\u00e9 n'a \u00e9t\u00e9 sp\u00e9cifi\u00e9 pour la cible de transfert\u00a0: {0} -transfer_service.missing_endpoint_password=Aucun mot de passe de point d'extr\u00e9mit\u00e9 n'a \u00e9t\u00e9 sp\u00e9cifi\u00e9 pour la cible de transfert\u00a0: {0} diff --git a/config/alfresco/messages/transfer-service_it_IT.properties b/config/alfresco/messages/transfer-service_it_IT.properties deleted file mode 100755 index de51c28072..0000000000 --- a/config/alfresco/messages/transfer-service_it_IT.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Transfer service externalised display strings - -transfer_service.unable_to_find_transfer_home=Impossibile trovare la homepage di trasferimento: {0} -transfer_service.unable_to_find_transfer_group=Impossibile trovare il gruppo di trasferimento con il nome {0} -transfer_service.unable_to_find_transfer_target=Impossibile trovare la destinazione di trasferimento con il nome {0} -transfer_service.unable_to_transfer_async=Impossibile eseguire il trasferimento in modalit\u00e0 asincrona -transfer_service.target_exists=Impossibile creare una nuova destinazione di trasferimento con il nome {0} perch\u00e9 esiste gi\u00e0 una destinazione con questo nome. -transfer_service.comms.unsupported_protocol=Protocollo non supportato: {0} -transfer_service.comms.unsuccessful_response=Ricevuto codice di risposta di errore dal server di destinazione: {0}, {1} -transfer_service.comms.http_request_failed=Impossibile eseguire la richiesta HTTP {0} per la destinazione: stato {1}: {2} -transfer_service.no_nodes=Nessun nodo da trasferire -transfer_service.target_not_enabled=Destinazione di trasferimento non abilitata {0} -transfer_service.cancelled=Trasferimento annullato -transfer_service.failed_to_get_transfer_status=Impossibile recuperare lo stato di trasferimento dalla destinazione {0}. -transfer_service.target_error=Destinazione di trasferimento non riuscita con {0} -transfer_service.unknown_target_error=Errore sconosciuto -transfer_service.receiver.no_primary_parent_supplied=Impossibile eseguire il trasferimento perch\u00e9 non \u00e8 stato specificato un genitore principale. -transfer_service.receiver.orphans_exist=Impossibile eseguire il trasferimento perch\u00e9 esistono orfani -transfer_service.receiver.content_file_missing=Impossibile eseguire il trasferimento perch\u00e9 mancano file di contenuto. -transfer_service.receiver.failed_to_create_staging_folder=Impossibile creare la directory temporanea per il trasferimento {0} -transfer_service.receiver.lock_folder_not_found=Impossibile individuare la cartella di blocco specificata: {0} -transfer_service.receiver.temp_folder_not_found=Impossibile individuare la cartella temporanea specificata per il trasferimento {0}: {1} -transfer_service.receiver.lock_unavailable=Il blocco di trasferimento \u00e8 stato richiesto per un altro trasferimento in ingresso. Impossibile avviare un nuovo trasferimento. -transfer_service.receiver.record_folder_not_found=Impossibile trovare la cartella specificata in cui inserire i record del trasferimento in ingresso: {0} -transfer_service.receiver.not_lock_owner=Tentativo di eseguire l'operazione di trasferimento non riuscito. Il trasferimento specificato non dispone del blocco: {0} -transfer_service.receiver.error_ending_transfer=La richiesta di terminare un trasferimento ({0}) ha generato un errore. -transfer_service.receiver.error_staging_snapshot=Si \u00e8 verificato un errore durante la gestione temporanea del file di istantanea per il trasferimento {0} -transfer_service.receiver.error_staging_content=Si \u00e8 verificato un errore durante la gestione temporanea di un file di contenuto per il trasferimento {0}. L'ID del file \u00e8 {1}. -transfer_service.receiver.no_snapshot_received=\u00c8 stata ricevuta una richiesta di commit di un trasferimento ({0}), ma non \u00e8 stato ricevuto il file di istantanea corrispondente. -transfer_service.receiver.error_committing_transfer=Si \u00e8 verificato un errore durante il tentativo di commit del trasferimento {0} -transfer_service.receiver.transfer_not_found=Impossibile trovare qualsiasi record del trasferimento richiesto: {0} -transfer_service.receiver.transfer_cancelled=Il trasferimento \u00e8 stato annullato: {0} -transfer_service.no_encoding=Impossibile deserializzare il valore, nessuna trasformazione per la codifica {0} -transfer_service.unable_to_deserialise=Impossibile deserializzare il valore -transfer_service.receiver.lock_timed_out=Timeout blocco di trasferimento con ID: {0} -transfer_service.receiver.lock_not_found=Impossibile trovare il blocco di trasferimento -transfer_service.receiver.error_start=Impossibile avviare un trasferimento -transfer_service.receiver.error_generating_requisite=Impossibile generare il requisito di trasferimento -transfer_service.receiver.error.transfer_to_self=Non è consentito eseguire un trasferimento nello stesso repository - -transfer_service.missing_endpoint_path=Non \u00e8 stato specificato un percorso di endpoint per la destinazione di trasferimento: {0} -transfer_service.missing_endpoint_protocol=Non \u00e8 stato specificato un protocollo di endpoint per la destinazione di trasferimento: {0} -transfer_service.missing_endpoint_host=Non \u00e8 stato specificato un host di endpoint per la destinazione di trasferimento: {0} -transfer_service.missing_endpoint_port=Non \u00e8 stata specificata una porta di endpoint per la destinazione di trasferimento: {0} -transfer_service.missing_endpoint_username=Non \u00e8 stato specificato un nome utente di endpoint per la destinazione di trasferimento: {0} -transfer_service.missing_endpoint_password=Non \u00e8 stata specificata una password di endpoint per la destinazione di trasferimento: {0} diff --git a/config/alfresco/messages/transfer-service_ja.properties b/config/alfresco/messages/transfer-service_ja.properties deleted file mode 100755 index e4549da039..0000000000 --- a/config/alfresco/messages/transfer-service_ja.properties +++ /dev/null @@ -1,46 +0,0 @@ -# Transfer service externalised display strings - -transfer_service.unable_to_find_transfer_home=\u8ee2\u9001\u30db\u30fc\u30e0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0} -transfer_service.unable_to_find_transfer_group=\u540d\u524d, {0} \u306e\u4ed8\u3044\u305f\u8ee2\u9001\u30b0\u30eb\u30fc\u30d7\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -transfer_service.unable_to_find_transfer_target=\u540d\u524d, {0} \u306e\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 -transfer_service.unable_to_transfer_async=\u975e\u540c\u671f\u8ee2\u9001\u304c\u3067\u304d\u307e\u305b\u3093 -transfer_service.target_exists=\u540d\u524d, {0} \u306e\u4ed8\u3044\u305f\u65b0\u3057\u3044\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u4f5c\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u306e\u540d\u524d\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u3059\u3067\u306b\u3042\u308a\u307e\u3059\u3002 -transfer_service.comms.unsupported_protocol=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u306a\u3044\u30d7\u30ed\u30c8\u30b3\u30eb: {0} -transfer_service.comms.unsuccessful_response=\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u30b5\u30fc\u30d0\u304b\u3089\u5931\u6557\u5fdc\u7b54\u3092\u53d7\u3051\u53d6\u308a\u307e\u3057\u305f: {0}, {1} -transfer_service.comms.http_request_failed=\u30bf\u30fc\u30b2\u30c3\u30c8: {1} \u30b9\u30c6\u30fc\u30bf\u30b9: {2} \u306b\u5bfe\u3059\u308bHTTP\u30ea\u30af\u30a8\u30b9\u30c8 {0} \u306e\u5b9f\u884c\u306b\u5931\u6557\u3057\u307e\u3057\u305f -transfer_service.no_nodes=\u8ee2\u9001\u3059\u3079\u304d\u30ce\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093 -transfer_service.target_not_enabled=\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u6709\u52b9\u3067\u3042\u308a\u307e\u305b\u3093 {0} -transfer_service.cancelled=\u8ee2\u9001\u304c\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u307e\u3057\u305f -transfer_service.failed_to_get_transfer_status=\u30bf\u30fc\u30b2\u30c3\u30c8 {0}\u304b\u3089\u306e\u8ee2\u9001\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f -transfer_service.target_error=\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306f {0} \u3067\u306b\u5931\u6557\u3057\u307e\u3057\u305f -transfer_service.unknown_target_error=\u4e0d\u660e\u306a\u30a8\u30e9\u30fc -transfer_service.receiver.no_primary_parent_supplied=\u4e00\u6b21\u89aa\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u8ee2\u9001\u3067\u304d\u307e\u305b\u3093\u3002 -transfer_service.receiver.orphans_exist=\u8ee2\u9001\u3067\u304d\u307e\u305b\u3093\u3002\u5b64\u7acb\u884c\u304c\u5b58\u5728\u3057\u307e\u3059 -transfer_service.receiver.content_file_missing=\u8ee2\u9001\u3067\u304d\u307e\u305b\u3093\u3002\u30b3\u30f3\u30c6\u30f3\u30c4\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 -transfer_service.receiver.failed_to_create_staging_folder=\u8ee2\u9001 {0} \u7528\u306e\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f -transfer_service.receiver.lock_folder_not_found=\u6307\u5b9a\u3057\u305f\u30ed\u30c3\u30af\u30d5\u30a9\u30eb\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: {0} -transfer_service.receiver.temp_folder_not_found=\u8ee2\u9001\u7528\u306b\u6307\u5b9a\u3057\u305f\u4e00\u6642\u30d5\u30a9\u30eb\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 {0}: {1} -transfer_service.receiver.lock_unavailable=\u8ee2\u9001\u30ed\u30c3\u30af\u306f\u4ed6\u306e\u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u8ee2\u9001\u306b\u5bfe\u3057\u3066\u5ba3\u8a00\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u65b0\u3057\u3044\u8ee2\u9001\u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093\u3002 -transfer_service.receiver.record_folder_not_found=\u30a4\u30f3\u30d0\u30a6\u30f3\u30c9\u8ee2\u9001\u8a18\u9332\u3092\u4fdd\u6301\u3059\u308b\u7279\u5b9a\u6e08\u30d5\u30a9\u30eb\u30c0\u306e\u767a\u898b\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} -transfer_service.receiver.not_lock_owner=\u8ee2\u9001\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\u8a66\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 \u6307\u5b9a\u3057\u305f\u8ee2\u9001\u306b\u3088\u308a\u30ed\u30c3\u30af\u304c\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f: {0} -transfer_service.receiver.error_ending_transfer=\u8ee2\u9001 ({0}) \u3092\u5b8c\u4e86\u3059\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u7d50\u679c\u3001\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002 -transfer_service.receiver.error_staging_snapshot=\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u8ee2\u9001 {0}\u7528\u306b\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u3059\u308b\u904e\u7a0b\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -transfer_service.receiver.error_staging_content=\u30b3\u30f3\u30c6\u30f3\u30c4\u30d5\u30a1\u30a4\u30eb\u3092\u8ee2\u9001\u7528\u306b\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u3059\u308b\u904e\u7a0b\u3067\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f {0}\u3002 \u30d5\u30a1\u30a4\u30eb\u306eID\u306f {1} \u3067\u3059 -transfer_service.receiver.no_snapshot_received=\u8ee2\u9001 ({0})\u3092\u30b3\u30df\u30c3\u30c8\u3059\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u53d6\u308a\u307e\u3057\u305f\u304c\u3001\u30de\u30c3\u30c1\u3059\u308b\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u53d7\u4fe1\u3057\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -transfer_service.receiver.error_committing_transfer=\u8ee2\u9001 {0} \u306e\u30b3\u30df\u30c3\u30c8\u3092\u8a66\u307f\u3066\u3044\u308b\u9593\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -transfer_service.receiver.transfer_not_found=\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305f\u8ee2\u9001\u306e\u8a18\u9332\u306e\u767a\u898b\u306b\u5931\u6557\u3057\u307e\u3057\u305f: {0} -transfer_service.receiver.transfer_cancelled=\u8ee2\u9001\u306f\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u3066\u3044\u307e\u3059: {0} -transfer_service.no_encoding=\u5024\u3092\u975e\u76f4\u5217\u5316\u3067\u304d\u307e\u305b\u3093\u3002\u30b3\u30fc\u30c9\u5316 {0} \u306e\u5909\u63db\u306f\u884c\u308f\u308c\u307e\u305b\u3093 -transfer_service.unable_to_deserialise=\u5024\u3092\u975e\u76f4\u5217\u5316\u3067\u304d\u307e\u305b\u3093 -transfer_service.receiver.lock_timed_out=\u8ee2\u9001\u30ed\u30c3\u30af\u304c\u8ee2\u9001ID\u3092\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u307e\u3057\u305f: {0} -transfer_service.receiver.lock_not_found=\u8ee2\u9001\u30ed\u30c3\u30af\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -transfer_service.receiver.error_start=\u8ee2\u9001\u3092\u958b\u59cb\u3067\u304d\u307e\u305b\u3093 -transfer_service.receiver.error_generating_requisite=\u8ee2\u9001\u306e\u5fc5\u8981\u6761\u4ef6\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093 -transfer_service.receiver.error.transfer_to_self=\u8ee2\u9001\u5fc5\u8981\u6761\u4ef6\u3092\u751f\u6210\u3067\u304d\u307e\u305b\u3093 - -transfer_service.missing_endpoint_path=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30d1\u30b9\u304c\u6307\u5b9a\u3057\u305f\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0} -transfer_service.missing_endpoint_protocol=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30d7\u30ed\u30c8\u30b3\u30eb\u304c\u6307\u5b9a\u3057\u305f\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0} -transfer_service.missing_endpoint_host=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30db\u30b9\u30c8\u304c\u6307\u5b9a\u3057\u305f\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0} -transfer_service.missing_endpoint_port=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30dd\u30fc\u30c8\u304c\u6307\u5b9a\u3057\u305f\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0} -transfer_service.missing_endpoint_username=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30e6\u30fc\u30b6\u540d\u304c\u6307\u5b9a\u3057\u305f\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0} -transfer_service.missing_endpoint_password=\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6307\u5b9a\u3057\u305f\u8ee2\u9001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5bfe\u3057\u3066\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093: {0} diff --git a/config/alfresco/messages/version-service_de_DE.properties b/config/alfresco/messages/version-service_de_DE.properties deleted file mode 100755 index 2f50048e3a..0000000000 --- a/config/alfresco/messages/version-service_de_DE.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Version service externalised display strings - -version_service.err_restore_exists=The node {0} cannot be restored since it already exists. -version_service.err_not_found=The current version label of the node does not exist in the version history. -version_service.err_unsupported=The current implementation of the version service does not support the creation of branches. -version_service.err_one_preceeding=The current implementation of the version service only supports one preceding version. -version_service.err_restore_no_version=The node {0} cannot be restored since there is no version information available for this node. -version_service.err_revert_mismatch=The version provided to revert to does not come from the nodes version history. - - -version_service.migration.patch.noop=Nothing to do (no version histories found in old version store) - -version_service.migration.patch.complete=Migration completed - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.in_progress=Migration in progress - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.warn.skip1=Skipped migration of {0} (out of {1}) batches of old version histories (migrate incomplete) in {2} secs -version_service.migration.patch.warn.skip2=Skipped migration of {0} old version histories (already migrated) - -version_service.migration.delete.complete=Completed background deletion of {0} (out of {1}) migrated version histories (from old version store) in {2} secs -version_service.migration.delete.warn.skip1=Skipped background deletion of {0} (out of {1}) batches old version histories (delete incomplete) in {2} secs -version_service.migration.delete.warn.skip2=Skipped background deletion of {0} old version histories (not migrated) diff --git a/config/alfresco/messages/version-service_es_ES.properties b/config/alfresco/messages/version-service_es_ES.properties deleted file mode 100755 index 2f50048e3a..0000000000 --- a/config/alfresco/messages/version-service_es_ES.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Version service externalised display strings - -version_service.err_restore_exists=The node {0} cannot be restored since it already exists. -version_service.err_not_found=The current version label of the node does not exist in the version history. -version_service.err_unsupported=The current implementation of the version service does not support the creation of branches. -version_service.err_one_preceeding=The current implementation of the version service only supports one preceding version. -version_service.err_restore_no_version=The node {0} cannot be restored since there is no version information available for this node. -version_service.err_revert_mismatch=The version provided to revert to does not come from the nodes version history. - - -version_service.migration.patch.noop=Nothing to do (no version histories found in old version store) - -version_service.migration.patch.complete=Migration completed - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.in_progress=Migration in progress - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.warn.skip1=Skipped migration of {0} (out of {1}) batches of old version histories (migrate incomplete) in {2} secs -version_service.migration.patch.warn.skip2=Skipped migration of {0} old version histories (already migrated) - -version_service.migration.delete.complete=Completed background deletion of {0} (out of {1}) migrated version histories (from old version store) in {2} secs -version_service.migration.delete.warn.skip1=Skipped background deletion of {0} (out of {1}) batches old version histories (delete incomplete) in {2} secs -version_service.migration.delete.warn.skip2=Skipped background deletion of {0} old version histories (not migrated) diff --git a/config/alfresco/messages/version-service_fr_FR.properties b/config/alfresco/messages/version-service_fr_FR.properties deleted file mode 100755 index 2f50048e3a..0000000000 --- a/config/alfresco/messages/version-service_fr_FR.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Version service externalised display strings - -version_service.err_restore_exists=The node {0} cannot be restored since it already exists. -version_service.err_not_found=The current version label of the node does not exist in the version history. -version_service.err_unsupported=The current implementation of the version service does not support the creation of branches. -version_service.err_one_preceeding=The current implementation of the version service only supports one preceding version. -version_service.err_restore_no_version=The node {0} cannot be restored since there is no version information available for this node. -version_service.err_revert_mismatch=The version provided to revert to does not come from the nodes version history. - - -version_service.migration.patch.noop=Nothing to do (no version histories found in old version store) - -version_service.migration.patch.complete=Migration completed - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.in_progress=Migration in progress - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.warn.skip1=Skipped migration of {0} (out of {1}) batches of old version histories (migrate incomplete) in {2} secs -version_service.migration.patch.warn.skip2=Skipped migration of {0} old version histories (already migrated) - -version_service.migration.delete.complete=Completed background deletion of {0} (out of {1}) migrated version histories (from old version store) in {2} secs -version_service.migration.delete.warn.skip1=Skipped background deletion of {0} (out of {1}) batches old version histories (delete incomplete) in {2} secs -version_service.migration.delete.warn.skip2=Skipped background deletion of {0} old version histories (not migrated) diff --git a/config/alfresco/messages/version-service_it_IT.properties b/config/alfresco/messages/version-service_it_IT.properties deleted file mode 100755 index 2f50048e3a..0000000000 --- a/config/alfresco/messages/version-service_it_IT.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Version service externalised display strings - -version_service.err_restore_exists=The node {0} cannot be restored since it already exists. -version_service.err_not_found=The current version label of the node does not exist in the version history. -version_service.err_unsupported=The current implementation of the version service does not support the creation of branches. -version_service.err_one_preceeding=The current implementation of the version service only supports one preceding version. -version_service.err_restore_no_version=The node {0} cannot be restored since there is no version information available for this node. -version_service.err_revert_mismatch=The version provided to revert to does not come from the nodes version history. - - -version_service.migration.patch.noop=Nothing to do (no version histories found in old version store) - -version_service.migration.patch.complete=Migration completed - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.in_progress=Migration in progress - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.warn.skip1=Skipped migration of {0} (out of {1}) batches of old version histories (migrate incomplete) in {2} secs -version_service.migration.patch.warn.skip2=Skipped migration of {0} old version histories (already migrated) - -version_service.migration.delete.complete=Completed background deletion of {0} (out of {1}) migrated version histories (from old version store) in {2} secs -version_service.migration.delete.warn.skip1=Skipped background deletion of {0} (out of {1}) batches old version histories (delete incomplete) in {2} secs -version_service.migration.delete.warn.skip2=Skipped background deletion of {0} old version histories (not migrated) diff --git a/config/alfresco/messages/version-service_ja.properties b/config/alfresco/messages/version-service_ja.properties deleted file mode 100755 index 2f50048e3a..0000000000 --- a/config/alfresco/messages/version-service_ja.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Version service externalised display strings - -version_service.err_restore_exists=The node {0} cannot be restored since it already exists. -version_service.err_not_found=The current version label of the node does not exist in the version history. -version_service.err_unsupported=The current implementation of the version service does not support the creation of branches. -version_service.err_one_preceeding=The current implementation of the version service only supports one preceding version. -version_service.err_restore_no_version=The node {0} cannot be restored since there is no version information available for this node. -version_service.err_revert_mismatch=The version provided to revert to does not come from the nodes version history. - - -version_service.migration.patch.noop=Nothing to do (no version histories found in old version store) - -version_service.migration.patch.complete=Migration completed - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.in_progress=Migration in progress - migrated {0} (out of {1}) of old version histories (to new version store) in {2} secs (deleteImmediately={3}) -version_service.migration.patch.warn.skip1=Skipped migration of {0} (out of {1}) batches of old version histories (migrate incomplete) in {2} secs -version_service.migration.patch.warn.skip2=Skipped migration of {0} old version histories (already migrated) - -version_service.migration.delete.complete=Completed background deletion of {0} (out of {1}) migrated version histories (from old version store) in {2} secs -version_service.migration.delete.warn.skip1=Skipped background deletion of {0} (out of {1}) batches old version histories (delete incomplete) in {2} secs -version_service.migration.delete.warn.skip2=Skipped background deletion of {0} old version histories (not migrated) diff --git a/config/alfresco/messages/wcm-services_de_DE.properties b/config/alfresco/messages/wcm-services_de_DE.properties deleted file mode 100755 index f8f942fb0f..0000000000 --- a/config/alfresco/messages/wcm-services_de_DE.properties +++ /dev/null @@ -1,18 +0,0 @@ -# WCM service related messages - -# WCM actions - -wcm-submit.title=Ver\u00e4nderte Assets einer Sandbox mit WCM Autor der entsprechenden Staging Sandbox vorlegen -wcm-submit.description=Damit werden ge\u00e4nderte Assets in der Liste oder alle ge\u00e4nderten Assets (wenn Liste gleich Null/leer) vorgelegt -wcm-submit.sandbox-id.display-label=ID des Sandbox-Speichers -wcm-submit.path-list.display-label=Die Liste der Asset-Pfade (bez\u00fcglich des Sandbox Speichers) - -wcm-undo.title=Ver\u00e4nderte Assets in einer WCM Sandbox r\u00fcckg\u00e4ngig machen -wcm-undo.description=Damit werden ge\u00e4nderte Assets in der Liste oder alle ge\u00e4nderten Assets (wenn Liste gleich Null/leer) r\u00fcckg\u00e4ngig gemacht/zur\u00fcckgestellt -wcm-undo.sandbox-id.display-label=ID des Sandbox-Speichers -wcm-undo.path-list.display-label=Die Liste der Asset-Pfade (bez\u00fcglich des Sandbox Speichers) - -wcm-revert-snapshot.title=Einen WCM Sandbox Speicher auf die bezeichnete Momentaufnahme zur\u00fccksetzen (Kopie weiterleiten) -wcm-revert-snapshot.description=Damit werden alle Assets in einem WCM Sandbox Speicher auf die angegebene Version der Momentaufnahme zur\u00fcckgesetzt -wcm-revert-snapshot.version.display-label=Version der Momentaufnahme, auf die zur\u00fcckgesetzt werden soll. - diff --git a/config/alfresco/messages/wcm-services_es_ES.properties b/config/alfresco/messages/wcm-services_es_ES.properties deleted file mode 100755 index d5cae5ed66..0000000000 --- a/config/alfresco/messages/wcm-services_es_ES.properties +++ /dev/null @@ -1,17 +0,0 @@ -# WCM service related messages - -# WCM actions - -wcm-submit.title=Enviar activos cambiados desde un sandbox de autor WCM al espacio de prueba inicial correspondiente -wcm-submit.description=Esto env\u00eda los activos cambiados incluidos en la lista o todos los activos cambiados (si la lista es nula o vac\u00eda) -wcm-submit.sandbox-id.display-label=ID de almac\u00e9n de sandbox -wcm-submit.path-list.display-label=La lista de rutas de activos (en relaci\u00f3n al almac\u00e9n de sandbox) - -wcm-undo.title=Deshacer activos cambiados en un sandbox de WCM -wcm-undo.description=Esto deshar\u00e1/restablecer\u00e1 los activos cambiados incluidos en la lista o todos los activos cambiados (si la lista es nula o vac\u00eda) -wcm-undo.sandbox-id.display-label=ID de almac\u00e9n de sandbox -wcm-undo.path-list.display-label=La lista de rutas de activos (en relaci\u00f3n al almac\u00e9n de sandbox) - -wcm-revert-snapshot.title=Restablecer (reenviar copia) de un sandbox WCM a la instant\u00e1nea dada -wcm-revert-snapshot.description=Esto restablece todos los activos de un sandbox WCM a la versi\u00f3n de instant\u00e1nea dada -wcm-revert-snapshot.version.display-label=La versi\u00f3n de instant\u00e1nea a la cual restablecer. diff --git a/config/alfresco/messages/wcm-services_fr_FR.properties b/config/alfresco/messages/wcm-services_fr_FR.properties deleted file mode 100755 index 386a34a665..0000000000 --- a/config/alfresco/messages/wcm-services_fr_FR.properties +++ /dev/null @@ -1,17 +0,0 @@ -# WCM service related messages - -# WCM actions - -wcm-submit.title=Soumission des ressources modifi\u00e9es depuis le bac \u00e0 sable de l'auteur\u00a0WCM vers le bac \u00e0 sable de recette correspondant -wcm-submit.description=Soumet les ressources modifi\u00e9es incluses dans la liste ou toutes les ressources modifi\u00e9es (si la liste est nulle/vide) -wcm-submit.sandbox-id.display-label=Identifiant du stockage du bac \u00e0 sable -wcm-submit.path-list.display-label=Liste des chemins des ressources (relatifs au stockage de bac \u00e0 sable) - -wcm-undo.title=Annule les ressources modifi\u00e9es dans un bac \u00e0 sable\u00a0WCM -wcm-undo.description=Annule/R\u00e9tablit les ressources modifi\u00e9es incluses dans la liste ou toutes les ressources modifi\u00e9es (si la liste est nulle/vide) -wcm-undo.sandbox-id.display-label=Identifiant du stockage du bac \u00e0 sable -wcm-undo.path-list.display-label=Liste des chemins des ressources (relatifs au stockage de bac \u00e0 sable) - -wcm-revert-snapshot.title=R\u00e9tablir (recopier) un stockage de bac \u00e0 sable\u00a0WCM vers la capture d'\u00e9cran sp\u00e9cifi\u00e9e -wcm-revert-snapshot.description=R\u00e9tablit toutes les ressources dans un bac \u00e0 sable\u00a0WCM vers la version de clich\u00e9 donn\u00e9e -wcm-revert-snapshot.version.display-label=Version de clich\u00e9 vers laquelle le r\u00e9tablissement est effectu\u00e9 diff --git a/config/alfresco/messages/wcm-services_it_IT.properties b/config/alfresco/messages/wcm-services_it_IT.properties deleted file mode 100755 index 5a9315a9d9..0000000000 --- a/config/alfresco/messages/wcm-services_it_IT.properties +++ /dev/null @@ -1,17 +0,0 @@ -# WCM service related messages - -# WCM actions - -wcm-submit.title=Invia risorse cambiate dalla sandbox di un autore WCM nella sandbox temporanea corrispondente -wcm-submit.description=Invia le risorse cambiate incluse nell'elenco o tutte le risorse cambiate (se l'elenco \u00e8 null/vuoto) -wcm-submit.sandbox-id.display-label=ID del deposito della sandbox -wcm-submit.path-list.display-label=Elenco di percorsi delle risorse (rispetto al deposito della sandbox) - -wcm-undo.title=Annulla risorse cambiate in una sandbox WCM -wcm-undo.description=Annulla/inverte le risorse cambiate incluse nell'elenco o tutte le risorse cambiate (se l'elenco \u00e8 null/vuoto) -wcm-undo.sandbox-id.display-label=ID del deposito della sandbox -wcm-undo.path-list.display-label=Elenco di percorsi delle risorse (rispetto al deposito della sandbox) - -wcm-revert-snapshot.title=Inverti (copia avanti) il deposito di una sandbox WCM nell'istantanea specificata -wcm-revert-snapshot.description=Inverte nella versione dell'istantanea specificata tutte le risorse presenti nel deposito di una sandbox WCM -wcm-revert-snapshot.version.display-label=Versione dell'istantanea verso cui eseguire l'inversione diff --git a/config/alfresco/messages/wcm-services_ja.properties b/config/alfresco/messages/wcm-services_ja.properties deleted file mode 100755 index 66341da8d4..0000000000 --- a/config/alfresco/messages/wcm-services_ja.properties +++ /dev/null @@ -1,17 +0,0 @@ -# WCM service related messages - -# WCM actions - -wcm-submit.title=WCM\u306e\u4f5c\u6210\u8005\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u304b\u3089\u5bfe\u5fdc\u3059\u308b\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u3078\u5909\u66f4\u3055\u308c\u305f\u30a2\u30bb\u30c3\u30c8\u306e\u9001\u4fe1 -wcm-submit.description=\u3053\u308c\u306b\u3088\u308a\u3001\u30ea\u30b9\u30c8\u306b\u542b\u307e\u308c\u308b\u5909\u66f4\u6e08\u307f\u30a2\u30bb\u30c3\u30c8\u307e\u305f\u306f\u3059\u3079\u3066\u306e\u5909\u66f4\u6e08\u30a2\u30bb\u30c3\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3059\uff08\u30ea\u30b9\u30c8\u304c\u30cc\u30eb/\u7a7a\u306e\u5834\u5408\uff09 -wcm-submit.sandbox-id.display-label=\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30b9\u30c8\u30a2ID -wcm-submit.path-list.display-label=\u30a2\u30bb\u30c3\u30c8\u30d1\u30b9\u306e\u30ea\u30b9\u30c8\uff08\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30b9\u30c8\u30a2\u3068\u76f8\u5bfe\u7684\uff09 - -wcm-undo.title=WCM\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u306e\u5909\u66f4\u6e08\u30a2\u30bb\u30c3\u30c8\u3092\u5143\u306b\u623b\u3059 -wcm-undo.description=\u3053\u308c\u306b\u3088\u308a\u3001\u30ea\u30b9\u30c8\u306b\u542b\u307e\u308c\u308b\u5909\u66f4\u6e08\u30a2\u30bb\u30c3\u30c8\u307e\u305f\u306f\u3059\u3079\u3066\u306e\u5909\u66f4\u6e08\u307f\u30a2\u30bb\u30c3\u30c8\u304c\u5143\u306b\u623b\u3055\u308c/\u9006\u623b\u308a\u3057\u307e\u3059\uff08\u30ea\u30b9\u30c8\u304c\u30cc\u30eb/\u7a7a\u306e\u5834\u5408\uff09 -wcm-undo.sandbox-id.display-label=\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30b9\u30c8\u30a2ID -wcm-undo.path-list.display-label=\u30a2\u30bb\u30c3\u30c8\u30d1\u30b9\u306e\u30ea\u30b9\u30c8\uff08\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30b9\u30c8\u30a2\u3068\u76f8\u5bfe\u7684\uff09 - -wcm-revert-snapshot.title=WCM\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30b9\u30c8\u30a2\u3092\u7279\u5b9a\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306b\u623b\u3059 -wcm-revert-snapshot.description=\u3053\u308c\u306b\u3088\u308a\u3001WCM\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30b9\u30c8\u30a2\u306e\u3059\u3079\u3066\u306e\u30a2\u30bb\u30c3\u30c8\u304c\u7279\u5b9a\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u623b\u3055\u308c\u307e\u3059 -wcm-revert-snapshot.version.display-label=\u9006\u306b\u623b\u3059\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3 diff --git a/config/alfresco/messages/webdav-messages_de_DE.properties b/config/alfresco/messages/webdav-messages_de_DE.properties deleted file mode 100755 index c7a9d8b1e1..0000000000 --- a/config/alfresco/messages/webdav-messages_de_DE.properties +++ /dev/null @@ -1,14 +0,0 @@ -# webdav HTML page messages - -webdav.repository_title=Alfresco Content Repository -webdav.directory_listing=Verzeichnis-Listing f\u00fcr -webdav.column.name=Name -webdav.column.size=Gr\u00f6\u00dfe -webdav.column.type=Typ -webdav.column.modifieddate=Datum der \u00c4nderung -webdav.column.navigate_up=Eine Ebene h\u00f6her -webdav.err.dir=Bei Generierung des Verzeichnis-Listing ist ein Fehler aufgetreten, bitte wenden Sie sich an Ihren Systemadministrator -webdav.size.bytes=Bytes -webdav.size.kilobytes=Kb -webdav.size.megabytes=Mb - diff --git a/config/alfresco/messages/webdav-messages_es_ES.properties b/config/alfresco/messages/webdav-messages_es_ES.properties deleted file mode 100755 index 84b463d3cc..0000000000 --- a/config/alfresco/messages/webdav-messages_es_ES.properties +++ /dev/null @@ -1,13 +0,0 @@ -# webdav HTML page messages - -webdav.repository_title=Repositorio de contenidos de Alfresco -webdav.directory_listing=Listado de directorio para -webdav.column.name=Nombre -webdav.column.size=Tama\u00f1o -webdav.column.type=Tipo -webdav.column.modifieddate=Fecha de modificaci\u00f3n -webdav.column.navigate_up=Subir un nivel -webdav.err.dir=Se produjo un error al generar el listado de directorio, por favor contacte al administrador del sistema. -webdav.size.bytes=bytes -webdav.size.kilobytes=KB -webdav.size.megabytes=MB diff --git a/config/alfresco/messages/webdav-messages_fr_FR.properties b/config/alfresco/messages/webdav-messages_fr_FR.properties deleted file mode 100755 index effd758721..0000000000 --- a/config/alfresco/messages/webdav-messages_fr_FR.properties +++ /dev/null @@ -1,13 +0,0 @@ -# webdav HTML page messages - -webdav.repository_title=Entrep\u00f4t de donn\u00e9es Alfresco -webdav.directory_listing=Contenu du r\u00e9pertoire -webdav.column.name=Nom -webdav.column.size=Taille -webdav.column.type=Type -webdav.column.modifieddate=Date de Modification -webdav.column.navigate_up=Retour d'un niveau -webdav.err.dir=Une erreur est survenue lors de la g\u00e9n\u00e9ration du contenu du r\u00e9pertoire, veuillez contacter l'administrateur syst\u00e8me. -webdav.size.bytes=octets -webdav.size.kilobytes=Kilo-octets -webdav.size.megabytes=M\u00e9ga-octets diff --git a/config/alfresco/messages/webdav-messages_it_IT.properties b/config/alfresco/messages/webdav-messages_it_IT.properties deleted file mode 100755 index 095965d08c..0000000000 --- a/config/alfresco/messages/webdav-messages_it_IT.properties +++ /dev/null @@ -1,13 +0,0 @@ -# webdav HTML page messages - -webdav.repository_title=Repository di contenuto Alfresco -webdav.directory_listing=Elenco di directory per -webdav.column.name=Nome -webdav.column.size=Dimensioni -webdav.column.type=Tipo -webdav.column.modifieddate=Data di modifica -webdav.column.navigate_up=Livello superiore -webdav.err.dir=Si \u00e8 verificato un errore durante la generazione dell'elenco di directory. Contattare l'amministratore di sistema. -webdav.size.bytes=byte -webdav.size.kilobytes=KB -webdav.size.megabytes=MB diff --git a/config/alfresco/messages/webdav-messages_ja.properties b/config/alfresco/messages/webdav-messages_ja.properties deleted file mode 100755 index ff1ccd3af5..0000000000 --- a/config/alfresco/messages/webdav-messages_ja.properties +++ /dev/null @@ -1,13 +0,0 @@ -# webdav HTML page messages - -webdav.repository_title=Alfresco\u30b3\u30f3\u30c6\u30f3\u30c4\u30ea\u30dd\u30b8\u30c8\u30ea -webdav.directory_listing=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30ea\u30b9\u30c8 -webdav.column.name=\u540d\u524d -webdav.column.size=\u30b5\u30a4\u30ba -webdav.column.type=\u30bf\u30a4\u30d7 -webdav.column.modifieddate=\u5909\u66f4\u65e5 -webdav.column.navigate_up=\u30ec\u30d9\u30eb\u3092\u4e0a\u3052\u308b -webdav.err.dir=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30ea\u30b9\u30c8\u4f5c\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u554f\u3044\u5408\u308f\u305b\u3066\u304f\u3060\u3055\u3044\u3002 -webdav.size.bytes=\u30d0\u30a4\u30c8 -webdav.size.kilobytes=KB -webdav.size.megabytes=MB diff --git a/config/alfresco/messages/workflow-interpreter-help_de_DE.properties b/config/alfresco/messages/workflow-interpreter-help_de_DE.properties deleted file mode 100755 index 398b1b772b..0000000000 --- a/config/alfresco/messages/workflow-interpreter-help_de_DE.properties +++ /dev/null @@ -1 +0,0 @@ -workflow_console.help=alfresco/messages/workflow-interpreter-help.txt diff --git a/config/alfresco/messages/workflow-interpreter-help_es_ES.properties b/config/alfresco/messages/workflow-interpreter-help_es_ES.properties deleted file mode 100755 index 398b1b772b..0000000000 --- a/config/alfresco/messages/workflow-interpreter-help_es_ES.properties +++ /dev/null @@ -1 +0,0 @@ -workflow_console.help=alfresco/messages/workflow-interpreter-help.txt diff --git a/config/alfresco/messages/workflow-interpreter-help_fr_FR.properties b/config/alfresco/messages/workflow-interpreter-help_fr_FR.properties deleted file mode 100755 index 398b1b772b..0000000000 --- a/config/alfresco/messages/workflow-interpreter-help_fr_FR.properties +++ /dev/null @@ -1 +0,0 @@ -workflow_console.help=alfresco/messages/workflow-interpreter-help.txt diff --git a/config/alfresco/messages/workflow-interpreter-help_it_IT.properties b/config/alfresco/messages/workflow-interpreter-help_it_IT.properties deleted file mode 100755 index 398b1b772b..0000000000 --- a/config/alfresco/messages/workflow-interpreter-help_it_IT.properties +++ /dev/null @@ -1 +0,0 @@ -workflow_console.help=alfresco/messages/workflow-interpreter-help.txt diff --git a/config/alfresco/messages/workflow-interpreter-help_ja.properties b/config/alfresco/messages/workflow-interpreter-help_ja.properties deleted file mode 100755 index 398b1b772b..0000000000 --- a/config/alfresco/messages/workflow-interpreter-help_ja.properties +++ /dev/null @@ -1 +0,0 @@ -workflow_console.help=alfresco/messages/workflow-interpreter-help.txt diff --git a/config/alfresco/model/contentModel.xml b/config/alfresco/model/contentModel.xml index a598c6baee..ee1bc62a35 100644 --- a/config/alfresco/model/contentModel.xml +++ b/config/alfresco/model/contentModel.xml @@ -987,6 +987,13 @@ d:content true + + Tag Summary + d:text + true + false + true + diff --git a/config/alfresco/node-services-context.xml b/config/alfresco/node-services-context.xml index 4c7371bf65..f45b86ee63 100644 --- a/config/alfresco/node-services-context.xml +++ b/config/alfresco/node-services-context.xml @@ -44,6 +44,7 @@ nodeRefPropertyInterceptor mlPropertyInterceptor + tagscopeSummaryPropertyInterceptor diff --git a/config/alfresco/patch/patch-services-context.xml b/config/alfresco/patch/patch-services-context.xml index 991318532c..8d56a5b036 100644 --- a/config/alfresco/patch/patch-services-context.xml +++ b/config/alfresco/patch/patch-services-context.xml @@ -1697,6 +1697,7 @@ 2013 + @@ -2436,6 +2437,7 @@ /app:company_home/app:dictionary alfresco/bootstrap/scheduledActionsFolder.xml + alfresco/messages/bootstrap-spaces @@ -2496,15 +2498,62 @@ - - - - - - - - classpath:alfresco/dbscripts/upgrade/3.4/${db.script.dialect}/link-validation-metadata-removing.sql - - - + + + + + + + + classpath:alfresco/dbscripts/upgrade/3.4/${db.script.dialect}/link-validation-metadata-removing.sql + + + + + patch.mtFixAdminExistingTenants + patch.mtFixAdminExistingTenants.description + 0 + 4114 + 4115 + + + + + + + + + + + + + /${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.models.childname} + /${spaces.company_home.childname}/${spaces.dictionary.childname}/${spaces.workflow.definitions.childname} + + + + + + patch.fixUserQNames + patch.fixUserQNames.description + 0 + 4115 + 4116 + + + + + + + + + + + + + + + + + diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml index e60c60e5c9..73f7b5cfe2 100644 --- a/config/alfresco/public-services-context.xml +++ b/config/alfresco/public-services-context.xml @@ -40,6 +40,9 @@ + + + diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties index b4859c8cd8..85616e7529 100644 --- a/config/alfresco/repository.properties +++ b/config/alfresco/repository.properties @@ -119,9 +119,10 @@ server.maxusers=-1 openOffice.test.cronExpression=0 * * * * ? # -# Disable all mutable shared caches -# This property is used for diagnostic purposes +# Disable all shared caches (mutable and immutable) +# These properties are used for diagnostic purposes system.cache.disableMutableSharedCaches=false +system.cache.disableImmutableSharedCaches=false # # Properties to limit resources spent on individual searches @@ -213,7 +214,6 @@ lucene.indexer.maxTypeCacheSize=10000 # lucene.indexer.mergerMaxMergeDocs=1000000 lucene.indexer.mergerMergeFactor=5 -lucene.indexer.mergerMergeBlockingFactor=1 lucene.indexer.mergerMaxBufferedDocs=-1 lucene.indexer.mergerRamBufferSizeMb=16 # @@ -229,7 +229,7 @@ lucene.indexer.writerRamBufferSizeMb=16 # lucene.indexer.mergerTargetIndexCount=5 lucene.indexer.mergerTargetOverlayCount=5 -lucene.indexer.mergerTargetOverlaysBlockingFactor=1 +lucene.indexer.mergerTargetOverlaysBlockingFactor=2 lucene.indexer.maxDocsForInMemoryMerge=10000 lucene.indexer.maxRamInMbForInMemoryMerge=16 lucene.indexer.maxDocsForInMemoryIndex=10000 @@ -281,7 +281,7 @@ db.txn.isolation=-1 db.pool.statements.enable=true db.pool.statements.max=40 db.pool.min=0 -db.pool.idle=8 +db.pool.idle=-1 db.pool.wait.max=-1 db.pool.validate.query= db.pool.evict.interval=-1 @@ -337,6 +337,7 @@ spaces.dictionary.childname=app:dictionary spaces.templates.childname=app:space_templates spaces.imapConfig.childname=app:imap_configs spaces.imap_templates.childname=app:imap_templates +spaces.scheduled_actions.childname=cm:Scheduled Actions spaces.emailActions.childname=app:email_actions spaces.searchAction.childname=cm:search spaces.templates.content.childname=app:content_templates @@ -361,6 +362,8 @@ spaces.transfer_temp.childname=app:temp spaces.inbound_transfer_records.childname=app:inbound_transfer_records spaces.webscripts.childname=cm:webscripts spaces.extension_webscripts.childname=cm:extensionwebscripts +spaces.models.childname=app:models +spaces.workflow.definitions.childname=app:workflow_defs # ADM VersionStore Configuration version.store.deprecated.lightWeightVersionStore=workspace://lightWeightVersionStore diff --git a/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml b/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml index f2daf71aed..b43c509bfd 100644 --- a/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml +++ b/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml @@ -83,24 +83,18 @@ - - - - - - - - - + + + diff --git a/config/alfresco/tagging-services-context.xml b/config/alfresco/tagging-services-context.xml index eb7ba1669d..5fd0a09272 100644 --- a/config/alfresco/tagging-services-context.xml +++ b/config/alfresco/tagging-services-context.xml @@ -75,4 +75,10 @@ + + + + + + diff --git a/config/alfresco/version.properties b/config/alfresco/version.properties index 2bd7dd9517..762406105c 100644 --- a/config/alfresco/version.properties +++ b/config/alfresco/version.properties @@ -6,7 +6,7 @@ version.major=3 version.minor=4 -version.revision=0 +version.revision=1 version.label=f # Edition label @@ -19,4 +19,4 @@ version.build=@build-number@ # Schema number -version.schema=4114 +version.schema=4116 diff --git a/config/alfresco/workflow-context.xml b/config/alfresco/workflow-context.xml index 5ec8d95f9f..b7a3847c1f 100644 --- a/config/alfresco/workflow-context.xml +++ b/config/alfresco/workflow-context.xml @@ -53,6 +53,7 @@ + diff --git a/config/alfresco/workflow/invitation-moderated-workflow-messages_de_DE.properties b/config/alfresco/workflow/invitation-moderated-workflow-messages_de_DE.properties deleted file mode 100755 index 4fddd6cd2f..0000000000 --- a/config/alfresco/workflow/invitation-moderated-workflow-messages_de_DE.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Moderated Invitation -# - -imwf_invitation-moderated.workflow.title=Einladung - Moderiert -imwf_invitation-moderated.workflow.description=Moderierte Einladung zu einer Ressource, beispielsweise einer Website. - -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.title=Moderierte Website Einladung -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.description=Eine moderierte Einladung starten - -imwf_invitation-moderated-workflow-model.property.imwf_inviteeUserName.title=Benutzername des Eingeladenen -imwf_invitation-moderated-workflow-model.property.imwf_inviteeRole.title=Rolle des Eingeladenen -imwf_invitation-moderated-workflow-model.property.imwf_inviteeComments.title=Kommentare des Eingeladenen -imwf_invitation-moderated-workflow-model.property.imwf_resourceName.title=Name der Ressource -imwf_invitation-moderated-workflow-model.property.imwf_resourceType.title=Art der Ressource - -imwf_invitation-moderated.node.start.title=Start -imwf_invitation-moderated.node.start.description=Moderierte Einladung starten -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.title=Start -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.description=Moderierte Einladung starten -imwf_invitation-moderated.node.review.title=Einladung \u00fcberpr\u00fcfen -imwf_invitation-moderated.node.review.description=Moderierte Einladung \u00fcberpr\u00fcfen -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.title=Einladung \u00fcberpr\u00fcfen -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.description=Moderierte Einladung \u00fcberpr\u00fcfen -imwf_invitation-moderated.node.review.transition.reject.title=Ablehnen -imwf_invitation-moderated.node.review.transition.reject.description=Ablehnen -imwf_invitation-moderated.node.review.transition.approve.title=Zustimmen -imwf_invitation-moderated.node.review.transition.approve.description=Zustimmen -imwf_invitation-moderated.node.review.transition.cancel.title=Abbrechen -imwf_invitation-moderated.node.review.transition.cancel.description=Abbrechen -imwf_invitation-moderated.node.end.title=Ende -imwf_invitation-moderated.node.end.description=Ende diff --git a/config/alfresco/workflow/invitation-moderated-workflow-messages_es_ES.properties b/config/alfresco/workflow/invitation-moderated-workflow-messages_es_ES.properties deleted file mode 100755 index a2861eb43f..0000000000 --- a/config/alfresco/workflow/invitation-moderated-workflow-messages_es_ES.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Moderated Invitation -# - -imwf_invitation-moderated.workflow.title=Invitaci\u00f3n - Moderada -imwf_invitation-moderated.workflow.description=Invitaci\u00f3n moderada a un recurso como un sitio Web. - -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.title=Invitaci\u00f3n moderada al sitio -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.description=Iniciar una invitaci\u00f3n moderada - -imwf_invitation-moderated-workflow-model.property.imwf_inviteeUserName.title=Nombre de usuario del invitado -imwf_invitation-moderated-workflow-model.property.imwf_inviteeRole.title=Rol del invitado -imwf_invitation-moderated-workflow-model.property.imwf_inviteeComments.title=Comentarios del invitado -imwf_invitation-moderated-workflow-model.property.imwf_resourceName.title=Nombre del recurso -imwf_invitation-moderated-workflow-model.property.imwf_resourceType.title=Tipo de recurso - -imwf_invitation-moderated.node.start.title=Inicio -imwf_invitation-moderated.node.start.description=Iniciar invitaci\u00f3n moderada -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.title=Inicio -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.description=Iniciar invitaci\u00f3n moderada -imwf_invitation-moderated.node.review.title=Revisar invitaci\u00f3n -imwf_invitation-moderated.node.review.description=Revisar invitaci\u00f3n moderada -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.title=Revisar invitaci\u00f3n -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.description=Revisar invitaci\u00f3n moderada -imwf_invitation-moderated.node.review.transition.reject.title=Rechazar -imwf_invitation-moderated.node.review.transition.reject.description=Rechazar -imwf_invitation-moderated.node.review.transition.approve.title=Aprobar -imwf_invitation-moderated.node.review.transition.approve.description=Aprobar -imwf_invitation-moderated.node.review.transition.cancel.title=Cancelar -imwf_invitation-moderated.node.review.transition.cancel.description=Cancelar -imwf_invitation-moderated.node.end.title=Fin -imwf_invitation-moderated.node.end.description=Fin diff --git a/config/alfresco/workflow/invitation-moderated-workflow-messages_fr_FR.properties b/config/alfresco/workflow/invitation-moderated-workflow-messages_fr_FR.properties deleted file mode 100755 index f5e87ad9eb..0000000000 --- a/config/alfresco/workflow/invitation-moderated-workflow-messages_fr_FR.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Moderated Invitation -# - -imwf_invitation-moderated.workflow.title=Invitation - Mod\u00e9r\u00e9e -imwf_invitation-moderated.workflow.description=Invitation mod\u00e9r\u00e9e \u00e0 une ressource telle qu'un site Web. - -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.title=Invitation de site mod\u00e9r\u00e9e -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.description=D\u00e9marrer une invitation mod\u00e9r\u00e9e - -imwf_invitation-moderated-workflow-model.property.imwf_inviteeUserName.title=Nom d'utilisateur de l'invit\u00e9 -imwf_invitation-moderated-workflow-model.property.imwf_inviteeRole.title=R\u00f4le de l'invit\u00e9 -imwf_invitation-moderated-workflow-model.property.imwf_inviteeComments.title=Commentaires de l'invit\u00e9 -imwf_invitation-moderated-workflow-model.property.imwf_resourceName.title=Nom de ressource -imwf_invitation-moderated-workflow-model.property.imwf_resourceType.title=Type de ressource - -imwf_invitation-moderated.node.start.title=D\u00e9marrer -imwf_invitation-moderated.node.start.description=D\u00e9marrer l'invitation mod\u00e9r\u00e9e -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.title=D\u00e9marrer -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.description=D\u00e9marrer l'invitation mod\u00e9r\u00e9e -imwf_invitation-moderated.node.review.title=R\u00e9viser l'invitation -imwf_invitation-moderated.node.review.description=R\u00e9viser l'invitation mod\u00e9r\u00e9e -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.title=R\u00e9viser l'invitation -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.description=R\u00e9viser l'invitation mod\u00e9r\u00e9e -imwf_invitation-moderated.node.review.transition.reject.title=Rejeter -imwf_invitation-moderated.node.review.transition.reject.description=Rejeter -imwf_invitation-moderated.node.review.transition.approve.title=Approuver -imwf_invitation-moderated.node.review.transition.approve.description=Approuver -imwf_invitation-moderated.node.review.transition.cancel.title=Annuler -imwf_invitation-moderated.node.review.transition.cancel.description=Annuler -imwf_invitation-moderated.node.end.title=Fin -imwf_invitation-moderated.node.end.description=Fin diff --git a/config/alfresco/workflow/invitation-moderated-workflow-messages_it_IT.properties b/config/alfresco/workflow/invitation-moderated-workflow-messages_it_IT.properties deleted file mode 100755 index 2795478aad..0000000000 --- a/config/alfresco/workflow/invitation-moderated-workflow-messages_it_IT.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Moderated Invitation -# - -imwf_invitation-moderated.workflow.title=Invito - Moderato -imwf_invitation-moderated.workflow.description=Invito moderato a una risorsa quale un sito web. - -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.title=Invito al sito moderato -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.description=Avvia un invito moderato - -imwf_invitation-moderated-workflow-model.property.imwf_inviteeUserName.title=Nome utente invitato -imwf_invitation-moderated-workflow-model.property.imwf_inviteeRole.title=Ruolo invitato -imwf_invitation-moderated-workflow-model.property.imwf_inviteeComments.title=Commenti invitato -imwf_invitation-moderated-workflow-model.property.imwf_resourceName.title=Nome risorsa -imwf_invitation-moderated-workflow-model.property.imwf_resourceType.title=Tipo di risorsa - -imwf_invitation-moderated.node.start.title=Avvia -imwf_invitation-moderated.node.start.description=Avvia un invito moderato -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.title=Avvia -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.description=Avvia un invito moderato -imwf_invitation-moderated.node.review.title=Esamina invito -imwf_invitation-moderated.node.review.description=Esamina un invito moderato -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.title=Esamina invito -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.description=Esamina un invito moderato -imwf_invitation-moderated.node.review.transition.reject.title=Respingi -imwf_invitation-moderated.node.review.transition.reject.description=Respingi -imwf_invitation-moderated.node.review.transition.approve.title=Approva -imwf_invitation-moderated.node.review.transition.approve.description=Approva -imwf_invitation-moderated.node.review.transition.cancel.title=Annulla -imwf_invitation-moderated.node.review.transition.cancel.description=Annulla -imwf_invitation-moderated.node.end.title=Fine -imwf_invitation-moderated.node.end.description=Fine diff --git a/config/alfresco/workflow/invitation-moderated-workflow-messages_ja.properties b/config/alfresco/workflow/invitation-moderated-workflow-messages_ja.properties deleted file mode 100755 index 4103db9939..0000000000 --- a/config/alfresco/workflow/invitation-moderated-workflow-messages_ja.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Moderated Invitation -# - -imwf_invitation-moderated.workflow.title=\u62db\u5f85 - \u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f -imwf_invitation-moderated.workflow.description=Web\u30b5\u30a4\u30c8\u306a\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u3002 - -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.title=\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u30b5\u30a4\u30c8\u62db\u5f85 -imwf_invitation-moderated-workflow-model.type.imwf_moderatedInvitationReviewTask.description=\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u306e\u958b\u59cb - -imwf_invitation-moderated-workflow-model.property.imwf_inviteeUserName.title=\u88ab\u62db\u5f85\u8005\u306e\u30e6\u30fc\u30b6\u540d -imwf_invitation-moderated-workflow-model.property.imwf_inviteeRole.title=\u88ab\u62db\u5f85\u8005\u306e\u5f79\u5272 -imwf_invitation-moderated-workflow-model.property.imwf_inviteeComments.title=\u88ab\u62db\u5f85\u8005\u306e\u30b3\u30e1\u30f3\u30c8 -imwf_invitation-moderated-workflow-model.property.imwf_resourceName.title=\u30ea\u30bd\u30fc\u30b9\u540d -imwf_invitation-moderated-workflow-model.property.imwf_resourceType.title=\u30ea\u30bd\u30fc\u30b9\u30bf\u30a4\u30d7 - -imwf_invitation-moderated.node.start.title=\u958b\u59cb -imwf_invitation-moderated.node.start.description=\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u306e\u958b\u59cb -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.title=\u958b\u59cb -imwf_invitation-moderated.task.imwf_moderatedInvitationSubmitTask.description=\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u306e\u958b\u59cb -imwf_invitation-moderated.node.review.title=\u62db\u5f85\u3092\u30ec\u30d3\u30e5\u30fc -imwf_invitation-moderated.node.review.description=\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u3092\u30ec\u30d3\u30e5\u30fc -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.title=\u62db\u5f85\u3092\u30ec\u30d3\u30e5\u30fc -imwf_invitation-moderated.task.imwf_moderatedInvitationReviewTask.description=\u30e2\u30c7\u30ec\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u3092\u30ec\u30d3\u30e5\u30fc -imwf_invitation-moderated.node.review.transition.reject.title=\u62d2\u5426\u3059\u308b -imwf_invitation-moderated.node.review.transition.reject.description=\u62d2\u5426\u3059\u308b -imwf_invitation-moderated.node.review.transition.approve.title=\u627f\u8a8d\u3059\u308b -imwf_invitation-moderated.node.review.transition.approve.description=\u627f\u8a8d\u3059\u308b -imwf_invitation-moderated.node.review.transition.cancel.title=\u30ad\u30e3\u30f3\u30bb\u30eb -imwf_invitation-moderated.node.review.transition.cancel.description=\u30ad\u30e3\u30f3\u30bb\u30eb -imwf_invitation-moderated.node.end.title=\u7d42\u4e86 -imwf_invitation-moderated.node.end.description=\u7d42\u4e86 diff --git a/config/alfresco/workflow/invitation-nominated-workflow-messages_de_DE.properties b/config/alfresco/workflow/invitation-nominated-workflow-messages_de_DE.properties deleted file mode 100755 index ee2be7fb4a..0000000000 --- a/config/alfresco/workflow/invitation-nominated-workflow-messages_de_DE.properties +++ /dev/null @@ -1,56 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Invitation Nominated Workflow -# - -inwf_invitation-nominated.workflow.title=Website Einladung - Nominiert -inwf_invitation-nominated.workflow.description=Einladung zu einer Share Site, Nominierung durch einen Site Manager - -# Invite Task Definitions -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.title=Start -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.description=Eine nominierte Einladung starten -inwf_invite-workflow-model.type.inwf_invitePendingTask.title=Einladung, einer Website beizutreten -inwf_invite-workflow-model.type.inwf_invitePendingTask.description=Einladung, einer Website beizutreten -inwf_invite-workflow-model.type.inwf_rejectInviteTask.title=Website Einladung abgelehnt -inwf_invite-workflow-model.type.inwf_rejectInviteTask.description=Der zum Beitritt der Website eingeladene Benutzer hat die Einladung abgelehnt -inwf_invite-workflow-model.type.inwf_acceptInviteTask.title=Annahme der Website Einladung -inwf_invite-workflow-model.type.inwf_acceptInviteTask.description=Der zum Beitritt der Website eingeladene Benutzer hat die Einladung angenommen -inwf_invite-workflow-model.property.inwf_resourceType.title=Art der Ressource -inwf_invite-workflow-model.property.inwf_resourceName.title=Name der Ressource -inwf_invite-workflow-model.property.inwf_resourceTitle.title=Titel der Ressource -inwf_invite-workflow-model.property.inwf_resourceDescription.title=Beschreibung der Ressource -inwf_invite-workflow-model.property.inwf_inviterUserName.title=Einladung durch -inwf_invite-workflow-model.property.inwf_inviteeUserName.title=Benutzername des Eingeladenen -inwf_invite-workflow-model.property.inwf_inviteeEmail.title=E-Mail Adresse des Eingeladenen -inwf_invite-workflow-model.property.inwf_inviteeFirstName.title=Vorname des Eingeladenen -inwf_invite-workflow-model.property.inwf_inviteeLastName.title=Nachname des Eingeladenen -inwf_invite-workflow-model.property.inwf_inviteeRole.title=Rolle des Eingeladenen - -# Invite Process Definitions -inwf_invitation-nominated.node.start.title=Start -inwf_invitation-nominated.node.start.description=Einladung versenden -inwf_invitation-nominated.node.start.transition.sendInvite.title=Einladung versenden -inwf_invitation-nominated.node.start.transition.sendInvite.description=Einladung versenden - -inwf_invitation-nominated.node.invitePending.title=Einladung anh\u00e4ngig -inwf_invitation-nominated.node.invitePending.description=Einladung anh\u00e4ngig -inwf_invitation-nominated.node.invitePending.transition.reject.title=Ablehnen -inwf_invitation-nominated.node.invitePending.transition.reject.description=Ablehnen -inwf_invitation-nominated.node.invitePending.transition.accept.title=Annehmen -inwf_invitation-nominated.node.invitePending.transition.accept.description=Annehmen -inwf_invitation-nominated.node.invitePending.transition.cancel.title=Abbrechen -inwf_invitation-nominated.node.invitePending.transition.cancel.description=Abbrechen - -inwf_invitation-nominated.node.inviteRejected.title=Abgelehnt -inwf_invitation-nominated.node.inviteRejected.description=Abgelehnt -inwf_invitation-nominated.node.inviteRejected.transition.end.title=Aufgabe erledigt -inwf_invitation-nominated.node.inviteRejected.transition.end.description=Aufgabe erledigt - -inwf_invitation-nominated.node.inviteAccepted.title=Angenommen -inwf_invitation-nominated.node.inviteAccepted.description=Angenommen -inwf_invitation-nominated.node.inviteAccepted.transition.end.title=Aufgabe erledigt -inwf_invitation-nominated.node.inviteAccepted.transition.end.description=Aufgabe erledigt - -inwf_invitation-nominated.node.end.title=Ende -inwf_invitation-nominated.node.end.description=Ende diff --git a/config/alfresco/workflow/invitation-nominated-workflow-messages_es_ES.properties b/config/alfresco/workflow/invitation-nominated-workflow-messages_es_ES.properties deleted file mode 100755 index d5e4fe112b..0000000000 --- a/config/alfresco/workflow/invitation-nominated-workflow-messages_es_ES.properties +++ /dev/null @@ -1,56 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Invitation Nominated Workflow -# - -inwf_invitation-nominated.workflow.title=Invitaci\u00f3n al sitio - Nominada -inwf_invitation-nominated.workflow.description=Invitaci\u00f3n a compartir sitio, nominada por un administrador del sitio - -# Invite Task Definitions -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.title=Inicio -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.description=Iniciar una invitaci\u00f3n nominada -inwf_invite-workflow-model.type.inwf_invitePendingTask.title=Invitaci\u00f3n a unirse al sitio -inwf_invite-workflow-model.type.inwf_invitePendingTask.description=Invitaci\u00f3n a unirse al sitio -inwf_invite-workflow-model.type.inwf_rejectInviteTask.title=Invitaci\u00f3n al sitio rechazada -inwf_invite-workflow-model.type.inwf_rejectInviteTask.description=El usuario invitado a unirse al sitio ha rechazado la invitaci\u00f3n -inwf_invite-workflow-model.type.inwf_acceptInviteTask.title=Invitaci\u00f3n al sitio aceptada -inwf_invite-workflow-model.type.inwf_acceptInviteTask.description=El usuario invitado a unirse al sitio ha aceptado la invitaci\u00f3n -inwf_invite-workflow-model.property.inwf_resourceType.title=Tipo de recurso -inwf_invite-workflow-model.property.inwf_resourceName.title=Nombre del recurso -inwf_invite-workflow-model.property.inwf_resourceTitle.title=T\u00edtulo del recurso -inwf_invite-workflow-model.property.inwf_resourceDescription.title=Descripci\u00f3n del recurso -inwf_invite-workflow-model.property.inwf_inviterUserName.title=Invitado por -inwf_invite-workflow-model.property.inwf_inviteeUserName.title=Nombre de usuario del invitado -inwf_invite-workflow-model.property.inwf_inviteeEmail.title=Direcci\u00f3n de correo electr\u00f3nico del invitado -inwf_invite-workflow-model.property.inwf_inviteeFirstName.title=Nombre del invitado -inwf_invite-workflow-model.property.inwf_inviteeLastName.title=Apellido del invitado -inwf_invite-workflow-model.property.inwf_inviteeRole.title=Rol del invitado - -# Invite Process Definitions -inwf_invitation-nominated.node.start.title=Inicio -inwf_invitation-nominated.node.start.description=Enviar una invitaci\u00f3n -inwf_invitation-nominated.node.start.transition.sendInvite.title=Enviar invitaci\u00f3n -inwf_invitation-nominated.node.start.transition.sendInvite.description=Enviar invitaci\u00f3n - -inwf_invitation-nominated.node.invitePending.title=Invitaci\u00f3n pendiente -inwf_invitation-nominated.node.invitePending.description=Invitaci\u00f3n pendiente -inwf_invitation-nominated.node.invitePending.transition.reject.title=Rechazar -inwf_invitation-nominated.node.invitePending.transition.reject.description=Rechazar -inwf_invitation-nominated.node.invitePending.transition.accept.title=Aceptar -inwf_invitation-nominated.node.invitePending.transition.accept.description=Aceptar -inwf_invitation-nominated.node.invitePending.transition.cancel.title=Cancelar -inwf_invitation-nominated.node.invitePending.transition.cancel.description=Cancelar - -inwf_invitation-nominated.node.inviteRejected.title=Rechazados -inwf_invitation-nominated.node.inviteRejected.description=Rechazados -inwf_invitation-nominated.node.inviteRejected.transition.end.title=Tarea hecha -inwf_invitation-nominated.node.inviteRejected.transition.end.description=Tarea hecha - -inwf_invitation-nominated.node.inviteAccepted.title=Aceptada -inwf_invitation-nominated.node.inviteAccepted.description=Aceptada -inwf_invitation-nominated.node.inviteAccepted.transition.end.title=Tarea hecha -inwf_invitation-nominated.node.inviteAccepted.transition.end.description=Tarea hecha - -inwf_invitation-nominated.node.end.title=Fin -inwf_invitation-nominated.node.end.description=Fin diff --git a/config/alfresco/workflow/invitation-nominated-workflow-messages_fr_FR.properties b/config/alfresco/workflow/invitation-nominated-workflow-messages_fr_FR.properties deleted file mode 100755 index f10f645eab..0000000000 --- a/config/alfresco/workflow/invitation-nominated-workflow-messages_fr_FR.properties +++ /dev/null @@ -1,56 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Invitation Nominated Workflow -# - -inwf_invitation-nominated.workflow.title=Invitation \u00e0 un site - Nominative -inwf_invitation-nominated.workflow.description=Invitation nominative d'un responsable de site \u00e0 partager un site - -# Invite Task Definitions -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.title=D\u00e9marrer -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.description=D\u00e9marrer une invitation nominative -inwf_invite-workflow-model.type.inwf_invitePendingTask.title=Invitation \u00e0 rejoindre un site -inwf_invite-workflow-model.type.inwf_invitePendingTask.description=Invitation \u00e0 rejoindre un site -inwf_invite-workflow-model.type.inwf_rejectInviteTask.title=Invitation au site rejet\u00e9e -inwf_invite-workflow-model.type.inwf_rejectInviteTask.description=L'utilisateur invit\u00e9 \u00e0 rejoindre le site a rejet\u00e9 l'invitation -inwf_invite-workflow-model.type.inwf_acceptInviteTask.title=Invitation au site accept\u00e9e -inwf_invite-workflow-model.type.inwf_acceptInviteTask.description=L'utilisateur invit\u00e9 \u00e0 rejoindre le site a accept\u00e9 l'invitation -inwf_invite-workflow-model.property.inwf_resourceType.title=Type de ressource -inwf_invite-workflow-model.property.inwf_resourceName.title=Nom de ressource -inwf_invite-workflow-model.property.inwf_resourceTitle.title=Titre de la ressource -inwf_invite-workflow-model.property.inwf_resourceDescription.title=Description de la ressource -inwf_invite-workflow-model.property.inwf_inviterUserName.title=Invit\u00e9 par -inwf_invite-workflow-model.property.inwf_inviteeUserName.title=Nom d'utilisateur de l'invit\u00e9 -inwf_invite-workflow-model.property.inwf_inviteeEmail.title=Adresse e-mail de l'invit\u00e9 -inwf_invite-workflow-model.property.inwf_inviteeFirstName.title=Pr\u00e9nom de l'invit\u00e9 -inwf_invite-workflow-model.property.inwf_inviteeLastName.title=Nom de l'invit\u00e9 -inwf_invite-workflow-model.property.inwf_inviteeRole.title=R\u00f4le de l'invit\u00e9 - -# Invite Process Definitions -inwf_invitation-nominated.node.start.title=D\u00e9marrer -inwf_invitation-nominated.node.start.description=Envoyer une invitation -inwf_invitation-nominated.node.start.transition.sendInvite.title=Envoyer invitation -inwf_invitation-nominated.node.start.transition.sendInvite.description=Envoyer invitation - -inwf_invitation-nominated.node.invitePending.title=Invitation en attente -inwf_invitation-nominated.node.invitePending.description=Invitation en attente -inwf_invitation-nominated.node.invitePending.transition.reject.title=Rejeter -inwf_invitation-nominated.node.invitePending.transition.reject.description=Rejeter -inwf_invitation-nominated.node.invitePending.transition.accept.title=Accepter -inwf_invitation-nominated.node.invitePending.transition.accept.description=Accepter -inwf_invitation-nominated.node.invitePending.transition.cancel.title=Annuler -inwf_invitation-nominated.node.invitePending.transition.cancel.description=Annuler - -inwf_invitation-nominated.node.inviteRejected.title=Rejet\u00e9 -inwf_invitation-nominated.node.inviteRejected.description=Rejet\u00e9 -inwf_invitation-nominated.node.inviteRejected.transition.end.title=T\u00e2che termin\u00e9e -inwf_invitation-nominated.node.inviteRejected.transition.end.description=T\u00e2che termin\u00e9e - -inwf_invitation-nominated.node.inviteAccepted.title=Accept\u00e9e -inwf_invitation-nominated.node.inviteAccepted.description=Accept\u00e9e -inwf_invitation-nominated.node.inviteAccepted.transition.end.title=T\u00e2che termin\u00e9e -inwf_invitation-nominated.node.inviteAccepted.transition.end.description=T\u00e2che termin\u00e9e - -inwf_invitation-nominated.node.end.title=Fin -inwf_invitation-nominated.node.end.description=Fin diff --git a/config/alfresco/workflow/invitation-nominated-workflow-messages_it_IT.properties b/config/alfresco/workflow/invitation-nominated-workflow-messages_it_IT.properties deleted file mode 100755 index af069d52e8..0000000000 --- a/config/alfresco/workflow/invitation-nominated-workflow-messages_it_IT.properties +++ /dev/null @@ -1,56 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Invitation Nominated Workflow -# - -inwf_invitation-nominated.workflow.title=Invito al sito - Nominato -inwf_invitation-nominated.workflow.description=Invito a un sito di Share, nominato da un manager del sito - -# Invite Task Definitions -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.title=Avvia -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.description=Avvia un invito nominato -inwf_invite-workflow-model.type.inwf_invitePendingTask.title=Invito al sito -inwf_invite-workflow-model.type.inwf_invitePendingTask.description=Invito al sito -inwf_invite-workflow-model.type.inwf_rejectInviteTask.title=Invito al sito respinto -inwf_invite-workflow-model.type.inwf_rejectInviteTask.description=L'utente invitato a partecipare al sito ha respinto l'invito -inwf_invite-workflow-model.type.inwf_acceptInviteTask.title=Invito al sito accettato -inwf_invite-workflow-model.type.inwf_acceptInviteTask.description=L'utente invitato a partecipare al sito ha accettato l'invito -inwf_invite-workflow-model.property.inwf_resourceType.title=Tipo di risorsa -inwf_invite-workflow-model.property.inwf_resourceName.title=Nome risorsa -inwf_invite-workflow-model.property.inwf_resourceTitle.title=Titolo risorsa -inwf_invite-workflow-model.property.inwf_resourceDescription.title=Descrizione risorsa -inwf_invite-workflow-model.property.inwf_inviterUserName.title=Invito inviato da -inwf_invite-workflow-model.property.inwf_inviteeUserName.title=Nome utente invitato -inwf_invite-workflow-model.property.inwf_inviteeEmail.title=Indirizzo e-mail invitato -inwf_invite-workflow-model.property.inwf_inviteeFirstName.title=Nome invitato -inwf_invite-workflow-model.property.inwf_inviteeLastName.title=Cognome invitato -inwf_invite-workflow-model.property.inwf_inviteeRole.title=Ruolo invitato - -# Invite Process Definitions -inwf_invitation-nominated.node.start.title=Avvia -inwf_invitation-nominated.node.start.description=Invia un invito -inwf_invitation-nominated.node.start.transition.sendInvite.title=Invia invito -inwf_invitation-nominated.node.start.transition.sendInvite.description=Invia invito - -inwf_invitation-nominated.node.invitePending.title=Invito in attesa -inwf_invitation-nominated.node.invitePending.description=Invito in attesa -inwf_invitation-nominated.node.invitePending.transition.reject.title=Respingi -inwf_invitation-nominated.node.invitePending.transition.reject.description=Respingi -inwf_invitation-nominated.node.invitePending.transition.accept.title=Accetta -inwf_invitation-nominated.node.invitePending.transition.accept.description=Accetta -inwf_invitation-nominated.node.invitePending.transition.cancel.title=Annulla -inwf_invitation-nominated.node.invitePending.transition.cancel.description=Annulla - -inwf_invitation-nominated.node.inviteRejected.title=Respinto -inwf_invitation-nominated.node.inviteRejected.description=Respinto -inwf_invitation-nominated.node.inviteRejected.transition.end.title=Compito eseguito -inwf_invitation-nominated.node.inviteRejected.transition.end.description=Compito eseguito - -inwf_invitation-nominated.node.inviteAccepted.title=Accettato -inwf_invitation-nominated.node.inviteAccepted.description=Accettato -inwf_invitation-nominated.node.inviteAccepted.transition.end.title=Compito eseguito -inwf_invitation-nominated.node.inviteAccepted.transition.end.description=Compito eseguito - -inwf_invitation-nominated.node.end.title=Fine -inwf_invitation-nominated.node.end.description=Fine diff --git a/config/alfresco/workflow/invitation-nominated-workflow-messages_ja.properties b/config/alfresco/workflow/invitation-nominated-workflow-messages_ja.properties deleted file mode 100755 index fb6acd7386..0000000000 --- a/config/alfresco/workflow/invitation-nominated-workflow-messages_ja.properties +++ /dev/null @@ -1,56 +0,0 @@ -# Display labels for out-of-the-box Site-oriented Workflows - -# -# Invitation Nominated Workflow -# - -inwf_invitation-nominated.workflow.title=\u30b5\u30a4\u30c8\u62db\u5f85 - \u30ce\u30df\u30cd\u30fc\u30c8\u3055\u308c\u305f -inwf_invitation-nominated.workflow.description=\u30b5\u30a4\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u306b\u3088\u308a\u30ce\u30df\u30cd\u30fc\u30c8\u3055\u308c\u305f\u3001\u5171\u6709\u30b5\u30a4\u30c8\u3078\u306e\u62db\u5f85 - -# Invite Task Definitions -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.title=\u958b\u59cb -inwf_invite-workflow-model.type.inwf_inviteToSiteTask.description=\u30ce\u30df\u30cd\u30fc\u30c8\u3055\u308c\u305f\u62db\u5f85\u306e\u958b\u59cb -inwf_invite-workflow-model.type.inwf_invitePendingTask.title=\u53c2\u52a0\u30b5\u30a4\u30c8\u3078\u306e\u62db\u5f85 -inwf_invite-workflow-model.type.inwf_invitePendingTask.description=\u53c2\u52a0\u30b5\u30a4\u30c8\u3078\u306e\u62db\u5f85 -inwf_invite-workflow-model.type.inwf_rejectInviteTask.title=\u62d2\u5426\u3055\u308c\u305f\u30b5\u30a4\u30c8\u62db\u5f85 -inwf_invite-workflow-model.type.inwf_rejectInviteTask.description=\u30b5\u30a4\u30c8\u3078\u306e\u53c2\u52a0\u3092\u62db\u5f85\u3055\u308c\u305f\u30e6\u30fc\u30b6\u306f\u62db\u5f85\u3092\u62d2\u5426\u3057\u307e\u3057\u305f -inwf_invite-workflow-model.type.inwf_acceptInviteTask.title=\u30b5\u30a4\u30c8\u62db\u5f85\u306f\u627f\u8afe\u3055\u308c\u307e\u3057\u305f -inwf_invite-workflow-model.type.inwf_acceptInviteTask.description=\u30b5\u30a4\u30c8\u3078\u306e\u53c2\u52a0\u3092\u62db\u5f85\u3055\u308c\u305f\u30e6\u30fc\u30b6\u306f\u62db\u5f85\u3092\u627f\u8afe\u3057\u307e\u3057\u305f -inwf_invite-workflow-model.property.inwf_resourceType.title=\u30ea\u30bd\u30fc\u30b9\u30bf\u30a4\u30d7 -inwf_invite-workflow-model.property.inwf_resourceName.title=\u30ea\u30bd\u30fc\u30b9\u540d -inwf_invite-workflow-model.property.inwf_resourceTitle.title=\u30ea\u30bd\u30fc\u30b9\u30bf\u30a4\u30c8\u30eb -inwf_invite-workflow-model.property.inwf_resourceDescription.title=\u30ea\u30bd\u30fc\u30b9\u8aac\u660e -inwf_invite-workflow-model.property.inwf_inviterUserName.title=\u88ab\u62db\u5f85\u8005 -inwf_invite-workflow-model.property.inwf_inviteeUserName.title=\u88ab\u62db\u5f85\u8005\u306e\u30e6\u30fc\u30b6\u540d -inwf_invite-workflow-model.property.inwf_inviteeEmail.title=\u88ab\u62db\u5f85\u8005\u306eE\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -inwf_invite-workflow-model.property.inwf_inviteeFirstName.title=\u88ab\u62db\u5f85\u8005\u306e\u540d -inwf_invite-workflow-model.property.inwf_inviteeLastName.title=\u88ab\u62db\u5f85\u8005\u306e\u59d3 -inwf_invite-workflow-model.property.inwf_inviteeRole.title=\u88ab\u62db\u5f85\u8005\u306e\u5f79\u5272 - -# Invite Process Definitions -inwf_invitation-nominated.node.start.title=\u958b\u59cb -inwf_invitation-nominated.node.start.description=\u62db\u5f85\u72b6\u306e\u9001\u4fe1 -inwf_invitation-nominated.node.start.transition.sendInvite.title=\u62db\u5f85\u306e\u9001\u4fe1 -inwf_invitation-nominated.node.start.transition.sendInvite.description=\u62db\u5f85\u306e\u9001\u4fe1 - -inwf_invitation-nominated.node.invitePending.title=\u62db\u5f85\u3092\u4fdd\u7559\u3059\u308b -inwf_invitation-nominated.node.invitePending.description=\u62db\u5f85\u3092\u4fdd\u7559\u3059\u308b -inwf_invitation-nominated.node.invitePending.transition.reject.title=\u62d2\u5426\u3059\u308b -inwf_invitation-nominated.node.invitePending.transition.reject.description=\u62d2\u5426\u3059\u308b -inwf_invitation-nominated.node.invitePending.transition.accept.title=\u627f\u8afe\u3059\u308b -inwf_invitation-nominated.node.invitePending.transition.accept.description=\u627f\u8afe\u3059\u308b -inwf_invitation-nominated.node.invitePending.transition.cancel.title=\u30ad\u30e3\u30f3\u30bb\u30eb -inwf_invitation-nominated.node.invitePending.transition.cancel.description=\u30ad\u30e3\u30f3\u30bb\u30eb - -inwf_invitation-nominated.node.inviteRejected.title=\u62d2\u5426\u6e08 -inwf_invitation-nominated.node.inviteRejected.description=\u62d2\u5426\u6e08 -inwf_invitation-nominated.node.inviteRejected.transition.end.title=\u30bf\u30b9\u30af\u5b8c\u4e86 -inwf_invitation-nominated.node.inviteRejected.transition.end.description=\u30bf\u30b9\u30af\u5b8c\u4e86 - -inwf_invitation-nominated.node.inviteAccepted.title=\u627f\u8afe\u6e08 -inwf_invitation-nominated.node.inviteAccepted.description=\u627f\u8afe\u6e08 -inwf_invitation-nominated.node.inviteAccepted.transition.end.title=\u30bf\u30b9\u30af\u5b8c\u4e86 -inwf_invitation-nominated.node.inviteAccepted.transition.end.description=\u30bf\u30b9\u30af\u5b8c\u4e86 - -inwf_invitation-nominated.node.end.title=\u7d42\u4e86 -inwf_invitation-nominated.node.end.description=\u7d42\u4e86 diff --git a/config/alfresco/workflow/wcm-workflow-messages_de_DE.properties b/config/alfresco/workflow/wcm-workflow-messages_de_DE.properties deleted file mode 100755 index 27b2870e60..0000000000 --- a/config/alfresco/workflow/wcm-workflow-messages_de_DE.properties +++ /dev/null @@ -1,90 +0,0 @@ -# Display labels for out-of-the-box WCM Content-oriented Workflows - -# -# Submit Workflow -# - -wcmwf_submit.workflow.title=Website Vorlage -wcmwf_submit.workflow.description=\u00c4nderungen zur Zustimmung vorlegen -wcmwf_submit.node.verifybrokenlinks.transition.abort.title=Vorlage abbrechen -wcmwf_submit.node.verifybrokenlinks.transition.abort.description=Vorlage abbrechen -wcmwf_submit.node.verifybrokenlinks.transition.continue.title=Vorlage fortsetzen -wcmwf_submit.node.verifybrokenlinks.transition.continue.description=Vorlage fortsetzen -wcmwf_submit.node.serialreview.transition.reject.title=Ablehnen -wcmwf_submit.node.serialreview.transition.reject.description=Ablehnen -wcmwf_submit.node.serialreview.transition.approve.title=Zustimmen -wcmwf_submit.node.serialreview.transition.approve.description=Zustimmen -wcmwf_submit.node.parallelreview.transition.reject.title=Ablehnen -wcmwf_submit.node.parallelreview.transition.reject.description=Ablehnen -wcmwf_submit.node.parallelreview.transition.approve.title=Zustimmen -wcmwf_submit.node.parallelreview.transition.approve.description=Zustimmen -wcmwf_submit.node.rejected.transition.abort.title=\u00dcberpr\u00fcfung abbrechen -wcmwf_submit.node.rejected.transition.abort.description=\u00dcberpr\u00fcfung abbrechen -wcmwf_submit.node.rejected.transition.resubmit.title=Erneut zur \u00dcberpr\u00fcfung vorlegen -wcmwf_submit.node.rejected.transition.resubmit.description=Erneut zur \u00dcberpr\u00fcfung vorlegen -wcmwf_submit.node.submitpending.transition.cancel.title=Vorlage abbrechen -wcmwf_submit.node.submitpending.transition.cancel.description=Vorlage abbrechen -wcmwf_submit.node.submitpending.transition.launch.title=Jetzt vorlegen -wcmwf_submit.node.submitpending.transition.launch.description=Jetzt vorlegen - -wcmwf_submitdirect.workflow.title=Website Vorlage (direkt) -wcmwf_submitdirect.workflow.description=Der Staging Sandbox die \u00c4nderungen direkt vorlegen - - -# Submit Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.title=Website Vorlage -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.description=\u00c4nderungen zur Zustimmung vorlegen -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.title=Website Vorlage (direkt) -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.description=Der Staging Sandbox die \u00c4nderungen direkt vorlegen -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.title=Kaputte Links pr\u00fcfen -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.description=Links pr\u00fcfen, die nicht zu einer aktiven Ressource f\u00fchren -wcmwf_workflowmodel.type.wcmwf_reviewTask.title=\u00dcberpr\u00fcfen -wcmwf_workflowmodel.type.wcmwf_reviewTask.description=Dokumente zwecks Zustimmung oder Ablehnung pr\u00fcfen -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.title=\u00dcberpr\u00fcfen -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.description=Dokumente zwecks Zustimmung oder Ablehnung pr\u00fcfen -wcmwf_workflowmodel.type.wcmwf_rejectedTask.title=Abgelehnt -wcmwf_workflowmodel.type.wcmwf_rejectedTask.description=Abgelehnt -wcmwf_workflowmodel.type.wcmwf_approvedTask.title=Zugestimmt -wcmwf_workflowmodel.type.wcmwf_approvedTask.description=Zugestimmt -wcmwf_workflowmodel.type.wcmwf_submittedTask.title=Vorgelegt -wcmwf_workflowmodel.type.wcmwf_submittedTask.description=Vorgelegt -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.title=Vorgelegt -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.description=Vorgelegt -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.title=Vorlage anh\u00e4ngig -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.description=Vorlage anh\u00e4ngig -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.title=Vorlage abgebrochen -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.description=Vorlage abgebrochen -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.title=Vorlage fehlgeschlagen -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.description=Vorlage fehlgeschlagen - -wcmwf_workflowmodel.property.wcmwf_reviewType.title=Art der \u00dcberpr\u00fcfung -wcmwf_workflowmodel.property.wcmwf_reviewType.description=Serielle oder parallele \u00dcberpr\u00fcfung -wcmwf_workflowmodel.property.wcmwf_submitReviewType.title=Art der \u00dcberpr\u00fcfung -wcmwf_workflowmodel.property.wcmwf_submitReviewType.description=Serielle oder parallele \u00dcberpr\u00fcfung -wcmwf_workflowmodel.property.wcmwf_fromPath.title=Pfad zum Quellordner -wcmwf_workflowmodel.property.wcmwf_fromPath.description=Ordnerpfad, \u00fcber den Elemente vorgelegt wurden -wcmwf_workflowmodel.property.wcmwf_label.title=Vorlagekennung -wcmwf_workflowmodel.property.wcmwf_label.description=Mit der Vorlage verbundene Kennung -wcmwf_workflowmodel.property.wcmwf_launchDate.title=Startdatum -wcmwf_workflowmodel.property.wcmwf_launchDate.description=Datum zu dem der Inhalt der Vorlage festgelegt werden sollte -wcmwf_workflowmodel.property.wcmwf_autoDeploy.title=Auto Deploy -wcmwf_workflowmodel.property.wcmwf_autoDeploy.description=Ob die vorgelegten \u00c4nderungen bei Genehmigung angewandt werden sollten -wcmwf_workflowmodel.property.wcmwf_webapp.title=Webapp -wcmwf_workflowmodel.property.wcmwf_webapp.description=Die Web-Anwendung innerhalb des Arbeitsablaufsspeichers, f\u00fcr den Links gepr\u00fcft werden sollen -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.title=Alles \u00fcberpr\u00fcft -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.description=Anzahl \u00fcberpr\u00fcfender Mitarbeiter -wcmwf_workflowmodel.property.wcmwf_approveCnt.title=Allem zugestimmt -wcmwf_workflowmodel.property.wcmwf_approveCnt.description=Anzahl zustimmender Mitarbeiter - -# Change Request Workflow - -wcmwf_changerequest.workflow.title=Anfrage \u00e4ndern -wcmwf_changerequest.workflow.description=Asset zur \u00c4nderung zuweisen - -# Change Request Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.title=\u00c4nderungsanfrage vorlegen -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.description=Legt eine \u00c4nderungsanfrage f\u00fcr ein oder mehrere Elemente vor -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.title=Anfrage \u00e4ndern -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.description=Anfrage \u00e4ndern diff --git a/config/alfresco/workflow/wcm-workflow-messages_es_ES.properties b/config/alfresco/workflow/wcm-workflow-messages_es_ES.properties deleted file mode 100755 index b3df4bded7..0000000000 --- a/config/alfresco/workflow/wcm-workflow-messages_es_ES.properties +++ /dev/null @@ -1,90 +0,0 @@ -# Display labels for out-of-the-box WCM Content-oriented Workflows - -# -# Submit Workflow -# - -wcmwf_submit.workflow.title=Env\u00edo de sitio Web -wcmwf_submit.workflow.description=Enviar cambios para su aprobaci\u00f3n -wcmwf_submit.node.verifybrokenlinks.transition.abort.title=Abortar env\u00edo -wcmwf_submit.node.verifybrokenlinks.transition.abort.description=Abortar env\u00edo -wcmwf_submit.node.verifybrokenlinks.transition.continue.title=Continuar con el env\u00edo -wcmwf_submit.node.verifybrokenlinks.transition.continue.description=Continuar con el env\u00edo -wcmwf_submit.node.serialreview.transition.reject.title=Rechazar -wcmwf_submit.node.serialreview.transition.reject.description=Rechazar -wcmwf_submit.node.serialreview.transition.approve.title=Aprobar -wcmwf_submit.node.serialreview.transition.approve.description=Aprobar -wcmwf_submit.node.parallelreview.transition.reject.title=Rechazar -wcmwf_submit.node.parallelreview.transition.reject.description=Rechazar -wcmwf_submit.node.parallelreview.transition.approve.title=Aprobar -wcmwf_submit.node.parallelreview.transition.approve.description=Aprobar -wcmwf_submit.node.rejected.transition.abort.title=Abortar revisi\u00f3n -wcmwf_submit.node.rejected.transition.abort.description=Abortar revisi\u00f3n -wcmwf_submit.node.rejected.transition.resubmit.title=Reenviar para revisar -wcmwf_submit.node.rejected.transition.resubmit.description=Reenviar para revisar -wcmwf_submit.node.submitpending.transition.cancel.title=Abortar env\u00edo -wcmwf_submit.node.submitpending.transition.cancel.description=Abortar env\u00edo -wcmwf_submit.node.submitpending.transition.launch.title=Enviar ahora -wcmwf_submit.node.submitpending.transition.launch.description=Enviar ahora - -wcmwf_submitdirect.workflow.title=Env\u00edo de sitio Web (directo) -wcmwf_submitdirect.workflow.description=Enviar cambios directamente al espacio de prueba inicial - - -# Submit Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.title=Env\u00edo de sitio Web -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.description=Enviar cambios para su aprobaci\u00f3n -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.title=Env\u00edo de sitio Web (directo) -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.description=Enviar cambios directamente al espacio de prueba inicial -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.title=Verificar enlaces rotos -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.description=Verificar enlaces que no apuntan a un recurso directo -wcmwf_workflowmodel.type.wcmwf_reviewTask.title=Revisar -wcmwf_workflowmodel.type.wcmwf_reviewTask.description=Revisar documentos para aprobarlos o rechazarlos -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.title=Revisar -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.description=Revisar documentos para aprobarlos o rechazarlos -wcmwf_workflowmodel.type.wcmwf_rejectedTask.title=Rechazados -wcmwf_workflowmodel.type.wcmwf_rejectedTask.description=Rechazados -wcmwf_workflowmodel.type.wcmwf_approvedTask.title=Aprobados -wcmwf_workflowmodel.type.wcmwf_approvedTask.description=Aprobados -wcmwf_workflowmodel.type.wcmwf_submittedTask.title=Enviados -wcmwf_workflowmodel.type.wcmwf_submittedTask.description=Enviados -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.title=Enviados -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.description=Enviados -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.title=Env\u00edo pendiente -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.description=Env\u00edo pendiente -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.title=Env\u00edo abortado -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.description=Env\u00edo abortado -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.title=Error de env\u00edo -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.description=Error de env\u00edo - -wcmwf_workflowmodel.property.wcmwf_reviewType.title=Tipo de revisi\u00f3n -wcmwf_workflowmodel.property.wcmwf_reviewType.description=Revisi\u00f3n en serie o paralela -wcmwf_workflowmodel.property.wcmwf_submitReviewType.title=Tipo de revisi\u00f3n -wcmwf_workflowmodel.property.wcmwf_submitReviewType.description=Revisi\u00f3n en serie o paralela -wcmwf_workflowmodel.property.wcmwf_fromPath.title=Ruta de carpeta origen -wcmwf_workflowmodel.property.wcmwf_fromPath.description=Ruta de la carpeta desde la que se han enviado los elementos -wcmwf_workflowmodel.property.wcmwf_label.title=Etiqueta de env\u00edo -wcmwf_workflowmodel.property.wcmwf_label.description=Etiqueta asociada al env\u00edo -wcmwf_workflowmodel.property.wcmwf_launchDate.title=Fecha de lanzamiento -wcmwf_workflowmodel.property.wcmwf_launchDate.description=Fecha en la que se deber\u00eda consignar el contenido del env\u00edo -wcmwf_workflowmodel.property.wcmwf_autoDeploy.title=Despliegue autom\u00e1tico -wcmwf_workflowmodel.property.wcmwf_autoDeploy.description=Si los cambios enviados deber\u00edan implementarse una vez aprobados -wcmwf_workflowmodel.property.wcmwf_webapp.title=Aplicaci\u00f3n Web -wcmwf_workflowmodel.property.wcmwf_webapp.description=La aplicaci\u00f3n Web del almac\u00e9n de flujo de trabajo para comprobar enlaces para -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.title=Total revisado -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.description=C\u00f3mputo de personas que han revisado -wcmwf_workflowmodel.property.wcmwf_approveCnt.title=Total aprobado -wcmwf_workflowmodel.property.wcmwf_approveCnt.description=C\u00f3mputo de personas que han aprobado - -# Change Request Workflow - -wcmwf_changerequest.workflow.title=Solicitud de cambio -wcmwf_changerequest.workflow.description=Asignar un activo para su modificaci\u00f3n - -# Change Request Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.title=Enviar solicitud de cambio -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.description=Env\u00eda una solicitud de cambio de uno o m\u00e1s elementos -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.title=Solicitud de cambio -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.description=Solicitud de cambio diff --git a/config/alfresco/workflow/wcm-workflow-messages_fr_FR.properties b/config/alfresco/workflow/wcm-workflow-messages_fr_FR.properties deleted file mode 100755 index 497a451ff8..0000000000 --- a/config/alfresco/workflow/wcm-workflow-messages_fr_FR.properties +++ /dev/null @@ -1,90 +0,0 @@ -# Display labels for out-of-the-box WCM Content-oriented Workflows - -# -# Submit Workflow -# - -wcmwf_submit.workflow.title=Soumission de site Web -wcmwf_submit.workflow.description=Soumettre les modifications \u00e0 approbation -wcmwf_submit.node.verifybrokenlinks.transition.abort.title=Abandonner la soumission -wcmwf_submit.node.verifybrokenlinks.transition.abort.description=Abandonner la soumission -wcmwf_submit.node.verifybrokenlinks.transition.continue.title=Continuer la soumission -wcmwf_submit.node.verifybrokenlinks.transition.continue.description=Continuer la soumission -wcmwf_submit.node.serialreview.transition.reject.title=Rejeter -wcmwf_submit.node.serialreview.transition.reject.description=Rejeter -wcmwf_submit.node.serialreview.transition.approve.title=Approuver -wcmwf_submit.node.serialreview.transition.approve.description=Approuver -wcmwf_submit.node.parallelreview.transition.reject.title=Rejeter -wcmwf_submit.node.parallelreview.transition.reject.description=Rejeter -wcmwf_submit.node.parallelreview.transition.approve.title=Approuver -wcmwf_submit.node.parallelreview.transition.approve.description=Approuver -wcmwf_submit.node.rejected.transition.abort.title=Abandonner la r\u00e9vision -wcmwf_submit.node.rejected.transition.abort.description=Abandonner la r\u00e9vision -wcmwf_submit.node.rejected.transition.resubmit.title=Resoumettre la r\u00e9vision -wcmwf_submit.node.rejected.transition.resubmit.description=Resoumettre la r\u00e9vision -wcmwf_submit.node.submitpending.transition.cancel.title=Abandonner la soumission -wcmwf_submit.node.submitpending.transition.cancel.description=Abandonner la soumission -wcmwf_submit.node.submitpending.transition.launch.title=Soumettre maintenant -wcmwf_submit.node.submitpending.transition.launch.description=Soumettre maintenant - -wcmwf_submitdirect.workflow.title=Soumission de site Web (directe) -wcmwf_submitdirect.workflow.description=Soumettre les modifications directement dans le bac \u00e0 sable de r\u00e9serve - - -# Submit Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.title=Soumission de site Web -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.description=Soumettre les modifications \u00e0 approbation -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.title=Soumission de site Web (directe) -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.description=Soumettre les modifications directement dans le bac \u00e0 sable de r\u00e9serve -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.title=V\u00e9rifier les liens bris\u00e9s -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.description=V\u00e9rifier les liens qui ne pointent pas sur une ressource active -wcmwf_workflowmodel.type.wcmwf_reviewTask.title=R\u00e9viser -wcmwf_workflowmodel.type.wcmwf_reviewTask.description=R\u00e9viser les documents pour les approuver ou les rejeter -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.title=R\u00e9viser -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.description=R\u00e9viser les documents pour les approuver ou les rejeter -wcmwf_workflowmodel.type.wcmwf_rejectedTask.title=Rejet\u00e9 -wcmwf_workflowmodel.type.wcmwf_rejectedTask.description=Rejet\u00e9 -wcmwf_workflowmodel.type.wcmwf_approvedTask.title=Approuv\u00e9 -wcmwf_workflowmodel.type.wcmwf_approvedTask.description=Approuv\u00e9 -wcmwf_workflowmodel.type.wcmwf_submittedTask.title=Soumis -wcmwf_workflowmodel.type.wcmwf_submittedTask.description=Soumis -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.title=Soumis -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.description=Soumis -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.title=Soumission en attente -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.description=Soumission en attente -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.title=Soumission abandonn\u00e9e -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.description=Soumission abandonn\u00e9e -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.title=\u00c9chec de la soumission -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.description=\u00c9chec de la soumission - -wcmwf_workflowmodel.property.wcmwf_reviewType.title=Type de r\u00e9vision -wcmwf_workflowmodel.property.wcmwf_reviewType.description=R\u00e9vision s\u00e9rie ou parall\u00e8le -wcmwf_workflowmodel.property.wcmwf_submitReviewType.title=Type de r\u00e9vision -wcmwf_workflowmodel.property.wcmwf_submitReviewType.description=R\u00e9vision en s\u00e9rie ou en parall\u00e8le -wcmwf_workflowmodel.property.wcmwf_fromPath.title=Chemin du dossier source -wcmwf_workflowmodel.property.wcmwf_fromPath.description=Chemin d'acc\u00e8s au dossier \u00e0 partir duquel les \u00e9l\u00e9ments ont \u00e9t\u00e9 soumis -wcmwf_workflowmodel.property.wcmwf_label.title=\u00c9tiquette de soumission -wcmwf_workflowmodel.property.wcmwf_label.description=\u00c9tiquette associ\u00e9e \u00e0 la soumission -wcmwf_workflowmodel.property.wcmwf_launchDate.title=Date de lancement -wcmwf_workflowmodel.property.wcmwf_launchDate.description=Date \u00e0 laquelle le contenu de la soumission doit \u00eatre valid\u00e9 -wcmwf_workflowmodel.property.wcmwf_autoDeploy.title=D\u00e9ploiement automatique -wcmwf_workflowmodel.property.wcmwf_autoDeploy.description=Indique si les modifications soumises doivent \u00eatre d\u00e9ploy\u00e9es une fois approuv\u00e9es -wcmwf_workflowmodel.property.wcmwf_webapp.title=WebApp -wcmwf_workflowmodel.property.wcmwf_webapp.description=Application Web dans la base des flux de travail dont les liens doivent \u00eatre v\u00e9rifi\u00e9s -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.title=Total r\u00e9vision -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.description=Nombre de personnes qui ont r\u00e9vis\u00e9 -wcmwf_workflowmodel.property.wcmwf_approveCnt.title=Total approuv\u00e9 -wcmwf_workflowmodel.property.wcmwf_approveCnt.description=Nombre de personnes qui ont approuv\u00e9 - -# Change Request Workflow - -wcmwf_changerequest.workflow.title=Requ\u00eate de modification -wcmwf_changerequest.workflow.description=Assigner une ressource pour la modification - -# Change Request Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.title=Soumettre la requ\u00eate de modification -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.description=Envoie une requ\u00eate de modification pour un ou plusieurs \u00e9l\u00e9ments -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.title=Requ\u00eate de modification -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.description=Requ\u00eate de modification diff --git a/config/alfresco/workflow/wcm-workflow-messages_it_IT.properties b/config/alfresco/workflow/wcm-workflow-messages_it_IT.properties deleted file mode 100755 index 10f3142926..0000000000 --- a/config/alfresco/workflow/wcm-workflow-messages_it_IT.properties +++ /dev/null @@ -1,90 +0,0 @@ -# Display labels for out-of-the-box WCM Content-oriented Workflows - -# -# Submit Workflow -# - -wcmwf_submit.workflow.title=Invio sito web -wcmwf_submit.workflow.description=Invia le modifiche per l'approvazione -wcmwf_submit.node.verifybrokenlinks.transition.abort.title=Interrompi invio -wcmwf_submit.node.verifybrokenlinks.transition.abort.description=Interrompi invio -wcmwf_submit.node.verifybrokenlinks.transition.continue.title=Continua invio -wcmwf_submit.node.verifybrokenlinks.transition.continue.description=Continua invio -wcmwf_submit.node.serialreview.transition.reject.title=Respingi -wcmwf_submit.node.serialreview.transition.reject.description=Respingi -wcmwf_submit.node.serialreview.transition.approve.title=Approva -wcmwf_submit.node.serialreview.transition.approve.description=Approva -wcmwf_submit.node.parallelreview.transition.reject.title=Respingi -wcmwf_submit.node.parallelreview.transition.reject.description=Respingi -wcmwf_submit.node.parallelreview.transition.approve.title=Approva -wcmwf_submit.node.parallelreview.transition.approve.description=Approva -wcmwf_submit.node.rejected.transition.abort.title=Interrompi esame -wcmwf_submit.node.rejected.transition.abort.description=Interrompi esame -wcmwf_submit.node.rejected.transition.resubmit.title=Invia di nuovo per esame -wcmwf_submit.node.rejected.transition.resubmit.description=Invia di nuovo per esame -wcmwf_submit.node.submitpending.transition.cancel.title=Interrompi invio -wcmwf_submit.node.submitpending.transition.cancel.description=Interrompi invio -wcmwf_submit.node.submitpending.transition.launch.title=Invia ora -wcmwf_submit.node.submitpending.transition.launch.description=Invia ora - -wcmwf_submitdirect.workflow.title=Invio sito web (diretto) -wcmwf_submitdirect.workflow.description=Invia le modifiche direttamente alla sandbox temporanea - - -# Submit Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.title=Invio sito web -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.description=Invia le modifiche per l'approvazione -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.title=Invio sito web (diretto) -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.description=Invia le modifiche direttamente alla sandbox temporanea -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.title=Verifica link interrotti -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.description=Verifica i link che non puntano a una risorsa live -wcmwf_workflowmodel.type.wcmwf_reviewTask.title=Esamina -wcmwf_workflowmodel.type.wcmwf_reviewTask.description=Esamina i documenti per approvarli o respingerli -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.title=Esamina -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.description=Esamina i documenti per approvarli o respingerli -wcmwf_workflowmodel.type.wcmwf_rejectedTask.title=Respinto -wcmwf_workflowmodel.type.wcmwf_rejectedTask.description=Respinto -wcmwf_workflowmodel.type.wcmwf_approvedTask.title=Approvato -wcmwf_workflowmodel.type.wcmwf_approvedTask.description=Approvato -wcmwf_workflowmodel.type.wcmwf_submittedTask.title=Inviato -wcmwf_workflowmodel.type.wcmwf_submittedTask.description=Inviato -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.title=Inviato -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.description=Inviato -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.title=Invio in attesa -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.description=Invio in attesa -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.title=Invio interrotto -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.description=Invio interrotto -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.title=Invio non riuscito -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.description=Invio non riuscito - -wcmwf_workflowmodel.property.wcmwf_reviewType.title=Tipo di esame -wcmwf_workflowmodel.property.wcmwf_reviewType.description=Esame seriale o parallelo -wcmwf_workflowmodel.property.wcmwf_submitReviewType.title=Tipo di esame -wcmwf_workflowmodel.property.wcmwf_submitReviewType.description=Esame seriale o parallelo -wcmwf_workflowmodel.property.wcmwf_fromPath.title=Percorso cartella fonte -wcmwf_workflowmodel.property.wcmwf_fromPath.description=Percorso della cartella da cui gli elementi sono stati inviati -wcmwf_workflowmodel.property.wcmwf_label.title=Etichetta invio -wcmwf_workflowmodel.property.wcmwf_label.description=Etichetta associata all'invio -wcmwf_workflowmodel.property.wcmwf_launchDate.title=Data di avvio -wcmwf_workflowmodel.property.wcmwf_launchDate.description=Data di commit del contenuto inviato -wcmwf_workflowmodel.property.wcmwf_autoDeploy.title=Dispiegamento automatico -wcmwf_workflowmodel.property.wcmwf_autoDeploy.description=Indica se le modifiche inviate devono essere dispiegate dopo l'approvazione -wcmwf_workflowmodel.property.wcmwf_webapp.title=Webapp -wcmwf_workflowmodel.property.wcmwf_webapp.description=Webapp nel deposito del workflow per cui si desidera verificare i link -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.title=Totale esaminatori -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.description=Numero di persone che hanno esaminato il contenuto -wcmwf_workflowmodel.property.wcmwf_approveCnt.title=Totale approvazioni -wcmwf_workflowmodel.property.wcmwf_approveCnt.description=Numero di persone che hanno approvato il contenuto - -# Change Request Workflow - -wcmwf_changerequest.workflow.title=Richiesta di cambiamento -wcmwf_changerequest.workflow.description=Assegna una risorsa per la modifica - -# Change Request Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.title=Invia richiesta di cambiamento -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.description=Invia una richiesta di cambiamento per uno o pi\u00f9 elementi -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.title=Richiesta di cambiamento -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.description=Richiesta di cambiamento diff --git a/config/alfresco/workflow/wcm-workflow-messages_ja.properties b/config/alfresco/workflow/wcm-workflow-messages_ja.properties deleted file mode 100755 index 47fe310b21..0000000000 --- a/config/alfresco/workflow/wcm-workflow-messages_ja.properties +++ /dev/null @@ -1,90 +0,0 @@ -# Display labels for out-of-the-box WCM Content-oriented Workflows - -# -# Submit Workflow -# - -wcmwf_submit.workflow.title=Web\u30b5\u30a4\u30c8\u63d0\u51fa -wcmwf_submit.workflow.description=\u627f\u8a8d\u7528\u306b\u5909\u66f4\u3092\u9001\u4fe1 -wcmwf_submit.node.verifybrokenlinks.transition.abort.title=\u63d0\u51fa\u306e\u4e2d\u6b62 -wcmwf_submit.node.verifybrokenlinks.transition.abort.description=\u63d0\u51fa\u306e\u4e2d\u6b62 -wcmwf_submit.node.verifybrokenlinks.transition.continue.title=\u63d0\u51fa\u3092\u7d9a\u3051\u308b -wcmwf_submit.node.verifybrokenlinks.transition.continue.description=\u63d0\u51fa\u3092\u7d9a\u3051\u308b -wcmwf_submit.node.serialreview.transition.reject.title=\u62d2\u5426\u3059\u308b -wcmwf_submit.node.serialreview.transition.reject.description=\u62d2\u5426\u3059\u308b -wcmwf_submit.node.serialreview.transition.approve.title=\u627f\u8a8d\u3059\u308b -wcmwf_submit.node.serialreview.transition.approve.description=\u627f\u8a8d\u3059\u308b -wcmwf_submit.node.parallelreview.transition.reject.title=\u62d2\u5426\u3059\u308b -wcmwf_submit.node.parallelreview.transition.reject.description=\u62d2\u5426\u3059\u308b -wcmwf_submit.node.parallelreview.transition.approve.title=\u627f\u8a8d\u3059\u308b -wcmwf_submit.node.parallelreview.transition.approve.description=\u627f\u8a8d\u3059\u308b -wcmwf_submit.node.rejected.transition.abort.title=\u30ec\u30d3\u30e5\u30fc\u306e\u505c\u6b62 -wcmwf_submit.node.rejected.transition.abort.description=\u30ec\u30d3\u30e5\u30fc\u306e\u505c\u6b62 -wcmwf_submit.node.rejected.transition.resubmit.title=\u30ec\u30d3\u30e5\u30fc\u306e\u518d\u9001\u4fe1 -wcmwf_submit.node.rejected.transition.resubmit.description=\u30ec\u30d3\u30e5\u30fc\u306e\u518d\u9001\u4fe1 -wcmwf_submit.node.submitpending.transition.cancel.title=\u63d0\u51fa\u306e\u4e2d\u6b62 -wcmwf_submit.node.submitpending.transition.cancel.description=\u63d0\u51fa\u306e\u4e2d\u6b62 -wcmwf_submit.node.submitpending.transition.launch.title=\u4eca\u3059\u3050\u9001\u4fe1 -wcmwf_submit.node.submitpending.transition.launch.description=\u4eca\u3059\u3050\u9001\u4fe1 - -wcmwf_submitdirect.workflow.title=Web\u30b5\u30a4\u30c8\u63d0\u51fa\uff08\u76f4\u63a5\uff09 -wcmwf_submitdirect.workflow.description=\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u306b\u5909\u66f4\u3092\u76f4\u63a5\u9001\u4fe1 - - -# Submit Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.title=Web\u30b5\u30a4\u30c8\u63d0\u51fa -wcmwf_workflowmodel.type.wcmwf_submitReviewTask.description=\u627f\u8a8d\u7528\u306b\u5909\u66f4\u3092\u9001\u4fe1 -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.title=Web\u30b5\u30a4\u30c8\u63d0\u51fa\uff08\u76f4\u63a5\uff09 -wcmwf_workflowmodel.type.wcmwf_submitDirectTask.description=\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u306b\u5909\u66f4\u3092\u76f4\u63a5\u9001\u4fe1 -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.title=\u30ea\u30f3\u30af\u5207\u308c\u3092\u78ba\u8a8d\u3059\u308b -wcmwf_workflowmodel.type.wcmwf_verifyBrokenLinksTask.description=\u30e9\u30a4\u30d6\u30ea\u30bd\u30fc\u30b9\u3092\u6307\u3057\u3066\u3044\u306a\u3044\u30ea\u30f3\u30af\u3092\u78ba\u8a8d\u3059\u308b -wcmwf_workflowmodel.type.wcmwf_reviewTask.title=\u30ec\u30d3\u30e5\u30fc -wcmwf_workflowmodel.type.wcmwf_reviewTask.description=\u6587\u66f8\u3092\u30ec\u30d3\u30e5\u30fc\u3057\u305d\u308c\u3092\u627f\u8a8d\u307e\u305f\u306f\u62d2\u5426\u3059\u308b -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.title=\u30ec\u30d3\u30e5\u30fc -wcmwf_workflowmodel.type.wcmwf_parallelReviewTask.description=\u6587\u66f8\u3092\u30ec\u30d3\u30e5\u30fc\u3057\u305d\u308c\u3092\u627f\u8a8d\u307e\u305f\u306f\u62d2\u5426\u3059\u308b -wcmwf_workflowmodel.type.wcmwf_rejectedTask.title=\u62d2\u5426\u6e08 -wcmwf_workflowmodel.type.wcmwf_rejectedTask.description=\u62d2\u5426\u6e08 -wcmwf_workflowmodel.type.wcmwf_approvedTask.title=\u627f\u8a8d\u6e08 -wcmwf_workflowmodel.type.wcmwf_approvedTask.description=\u627f\u8a8d\u6e08 -wcmwf_workflowmodel.type.wcmwf_submittedTask.title=\u9001\u4fe1\u6e08 -wcmwf_workflowmodel.type.wcmwf_submittedTask.description=\u9001\u4fe1\u6e08 -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.title=\u9001\u4fe1\u6e08 -wcmwf_workflowmodel.type.wcmwf_submittedDirectTask.description=\u9001\u4fe1\u6e08 -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.title=\u4fdd\u7559\u3057\u305f\u63d0\u51fa -wcmwf_workflowmodel.type.wcmwf_submitpendingTask.description=\u4fdd\u7559\u3057\u305f\u63d0\u51fa -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.title=\u4e2d\u6b62\u3057\u305f\u63d0\u51fa -wcmwf_workflowmodel.type.wcmwf_submitcancelledTask.description=\u4e2d\u6b62\u3057\u305f\u63d0\u51fa -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.title=\u5931\u6557\u3057\u305f\u63d0\u51fa -wcmwf_workflowmodel.type.wcmwf_submitfailedTask.description=\u5931\u6557\u3057\u305f\u63d0\u51fa - -wcmwf_workflowmodel.property.wcmwf_reviewType.title=\u30ec\u30d3\u30e5\u30fc\u306e\u30bf\u30a4\u30d7 -wcmwf_workflowmodel.property.wcmwf_reviewType.description=\u9806\u6b21\u307e\u305f\u306f\u4e26\u5217\u30ec\u30d3\u30e5\u30fc -wcmwf_workflowmodel.property.wcmwf_submitReviewType.title=\u30ec\u30d3\u30e5\u30fc\u306e\u30bf\u30a4\u30d7 -wcmwf_workflowmodel.property.wcmwf_submitReviewType.description=\u9806\u6b21\u307e\u305f\u306f\u4e26\u5217\u30ec\u30d3\u30e5\u30fc -wcmwf_workflowmodel.property.wcmwf_fromPath.title=\u30bd\u30fc\u30b9\u30d5\u30a9\u30eb\u30c0\u30d1\u30b9 -wcmwf_workflowmodel.property.wcmwf_fromPath.description=\u9805\u76ee\u306e\u9001\u4fe1\u5143\u30d5\u30a9\u30eb\u30c0\u30d1\u30b9 -wcmwf_workflowmodel.property.wcmwf_label.title=\u63d0\u51fa\u30e9\u30d9\u30eb -wcmwf_workflowmodel.property.wcmwf_label.description=\u63d0\u51fa\u306b\u95a2\u9023\u4ed8\u3044\u305f\u30e9\u30d9\u30eb -wcmwf_workflowmodel.property.wcmwf_launchDate.title=\u8d77\u52d5\u65e5 -wcmwf_workflowmodel.property.wcmwf_launchDate.description=\u63d0\u51fa\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u59d4\u4efb\u3059\u308b\u65e5\u4ed8\u3092\u4ed8\u3051\u308b -wcmwf_workflowmodel.property.wcmwf_autoDeploy.title=\u81ea\u52d5\u30c7\u30d7\u30ed\u30a4 -wcmwf_workflowmodel.property.wcmwf_autoDeploy.description=\u9001\u4fe1\u3055\u308c\u305f\u5909\u66f4\u3092\u627f\u8a8d\u6642\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u304b\u3069\u3046\u304b -wcmwf_workflowmodel.property.wcmwf_webapp.title=Webapp -wcmwf_workflowmodel.property.wcmwf_webapp.description=\u30ea\u30f3\u30af\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30b9\u30c8\u30a2\u5185\u90e8\u306ewebapp -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.title=\u30ec\u30d3\u30e5\u30fc\u306e\u5408\u8a08 -wcmwf_workflowmodel.property.wcmwf_reviewerCnt.description=\u30ec\u30d3\u30e5\u30fc\u3055\u308c\u305f\u4eba\u306e\u30ab\u30a6\u30f3\u30c8 -wcmwf_workflowmodel.property.wcmwf_approveCnt.title=\u627f\u8a8d\u6e08\u306e\u5408\u8a08 -wcmwf_workflowmodel.property.wcmwf_approveCnt.description=\u627f\u8a8d\u6e08\u306e\u4eba\u306e\u30ab\u30a6\u30f3\u30c8 - -# Change Request Workflow - -wcmwf_changerequest.workflow.title=\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5909\u66f4 -wcmwf_changerequest.workflow.description=\u5909\u66f4\u306e\u30a2\u30bb\u30c3\u30c8\u3092\u5272\u308a\u5f53\u3066\u308b - -# Change Request Task Definitions - -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.title=\u5909\u66f4\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u9001\u4fe1 -wcmwf_workflowmodel.type.wcmwf_submitChangeRequestTask.description=1\u3064\u4ee5\u4e0a\u306e\u9805\u76ee\u306e\u5909\u66f4\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u9001\u4fe1 -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.title=\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5909\u66f4 -wcmwf_workflowmodel.type.wcmwf_changeRequestTask.description=\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5909\u66f4 diff --git a/config/alfresco/workflow/workflow-messages_de_DE.properties b/config/alfresco/workflow/workflow-messages_de_DE.properties deleted file mode 100755 index 544732ee29..0000000000 --- a/config/alfresco/workflow/workflow-messages_de_DE.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Display labels for out-of-the-box Content-oriented Workflows - -# -# Review & Approve Workflow -# - -wf_review.workflow.title=\u00dcberpr\u00fcfen & Zustimmen -wf_review.workflow.description=\u00dcberpr\u00fcfung & Zustimmung von Inhalt - -# Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitReviewTask.title=\u00dcberpr\u00fcfung starten -wf_workflowmodel.type.wf_submitReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung & Zustimmung vorlegen -wf_workflowmodel.type.wf_reviewTask.title=\u00dcberpr\u00fcfen -wf_workflowmodel.type.wf_reviewTask.description=Dokumente zwecks Zustimmung oder Ablehnung pr\u00fcfen -wf_workflowmodel.type.wf_rejectedTask.title=Abgelehnt -wf_workflowmodel.type.wf_rejectedTask.description=Abgelehnt -wf_workflowmodel.type.wf_approvedTask.title=Zugestimmt -wf_workflowmodel.type.wf_approvedTask.description=Zugestimmt - -# Review & Approve Process Definitions - -wf_review.node.start.title=Start -wf_review.node.start.description=Start -wf_review.node.review.title=\u00dcberpr\u00fcfen -wf_review.node.review.description=\u00dcberpr\u00fcfen -wf_review.node.review.transition.reject.title=Ablehnen -wf_review.node.review.transition.reject.description=Ablehnen -wf_review.node.review.transition.approve.title=Zustimmen -wf_review.node.review.transition.approve.description=Zustimmen -wf_review.node.rejected.title=Abgelehnt -wf_review.node.rejected.description=Abgelehnt -wf_review.task.wf_rejectedTask.title=Abgelehnt -wf_review.task.wf_rejectedTask.description=Abgelehnt -wf_review.node.approved.title=Zugestimmt -wf_review.node.approved.description=Zugestimmt -wf_review.task.wf_approvedTask.title=Zugestimmt -wf_review.task.wf_approvedTask.description=Zugestimmt -wf_review.node.end.title=Ende -wf_review.node.end.description=Ende - - -# -# Parallel Review Workflow -# - -wf_parallelreview.workflow.title=Parallele \u00dcberpr\u00fcfung & Zustimmung -wf_parallelreview.workflow.description=Parallele \u00dcberpr\u00fcfung & Zustimmung von Inhalt - -# Parallel Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitParallelReviewTask.title=Parallele \u00dcberpr\u00fcfung starten -wf_workflowmodel.type.wf_submitParallelReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung & Zustimmung einer Liste von Mitarbeitern vorlegen -wf_workflowmodel.property.wf_requiredApprovePercent.title=Erforderlicher Prozentsatz Zustimmungen -wf_workflowmodel.property.wf_requiredApprovePercent.description=Prozentsatz Pr\u00fcfer, die zur Zustimmung zustimmen m\u00fcssen -wf_workflowmodel.type.wf_rejectedParallelTask.title=Abgelehnt -wf_workflowmodel.type.wf_rejectedParallelTask.description=Abgelehnt -wf_workflowmodel.type.wf_approvedParallelTask.title=Zugestimmt -wf_workflowmodel.type.wf_approvedParallelTask.description=Zugestimmt -wf_workflowmodel.property.wf_reviewerCount.title=Anzahl Pr\u00fcfer -wf_workflowmodel.property.wf_reviewerCount.description=Anzahl Pr\u00fcfer -wf_workflowmodel.property.wf_requiredPercent.title=Erforderlicher Prozentsatz Zustimmungen -wf_workflowmodel.property.wf_requiredPercent.description=Erforderlicher Prozentsatz Zustimmungen -wf_workflowmodel.property.wf_approveCount.title=Pr\u00fcfer, die zugestimmt haben -wf_workflowmodel.property.wf_approveCount.description=Pr\u00fcfer, die zugestimmt haben -wf_workflowmodel.property.wf_actualPercent.title=Derzeitiger Prozentsatz Zustimmungen -wf_workflowmodel.property.wf_actualPercentdescription=Derzeitiger Prozentsatz Zustimmungen - -# Group Review & Approve Process Definitions - -wf_parallelreview.node.review.transition.reject.title=Ablehnen -wf_parallelreview.node.review.transition.reject.description=Ablehnen -wf_parallelreview.node.review.transition.approve.title=Zustimmen -wf_parallelreview.node.review.transition.approve.description=Zustimmen - - -# -# Pooled Review Workflow -# - -wf_reviewpooled.workflow.title=Gepoolte \u00dcberpr\u00fcfung & Zustimmung -wf_reviewpooled.workflow.description=Gepoolte \u00dcberpr\u00fcfung & Zustimmung von Inhalt - -wf_workflowmodel.type.wf_submitGroupReviewTask.title=Gruppen\u00fcberpr\u00fcfung starten -wf_workflowmodel.type.wf_submitGroupReviewTask.description=Dokumente zur \u00dcberpr\u00fcfung & Zustimmung einer Mitarbeitergruppe vorlegen - -wf_reviewpooled.node.review.transition.reject.title=Ablehnen -wf_reviewpooled.node.review.transition.reject.description=Ablehnen -wf_reviewpooled.node.review.transition.approve.title=Zustimmen -wf_reviewpooled.node.review.transition.approve.description=Zustimmen - - -# -# Parallel Group Review Workflow -# - -wf_parallelgroupreview.workflow.title=Gruppen\u00fcberpr\u00fcfung & -zustimmung -wf_parallelgroupreview.workflow.description=Gruppen\u00fcberpr\u00fcfung von & -zustimmung zu Inhalt - -wf_parallelgroupreview.node.review.transition.reject.title=Ablehnen -wf_parallelgroupreview.node.review.transition.reject.description=Ablehnen -wf_parallelgroupreview.node.review.transition.approve.title=Zustimmen -wf_parallelgroupreview.node.review.transition.approve.description=Zustimmen - - -# -# Adhoc Task Workflow -# - -wf_adhoc.workflow.title=Adhoc -wf_adhoc.workflow.description=Kollegen Aufgabe zuweisen - -# Adhoc Task Definitions - -wf_workflowmodel.type.wf_submitAdhocTask.title=Adhoc Aufgabe starten -wf_workflowmodel.type.wf_submitAdhocTask.description=Kollegen Aufgabe zuweisen -wf_workflowmodel.property.wf_notifyMe.title=Mich benachrichtigen -wf_workflowmodel.property.wf_notifyMe.description=Mich bei Abschluss der Aufgabe benachrichtigen -wf_workflowmodel.type.wf_adhocTask.title=Adhoc Aufgabe -wf_workflowmodel.type.wf_adhocTask.description=Von Kollege zugewiesene adhoc Aufgabe -wf_workflowmodel.type.wf_completedAdhocTask.title=Adhoc Aufgabe abgeschlossen -wf_workflowmodel.type.wf_completedAdhocTask.description=Adhoc Aufgabe abgeschlossen diff --git a/config/alfresco/workflow/workflow-messages_es_ES.properties b/config/alfresco/workflow/workflow-messages_es_ES.properties deleted file mode 100755 index 2d7a2dafee..0000000000 --- a/config/alfresco/workflow/workflow-messages_es_ES.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Display labels for out-of-the-box Content-oriented Workflows - -# -# Review & Approve Workflow -# - -wf_review.workflow.title=Revisi\u00f3n y aprobaci\u00f3n -wf_review.workflow.description=Revisi\u00f3n y aprobaci\u00f3n de contenido - -# Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitReviewTask.title=Iniciar revisi\u00f3n -wf_workflowmodel.type.wf_submitReviewTask.description=Enviar documentos para su revisi\u00f3n y aprobaci\u00f3n -wf_workflowmodel.type.wf_reviewTask.title=Revisar -wf_workflowmodel.type.wf_reviewTask.description=Revisar documentos para aprobarlos o rechazarlos -wf_workflowmodel.type.wf_rejectedTask.title=Rechazados -wf_workflowmodel.type.wf_rejectedTask.description=Rechazados -wf_workflowmodel.type.wf_approvedTask.title=Aprobados -wf_workflowmodel.type.wf_approvedTask.description=Aprobados - -# Review & Approve Process Definitions - -wf_review.node.start.title=Inicio -wf_review.node.start.description=Inicio -wf_review.node.review.title=Revisar -wf_review.node.review.description=Revisar -wf_review.node.review.transition.reject.title=Rechazar -wf_review.node.review.transition.reject.description=Rechazar -wf_review.node.review.transition.approve.title=Aprobar -wf_review.node.review.transition.approve.description=Aprobar -wf_review.node.rejected.title=Rechazados -wf_review.node.rejected.description=Rechazados -wf_review.task.wf_rejectedTask.title=Rechazados -wf_review.task.wf_rejectedTask.description=Rechazados -wf_review.node.approved.title=Aprobados -wf_review.node.approved.description=Aprobados -wf_review.task.wf_approvedTask.title=Aprobados -wf_review.task.wf_approvedTask.description=Aprobados -wf_review.node.end.title=Fin -wf_review.node.end.description=Fin - - -# -# Parallel Review Workflow -# - -wf_parallelreview.workflow.title=Revisi\u00f3n y aprobaci\u00f3n paralela -wf_parallelreview.workflow.description=Revisi\u00f3n y aprobaci\u00f3n de contenido paralela - -# Parallel Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitParallelReviewTask.title=Iniciar revisi\u00f3n paralela -wf_workflowmodel.type.wf_submitParallelReviewTask.description=Enviar documentos para su revisi\u00f3n y aprobaci\u00f3n a una lista de personas -wf_workflowmodel.property.wf_requiredApprovePercent.title=Porcentaje de aprobaci\u00f3n requerido -wf_workflowmodel.property.wf_requiredApprovePercent.description=Porcentaje de revisores que deben confirmar su aprobaci\u00f3n -wf_workflowmodel.type.wf_rejectedParallelTask.title=Rechazados -wf_workflowmodel.type.wf_rejectedParallelTask.description=Rechazados -wf_workflowmodel.type.wf_approvedParallelTask.title=Aprobados -wf_workflowmodel.type.wf_approvedParallelTask.description=Aprobados -wf_workflowmodel.property.wf_reviewerCount.title=N\u00famero de revisores -wf_workflowmodel.property.wf_reviewerCount.description=N\u00famero de revisores -wf_workflowmodel.property.wf_requiredPercent.title=Porcentaje de aprobaci\u00f3n requerido -wf_workflowmodel.property.wf_requiredPercent.description=Porcentaje de aprobaci\u00f3n requerido -wf_workflowmodel.property.wf_approveCount.title=Revisores que han dado su aprobaci\u00f3n -wf_workflowmodel.property.wf_approveCount.description=Revisores que han dado su aprobaci\u00f3n -wf_workflowmodel.property.wf_actualPercent.title=Porcentaje de aprobaci\u00f3n real -wf_workflowmodel.property.wf_actualPercentdescription=Porcentaje de aprobaci\u00f3n real - -# Group Review & Approve Process Definitions - -wf_parallelreview.node.review.transition.reject.title=Rechazar -wf_parallelreview.node.review.transition.reject.description=Rechazar -wf_parallelreview.node.review.transition.approve.title=Aprobar -wf_parallelreview.node.review.transition.approve.description=Aprobar - - -# -# Pooled Review Workflow -# - -wf_reviewpooled.workflow.title=Revisi\u00f3n y aprobaci\u00f3n en conjunto -wf_reviewpooled.workflow.description=Revisi\u00f3n y aprobaci\u00f3n de contenido en conjunto - -wf_workflowmodel.type.wf_submitGroupReviewTask.title=Iniciar revisi\u00f3n en grupo -wf_workflowmodel.type.wf_submitGroupReviewTask.description=Enviar documentos para su revisi\u00f3n y aprobaci\u00f3n a un grupo de personas - -wf_reviewpooled.node.review.transition.reject.title=Rechazar -wf_reviewpooled.node.review.transition.reject.description=Rechazar -wf_reviewpooled.node.review.transition.approve.title=Aprobar -wf_reviewpooled.node.review.transition.approve.description=Aprobar - - -# -# Parallel Group Review Workflow -# - -wf_parallelgroupreview.workflow.title=Revisi\u00f3n y aprobaci\u00f3n en grupo -wf_parallelgroupreview.workflow.description=Revisi\u00f3n y aprobaci\u00f3n de contenido en grupo - -wf_parallelgroupreview.node.review.transition.reject.title=Rechazar -wf_parallelgroupreview.node.review.transition.reject.description=Rechazar -wf_parallelgroupreview.node.review.transition.approve.title=Aprobar -wf_parallelgroupreview.node.review.transition.approve.description=Aprobar - - -# -# Adhoc Task Workflow -# - -wf_adhoc.workflow.title=Ad hoc -wf_adhoc.workflow.description=Asignar tarea a un colega - -# Adhoc Task Definitions - -wf_workflowmodel.type.wf_submitAdhocTask.title=Iniciar tarea ad hoc -wf_workflowmodel.type.wf_submitAdhocTask.description=Asignar tarea a un colega -wf_workflowmodel.property.wf_notifyMe.title=Notificarme -wf_workflowmodel.property.wf_notifyMe.description=Notificarme cuando la tarea se haya completado -wf_workflowmodel.type.wf_adhocTask.title=Tarea ad hoc -wf_workflowmodel.type.wf_adhocTask.description=Tarea ad hoc asignada por un colega -wf_workflowmodel.type.wf_completedAdhocTask.title=Tarea ad hoc completada -wf_workflowmodel.type.wf_completedAdhocTask.description=Tarea ad hoc completada diff --git a/config/alfresco/workflow/workflow-messages_fr_FR.properties b/config/alfresco/workflow/workflow-messages_fr_FR.properties deleted file mode 100755 index d614de669d..0000000000 --- a/config/alfresco/workflow/workflow-messages_fr_FR.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Display labels for out-of-the-box Content-oriented Workflows - -# -# Review & Approve Workflow -# - -wf_review.workflow.title=R\u00e9viser & Approuver -wf_review.workflow.description=R\u00e9vision & approbation du contenu - -# Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitReviewTask.title=D\u00e9marrer la r\u00e9vision -wf_workflowmodel.type.wf_submitReviewTask.description=Soumettre des documents pour r\u00e9vision & approbation -wf_workflowmodel.type.wf_reviewTask.title=R\u00e9viser -wf_workflowmodel.type.wf_reviewTask.description=R\u00e9viser des documents pour les approuver ou les rejeter -wf_workflowmodel.type.wf_rejectedTask.title=Rejet\u00e9 -wf_workflowmodel.type.wf_rejectedTask.description=Rejet\u00e9 -wf_workflowmodel.type.wf_approvedTask.title=Approuv\u00e9 -wf_workflowmodel.type.wf_approvedTask.description=Approuv\u00e9 - -# Review & Approve Process Definitions - -wf_review.node.start.title=D\u00e9marrer -wf_review.node.start.description=D\u00e9marrer -wf_review.node.review.title=R\u00e9viser -wf_review.node.review.description=R\u00e9viser -wf_review.node.review.transition.reject.title=Rejeter -wf_review.node.review.transition.reject.description=Rejeter -wf_review.node.review.transition.approve.title=Approuver -wf_review.node.review.transition.approve.description=Approuver -wf_review.node.rejected.title=Rejet\u00e9 -wf_review.node.rejected.description=Rejet\u00e9 -wf_review.task.wf_rejectedTask.title=Rejet\u00e9 -wf_review.task.wf_rejectedTask.description=Rejet\u00e9 -wf_review.node.approved.title=Approuv\u00e9 -wf_review.node.approved.description=Approuv\u00e9 -wf_review.task.wf_approvedTask.title=Approuv\u00e9 -wf_review.task.wf_approvedTask.description=Approuv\u00e9 -wf_review.node.end.title=Fin -wf_review.node.end.description=Fin - - -# -# Parallel Review Workflow -# - -wf_parallelreview.workflow.title=R\u00e9viser & Approuver en parall\u00e8le -wf_parallelreview.workflow.description=R\u00e9vision & approbation en parall\u00e8le du contenu - -# Parallel Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitParallelReviewTask.title=D\u00e9marrer la r\u00e9vision en parall\u00e8le -wf_workflowmodel.type.wf_submitParallelReviewTask.description=Soumettre des documents pour r\u00e9vision & approbation \u00e0 une liste de personnes -wf_workflowmodel.property.wf_requiredApprovePercent.title=Pourcentage d'approbation requis -wf_workflowmodel.property.wf_requiredApprovePercent.description=Pourcentage de r\u00e9viseurs qui doivent approuver le contenu pour qu'il soit approuv\u00e9 -wf_workflowmodel.type.wf_rejectedParallelTask.title=Rejet\u00e9 -wf_workflowmodel.type.wf_rejectedParallelTask.description=Rejet\u00e9 -wf_workflowmodel.type.wf_approvedParallelTask.title=Approuv\u00e9 -wf_workflowmodel.type.wf_approvedParallelTask.description=Approuv\u00e9 -wf_workflowmodel.property.wf_reviewerCount.title=Nombre de r\u00e9viseurs -wf_workflowmodel.property.wf_reviewerCount.description=Nombre de r\u00e9viseurs -wf_workflowmodel.property.wf_requiredPercent.title=Pourcentage d'approbation requis -wf_workflowmodel.property.wf_requiredPercent.description=Pourcentage d'approbation requis -wf_workflowmodel.property.wf_approveCount.title=R\u00e9viseurs qui ont approuv\u00e9 -wf_workflowmodel.property.wf_approveCount.description=R\u00e9viseurs qui ont approuv\u00e9 -wf_workflowmodel.property.wf_actualPercent.title=Pourcentage d'approbation exact -wf_workflowmodel.property.wf_actualPercentdescription=Pourcentage d'approbation exact - -# Group Review & Approve Process Definitions - -wf_parallelreview.node.review.transition.reject.title=Rejeter -wf_parallelreview.node.review.transition.reject.description=Rejeter -wf_parallelreview.node.review.transition.approve.title=Approuver -wf_parallelreview.node.review.transition.approve.description=Approuver - - -# -# Pooled Review Workflow -# - -wf_reviewpooled.workflow.title=R\u00e9viser & Approuver en mode partag\u00e9 -wf_reviewpooled.workflow.description=R\u00e9vision & approbation du contenu en mode partag\u00e9 - -wf_workflowmodel.type.wf_submitGroupReviewTask.title=D\u00e9marrer la r\u00e9vision de groupe -wf_workflowmodel.type.wf_submitGroupReviewTask.description=Soumettre des documents pour r\u00e9vision & approbation \u00e0 un groupe de personnes - -wf_reviewpooled.node.review.transition.reject.title=Rejeter -wf_reviewpooled.node.review.transition.reject.description=Rejeter -wf_reviewpooled.node.review.transition.approve.title=Approuver -wf_reviewpooled.node.review.transition.approve.description=Approuver - - -# -# Parallel Group Review Workflow -# - -wf_parallelgroupreview.workflow.title=Revoir & Approuver en mode groupe -wf_parallelgroupreview.workflow.description=R\u00e9vision & approbation du contenu en mode groupe - -wf_parallelgroupreview.node.review.transition.reject.title=Rejeter -wf_parallelgroupreview.node.review.transition.reject.description=Rejeter -wf_parallelgroupreview.node.review.transition.approve.title=Approuver -wf_parallelgroupreview.node.review.transition.approve.description=Approuver - - -# -# Adhoc Task Workflow -# - -wf_adhoc.workflow.title=Adhoc -wf_adhoc.workflow.description=Assigner une t\u00e2che \u00e0 un coll\u00e8gue - -# Adhoc Task Definitions - -wf_workflowmodel.type.wf_submitAdhocTask.title=D\u00e9marrer une t\u00e2che adhoc -wf_workflowmodel.type.wf_submitAdhocTask.description=Allouer une t\u00e2che \u00e0 un coll\u00e8gue -wf_workflowmodel.property.wf_notifyMe.title=M'avertir -wf_workflowmodel.property.wf_notifyMe.description=M'avertir quand la t\u00e2che est termin\u00e9e -wf_workflowmodel.type.wf_adhocTask.title=T\u00e2che Adhoc -wf_workflowmodel.type.wf_adhocTask.description=T\u00e2che adhoc allou\u00e9e par un coll\u00e8gue -wf_workflowmodel.type.wf_completedAdhocTask.title=T\u00e2che adhoc termin\u00e9e -wf_workflowmodel.type.wf_completedAdhocTask.description=T\u00e2che adhoc termin\u00e9e diff --git a/config/alfresco/workflow/workflow-messages_it_IT.properties b/config/alfresco/workflow/workflow-messages_it_IT.properties deleted file mode 100755 index 8bffe33db6..0000000000 --- a/config/alfresco/workflow/workflow-messages_it_IT.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Display labels for out-of-the-box Content-oriented Workflows - -# -# Review & Approve Workflow -# - -wf_review.workflow.title=Esamina e approva -wf_review.workflow.description=Esame e approvazione del contenuto - -# Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitReviewTask.title=Avvia esame -wf_workflowmodel.type.wf_submitReviewTask.description=Invia i documenti per l'esame e l'approvazione -wf_workflowmodel.type.wf_reviewTask.title=Esamina -wf_workflowmodel.type.wf_reviewTask.description=Esamina i documenti per approvarli o respingerli -wf_workflowmodel.type.wf_rejectedTask.title=Respinto -wf_workflowmodel.type.wf_rejectedTask.description=Respinto -wf_workflowmodel.type.wf_approvedTask.title=Approvato -wf_workflowmodel.type.wf_approvedTask.description=Approvato - -# Review & Approve Process Definitions - -wf_review.node.start.title=Avvia -wf_review.node.start.description=Avvia -wf_review.node.review.title=Esamina -wf_review.node.review.description=Esamina -wf_review.node.review.transition.reject.title=Respingi -wf_review.node.review.transition.reject.description=Respingi -wf_review.node.review.transition.approve.title=Approva -wf_review.node.review.transition.approve.description=Approva -wf_review.node.rejected.title=Respinto -wf_review.node.rejected.description=Respinto -wf_review.task.wf_rejectedTask.title=Respinto -wf_review.task.wf_rejectedTask.description=Respinto -wf_review.node.approved.title=Approvato -wf_review.node.approved.description=Approvato -wf_review.task.wf_approvedTask.title=Approvato -wf_review.task.wf_approvedTask.description=Approvato -wf_review.node.end.title=Fine -wf_review.node.end.description=Fine - - -# -# Parallel Review Workflow -# - -wf_parallelreview.workflow.title=Esamina e approva in parallelo -wf_parallelreview.workflow.description=Esame e approvazione paralleli del contenuto - -# Parallel Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitParallelReviewTask.title=Avvia esame parallelo -wf_workflowmodel.type.wf_submitParallelReviewTask.description=Invia i documenti per l'esame e l'approvazione a un elenco di persone -wf_workflowmodel.property.wf_requiredApprovePercent.title=Percentuale di approvazioni richiesta -wf_workflowmodel.property.wf_requiredApprovePercent.description=Percentuale di esaminatori che devono approvare il contenuto per l'approvazione -wf_workflowmodel.type.wf_rejectedParallelTask.title=Respinto -wf_workflowmodel.type.wf_rejectedParallelTask.description=Respinto -wf_workflowmodel.type.wf_approvedParallelTask.title=Approvato -wf_workflowmodel.type.wf_approvedParallelTask.description=Approvato -wf_workflowmodel.property.wf_reviewerCount.title=Numero di esaminatori -wf_workflowmodel.property.wf_reviewerCount.description=Numero di esaminatori -wf_workflowmodel.property.wf_requiredPercent.title=Percentuale di approvazioni richiesta -wf_workflowmodel.property.wf_requiredPercent.description=Percentuale di approvazioni richiesta -wf_workflowmodel.property.wf_approveCount.title=Esaminatori che hanno approvato il contenuto -wf_workflowmodel.property.wf_approveCount.description=Esaminatori che hanno approvato il contenuto -wf_workflowmodel.property.wf_actualPercent.title=Percentuale di approvazioni effettiva -wf_workflowmodel.property.wf_actualPercentdescription=Percentuale di approvazioni effettiva - -# Group Review & Approve Process Definitions - -wf_parallelreview.node.review.transition.reject.title=Respingi -wf_parallelreview.node.review.transition.reject.description=Respingi -wf_parallelreview.node.review.transition.approve.title=Approva -wf_parallelreview.node.review.transition.approve.description=Approva - - -# -# Pooled Review Workflow -# - -wf_reviewpooled.workflow.title=Esamina e approva in pool -wf_reviewpooled.workflow.description=Esame e approvazione in pool del contenuto - -wf_workflowmodel.type.wf_submitGroupReviewTask.title=Avvia esame di gruppo -wf_workflowmodel.type.wf_submitGroupReviewTask.description=Invia i documenti per l'esame e l'approvazione a un gruppo di persone - -wf_reviewpooled.node.review.transition.reject.title=Respingi -wf_reviewpooled.node.review.transition.reject.description=Respingi -wf_reviewpooled.node.review.transition.approve.title=Approva -wf_reviewpooled.node.review.transition.approve.description=Approva - - -# -# Parallel Group Review Workflow -# - -wf_parallelgroupreview.workflow.title=Esamina e approva in gruppo -wf_parallelgroupreview.workflow.description=Esame e approvazione di gruppo del contenuto - -wf_parallelgroupreview.node.review.transition.reject.title=Respingi -wf_parallelgroupreview.node.review.transition.reject.description=Respingi -wf_parallelgroupreview.node.review.transition.approve.title=Approva -wf_parallelgroupreview.node.review.transition.approve.description=Approva - - -# -# Adhoc Task Workflow -# - -wf_adhoc.workflow.title=Ad-hoc -wf_adhoc.workflow.description=Assegna il compito a un collega - -# Adhoc Task Definitions - -wf_workflowmodel.type.wf_submitAdhocTask.title=Avvia compito ad-hoc -wf_workflowmodel.type.wf_submitAdhocTask.description=Assegna il compito a un collega -wf_workflowmodel.property.wf_notifyMe.title=Notifica -wf_workflowmodel.property.wf_notifyMe.description=Notifica l'utente quando il compito \u00e8 stato completato -wf_workflowmodel.type.wf_adhocTask.title=Compito ad-hoc -wf_workflowmodel.type.wf_adhocTask.description=Compito ad-hoc assegnato dal collega -wf_workflowmodel.type.wf_completedAdhocTask.title=Compito ad-hoc completato -wf_workflowmodel.type.wf_completedAdhocTask.description=Compito ad-hoc completato diff --git a/config/alfresco/workflow/workflow-messages_ja.properties b/config/alfresco/workflow/workflow-messages_ja.properties deleted file mode 100755 index eea237e534..0000000000 --- a/config/alfresco/workflow/workflow-messages_ja.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Display labels for out-of-the-box Content-oriented Workflows - -# -# Review & Approve Workflow -# - -wf_review.workflow.title=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d -wf_review.workflow.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d - -# Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitReviewTask.title=\u30ec\u30d3\u30e5\u30fc\u306e\u958b\u59cb -wf_workflowmodel.type.wf_submitReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u7528\u306b\u6587\u66f8\u3092\u9001\u4fe1 -wf_workflowmodel.type.wf_reviewTask.title=\u30ec\u30d3\u30e5\u30fc -wf_workflowmodel.type.wf_reviewTask.description=\u6587\u66f8\u3092\u30ec\u30d3\u30e5\u30fc\u3057\u305d\u308c\u3092\u627f\u8a8d\u307e\u305f\u306f\u62d2\u5426\u3059\u308b -wf_workflowmodel.type.wf_rejectedTask.title=\u62d2\u5426\u6e08 -wf_workflowmodel.type.wf_rejectedTask.description=\u62d2\u5426\u6e08 -wf_workflowmodel.type.wf_approvedTask.title=\u627f\u8a8d\u6e08 -wf_workflowmodel.type.wf_approvedTask.description=\u627f\u8a8d\u6e08 - -# Review & Approve Process Definitions - -wf_review.node.start.title=\u958b\u59cb -wf_review.node.start.description=\u958b\u59cb -wf_review.node.review.title=\u30ec\u30d3\u30e5\u30fc -wf_review.node.review.description=\u30ec\u30d3\u30e5\u30fc -wf_review.node.review.transition.reject.title=\u62d2\u5426\u3059\u308b -wf_review.node.review.transition.reject.description=\u62d2\u5426\u3059\u308b -wf_review.node.review.transition.approve.title=\u627f\u8a8d\u3059\u308b -wf_review.node.review.transition.approve.description=\u627f\u8a8d\u3059\u308b -wf_review.node.rejected.title=\u62d2\u5426\u6e08 -wf_review.node.rejected.description=\u62d2\u5426\u6e08 -wf_review.task.wf_rejectedTask.title=\u62d2\u5426\u6e08 -wf_review.task.wf_rejectedTask.description=\u62d2\u5426\u6e08 -wf_review.node.approved.title=\u627f\u8a8d\u6e08 -wf_review.node.approved.description=\u627f\u8a8d\u6e08 -wf_review.task.wf_approvedTask.title=\u627f\u8a8d\u6e08 -wf_review.task.wf_approvedTask.description=\u627f\u8a8d\u6e08 -wf_review.node.end.title=\u7d42\u4e86 -wf_review.node.end.description=\u7d42\u4e86 - - -# -# Parallel Review Workflow -# - -wf_parallelreview.workflow.title=\u4e26\u5217\u306e\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d -wf_parallelreview.workflow.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u4e26\u5217\u306e\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d - -# Parallel Review & Approve Task Definitions - -wf_workflowmodel.type.wf_submitParallelReviewTask.title=\u4e26\u5217\u306e\u30ec\u30d3\u30e5\u30fc\u306e\u958b\u59cb -wf_workflowmodel.type.wf_submitParallelReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u7528\u306b\u6587\u66f8\u3092\u4eba\u306e\u30ea\u30b9\u30c8\u306b\u9001\u4fe1 -wf_workflowmodel.property.wf_requiredApprovePercent.title=\u8981\u6c42\u3055\u308c\u305f\u627f\u8a8d\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8 -wf_workflowmodel.property.wf_requiredApprovePercent.description=\u627f\u8a8d\u3092\u53d7\u3051\u308b\u305f\u3081\u306b\u627f\u8a8d\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u30ec\u30d3\u30e5\u30a2\u306e\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8 -wf_workflowmodel.type.wf_rejectedParallelTask.title=\u62d2\u5426\u6e08 -wf_workflowmodel.type.wf_rejectedParallelTask.description=\u62d2\u5426\u6e08 -wf_workflowmodel.type.wf_approvedParallelTask.title=\u627f\u8a8d\u6e08 -wf_workflowmodel.type.wf_approvedParallelTask.description=\u627f\u8a8d\u6e08 -wf_workflowmodel.property.wf_reviewerCount.title=\u30ec\u30d3\u30e5\u30a2\u306e\u6570 -wf_workflowmodel.property.wf_reviewerCount.description=\u30ec\u30d3\u30e5\u30a2\u306e\u6570 -wf_workflowmodel.property.wf_requiredPercent.title=\u8981\u6c42\u3055\u308c\u305f\u627f\u8a8d\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8 -wf_workflowmodel.property.wf_requiredPercent.description=\u8981\u6c42\u3055\u308c\u305f\u627f\u8a8d\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8 -wf_workflowmodel.property.wf_approveCount.title=\u627f\u8a8d\u3055\u308c\u305f\u30ec\u30d3\u30e5\u30a2 -wf_workflowmodel.property.wf_approveCount.description=\u627f\u8a8d\u3055\u308c\u305f\u30ec\u30d3\u30e5\u30a2 -wf_workflowmodel.property.wf_actualPercent.title=\u5b9f\u969b\u306e\u627f\u8a8d\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8 -wf_workflowmodel.property.wf_actualPercentdescription=\u5b9f\u969b\u306e\u627f\u8a8d\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8 - -# Group Review & Approve Process Definitions - -wf_parallelreview.node.review.transition.reject.title=\u62d2\u5426\u3059\u308b -wf_parallelreview.node.review.transition.reject.description=\u62d2\u5426\u3059\u308b -wf_parallelreview.node.review.transition.approve.title=\u627f\u8a8d\u3059\u308b -wf_parallelreview.node.review.transition.approve.description=\u627f\u8a8d\u3059\u308b - - -# -# Pooled Review Workflow -# - -wf_reviewpooled.workflow.title=\u30d7\u30fc\u30eb\u3055\u308c\u305f\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d -wf_reviewpooled.workflow.description=\u30d7\u30fc\u30eb\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d - -wf_workflowmodel.type.wf_submitGroupReviewTask.title=\u30b0\u30eb\u30fc\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u958b\u59cb -wf_workflowmodel.type.wf_submitGroupReviewTask.description=\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d\u7528\u306b\u6587\u66f8\u3092\u4eba\u306e\u30b0\u30eb\u30fc\u30d7\u306b\u9001\u4fe1 - -wf_reviewpooled.node.review.transition.reject.title=\u62d2\u5426\u3059\u308b -wf_reviewpooled.node.review.transition.reject.description=\u62d2\u5426\u3059\u308b -wf_reviewpooled.node.review.transition.approve.title=\u627f\u8a8d\u3059\u308b -wf_reviewpooled.node.review.transition.approve.description=\u627f\u8a8d\u3059\u308b - - -# -# Parallel Group Review Workflow -# - -wf_parallelgroupreview.workflow.title=\u30b0\u30eb\u30fc\u30d7\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d -wf_parallelgroupreview.workflow.description=\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u30b0\u30eb\u30fc\u30d7\u30ec\u30d3\u30e5\u30fc\u3068\u627f\u8a8d - -wf_parallelgroupreview.node.review.transition.reject.title=\u62d2\u5426\u3059\u308b -wf_parallelgroupreview.node.review.transition.reject.description=\u62d2\u5426\u3059\u308b -wf_parallelgroupreview.node.review.transition.approve.title=\u627f\u8a8d\u3059\u308b -wf_parallelgroupreview.node.review.transition.approve.description=\u627f\u8a8d\u3059\u308b - - -# -# Adhoc Task Workflow -# - -wf_adhoc.workflow.title=\u81e8\u6642 -wf_adhoc.workflow.description=\u540c\u50da\u306b\u30bf\u30b9\u30af\u3092\u5272\u308a\u5f53\u3066\u308b - -# Adhoc Task Definitions - -wf_workflowmodel.type.wf_submitAdhocTask.title=\u81e8\u6642\u30bf\u30b9\u30af\u306e\u958b\u59cb -wf_workflowmodel.type.wf_submitAdhocTask.description=\u540c\u50da\u306b\u30bf\u30b9\u30af\u3092\u5272\u308a\u5f53\u3066\u308b -wf_workflowmodel.property.wf_notifyMe.title=\u79c1\u306b\u901a\u77e5\u3059\u308b -wf_workflowmodel.property.wf_notifyMe.description=\u30bf\u30b9\u30af\u304c\u5b8c\u4e86\u3057\u305f\u3089\u79c1\u306b\u901a\u77e5\u3059\u308b -wf_workflowmodel.type.wf_adhocTask.title=\u81e8\u6642\u30bf\u30b9\u30af -wf_workflowmodel.type.wf_adhocTask.description=\u540c\u50da\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u305f\u81e8\u6642\u30bf\u30b9\u30af -wf_workflowmodel.type.wf_completedAdhocTask.title=\u5b8c\u4e86\u3057\u305f\u81e8\u6642\u30bf\u30b9\u30af -wf_workflowmodel.type.wf_completedAdhocTask.description=\u5b8c\u4e86\u3057\u305f\u81e8\u6642\u30bf\u30b9\u30af diff --git a/source/java/org/alfresco/cmis/search/CMISFTSQueryParser.java b/source/java/org/alfresco/cmis/search/CMISFTSQueryParser.java index f3b673e673..c71774fd8e 100644 --- a/source/java/org/alfresco/cmis/search/CMISFTSQueryParser.java +++ b/source/java/org/alfresco/cmis/search/CMISFTSQueryParser.java @@ -168,6 +168,8 @@ public class CMISFTSQueryParser Map functionArguments = new LinkedHashMap(); LiteralArgument larg = factory.createLiteralArgument(FTSPhrase.ARG_PHRASE, DataTypeDefinition.TEXT, getText(testNode.getChild(0))); functionArguments.put(larg.getName(), larg); + larg = factory.createLiteralArgument(FTSPhrase.ARG_TOKENISATION_MODE, DataTypeDefinition.ANY, AnalysisMode.DEFAULT); + functionArguments.put(larg.getName(), larg); return factory.createFunctionalConstraint(function, functionArguments); } diff --git a/source/java/org/alfresco/filesys/repo/ContentDiskDriver.java b/source/java/org/alfresco/filesys/repo/ContentDiskDriver.java index 349eb83c66..46bea63031 100644 --- a/source/java/org/alfresco/filesys/repo/ContentDiskDriver.java +++ b/source/java/org/alfresco/filesys/repo/ContentDiskDriver.java @@ -2870,15 +2870,6 @@ public class ContentDiskDriver extends AlfrescoDiskDriver implements DiskInterfa if ( isFolder == true || sameFolder == false) { - // Update the old file state - - if (oldState != null) - { - // Update the file state index to use the new name - - ctx.getStateCache().renameFileState(newName, oldState, true); - } - // Rename or move the file/folder doInWriteTransaction(sess, new CallableIO() @@ -2894,6 +2885,15 @@ public class ContentDiskDriver extends AlfrescoDiskDriver implements DiskInterfa } }); + // Update the old file state + + if (oldState != null) + { + // Update the file state index to use the new name + + ctx.getStateCache().renameFileState(newName, oldState, true); + } + // DEBUG if (logger.isDebugEnabled() && ctx.hasDebug(AlfrescoContext.DBG_RENAME)) diff --git a/source/java/org/alfresco/repo/activities/post/lookup/PostLookup.java b/source/java/org/alfresco/repo/activities/post/lookup/PostLookup.java index 13bf58e35c..aa7888ce43 100644 --- a/source/java/org/alfresco/repo/activities/post/lookup/PostLookup.java +++ b/source/java/org/alfresco/repo/activities/post/lookup/PostLookup.java @@ -61,6 +61,7 @@ public class PostLookup private TransactionService transactionService; private PersonService personService; private TenantService tenantService; + private volatile boolean busy; public static final String JSON_NODEREF_LOOKUP = "nodeRefL"; // requires additional lookup @@ -122,6 +123,13 @@ public class PostLookup public void execute() throws JobExecutionException { checkProperties(); + if (busy) + { + logger.warn("Still busy ..."); + return; + } + + busy = true; try { ActivityPostEntity params = new ActivityPostEntity(); @@ -251,6 +259,11 @@ public class PostLookup logger.error("Exception during update of posts", e); } } + finally + { + busy = false; + } + } private Pair lookupPerson(final String postUserId) throws JSONException diff --git a/source/java/org/alfresco/repo/admin/patch/impl/FixUserQNamesPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/FixUserQNamesPatch.java new file mode 100644 index 0000000000..6a211686c5 --- /dev/null +++ b/source/java/org/alfresco/repo/admin/patch/impl/FixUserQNamesPatch.java @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program 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 General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.admin.patch.impl; + +import java.util.List; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.admin.patch.AbstractPatch; +import org.alfresco.repo.batch.BatchProcessor; +import org.alfresco.repo.batch.BatchProcessor.BatchProcessWorker; +import org.alfresco.repo.domain.qname.QNameDAO; +import org.alfresco.repo.importer.ImporterBootstrap; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.rule.RuleService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.namespace.RegexQNamePattern; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.extensions.surf.util.I18NUtil; + +/** + * Gives user store entries unique qnames to allow fast database lookup of local authentication information. + * + * @author David Ward + * @since 3.3.5 + */ +public class FixUserQNamesPatch extends AbstractPatch implements ApplicationEventPublisherAware +{ + private static final Log logger = LogFactory.getLog(FixUserQNamesPatch.class); + private static final String MSG_SUCCESS = "patch.fixUserQNames.result"; + + private QNameDAO qnameDAO; + private RuleService ruleService; + private ImporterBootstrap userBootstrap; + private ApplicationEventPublisher applicationEventPublisher; + + public FixUserQNamesPatch() + { + } + + /** + * @param qnameDAO + * resolved QNames + */ + public void setQnameDAO(QNameDAO qnameDAO) + { + this.qnameDAO = qnameDAO; + } + + /** + * @param ruleService + * the rule service + */ + public void setRuleService(RuleService ruleService) + { + this.ruleService = ruleService; + } + + public void setUserBootstrap(ImporterBootstrap userBootstrap) + { + this.userBootstrap = userBootstrap; + } + /* + * (non-Javadoc) + * @see + * org.springframework.context.ApplicationEventPublisherAware#setApplicationEventPublisher(org.springframework.context + * .ApplicationEventPublisher) + */ + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) + { + this.applicationEventPublisher = applicationEventPublisher; + } + + @Override + protected void checkProperties() + { + super.checkProperties(); + checkPropertyNotNull(qnameDAO, "qnameDAO"); + checkPropertyNotNull(userBootstrap, "userBootstrap"); + checkPropertyNotNull(applicationEventPublisher, "applicationEventPublisher"); + } + + @Override + protected String applyInternal() throws Exception + { + // Get the ChildAssociationRefs + List toProcess = nodeService.getChildAssocs(getUserFolderLocation(), ContentModel.ASSOC_CHILDREN, ContentModel.TYPE_USER, + false); + BatchProcessor batchProcessor = new BatchProcessor( + "FixUserQNamesPatch", this.transactionService.getRetryingTransactionHelper(), toProcess, 2, 20, + this.applicationEventPublisher, logger, 1000); + + int updated = batchProcessor.process(new BatchProcessWorker() + { + public void beforeProcess() throws Throwable + { + // Disable rules + ruleService.disableRules(); + } + + public void afterProcess() throws Throwable + { + // Enable rules + ruleService.enableRules(); + } + + public String getIdentifier(ChildAssociationRef entry) + { + return entry.getChildRef().toString(); + } + + public void process(ChildAssociationRef entry) throws Throwable + { + QName userQName = QName.createQName(ContentModel.USER_MODEL_URI, (String) nodeService.getProperty(entry + .getChildRef(), ContentModel.PROP_USER_USERNAME)); + + // Only a user called "user" will stay in place + if (!userQName.equals(ContentModel.TYPE_USER)) + { + nodeService.moveNode(entry.getChildRef(), entry.getParentRef(), entry.getTypeQName(), userQName); + } + } + }, true); + return I18NUtil.getMessage(MSG_SUCCESS, updated); + } + + private NodeRef getUserFolderLocation() + { + NodeRef rootNode = this.nodeService.getRootNode(this.userBootstrap.getStoreRef()); + QName qnameAssocSystem = QName.createQName("sys", "system", namespaceService); + QName qnameAssocUsers = QName.createQName("sys", "people", namespaceService); + List results = nodeService.getChildAssocs(rootNode, RegexQNamePattern.MATCH_ALL, + qnameAssocSystem); + NodeRef sysNodeRef = null; + if (results.size() == 0) + { + throw new AlfrescoRuntimeException("Required authority system folder path not found: " + + qnameAssocSystem); + } + else + { + sysNodeRef = results.get(0).getChildRef(); + } + results = nodeService.getChildAssocs(sysNodeRef, RegexQNamePattern.MATCH_ALL, qnameAssocUsers); + if (results.size() == 0) + { + throw new AlfrescoRuntimeException("Required user folder path not found: " + qnameAssocUsers); + } + else + { + return results.get(0).getChildRef(); + } + } +} diff --git a/source/java/org/alfresco/repo/admin/patch/impl/MultiTFixAdminExistingTenantsPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/MultiTFixAdminExistingTenantsPatch.java new file mode 100644 index 0000000000..856bc23e3e --- /dev/null +++ b/source/java/org/alfresco/repo/admin/patch/impl/MultiTFixAdminExistingTenantsPatch.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2005-2010 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 . + */ +package org.alfresco.repo.admin.patch.impl; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.admin.patch.AbstractPatch; +import org.alfresco.repo.domain.node.NodeDAO; +import org.alfresco.repo.policy.BehaviourFilter; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.tenant.TenantService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.Pair; +import org.springframework.extensions.surf.util.I18NUtil; + +/** + * MT ALF-6029 - fix bootstrapped creator/modifier and change "admin" to "System@xxx" (or "System" in case of default domain) for given nodes (ie. "Models" and "Workflow Definitions") + */ +public class MultiTFixAdminExistingTenantsPatch extends AbstractPatch +{ + private static final String MSG_RESULT = "patch.mtFixAdminExistingTenants.result"; + + private TenantService tenantService; + private BehaviourFilter policyBehaviourFilter; + private NodeDAO nodeDAO; + + private List pathsToNodes; + + public void setTenantService(TenantService tenantService) + { + this.tenantService = tenantService; + } + + public void setNodeDAO(NodeDAO nodeDAO) + { + this.nodeDAO = nodeDAO; + } + + public void setPolicyBehaviourFilter(BehaviourFilter policyBehaviourFilter) + { + this.policyBehaviourFilter = policyBehaviourFilter; + } + + public void setPathsToNodes(List pathsToNodes) + { + this.pathsToNodes = pathsToNodes; + } + + /** + * @see org.alfresco.repo.admin.patch.AbstractPatch#checkProperties() + */ + @Override + protected void checkProperties() + { + super.checkProperties(); + + checkPropertyNotNull(this.tenantService, "tenantService"); + checkPropertyNotNull(this.nodeDAO, "nodeDAO"); + checkPropertyNotNull(this.pathsToNodes, "pathsToNodes"); + } + + /** + * @see org.alfresco.repo.admin.patch.AbstractPatch#applyInternal() + */ + @Override + protected String applyInternal() throws Exception + { + String currentUserDomain = tenantService.getCurrentUserDomain(); + + for (String xpathToNode : pathsToNodes) + { + fixAuditable(currentUserDomain, xpathToNode); + } + + return I18NUtil.getMessage(MSG_RESULT); + } + + private void fixAuditable(String currentUserDomain, String xpathToNode) + { + NodeRef rootNodeRef = nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); + List nodeRefs = searchService.selectNodes(rootNodeRef, + xpathToNode, + null, + namespaceService, + false, + SearchService.LANGUAGE_XPATH); + + if (nodeRefs.size() > 0) + { + NodeRef nodeRef = nodeRefs.get(0); + + Pair nodePair = nodeDAO.getNodePair(tenantService.getName(nodeRef)); // add tenant domain (since going via nodeDAO) + if (nodePair != null) + { + String tenantSystem = tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), currentUserDomain); + + Map props = new HashMap(2); + props.put(ContentModel.PROP_MODIFIER, tenantSystem); + props.put(ContentModel.PROP_CREATOR, tenantSystem); + + try + { + policyBehaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); + + nodeDAO.addNodeProperties(nodePair.getFirst(), props); // update only + } + finally + { + policyBehaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); + } + } + } + } +} diff --git a/source/java/org/alfresco/repo/audit/AuditComponentTest.java b/source/java/org/alfresco/repo/audit/AuditComponentTest.java index 3052975eaf..21814d8c59 100644 --- a/source/java/org/alfresco/repo/audit/AuditComponentTest.java +++ b/source/java/org/alfresco/repo/audit/AuditComponentTest.java @@ -88,7 +88,7 @@ public class AuditComponentTest extends TestCase { auditModelRegistry = (AuditModelRegistryImpl) ctx.getBean("auditModel.modelRegistry"); auditComponent = (AuditComponent) ctx.getBean("auditComponent"); - serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); + serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); auditService = serviceRegistry.getAuditService(); transactionService = serviceRegistry.getTransactionService(); nodeService = serviceRegistry.getNodeService(); @@ -629,9 +629,21 @@ public class AuditComponentTest extends TestCase // Expected } } - results.clear(); - sb.delete(0, sb.length()); - queryAuditLog(auditQueryCallback, params, -1); + + // ALF-3055 : auditing of failures is now asynchronous, so loop 60 times with a + // 1 second sleep to ensure that the audit is processed + for(int i = 0; i < 60; i++) + { + results.clear(); + sb.delete(0, sb.length()); + queryAuditLog(auditQueryCallback, params, -1); + if(results.size() == iterations) + { + break; + } + Thread.sleep(1000); + } + logger.debug(sb.toString()); assertEquals("Incorrect number of audit entries after failed login", iterations, results.size()); diff --git a/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java b/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java index ea0f2fb7fb..3ff79ccdc4 100644 --- a/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java +++ b/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java @@ -21,6 +21,7 @@ package org.alfresco.repo.audit; import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ThreadPoolExecutor; import org.alfresco.error.StackTraceUtil; import org.alfresco.repo.audit.model.AuditApplication; @@ -91,6 +92,8 @@ public class AuditMethodInterceptor implements MethodInterceptor private PublicServiceIdentifier publicServiceIdentifier; private AuditComponent auditComponent; private TransactionService transactionService; + + private ThreadPoolExecutor threadPoolExecutor; private final ThreadLocal inAudit = new ThreadLocal(); @@ -124,6 +127,11 @@ public class AuditMethodInterceptor implements MethodInterceptor this.transactionService = transactionService; } + public void setThreadPoolExecutor(ThreadPoolExecutor threadPoolExecutor) + { + this.threadPoolExecutor = threadPoolExecutor; + } + public Object invoke(MethodInvocation mi) throws Throwable { if(!auditComponent.areAuditValuesRequired(AUDIT_PATH_API_ROOT)) @@ -350,7 +358,7 @@ public class AuditMethodInterceptor implements MethodInterceptor */ private void auditInvocationAfter( String serviceName, String methodName, Map namedArguments, - Object ret, Throwable thrown) + Object ret, final Throwable thrown) { final String rootPath = AuditApplication.buildPath(AUDIT_PATH_API_POST, serviceName, methodName); @@ -388,40 +396,59 @@ public class AuditMethodInterceptor implements MethodInterceptor } } } - Map auditedData; + if (thrown != null) { - StringBuilder sb = new StringBuilder(1024); - StackTraceUtil.buildStackTrace( - thrown.getMessage(), thrown.getStackTrace(), sb, Integer.MAX_VALUE); - auditData.put(AUDIT_SNIPPET_ERROR, SchemaBootstrap.trimStringForTextFields(sb.toString())); - - // An exception will generally roll the current transaction back - RetryingTransactionCallback> auditCallback = - new RetryingTransactionCallback>() + // ALF-3055: an exception has occurred - make sure the audit occurs in a new thread + // rather than a nested transaction to avoid contention for the same audit table + threadPoolExecutor.execute(new Runnable() { - public Map execute() throws Throwable - { - return auditComponent.recordAuditValues(rootPath, auditData); - } - }; - auditedData = transactionService.getRetryingTransactionHelper().doInTransaction(auditCallback, false, true); + public void run() { + Map auditedData; + + StringBuilder sb = new StringBuilder(1024); + StackTraceUtil.buildStackTrace( + thrown.getMessage(), thrown.getStackTrace(), sb, Integer.MAX_VALUE); + auditData.put(AUDIT_SNIPPET_ERROR, SchemaBootstrap.trimStringForTextFields(sb.toString())); + + // An exception will generally roll the current transaction back + RetryingTransactionCallback> auditCallback = + new RetryingTransactionCallback>() + { + public Map execute() throws Throwable + { + return auditComponent.recordAuditValues(rootPath, auditData); + } + }; + auditedData = transactionService.getRetryingTransactionHelper().doInTransaction(auditCallback, false, true); + + // Done + if (logger.isDebugEnabled() && auditedData.size() > 0) + { + logger.debug( + "Audited after invocation: \n" + + (thrown == null ? "" : " Exception: " + thrown.getMessage() + "\n") + + " Values: " + auditedData); + } + } + }); } else { + Map auditedData; // Add the "no error" indicator auditData.put(AUDIT_SNIPPET_NO_ERROR, null); // The current transaction will be fine auditedData = auditComponent.recordAuditValues(rootPath, auditData); - } - - // Done - if (logger.isDebugEnabled() && auditedData.size() > 0) - { - logger.debug( - "Audited after invocation: \n" + - (thrown == null ? "" : " Exception: " + thrown.getMessage() + "\n") + - " Values: " + auditedData); + + // Done + if (logger.isDebugEnabled() && auditedData.size() > 0) + { + logger.debug( + "Audited after invocation: \n" + + (thrown == null ? "" : " Exception: " + thrown.getMessage() + "\n") + + " Values: " + auditedData); + } } } } diff --git a/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java b/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java index abbe609cec..925da21ba0 100644 --- a/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java +++ b/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java @@ -156,22 +156,21 @@ public class AuditModelRegistryImpl extends AbstractPropertyBackedBean implement super.afterPropertiesSet(); } - /** - * {@inheritDoc} - */ - @Override - protected synchronized AuditModelRegistryState getState(boolean start) - { - return (AuditModelRegistryState)super.getState(start); - } - /** * {@inheritDoc} */ @Override public Map getAuditApplications() { - return getState(true).getAuditApplications(); + this.lock.readLock().lock(); + try + { + return ((AuditModelRegistryState) getState(true)).getAuditApplications(); + } + finally + { + this.lock.readLock().unlock(); + } } /** @@ -180,7 +179,15 @@ public class AuditModelRegistryImpl extends AbstractPropertyBackedBean implement @Override public AuditApplication getAuditApplicationByKey(String key) { - return getState(true).getAuditApplicationByKey(key); + this.lock.readLock().lock(); + try + { + return ((AuditModelRegistryState) getState(true)).getAuditApplicationByKey(key); + } + finally + { + this.lock.readLock().unlock(); + } } /** @@ -189,7 +196,15 @@ public class AuditModelRegistryImpl extends AbstractPropertyBackedBean implement @Override public AuditApplication getAuditApplicationByName(String applicationName) { - return getState(true).getAuditApplicationByName(applicationName); + this.lock.readLock().lock(); + try + { + return ((AuditModelRegistryState) getState(true)).getAuditApplicationByName(applicationName); + } + finally + { + this.lock.readLock().unlock(); + } } /** @@ -198,7 +213,15 @@ public class AuditModelRegistryImpl extends AbstractPropertyBackedBean implement @Override public PathMapper getAuditPathMapper() { - return getState(true).getAuditPathMapper(); + this.lock.readLock().lock(); + try + { + return ((AuditModelRegistryState) getState(true)).getAuditPathMapper(); + } + finally + { + this.lock.readLock().unlock(); + } } /** @@ -227,11 +250,19 @@ public class AuditModelRegistryImpl extends AbstractPropertyBackedBean implement * * @param auditModelUrl the source of the model */ - public synchronized void registerModel(URL auditModelUrl) + public void registerModel(URL auditModelUrl) { - stop(); - setProperty(AUDIT_PROPERTY_AUDIT_ENABLED, "true"); - getState(false).registerModel(auditModelUrl); + this.lock.writeLock().lock(); + try + { + stop(); + setProperty(AUDIT_PROPERTY_AUDIT_ENABLED, "true"); + ((AuditModelRegistryState) getState(false)).registerModel(auditModelUrl); + } + finally + { + this.lock.writeLock().unlock(); + } } /** diff --git a/source/java/org/alfresco/repo/batch/BatchProcessor.java b/source/java/org/alfresco/repo/batch/BatchProcessor.java index 9fb1331f63..cc5f5ce66e 100644 --- a/source/java/org/alfresco/repo/batch/BatchProcessor.java +++ b/source/java/org/alfresco/repo/batch/BatchProcessor.java @@ -29,6 +29,8 @@ import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; +import java.util.SortedSet; +import java.util.TreeSet; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.ThreadPoolExecutor; @@ -84,9 +86,12 @@ public class BatchProcessor implements BatchMonitor /** The current entry id. */ private String currentEntryId; - + /** The number of batches currently executing. */ private int executingCount; + + /** What transactions need to be retried?. We do these single-threaded in order to avoid cross-dependency issues */ + private SortedSet retryTxns = new TreeSet(); /** The last error. */ private Throwable lastError; @@ -374,6 +379,7 @@ public class BatchProcessor implements BatchMonitor try { Iterator iterator = new WorkProviderIterator(this.workProvider); + int id=0; List batch = new ArrayList(this.batchSize); while (iterator.hasNext()) { @@ -381,7 +387,7 @@ public class BatchProcessor implements BatchMonitor boolean hasNext = iterator.hasNext(); if (batch.size() >= this.batchSize || !hasNext) { - final TxnCallback callback = new TxnCallback(worker, batch, splitTxns); + final TxnCallback callback = new TxnCallback(id++, worker, batch, splitTxns); if (hasNext) { batch = new ArrayList(this.batchSize); @@ -625,13 +631,16 @@ public class BatchProcessor implements BatchMonitor * @param splitTxns * If true, the worker invocation is made in a new transaction. */ - public TxnCallback(BatchProcessWorker worker, List batch, boolean splitTxns) + public TxnCallback(int id, BatchProcessWorker worker, List batch, boolean splitTxns) { + this.id = id; this.worker = worker; this.batch = batch; this.splitTxns = splitTxns; } + private final int id; + /** The worker. */ private final BatchProcessWorker worker; @@ -656,9 +665,6 @@ public class BatchProcessor implements BatchMonitor /** The last error entry id. */ private String txnLastErrorEntryId; - /** Has a retryable failure occurred ? */ - private boolean hadRetryFailure; - public Object execute() throws Throwable { reset(); @@ -672,23 +678,27 @@ public class BatchProcessor implements BatchMonitor synchronized (BatchProcessor.this) { + if (BatchProcessor.this.logger.isDebugEnabled()) + { + BatchProcessor.this.logger.debug("RETRY TXNS: " + BatchProcessor.this.retryTxns); + } // If we are retrying after failure, assume there are cross-dependencies and wait for other // executing batches to complete - if (this.hadRetryFailure) + while (!BatchProcessor.this.retryTxns.isEmpty() + && (BatchProcessor.this.retryTxns.first() < this.id || BatchProcessor.this.retryTxns.first() == this.id + && BatchProcessor.this.executingCount > 0) + && BatchProcessor.this.retryTxns.last() >= this.id) { - while (BatchProcessor.this.executingCount > 0) - { - if (BatchProcessor.this.logger.isDebugEnabled()) - { - BatchProcessor.this.logger.debug(Thread.currentThread().getName() - + " Recoverable failure: waiting for other batches to complete"); - } - BatchProcessor.this.wait(); - } if (BatchProcessor.this.logger.isDebugEnabled()) { - BatchProcessor.this.logger.debug(Thread.currentThread().getName() + " ready to execute"); + BatchProcessor.this.logger.debug(Thread.currentThread().getName() + + " Recoverable failure: waiting for other batches to complete"); } + BatchProcessor.this.wait(); + } + if (BatchProcessor.this.logger.isDebugEnabled()) + { + BatchProcessor.this.logger.debug(Thread.currentThread().getName() + " ready to execute"); } BatchProcessor.this.currentEntryId = this.worker.getIdentifier(this.batch.get(0)); BatchProcessor.this.executingCount++; @@ -718,7 +728,6 @@ public class BatchProcessor implements BatchMonitor else { // Next time we retry, we will wait for other executing batches to complete - this.hadRetryFailure = true; throw t; } } @@ -853,8 +862,12 @@ public class BatchProcessor implements BatchMonitor BatchProcessor.this.lastError = this.txnLastError; BatchProcessor.this.lastErrorEntryId = this.txnLastErrorEntryId; } - + reset(); + + // Make sure we don't wait for a failing transaction + BatchProcessor.this.retryTxns.remove(this.id); + BatchProcessor.this.notifyAll(); } } @@ -865,7 +878,7 @@ public class BatchProcessor implements BatchMonitor synchronized (BatchProcessor.this) { BatchProcessor.this.executingCount--; - BatchProcessor.this.notifyAll(); + // We do the final notifications in commitProgress so we can handle a transaction ending in a rollback } } @@ -876,6 +889,7 @@ public class BatchProcessor implements BatchMonitor synchronized (BatchProcessor.this) { BatchProcessor.this.executingCount--; + BatchProcessor.this.retryTxns.add(this.id); BatchProcessor.this.notifyAll(); } } diff --git a/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java b/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java index df29312b98..c4b2114749 100644 --- a/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java +++ b/source/java/org/alfresco/repo/cache/EhCacheManagerFactoryBean.java @@ -47,7 +47,7 @@ public class EhCacheManagerFactoryBean implements FactoryBean, InitializingBean, { // https://jira.terracotta.org/jira/browse/EHC-652 // Force old-style LruMemoryStore - System.setProperty("net.sf.ehcache.use.classic.lru", "true"); + // System.setProperty("net.sf.ehcache.use.classic.lru", "true"); } protected final Log logger = LogFactory.getLog(EhCacheManagerFactoryBean.class); diff --git a/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java b/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java index 6ccab7c1bb..a2cf2fc0c8 100644 --- a/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java +++ b/source/java/org/alfresco/repo/cache/InternalEhCacheManagerFactoryBean.java @@ -67,7 +67,7 @@ public class InternalEhCacheManagerFactoryBean implements FactoryBean onCopyNodeDelegate; @@ -161,6 +170,22 @@ public class CopyServiceImpl implements CopyService this.ruleService = ruleService; } + /** + * @param permissionService the permissionService to set + */ + public void setPermissionService(PermissionService permissionService) + { + this.permissionService = permissionService; + } + + /** + * @param publicServiceAccessService the publicServiceAccessService to set + */ + public void setPublicServiceAccessService(PublicServiceAccessService publicServiceAccessService) + { + this.publicServiceAccessService = publicServiceAccessService; + } + /** * Initialise method */ @@ -297,6 +322,11 @@ public class CopyServiceImpl implements CopyService false); } + /** + * {@inheritDoc} + * + * Defer to the standard implementation with copyChildren set to false + */ public void copy(NodeRef sourceNodeRef, NodeRef targetNodeRef) { QName sourceNodeTypeQName = nodeService.getType(sourceNodeRef); @@ -333,10 +363,22 @@ public class CopyServiceImpl implements CopyService copyAspects(copyDetails, targetNodeRef, Collections.emptySet(), callbacks); copyResidualProperties(copyDetails, targetNodeRef); - // invoke the copy complete policy Map copiedNodeRefs = new HashMap(1); copiedNodeRefs.put(sourceNodeRef, targetNodeRef); - copyPendingAssociations(copiedNodeRefs); // Copy an associations that were left until now + + Set copies = new HashSet(5); + copyChildren( + copyDetails, + targetNodeRef, + false, // We know that the node has been created + true, + copiedNodeRefs, + copies, + callbacks); + + // Copy an associations that were left until now + copyPendingAssociations(copiedNodeRefs); + // invoke the copy complete policy invokeCopyComplete(sourceNodeRef, targetNodeRef, false, copiedNodeRefs); } @@ -534,7 +576,8 @@ public class CopyServiceImpl implements CopyService copyProperties.put(ContentModel.PROP_COPY_REFERENCE, sourceNodeRef); internalNodeService.addAspect(copyTarget, ContentModel.ASPECT_COPIEDFROM, copyProperties); - // Do not copy permissions + // Copy permissions + copyPermissions(sourceNodeRef, copyTarget); // We present the recursion option regardless of what the client chooses copyChildren( @@ -749,6 +792,41 @@ public class CopyServiceImpl implements CopyService } + /** + * Copies the permissions of the source node reference onto the destination node reference + * + * @param sourceNodeRef the source node reference + * @param destinationNodeRef the destination node reference + */ + private void copyPermissions(final NodeRef sourceNodeRef, final NodeRef destinationNodeRef) + { + if((publicServiceAccessService.hasAccess("PermissionService", "getAllSetPermissions", sourceNodeRef) == AccessStatus.ALLOWED) && + (publicServiceAccessService.hasAccess("PermissionService", "getInheritParentPermissions", sourceNodeRef) == AccessStatus.ALLOWED)) + { + // Get the permission details of the source node reference + Set permissions = permissionService.getAllSetPermissions(sourceNodeRef); + boolean includeInherited = permissionService.getInheritParentPermissions(sourceNodeRef); + + if((publicServiceAccessService.hasAccess("PermissionService", "setPermission", destinationNodeRef, "dummyAuth", "dummyPermission", true) == AccessStatus.ALLOWED) && + (publicServiceAccessService.hasAccess("PermissionService", "setInheritParentPermissions", destinationNodeRef, includeInherited) == AccessStatus.ALLOWED)) + { + // Set the permission values on the destination node + for (AccessPermission permission : permissions) + { + if(permission.isSetDirectly()) + { + permissionService.setPermission( + destinationNodeRef, + permission.getAuthority(), + permission.getPermission(), + permission.getAccessStatus().equals(AccessStatus.ALLOWED)); + } + } + permissionService.setInheritParentPermissions(destinationNodeRef, includeInherited); + } + } + } + /** * Gets the copy details. This calls the appropriate policies that have been registered * against the node and aspect types in order to pick-up any type specific copy behaviour. diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java b/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java index 85ed9700f4..f6a56dccb7 100644 --- a/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java +++ b/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java @@ -40,6 +40,7 @@ import org.alfresco.repo.dictionary.M2Type; import org.alfresco.repo.rule.RuleModel; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.ActionCondition; @@ -362,6 +363,137 @@ public class CopyServiceImplTest extends BaseSpringTest dictionaryDAO.putModel(model); } + public void testCopyToNewNodeWithPermissions() + { + permissionService.setPermission(sourceNodeRef, "Test", PermissionService.READ_PERMISSIONS, true); + permissionService.setPermission(rootNodeRef, AuthenticationUtil.getGuestUserName(), PermissionService.READ, true); + permissionService.setPermission(rootNodeRef, AuthenticationUtil.getGuestUserName(), PermissionService.CREATE_CHILDREN, true); + assertEquals(3, permissionService.getAllSetPermissions(sourceNodeRef).size()); + + NodeRef copy = this.copyService.copy( + this.sourceNodeRef, + this.rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyOne")); + + assertEquals(3, permissionService.getAllSetPermissions(copy).size()); + + + AuthenticationUtil.runAs(new RunAsWork() + { + + @Override + public Void doWork() throws Exception + { + NodeRef copy = copyService.copy( + sourceNodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyTwo")); + + assertEquals(3, permissionService.getAllSetPermissions(copy).size()); + return null; + } + }, AuthenticationUtil.getAdminUserName()); + + AuthenticationUtil.runAs(new RunAsWork() + { + + @Override + public Void doWork() throws Exception + { + NodeRef copy = copyService.copy( + sourceNodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyThree")); + + assertEquals(2, permissionService.getAllSetPermissions(copy).size()); + return null; + } + }, AuthenticationUtil.getGuestUserName()); + + permissionService.setPermission(sourceNodeRef, AuthenticationUtil.getGuestUserName(), PermissionService.READ_PERMISSIONS, true); + + AuthenticationUtil.runAs(new RunAsWork() + { + + @Override + public Void doWork() throws Exception + { + NodeRef copy = copyService.copy( + sourceNodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyFour")); + + assertEquals(2, permissionService.getAllSetPermissions(copy).size()); + return null; + } + }, AuthenticationUtil.getGuestUserName()); + + permissionService.setPermission(rootNodeRef, AuthenticationUtil.getGuestUserName(), PermissionService.CHANGE_PERMISSIONS, true); + + AuthenticationUtil.runAs(new RunAsWork() + { + + @Override + public Void doWork() throws Exception + { + NodeRef copy = copyService.copy( + sourceNodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyFour")); + + assertEquals(5, permissionService.getAllSetPermissions(copy).size()); + return null; + } + }, AuthenticationUtil.getGuestUserName()); + + + permissionService.setPermission(sourceNodeRef, AuthenticationUtil.getGuestUserName(), PermissionService.READ_PERMISSIONS, false); + + AuthenticationUtil.runAs(new RunAsWork() + { + + @Override + public Void doWork() throws Exception + { + NodeRef copy = copyService.copy( + sourceNodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyFour")); + + assertEquals(3, permissionService.getAllSetPermissions(copy).size()); + return null; + } + }, AuthenticationUtil.getGuestUserName()); + + permissionService.deletePermission(sourceNodeRef, AuthenticationUtil.getGuestUserName(), PermissionService.READ_PERMISSIONS); + + AuthenticationUtil.runAs(new RunAsWork() + { + + @Override + public Void doWork() throws Exception + { + NodeRef copy = copyService.copy( + sourceNodeRef, + rootNodeRef, + ContentModel.ASSOC_CHILDREN, + QName.createQName("{test}aclCopyFour")); + + assertEquals(3, permissionService.getAllSetPermissions(copy).size()); + return null; + } + }, AuthenticationUtil.getGuestUserName()); + + } + + + /** * Test copy new node within store */ @@ -509,7 +641,7 @@ public class CopyServiceImplTest extends BaseSpringTest { // Copy nodes within the same store this.copyService.copy(this.sourceNodeRef, this.destinationNodeRef); - checkCopiedNode(this.sourceNodeRef, this.destinationNodeRef, false, true, false); + checkCopiedNode(this.sourceNodeRef, this.destinationNodeRef, false, true, true); // TODO check copying from a copy // TODO check copying from a versioned copy @@ -989,14 +1121,14 @@ public class CopyServiceImplTest extends BaseSpringTest assertNotNull(value4); assertEquals(TEST_VALUE_2, value4); -// // Check all the target associations have been copied -// List destinationTargets = this.nodeService.getTargetAssocs(destinationNodeRef, TEST_ASSOC_TYPE_QNAME); -// assertNotNull(destinationTargets); -// assertEquals(1, destinationTargets.size()); -// AssociationRef nodeAssocRef = destinationTargets.get(0); -// assertNotNull(nodeAssocRef); -// assertEquals(this.targetNodeRef, nodeAssocRef.getTargetRef()); -// + // Check all the target associations have been copied + List destinationTargets = this.nodeService.getTargetAssocs(destinationNodeRef, TEST_ASSOC_TYPE_QNAME); + assertNotNull(destinationTargets); + assertEquals(1, destinationTargets.size()); + AssociationRef nodeAssocRef = destinationTargets.get(0); + assertNotNull(nodeAssocRef); + assertEquals(this.targetNodeRef, nodeAssocRef.getTargetRef()); + // Check all the child associations have been copied List childAssocRefs = this.nodeService.getChildAssocs(destinationNodeRef); assertNotNull(childAssocRefs); diff --git a/source/java/org/alfresco/repo/deploy/DeploymentServiceImpl.java b/source/java/org/alfresco/repo/deploy/DeploymentServiceImpl.java index 0415215790..3abbfe64d4 100644 --- a/source/java/org/alfresco/repo/deploy/DeploymentServiceImpl.java +++ b/source/java/org/alfresco/repo/deploy/DeploymentServiceImpl.java @@ -1189,6 +1189,10 @@ public class DeploymentServiceImpl implements DeploymentService { errors.add(e); } + catch (Throwable t) + { + errors.add(new AVMException("Unexpected Throwable", t)); + } finally { // clean up senders thread pool diff --git a/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java b/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java index 653a45b31c..ed65d4bfca 100644 --- a/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/node/ibatis/NodeDAOImpl.java @@ -351,7 +351,12 @@ public class NodeDAOImpl extends AbstractNodeDAOImpl // Store node.setStore(store); // UUID - node.setUuid(nodeRef.getId()); + String uuid = nodeRef.getId(); + if (uuid.length() > 36) + { + return null; // Avoid DB2 query failure if someone passes in a made-up UUID + } + node.setUuid(uuid); // Deleted if (deleted != null) { diff --git a/source/java/org/alfresco/repo/domain/permissions/AclDAOImpl.java b/source/java/org/alfresco/repo/domain/permissions/AclDAOImpl.java index 8611d0f91f..7486948f96 100644 --- a/source/java/org/alfresco/repo/domain/permissions/AclDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/permissions/AclDAOImpl.java @@ -25,8 +25,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.cache.SimpleCache; +import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.domain.qname.QNameDAO; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.permissions.ACEType; import org.alfresco.repo.security.permissions.ACLCopyMode; import org.alfresco.repo.security.permissions.ACLType; @@ -38,7 +41,10 @@ import org.alfresco.repo.security.permissions.SimpleAccessControlList; import org.alfresco.repo.security.permissions.SimpleAccessControlListProperties; import org.alfresco.repo.security.permissions.impl.AclChange; import org.alfresco.repo.security.permissions.impl.SimplePermissionReference; +import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.namespace.QName; @@ -66,6 +72,11 @@ public class AclDAOImpl implements AclDAO /** Access to ACL entities */ private AclCrudDAO aclCrudDAO; + /** Access to Nodes entities */ + private NodeDAO nodeDAO; + + private TenantService tenantService; + /** a transactionally-safe cache to be injected */ private SimpleCache aclCache; @@ -108,11 +119,21 @@ public class AclDAOImpl implements AclDAO this.qnameDAO = qnameDAO; } + public void setTenantService(TenantService tenantService) + { + this.tenantService = tenantService; + } + public void setAclCrudDAO(AclCrudDAO aclCrudDAO) { this.aclCrudDAO = aclCrudDAO; } + public void setNodeDAO(NodeDAO nodeDAO) + { + this.nodeDAO = nodeDAO; + } + /** * Set the ACL cache * @@ -736,6 +757,7 @@ public class AclDAOImpl implements AclDAO List members = aclCrudDAO.getAclMembersByAuthority(authority); + boolean leaveAuthority = false; if (members.size() > 0) { List membersToDelete = new ArrayList(members.size()); @@ -748,41 +770,82 @@ public class AclDAOImpl implements AclDAO Long aclId = member.getAclId(); Long aceId = member.getAceId(); - aclCache.remove(aclId); - readersCache.remove(aclId); + boolean hasAnotherTenantNodes = false; + if (AuthenticationUtil.isMtEnabled()) + { + // ALF-3563 + + // Retrieve dependent nodes + List nodeIds = aclCrudDAO.getADMNodesByAcl(aclId, -1); + nodeIds.addAll(aclCrudDAO.getAVMNodesByAcl(aclId, -1)); + + if (nodeIds.size() > 0) + { + for (Long nodeId : nodeIds) + { + Pair nodePair = nodeDAO.getNodePair(nodeId); + if (nodePair == null) + { + logger.warn("Node does not exist: " + nodeId); + } + NodeRef nodeRef = nodePair.getSecond(); + + try + { + // Throws AlfrescoRuntimeException in case of domain mismatch + tenantService.checkDomain(nodeRef.getStoreRef().getIdentifier()); + } + catch (AlfrescoRuntimeException e) + { + hasAnotherTenantNodes = true; + leaveAuthority = true; + break; + } + } + } + } - Acl list = aclCrudDAO.getAcl(aclId); - acls.add(new AclChangeImpl(aclId, aclId, list.getAclType(), list.getAclType())); - membersToDelete.add(aclMemberId); - aces.add((Long)aceId); + if (!hasAnotherTenantNodes) + { + aclCache.remove(aclId); + readersCache.remove(aclId); + + Acl list = aclCrudDAO.getAcl(aclId); + acls.add(new AclChangeImpl(aclId, aclId, list.getAclType(), list.getAclType())); + membersToDelete.add(aclMemberId); + aces.add((Long)aceId); + } } // delete list of acl members aclCrudDAO.deleteAclMembers(membersToDelete); } - // remove ACEs - aclCrudDAO.deleteAces(aces); - - // Tidy up any unreferenced ACEs - - // get aces by authority - List unreferenced = aclCrudDAO.getAcesByAuthority(authEntity.getId()); - - if (unreferenced.size() > 0) + if (!leaveAuthority) { - List unrefencedAcesToDelete = new ArrayList(unreferenced.size()); - for (Ace ace : unreferenced) + // remove ACEs + aclCrudDAO.deleteAces(aces); + + // Tidy up any unreferenced ACEs + + // get aces by authority + List unreferenced = aclCrudDAO.getAcesByAuthority(authEntity.getId()); + + if (unreferenced.size() > 0) { - unrefencedAcesToDelete.add(ace.getId()); + List unrefencedAcesToDelete = new ArrayList(unreferenced.size()); + for (Ace ace : unreferenced) + { + unrefencedAcesToDelete.add(ace.getId()); + } + aclCrudDAO.deleteAces(unrefencedAcesToDelete); } - aclCrudDAO.deleteAces(unrefencedAcesToDelete); - } - // remove authority - if (authEntity != null) - { - aclCrudDAO.deleteAuthority(authEntity.getId()); + // remove authority + if (authEntity != null) + { + aclCrudDAO.deleteAuthority(authEntity.getId()); + } } return acls; diff --git a/source/java/org/alfresco/repo/lock/LockServiceImpl.java b/source/java/org/alfresco/repo/lock/LockServiceImpl.java index e6d2f78b97..f69b1f151a 100644 --- a/source/java/org/alfresco/repo/lock/LockServiceImpl.java +++ b/source/java/org/alfresco/repo/lock/LockServiceImpl.java @@ -244,7 +244,7 @@ public class LockServiceImpl implements LockService, /** * @see org.alfresco.service.cmr.lock.LockService#lock(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, org.alfresco.service.cmr.lock.LockType) */ - public synchronized void lock(NodeRef nodeRef, LockType lockType) + public void lock(NodeRef nodeRef, LockType lockType) { // Lock with no expiration lock(nodeRef, lockType, 0); @@ -253,7 +253,7 @@ public class LockServiceImpl implements LockService, /** * @see org.alfresco.service.cmr.lock.LockService#lock(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, org.alfresco.service.cmr.lock.LockType, int) */ - public synchronized void lock(NodeRef nodeRef, LockType lockType, int timeToExpire) + public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire) { nodeRef = tenantService.getName(nodeRef); @@ -319,7 +319,7 @@ public class LockServiceImpl implements LockService, /** * @see org.alfresco.service.cmr.lock.LockService#lock(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, org.alfresco.service.cmr.lock.LockType, int, boolean) */ - public synchronized void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, boolean lockChildren) + public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, boolean lockChildren) throws UnableToAquireLockException { lock(nodeRef, lockType, timeToExpire); @@ -337,7 +337,7 @@ public class LockServiceImpl implements LockService, /** * @see org.alfresco.service.cmr.lock.LockService#lock(java.util.Collection, java.lang.String, org.alfresco.service.cmr.lock.LockType, int) */ - public synchronized void lock(Collection nodeRefs, LockType lockType, int timeToExpire) + public void lock(Collection nodeRefs, LockType lockType, int timeToExpire) throws UnableToAquireLockException { // Lock each of the specifed nodes @@ -350,7 +350,7 @@ public class LockServiceImpl implements LockService, /** * @see org.alfresco.service.cmr.lock.LockService#unlock(NodeRef, String) */ - public synchronized void unlock(NodeRef nodeRef) throws UnableToReleaseLockException + public void unlock(NodeRef nodeRef) throws UnableToReleaseLockException { nodeRef = tenantService.getName(nodeRef); @@ -373,7 +373,7 @@ public class LockServiceImpl implements LockService, * @see org.alfresco.service.cmr.lock.LockService#unlock(NodeRef, String, * boolean) */ - public synchronized void unlock(NodeRef nodeRef, boolean unlockChildren) + public void unlock(NodeRef nodeRef, boolean unlockChildren) throws UnableToReleaseLockException { // Unlock the parent @@ -394,7 +394,7 @@ public class LockServiceImpl implements LockService, * @see org.alfresco.repo.lock.LockService#unlock(Collection, * String) */ - public synchronized void unlock(Collection nodeRefs) throws UnableToReleaseLockException + public void unlock(Collection nodeRefs) throws UnableToReleaseLockException { for (NodeRef nodeRef : nodeRefs) { diff --git a/source/java/org/alfresco/repo/management/subsystems/AbstractChainedSubsystemTest.java b/source/java/org/alfresco/repo/management/subsystems/AbstractChainedSubsystemTest.java index a131805f54..8a9efe25e2 100644 --- a/source/java/org/alfresco/repo/management/subsystems/AbstractChainedSubsystemTest.java +++ b/source/java/org/alfresco/repo/management/subsystems/AbstractChainedSubsystemTest.java @@ -30,8 +30,17 @@ public abstract class AbstractChainedSubsystemTest extends TestCase public ChildApplicationContextFactory getChildApplicationContextFactory(DefaultChildApplicationContextManager childApplicationContextManager, String id) { - DefaultChildApplicationContextManager.ApplicationContextManagerState state = (DefaultChildApplicationContextManager.ApplicationContextManagerState)childApplicationContextManager.getState(true); - return state.getApplicationContextFactory(id); + childApplicationContextManager.lock.readLock().lock(); + try + { + DefaultChildApplicationContextManager.ApplicationContextManagerState state = (DefaultChildApplicationContextManager.ApplicationContextManagerState) childApplicationContextManager + .getState(true); + return state.getApplicationContextFactory(id); + } + finally + { + childApplicationContextManager.lock.readLock().unlock(); + } } } diff --git a/source/java/org/alfresco/repo/management/subsystems/AbstractPropertyBackedBean.java b/source/java/org/alfresco/repo/management/subsystems/AbstractPropertyBackedBean.java index 53e641ade1..ca35411440 100644 --- a/source/java/org/alfresco/repo/management/subsystems/AbstractPropertyBackedBean.java +++ b/source/java/org/alfresco/repo/management/subsystems/AbstractPropertyBackedBean.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.Set; +import java.util.concurrent.locks.ReentrantReadWriteLock; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanNameAware; @@ -85,6 +86,9 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, /** The state. */ private PropertyBackedBeanState state; + + /** Lock for concurrent access. */ + protected ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); /* * (non-Javadoc) @@ -214,11 +218,11 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, * are we making use of the state? I.e. should we start it if it has not been already? * @return the state */ - protected synchronized PropertyBackedBeanState getState(boolean start) + protected PropertyBackedBeanState getState(boolean start) { if (start) { - start(); + start(true); } return this.state; } @@ -250,31 +254,72 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, /** * Initializes or resets the bean and its state. */ - public void init() + public final void init() { + this.lock.writeLock().lock(); + try + { + doInit(); + } + finally + { + this.lock.writeLock().unlock(); + } + } + + /** + * Initializes or resets the bean and its state. + */ + protected void doInit() + { + boolean hadWriteLock = this.lock.isWriteLockedByCurrentThread(); if (this.state == null) { + if (!hadWriteLock) + { + this.lock.readLock().unlock(); + this.lock.writeLock().lock(); + } try { - this.state = createInitialState(); - applyDefaultOverrides(this.state); + if (this.state == null) + { + this.state = createInitialState(); + applyDefaultOverrides(this.state); + this.registry.register(this); + } } catch (IOException e) { throw new RuntimeException(e); } - this.registry.register(this); + finally + { + if (!hadWriteLock) + { + this.lock.readLock().lock(); + this.lock.writeLock().unlock(); + } + } } } /** * {@inheritDoc} */ - public synchronized void revert() + public final void revert() { - stop(); - destroy(true); - init(); + this.lock.writeLock().lock(); + try + { + stop(true); + destroy(true); + doInit(); + } + finally + { + this.lock.writeLock().unlock(); + } } /** @@ -337,9 +382,17 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, /** * {@inheritDoc} */ - public void destroy() + public final void destroy() { - destroy(false); + this.lock.writeLock().lock(); + try + { + destroy(false); + } + finally + { + this.lock.writeLock().unlock(); + } } /** @@ -350,13 +403,33 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, * this value would be false, whereas on the removal of a dynamically created instance, this * value would be true. */ - protected synchronized void destroy(boolean isPermanent) + protected void destroy(boolean isPermanent) { if (this.state != null) { - stop(false); - this.registry.deregister(this, isPermanent); - this.state = null; + boolean hadWriteLock = this.lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + this.lock.readLock().unlock(); + this.lock.writeLock().lock(); + } + try + { + if (this.state != null) + { + stop(false); + this.registry.deregister(this, isPermanent); + this.state = null; + } + } + finally + { + if (!hadWriteLock) + { + this.lock.readLock().lock(); + this.lock.writeLock().unlock(); + } + } } } @@ -383,11 +456,20 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, { if (this.autoStart && event instanceof ContextRefreshedEvent && event.getSource() == this.parent) { - start(false); + this.lock.writeLock().lock(); + try + { + start(false); + } + finally + { + this.lock.writeLock().unlock(); + } } else if (event instanceof PropertyBackedBeanStartedEvent) { - synchronized (this) + this.lock.writeLock().lock(); + try { if (!this.isStarted) { @@ -396,48 +478,93 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, start(false); } } + finally + { + this.lock.writeLock().unlock(); + } } else if (event instanceof PropertyBackedBeanStoppedEvent) { - // Completely destroy the state so that it will have to be reinitialized should the bean be put back in to - // use by this node - destroy(false); + this.lock.writeLock().lock(); + try + { + // Completely destroy the state so that it will have to be reinitialized should the bean be put back in + // to + // use by this node + destroy(false); + } + finally + { + this.lock.writeLock().unlock(); + } } } /** * {@inheritDoc} */ - public synchronized String getProperty(String name) + public String getProperty(String name) { - init(); - return this.state.getProperty(name); + this.lock.readLock().lock(); + try + { + doInit(); + return this.state.getProperty(name); + } + finally + { + this.lock.readLock().unlock(); + } } /** * {@inheritDoc} */ - public synchronized Set getPropertyNames() + public Set getPropertyNames() { - init(); - return this.state.getPropertyNames(); + this.lock.readLock().lock(); + try + { + doInit(); + return this.state.getPropertyNames(); + } + finally + { + this.lock.readLock().unlock(); + } } /** * {@inheritDoc} */ - public synchronized void setProperty(String name, String value) + public void setProperty(String name, String value) { - init(); - this.state.setProperty(name, value); + this.lock.writeLock().lock(); + try + { + doInit(); + this.state.setProperty(name, value); + } + finally + { + this.lock.writeLock().unlock(); + } } /** * {@inheritDoc} */ - public synchronized void start() + public final void start() { - start(true); + this.lock.writeLock().lock(); + try + { + start(true); + } + finally + { + this.lock.writeLock().unlock(); + } } /** @@ -446,26 +573,54 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, * @param broadcast * Should the event be broadcast? */ - protected synchronized void start(boolean broadcast) + protected void start(boolean broadcast) { + boolean hadWriteLock = this.lock.isWriteLockedByCurrentThread(); if (!this.isStarted) { - init(); - if (broadcast) + if (!hadWriteLock) { - this.registry.broadcastStart(this); + this.lock.readLock().unlock(); + this.lock.writeLock().lock(); + } + try + { + if (!this.isStarted) + { + doInit(); + if (broadcast) + { + this.registry.broadcastStart(this); + } + this.state.start(); + this.isStarted = true; + } + } + finally + { + if (!hadWriteLock) + { + this.lock.readLock().lock(); + this.lock.writeLock().unlock(); + } } - this.state.start(); - this.isStarted = true; } } /** * {@inheritDoc} */ - public void stop() + public final void stop() { - stop(true); + this.lock.writeLock().lock(); + try + { + stop(true); + } + finally + { + this.lock.writeLock().unlock(); + } } /** @@ -474,16 +629,36 @@ public abstract class AbstractPropertyBackedBean implements PropertyBackedBean, * @param broadcast * Should the event be broadcast? */ - protected synchronized void stop(boolean broadcast) + protected void stop(boolean broadcast) { + boolean hadWriteLock = this.lock.isWriteLockedByCurrentThread(); if (this.isStarted) { - if (broadcast) + if (!hadWriteLock) { - this.registry.broadcastStop(this); + this.lock.readLock().unlock(); + this.lock.writeLock().lock(); + } + try + { + if (this.isStarted) + { + if (broadcast) + { + this.registry.broadcastStop(this); + } + this.state.stop(); + this.isStarted = false; + } + } + finally + { + if (!hadWriteLock) + { + this.lock.readLock().lock(); + this.lock.writeLock().unlock(); + } } - this.state.stop(); - this.isStarted = false; } } diff --git a/source/java/org/alfresco/repo/management/subsystems/ChildApplicationContextFactory.java b/source/java/org/alfresco/repo/management/subsystems/ChildApplicationContextFactory.java index 43f552c0b7..a816e93110 100644 --- a/source/java/org/alfresco/repo/management/subsystems/ChildApplicationContextFactory.java +++ b/source/java/org/alfresco/repo/management/subsystems/ChildApplicationContextFactory.java @@ -319,26 +319,58 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i * @see org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean#destroy(boolean) */ @Override - protected synchronized void destroy(boolean permanent) + protected void destroy(boolean permanent) { - ApplicationContextState state = (ApplicationContextState) getState(false); - // Cascade the destroy / shutdown - if (state != null) + if (getState(false) != null) { - state.destroy(permanent); - } + boolean hadWriteLock = this.lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + this.lock.readLock().unlock(); + this.lock.writeLock().lock(); + } + try + { + ApplicationContextState state = (ApplicationContextState) getState(false); - super.destroy(permanent); + // Cascade the destroy / shutdown + if (state != null) + { + state.destroy(permanent); + } + super.destroy(permanent); + } + finally + { + if (!hadWriteLock) + { + this.lock.readLock().lock(); + this.lock.writeLock().unlock(); + } + } + } + else + { + super.destroy(permanent); + } } /* * (non-Javadoc) * @see org.alfresco.repo.management.ManagedApplicationContextFactory#getApplicationContext() */ - public synchronized ApplicationContext getApplicationContext() + public ApplicationContext getApplicationContext() { - return ((ApplicationContextState) getState(true)).getApplicationContext(); + this.lock.readLock().lock(); + try + { + return ((ApplicationContextState) getState(true)).getApplicationContext(); + } + finally + { + this.lock.readLock().unlock(); + } } /** @@ -495,7 +527,7 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#getPropertyNames() */ @SuppressWarnings("unchecked") - public synchronized Set getPropertyNames() + public Set getPropertyNames() { Set result = new TreeSet(((Map) this.properties).keySet()); result.add(ChildApplicationContextFactory.TYPE_NAME_PROPERTY); @@ -507,7 +539,7 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i * (non-Javadoc) * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#getProperty(java.lang.String) */ - public synchronized String getProperty(String name) + public String getProperty(String name) { if (name.equals(ChildApplicationContextFactory.TYPE_NAME_PROPERTY)) { @@ -613,7 +645,15 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i for (String id : idsToRemove) { CompositeDataBean child = propertyValues.get(id); - child.destroy(true); + child.lock.writeLock().lock(); + try + { + child.destroy(true); + } + finally + { + child.lock.writeLock().unlock(); + } } this.compositeProperties.put(name, newPropertyValues); } @@ -631,7 +671,7 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i * (non-Javadoc) * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#start() */ - public synchronized void start() + public void start() { // This is where we actually create and start a child application context based on the configured // properties. @@ -686,7 +726,15 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i { for (CompositeDataBean bean : beans.values()) { - bean.destroy(permanent); + bean.lock.writeLock().lock(); + try + { + bean.destroy(permanent); + } + finally + { + bean.lock.writeLock().unlock(); + } } } } @@ -696,7 +744,7 @@ public class ChildApplicationContextFactory extends AbstractPropertyBackedBean i * * @return the application context */ - public synchronized ApplicationContext getApplicationContext() + public ApplicationContext getApplicationContext() { start(); return this.applicationContext; diff --git a/source/java/org/alfresco/repo/management/subsystems/CompositeDataBean.java b/source/java/org/alfresco/repo/management/subsystems/CompositeDataBean.java index 7496891d5e..2c5442314c 100644 --- a/source/java/org/alfresco/repo/management/subsystems/CompositeDataBean.java +++ b/source/java/org/alfresco/repo/management/subsystems/CompositeDataBean.java @@ -193,7 +193,15 @@ public class CompositeDataBean extends AbstractPropertyBackedBean */ protected Object getBean() { - return ((CompositeDataBeanState) getState(true)).getBean(); + this.lock.readLock().lock(); + try + { + return ((CompositeDataBeanState) getState(true)).getBean(); + } + finally + { + this.lock.readLock().unlock(); + } } /* @@ -201,7 +209,7 @@ public class CompositeDataBean extends AbstractPropertyBackedBean * @see org.alfresco.repo.management.subsystems.AbstractPropertyBackedBean#stop(boolean) */ @Override - protected synchronized void stop(boolean broadcast) + protected void stop(boolean broadcast) { super.stop(broadcast); diff --git a/source/java/org/alfresco/repo/management/subsystems/DefaultChildApplicationContextManager.java b/source/java/org/alfresco/repo/management/subsystems/DefaultChildApplicationContextManager.java index d15bb551e4..ab81811db6 100644 --- a/source/java/org/alfresco/repo/management/subsystems/DefaultChildApplicationContextManager.java +++ b/source/java/org/alfresco/repo/management/subsystems/DefaultChildApplicationContextManager.java @@ -112,19 +112,51 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke @Override public void destroy(boolean permanent) { - ApplicationContextManagerState state = (ApplicationContextManagerState) getState(false); - - if (state != null) + if (getState(false) != null) { - // Cascade the destroy / shutdown - for (String id : state.getInstanceIds()) + boolean hadWriteLock = this.lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) { - ChildApplicationContextFactory factory = state.getApplicationContextFactory(id); - factory.destroy(permanent); + this.lock.readLock().unlock(); + this.lock.writeLock().lock(); + } + try + { + ApplicationContextManagerState state = (ApplicationContextManagerState) getState(false); + + if (state != null) + { + // Cascade the destroy / shutdown + for (String id : state.getInstanceIds()) + { + ChildApplicationContextFactory factory = state.getApplicationContextFactory(id); + factory.lock.writeLock().lock(); + try + { + factory.destroy(permanent); + } + finally + { + factory.lock.writeLock().unlock(); + } + } + } + + super.destroy(permanent); + } + finally + { + if (!hadWriteLock) + { + this.lock.readLock().lock(); + this.lock.writeLock().unlock(); + } } } - - super.destroy(permanent); + else + { + super.destroy(permanent); + } } /* (non-Javadoc) @@ -142,7 +174,15 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke */ public Collection getInstanceIds() { - return ((ApplicationContextManagerState) getState(true)).getInstanceIds(); + this.lock.readLock().lock(); + try + { + return ((ApplicationContextManagerState) getState(true)).getInstanceIds(); + } + finally + { + this.lock.readLock().unlock(); + } } /* @@ -151,7 +191,15 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke */ public ApplicationContext getApplicationContext(String id) { - return ((ApplicationContextManagerState) getState(true)).getApplicationContext(id); + this.lock.readLock().lock(); + try + { + return ((ApplicationContextManagerState) getState(true)).getApplicationContext(id); + } + finally + { + this.lock.readLock().unlock(); + } } /** @@ -205,7 +253,7 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke * (non-Javadoc) * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#getProperty(java.lang.String) */ - public synchronized String getProperty(String name) + public String getProperty(String name) { if (!name.equals(DefaultChildApplicationContextManager.ORDER_PROPERTY)) { @@ -228,7 +276,7 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#setProperty(java.lang.String, * java.lang.String) */ - public synchronized void setProperty(String name, String value) + public void setProperty(String name, String value) { if (!name.equals(DefaultChildApplicationContextManager.ORDER_PROPERTY)) { @@ -267,7 +315,7 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke * * @return the instance ids */ - public synchronized Collection getInstanceIds() + public Collection getInstanceIds() { return Collections.unmodifiableList(this.instanceIds); } @@ -283,7 +331,7 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke * the id * @return the application context */ - public synchronized ApplicationContext getApplicationContext(String id) + public ApplicationContext getApplicationContext(String id) { ChildApplicationContextFactory child = this.childApplicationContexts.get(id); return child == null ? null : child.getApplicationContext(); @@ -349,7 +397,15 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke // If we have the same instance ID but a different type, treat that as a destroy and remove if (factory != null && !factory.getTypeName().equals(typeName)) { - factory.destroy(true); + factory.lock.writeLock().lock(); + try + { + factory.destroy(true); + } + finally + { + factory.lock.writeLock().unlock(); + } factory = null; } if (factory == null) @@ -369,7 +425,15 @@ public class DefaultChildApplicationContextManager extends AbstractPropertyBacke for (String id : idsToRemove) { ChildApplicationContextFactory factory = this.childApplicationContexts.remove(id); - factory.destroy(true); + factory.lock.writeLock().lock(); + try + { + factory.destroy(true); + } + finally + { + factory.lock.writeLock().unlock(); + } } this.instanceIds = newInstanceIds; } diff --git a/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java b/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java index 4a663607ff..c790bc4dd7 100644 --- a/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java +++ b/source/java/org/alfresco/repo/management/subsystems/SwitchableApplicationContextFactory.java @@ -56,7 +56,15 @@ public class SwitchableApplicationContextFactory extends AbstractPropertyBackedB */ public ApplicationContext getApplicationContext() { - return ((SwitchableState) getState(true)).getApplicationContext(); + this.lock.readLock().lock(); + try + { + return ((SwitchableState) getState(true)).getApplicationContext(); + } + finally + { + this.lock.readLock().unlock(); + } } /* @@ -96,7 +104,7 @@ public class SwitchableApplicationContextFactory extends AbstractPropertyBackedB * (non-Javadoc) * @see org.alfresco.enterprise.repo.management.ConfigurableBean#onStart() */ - public synchronized void start() + public void start() { if (this.sourceApplicationContextFactory == null) { @@ -131,7 +139,7 @@ public class SwitchableApplicationContextFactory extends AbstractPropertyBackedB * * @return the application context */ - public synchronized ApplicationContext getApplicationContext() + public ApplicationContext getApplicationContext() { if (this.sourceApplicationContextFactory == null) { @@ -144,7 +152,7 @@ public class SwitchableApplicationContextFactory extends AbstractPropertyBackedB * (non-Javadoc) * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#getProperty(java.lang.String) */ - public synchronized String getProperty(String name) + public String getProperty(String name) { if (!name.equals(SwitchableApplicationContextFactory.SOURCE_BEAN_PROPERTY)) { @@ -167,7 +175,7 @@ public class SwitchableApplicationContextFactory extends AbstractPropertyBackedB * @see org.alfresco.repo.management.subsystems.PropertyBackedBean#setProperty(java.lang.String, * java.lang.String) */ - public synchronized void setProperty(String name, String value) + public void setProperty(String name, String value) { if (!name.equals(SwitchableApplicationContextFactory.SOURCE_BEAN_PROPERTY)) { diff --git a/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java b/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java index a4cbc923ce..486a4a1ae1 100644 --- a/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java +++ b/source/java/org/alfresco/repo/node/index/AbstractReindexComponent.java @@ -904,14 +904,37 @@ public abstract class AbstractReindexComponent implements IndexRecovery } @Override - public void afterCommit() + public void beforeCommit(boolean readOnly) { + // Do whatever reindexing work we can in parallel before final queue serialization + indexer.flushPending(); + + // Do the queue ordering in the prepare phase so we don't deadlock with throttling! handleQueue(); } + + @Override + public void afterCommit() + { + // Lucene can now get on with the commit. We didn't have ordering at this level + // and the IndexInfo locks are handled by Lucene. So we let the thread go and + // the other worker threads can get on with it. + // Record the fact that the thread is on the final straight. From here on, no + // more work notifications will be possible so the timestamp needs to spoof it. + recordTimestamp(); + } + @Override public void afterRollback() { handleQueue(); + + // Lucene can now get on with the commit. We didn't have ordering at this level + // and the IndexInfo locks are handled by Lucene. So we let the thread go and + // the other worker threads can get on with it. + // Record the fact that the thread is on the final straight. From here on, no + // more work notifications will be possible so the timestamp needs to spoof it. + recordTimestamp(); } /** * Lucene will do its final commit once this has been allowed to proceed. @@ -941,12 +964,6 @@ public abstract class AbstractReindexComponent implements IndexRecovery // Loop again } } - // Lucene can now get on with the commit. We didn't have ordering at this level - // and the IndexInfo locks are handled by Lucene. So we let the thread go and - // the other worker threads can get on with it. - // Record the fact that the thread is on the final straight. From here on, no - // more work notifications will be possible so the timestamp needs to spoof it. - recordTimestamp(); } } diff --git a/source/java/org/alfresco/repo/search/Indexer.java b/source/java/org/alfresco/repo/search/Indexer.java index b37f4f7a33..8282a4bd1a 100644 --- a/source/java/org/alfresco/repo/search/Indexer.java +++ b/source/java/org/alfresco/repo/search/Indexer.java @@ -110,6 +110,5 @@ public interface Indexer public void deleteIndex(StoreRef storeRef); - - + public void flushPending(); } diff --git a/source/java/org/alfresco/repo/search/IndexerComponent.java b/source/java/org/alfresco/repo/search/IndexerComponent.java index 455775b546..216e234e3f 100644 --- a/source/java/org/alfresco/repo/search/IndexerComponent.java +++ b/source/java/org/alfresco/repo/search/IndexerComponent.java @@ -112,4 +112,8 @@ public class IndexerComponent extends AbstractLifecycleBean implements Indexer indexer.deleteIndex(storeRef); } + public void flushPending() + { + indexerAndSearcherFactory.flush(); + } } diff --git a/source/java/org/alfresco/repo/search/impl/NoActionIndexer.java b/source/java/org/alfresco/repo/search/impl/NoActionIndexer.java index 46b98177e3..e88e922f36 100644 --- a/source/java/org/alfresco/repo/search/impl/NoActionIndexer.java +++ b/source/java/org/alfresco/repo/search/impl/NoActionIndexer.java @@ -73,4 +73,8 @@ public class NoActionIndexer implements Indexer return; } + public void flushPending() + { + return; + } } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java index 7f11816e61..96e5e2dab7 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java @@ -993,8 +993,9 @@ public class ADMLuceneCategoryTest extends TestCase // Finally add some Japanese ones - // オペレーション中ã«ã«ã‚·ã‚¹ãƒ†ãƒ ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠- String jp1 = "\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u4e2d\u306b\u306b\u30b7\u30b9\u30c6\u30e0\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f"; + // オペレーション中ã«ã«ã‚·ã‚¹ãƒ†ãƒ  + // Shortened to 14 Japanese characters for default DB2 install: ALF-6545 + String jp1 = "\u30aa\u30da\u30ec\u30fc\u30b7\u30e7\u30f3\u4e2d\u306b\u306b\u30b7\u30b9\u30c6\u30e0"; catRef = categoryService.createRootCategory( storeRef, ContentModel.ASPECT_GEN_CLASSIFIABLE, jp1 ); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index cd6bbdadd1..7d36e2c316 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -1208,6 +1208,8 @@ public class ADMLuceneTest extends TestCase implements DictionaryListener ftsQueryWithCount(searcher, "lazy -dog", 16); ftsQueryWithCount(searcher, "TEXT:\"lazy\"", 1); ftsQueryWithCount(searcher, "cm_content:\"lazy\"", 1); + ftsQueryWithCount(searcher, "=cm_content:\"lazy\"", 1); + ftsQueryWithCount(searcher, "~cm_content:\"lazy\"", 1); ftsQueryWithCount(searcher, "cm:content:big OR cm:content:lazy", 1); ftsQueryWithCount(searcher, "cm:content:big AND cm:content:lazy", 0); ftsQueryWithCount(searcher, "{http://www.alfresco.org/model/content/1.0}content:\"lazy\"", 1); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java b/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java index 11811cf460..dc0412462d 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java @@ -173,8 +173,7 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI private int mergerMergeFactor = 5; - private int mergerMergeBlockingFactor = 1; - + private int mergerMaxBufferedDocs = IndexWriter.DISABLE_AUTO_FLUSH; private double mergerRamBufferSizeMb = 16.0; @@ -1711,16 +1710,7 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI { this.mergerMergeFactor = mergerMergeFactor; } - - public int getMergerMergeBlockingFactor() - { - return mergerMergeBlockingFactor; - } - - public void setMergerMergeBlockingFactor(int mergerMergeBlockingFactor) - { - this.mergerMergeBlockingFactor = mergerMergeBlockingFactor; - } + public int getMergerMaxBufferedDocs() { diff --git a/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerImpl.java index 64af410af8..b8ce34e193 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerImpl.java @@ -382,6 +382,10 @@ public abstract class AbstractLuceneIndexerImpl extends AbstractLuceneBase */ public void commit() throws LuceneIndexException { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Starting Commit"); + } switch (getStatus().getStatus()) { case Status.STATUS_COMMITTING: @@ -414,20 +418,33 @@ public abstract class AbstractLuceneIndexerImpl extends AbstractLuceneBase } setStatus(TransactionStatus.COMMITTED); } - catch (IOException e) - { - // If anything goes wrong we try and do a roll back - rollback(); - throw new LuceneIndexException("Commit failed", e); - } catch (LuceneIndexException e) { // If anything goes wrong we try and do a roll back rollback(); + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Commit Failed", e); + } throw new LuceneIndexException("Commit failed", e); } + catch (Throwable t) + { + // If anything goes wrong we try and do a roll back + rollback(); + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Commit Failed", t); + } + throw new LuceneIndexException("Commit failed", t); + } finally { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Ending Commit"); + } + // Make sure we tidy up // deleteDelta(); } @@ -444,6 +461,10 @@ public abstract class AbstractLuceneIndexerImpl extends AbstractLuceneBase */ public int prepare() throws LuceneIndexException { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Starting Prepare"); + } switch (getStatus().getStatus()) { case Status.STATUS_COMMITTING: @@ -467,21 +488,40 @@ public abstract class AbstractLuceneIndexerImpl extends AbstractLuceneBase if (isModified()) { doPrepare(); + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Waiting to Finish Preparing"); + } } setStatus(TransactionStatus.PREPARED); return isModified() ? XAResource.XA_OK : XAResource.XA_RDONLY; } - catch (IOException e) - { - // If anything goes wrong we try and do a roll back - rollback(); - throw new LuceneIndexException("Commit failed", e); - } catch (LuceneIndexException e) { setRollbackOnly(); + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Prepare Failed", e); + } throw new LuceneIndexException("Index failed to prepare", e); } + catch (Throwable t) + { + // If anything goes wrong we try and do a roll back + rollback(); + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Prepare Failed", t); + } + throw new LuceneIndexException("Prepared failed", t); + } + finally + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(Thread.currentThread().getName() + " Ending Prepare"); + } + } } } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java index 58d5a1eb8c..e87b0a0ab4 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java @@ -130,14 +130,6 @@ public interface LuceneConfig */ public int getMergerMergeFactor(); - /** - * The factor by which the merge factor is multiplied to determine the allowable number of indexes before blocking. - * - * @return the factor by which the merge factor is multiplied to determine the allowable number of indexes before - * blocking - */ - public int getMergerMergeBlockingFactor(); - /** * Lucene merger config * @return diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java index f222bce91c..d6e54bc641 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java @@ -30,7 +30,6 @@ import org.alfresco.repo.search.impl.lucene.index.IndexInfo; public interface LuceneIndexer extends Indexer, TransactionSynchronisationAwareIndexer { public String getDeltaId(); - public void flushPending() throws LuceneIndexException; public Set getDeletions(); public boolean getDeleteOnlyNodes(); public R doReadOnly(IndexInfo.LockWork lockWork); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java index 16ae2aafc2..5c8ac1de4e 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java @@ -322,8 +322,6 @@ public class IndexInfo implements IndexMonitor private int mergerMergeFactor = 5; - private int mergerMergeBlockingFactor = 1; - private int mergerMaxMergeDocs = 1000000; private boolean mergerUseCompoundFile = true; @@ -331,9 +329,15 @@ public class IndexInfo implements IndexMonitor private int mergerTargetOverlays = 5; private int mergerTargetIndexes = 5; - + private int mergerTargetOverlaysBlockingFactor = 1; + private Object mergerTargetLock = new Object(); + + // To avoid deadlock (a thread with multiple deltas never proceeding to commit) we track whether each thread is + // already in the prepare phase. + private static ThreadLocal thisThreadPreparing = new ThreadLocal(); + // Common properties for indexers private long writeLockTimeout = IndexWriter.WRITE_LOCK_TIMEOUT; @@ -498,7 +502,6 @@ public class IndexInfo implements IndexMonitor this.mergerMaxBufferedDocs = config.getMergerMaxBufferedDocs(); this.mergerRamBufferSizeMb = config.getMergerRamBufferSizeMb(); this.mergerMergeFactor = config.getMergerMergeFactor(); - this.mergerMergeBlockingFactor = config.getMergerMergeBlockingFactor(); this.mergerMaxMergeDocs = config.getMergerMaxMergeDocs(); this.termIndexInterval = config.getTermIndexInterval(); this.mergerTargetOverlays = config.getMergerTargetOverlayCount(); @@ -1362,6 +1365,28 @@ public class IndexInfo implements IndexMonitor } } + private boolean shouldBlock() + { + int pendingDeltas = 0; + int maxDeltas = mergerTargetOverlaysBlockingFactor * mergerTargetOverlays; + for (IndexEntry entry : indexEntries.values()) + { + if (entry.getType() == IndexType.DELTA) + { + TransactionStatus status = entry.getStatus(); + if (status == TransactionStatus.PREPARED || status == TransactionStatus.COMMITTING + || status.isCommitted()) + { + if (++pendingDeltas > maxDeltas) + { + return true; + } + } + } + } + return false; + } + public void setStatus(final String id, final TransactionStatus state, final Set toDelete, final Set read) throws IOException { if (id == null) @@ -1373,41 +1398,57 @@ public class IndexInfo implements IndexMonitor getReadLock(); try { - // beforeWithReadLock may indicate that we need to block for the merger to do some work - while (!transition.beforeWithReadLock(id, toDelete, read)) - { - synchronized (merger) - { - // If the merger is scheduled, let's wait for it... - int count = merger.getScheduledCount(); - if (count <= 0) - { - if (s_logger.isDebugEnabled()) - { - s_logger.debug("CAN'T THROTTLE: " + indexEntries.size()); - } - break; - } - if (s_logger.isDebugEnabled()) - { - s_logger.debug("THROTTLING: " + indexEntries.size()); - } - releaseReadLock(); - try - { - merger.wait(); - } - catch (InterruptedException e) - { - } - } - getReadLock(); - } - + transition.beforeWithReadLock(id, toDelete, read); releaseReadLock(); getWriteLock(); try { + // we may need to block for some deltas to be merged / rolled back + IndexInfo alreadyPreparing = thisThreadPreparing.get(); + if (state == TransactionStatus.PREPARED) + { + // To avoid deadlock (a thread with multiple deltas never proceeding to commit) we don't block if + // this thread is already in the prepare phase + if (alreadyPreparing != null) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("Can't throttle - " + Thread.currentThread().getName() + " already preparing"); + } + } + else + { + while (shouldBlock()) + { + synchronized (mergerTargetLock) + { + if (s_logger.isDebugEnabled()) + { + s_logger.debug("THROTTLING: " + Thread.currentThread().getName() + " " + indexEntries.size()); + } + releaseWriteLock(); + try + { + mergerTargetLock.wait(); + } + catch (InterruptedException e) + { + } + } + getWriteLock(); + } + thisThreadPreparing.set(this); + } + } + else + { + // Only clear the flag when the outermost thread exits prepare + if (alreadyPreparing == this) + { + thisThreadPreparing.set(null); + } + } + if (transition.requiresFileLock()) { doWithFileLock(new LockWork() @@ -1503,7 +1544,7 @@ public class IndexInfo implements IndexMonitor */ private interface Transition { - boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException; + void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException; void transition(String id, Set toDelete, Set read) throws IOException; @@ -1517,9 +1558,9 @@ public class IndexInfo implements IndexMonitor */ private class PreparingTransition implements Transition { - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { - return true; + // Nothing to do } public void transition(String id, Set toDelete, Set read) throws IOException @@ -1553,10 +1594,9 @@ public class IndexInfo implements IndexMonitor */ private class PreparedTransition implements Transition { - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { - // We want to block until the merger has executed if we have more than a certain number of indexes - return indexEntries.size() <= mergerMergeBlockingFactor * mergerTargetIndexes + mergerTargetOverlaysBlockingFactor * mergerTargetOverlays; + } public void transition(String id, Set toDelete, Set read) throws IOException @@ -1622,9 +1662,9 @@ public class IndexInfo implements IndexMonitor private class CommittingTransition implements Transition { - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { - return true; + } public void transition(String id, Set toDelete, Set read) throws IOException @@ -1656,14 +1696,13 @@ public class IndexInfo implements IndexMonitor ThreadLocal tl = new ThreadLocal(); - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { // Make sure we have set up the reader for the data // ... and close it so we do not up the ref count closeDelta(id); IndexEntry entry = indexEntries.get(id); tl.set(buildReferenceCountingIndexReader(id, entry.getDocumentCount())); - return true; } /** @@ -1738,9 +1777,9 @@ public class IndexInfo implements IndexMonitor private class RollingBackTransition implements Transition { - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { - return true; + } public void transition(String id, Set toDelete, Set read) throws IOException @@ -1772,12 +1811,11 @@ public class IndexInfo implements IndexMonitor { ThreadLocal tl = new ThreadLocal(); - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { closeDelta(id); IndexEntry entry = indexEntries.get(id); tl.set(buildReferenceCountingIndexReader(id, entry.getDocumentCount())); - return true; } public void transition(String id, Set toDelete, Set read) throws IOException @@ -1827,9 +1865,9 @@ public class IndexInfo implements IndexMonitor private class DeletableTransition implements Transition { - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { - return true; + } public void transition(String id, Set toDelete, Set read) throws IOException @@ -1872,9 +1910,9 @@ public class IndexInfo implements IndexMonitor private class ActiveTransition implements Transition { - public boolean beforeWithReadLock(String id, Set toDelete, Set read) throws IOException + public void beforeWithReadLock(String id, Set toDelete, Set read) throws IOException { - return true; + } public void transition(String id, Set toDelete, Set read) throws IOException @@ -2346,6 +2384,14 @@ public class IndexInfo implements IndexMonitor version++; writeStatusToFile(indexInfoChannel); writeStatusToFile(indexInfoBackupChannel); + // We have a state that allows more transactions. Notify waiting threads + if (!shouldBlock()) + { + synchronized (mergerTargetLock) + { + mergerTargetLock.notifyAll(); + } + } } private void writeStatusToFile(FileChannel channel) throws IOException @@ -3100,13 +3146,8 @@ public class IndexInfo implements IndexMonitor private abstract class AbstractSchedulable implements Schedulable, Runnable { ScheduledState scheduledState = ScheduledState.UN_SCHEDULED; - - private int scheduledCount; - - public synchronized int getScheduledCount() - { - return scheduledCount; - } + + public synchronized void schedule() { @@ -3118,7 +3159,6 @@ public class IndexInfo implements IndexMonitor break; case UN_SCHEDULED: scheduledState = ScheduledState.SCHEDULED; - scheduledCount++; threadPoolExecutor.execute(this); break; case RECOVERY_SCHEDULED: @@ -3133,10 +3173,8 @@ public class IndexInfo implements IndexMonitor { switch (scheduledState) { - case SCHEDULED: - scheduledCount--; - notifyAll(); case RECOVERY_SCHEDULED: + case SCHEDULED: scheduledState = ScheduledState.UN_SCHEDULED; break; case FAILED: @@ -3181,10 +3219,8 @@ public class IndexInfo implements IndexMonitor { switch (scheduledState) { - case SCHEDULED: - scheduledCount--; - notifyAll(); case RECOVERY_SCHEDULED: + case SCHEDULED: scheduledState = ScheduledState.FAILED; break; case FAILED: @@ -3210,13 +3246,25 @@ public class IndexInfo implements IndexMonitor break; } case SCHEDULED: + if (s_logger.isDebugEnabled()) + { + s_logger.debug(getLogName() + " running ... "); + } reschedule = runImpl(); if (reschedule == ExitState.RESCHEDULE) { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(getLogName() + " rescheduling ... "); + } reschedule(); } else { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(getLogName() + " done "); + } done(); } break; @@ -3375,10 +3423,20 @@ public class IndexInfo implements IndexMonitor if (action == MergeAction.NONE) { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(getLogName() + " Merger exiting with MergeAction.NONE. DONE. "); + dumpInfo(); + } return ExitState.DONE; } else { + if (s_logger.isDebugEnabled()) + { + s_logger.debug(getLogName() + " Merger exiting with MergeAction." + action.toString() + ". RESCHEDULE. "); + dumpInfo(); + } return ExitState.RESCHEDULE; } } diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java index 3aaf809cb7..b412d25c43 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2010-05-01 13:03:44 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2011-01-12 12:54:12 package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; @@ -150,18 +150,18 @@ public class CMISLexer extends Lexer { super(input,state); } - public String getGrammarFileName() { return "W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } // $ANTLR start "QUOTED_STRING" public final void mQUOTED_STRING() throws RecognitionException { try { int _type = QUOTED_STRING; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:853:9: ( '\\'' (~ ( '\\'' | '\\\\' ) | '\\\\' . )* '\\'' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:854:9: '\\'' (~ ( '\\'' | '\\\\' ) | '\\\\' . )* '\\'' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:853:9: ( '\\'' (~ ( '\\'' | '\\\\' ) | '\\\\' . )* '\\'' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:854:9: '\\'' (~ ( '\\'' | '\\\\' ) | '\\\\' . )* '\\'' { match('\''); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:855:9: (~ ( '\\'' | '\\\\' ) | '\\\\' . )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:855:9: (~ ( '\\'' | '\\\\' ) | '\\\\' . )* loop1: do { int alt1=3; @@ -177,7 +177,7 @@ public class CMISLexer extends Lexer { switch (alt1) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:856:17: ~ ( '\\'' | '\\\\' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:856:17: ~ ( '\\'' | '\\\\' ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -192,7 +192,7 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:857:19: '\\\\' . + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:857:19: '\\\\' . { match('\\'); matchAny(); @@ -222,8 +222,8 @@ public class CMISLexer extends Lexer { try { int _type = SELECT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:863:9: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:864:9: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:863:9: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:864:9: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -295,8 +295,8 @@ public class CMISLexer extends Lexer { try { int _type = AS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:891:9: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:892:9: ( 'A' | 'a' ) ( 'S' | 's' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:891:9: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:892:9: ( 'A' | 'a' ) ( 'S' | 's' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -332,8 +332,8 @@ public class CMISLexer extends Lexer { try { int _type = FROM; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:903:9: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:904:9: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:903:9: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:904:9: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) { if ( input.LA(1)=='F'||input.LA(1)=='f' ) { input.consume(); @@ -387,8 +387,8 @@ public class CMISLexer extends Lexer { try { int _type = JOIN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:923:9: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:924:9: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:923:9: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:924:9: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='J'||input.LA(1)=='j' ) { input.consume(); @@ -442,8 +442,8 @@ public class CMISLexer extends Lexer { try { int _type = INNER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:943:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:944:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:943:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:944:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -506,8 +506,8 @@ public class CMISLexer extends Lexer { try { int _type = LEFT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:967:9: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:968:9: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:967:9: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:968:9: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -561,8 +561,8 @@ public class CMISLexer extends Lexer { try { int _type = OUTER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:987:9: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:988:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:987:9: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:988:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -625,8 +625,8 @@ public class CMISLexer extends Lexer { try { int _type = ON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1011:9: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1012:9: ( 'O' | 'o' ) ( 'N' | 'n' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1011:9: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1012:9: ( 'O' | 'o' ) ( 'N' | 'n' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -662,8 +662,8 @@ public class CMISLexer extends Lexer { try { int _type = WHERE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1023:9: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1024:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1023:9: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1024:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='W'||input.LA(1)=='w' ) { input.consume(); @@ -726,8 +726,8 @@ public class CMISLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1047:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1048:9: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1047:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1048:9: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -763,8 +763,8 @@ public class CMISLexer extends Lexer { try { int _type = AND; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1059:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1060:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1059:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1060:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -809,8 +809,8 @@ public class CMISLexer extends Lexer { try { int _type = NOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1075:9: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1076:9: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1075:9: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1076:9: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -855,8 +855,8 @@ public class CMISLexer extends Lexer { try { int _type = IN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1091:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1092:9: ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1091:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1092:9: ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -892,8 +892,8 @@ public class CMISLexer extends Lexer { try { int _type = LIKE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1103:9: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1104:9: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1103:9: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1104:9: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -947,8 +947,8 @@ public class CMISLexer extends Lexer { try { int _type = IS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1123:9: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1124:9: ( 'I' | 'i' ) ( 'S' | 's' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1123:9: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1124:9: ( 'I' | 'i' ) ( 'S' | 's' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -984,8 +984,8 @@ public class CMISLexer extends Lexer { try { int _type = NULL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1135:9: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1136:9: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1135:9: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1136:9: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -1039,8 +1039,8 @@ public class CMISLexer extends Lexer { try { int _type = ANY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1155:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1156:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1155:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1156:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1085,8 +1085,8 @@ public class CMISLexer extends Lexer { try { int _type = CONTAINS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1171:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1172:9: ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1171:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1172:9: ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) { if ( input.LA(1)=='C'||input.LA(1)=='c' ) { input.consume(); @@ -1176,8 +1176,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_FOLDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1207:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1208:9: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1207:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1208:9: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1268,8 +1268,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_TREE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1244:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1245:9: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1244:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1245:9: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1342,8 +1342,8 @@ public class CMISLexer extends Lexer { try { int _type = ORDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1273:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1274:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1273:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1274:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -1406,8 +1406,8 @@ public class CMISLexer extends Lexer { try { int _type = BY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1297:9: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1298:9: ( 'B' | 'b' ) ( 'Y' | 'y' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1297:9: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1298:9: ( 'B' | 'b' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='B'||input.LA(1)=='b' ) { input.consume(); @@ -1443,8 +1443,8 @@ public class CMISLexer extends Lexer { try { int _type = ASC; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1309:9: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1310:9: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1309:9: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1310:9: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1489,8 +1489,8 @@ public class CMISLexer extends Lexer { try { int _type = DESC; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1325:9: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1326:9: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1325:9: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1326:9: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='D'||input.LA(1)=='d' ) { input.consume(); @@ -1544,8 +1544,8 @@ public class CMISLexer extends Lexer { try { int _type = TIMESTAMP; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1345:9: ( ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1346:9: ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1345:9: ( ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1346:9: ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) { if ( input.LA(1)=='T'||input.LA(1)=='t' ) { input.consume(); @@ -1644,8 +1644,8 @@ public class CMISLexer extends Lexer { try { int _type = TRUE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1385:9: ( ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1386:9: ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1385:9: ( ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1386:9: ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) { if ( input.LA(1)=='T'||input.LA(1)=='t' ) { input.consume(); @@ -1699,8 +1699,8 @@ public class CMISLexer extends Lexer { try { int _type = FALSE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1405:9: ( ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1406:9: ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1405:9: ( ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1406:9: ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) { if ( input.LA(1)=='F'||input.LA(1)=='f' ) { input.consume(); @@ -1763,8 +1763,8 @@ public class CMISLexer extends Lexer { try { int _type = SCORE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1429:9: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1430:9: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1429:9: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1430:9: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -1827,8 +1827,8 @@ public class CMISLexer extends Lexer { try { int _type = LPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1453:9: ( '(' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1454:9: '(' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1453:9: ( '(' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1454:9: '(' { match('('); @@ -1847,8 +1847,8 @@ public class CMISLexer extends Lexer { try { int _type = RPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1458:9: ( ')' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1459:9: ')' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1458:9: ( ')' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1459:9: ')' { match(')'); @@ -1867,8 +1867,8 @@ public class CMISLexer extends Lexer { try { int _type = STAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1463:9: ( '*' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1464:9: '*' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1463:9: ( '*' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1464:9: '*' { match('*'); @@ -1887,8 +1887,8 @@ public class CMISLexer extends Lexer { try { int _type = COMMA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1468:9: ( ',' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1469:9: ',' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1468:9: ( ',' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1469:9: ',' { match(','); @@ -1907,8 +1907,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTSTAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1473:9: ( '.*' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1474:9: '.*' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1473:9: ( '.*' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1474:9: '.*' { match(".*"); @@ -1928,8 +1928,8 @@ public class CMISLexer extends Lexer { try { int _type = DOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1478:9: ( '.' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1479:9: '.' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1478:9: ( '.' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1479:9: '.' { match('.'); @@ -1948,8 +1948,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTDOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1483:9: ( '..' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1484:9: '..' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1483:9: ( '..' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1484:9: '..' { match(".."); @@ -1969,8 +1969,8 @@ public class CMISLexer extends Lexer { try { int _type = EQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1488:9: ( '=' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1489:9: '=' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1488:9: ( '=' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1489:9: '=' { match('='); @@ -1989,8 +1989,8 @@ public class CMISLexer extends Lexer { try { int _type = TILDA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1493:9: ( '~' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1494:9: '~' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1493:9: ( '~' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1494:9: '~' { match('~'); @@ -2009,8 +2009,8 @@ public class CMISLexer extends Lexer { try { int _type = NOTEQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1498:9: ( '<>' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1499:9: '<>' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1498:9: ( '<>' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1499:9: '<>' { match("<>"); @@ -2030,8 +2030,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1503:9: ( '>' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1504:9: '>' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1503:9: ( '>' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1504:9: '>' { match('>'); @@ -2050,8 +2050,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1508:9: ( '<' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1509:9: '<' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1508:9: ( '<' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1509:9: '<' { match('<'); @@ -2070,8 +2070,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1513:9: ( '>=' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1514:9: '>=' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1513:9: ( '>=' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1514:9: '>=' { match(">="); @@ -2091,8 +2091,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1518:9: ( '<=' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1519:9: '<=' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1518:9: ( '<=' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1519:9: '<=' { match("<="); @@ -2112,8 +2112,8 @@ public class CMISLexer extends Lexer { try { int _type = COLON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1523:9: ( ':' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1524:9: ':' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1523:9: ( ':' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1524:9: ':' { match(':'); @@ -2132,8 +2132,8 @@ public class CMISLexer extends Lexer { try { int _type = DOUBLE_QUOTE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1528:9: ( '\"' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1529:9: '\"' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1528:9: ( '\"' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1529:9: '\"' { match('\"'); @@ -2152,10 +2152,10 @@ public class CMISLexer extends Lexer { try { int _type = DECIMAL_INTEGER_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1537:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1538:9: ( PLUS | MINUS )? DECIMAL_NUMERAL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1537:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1538:9: ( PLUS | MINUS )? DECIMAL_NUMERAL { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1538:9: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1538:9: ( PLUS | MINUS )? int alt2=2; int LA2_0 = input.LA(1); @@ -2164,7 +2164,7 @@ public class CMISLexer extends Lexer { } switch (alt2) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2198,14 +2198,14 @@ public class CMISLexer extends Lexer { try { int _type = FLOATING_POINT_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1550:9: ( ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1550:9: ( ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT ) int alt12=3; alt12 = dfa12.predict(input); switch (alt12) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1551:9: ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1551:9: ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1551:9: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1551:9: ( PLUS | MINUS )? int alt3=2; int LA3_0 = input.LA(1); @@ -2214,7 +2214,7 @@ public class CMISLexer extends Lexer { } switch (alt3) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2231,7 +2231,7 @@ public class CMISLexer extends Lexer { } - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:9: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:9: ( DIGIT )+ int cnt4=0; loop4: do { @@ -2245,7 +2245,7 @@ public class CMISLexer extends Lexer { switch (alt4) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:9: DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:9: DIGIT { mDIGIT(); @@ -2262,7 +2262,7 @@ public class CMISLexer extends Lexer { } while (true); mDOT(); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:20: ( DIGIT )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:20: ( DIGIT )* loop5: do { int alt5=2; @@ -2275,7 +2275,7 @@ public class CMISLexer extends Lexer { switch (alt5) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:20: DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:20: DIGIT { mDIGIT(); @@ -2287,7 +2287,7 @@ public class CMISLexer extends Lexer { } } while (true); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:27: ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:27: ( EXPONENT )? int alt6=2; int LA6_0 = input.LA(1); @@ -2296,7 +2296,7 @@ public class CMISLexer extends Lexer { } switch (alt6) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:27: EXPONENT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1555:27: EXPONENT { mEXPONENT(); @@ -2309,9 +2309,9 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1557:9: ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1557:9: ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1557:9: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1557:9: ( PLUS | MINUS )? int alt7=2; int LA7_0 = input.LA(1); @@ -2320,7 +2320,7 @@ public class CMISLexer extends Lexer { } switch (alt7) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2338,7 +2338,7 @@ public class CMISLexer extends Lexer { } mDOT(); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:13: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:13: ( DIGIT )+ int cnt8=0; loop8: do { @@ -2352,7 +2352,7 @@ public class CMISLexer extends Lexer { switch (alt8) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:13: DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:13: DIGIT { mDIGIT(); @@ -2368,7 +2368,7 @@ public class CMISLexer extends Lexer { cnt8++; } while (true); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:20: ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:20: ( EXPONENT )? int alt9=2; int LA9_0 = input.LA(1); @@ -2377,7 +2377,7 @@ public class CMISLexer extends Lexer { } switch (alt9) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:20: EXPONENT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:20: EXPONENT { mEXPONENT(); @@ -2390,9 +2390,9 @@ public class CMISLexer extends Lexer { } break; case 3 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1563:9: ( PLUS | MINUS )? ( DIGIT )+ EXPONENT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1563:9: ( PLUS | MINUS )? ( DIGIT )+ EXPONENT { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1563:9: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1563:9: ( PLUS | MINUS )? int alt10=2; int LA10_0 = input.LA(1); @@ -2401,7 +2401,7 @@ public class CMISLexer extends Lexer { } switch (alt10) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2418,7 +2418,7 @@ public class CMISLexer extends Lexer { } - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:9: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:9: ( DIGIT )+ int cnt11=0; loop11: do { @@ -2432,7 +2432,7 @@ public class CMISLexer extends Lexer { switch (alt11) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:9: DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:9: DIGIT { mDIGIT(); @@ -2467,8 +2467,8 @@ public class CMISLexer extends Lexer { try { int _type = ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1574:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1575:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1574:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1575:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* { if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -2479,7 +2479,7 @@ public class CMISLexer extends Lexer { recover(mse); throw mse;} - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1580:9: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1580:9: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* loop13: do { int alt13=2; @@ -2492,7 +2492,7 @@ public class CMISLexer extends Lexer { switch (alt13) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( (input.LA(1)>='#' && input.LA(1)<='$')||(input.LA(1)>='0' && input.LA(1)<=':')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -2528,10 +2528,10 @@ public class CMISLexer extends Lexer { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1592:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1593:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1592:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1593:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1593:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1593:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt14=0; loop14: do { @@ -2545,7 +2545,7 @@ public class CMISLexer extends Lexer { switch (alt14) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { input.consume(); @@ -2584,7 +2584,7 @@ public class CMISLexer extends Lexer { // $ANTLR start "DECIMAL_NUMERAL" public final void mDECIMAL_NUMERAL() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1607:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1607:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) int alt16=2; int LA16_0 = input.LA(1); @@ -2602,17 +2602,17 @@ public class CMISLexer extends Lexer { } switch (alt16) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1608:9: ZERO_DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1608:9: ZERO_DIGIT { mZERO_DIGIT(); } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1609:11: NON_ZERO_DIGIT ( DIGIT )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1609:11: NON_ZERO_DIGIT ( DIGIT )* { mNON_ZERO_DIGIT(); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1609:26: ( DIGIT )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1609:26: ( DIGIT )* loop15: do { int alt15=2; @@ -2625,7 +2625,7 @@ public class CMISLexer extends Lexer { switch (alt15) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1609:26: DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1609:26: DIGIT { mDIGIT(); @@ -2651,8 +2651,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "DIGIT" public final void mDIGIT() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1614:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1614:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9') ) { input.consume(); @@ -2675,8 +2675,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "ZERO_DIGIT" public final void mZERO_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1621:9: ( '0' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1622:9: '0' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1621:9: ( '0' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1622:9: '0' { match('0'); @@ -2691,8 +2691,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "NON_ZERO_DIGIT" public final void mNON_ZERO_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1627:9: ( '1' .. '9' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1628:9: '1' .. '9' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1627:9: ( '1' .. '9' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1628:9: '1' .. '9' { matchRange('1','9'); @@ -2707,8 +2707,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "PLUS" public final void mPLUS() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1633:9: ( '+' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1634:9: '+' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1633:9: ( '+' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1634:9: '+' { match('+'); @@ -2723,8 +2723,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "MINUS" public final void mMINUS() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1639:9: ( '-' ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1640:9: '-' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1639:9: ( '-' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1640:9: '-' { match('-'); @@ -2739,8 +2739,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "E" public final void mE() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1645:9: ( ( 'e' | 'E' ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1646:9: ( 'e' | 'E' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1645:9: ( ( 'e' | 'E' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1646:9: ( 'e' | 'E' ) { if ( input.LA(1)=='E'||input.LA(1)=='e' ) { input.consume(); @@ -2763,8 +2763,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "EXPONENT" public final void mEXPONENT() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1658:9: ( E SIGNED_INTEGER ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1659:9: E SIGNED_INTEGER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1658:9: ( E SIGNED_INTEGER ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1659:9: E SIGNED_INTEGER { mE(); mSIGNED_INTEGER(); @@ -2780,10 +2780,10 @@ public class CMISLexer extends Lexer { // $ANTLR start "SIGNED_INTEGER" public final void mSIGNED_INTEGER() throws RecognitionException { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1664:9: ( ( PLUS | MINUS )? ( DIGIT )+ ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1665:9: ( PLUS | MINUS )? ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1664:9: ( ( PLUS | MINUS )? ( DIGIT )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1665:9: ( PLUS | MINUS )? ( DIGIT )+ { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1665:9: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1665:9: ( PLUS | MINUS )? int alt17=2; int LA17_0 = input.LA(1); @@ -2792,7 +2792,7 @@ public class CMISLexer extends Lexer { } switch (alt17) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2809,7 +2809,7 @@ public class CMISLexer extends Lexer { } - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1669:9: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1669:9: ( DIGIT )+ int cnt18=0; loop18: do { @@ -2823,7 +2823,7 @@ public class CMISLexer extends Lexer { switch (alt18) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1669:9: DIGIT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1669:9: DIGIT { mDIGIT(); @@ -2849,348 +2849,348 @@ public class CMISLexer extends Lexer { // $ANTLR end "SIGNED_INTEGER" public void mTokens() throws RecognitionException { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:8: ( QUOTED_STRING | SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | DOUBLE_QUOTE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:8: ( QUOTED_STRING | SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | DOUBLE_QUOTE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS ) int alt19=49; alt19 = dfa19.predict(input); switch (alt19) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:10: QUOTED_STRING + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:10: QUOTED_STRING { mQUOTED_STRING(); } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:24: SELECT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:24: SELECT { mSELECT(); } break; case 3 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:31: AS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:31: AS { mAS(); } break; case 4 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:34: FROM + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:34: FROM { mFROM(); } break; case 5 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:39: JOIN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:39: JOIN { mJOIN(); } break; case 6 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:44: INNER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:44: INNER { mINNER(); } break; case 7 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:50: LEFT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:50: LEFT { mLEFT(); } break; case 8 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:55: OUTER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:55: OUTER { mOUTER(); } break; case 9 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:61: ON + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:61: ON { mON(); } break; case 10 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:64: WHERE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:64: WHERE { mWHERE(); } break; case 11 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:70: OR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:70: OR { mOR(); } break; case 12 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:73: AND + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:73: AND { mAND(); } break; case 13 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:77: NOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:77: NOT { mNOT(); } break; case 14 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:81: IN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:81: IN { mIN(); } break; case 15 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:84: LIKE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:84: LIKE { mLIKE(); } break; case 16 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:89: IS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:89: IS { mIS(); } break; case 17 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:92: NULL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:92: NULL { mNULL(); } break; case 18 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:97: ANY + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:97: ANY { mANY(); } break; case 19 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:101: CONTAINS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:101: CONTAINS { mCONTAINS(); } break; case 20 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:110: IN_FOLDER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:110: IN_FOLDER { mIN_FOLDER(); } break; case 21 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:120: IN_TREE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:120: IN_TREE { mIN_TREE(); } break; case 22 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:128: ORDER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:128: ORDER { mORDER(); } break; case 23 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:134: BY + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:134: BY { mBY(); } break; case 24 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:137: ASC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:137: ASC { mASC(); } break; case 25 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:141: DESC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:141: DESC { mDESC(); } break; case 26 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:146: TIMESTAMP + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:146: TIMESTAMP { mTIMESTAMP(); } break; case 27 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:156: TRUE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:156: TRUE { mTRUE(); } break; case 28 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:161: FALSE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:161: FALSE { mFALSE(); } break; case 29 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:167: SCORE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:167: SCORE { mSCORE(); } break; case 30 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:173: LPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:173: LPAREN { mLPAREN(); } break; case 31 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:180: RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:180: RPAREN { mRPAREN(); } break; case 32 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:187: STAR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:187: STAR { mSTAR(); } break; case 33 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:192: COMMA + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:192: COMMA { mCOMMA(); } break; case 34 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:198: DOTSTAR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:198: DOTSTAR { mDOTSTAR(); } break; case 35 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:206: DOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:206: DOT { mDOT(); } break; case 36 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:210: DOTDOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:210: DOTDOT { mDOTDOT(); } break; case 37 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:217: EQUALS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:217: EQUALS { mEQUALS(); } break; case 38 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:224: TILDA + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:224: TILDA { mTILDA(); } break; case 39 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:230: NOTEQUALS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:230: NOTEQUALS { mNOTEQUALS(); } break; case 40 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:240: GREATERTHAN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:240: GREATERTHAN { mGREATERTHAN(); } break; case 41 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:252: LESSTHAN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:252: LESSTHAN { mLESSTHAN(); } break; case 42 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:261: GREATERTHANOREQUALS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:261: GREATERTHANOREQUALS { mGREATERTHANOREQUALS(); } break; case 43 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:281: LESSTHANOREQUALS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:281: LESSTHANOREQUALS { mLESSTHANOREQUALS(); } break; case 44 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:298: COLON + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:298: COLON { mCOLON(); } break; case 45 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:304: DOUBLE_QUOTE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:304: DOUBLE_QUOTE { mDOUBLE_QUOTE(); } break; case 46 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:317: DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:317: DECIMAL_INTEGER_LITERAL { mDECIMAL_INTEGER_LITERAL(); } break; case 47 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:341: FLOATING_POINT_LITERAL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:341: FLOATING_POINT_LITERAL { mFLOATING_POINT_LITERAL(); } break; case 48 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:364: ID + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:364: ID { mID(); } break; case 49 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:367: WS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:367: WS { mWS(); diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java index cf2f0e0b6b..1e211eb839 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2010-05-01 13:03:44 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2011-01-12 12:54:11 package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; @@ -127,7 +127,7 @@ public class CMISParser extends Parser { } public String[] getTokenNames() { return CMISParser.tokenNames; } - public String getGrammarFileName() { return "W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } private Stack paraphrases = new Stack(); @@ -280,7 +280,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "query" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:279:1: query : SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:279:1: query : SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ; public final CMISParser.query_return query() throws RecognitionException { CMISParser.query_return retval = new CMISParser.query_return(); retval.start = input.LT(1); @@ -310,8 +310,8 @@ public class CMISParser extends Parser { paraphrases.push("in query"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:294:9: ( SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:9: SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:294:9: ( SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:9: SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF { SELECT1=(Token)match(input,SELECT,FOLLOW_SELECT_in_query415); if (state.failed) return retval; if ( state.backtracking==0 ) stream_SELECT.add(SELECT1); @@ -328,7 +328,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_fromClause.add(fromClause3.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:38: ( whereClause )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:38: ( whereClause )? int alt1=2; int LA1_0 = input.LA(1); @@ -337,7 +337,7 @@ public class CMISParser extends Parser { } switch (alt1) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:38: whereClause + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:38: whereClause { pushFollow(FOLLOW_whereClause_in_query421); whereClause4=whereClause(); @@ -351,7 +351,7 @@ public class CMISParser extends Parser { } - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:51: ( orderByClause )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:51: ( orderByClause )? int alt2=2; int LA2_0 = input.LA(1); @@ -360,7 +360,7 @@ public class CMISParser extends Parser { } switch (alt2) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:51: orderByClause + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:295:51: orderByClause { pushFollow(FOLLOW_orderByClause_in_query424); orderByClause5=orderByClause(); @@ -380,7 +380,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: fromClause, selectList, orderByClause, whereClause + // elements: orderByClause, whereClause, fromClause, selectList // token labels: // rule labels: retval // token list labels: @@ -393,20 +393,20 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 296:17: -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:297:25: ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:297:25: ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(QUERY, "QUERY"), root_1); adaptor.addChild(root_1, stream_selectList.nextTree()); adaptor.addChild(root_1, stream_fromClause.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:297:55: ( whereClause )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:297:55: ( whereClause )? if ( stream_whereClause.hasNext() ) { adaptor.addChild(root_1, stream_whereClause.nextTree()); } stream_whereClause.reset(); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:297:68: ( orderByClause )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:297:68: ( orderByClause )? if ( stream_orderByClause.hasNext() ) { adaptor.addChild(root_1, stream_orderByClause.nextTree()); @@ -451,7 +451,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "selectList" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:300:1: selectList : ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:300:1: selectList : ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ); public final CMISParser.selectList_return selectList() throws RecognitionException { CMISParser.selectList_return retval = new CMISParser.selectList_return(); retval.start = input.LT(1); @@ -474,12 +474,12 @@ public class CMISParser extends Parser { paraphrases.push("in select list"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:309:9: ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:309:9: ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ) int alt4=2; alt4 = dfa4.predict(input); switch (alt4) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:310:9: STAR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:310:9: STAR { STAR7=(Token)match(input,STAR,FOLLOW_STAR_in_selectList526); if (state.failed) return retval; if ( state.backtracking==0 ) stream_STAR.add(STAR7); @@ -500,7 +500,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 311:17: -> ^( ALL_COLUMNS ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:312:25: ^( ALL_COLUMNS ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:312:25: ^( ALL_COLUMNS ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ALL_COLUMNS, "ALL_COLUMNS"), root_1); @@ -514,7 +514,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:11: selectSubList ( COMMA selectSubList )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:11: selectSubList ( COMMA selectSubList )* { pushFollow(FOLLOW_selectSubList_in_selectList584); selectSubList8=selectSubList(); @@ -522,7 +522,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_selectSubList.add(selectSubList8.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:25: ( COMMA selectSubList )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:25: ( COMMA selectSubList )* loop3: do { int alt3=2; @@ -535,7 +535,7 @@ public class CMISParser extends Parser { switch (alt3) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:26: COMMA selectSubList + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:26: COMMA selectSubList { COMMA9=(Token)match(input,COMMA,FOLLOW_COMMA_in_selectList587); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA9); @@ -571,7 +571,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 314:17: -> ^( COLUMNS ( selectSubList )+ ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:315:25: ^( COLUMNS ( selectSubList )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:315:25: ^( COLUMNS ( selectSubList )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMNS, "COLUMNS"), root_1); @@ -625,7 +625,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "selectSubList" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:318:1: selectSubList : ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:318:1: selectSubList : ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) ); public final CMISParser.selectSubList_return selectSubList() throws RecognitionException { CMISParser.selectSubList_return retval = new CMISParser.selectSubList_return(); retval.start = input.LT(1); @@ -649,12 +649,12 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:319:9: ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:319:9: ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) ) int alt7=2; alt7 = dfa7.predict(input); switch (alt7) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:9: valueExpression ( ( AS )? columnName )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:9: valueExpression ( ( AS )? columnName )? { pushFollow(FOLLOW_valueExpression_in_selectSubList673); valueExpression11=valueExpression(); @@ -662,7 +662,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_valueExpression.add(valueExpression11.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:25: ( ( AS )? columnName )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:25: ( ( AS )? columnName )? int alt6=2; int LA6_0 = input.LA(1); @@ -677,9 +677,9 @@ public class CMISParser extends Parser { } switch (alt6) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:26: ( AS )? columnName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:26: ( AS )? columnName { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:26: ( AS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:26: ( AS )? int alt5=2; int LA5_0 = input.LA(1); @@ -688,7 +688,7 @@ public class CMISParser extends Parser { } switch (alt5) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:26: AS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:320:26: AS { AS12=(Token)match(input,AS,FOLLOW_AS_in_selectSubList676); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AS.add(AS12); @@ -714,7 +714,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: columnName, valueExpression + // elements: valueExpression, columnName // token labels: // rule labels: retval // token list labels: @@ -727,13 +727,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 321:17: -> ^( COLUMN valueExpression ( columnName )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:322:25: ^( COLUMN valueExpression ( columnName )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:322:25: ^( COLUMN valueExpression ( columnName )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN, "COLUMN"), root_1); adaptor.addChild(root_1, stream_valueExpression.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:322:50: ( columnName )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:322:50: ( columnName )? if ( stream_columnName.hasNext() ) { adaptor.addChild(root_1, stream_columnName.nextTree()); @@ -749,7 +749,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:323:11: qualifier DOTSTAR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:323:11: qualifier DOTSTAR { pushFollow(FOLLOW_qualifier_in_selectSubList744); qualifier14=qualifier(); @@ -776,7 +776,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 324:17: -> ^( ALL_COLUMNS qualifier ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:325:25: ^( ALL_COLUMNS qualifier ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:325:25: ^( ALL_COLUMNS qualifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ALL_COLUMNS, "ALL_COLUMNS"), root_1); @@ -818,7 +818,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "valueExpression" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:328:1: valueExpression : ( columnReference -> columnReference | valueFunction -> valueFunction ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:328:1: valueExpression : ( columnReference -> columnReference | valueFunction -> valueFunction ); public final CMISParser.valueExpression_return valueExpression() throws RecognitionException { CMISParser.valueExpression_return retval = new CMISParser.valueExpression_return(); retval.start = input.LT(1); @@ -836,12 +836,12 @@ public class CMISParser extends Parser { paraphrases.push("in value expression"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:337:9: ( columnReference -> columnReference | valueFunction -> valueFunction ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:337:9: ( columnReference -> columnReference | valueFunction -> valueFunction ) int alt8=2; alt8 = dfa8.predict(input); switch (alt8) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:338:9: columnReference + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:338:9: columnReference { pushFollow(FOLLOW_columnReference_in_valueExpression837); columnReference16=columnReference(); @@ -873,7 +873,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:340:11: valueFunction + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:340:11: valueFunction { pushFollow(FOLLOW_valueFunction_in_valueExpression869); valueFunction17=valueFunction(); @@ -936,7 +936,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "columnReference" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:344:1: columnReference : ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:344:1: columnReference : ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ; public final CMISParser.columnReference_return columnReference() throws RecognitionException { CMISParser.columnReference_return retval = new CMISParser.columnReference_return(); retval.start = input.LT(1); @@ -957,15 +957,15 @@ public class CMISParser extends Parser { paraphrases.push("in column reference"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:353:9: ( ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:9: ( qualifier DOT )? columnName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:353:9: ( ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:9: ( qualifier DOT )? columnName { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:9: ( qualifier DOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:9: ( qualifier DOT )? int alt9=2; alt9 = dfa9.predict(input); switch (alt9) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:10: qualifier DOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:10: qualifier DOT { pushFollow(FOLLOW_qualifier_in_columnReference933); qualifier18=qualifier(); @@ -991,7 +991,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: qualifier, columnName + // elements: columnName, qualifier // token labels: // rule labels: retval // token list labels: @@ -1004,13 +1004,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 355:17: -> ^( COLUMN_REF columnName ( qualifier )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:356:25: ^( COLUMN_REF columnName ( qualifier )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:356:25: ^( COLUMN_REF columnName ( qualifier )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); adaptor.addChild(root_1, stream_columnName.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:356:49: ( qualifier )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:356:49: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -1055,7 +1055,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "valueFunction" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:359:1: valueFunction : (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:359:1: valueFunction : (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ); public final CMISParser.valueFunction_return valueFunction() throws RecognitionException { CMISParser.valueFunction_return retval = new CMISParser.valueFunction_return(); retval.start = input.LT(1); @@ -1088,12 +1088,12 @@ public class CMISParser extends Parser { paraphrases.push("in function"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:368:9: (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:368:9: (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ) int alt12=2; alt12 = dfa12.predict(input); switch (alt12) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:369:9: cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:369:9: cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN { pushFollow(FOLLOW_cmisFunction_in_valueFunction1035); cmisFunctionName=cmisFunction(); @@ -1104,14 +1104,14 @@ public class CMISParser extends Parser { LPAREN21=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction1037); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN21); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:369:46: ( functionArgument )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:369:46: ( functionArgument )* loop10: do { int alt10=2; alt10 = dfa10.predict(input); switch (alt10) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:369:46: functionArgument + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:369:46: functionArgument { pushFollow(FOLLOW_functionArgument_in_valueFunction1039); functionArgument22=functionArgument(); @@ -1134,7 +1134,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: cmisFunctionName, functionArgument, LPAREN, RPAREN + // elements: RPAREN, functionArgument, LPAREN, cmisFunctionName // token labels: // rule labels: retval, cmisFunctionName // token list labels: @@ -1148,14 +1148,14 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 370:17: -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:371:25: ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:371:25: ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION, "FUNCTION"), root_1); adaptor.addChild(root_1, stream_cmisFunctionName.nextTree()); adaptor.addChild(root_1, stream_LPAREN.nextNode()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:371:61: ( functionArgument )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:371:61: ( functionArgument )* while ( stream_functionArgument.hasNext() ) { adaptor.addChild(root_1, stream_functionArgument.nextTree()); @@ -1172,7 +1172,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:11: {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:11: {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN { if ( !((strict == false)) ) { if (state.backtracking>0) {state.failed=true; return retval;} @@ -1187,14 +1187,14 @@ public class CMISParser extends Parser { LPAREN24=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction1117); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN24); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:64: ( functionArgument )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:64: ( functionArgument )* loop11: do { int alt11=2; alt11 = dfa11.predict(input); switch (alt11) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:64: functionArgument + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:64: functionArgument { pushFollow(FOLLOW_functionArgument_in_valueFunction1119); functionArgument25=functionArgument(); @@ -1217,7 +1217,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: RPAREN, functionArgument, functionName, LPAREN + // elements: functionName, LPAREN, RPAREN, functionArgument // token labels: // rule labels: retval, functionName // token list labels: @@ -1231,14 +1231,14 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 373:17: -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:374:25: ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:374:25: ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION, "FUNCTION"), root_1); adaptor.addChild(root_1, stream_functionName.nextTree()); adaptor.addChild(root_1, stream_LPAREN.nextNode()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:374:57: ( functionArgument )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:374:57: ( functionArgument )* while ( stream_functionArgument.hasNext() ) { adaptor.addChild(root_1, stream_functionArgument.nextTree()); @@ -1286,7 +1286,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "functionArgument" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:377:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:377:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ); public final CMISParser.functionArgument_return functionArgument() throws RecognitionException { CMISParser.functionArgument_return retval = new CMISParser.functionArgument_return(); retval.start = input.LT(1); @@ -1308,12 +1308,12 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:378:9: ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:378:9: ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ) int alt13=3; alt13 = dfa13.predict(input); switch (alt13) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:379:9: qualifier DOT columnName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:379:9: qualifier DOT columnName { pushFollow(FOLLOW_qualifier_in_functionArgument1211); qualifier27=qualifier(); @@ -1333,7 +1333,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: columnName, qualifier + // elements: qualifier, columnName // token labels: // rule labels: retval // token list labels: @@ -1346,7 +1346,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 380:17: -> ^( COLUMN_REF columnName qualifier ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:381:25: ^( COLUMN_REF columnName qualifier ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:381:25: ^( COLUMN_REF columnName qualifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); @@ -1363,7 +1363,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:382:11: identifier + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:382:11: identifier { root_0 = (Object)adaptor.nil(); @@ -1377,7 +1377,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:383:11: literalOrParameterName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:383:11: literalOrParameterName { root_0 = (Object)adaptor.nil(); @@ -1417,7 +1417,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "qualifier" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:386:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:386:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ); public final CMISParser.qualifier_return qualifier() throws RecognitionException { CMISParser.qualifier_return retval = new CMISParser.qualifier_return(); retval.start = input.LT(1); @@ -1432,12 +1432,12 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_correlationName=new RewriteRuleSubtreeStream(adaptor,"rule correlationName"); RewriteRuleSubtreeStream stream_tableName=new RewriteRuleSubtreeStream(adaptor,"rule tableName"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:387:9: ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:387:9: ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ) int alt14=2; alt14 = dfa14.predict(input); switch (alt14) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:9: ( tableName )=> tableName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:9: ( tableName )=> tableName { pushFollow(FOLLOW_tableName_in_qualifier1328); tableName32=tableName(); @@ -1469,7 +1469,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:390:11: correlationName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:390:11: correlationName { pushFollow(FOLLOW_correlationName_in_qualifier1360); correlationName33=correlationName(); @@ -1527,7 +1527,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "fromClause" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:394:1: fromClause : FROM tableReference -> tableReference ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:394:1: fromClause : FROM tableReference -> tableReference ; public final CMISParser.fromClause_return fromClause() throws RecognitionException { CMISParser.fromClause_return retval = new CMISParser.fromClause_return(); retval.start = input.LT(1); @@ -1545,8 +1545,8 @@ public class CMISParser extends Parser { paraphrases.push("in fromClause"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:403:9: ( FROM tableReference -> tableReference ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:404:9: FROM tableReference + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:403:9: ( FROM tableReference -> tableReference ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:404:9: FROM tableReference { FROM34=(Token)match(input,FROM,FOLLOW_FROM_in_fromClause1423); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FROM.add(FROM34); @@ -1610,7 +1610,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "tableReference" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:408:1: tableReference : singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:408:1: tableReference : singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ; public final CMISParser.tableReference_return tableReference() throws RecognitionException { CMISParser.tableReference_return retval = new CMISParser.tableReference_return(); retval.start = input.LT(1); @@ -1628,8 +1628,8 @@ public class CMISParser extends Parser { paraphrases.push("in tableReference"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:417:9: ( singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:9: singleTable ( joinedTable )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:417:9: ( singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:9: singleTable ( joinedTable )* { pushFollow(FOLLOW_singleTable_in_tableReference1488); singleTable36=singleTable(); @@ -1637,7 +1637,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_singleTable.add(singleTable36.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:21: ( joinedTable )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:21: ( joinedTable )* loop15: do { int alt15=2; @@ -1650,7 +1650,7 @@ public class CMISParser extends Parser { switch (alt15) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:21: joinedTable + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:21: joinedTable { pushFollow(FOLLOW_joinedTable_in_tableReference1490); joinedTable37=joinedTable(); @@ -1683,13 +1683,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 419:17: -> ^( SOURCE singleTable ( joinedTable )* ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:420:25: ^( SOURCE singleTable ( joinedTable )* ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:420:25: ^( SOURCE singleTable ( joinedTable )* ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); adaptor.addChild(root_1, stream_singleTable.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:420:46: ( joinedTable )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:420:46: ( joinedTable )* while ( stream_joinedTable.hasNext() ) { adaptor.addChild(root_1, stream_joinedTable.nextTree()); @@ -1734,7 +1734,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "singleTable" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:427:1: singleTable : ( simpleTable -> simpleTable | complexTable -> ^( TABLE complexTable ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:427:1: singleTable : ( simpleTable -> simpleTable | complexTable -> ^( TABLE complexTable ) ); public final CMISParser.singleTable_return singleTable() throws RecognitionException { CMISParser.singleTable_return retval = new CMISParser.singleTable_return(); retval.start = input.LT(1); @@ -1752,7 +1752,7 @@ public class CMISParser extends Parser { paraphrases.push("in singleTable"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:436:9: ( simpleTable -> simpleTable | complexTable -> ^( TABLE complexTable ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:436:9: ( simpleTable -> simpleTable | complexTable -> ^( TABLE complexTable ) ) int alt16=2; int LA16_0 = input.LA(1); @@ -1774,7 +1774,7 @@ public class CMISParser extends Parser { } switch (alt16) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:437:9: simpleTable + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:437:9: simpleTable { pushFollow(FOLLOW_simpleTable_in_singleTable1588); simpleTable38=simpleTable(); @@ -1806,7 +1806,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:439:11: complexTable + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:439:11: complexTable { pushFollow(FOLLOW_complexTable_in_singleTable1620); complexTable39=complexTable(); @@ -1830,7 +1830,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 440:17: -> ^( TABLE complexTable ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:441:25: ^( TABLE complexTable ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:441:25: ^( TABLE complexTable ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE, "TABLE"), root_1); @@ -1877,7 +1877,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "simpleTable" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:444:1: simpleTable : tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:444:1: simpleTable : tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) ; public final CMISParser.simpleTable_return simpleTable() throws RecognitionException { CMISParser.simpleTable_return retval = new CMISParser.simpleTable_return(); retval.start = input.LT(1); @@ -1898,8 +1898,8 @@ public class CMISParser extends Parser { paraphrases.push("in simpleTable"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:453:9: ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:9: tableName ( ( AS )? correlationName )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:453:9: ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:9: tableName ( ( AS )? correlationName )? { pushFollow(FOLLOW_tableName_in_simpleTable1711); tableName40=tableName(); @@ -1907,14 +1907,14 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_tableName.add(tableName40.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:19: ( ( AS )? correlationName )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:19: ( ( AS )? correlationName )? int alt18=2; alt18 = dfa18.predict(input); switch (alt18) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:20: ( AS )? correlationName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:20: ( AS )? correlationName { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:20: ( AS )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:20: ( AS )? int alt17=2; int LA17_0 = input.LA(1); @@ -1923,7 +1923,7 @@ public class CMISParser extends Parser { } switch (alt17) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:20: AS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:454:20: AS { AS41=(Token)match(input,AS,FOLLOW_AS_in_simpleTable1714); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AS.add(AS41); @@ -1962,13 +1962,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 455:17: -> ^( TABLE_REF tableName ( correlationName )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:456:25: ^( TABLE_REF tableName ( correlationName )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:456:25: ^( TABLE_REF tableName ( correlationName )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE_REF, "TABLE_REF"), root_1); adaptor.addChild(root_1, stream_tableName.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:456:47: ( correlationName )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:456:47: ( correlationName )? if ( stream_correlationName.hasNext() ) { adaptor.addChild(root_1, stream_correlationName.nextTree()); @@ -2013,7 +2013,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "joinedTable" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:459:1: joinedTable : ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:459:1: joinedTable : ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ; public final CMISParser.joinedTable_return joinedTable() throws RecognitionException { CMISParser.joinedTable_return retval = new CMISParser.joinedTable_return(); retval.start = input.LT(1); @@ -2037,10 +2037,10 @@ public class CMISParser extends Parser { paraphrases.push("in joinedTable"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:468:9: ( ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:9: ( joinType )? JOIN tableReference joinSpecification + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:468:9: ( ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:9: ( joinType )? JOIN tableReference joinSpecification { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:9: ( joinType )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:9: ( joinType )? int alt19=2; int LA19_0 = input.LA(1); @@ -2049,7 +2049,7 @@ public class CMISParser extends Parser { } switch (alt19) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:9: joinType + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:9: joinType { pushFollow(FOLLOW_joinType_in_joinedTable1813); joinType43=joinType(); @@ -2081,7 +2081,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: joinSpecification, JOIN, joinType, tableReference + // elements: joinSpecification, tableReference, joinType, JOIN // token labels: // rule labels: retval // token list labels: @@ -2094,13 +2094,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 470:17: -> ^( JOIN tableReference ( joinType )? joinSpecification ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:471:25: ^( JOIN tableReference ( joinType )? joinSpecification ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:471:25: ^( JOIN tableReference ( joinType )? joinSpecification ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_JOIN.nextNode(), root_1); adaptor.addChild(root_1, stream_tableReference.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:471:47: ( joinType )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:471:47: ( joinType )? if ( stream_joinType.hasNext() ) { adaptor.addChild(root_1, stream_joinType.nextTree()); @@ -2146,7 +2146,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "complexTable" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:474:1: complexTable : ( ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN -> ^( SOURCE singleTable ( joinedTable )+ ) | LPAREN complexTable RPAREN -> complexTable ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:474:1: complexTable : ( ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN -> ^( SOURCE singleTable ( joinedTable )+ ) | LPAREN complexTable RPAREN -> complexTable ); public final CMISParser.complexTable_return complexTable() throws RecognitionException { CMISParser.complexTable_return retval = new CMISParser.complexTable_return(); retval.start = input.LT(1); @@ -2177,7 +2177,7 @@ public class CMISParser extends Parser { paraphrases.push("in complexTable"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:483:9: ( ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN -> ^( SOURCE singleTable ( joinedTable )+ ) | LPAREN complexTable RPAREN -> complexTable ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:483:9: ( ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN -> ^( SOURCE singleTable ( joinedTable )+ ) | LPAREN complexTable RPAREN -> complexTable ) int alt21=2; int LA21_0 = input.LA(1); @@ -2207,7 +2207,7 @@ public class CMISParser extends Parser { } switch (alt21) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:9: ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:9: ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN { LPAREN47=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_complexTable1929); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN47); @@ -2218,7 +2218,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_singleTable.add(singleTable48.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:72: ( joinedTable )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:72: ( joinedTable )+ int cnt20=0; loop20: do { @@ -2232,7 +2232,7 @@ public class CMISParser extends Parser { switch (alt20) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:72: joinedTable + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:72: joinedTable { pushFollow(FOLLOW_joinedTable_in_complexTable1933); joinedTable49=joinedTable(); @@ -2260,7 +2260,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: joinedTable, singleTable + // elements: singleTable, joinedTable // token labels: // rule labels: retval // token list labels: @@ -2273,7 +2273,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 485:17: -> ^( SOURCE singleTable ( joinedTable )+ ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:486:25: ^( SOURCE singleTable ( joinedTable )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:486:25: ^( SOURCE singleTable ( joinedTable )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); @@ -2297,7 +2297,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:487:11: LPAREN complexTable RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:487:11: LPAREN complexTable RPAREN { LPAREN51=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_complexTable1999); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN51); @@ -2366,7 +2366,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "joinType" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:491:1: joinType : ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:491:1: joinType : ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ); public final CMISParser.joinType_return joinType() throws RecognitionException { CMISParser.joinType_return retval = new CMISParser.joinType_return(); retval.start = input.LT(1); @@ -2385,7 +2385,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_LEFT=new RewriteRuleTokenStream(adaptor,"token LEFT"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:492:9: ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:492:9: ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ) int alt23=2; int LA23_0 = input.LA(1); @@ -2404,7 +2404,7 @@ public class CMISParser extends Parser { } switch (alt23) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:493:9: INNER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:493:9: INNER { INNER54=(Token)match(input,INNER,FOLLOW_INNER_in_joinType2056); if (state.failed) return retval; if ( state.backtracking==0 ) stream_INNER.add(INNER54); @@ -2433,12 +2433,12 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:11: LEFT ( OUTER )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:11: LEFT ( OUTER )? { LEFT55=(Token)match(input,LEFT,FOLLOW_LEFT_in_joinType2088); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LEFT.add(LEFT55); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:16: ( OUTER )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:16: ( OUTER )? int alt22=2; int LA22_0 = input.LA(1); @@ -2447,7 +2447,7 @@ public class CMISParser extends Parser { } switch (alt22) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:16: OUTER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:16: OUTER { OUTER56=(Token)match(input,OUTER,FOLLOW_OUTER_in_joinType2090); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OUTER.add(OUTER56); @@ -2508,7 +2508,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "joinSpecification" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:499:1: joinSpecification : ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:499:1: joinSpecification : ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ; public final CMISParser.joinSpecification_return joinSpecification() throws RecognitionException { CMISParser.joinSpecification_return retval = new CMISParser.joinSpecification_return(); retval.start = input.LT(1); @@ -2531,8 +2531,8 @@ public class CMISParser extends Parser { paraphrases.push("in join condition"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:508:9: ( ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:509:9: ON lhs= columnReference EQUALS rhs= columnReference + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:508:9: ( ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:509:9: ON lhs= columnReference EQUALS rhs= columnReference { ON57=(Token)match(input,ON,FOLLOW_ON_in_joinSpecification2154); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ON.add(ON57); @@ -2555,7 +2555,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: ON, rhs, lhs, EQUALS + // elements: rhs, ON, EQUALS, lhs // token labels: // rule labels: retval, rhs, lhs // token list labels: @@ -2570,7 +2570,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 510:17: -> ^( ON $lhs EQUALS $rhs) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:511:25: ^( ON $lhs EQUALS $rhs) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:511:25: ^( ON $lhs EQUALS $rhs) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ON.nextNode(), root_1); @@ -2617,7 +2617,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "whereClause" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:1: whereClause : WHERE searchOrCondition -> searchOrCondition ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:1: whereClause : WHERE searchOrCondition -> searchOrCondition ; public final CMISParser.whereClause_return whereClause() throws RecognitionException { CMISParser.whereClause_return retval = new CMISParser.whereClause_return(); retval.start = input.LT(1); @@ -2635,8 +2635,8 @@ public class CMISParser extends Parser { paraphrases.push("in where"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:527:9: ( WHERE searchOrCondition -> searchOrCondition ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:528:9: WHERE searchOrCondition + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:527:9: ( WHERE searchOrCondition -> searchOrCondition ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:528:9: WHERE searchOrCondition { WHERE59=(Token)match(input,WHERE,FOLLOW_WHERE_in_whereClause2264); if (state.failed) return retval; if ( state.backtracking==0 ) stream_WHERE.add(WHERE59); @@ -2700,7 +2700,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchOrCondition" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:532:1: searchOrCondition : searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:532:1: searchOrCondition : searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ; public final CMISParser.searchOrCondition_return searchOrCondition() throws RecognitionException { CMISParser.searchOrCondition_return retval = new CMISParser.searchOrCondition_return(); retval.start = input.LT(1); @@ -2717,8 +2717,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR"); RewriteRuleSubtreeStream stream_searchAndCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchAndCondition"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:536:9: ( searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:537:9: searchAndCondition ( OR searchAndCondition )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:536:9: ( searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:537:9: searchAndCondition ( OR searchAndCondition )* { pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition2321); searchAndCondition61=searchAndCondition(); @@ -2726,7 +2726,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchAndCondition.add(searchAndCondition61.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:537:28: ( OR searchAndCondition )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:537:28: ( OR searchAndCondition )* loop24: do { int alt24=2; @@ -2739,7 +2739,7 @@ public class CMISParser extends Parser { switch (alt24) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:537:29: OR searchAndCondition + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:537:29: OR searchAndCondition { OR62=(Token)match(input,OR,FOLLOW_OR_in_searchOrCondition2324); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OR.add(OR62); @@ -2775,7 +2775,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 538:17: -> ^( DISJUNCTION ( searchAndCondition )+ ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:539:25: ^( DISJUNCTION ( searchAndCondition )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:539:25: ^( DISJUNCTION ( searchAndCondition )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); @@ -2822,7 +2822,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchAndCondition" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:542:1: searchAndCondition : searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:542:1: searchAndCondition : searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ; public final CMISParser.searchAndCondition_return searchAndCondition() throws RecognitionException { CMISParser.searchAndCondition_return retval = new CMISParser.searchAndCondition_return(); retval.start = input.LT(1); @@ -2839,8 +2839,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND"); RewriteRuleSubtreeStream stream_searchNotCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchNotCondition"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:546:9: ( searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:9: searchNotCondition ( AND searchNotCondition )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:546:9: ( searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:9: searchNotCondition ( AND searchNotCondition )* { pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition2412); searchNotCondition64=searchNotCondition(); @@ -2848,7 +2848,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchNotCondition.add(searchNotCondition64.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:28: ( AND searchNotCondition )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:28: ( AND searchNotCondition )* loop25: do { int alt25=2; @@ -2861,7 +2861,7 @@ public class CMISParser extends Parser { switch (alt25) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:29: AND searchNotCondition + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:29: AND searchNotCondition { AND65=(Token)match(input,AND,FOLLOW_AND_in_searchAndCondition2415); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AND.add(AND65); @@ -2897,7 +2897,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 548:17: -> ^( CONJUNCTION ( searchNotCondition )+ ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:549:25: ^( CONJUNCTION ( searchNotCondition )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:549:25: ^( CONJUNCTION ( searchNotCondition )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -2944,7 +2944,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchNotCondition" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:552:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:552:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ); public final CMISParser.searchNotCondition_return searchNotCondition() throws RecognitionException { CMISParser.searchNotCondition_return retval = new CMISParser.searchNotCondition_return(); retval.start = input.LT(1); @@ -2961,12 +2961,12 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT"); RewriteRuleSubtreeStream stream_searchTest=new RewriteRuleSubtreeStream(adaptor,"rule searchTest"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:9: ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:9: ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ) int alt26=2; alt26 = dfa26.predict(input); switch (alt26) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:554:9: NOT searchTest + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:554:9: NOT searchTest { NOT67=(Token)match(input,NOT,FOLLOW_NOT_in_searchNotCondition2501); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT67); @@ -2993,7 +2993,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 555:17: -> ^( NEGATION searchTest ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:556:25: ^( NEGATION searchTest ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:556:25: ^( NEGATION searchTest ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NEGATION, "NEGATION"), root_1); @@ -3009,7 +3009,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:557:11: searchTest + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:557:11: searchTest { pushFollow(FOLLOW_searchTest_in_searchNotCondition2563); searchTest69=searchTest(); @@ -3067,7 +3067,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchTest" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:561:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:561:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ); public final CMISParser.searchTest_return searchTest() throws RecognitionException { CMISParser.searchTest_return retval = new CMISParser.searchTest_return(); retval.start = input.LT(1); @@ -3088,12 +3088,12 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_predicate=new RewriteRuleSubtreeStream(adaptor,"rule predicate"); RewriteRuleSubtreeStream stream_searchOrCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchOrCondition"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:562:9: ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:562:9: ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ) int alt27=2; alt27 = dfa27.predict(input); switch (alt27) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:563:9: predicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:563:9: predicate { pushFollow(FOLLOW_predicate_in_searchTest2616); predicate70=predicate(); @@ -3125,7 +3125,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:565:11: LPAREN searchOrCondition RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:565:11: LPAREN searchOrCondition RPAREN { LPAREN71=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_searchTest2648); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN71); @@ -3189,7 +3189,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "predicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:569:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:569:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ); public final CMISParser.predicate_return predicate() throws RecognitionException { CMISParser.predicate_return retval = new CMISParser.predicate_return(); retval.start = input.LT(1); @@ -3215,12 +3215,12 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:570:9: ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:570:9: ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ) int alt28=8; alt28 = dfa28.predict(input); switch (alt28) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:571:9: comparisonPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:571:9: comparisonPredicate { root_0 = (Object)adaptor.nil(); @@ -3234,7 +3234,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:572:11: inPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:572:11: inPredicate { root_0 = (Object)adaptor.nil(); @@ -3248,7 +3248,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:573:11: likePredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:573:11: likePredicate { root_0 = (Object)adaptor.nil(); @@ -3262,7 +3262,7 @@ public class CMISParser extends Parser { } break; case 4 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:574:11: nullPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:574:11: nullPredicate { root_0 = (Object)adaptor.nil(); @@ -3276,7 +3276,7 @@ public class CMISParser extends Parser { } break; case 5 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:575:11: quantifiedComparisonPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:575:11: quantifiedComparisonPredicate { root_0 = (Object)adaptor.nil(); @@ -3290,7 +3290,7 @@ public class CMISParser extends Parser { } break; case 6 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:576:11: quantifiedInPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:576:11: quantifiedInPredicate { root_0 = (Object)adaptor.nil(); @@ -3304,7 +3304,7 @@ public class CMISParser extends Parser { } break; case 7 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:577:11: textSearchPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:577:11: textSearchPredicate { root_0 = (Object)adaptor.nil(); @@ -3318,7 +3318,7 @@ public class CMISParser extends Parser { } break; case 8 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:578:11: folderPredicate + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:578:11: folderPredicate { root_0 = (Object)adaptor.nil(); @@ -3358,7 +3358,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "comparisonPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:581:1: comparisonPredicate : valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:581:1: comparisonPredicate : valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) ; public final CMISParser.comparisonPredicate_return comparisonPredicate() throws RecognitionException { CMISParser.comparisonPredicate_return retval = new CMISParser.comparisonPredicate_return(); retval.start = input.LT(1); @@ -3376,8 +3376,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_compOp=new RewriteRuleSubtreeStream(adaptor,"rule compOp"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:582:9: ( valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:583:9: valueExpression compOp literalOrParameterName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:582:9: ( valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:583:9: valueExpression compOp literalOrParameterName { pushFollow(FOLLOW_valueExpression_in_comparisonPredicate2822); valueExpression82=valueExpression(); @@ -3400,7 +3400,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: compOp, valueExpression, literalOrParameterName + // elements: compOp, literalOrParameterName, valueExpression // token labels: // rule labels: retval // token list labels: @@ -3413,7 +3413,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 584:17: -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:585:25: ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:585:25: ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_COMPARISON, "PRED_COMPARISON"), root_1); @@ -3456,7 +3456,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "compOp" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:588:1: compOp : ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:588:1: compOp : ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ); public final CMISParser.compOp_return compOp() throws RecognitionException { CMISParser.compOp_return retval = new CMISParser.compOp_return(); retval.start = input.LT(1); @@ -3468,8 +3468,8 @@ public class CMISParser extends Parser { Object set85_tree=null; try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:589:9: ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:589:9: ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { root_0 = (Object)adaptor.nil(); @@ -3513,7 +3513,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "literalOrParameterName" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:598:1: literalOrParameterName : ( literal | {...}? => parameterName ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:598:1: literalOrParameterName : ( literal | {...}? => parameterName ); public final CMISParser.literalOrParameterName_return literalOrParameterName() throws RecognitionException { CMISParser.literalOrParameterName_return retval = new CMISParser.literalOrParameterName_return(); retval.start = input.LT(1); @@ -3527,7 +3527,7 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:599:9: ( literal | {...}? => parameterName ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:599:9: ( literal | {...}? => parameterName ) int alt29=2; int LA29_0 = input.LA(1); @@ -3561,7 +3561,7 @@ public class CMISParser extends Parser { } switch (alt29) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:600:9: literal + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:600:9: literal { root_0 = (Object)adaptor.nil(); @@ -3575,7 +3575,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:601:11: {...}? => parameterName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:601:11: {...}? => parameterName { root_0 = (Object)adaptor.nil(); @@ -3619,7 +3619,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "literal" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:604:1: literal : ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:604:1: literal : ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ); public final CMISParser.literal_return literal() throws RecognitionException { CMISParser.literal_return retval = new CMISParser.literal_return(); retval.start = input.LT(1); @@ -3637,7 +3637,7 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:605:9: ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:605:9: ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ) int alt30=4; switch ( input.LA(1) ) { case FLOATING_POINT_LITERAL: @@ -3672,7 +3672,7 @@ public class CMISParser extends Parser { switch (alt30) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:606:9: signedNumericLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:606:9: signedNumericLiteral { root_0 = (Object)adaptor.nil(); @@ -3686,7 +3686,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:607:11: characterStringLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:607:11: characterStringLiteral { root_0 = (Object)adaptor.nil(); @@ -3700,7 +3700,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:608:11: booleanLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:608:11: booleanLiteral { root_0 = (Object)adaptor.nil(); @@ -3714,7 +3714,7 @@ public class CMISParser extends Parser { } break; case 4 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:609:11: datetimeLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:609:11: datetimeLiteral { root_0 = (Object)adaptor.nil(); @@ -3754,7 +3754,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "inPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:612:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:612:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) ; public final CMISParser.inPredicate_return inPredicate() throws RecognitionException { CMISParser.inPredicate_return retval = new CMISParser.inPredicate_return(); retval.start = input.LT(1); @@ -3781,8 +3781,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:613:9: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:9: columnReference ( NOT )? IN LPAREN inValueList RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:613:9: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:9: columnReference ( NOT )? IN LPAREN inValueList RPAREN { pushFollow(FOLLOW_columnReference_in_inPredicate3123); columnReference92=columnReference(); @@ -3790,7 +3790,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference92.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:25: ( NOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:25: ( NOT )? int alt31=2; int LA31_0 = input.LA(1); @@ -3799,7 +3799,7 @@ public class CMISParser extends Parser { } switch (alt31) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:25: NOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:25: NOT { NOT93=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate3125); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT93); @@ -3841,7 +3841,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 615:17: -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:616:25: ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:616:25: ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_IN, "PRED_IN"), root_1); @@ -3849,7 +3849,7 @@ public class CMISParser extends Parser { adaptor.addChild(root_1, (Object)adaptor.create(SINGLE_VALUED_PROPERTY, "SINGLE_VALUED_PROPERTY")); adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_inValueList.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:616:86: ( NOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:616:86: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -3889,7 +3889,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "inValueList" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:619:1: inValueList : literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:619:1: inValueList : literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ; public final CMISParser.inValueList_return inValueList() throws RecognitionException { CMISParser.inValueList_return retval = new CMISParser.inValueList_return(); retval.start = input.LT(1); @@ -3906,8 +3906,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:620:9: ( literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:9: literalOrParameterName ( COMMA literalOrParameterName )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:620:9: ( literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:9: literalOrParameterName ( COMMA literalOrParameterName )* { pushFollow(FOLLOW_literalOrParameterName_in_inValueList3222); literalOrParameterName98=literalOrParameterName(); @@ -3915,7 +3915,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName98.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:32: ( COMMA literalOrParameterName )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:32: ( COMMA literalOrParameterName )* loop32: do { int alt32=2; @@ -3928,7 +3928,7 @@ public class CMISParser extends Parser { switch (alt32) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:33: COMMA literalOrParameterName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:33: COMMA literalOrParameterName { COMMA99=(Token)match(input,COMMA,FOLLOW_COMMA_in_inValueList3225); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA99); @@ -3964,7 +3964,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 622:17: -> ^( LIST ( literalOrParameterName )+ ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:623:25: ^( LIST ( literalOrParameterName )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:623:25: ^( LIST ( literalOrParameterName )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(LIST, "LIST"), root_1); @@ -4011,7 +4011,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "likePredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:626:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:626:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ; public final CMISParser.likePredicate_return likePredicate() throws RecognitionException { CMISParser.likePredicate_return retval = new CMISParser.likePredicate_return(); retval.start = input.LT(1); @@ -4032,8 +4032,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:627:9: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:9: columnReference ( NOT )? LIKE characterStringLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:627:9: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:9: columnReference ( NOT )? LIKE characterStringLiteral { pushFollow(FOLLOW_columnReference_in_likePredicate3311); columnReference101=columnReference(); @@ -4041,7 +4041,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference101.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:25: ( NOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:25: ( NOT )? int alt33=2; int LA33_0 = input.LA(1); @@ -4050,7 +4050,7 @@ public class CMISParser extends Parser { } switch (alt33) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:25: NOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:25: NOT { NOT102=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate3313); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT102); @@ -4073,7 +4073,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: characterStringLiteral, NOT, columnReference + // elements: NOT, columnReference, characterStringLiteral // token labels: // rule labels: retval // token list labels: @@ -4086,14 +4086,14 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 629:17: -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:630:25: ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:630:25: ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_LIKE, "PRED_LIKE"), root_1); adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_characterStringLiteral.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:630:76: ( NOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:630:76: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4133,7 +4133,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "nullPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:633:1: nullPredicate : ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:633:1: nullPredicate : ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) ); public final CMISParser.nullPredicate_return nullPredicate() throws RecognitionException { CMISParser.nullPredicate_return retval = new CMISParser.nullPredicate_return(); retval.start = input.LT(1); @@ -4160,12 +4160,12 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_NULL=new RewriteRuleTokenStream(adaptor,"token NULL"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:634:9: ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:634:9: ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) ) int alt34=2; alt34 = dfa34.predict(input); switch (alt34) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:635:9: columnReference IS NULL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:635:9: columnReference IS NULL { pushFollow(FOLLOW_columnReference_in_nullPredicate3404); columnReference105=columnReference(); @@ -4195,7 +4195,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 636:17: -> ^( PRED_EXISTS columnReference NOT ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:637:25: ^( PRED_EXISTS columnReference NOT ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:637:25: ^( PRED_EXISTS columnReference NOT ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_EXISTS, "PRED_EXISTS"), root_1); @@ -4212,7 +4212,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:638:11: columnReference IS NOT NULL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:638:11: columnReference IS NOT NULL { pushFollow(FOLLOW_columnReference_in_nullPredicate3470); columnReference108=columnReference(); @@ -4245,7 +4245,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 639:17: -> ^( PRED_EXISTS columnReference ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:640:25: ^( PRED_EXISTS columnReference ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:640:25: ^( PRED_EXISTS columnReference ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_EXISTS, "PRED_EXISTS"), root_1); @@ -4287,7 +4287,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "quantifiedComparisonPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:643:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY columnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:643:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY columnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) ; public final CMISParser.quantifiedComparisonPredicate_return quantifiedComparisonPredicate() throws RecognitionException { CMISParser.quantifiedComparisonPredicate_return retval = new CMISParser.quantifiedComparisonPredicate_return(); retval.start = input.LT(1); @@ -4308,8 +4308,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_compOp=new RewriteRuleSubtreeStream(adaptor,"rule compOp"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:644:9: ( literalOrParameterName compOp ANY columnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:645:9: literalOrParameterName compOp ANY columnReference + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:644:9: ( literalOrParameterName compOp ANY columnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:645:9: literalOrParameterName compOp ANY columnReference { pushFollow(FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate3557); literalOrParameterName112=literalOrParameterName(); @@ -4335,7 +4335,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: compOp, literalOrParameterName, ANY, columnReference + // elements: columnReference, compOp, ANY, literalOrParameterName // token labels: // rule labels: retval // token list labels: @@ -4348,7 +4348,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 646:17: -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:647:25: ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:647:25: ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_COMPARISON, "PRED_COMPARISON"), root_1); @@ -4391,7 +4391,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "quantifiedInPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:650:1: quantifiedInPredicate : ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:650:1: quantifiedInPredicate : ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; public final CMISParser.quantifiedInPredicate_return quantifiedInPredicate() throws RecognitionException { CMISParser.quantifiedInPredicate_return retval = new CMISParser.quantifiedInPredicate_return(); retval.start = input.LT(1); @@ -4421,8 +4421,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:651:9: ( ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:9: ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:651:9: ( ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:9: ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN { ANY116=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedInPredicate3650); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ANY.add(ANY116); @@ -4433,7 +4433,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference117.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:29: ( NOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:29: ( NOT )? int alt35=2; int LA35_0 = input.LA(1); @@ -4442,7 +4442,7 @@ public class CMISParser extends Parser { } switch (alt35) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:29: NOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:29: NOT { NOT118=(Token)match(input,NOT,FOLLOW_NOT_in_quantifiedInPredicate3654); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT118); @@ -4471,7 +4471,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: NOT, columnReference, ANY, inValueList + // elements: NOT, inValueList, ANY, columnReference // token labels: // rule labels: retval // token list labels: @@ -4484,7 +4484,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 653:17: -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:654:25: ^( PRED_IN ANY columnReference inValueList ( NOT )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:654:25: ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_IN, "PRED_IN"), root_1); @@ -4492,7 +4492,7 @@ public class CMISParser extends Parser { adaptor.addChild(root_1, stream_ANY.nextNode()); adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_inValueList.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:654:67: ( NOT )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:654:67: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4532,7 +4532,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "textSearchPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:657:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:657:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; public final CMISParser.textSearchPredicate_return textSearchPredicate() throws RecognitionException { CMISParser.textSearchPredicate_return retval = new CMISParser.textSearchPredicate_return(); retval.start = input.LT(1); @@ -4559,8 +4559,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_textSearchExpression=new RewriteRuleSubtreeStream(adaptor,"rule textSearchExpression"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:658:9: ( CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:9: CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:658:9: ( CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:9: CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN { CONTAINS123=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_textSearchPredicate3751); if (state.failed) return retval; if ( state.backtracking==0 ) stream_CONTAINS.add(CONTAINS123); @@ -4568,7 +4568,7 @@ public class CMISParser extends Parser { LPAREN124=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_textSearchPredicate3753); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN124); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:25: ( qualifier COMMA )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:25: ( qualifier COMMA )? int alt36=2; int LA36_0 = input.LA(1); @@ -4580,7 +4580,7 @@ public class CMISParser extends Parser { } switch (alt36) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:26: qualifier COMMA + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:26: qualifier COMMA { pushFollow(FOLLOW_qualifier_in_textSearchPredicate3756); qualifier125=qualifier(); @@ -4622,13 +4622,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 660:17: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:661:25: ^( PRED_FTS textSearchExpression ( qualifier )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:661:25: ^( PRED_FTS textSearchExpression ( qualifier )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_FTS, "PRED_FTS"), root_1); adaptor.addChild(root_1, stream_textSearchExpression.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:661:57: ( qualifier )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:661:57: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -4668,7 +4668,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "folderPredicate" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:664:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:664:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); public final CMISParser.folderPredicate_return folderPredicate() throws RecognitionException { CMISParser.folderPredicate_return retval = new CMISParser.folderPredicate_return(); retval.start = input.LT(1); @@ -4688,7 +4688,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_IN_FOLDER=new RewriteRuleTokenStream(adaptor,"token IN_FOLDER"); RewriteRuleSubtreeStream stream_folderPredicateArgs=new RewriteRuleSubtreeStream(adaptor,"rule folderPredicateArgs"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:665:9: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:665:9: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) int alt37=2; int LA37_0 = input.LA(1); @@ -4707,7 +4707,7 @@ public class CMISParser extends Parser { } switch (alt37) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:666:9: IN_FOLDER folderPredicateArgs + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:666:9: IN_FOLDER folderPredicateArgs { IN_FOLDER129=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate3848); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN_FOLDER.add(IN_FOLDER129); @@ -4734,7 +4734,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 667:17: -> ^( PRED_CHILD folderPredicateArgs ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:668:25: ^( PRED_CHILD folderPredicateArgs ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:668:25: ^( PRED_CHILD folderPredicateArgs ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_CHILD, "PRED_CHILD"), root_1); @@ -4750,7 +4750,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:669:11: IN_TREE folderPredicateArgs + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:669:11: IN_TREE folderPredicateArgs { IN_TREE131=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate3910); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN_TREE.add(IN_TREE131); @@ -4777,7 +4777,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 670:17: -> ^( PRED_DESCENDANT folderPredicateArgs ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:671:25: ^( PRED_DESCENDANT folderPredicateArgs ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:671:25: ^( PRED_DESCENDANT folderPredicateArgs ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_DESCENDANT, "PRED_DESCENDANT"), root_1); @@ -4819,7 +4819,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "folderPredicateArgs" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:674:1: folderPredicateArgs : LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:674:1: folderPredicateArgs : LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ; public final CMISParser.folderPredicateArgs_return folderPredicateArgs() throws RecognitionException { CMISParser.folderPredicateArgs_return retval = new CMISParser.folderPredicateArgs_return(); retval.start = input.LT(1); @@ -4843,13 +4843,13 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_folderId=new RewriteRuleSubtreeStream(adaptor,"rule folderId"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:675:9: ( LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:9: LPAREN ( qualifier COMMA )? folderId RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:675:9: ( LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:9: LPAREN ( qualifier COMMA )? folderId RPAREN { LPAREN133=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs3993); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN133); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:16: ( qualifier COMMA )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:16: ( qualifier COMMA )? int alt38=2; int LA38_0 = input.LA(1); @@ -4861,7 +4861,7 @@ public class CMISParser extends Parser { } switch (alt38) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:17: qualifier COMMA + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:17: qualifier COMMA { pushFollow(FOLLOW_qualifier_in_folderPredicateArgs3996); qualifier134=qualifier(); @@ -4904,7 +4904,7 @@ public class CMISParser extends Parser { // 677:17: -> folderId ( qualifier )? { adaptor.addChild(root_0, stream_folderId.nextTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:677:29: ( qualifier )? + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:677:29: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_0, stream_qualifier.nextTree()); @@ -4941,7 +4941,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "orderByClause" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:680:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:680:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; public final CMISParser.orderByClause_return orderByClause() throws RecognitionException { CMISParser.orderByClause_return retval = new CMISParser.orderByClause_return(); retval.start = input.LT(1); @@ -4967,8 +4967,8 @@ public class CMISParser extends Parser { paraphrases.push("in order by"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:689:9: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:9: ORDER BY sortSpecification ( COMMA sortSpecification )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:689:9: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:9: ORDER BY sortSpecification ( COMMA sortSpecification )* { ORDER138=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause4070); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ORDER.add(ORDER138); @@ -4982,7 +4982,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification140.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:36: ( COMMA sortSpecification )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:36: ( COMMA sortSpecification )* loop39: do { int alt39=2; @@ -4995,7 +4995,7 @@ public class CMISParser extends Parser { switch (alt39) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:37: COMMA sortSpecification + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:37: COMMA sortSpecification { COMMA141=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause4077); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA141); @@ -5018,7 +5018,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: sortSpecification, ORDER + // elements: ORDER, sortSpecification // token labels: // rule labels: retval // token list labels: @@ -5031,7 +5031,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 691:17: -> ^( ORDER ( sortSpecification )+ ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:692:25: ^( ORDER ( sortSpecification )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:692:25: ^( ORDER ( sortSpecification )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ORDER.nextNode(), root_1); @@ -5083,7 +5083,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "sortSpecification" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:695:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:695:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ); public final CMISParser.sortSpecification_return sortSpecification() throws RecognitionException { CMISParser.sortSpecification_return retval = new CMISParser.sortSpecification_return(); retval.start = input.LT(1); @@ -5101,12 +5101,12 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DESC=new RewriteRuleTokenStream(adaptor,"token DESC"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:9: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:9: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) int alt41=2; alt41 = dfa41.predict(input); switch (alt41) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:697:9: columnReference + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:697:9: columnReference { pushFollow(FOLLOW_columnReference_in_sortSpecification4163); columnReference143=columnReference(); @@ -5130,7 +5130,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 698:17: -> ^( SORT_SPECIFICATION columnReference ASC ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:699:25: ^( SORT_SPECIFICATION columnReference ASC ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:699:25: ^( SORT_SPECIFICATION columnReference ASC ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); @@ -5147,7 +5147,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:700:11: columnReference (by= ASC | by= DESC ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:700:11: columnReference (by= ASC | by= DESC ) { pushFollow(FOLLOW_columnReference_in_sortSpecification4225); columnReference144=columnReference(); @@ -5155,7 +5155,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference144.getTree()); - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:701:9: (by= ASC | by= DESC ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:701:9: (by= ASC | by= DESC ) int alt40=2; int LA40_0 = input.LA(1); @@ -5174,7 +5174,7 @@ public class CMISParser extends Parser { } switch (alt40) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:702:17: by= ASC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:702:17: by= ASC { by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification4255); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ASC.add(by); @@ -5183,7 +5183,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:703:19: by= DESC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:703:19: by= DESC { by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification4277); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DESC.add(by); @@ -5211,7 +5211,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 705:17: -> ^( SORT_SPECIFICATION columnReference $by) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:706:25: ^( SORT_SPECIFICATION columnReference $by) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:706:25: ^( SORT_SPECIFICATION columnReference $by) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); @@ -5254,7 +5254,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "correlationName" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:709:1: correlationName : identifier ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:709:1: correlationName : identifier ; public final CMISParser.correlationName_return correlationName() throws RecognitionException { CMISParser.correlationName_return retval = new CMISParser.correlationName_return(); retval.start = input.LT(1); @@ -5266,8 +5266,8 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:710:9: ( identifier ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:711:9: identifier + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:710:9: ( identifier ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:711:9: identifier { root_0 = (Object)adaptor.nil(); @@ -5305,7 +5305,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "tableName" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:719:1: tableName : identifier -> identifier ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:719:1: tableName : identifier -> identifier ; public final CMISParser.tableName_return tableName() throws RecognitionException { CMISParser.tableName_return retval = new CMISParser.tableName_return(); retval.start = input.LT(1); @@ -5317,8 +5317,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:720:9: ( identifier -> identifier ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:721:9: identifier + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:720:9: ( identifier -> identifier ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:721:9: identifier { pushFollow(FOLLOW_identifier_in_tableName4407); identifier146=identifier(); @@ -5374,7 +5374,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "columnName" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:725:1: columnName : identifier -> identifier ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:725:1: columnName : identifier -> identifier ; public final CMISParser.columnName_return columnName() throws RecognitionException { CMISParser.columnName_return retval = new CMISParser.columnName_return(); retval.start = input.LT(1); @@ -5386,8 +5386,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:726:9: ( identifier -> identifier ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:727:9: identifier + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:726:9: ( identifier -> identifier ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:727:9: identifier { pushFollow(FOLLOW_identifier_in_columnName4460); identifier147=identifier(); @@ -5443,7 +5443,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "parameterName" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:731:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:731:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; public final CMISParser.parameterName_return parameterName() throws RecognitionException { CMISParser.parameterName_return retval = new CMISParser.parameterName_return(); retval.start = input.LT(1); @@ -5458,8 +5458,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:732:9: ( COLON identifier -> ^( PARAMETER identifier ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:733:9: COLON identifier + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:732:9: ( COLON identifier -> ^( PARAMETER identifier ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:733:9: COLON identifier { COLON148=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName4513); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COLON.add(COLON148); @@ -5486,7 +5486,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 734:17: -> ^( PARAMETER identifier ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:735:25: ^( PARAMETER identifier ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:735:25: ^( PARAMETER identifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER, "PARAMETER"), root_1); @@ -5526,7 +5526,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "folderId" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:738:1: folderId : characterStringLiteral -> characterStringLiteral ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:738:1: folderId : characterStringLiteral -> characterStringLiteral ; public final CMISParser.folderId_return folderId() throws RecognitionException { CMISParser.folderId_return retval = new CMISParser.folderId_return(); retval.start = input.LT(1); @@ -5538,8 +5538,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:739:9: ( characterStringLiteral -> characterStringLiteral ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:740:9: characterStringLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:739:9: ( characterStringLiteral -> characterStringLiteral ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:740:9: characterStringLiteral { pushFollow(FOLLOW_characterStringLiteral_in_folderId4596); characterStringLiteral150=characterStringLiteral(); @@ -5595,7 +5595,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "textSearchExpression" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:744:1: textSearchExpression : QUOTED_STRING ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:744:1: textSearchExpression : QUOTED_STRING ; public final CMISParser.textSearchExpression_return textSearchExpression() throws RecognitionException { CMISParser.textSearchExpression_return retval = new CMISParser.textSearchExpression_return(); retval.start = input.LT(1); @@ -5607,8 +5607,8 @@ public class CMISParser extends Parser { Object QUOTED_STRING151_tree=null; try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:745:9: ( QUOTED_STRING ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:746:9: QUOTED_STRING + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:745:9: ( QUOTED_STRING ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:746:9: QUOTED_STRING { root_0 = (Object)adaptor.nil(); @@ -5645,7 +5645,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "identifier" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:749:1: identifier : ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:749:1: identifier : ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); public final CMISParser.identifier_return identifier() throws RecognitionException { CMISParser.identifier_return retval = new CMISParser.identifier_return(); retval.start = input.LT(1); @@ -5665,7 +5665,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DOUBLE_QUOTE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_QUOTE"); RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:750:9: ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:750:9: ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) int alt42=2; int LA42_0 = input.LA(1); @@ -5684,7 +5684,7 @@ public class CMISParser extends Parser { } switch (alt42) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:751:9: ID + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:751:9: ID { ID152=(Token)match(input,ID,FOLLOW_ID_in_identifier4682); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ID.add(ID152); @@ -5713,7 +5713,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:753:11: {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:753:11: {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE { if ( !((strict == false)) ) { if (state.backtracking>0) {state.failed=true; return retval;} @@ -5747,7 +5747,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 754:17: -> ^( keyWordOrId ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:755:25: ^( keyWordOrId ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:755:25: ^( keyWordOrId ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_keyWordOrId.nextNode(), root_1); @@ -5787,7 +5787,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "signedNumericLiteral" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:758:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:758:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); public final CMISParser.signedNumericLiteral_return signedNumericLiteral() throws RecognitionException { CMISParser.signedNumericLiteral_return retval = new CMISParser.signedNumericLiteral_return(); retval.start = input.LT(1); @@ -5802,7 +5802,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_FLOATING_POINT_LITERAL=new RewriteRuleTokenStream(adaptor,"token FLOATING_POINT_LITERAL"); RewriteRuleSubtreeStream stream_integerLiteral=new RewriteRuleSubtreeStream(adaptor,"rule integerLiteral"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:759:9: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:759:9: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) int alt43=2; int LA43_0 = input.LA(1); @@ -5821,7 +5821,7 @@ public class CMISParser extends Parser { } switch (alt43) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:9: FLOATING_POINT_LITERAL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:9: FLOATING_POINT_LITERAL { FLOATING_POINT_LITERAL156=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral4800); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL156); @@ -5842,7 +5842,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 761:17: -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:762:25: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:762:25: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUMERIC_LITERAL, "NUMERIC_LITERAL"), root_1); @@ -5858,7 +5858,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:763:11: integerLiteral + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:763:11: integerLiteral { pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral4860); integerLiteral157=integerLiteral(); @@ -5916,7 +5916,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "integerLiteral" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:767:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:767:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; public final CMISParser.integerLiteral_return integerLiteral() throws RecognitionException { CMISParser.integerLiteral_return retval = new CMISParser.integerLiteral_return(); retval.start = input.LT(1); @@ -5929,8 +5929,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DECIMAL_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_INTEGER_LITERAL"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:768:9: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:769:9: DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:768:9: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:769:9: DECIMAL_INTEGER_LITERAL { DECIMAL_INTEGER_LITERAL158=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral4913); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL158); @@ -5951,7 +5951,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 770:17: -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:771:25: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:771:25: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUMERIC_LITERAL, "NUMERIC_LITERAL"), root_1); @@ -5991,7 +5991,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "booleanLiteral" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:774:1: booleanLiteral : ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:774:1: booleanLiteral : ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ); public final CMISParser.booleanLiteral_return booleanLiteral() throws RecognitionException { CMISParser.booleanLiteral_return retval = new CMISParser.booleanLiteral_return(); retval.start = input.LT(1); @@ -6007,7 +6007,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_TRUE=new RewriteRuleTokenStream(adaptor,"token TRUE"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:775:9: ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:775:9: ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ) int alt44=2; int LA44_0 = input.LA(1); @@ -6026,7 +6026,7 @@ public class CMISParser extends Parser { } switch (alt44) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:776:9: TRUE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:776:9: TRUE { TRUE159=(Token)match(input,TRUE,FOLLOW_TRUE_in_booleanLiteral4994); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TRUE.add(TRUE159); @@ -6047,7 +6047,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 777:17: -> ^( BOOLEAN_LITERAL TRUE ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:778:25: ^( BOOLEAN_LITERAL TRUE ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:778:25: ^( BOOLEAN_LITERAL TRUE ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOOLEAN_LITERAL, "BOOLEAN_LITERAL"), root_1); @@ -6063,7 +6063,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:779:11: FALSE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:779:11: FALSE { FALSE160=(Token)match(input,FALSE,FOLLOW_FALSE_in_booleanLiteral5054); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FALSE.add(FALSE160); @@ -6084,7 +6084,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 780:17: -> ^( BOOLEAN_LITERAL FALSE ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:781:25: ^( BOOLEAN_LITERAL FALSE ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:781:25: ^( BOOLEAN_LITERAL FALSE ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOOLEAN_LITERAL, "BOOLEAN_LITERAL"), root_1); @@ -6126,7 +6126,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "datetimeLiteral" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:784:1: datetimeLiteral : TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:784:1: datetimeLiteral : TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ; public final CMISParser.datetimeLiteral_return datetimeLiteral() throws RecognitionException { CMISParser.datetimeLiteral_return retval = new CMISParser.datetimeLiteral_return(); retval.start = input.LT(1); @@ -6142,8 +6142,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_TIMESTAMP=new RewriteRuleTokenStream(adaptor,"token TIMESTAMP"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:785:9: ( TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:786:9: TIMESTAMP QUOTED_STRING + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:785:9: ( TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:786:9: TIMESTAMP QUOTED_STRING { TIMESTAMP161=(Token)match(input,TIMESTAMP,FOLLOW_TIMESTAMP_in_datetimeLiteral5135); if (state.failed) return retval; if ( state.backtracking==0 ) stream_TIMESTAMP.add(TIMESTAMP161); @@ -6167,7 +6167,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 787:17: -> ^( DATETIME_LITERAL QUOTED_STRING ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:788:25: ^( DATETIME_LITERAL QUOTED_STRING ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:788:25: ^( DATETIME_LITERAL QUOTED_STRING ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DATETIME_LITERAL, "DATETIME_LITERAL"), root_1); @@ -6207,7 +6207,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "characterStringLiteral" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:791:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:791:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; public final CMISParser.characterStringLiteral_return characterStringLiteral() throws RecognitionException { CMISParser.characterStringLiteral_return retval = new CMISParser.characterStringLiteral_return(); retval.start = input.LT(1); @@ -6220,8 +6220,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_QUOTED_STRING=new RewriteRuleTokenStream(adaptor,"token QUOTED_STRING"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:792:9: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:793:9: QUOTED_STRING + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:792:9: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:793:9: QUOTED_STRING { QUOTED_STRING163=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral5218); if (state.failed) return retval; if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING163); @@ -6242,7 +6242,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 794:17: -> ^( STRING_LITERAL QUOTED_STRING ) { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:795:25: ^( STRING_LITERAL QUOTED_STRING ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:795:25: ^( STRING_LITERAL QUOTED_STRING ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRING_LITERAL, "STRING_LITERAL"), root_1); @@ -6282,7 +6282,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "keyWord" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:798:1: keyWord : ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:798:1: keyWord : ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ); public final CMISParser.keyWord_return keyWord() throws RecognitionException { CMISParser.keyWord_return retval = new CMISParser.keyWord_return(); retval.start = input.LT(1); @@ -6348,7 +6348,7 @@ public class CMISParser extends Parser { Object FALSE190_tree=null; try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:799:9: ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:799:9: ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ) int alt45=28; switch ( input.LA(1) ) { case SELECT: @@ -6501,7 +6501,7 @@ public class CMISParser extends Parser { switch (alt45) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:800:9: SELECT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:800:9: SELECT { root_0 = (Object)adaptor.nil(); @@ -6514,7 +6514,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:801:11: AS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:801:11: AS { root_0 = (Object)adaptor.nil(); @@ -6527,7 +6527,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:802:11: FROM + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:802:11: FROM { root_0 = (Object)adaptor.nil(); @@ -6540,7 +6540,7 @@ public class CMISParser extends Parser { } break; case 4 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:803:11: JOIN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:803:11: JOIN { root_0 = (Object)adaptor.nil(); @@ -6553,7 +6553,7 @@ public class CMISParser extends Parser { } break; case 5 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:804:11: INNER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:804:11: INNER { root_0 = (Object)adaptor.nil(); @@ -6566,7 +6566,7 @@ public class CMISParser extends Parser { } break; case 6 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:805:11: LEFT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:805:11: LEFT { root_0 = (Object)adaptor.nil(); @@ -6579,7 +6579,7 @@ public class CMISParser extends Parser { } break; case 7 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:806:11: OUTER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:806:11: OUTER { root_0 = (Object)adaptor.nil(); @@ -6592,7 +6592,7 @@ public class CMISParser extends Parser { } break; case 8 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:807:11: ON + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:807:11: ON { root_0 = (Object)adaptor.nil(); @@ -6605,7 +6605,7 @@ public class CMISParser extends Parser { } break; case 9 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:808:11: WHERE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:808:11: WHERE { root_0 = (Object)adaptor.nil(); @@ -6618,7 +6618,7 @@ public class CMISParser extends Parser { } break; case 10 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:809:11: OR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:809:11: OR { root_0 = (Object)adaptor.nil(); @@ -6631,7 +6631,7 @@ public class CMISParser extends Parser { } break; case 11 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:810:11: AND + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:810:11: AND { root_0 = (Object)adaptor.nil(); @@ -6644,7 +6644,7 @@ public class CMISParser extends Parser { } break; case 12 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:811:11: NOT + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:811:11: NOT { root_0 = (Object)adaptor.nil(); @@ -6657,7 +6657,7 @@ public class CMISParser extends Parser { } break; case 13 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:11: IN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:11: IN { root_0 = (Object)adaptor.nil(); @@ -6670,7 +6670,7 @@ public class CMISParser extends Parser { } break; case 14 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:813:11: LIKE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:813:11: LIKE { root_0 = (Object)adaptor.nil(); @@ -6683,7 +6683,7 @@ public class CMISParser extends Parser { } break; case 15 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:814:11: IS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:814:11: IS { root_0 = (Object)adaptor.nil(); @@ -6696,7 +6696,7 @@ public class CMISParser extends Parser { } break; case 16 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:815:11: NULL + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:815:11: NULL { root_0 = (Object)adaptor.nil(); @@ -6709,7 +6709,7 @@ public class CMISParser extends Parser { } break; case 17 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:816:11: ANY + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:816:11: ANY { root_0 = (Object)adaptor.nil(); @@ -6722,7 +6722,7 @@ public class CMISParser extends Parser { } break; case 18 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:817:11: CONTAINS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:817:11: CONTAINS { root_0 = (Object)adaptor.nil(); @@ -6735,7 +6735,7 @@ public class CMISParser extends Parser { } break; case 19 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:818:11: IN_FOLDER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:818:11: IN_FOLDER { root_0 = (Object)adaptor.nil(); @@ -6748,7 +6748,7 @@ public class CMISParser extends Parser { } break; case 20 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:819:11: IN_TREE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:819:11: IN_TREE { root_0 = (Object)adaptor.nil(); @@ -6761,7 +6761,7 @@ public class CMISParser extends Parser { } break; case 21 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:820:11: ORDER + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:820:11: ORDER { root_0 = (Object)adaptor.nil(); @@ -6774,7 +6774,7 @@ public class CMISParser extends Parser { } break; case 22 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:821:11: BY + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:821:11: BY { root_0 = (Object)adaptor.nil(); @@ -6787,7 +6787,7 @@ public class CMISParser extends Parser { } break; case 23 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:822:11: ASC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:822:11: ASC { root_0 = (Object)adaptor.nil(); @@ -6800,7 +6800,7 @@ public class CMISParser extends Parser { } break; case 24 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:823:11: DESC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:823:11: DESC { root_0 = (Object)adaptor.nil(); @@ -6813,7 +6813,7 @@ public class CMISParser extends Parser { } break; case 25 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:824:11: TIMESTAMP + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:824:11: TIMESTAMP { root_0 = (Object)adaptor.nil(); @@ -6826,7 +6826,7 @@ public class CMISParser extends Parser { } break; case 26 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:825:11: TRUE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:825:11: TRUE { root_0 = (Object)adaptor.nil(); @@ -6839,7 +6839,7 @@ public class CMISParser extends Parser { } break; case 27 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:826:11: FALSE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:826:11: FALSE { root_0 = (Object)adaptor.nil(); @@ -6852,7 +6852,7 @@ public class CMISParser extends Parser { } break; case 28 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:827:11: cmisFunction + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:827:11: cmisFunction { root_0 = (Object)adaptor.nil(); @@ -6892,7 +6892,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "cmisFunction" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:830:1: cmisFunction : SCORE -> SCORE ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:830:1: cmisFunction : SCORE -> SCORE ; public final CMISParser.cmisFunction_return cmisFunction() throws RecognitionException { CMISParser.cmisFunction_return retval = new CMISParser.cmisFunction_return(); retval.start = input.LT(1); @@ -6905,8 +6905,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_SCORE=new RewriteRuleTokenStream(adaptor,"token SCORE"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:831:9: ( SCORE -> SCORE ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:832:9: SCORE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:831:9: ( SCORE -> SCORE ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:832:9: SCORE { SCORE192=(Token)match(input,SCORE,FOLLOW_SCORE_in_cmisFunction5656); if (state.failed) return retval; if ( state.backtracking==0 ) stream_SCORE.add(SCORE192); @@ -6959,7 +6959,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "keyWordOrId" - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:836:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:836:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); public final CMISParser.keyWordOrId_return keyWordOrId() throws RecognitionException { CMISParser.keyWordOrId_return retval = new CMISParser.keyWordOrId_return(); retval.start = input.LT(1); @@ -6974,7 +6974,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); RewriteRuleSubtreeStream stream_keyWord=new RewriteRuleSubtreeStream(adaptor,"rule keyWord"); try { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:837:9: ( keyWord -> keyWord | ID -> ID ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:837:9: ( keyWord -> keyWord | ID -> ID ) int alt46=2; int LA46_0 = input.LA(1); @@ -6993,7 +6993,7 @@ public class CMISParser extends Parser { } switch (alt46) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:838:9: keyWord + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:838:9: keyWord { pushFollow(FOLLOW_keyWord_in_keyWordOrId5709); keyWord193=keyWord(); @@ -7025,7 +7025,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:840:11: ID + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:840:11: ID { ID194=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId5741); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ID.add(ID194); @@ -7076,8 +7076,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred1_CMIS public final void synpred1_CMIS_fragment() throws RecognitionException { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:9: ( tableName ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:10: tableName + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:9: ( tableName ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:10: tableName { pushFollow(FOLLOW_tableName_in_synpred1_CMIS1323); tableName(); @@ -7091,8 +7091,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred2_CMIS public final void synpred2_CMIS_fragment() throws RecognitionException { - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:9: ( LPAREN singleTable ( joinedTable )+ RPAREN ) - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:10: LPAREN singleTable ( joinedTable )+ RPAREN + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:9: ( LPAREN singleTable ( joinedTable )+ RPAREN ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:10: LPAREN singleTable ( joinedTable )+ RPAREN { match(input,LPAREN,FOLLOW_LPAREN_in_synpred2_CMIS1917); if (state.failed) return ; pushFollow(FOLLOW_singleTable_in_synpred2_CMIS1919); @@ -7100,7 +7100,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return ; - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:29: ( joinedTable )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:29: ( joinedTable )+ int cnt47=0; loop47: do { @@ -7114,7 +7114,7 @@ public class CMISParser extends Parser { switch (alt47) { case 1 : - // W:\\alfresco\\HEAD\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:29: joinedTable + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:484:29: joinedTable { pushFollow(FOLLOW_joinedTable_in_synpred2_CMIS1921); joinedTable(); diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSLexer.java b/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSLexer.java index cf3f338d12..9b5de76dd7 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSLexer.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g 2010-05-17 15:10:38 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g 2011-01-12 12:54:17 package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; @@ -91,18 +91,18 @@ public class CMIS_FTSLexer extends Lexer { super(input,state); } - public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g"; } // $ANTLR start "FTSPHRASE" public final void mFTSPHRASE() throws RecognitionException { try { int _type = FTSPHRASE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:346:9: ( '\\'' ( F_ESC | ~ ( '\\\\' | '\\'' ) )* '\\'' ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:347:9: '\\'' ( F_ESC | ~ ( '\\\\' | '\\'' ) )* '\\'' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:346:9: ( '\\'' ( F_ESC | ~ ( '\\\\' | '\\'' ) )* '\\'' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:347:9: '\\'' ( F_ESC | ~ ( '\\\\' | '\\'' ) )* '\\'' { match('\''); - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:348:9: ( F_ESC | ~ ( '\\\\' | '\\'' ) )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:348:9: ( F_ESC | ~ ( '\\\\' | '\\'' ) )* loop1: do { int alt1=3; @@ -118,14 +118,14 @@ public class CMIS_FTSLexer extends Lexer { switch (alt1) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:349:17: F_ESC + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:349:17: F_ESC { mF_ESC(); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:351:17: ~ ( '\\\\' | '\\'' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:351:17: ~ ( '\\\\' | '\\'' ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -160,8 +160,8 @@ public class CMIS_FTSLexer extends Lexer { // $ANTLR start "F_ESC" public final void mF_ESC() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:362:9: ( '\\\\' ( '\\\\' | '\\'' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:363:9: '\\\\' ( '\\\\' | '\\'' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:362:9: ( '\\\\' ( '\\\\' | '\\'' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:363:9: '\\\\' ( '\\\\' | '\\'' ) { match('\\'); if ( input.LA(1)=='\''||input.LA(1)=='\\' ) { @@ -187,8 +187,8 @@ public class CMIS_FTSLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:372:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:373:9: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:372:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:373:9: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -224,8 +224,8 @@ public class CMIS_FTSLexer extends Lexer { try { int _type = MINUS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:384:9: ( '-' ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:385:9: '-' + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:384:9: ( '-' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:385:9: '-' { match('-'); @@ -244,10 +244,10 @@ public class CMIS_FTSLexer extends Lexer { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:395:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:396:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:395:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:396:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:396:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:396:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt2=0; loop2: do { @@ -261,7 +261,7 @@ public class CMIS_FTSLexer extends Lexer { switch (alt2) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g: + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g: { if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { input.consume(); @@ -302,11 +302,11 @@ public class CMIS_FTSLexer extends Lexer { try { int _type = FTSWORD; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:407:9: ( START_WORD ( IN_WORD )* ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:408:9: START_WORD ( IN_WORD )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:407:9: ( START_WORD ( IN_WORD )* ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:408:9: START_WORD ( IN_WORD )* { mSTART_WORD(); - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:408:20: ( IN_WORD )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:408:20: ( IN_WORD )* loop3: do { int alt3=2; @@ -319,7 +319,7 @@ public class CMIS_FTSLexer extends Lexer { switch (alt3) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:408:20: IN_WORD + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:408:20: IN_WORD { mIN_WORD(); @@ -345,8 +345,8 @@ public class CMIS_FTSLexer extends Lexer { // $ANTLR start "START_WORD" public final void mSTART_WORD() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:413:9: (~ ( ' ' | '\\t' | '\\r' | '\\n' | '-' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:414:9: ~ ( ' ' | '\\t' | '\\r' | '\\n' | '-' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:413:9: (~ ( ' ' | '\\t' | '\\r' | '\\n' | '-' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:414:9: ~ ( ' ' | '\\t' | '\\r' | '\\n' | '-' ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='\b')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\u001F')||(input.LA(1)>='!' && input.LA(1)<=',')||(input.LA(1)>='.' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -369,8 +369,8 @@ public class CMIS_FTSLexer extends Lexer { // $ANTLR start "IN_WORD" public final void mIN_WORD() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:425:9: (~ ( ' ' | '\\t' | '\\r' | '\\n' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:426:9: ~ ( ' ' | '\\t' | '\\r' | '\\n' ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:425:9: (~ ( ' ' | '\\t' | '\\r' | '\\n' ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:426:9: ~ ( ' ' | '\\t' | '\\r' | '\\n' ) { if ( (input.LA(1)>='\u0000' && input.LA(1)<='\b')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\u001F')||(input.LA(1)>='!' && input.LA(1)<='\uFFFF') ) { input.consume(); @@ -391,40 +391,40 @@ public class CMIS_FTSLexer extends Lexer { // $ANTLR end "IN_WORD" public void mTokens() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:8: ( FTSPHRASE | OR | MINUS | WS | FTSWORD ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:8: ( FTSPHRASE | OR | MINUS | WS | FTSWORD ) int alt4=5; alt4 = dfa4.predict(input); switch (alt4) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:10: FTSPHRASE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:10: FTSPHRASE { mFTSPHRASE(); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:20: OR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:20: OR { mOR(); } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:23: MINUS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:23: MINUS { mMINUS(); } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:29: WS + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:29: WS { mWS(); } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:32: FTSWORD + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:1:32: FTSWORD { mFTSWORD(); diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSParser.java b/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSParser.java index 44448a476d..66a4685737 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSParser.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS_FTSParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g 2010-05-17 15:10:38 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g 2011-01-12 12:54:17 package org.alfresco.repo.search.impl.parsers; @@ -53,7 +53,7 @@ public class CMIS_FTSParser extends Parser { } public String[] getTokenNames() { return CMIS_FTSParser.tokenNames; } - public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g"; } private Stack paraphrases = new Stack(); @@ -191,7 +191,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "cmisFtsQuery" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:278:1: cmisFtsQuery : ftsCmisDisjunction EOF -> ftsCmisDisjunction ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:278:1: cmisFtsQuery : ftsCmisDisjunction EOF -> ftsCmisDisjunction ; public final CMIS_FTSParser.cmisFtsQuery_return cmisFtsQuery() throws RecognitionException { CMIS_FTSParser.cmisFtsQuery_return retval = new CMIS_FTSParser.cmisFtsQuery_return(); retval.start = input.LT(1); @@ -206,8 +206,8 @@ public class CMIS_FTSParser extends Parser { RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF"); RewriteRuleSubtreeStream stream_ftsCmisDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsCmisDisjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:279:9: ( ftsCmisDisjunction EOF -> ftsCmisDisjunction ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:280:9: ftsCmisDisjunction EOF + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:279:9: ( ftsCmisDisjunction EOF -> ftsCmisDisjunction ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:280:9: ftsCmisDisjunction EOF { pushFollow(FOLLOW_ftsCmisDisjunction_in_cmisFtsQuery194); ftsCmisDisjunction1=ftsCmisDisjunction(); @@ -263,7 +263,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "ftsCmisDisjunction" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:289:1: ftsCmisDisjunction : ftsCmisConjunction ( or ftsCmisConjunction )* -> ^( DISJUNCTION ( ftsCmisConjunction )+ ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:289:1: ftsCmisDisjunction : ftsCmisConjunction ( or ftsCmisConjunction )* -> ^( DISJUNCTION ( ftsCmisConjunction )+ ) ; public final CMIS_FTSParser.ftsCmisDisjunction_return ftsCmisDisjunction() throws RecognitionException { CMIS_FTSParser.ftsCmisDisjunction_return retval = new CMIS_FTSParser.ftsCmisDisjunction_return(); retval.start = input.LT(1); @@ -280,8 +280,8 @@ public class CMIS_FTSParser extends Parser { RewriteRuleSubtreeStream stream_ftsCmisConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsCmisConjunction"); RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:290:9: ( ftsCmisConjunction ( or ftsCmisConjunction )* -> ^( DISJUNCTION ( ftsCmisConjunction )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:291:9: ftsCmisConjunction ( or ftsCmisConjunction )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:290:9: ( ftsCmisConjunction ( or ftsCmisConjunction )* -> ^( DISJUNCTION ( ftsCmisConjunction )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:291:9: ftsCmisConjunction ( or ftsCmisConjunction )* { pushFollow(FOLLOW_ftsCmisConjunction_in_ftsCmisDisjunction252); ftsCmisConjunction3=ftsCmisConjunction(); @@ -289,7 +289,7 @@ public class CMIS_FTSParser extends Parser { state._fsp--; stream_ftsCmisConjunction.add(ftsCmisConjunction3.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:291:28: ( or ftsCmisConjunction )* + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:291:28: ( or ftsCmisConjunction )* loop1: do { int alt1=2; @@ -302,7 +302,7 @@ public class CMIS_FTSParser extends Parser { switch (alt1) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:291:29: or ftsCmisConjunction + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:291:29: or ftsCmisConjunction { pushFollow(FOLLOW_or_in_ftsCmisDisjunction255); or4=or(); @@ -340,7 +340,7 @@ public class CMIS_FTSParser extends Parser { root_0 = (Object)adaptor.nil(); // 292:17: -> ^( DISJUNCTION ( ftsCmisConjunction )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:293:25: ^( DISJUNCTION ( ftsCmisConjunction )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:293:25: ^( DISJUNCTION ( ftsCmisConjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); @@ -385,7 +385,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "ftsCmisConjunction" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:296:1: ftsCmisConjunction : ( ftsCmisPrefixed )+ -> ^( CONJUNCTION ( ftsCmisPrefixed )+ ) ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:296:1: ftsCmisConjunction : ( ftsCmisPrefixed )+ -> ^( CONJUNCTION ( ftsCmisPrefixed )+ ) ; public final CMIS_FTSParser.ftsCmisConjunction_return ftsCmisConjunction() throws RecognitionException { CMIS_FTSParser.ftsCmisConjunction_return retval = new CMIS_FTSParser.ftsCmisConjunction_return(); retval.start = input.LT(1); @@ -397,10 +397,10 @@ public class CMIS_FTSParser extends Parser { RewriteRuleSubtreeStream stream_ftsCmisPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsCmisPrefixed"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:297:9: ( ( ftsCmisPrefixed )+ -> ^( CONJUNCTION ( ftsCmisPrefixed )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:298:9: ( ftsCmisPrefixed )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:297:9: ( ( ftsCmisPrefixed )+ -> ^( CONJUNCTION ( ftsCmisPrefixed )+ ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:298:9: ( ftsCmisPrefixed )+ { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:298:9: ( ftsCmisPrefixed )+ + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:298:9: ( ftsCmisPrefixed )+ int cnt2=0; loop2: do { @@ -414,7 +414,7 @@ public class CMIS_FTSParser extends Parser { switch (alt2) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:298:9: ftsCmisPrefixed + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:298:9: ftsCmisPrefixed { pushFollow(FOLLOW_ftsCmisPrefixed_in_ftsCmisConjunction341); ftsCmisPrefixed6=ftsCmisPrefixed(); @@ -450,7 +450,7 @@ public class CMIS_FTSParser extends Parser { root_0 = (Object)adaptor.nil(); // 299:17: -> ^( CONJUNCTION ( ftsCmisPrefixed )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:300:25: ^( CONJUNCTION ( ftsCmisPrefixed )+ ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:300:25: ^( CONJUNCTION ( ftsCmisPrefixed )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -495,7 +495,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "ftsCmisPrefixed" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:303:1: ftsCmisPrefixed : ( cmisTest -> ^( DEFAULT cmisTest ) | MINUS cmisTest -> ^( EXCLUDE cmisTest ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:303:1: ftsCmisPrefixed : ( cmisTest -> ^( DEFAULT cmisTest ) | MINUS cmisTest -> ^( EXCLUDE cmisTest ) ); public final CMIS_FTSParser.ftsCmisPrefixed_return ftsCmisPrefixed() throws RecognitionException { CMIS_FTSParser.ftsCmisPrefixed_return retval = new CMIS_FTSParser.ftsCmisPrefixed_return(); retval.start = input.LT(1); @@ -512,7 +512,7 @@ public class CMIS_FTSParser extends Parser { RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS"); RewriteRuleSubtreeStream stream_cmisTest=new RewriteRuleSubtreeStream(adaptor,"rule cmisTest"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:304:9: ( cmisTest -> ^( DEFAULT cmisTest ) | MINUS cmisTest -> ^( EXCLUDE cmisTest ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:304:9: ( cmisTest -> ^( DEFAULT cmisTest ) | MINUS cmisTest -> ^( EXCLUDE cmisTest ) ) int alt3=2; int LA3_0 = input.LA(1); @@ -530,7 +530,7 @@ public class CMIS_FTSParser extends Parser { } switch (alt3) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:305:9: cmisTest + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:305:9: cmisTest { pushFollow(FOLLOW_cmisTest_in_ftsCmisPrefixed424); cmisTest7=cmisTest(); @@ -553,7 +553,7 @@ public class CMIS_FTSParser extends Parser { root_0 = (Object)adaptor.nil(); // 306:17: -> ^( DEFAULT cmisTest ) { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:307:25: ^( DEFAULT cmisTest ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:307:25: ^( DEFAULT cmisTest ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DEFAULT, "DEFAULT"), root_1); @@ -569,7 +569,7 @@ public class CMIS_FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:308:11: MINUS cmisTest + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:308:11: MINUS cmisTest { MINUS8=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsCmisPrefixed484); stream_MINUS.add(MINUS8); @@ -595,7 +595,7 @@ public class CMIS_FTSParser extends Parser { root_0 = (Object)adaptor.nil(); // 309:17: -> ^( EXCLUDE cmisTest ) { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:310:25: ^( EXCLUDE cmisTest ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:310:25: ^( EXCLUDE cmisTest ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXCLUDE, "EXCLUDE"), root_1); @@ -635,7 +635,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "cmisTest" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:313:1: cmisTest : ( cmisTerm -> ^( TERM cmisTerm ) | cmisPhrase -> ^( PHRASE cmisPhrase ) ); + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:313:1: cmisTest : ( cmisTerm -> ^( TERM cmisTerm ) | cmisPhrase -> ^( PHRASE cmisPhrase ) ); public final CMIS_FTSParser.cmisTest_return cmisTest() throws RecognitionException { CMIS_FTSParser.cmisTest_return retval = new CMIS_FTSParser.cmisTest_return(); retval.start = input.LT(1); @@ -650,7 +650,7 @@ public class CMIS_FTSParser extends Parser { RewriteRuleSubtreeStream stream_cmisPhrase=new RewriteRuleSubtreeStream(adaptor,"rule cmisPhrase"); RewriteRuleSubtreeStream stream_cmisTerm=new RewriteRuleSubtreeStream(adaptor,"rule cmisTerm"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:314:9: ( cmisTerm -> ^( TERM cmisTerm ) | cmisPhrase -> ^( PHRASE cmisPhrase ) ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:314:9: ( cmisTerm -> ^( TERM cmisTerm ) | cmisPhrase -> ^( PHRASE cmisPhrase ) ) int alt4=2; int LA4_0 = input.LA(1); @@ -668,7 +668,7 @@ public class CMIS_FTSParser extends Parser { } switch (alt4) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:315:9: cmisTerm + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:315:9: cmisTerm { pushFollow(FOLLOW_cmisTerm_in_cmisTest567); cmisTerm10=cmisTerm(); @@ -691,7 +691,7 @@ public class CMIS_FTSParser extends Parser { root_0 = (Object)adaptor.nil(); // 316:17: -> ^( TERM cmisTerm ) { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:317:25: ^( TERM cmisTerm ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:317:25: ^( TERM cmisTerm ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TERM, "TERM"), root_1); @@ -707,7 +707,7 @@ public class CMIS_FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:318:11: cmisPhrase + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:318:11: cmisPhrase { pushFollow(FOLLOW_cmisPhrase_in_cmisTest627); cmisPhrase11=cmisPhrase(); @@ -730,7 +730,7 @@ public class CMIS_FTSParser extends Parser { root_0 = (Object)adaptor.nil(); // 319:17: -> ^( PHRASE cmisPhrase ) { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:320:25: ^( PHRASE cmisPhrase ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:320:25: ^( PHRASE cmisPhrase ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PHRASE, "PHRASE"), root_1); @@ -770,7 +770,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "cmisTerm" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:324:1: cmisTerm : FTSWORD -> FTSWORD ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:324:1: cmisTerm : FTSWORD -> FTSWORD ; public final CMIS_FTSParser.cmisTerm_return cmisTerm() throws RecognitionException { CMIS_FTSParser.cmisTerm_return retval = new CMIS_FTSParser.cmisTerm_return(); retval.start = input.LT(1); @@ -783,8 +783,8 @@ public class CMIS_FTSParser extends Parser { RewriteRuleTokenStream stream_FTSWORD=new RewriteRuleTokenStream(adaptor,"token FTSWORD"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:325:9: ( FTSWORD -> FTSWORD ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:326:9: FTSWORD + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:325:9: ( FTSWORD -> FTSWORD ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:326:9: FTSWORD { FTSWORD12=(Token)match(input,FTSWORD,FOLLOW_FTSWORD_in_cmisTerm717); stream_FTSWORD.add(FTSWORD12); @@ -834,7 +834,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "cmisPhrase" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:330:1: cmisPhrase : FTSPHRASE -> FTSPHRASE ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:330:1: cmisPhrase : FTSPHRASE -> FTSPHRASE ; public final CMIS_FTSParser.cmisPhrase_return cmisPhrase() throws RecognitionException { CMIS_FTSParser.cmisPhrase_return retval = new CMIS_FTSParser.cmisPhrase_return(); retval.start = input.LT(1); @@ -847,8 +847,8 @@ public class CMIS_FTSParser extends Parser { RewriteRuleTokenStream stream_FTSPHRASE=new RewriteRuleTokenStream(adaptor,"token FTSPHRASE"); try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:331:9: ( FTSPHRASE -> FTSPHRASE ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:332:9: FTSPHRASE + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:331:9: ( FTSPHRASE -> FTSPHRASE ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:332:9: FTSPHRASE { FTSPHRASE13=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_cmisPhrase770); stream_FTSPHRASE.add(FTSPHRASE13); @@ -898,7 +898,7 @@ public class CMIS_FTSParser extends Parser { }; // $ANTLR start "or" - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:336:1: or : OR ; + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:336:1: or : OR ; public final CMIS_FTSParser.or_return or() throws RecognitionException { CMIS_FTSParser.or_return retval = new CMIS_FTSParser.or_return(); retval.start = input.LT(1); @@ -910,8 +910,8 @@ public class CMIS_FTSParser extends Parser { Object OR14_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:337:9: ( OR ) - // W:\\alfresco\\BRANCHES\\DEV\\V3.3-BUG-FIX\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:338:9: OR + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:337:9: ( OR ) + // W:\\alfresco\\BRANCHES\\V3.3\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS_FTS.g:338:9: OR { root_0 = (Object)adaptor.nil(); diff --git a/source/java/org/alfresco/repo/security/authentication/AbstractAuthenticationComponent.java b/source/java/org/alfresco/repo/security/authentication/AbstractAuthenticationComponent.java index c87997c3e5..33c1415698 100644 --- a/source/java/org/alfresco/repo/security/authentication/AbstractAuthenticationComponent.java +++ b/source/java/org/alfresco/repo/security/authentication/AbstractAuthenticationComponent.java @@ -192,7 +192,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC public Authentication setCurrentUser(String userName, UserNameValidationMode validationMode) { - if (isSystemUserName(userName)) + if (validationMode == UserNameValidationMode.NONE || isSystemUserName(userName)) { return setCurrentUserImpl(userName); } diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationComponent.java b/source/java/org/alfresco/repo/security/authentication/AuthenticationComponent.java index ba2718a931..69a73164b3 100644 --- a/source/java/org/alfresco/repo/security/authentication/AuthenticationComponent.java +++ b/source/java/org/alfresco/repo/security/authentication/AuthenticationComponent.java @@ -26,7 +26,7 @@ public interface AuthenticationComponent extends AuthenticationContext { public enum UserNameValidationMode { - CHECK, CHECK_AND_FIX; + NONE, CHECK, CHECK_AND_FIX; } /** diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationComponentImpl.java b/source/java/org/alfresco/repo/security/authentication/AuthenticationComponentImpl.java index 206bd96f83..bbf85b5fcc 100644 --- a/source/java/org/alfresco/repo/security/authentication/AuthenticationComponentImpl.java +++ b/source/java/org/alfresco/repo/security/authentication/AuthenticationComponentImpl.java @@ -29,7 +29,9 @@ import net.sf.acegisecurity.UserDetails; import net.sf.acegisecurity.providers.UsernamePasswordAuthenticationToken; import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.ntlm.NLTMAuthenticator; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; public class AuthenticationComponentImpl extends AbstractAuthenticationComponent implements NLTMAuthenticator { @@ -66,15 +68,36 @@ public class AuthenticationComponentImpl extends AbstractAuthenticationComponent * Authenticate */ @Override - protected void authenticateImpl(String userName, char[] password) throws AuthenticationException + protected void authenticateImpl(final String userName, final char[] password) throws AuthenticationException { try { - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userName, - new String(password)); - this.authenticationManager.authenticate(authentication); - setCurrentUser(userName); - + String normalized = getTransactionService().getRetryingTransactionHelper().doInTransaction( + new RetryingTransactionCallback() + { + public String execute() throws Throwable + { + return AuthenticationUtil.runAs(new RunAsWork() + { + public String doWork() throws Exception + { + String normalized = getPersonService().getUserIdentifier(userName); + UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( + normalized == null ? userName : normalized, new String(password)); + authenticationManager.authenticate(authentication); + return normalized; + } + }, getSystemUserName(getUserDomain(userName))); + } + }, true); + if (normalized == null) + { + setCurrentUser(userName, UserNameValidationMode.CHECK_AND_FIX); + } + else + { + setCurrentUser(normalized, UserNameValidationMode.NONE); + } } catch (net.sf.acegisecurity.AuthenticationException ae) { diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java b/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java index e22d65f46d..0f793c0c30 100644 --- a/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java +++ b/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java @@ -43,6 +43,7 @@ import net.sf.acegisecurity.providers.UsernamePasswordAuthenticationToken; import org.alfresco.model.ContentModel; import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.management.subsystems.ChildApplicationContextManager; +import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.InMemoryTicketComponentImpl.ExpiryMode; import org.alfresco.repo.security.authentication.InMemoryTicketComponentImpl.Ticket; @@ -50,11 +51,9 @@ import org.alfresco.repo.security.person.UserNameMatcher; import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.service.ServiceRegistry; -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.SearchService; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.DynamicNamespacePrefixResolver; @@ -76,8 +75,6 @@ public class AuthenticationTest extends TestCase private TenantService tenantService; - private SearchService searchService; - private NodeRef rootNodeRef; private NodeRef systemNodeRef; @@ -86,8 +83,6 @@ public class AuthenticationTest extends TestCase private NodeRef personAndyNodeRef; - private DictionaryService dictionaryService; - private MD4PasswordEncoder passwordEncoder; private MutableAuthenticationDao dao; @@ -119,6 +114,8 @@ public class AuthenticationTest extends TestCase // TODO: pending replacement private Dialect dialect; + private PolicyComponent policyComponent; + public AuthenticationTest() { super(); @@ -135,8 +132,6 @@ public class AuthenticationTest extends TestCase nodeService = (NodeService) ctx.getBean("nodeService"); tenantService = (TenantService) ctx.getBean("tenantService"); - searchService = (SearchService) ctx.getBean("searchService"); - dictionaryService = (DictionaryService) ctx.getBean("dictionaryService"); passwordEncoder = (MD4PasswordEncoder) ctx.getBean("passwordEncoder"); ticketComponent = (TicketComponent) ctx.getBean("ticketComponent"); authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService"); @@ -146,6 +141,7 @@ public class AuthenticationTest extends TestCase pubPersonService = (PersonService) ctx.getBean("PersonService"); personService = (PersonService) ctx.getBean("personService"); userNameMatcher = (UserNameMatcher) ctx.getBean("userNameMatcher"); + policyComponent = (PolicyComponent) ctx.getBean("policyComponent"); // permissionServiceSPI = (PermissionServiceSPI) // ctx.getBean("permissionService"); ticketsCache = (SimpleCache) ctx.getBean("ticketsCache"); @@ -184,12 +180,10 @@ public class AuthenticationTest extends TestCase RepositoryAuthenticationDao dao = new RepositoryAuthenticationDao(); dao.setTenantService(tenantService); dao.setNodeService(nodeService); - dao.setSearchService(searchService); - dao.setDictionaryService(dictionaryService); dao.setNamespaceService(getNamespacePrefixReolsver("")); dao.setPasswordEncoder(passwordEncoder); dao.setUserNameMatcher(userNameMatcher); - dao.setRetryingTransactionHelper(transactionService.getRetryingTransactionHelper()); + dao.setPolicyComponent(policyComponent); if (dao.getUserOrNull("andy") != null) { @@ -402,12 +396,10 @@ public class AuthenticationTest extends TestCase RepositoryAuthenticationDao dao = new RepositoryAuthenticationDao(); dao.setTenantService(tenantService); dao.setNodeService(nodeService); - dao.setSearchService(searchService); - dao.setDictionaryService(dictionaryService); dao.setNamespaceService(getNamespacePrefixReolsver("")); dao.setPasswordEncoder(passwordEncoder); dao.setUserNameMatcher(userNameMatcher); - dao.setRetryingTransactionHelper(transactionService.getRetryingTransactionHelper()); + dao.setPolicyComponent(policyComponent); dao.createUser("Andy", "cabbage".toCharArray()); assertNotNull(dao.getUserOrNull("Andy")); diff --git a/source/java/org/alfresco/repo/security/authentication/RepositoryAuthenticationDao.java b/source/java/org/alfresco/repo/security/authentication/RepositoryAuthenticationDao.java index e9a101b0b1..22c2d560eb 100644 --- a/source/java/org/alfresco/repo/security/authentication/RepositoryAuthenticationDao.java +++ b/source/java/org/alfresco/repo/security/authentication/RepositoryAuthenticationDao.java @@ -23,6 +23,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import net.sf.acegisecurity.GrantedAuthority; import net.sf.acegisecurity.GrantedAuthorityImpl; @@ -33,27 +34,24 @@ import net.sf.acegisecurity.providers.encoding.PasswordEncoder; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy; +import org.alfresco.repo.policy.JavaBehaviour; +import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.person.UserNameMatcher; import org.alfresco.repo.tenant.TenantService; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; -import org.alfresco.service.cmr.repository.InvalidNodeRefException; 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.repository.datatype.DefaultTypeConverter; -import org.alfresco.service.cmr.search.ResultSet; -import org.alfresco.service.cmr.search.ResultSetRow; -import org.alfresco.service.cmr.search.SearchParameters; -import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.namespace.NamespacePrefixResolver; import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; +import org.alfresco.util.EqualsHelper; +import org.springframework.beans.factory.InitializingBean; import org.springframework.dao.DataAccessException; -import org.springframework.util.StringUtils; -public class RepositoryAuthenticationDao implements MutableAuthenticationDao +public class RepositoryAuthenticationDao implements MutableAuthenticationDao, InitializingBean { private static final StoreRef STOREREF_USERS = new StoreRef("user", "alfrescoUserStore"); @@ -63,17 +61,15 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao private NamespacePrefixResolver namespacePrefixResolver; - @SuppressWarnings("unused") - private DictionaryService dictionaryService; - - private SearchService searchService; - - private RetryingTransactionHelper retryingTransactionHelper; - private PasswordEncoder passwordEncoder; private UserNameMatcher userNameMatcher; + + private PolicyComponent policyComponent; + /** User folder ref cache (Tennant aware) */ + private Map userFolderRefs = new ConcurrentHashMap(4); + public RepositoryAuthenticationDao() { super(); @@ -89,11 +85,6 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao this.userNameMatcher = userNameMatcher; } - public void setDictionaryService(DictionaryService dictionaryService) - { - this.dictionaryService = dictionaryService; - } - public void setNamespaceService(NamespacePrefixResolver namespacePrefixResolver) { this.namespacePrefixResolver = namespacePrefixResolver; @@ -104,11 +95,6 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao this.nodeService = nodeService; } - public void setRetryingTransactionHelper(RetryingTransactionHelper retryingTransactionHelper) - { - this.retryingTransactionHelper = retryingTransactionHelper; - } - public void setTenantService(TenantService tenantService) { this.tenantService = tenantService; @@ -119,9 +105,20 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao this.passwordEncoder = passwordEncoder; } - public void setSearchService(SearchService searchService) + public void setPolicyComponent(PolicyComponent policyComponent) { - this.searchService = searchService; + this.policyComponent = policyComponent; + } + + /* (non-Javadoc) + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + public void afterPropertiesSet() throws Exception + { + this.policyComponent.bindClassBehaviour( + OnUpdatePropertiesPolicy.QNAME, + ContentModel.TYPE_PERSON, + new JavaBehaviour(this, "onUpdateProperties")); } public UserDetails loadUserByUsername(String incomingUserName) throws UsernameNotFoundException, DataAccessException @@ -152,78 +149,9 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao return null; } - SearchParameters sp = new SearchParameters(); - sp.setLanguage(SearchService.LANGUAGE_LUCENE); - sp.setQuery("@usr\\:username:\"" + StringUtils.delete(searchUserName, "\"") + "\""); - - try - { - sp.addStore(tenantService.getName(searchUserName, STOREREF_USERS)); - } - catch (AlfrescoRuntimeException e) - { - return null; // no such tenant or tenant not enabled - } - - sp.excludeDataInTheCurrentTransaction(false); - - ResultSet rs = null; - - try - { - rs = searchService.query(sp); - - NodeRef returnRef = null; - - for (ResultSetRow row : rs) - { - - final NodeRef nodeRef = row.getNodeRef(); - if (nodeService.exists(nodeRef)) - { - String realUserName = DefaultTypeConverter.INSTANCE.convert(String.class, nodeService.getProperty(nodeRef, ContentModel.PROP_USER_USERNAME)); - - if(userNameMatcher.matches(realUserName, searchUserName)) - { - if (returnRef == null) - { - returnRef = nodeRef; - } - else - { - try - { - this.retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() - { - public Object execute() throws Throwable - { - // Delete the extra user node references - RepositoryAuthenticationDao.this.nodeService.deleteNode(nodeRef); - - return null; - } - - }, false, true); - } - catch (InvalidNodeRefException exception) - { - // Ignore this exception as the node has already been deleted - } - } - } - - } - } - - return returnRef; - } - finally - { - if (rs != null) - { - rs.close(); - } - } + List results = nodeService.getChildAssocs(getUserFolderLocation(searchUserName), + ContentModel.ASSOC_CHILDREN, QName.createQName(ContentModel.USER_MODEL_URI, searchUserName)); + return results.isEmpty() ? null : results.get(0).getChildRef(); } public void createUser(String caseSensitiveUserName, char[] rawPassword) throws AuthenticationException @@ -245,37 +173,43 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao properties.put(ContentModel.PROP_CREDENTIALS_EXPIRE, Boolean.valueOf(false)); properties.put(ContentModel.PROP_ENABLED, Boolean.valueOf(true)); properties.put(ContentModel.PROP_ACCOUNT_LOCKED, Boolean.valueOf(false)); - nodeService.createNode(typesNode, ContentModel.ASSOC_CHILDREN, ContentModel.TYPE_USER, ContentModel.TYPE_USER, properties); + nodeService.createNode(typesNode, ContentModel.ASSOC_CHILDREN, QName.createQName(ContentModel.USER_MODEL_URI, + caseSensitiveUserName), ContentModel.TYPE_USER, properties); } private NodeRef getUserFolderLocation(String caseSensitiveUserName) { - QName qnameAssocSystem = QName.createQName("sys", "system", namespacePrefixResolver); - QName qnameAssocUsers = QName.createQName("sys", "people", namespacePrefixResolver); // see - - StoreRef userStoreRef = tenantService.getName(caseSensitiveUserName, new StoreRef(STOREREF_USERS.getProtocol(), STOREREF_USERS.getIdentifier())); - - // AR-527 - NodeRef rootNode = nodeService.getRootNode(userStoreRef); - List results = nodeService.getChildAssocs(rootNode, RegexQNamePattern.MATCH_ALL, qnameAssocSystem); - NodeRef sysNodeRef = null; - if (results.size() == 0) + String cacheKey = tenantService.getUserDomain(caseSensitiveUserName); + NodeRef userNodeRef = userFolderRefs.get(cacheKey); + if (userNodeRef == null) { - throw new AlfrescoRuntimeException("Required authority system folder path not found: " + qnameAssocSystem); - } - else - { - sysNodeRef = results.get(0).getChildRef(); - } - results = nodeService.getChildAssocs(sysNodeRef, RegexQNamePattern.MATCH_ALL, qnameAssocUsers); - NodeRef userNodeRef = null; - if (results.size() == 0) - { - throw new AlfrescoRuntimeException("Required user folder path not found: " + qnameAssocUsers); - } - else - { - userNodeRef = results.get(0).getChildRef(); + QName qnameAssocSystem = QName.createQName("sys", "system", namespacePrefixResolver); + QName qnameAssocUsers = QName.createQName("sys", "people", namespacePrefixResolver); // see + + StoreRef userStoreRef = tenantService.getName(caseSensitiveUserName, new StoreRef(STOREREF_USERS.getProtocol(), STOREREF_USERS.getIdentifier())); + + // AR-527 + NodeRef rootNode = nodeService.getRootNode(userStoreRef); + List results = nodeService.getChildAssocs(rootNode, RegexQNamePattern.MATCH_ALL, qnameAssocSystem); + NodeRef sysNodeRef = null; + if (results.size() == 0) + { + throw new AlfrescoRuntimeException("Required authority system folder path not found: " + qnameAssocSystem); + } + else + { + sysNodeRef = results.get(0).getChildRef(); + } + results = nodeService.getChildAssocs(sysNodeRef, RegexQNamePattern.MATCH_ALL, qnameAssocUsers); + if (results.size() == 0) + { + throw new AlfrescoRuntimeException("Required user folder path not found: " + qnameAssocUsers); + } + else + { + userNodeRef = tenantService.getName(results.get(0).getChildRef()); + } + userFolderRefs.put(cacheKey, userNodeRef); } return userNodeRef; } @@ -583,4 +517,19 @@ public class RepositoryAuthenticationDao implements MutableAuthenticationDao } } + public void onUpdateProperties(NodeRef nodeRef, Map before, Map after) + { + String uidBefore = DefaultTypeConverter.INSTANCE.convert(String.class, before.get(ContentModel.PROP_USERNAME)); + String uidAfter = DefaultTypeConverter.INSTANCE.convert(String.class, after.get(ContentModel.PROP_USERNAME)); + if (uidBefore != null && !EqualsHelper.nullSafeEquals(uidBefore, uidAfter)) + { + NodeRef userNode = getUserOrNull(uidBefore); + if (userNode != null) + { + nodeService.setProperty(userNode, ContentModel.PROP_USER_USERNAME, uidAfter); + nodeService.moveNode(userNode, nodeService.getPrimaryParent(userNode).getParentRef(), + ContentModel.ASSOC_CHILDREN, QName.createQName(ContentModel.USER_MODEL_URI, uidAfter)); + } + } + } } diff --git a/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java b/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java index 230adc1c7e..8ddc17d161 100644 --- a/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java +++ b/source/java/org/alfresco/repo/security/authority/script/ScriptGroup.java @@ -352,7 +352,7 @@ public class ScriptGroup implements Authority, Serializable */ public ScriptGroup createGroup(String newShortName, String newDisplayName) { - String authorityName = authorityService.createAuthority(AuthorityType.GROUP, newShortName, displayName, authorityService.getDefaultZones()); + String authorityName = authorityService.createAuthority(AuthorityType.GROUP, newShortName, newDisplayName, authorityService.getDefaultZones()); authorityService.addAuthority(fullName, authorityName); ScriptGroup childGroup = new ScriptGroup(authorityName, authorityService); clearCaches(); diff --git a/source/java/org/alfresco/repo/security/permissions/impl/PublicServiceAccessServiceImpl.java b/source/java/org/alfresco/repo/security/permissions/impl/PublicServiceAccessServiceImpl.java index 24f3b1cb9b..e5c5c878a1 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/PublicServiceAccessServiceImpl.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/PublicServiceAccessServiceImpl.java @@ -53,12 +53,133 @@ public class PublicServiceAccessServiceImpl implements PublicServiceAccessServic MethodInvocation methodInvocation = null; Object publicServiceImpl = beanFactory.getBean(publicService); - for (Method method : publicServiceImpl.getClass().getMethods()) + NEXT_METHOD: for (Method method : publicServiceImpl.getClass().getMethods()) { if (method.getName().equals(methodName)) { if (method.getParameterTypes().length == args.length) { + // check argument types are assignable + int parameterPosition = 0; + for(Class clazz : method.getParameterTypes()) + { + if(args[parameterPosition] == null) + { + if(clazz.isPrimitive()) + { + continue NEXT_METHOD; + } + else + { + // OK, null assigns to any non-primitive type + } + } + else + { + if(clazz.isPrimitive()) + { + + if(clazz.getName().equals("boolean")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Boolean")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("byte")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Byte")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("char")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Char")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("short")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Short")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("int")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Integer")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("long")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Long")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("float")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Float")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else if(clazz.getName().equals("double")) + { + if(args[parameterPosition].getClass().getName().equals("java.lang.Double")) + { + // OK + } + else + { + continue NEXT_METHOD; + } + } + else + { + continue NEXT_METHOD; + } + + } + else if(!(clazz.isAssignableFrom(args[parameterPosition].getClass()))) + { + continue NEXT_METHOD; + } + } + parameterPosition++; + } methodInvocation = new ReflectiveMethodInvocation(null, null, method, args, null, null) {}; } } @@ -66,7 +187,7 @@ public class PublicServiceAccessServiceImpl implements PublicServiceAccessServic if (methodInvocation == null) { - throw new UnsupportedOperationException("Unknown public service security implementation " + publicService + "." + methodName); + throw new UnsupportedOperationException("Unknown public service security implementation " + publicService + "." + methodName + " with argumsnets "+args); } return msi.pre(methodInvocation); diff --git a/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java b/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java index bedfe09e4b..48bb02cc40 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java @@ -20,7 +20,6 @@ package org.alfresco.repo.security.permissions.impl.model; import java.io.IOException; import java.io.InputStream; -import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.EnumMap; @@ -30,16 +29,15 @@ import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.security.permissions.PermissionEntry; import org.alfresco.repo.security.permissions.PermissionReference; import org.alfresco.repo.security.permissions.impl.ModelDAO; import org.alfresco.repo.security.permissions.impl.RequiredPermission; import org.alfresco.repo.security.permissions.impl.SimplePermissionReference; +import org.alfresco.repo.security.permissions.impl.RequiredPermission.On; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.ClassDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; @@ -57,8 +55,6 @@ import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; -import org.springframework.context.ApplicationEvent; -import org.springframework.extensions.surf.util.AbstractLifecycleBean; /** * The implementation of the model DAO Reads and stores the top level model information Encapsulates access to this @@ -98,44 +94,1034 @@ public class PermissionModel implements ModelDAO private String model; - // Aprrox 6 - default size OK - private ConcurrentHashMap permissionSets = new ConcurrentHashMap(128, 1.0f, 16); + /* + * (non-Javadoc) + * @seeorg.alfresco.repo.security.permissions.impl.ModelDAO#hasFull(org.alfresco.repo.security.permissions. + * PermissionReference) + */ + private static PermissionReference ALL = SimplePermissionReference.getPermissionReference(QName.createQName(NamespaceService.SECURITY_MODEL_1_0_URI, + PermissionService.ALL_PERMISSIONS), PermissionService.ALL_PERMISSIONS); - // Global permissions - default size OK - private Set globalPermissions = Collections.synchronizedSet(new HashSet()); + private static class MutableState + { + private final DictionaryService dictionaryService; - private AccessStatus defaultPermission; - - // Cache granting permissions - private ConcurrentHashMap> grantingPermissions = new ConcurrentHashMap>(256, 1.0f, - 32); - - // Cache grantees - private ConcurrentHashMap> granteePermissions = new ConcurrentHashMap>(256, 1.0f, - 32); - - // Cache the mapping of extended groups to the base - private ConcurrentHashMap groupsToBaseGroup = new ConcurrentHashMap(256, 1.0f, 32); - - private ConcurrentHashMap uniqueMap; - - private ConcurrentHashMap permissionMap; - - private ConcurrentHashMap permissionGroupMap; - - private ConcurrentHashMap permissionReferenceMap; - - private ConcurrentHashMap> cachedTypePermissionsExposed = new ConcurrentHashMap>(256, 1.0f, 32); - - private ConcurrentHashMap> cachedTypePermissionsUnexposed = new ConcurrentHashMap>(256, 1.0f, 32); - - private Collection allAspects; - - private ConcurrentHashMap> requiredPermissionsCache = new ConcurrentHashMap>(1024); - private PermissionGroup group; + // Aprrox 6 - default size OK + private Map permissionSets = new HashMap(128); - private ConcurrentHashMap, Set> unconditionalRequiredPermissionsCache = new ConcurrentHashMap, Set>(1024); + // Global permissions - default size OK + private Set globalPermissions = new HashSet(); + private AccessStatus defaultPermission; + + private Collection allAspects; + + private Map uniqueMap; + + private Map permissionMap; + + private Map permissionGroupMap; + + private Map permissionReferenceMap; + + private Map> grantingPermissions = new HashMap>(256); + + // Cache grantees + private Map> granteePermissions = new HashMap>(256); + + // Cache the mapping of extended groups to the base + private Map groupsToBaseGroup = new HashMap(256); + + private Map> requiredPermissionsCache = new HashMap>(1024); + + private Map, Set> unconditionalRequiredPermissionsCache = new HashMap, Set>(1024); + + private Map> cachedTypePermissionsExposed = new HashMap>(256); + + private Map> cachedTypePermissionsUnexposed = new HashMap>(256); + + private ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + + public MutableState(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + + public boolean checkPermission(PermissionReference required) + { + Permission permission = getPermissionOrNull(required); + if (permission != null) + { + return true; + } + PermissionGroup pg = getPermissionGroupOrNull(required); + if (pg != null) + { + if (pg.isExtends()) + { + if (pg.getTypeQName() != null) + { + return checkPermission(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName())); + } + else + { + ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); + QName parent; + while ((parent = classDefinition.getParentName()) != null) + { + classDefinition = dictionaryService.getClass(parent); + + PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); + if ((attempt != null) && attempt.isAllowFullControl()) + { + return true; + } + } + return false; + } + } + else + { + return pg.isAllowFullControl(); + } + } + else + { + return false; + } + } + + private Set getAllPermissionsImpl(QName type, boolean exposedOnly) + { + Map> cache; + if (exposedOnly) + { + cache = cachedTypePermissionsExposed; + } + else + { + cache = cachedTypePermissionsUnexposed; + } + Set permissions = cache.get(type); + if (permissions == null) + { + boolean hadWriteLock = lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + lock.readLock().unlock(); + lock.writeLock().lock(); + } + try + { + permissions = cache.get(type); + if (permissions == null) + { + permissions = new LinkedHashSet(256, 1.0f); + ClassDefinition cd = dictionaryService.getClass(type); + if (cd != null) + { + if (cd.isAspect()) + { + addAspectPermissions(type, permissions, exposedOnly); + } + else + { + mergeGeneralAspectPermissions(permissions, exposedOnly); + addTypePermissions(type, permissions, exposedOnly); + } + } + permissions = Collections.unmodifiableSet(permissions); + cache.put(type, permissions); + } + } + finally + { + if (!hadWriteLock) + { + lock.readLock().lock(); + lock.writeLock().unlock(); + } + } + } + return permissions; + } + + /** + * Support to add permissions for types + * + * @param type + * @param permissions + */ + private void addTypePermissions(QName type, Set permissions, boolean exposedOnly) + { + TypeDefinition typeDef = dictionaryService.getType(type); + if (typeDef == null) + { + // the type definition is no longer in the dictionary - ignore + return; + } + if (typeDef.getParentName() != null) + { + PermissionSet permissionSet = permissionSets.get(type); + if (!exposedOnly || (permissionSet == null) || permissionSet.exposeAll()) + { + addTypePermissions(typeDef.getParentName(), permissions, exposedOnly); + } + } + for (AspectDefinition ad : typeDef.getDefaultAspects()) + { + addAspectPermissions(ad.getName(), permissions, exposedOnly); + } + mergePermissions(permissions, type, exposedOnly, true); + } + + /** + * Support to add permissions for aspects. + * + * @param type + * @param permissions + */ + private void addAspectPermissions(QName type, Set permissions, boolean exposedOnly) + { + AspectDefinition aspectDef = dictionaryService.getAspect(type); + if (aspectDef == null) + { + // the aspect definition is no longer in the dictionary - ignore + return; + } + if (aspectDef.getParentName() != null) + { + PermissionSet permissionSet = permissionSets.get(type); + if (!exposedOnly || (permissionSet == null) || permissionSet.exposeAll()) + { + addAspectPermissions(aspectDef.getParentName(), permissions, exposedOnly); + } + } + mergePermissions(permissions, type, exposedOnly, true); + } + + /** + * Support to merge permissions together. Respects extended permissions. + * + * @param target + * @param type + */ + private void mergePermissions(Set target, QName type, boolean exposedOnly, boolean typeRequired) + { + PermissionSet permissionSet = permissionSets.get(type); + if (permissionSet != null) + { + for (PermissionGroup pg : permissionSet.getPermissionGroups()) + { + if (!exposedOnly || permissionSet.exposeAll() || pg.isExposed()) + { + if (!pg.isExtends()) + { + if (pg.isTypeRequired() == typeRequired) + { + target.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); + } + } + else if (exposedOnly) + { + if (pg.isTypeRequired() == typeRequired) + { + PermissionReference base = getBasePermissionGroup(pg); + target.add(SimplePermissionReference.getPermissionReference(base.getQName(), base.getName())); + } + } + } + } + for (Permission p : permissionSet.getPermissions()) + { + if (!exposedOnly || permissionSet.exposeAll() || p.isExposed()) + { + if (p.isTypeRequired() == typeRequired) + { + target.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + } + } + } + } + } + + private void mergeGeneralAspectPermissions(Set target, boolean exposedOnly) + { + for (QName aspect : allAspects) + { + mergePermissions(target, aspect, exposedOnly, false); + } + } + + /** + * Support to find permission groups + * + * @param target + * @return the permission group + */ + private PermissionGroup getPermissionGroupOrNull(PermissionReference target) + { + PermissionGroup pg = permissionGroupMap.get(target); + return pg == null ? null : pg; + } + + /** + * Support to get a permission group + * + * @param target + * @return the permission group + */ + private PermissionGroup getPermissionGroup(PermissionReference target) + { + PermissionGroup pg = getPermissionGroupOrNull(target); + if (pg == null) + { + throw new PermissionModelException("There is no permission group :" + target.getQName() + " " + target.getName()); + } + return pg; + } + + /** + * Get the base permission group for a given permission group. + * + * @param pg + * @return the permission group + */ + private PermissionGroup getBasePermissionGroupOrNull(PermissionGroup pg) + { + if (pg == null) + { + return null; + } + PermissionGroup permissionGroup = groupsToBaseGroup.get(pg); + if (permissionGroup == null) + { + boolean hadWriteLock = lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + lock.readLock().unlock(); + lock.writeLock().lock(); + } + permissionGroup = groupsToBaseGroup.get(pg); + if (permissionGroup == null) + { + permissionGroup = getBasePermissionGroupOrNullImpl(pg); + groupsToBaseGroup.put(pg, permissionGroup); + } + if (!hadWriteLock) + { + lock.readLock().lock(); + lock.writeLock().unlock(); + } + } + return permissionGroup; + } + + /** + * Query the model for a base permission group Uses the Data Dictionary to reolve inheritance + * + * @param pg + * @return the permission group + */ + private PermissionGroup getBasePermissionGroupOrNullImpl(PermissionGroup pg) + { + if (pg == null) + { + return null; + } + if (pg.isExtends()) + { + if (pg.getTypeQName() != null) + { + return getPermissionGroup(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName())); + } + else + { + ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); + QName parent; + while ((parent = classDefinition.getParentName()) != null) + { + classDefinition = dictionaryService.getClass(parent); + PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); + if ((attempt != null) && (!attempt.isExtends())) + { + return attempt; + } + } + return null; + } + } + else + { + return pg; + } + } + + private PermissionGroup getBasePermissionGroup(PermissionGroup target) + { + PermissionGroup pg = getBasePermissionGroupOrNull(target); + if (pg == null) + { + throw new PermissionModelException("There is no parent for permission group :" + target.getQName() + " " + target.getName()); + } + return pg; + } + + private Set getGrantingPermissionsImpl(PermissionReference permissionReference) + { + // Query the model + HashSet permissions = new HashSet(256, 1.0f); + permissions.add(permissionReference); + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + if (grants(pg, permissionReference)) + { + permissions.add(getBasePermissionGroup(pg)); + } + if (pg.isAllowFullControl()) + { + permissions.add(pg); + } + } + for (Permission p : ps.getPermissions()) + { + if (p.equals(permissionReference)) + { + for (PermissionReference pg : p.getGrantedToGroups()) + { + permissions.add(getBasePermissionGroup(getPermissionGroup(pg))); + } + } + for (RequiredPermission rp : p.getRequiredPermissions()) + { + if (rp.equals(permissionReference) && rp.isImplies()) + { + permissions.add(p); + break; + } + } + } + } + return permissions; + } + + private boolean grants(PermissionGroup pg, PermissionReference permissionReference) + { + if (pg.getIncludedPermissionGroups().contains(permissionReference)) + { + return true; + } + if (getGranteePermissions(pg).contains(permissionReference)) + { + return true; + } + + for (PermissionReference nested : pg.getIncludedPermissionGroups()) + { + if (grants(getPermissionGroup(nested), permissionReference)) + { + return true; + } + } + return false; + } + + private Set getGranteePermissionsImpl(PermissionReference permissionReference) + { + // Query the model (we have the write lock) + HashSet permissions = new HashSet(256, 1.0f); + permissions.add(permissionReference); + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + if (pg.equals(permissionReference)) + { + for (PermissionReference included : pg.getIncludedPermissionGroups()) + { + permissions.addAll(getGranteePermissions(included)); + } + + if (pg.isExtends()) + { + if (pg.getTypeQName() != null) + { + permissions.addAll(getGranteePermissions(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName()))); + } + else + { + ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); + QName parent = classDefinition.getParentName(); + if (parent != null) + { + classDefinition = dictionaryService.getClass(parent); + PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); + if (attempt != null) + { + permissions.addAll(getGranteePermissions(attempt)); + } + } + } + } + + if (pg.isAllowFullControl()) + { + // add all available + permissions.addAll(getAllPermissions()); + } + } + } + PermissionGroup baseGroup = getBasePermissionGroupOrNull(getPermissionGroupOrNull(permissionReference)); + if (baseGroup != null) + { + for (Permission p : ps.getPermissions()) + { + for (PermissionReference grantedTo : p.getGrantedToGroups()) + { + PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); + if (baseGroup.equals(base)) + { + permissions.add(p); + } + } + } + } + } + return permissions; + } + + private Set getImmediateGranteePermissionsImpl(PermissionReference permissionReference) + { + // Query the model + HashSet permissions = new HashSet(256); + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + if (pg.equals(permissionReference)) + { + for (PermissionReference included : pg.getIncludedPermissionGroups()) + { + permissions.add(included); + } + + if (pg.isExtends()) + { + if (pg.getTypeQName() != null) + { + permissions.addAll(getImmediateGranteePermissions(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName()))); + } + else + { + ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); + QName parent = classDefinition.getParentName(); + if (parent != null) + { + classDefinition = dictionaryService.getClass(parent); + PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); + if (attempt != null) + { + permissions.addAll(getImmediateGranteePermissions(attempt)); + } + } + } + } + + if (pg.isAllowFullControl()) + { + // add all available + permissions.addAll(getAllPermissions()); + } + } + } + PermissionGroup baseGroup = getBasePermissionGroupOrNull(getPermissionGroupOrNull(permissionReference)); + if (baseGroup != null) + { + for (Permission p : ps.getPermissions()) + { + for (PermissionReference grantedTo : p.getGrantedToGroups()) + { + PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); + if (baseGroup.equals(base)) + { + permissions.add(p); + } + } + } + } + } + return permissions; + } + + private Set getAllPermissions() + { + HashSet permissions = new HashSet(256, 1.0f); + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + permissions.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); + } + for (Permission p : ps.getPermissions()) + { + permissions.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + } + } + return permissions; + } + + private Set getGranteePermissions(PermissionReference permissionReference) + { + if(permissionReference == null) + { + return Collections.emptySet(); + } + + // Cache the results + Set grantees = granteePermissions.get(permissionReference); + if (grantees == null) + { + boolean hadWriteLock = lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + lock.readLock().unlock(); + lock.writeLock().lock(); + } + try + { + grantees = granteePermissions.get(permissionReference); + if (grantees == null) + { + Set internal = getGranteePermissionsImpl(permissionReference); + grantees = new HashSet(); + for (PermissionReference grantee : internal) + { + grantees.add(SimplePermissionReference.getPermissionReference(grantee.getQName(), grantee.getName())); + } + grantees = Collections.unmodifiableSet(grantees); + granteePermissions.put(permissionReference, grantees); + } + } + finally + { + if (!hadWriteLock) + { + lock.readLock().lock(); + lock.writeLock().unlock(); + } + } + } + return grantees; + } + + private Set getImmediateGranteePermissions(PermissionReference permissionReference) + { + // Cache the results + + Set internal = getImmediateGranteePermissionsImpl(permissionReference); + Set grantees = new HashSet(); + for (PermissionReference grantee : internal) + { + grantees.add(SimplePermissionReference.getPermissionReference(grantee.getQName(), grantee.getName())); + } + grantees = Collections.unmodifiableSet(grantees); + + return grantees; + } + + private Set getRequiredPermissions(PermissionReference required, QName qName, Set aspectQNames, RequiredPermission.On on) + { + // Cache lookup as this is static + if((required == null) || (qName == null)) + { + return Collections.emptySet(); + } + + RequiredKey key = generateKey(required, qName, aspectQNames, on); + + Set answer = requiredPermissionsCache.get(key); + if (answer == null) + { + boolean hadWriteLock = lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + lock.readLock().unlock(); + lock.writeLock().lock(); + } + try + { + answer = requiredPermissionsCache.get(key); + if (answer == null) + { + PermissionGroup pg = getBasePermissionGroupOrNull(getPermissionGroupOrNull(required)); + if (pg == null) + { + answer = getRequirementsForPermission(required, on); + } + else + { + answer = getRequirementsForPermissionGroup(pg, on, qName, aspectQNames); + } + answer = Collections.unmodifiableSet(answer); + requiredPermissionsCache.put(key, answer); + } + } + finally + { + if (!hadWriteLock) + { + lock.readLock().lock(); + lock.writeLock().unlock(); + } + } + } + return answer; + } + + private Set getUnconditionalRequiredPermissions(PermissionReference required, RequiredPermission.On on) + { + // Cache lookup as this is static + if(required == null) + { + return Collections.emptySet(); + } + Pair key = new Pair(required, on); + + Set answer = unconditionalRequiredPermissionsCache.get(key); + if (answer == null) + { + boolean hadWriteLock = lock.isWriteLockedByCurrentThread(); + if (!hadWriteLock) + { + lock.readLock().unlock(); + lock.writeLock().lock(); + } + try + { + answer = unconditionalRequiredPermissionsCache.get(key); + if (answer == null) + { + PermissionGroup pg = getBasePermissionGroupOrNull(getPermissionGroupOrNull(required)); + if (pg == null) + { + answer = getRequirementsForPermission(required, on); + } + else + { + answer = getUnconditionalRequirementsForPermissionGroup(pg, on); + } + answer = Collections.unmodifiableSet(answer); + unconditionalRequiredPermissionsCache.put(key, answer); + } + } + finally + { + if (!hadWriteLock) + { + lock.readLock().lock(); + lock.writeLock().unlock(); + } + } + } + return answer; + } + + /** + * Get the requirements for a permission + * + * @param required + * @param on + * @return the set of permission references + */ + private Set getRequirementsForPermission(PermissionReference required, RequiredPermission.On on) + { + HashSet requiredPermissions = new HashSet(); + Permission p = getPermissionOrNull(required); + if (p != null) + { + for (RequiredPermission rp : p.getRequiredPermissions()) + { + if (!rp.isImplies() && rp.getOn().equals(on)) + { + requiredPermissions.add(rp); + } + } + } + return requiredPermissions; + } + + /** + * Get the requirements for a permission set + * + * @param target + * @param on + * @param qName + * @param aspectQNames + * @return the set of permission references + */ + private Set getRequirementsForPermissionGroup(PermissionGroup target, RequiredPermission.On on, QName qName, Set aspectQNames) + { + HashSet requiredPermissions = new HashSet(16, 1.0f); + if (target == null) + { + return requiredPermissions; + } + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + PermissionGroup base = getBasePermissionGroupOrNull(pg); + if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired() || isPartOfDynamicPermissionGroup(pg, qName, aspectQNames))) + { + // Add includes + for (PermissionReference pr : pg.getIncludedPermissionGroups()) + { + requiredPermissions.addAll(getRequirementsForPermissionGroup(getBasePermissionGroupOrNull(getPermissionGroupOrNull(pr)), on, qName, aspectQNames)); + } + } + } + for (Permission p : ps.getPermissions()) + { + for (PermissionReference grantedTo : p.getGrantedToGroups()) + { + PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); + if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired() || isPartOfDynamicPermissionGroup(grantedTo, qName, aspectQNames))) + { + if (on == RequiredPermission.On.NODE) + { + requiredPermissions.add(p); + } + } + } + } + } + return requiredPermissions; + } + + private Set getUnconditionalRequirementsForPermissionGroup(PermissionGroup target, RequiredPermission.On on) + { + HashSet requiredPermissions = new HashSet(16, 1.0f); + if (target == null) + { + return requiredPermissions; + } + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + PermissionGroup base = getBasePermissionGroupOrNull(pg); + if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired())) + { + // Add includes + for (PermissionReference pr : pg.getIncludedPermissionGroups()) + { + requiredPermissions.addAll(getUnconditionalRequirementsForPermissionGroup(getBasePermissionGroupOrNull(getPermissionGroupOrNull(pr)), on)); + } + } + } + for (Permission p : ps.getPermissions()) + { + for (PermissionReference grantedTo : p.getGrantedToGroups()) + { + PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); + if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired())) + { + if (on == RequiredPermission.On.NODE) + { + requiredPermissions.add(p); + } + } + } + } + } + return requiredPermissions; + } + + /** + * Utility method to find a permission + * + * @param perm + * @return the permission + */ + private Permission getPermissionOrNull(PermissionReference perm) + { + Permission p = permissionMap.get(perm); + return p == null ? null : p; + } + + /** + * Check type specifc extension of permission sets. + * + * @param pr + * @param typeQname + * @param aspects + * @return true if dynamic + */ + private boolean isPartOfDynamicPermissionGroup(PermissionReference pr, QName typeQname, Set aspects) + { + if (dictionaryService.isSubClass(typeQname, pr.getQName())) + { + return true; + } + for (QName aspect : aspects) + { + if (dictionaryService.isSubClass(aspect, pr.getQName())) + { + return true; + } + } + return false; + } + + public PermissionReference getPermissionReference(QName qname, String permissionName) + { + if (permissionName == null) + { + return null; + } + PermissionReference pr = uniqueMap.get(permissionName); + if (pr == null) + { + pr = permissionReferenceMap.get(permissionName); + if (pr == null) + { + throw new UnsupportedOperationException("Can not find " + permissionName); + } + } + return pr; + + } + + public boolean isUnique(PermissionReference permissionReference) + { + return uniqueMap.containsKey(permissionReference.getName()); + } + + private void buildUniquePermissionMap() + { + Set excluded = new HashSet(128, 1.0f); + uniqueMap = new HashMap(256); + permissionReferenceMap = new HashMap(256); + permissionGroupMap = new HashMap(128); + permissionMap = new HashMap(64); + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + permissionGroupMap.put(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName()), pg); + permissionReferenceMap.put(pg.toString(), SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); + } + for (Permission p : ps.getPermissions()) + { + permissionReferenceMap.put(p.toString(), SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + permissionMap.put(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName()), p); + } + } + + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + if (uniqueMap.containsKey(pg.getName()) && !excluded.contains(pg.getName())) + { + PermissionReference value = uniqueMap.get(pg.getName()); + if (!value.equals(getBasePermissionGroup(pg))) + { + uniqueMap.remove(pg.getName()); + excluded.add(pg.getName()); + } + } + else + { + PermissionReference base = getBasePermissionGroup(pg); + uniqueMap.put(pg.getName(), SimplePermissionReference.getPermissionReference(base.getQName(), base.getName())); + } + } + for (Permission p : ps.getPermissions()) + { + if (uniqueMap.containsKey(p.getName()) && !excluded.contains(p.getName())) + { + PermissionReference value = uniqueMap.get(p.getName()); + if (!value.equals(p)) + { + uniqueMap.remove(p.getName()); + excluded.add(p.getName()); + } + } + else + { + uniqueMap.put(p.getName(), SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + } + } + } + // Add all permissions to the unique list + if (uniqueMap.containsKey(PermissionService.ALL_PERMISSIONS)) + { + throw new IllegalStateException("There must not be a permission with the same name as the ALL_PERMISSION constant: " + PermissionService.ALL_PERMISSIONS); + } + uniqueMap.put(PermissionService.ALL_PERMISSIONS, SimplePermissionReference.getPermissionReference(QName.createQName(NamespaceService.SECURITY_MODEL_1_0_URI, + PermissionService.ALL_PERMISSIONS), PermissionService.ALL_PERMISSIONS)); + + } + + private boolean hasFull(PermissionReference permissionReference) + { + if (permissionReference == null) + { + return false; + } + if(permissionReference.equals(ALL)) + { + return true; + } + PermissionGroup group = getPermissionGroupOrNull(permissionReference); + if (group == null) + { + return false; + } + else + { + if (group.isAllowFullControl()) + { + return true; + } + else + { + if(group.isExtends()) + { + if (group.getTypeQName() != null) + { + return hasFull(SimplePermissionReference.getPermissionReference(group.getTypeQName(), group.getName())); + } + else + { + ClassDefinition classDefinition = dictionaryService.getClass(group.getQName()); + QName parent; + while ((parent = classDefinition.getParentName()) != null) + { + classDefinition = dictionaryService.getClass(parent); + PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, group.getName())); + if ((attempt != null) && (attempt.isAllowFullControl())) + { + return true; + } + } + return false; + } + } + else + { + return false; + } + } + } + } + } + + private MutableState mutableState; + /** * Default constructor */ @@ -181,6 +1167,7 @@ public class PermissionModel implements ModelDAO */ public void init() { + mutableState = new MutableState(dictionaryService); addPermissionModel(this.model); } @@ -191,74 +1178,83 @@ public class PermissionModel implements ModelDAO * path to the permission model to add */ public void addPermissionModel(String model) - { + { Document document = createDocument(model); Element root = document.getRootElement(); - Attribute defaultPermissionAttribute = root.attribute(DEFAULT_PERMISSION); - if (defaultPermissionAttribute != null) + mutableState.lock.writeLock().lock(); + + try { - if (defaultPermissionAttribute.getStringValue().equalsIgnoreCase(ALLOW)) + Attribute defaultPermissionAttribute = root.attribute(DEFAULT_PERMISSION); + if (defaultPermissionAttribute != null) { - defaultPermission = AccessStatus.ALLOWED; - } - else if (defaultPermissionAttribute.getStringValue().equalsIgnoreCase(DENY)) - { - defaultPermission = AccessStatus.DENIED; + if (defaultPermissionAttribute.getStringValue().equalsIgnoreCase(ALLOW)) + { + mutableState.defaultPermission = AccessStatus.ALLOWED; + } + else if (defaultPermissionAttribute.getStringValue().equalsIgnoreCase(DENY)) + { + mutableState.defaultPermission = AccessStatus.DENIED; + } + else + { + throw new PermissionModelException("The default permission must be deny or allow"); + } } else { - throw new PermissionModelException("The default permission must be deny or allow"); + mutableState.defaultPermission = AccessStatus.DENIED; } - } - else - { - defaultPermission = AccessStatus.DENIED; - } - - DynamicNamespacePrefixResolver nspr = new DynamicNamespacePrefixResolver(); - - // Namespaces - - for (Iterator nsit = root.elementIterator(NAMESPACES); nsit.hasNext(); /**/) - { - Element namespacesElement = (Element) nsit.next(); - for (Iterator it = namespacesElement.elementIterator(NAMESPACE); it.hasNext(); /**/) - { - Element nameSpaceElement = (Element) it.next(); - nspr.registerNamespace(nameSpaceElement.attributeValue(NAMESPACE_PREFIX), nameSpaceElement.attributeValue(NAMESPACE_URI)); - } - } - - // Permission Sets - - for (Iterator psit = root.elementIterator(PERMISSION_SET); psit.hasNext(); /**/) - { - Element permissionSetElement = (Element) psit.next(); - PermissionSet permissionSet = new PermissionSet(); - permissionSet.initialise(permissionSetElement, nspr, this); - - permissionSets.put(permissionSet.getQName(), permissionSet); - } - - buildUniquePermissionMap(); - - // NodePermissions - - for (Iterator npit = root.elementIterator(GLOBAL_PERMISSION); npit.hasNext(); /**/) - { - Element globalPermissionElement = (Element) npit.next(); - GlobalPermissionEntry globalPermission = new GlobalPermissionEntry(); - globalPermission.initialise(globalPermissionElement, nspr, this); - - globalPermissions.add(globalPermission); - } - - // Cache all aspect list - - allAspects = dictionaryService.getAllAspects(); - } + DynamicNamespacePrefixResolver nspr = new DynamicNamespacePrefixResolver(); + + // Namespaces + + for (Iterator nsit = root.elementIterator(NAMESPACES); nsit.hasNext(); /**/) + { + Element namespacesElement = (Element) nsit.next(); + for (Iterator it = namespacesElement.elementIterator(NAMESPACE); it.hasNext(); /**/) + { + Element nameSpaceElement = (Element) it.next(); + nspr.registerNamespace(nameSpaceElement.attributeValue(NAMESPACE_PREFIX), nameSpaceElement.attributeValue(NAMESPACE_URI)); + } + } + + // Permission Sets + + for (Iterator psit = root.elementIterator(PERMISSION_SET); psit.hasNext(); /**/) + { + Element permissionSetElement = (Element) psit.next(); + PermissionSet permissionSet = new PermissionSet(); + permissionSet.initialise(permissionSetElement, nspr, this); + + mutableState.permissionSets.put(permissionSet.getQName(), permissionSet); + } + + mutableState.buildUniquePermissionMap(); + + // NodePermissions + + for (Iterator npit = root.elementIterator(GLOBAL_PERMISSION); npit.hasNext(); /**/) + { + Element globalPermissionElement = (Element) npit.next(); + GlobalPermissionEntry globalPermission = new GlobalPermissionEntry(); + globalPermission.initialise(globalPermissionElement, nspr, this); + + mutableState.globalPermissions.add(globalPermission); + } + + // Cache all aspect list + + mutableState.allAspects = dictionaryService.getAllAspects(); + } + finally + { + mutableState.lock.writeLock().unlock(); + } + } + /* * Create the XML document from the file location */ @@ -294,6 +1290,10 @@ public class PermissionModel implements ModelDAO */ public AccessStatus getDefaultPermission() { + AccessStatus defaultPermission; + mutableState.lock.readLock().lock(); + defaultPermission = mutableState.defaultPermission; + mutableState.lock.readLock().unlock(); return defaultPermission; } @@ -305,20 +1305,36 @@ public class PermissionModel implements ModelDAO */ public AccessStatus getDefaultPermission(PermissionReference pr) { - Permission p = permissionMap.get(pr); - if (p == null) + mutableState.lock.readLock().lock(); + try { - return defaultPermission; + Permission p = mutableState.permissionMap.get(pr); + if (p == null) + { + return mutableState.defaultPermission; + } + else + { + return p.getDefaultPermission(); + } } - else + finally { - return p.getDefaultPermission(); + mutableState.lock.readLock().unlock(); } } public Set getGlobalPermissionEntries() { - return Collections.unmodifiableSet(globalPermissions); + mutableState.lock.readLock().lock(); + try + { + return Collections.unmodifiableSet(new HashSet(mutableState.globalPermissions)); + } + finally + { + mutableState.lock.readLock().unlock(); + } } /** @@ -328,7 +1344,15 @@ public class PermissionModel implements ModelDAO */ public Map getPermissionSets() { - return Collections.unmodifiableMap(permissionSets); + mutableState.lock.readLock().lock(); + try + { + return Collections.unmodifiableMap(new HashMap(mutableState.permissionSets)); + } + finally + { + mutableState.lock.readLock().unlock(); + } } public Set getAllPermissions(QName type) @@ -341,147 +1365,6 @@ public class PermissionModel implements ModelDAO return getAllPermissionsImpl(type, null, true); } - private Set getAllPermissionsImpl(QName type, boolean exposedOnly) - { - ConcurrentHashMap> cache; - if (exposedOnly) - { - cache = this.cachedTypePermissionsExposed; - } - else - { - cache = this.cachedTypePermissionsUnexposed; - } - Set permissions = cache.get(type); - if (permissions == null) - { - permissions = new LinkedHashSet(256, 1.0f); - ClassDefinition cd = dictionaryService.getClass(type); - if (cd != null) - { - if (cd.isAspect()) - { - addAspectPermissions(type, permissions, exposedOnly); - } - else - { - mergeGeneralAspectPermissions(permissions, exposedOnly); - addTypePermissions(type, permissions, exposedOnly); - } - } - permissions = Collections.unmodifiableSet(permissions); - cache.put(type, permissions); - } - return permissions; - } - - /** - * Support to add permissions for types - * - * @param type - * @param permissions - */ - private void addTypePermissions(QName type, Set permissions, boolean exposedOnly) - { - TypeDefinition typeDef = dictionaryService.getType(type); - if (typeDef == null) - { - // the type definition is no longer in the dictionary - ignore - return; - } - if (typeDef.getParentName() != null) - { - PermissionSet permissionSet = permissionSets.get(type); - if (!exposedOnly || (permissionSet == null) || permissionSet.exposeAll()) - { - addTypePermissions(typeDef.getParentName(), permissions, exposedOnly); - } - } - for (AspectDefinition ad : typeDef.getDefaultAspects()) - { - addAspectPermissions(ad.getName(), permissions, exposedOnly); - } - mergePermissions(permissions, type, exposedOnly, true); - } - - /** - * Support to add permissions for aspects. - * - * @param type - * @param permissions - */ - private void addAspectPermissions(QName type, Set permissions, boolean exposedOnly) - { - AspectDefinition aspectDef = dictionaryService.getAspect(type); - if (aspectDef == null) - { - // the aspect definition is no longer in the dictionary - ignore - return; - } - if (aspectDef.getParentName() != null) - { - PermissionSet permissionSet = permissionSets.get(type); - if (!exposedOnly || (permissionSet == null) || permissionSet.exposeAll()) - { - addAspectPermissions(aspectDef.getParentName(), permissions, exposedOnly); - } - } - mergePermissions(permissions, type, exposedOnly, true); - } - - /** - * Support to merge permissions together. Respects extended permissions. - * - * @param target - * @param type - */ - private void mergePermissions(Set target, QName type, boolean exposedOnly, boolean typeRequired) - { - PermissionSet permissionSet = permissionSets.get(type); - if (permissionSet != null) - { - for (PermissionGroup pg : permissionSet.getPermissionGroups()) - { - if (!exposedOnly || permissionSet.exposeAll() || pg.isExposed()) - { - if (!pg.isExtends()) - { - if (pg.isTypeRequired() == typeRequired) - { - target.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); - } - } - else if (exposedOnly) - { - if (pg.isTypeRequired() == typeRequired) - { - PermissionReference base = getBasePermissionGroup(pg); - target.add(SimplePermissionReference.getPermissionReference(base.getQName(), base.getName())); - } - } - } - } - for (Permission p : permissionSet.getPermissions()) - { - if (!exposedOnly || permissionSet.exposeAll() || p.isExposed()) - { - if (p.isTypeRequired() == typeRequired) - { - target.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); - } - } - } - } - } - - private void mergeGeneralAspectPermissions(Set target, boolean exposedOnly) - { - for (QName aspect : allAspects) - { - mergePermissions(target, aspect, exposedOnly, false); - } - } - public Set getAllPermissions(NodeRef nodeRef) { return getAllPermissionsImpl(nodeService.getType(nodeRef), nodeService.getAspects(nodeRef), false); @@ -502,382 +1385,70 @@ public class PermissionModel implements ModelDAO Set permissions = new LinkedHashSet(128, 1.0f); ClassDefinition cd = dictionaryService.getClass(typeName); - permissions.addAll(getAllPermissionsImpl(typeName, exposedOnly)); - - if (cd != null && aspects != null) + mutableState.lock.readLock().lock(); + try { - Set defaultAspects = cd.getDefaultAspectNames(); - for (QName aspect : aspects) + permissions.addAll(mutableState.getAllPermissionsImpl(typeName, exposedOnly)); + + if (cd != null && aspects != null) { - if (!defaultAspects.contains(aspect)) + Set defaultAspects = cd.getDefaultAspectNames(); + for (QName aspect : aspects) { - addAspectPermissions(aspect, permissions, exposedOnly); + if (!defaultAspects.contains(aspect)) + { + mutableState.addAspectPermissions(aspect, permissions, exposedOnly); + } } } } + finally + { + mutableState.lock.readLock().unlock(); + } return permissions; } - public synchronized Set getGrantingPermissions(PermissionReference permissionReference) + public Set getGrantingPermissions(PermissionReference permissionReference) { - if (permissionReference == null) + if(permissionReference == null) { - return Collections. emptySet(); + return Collections.emptySet(); } + + mutableState.lock.readLock().lock(); // Cache the results - Set granters = grantingPermissions.get(permissionReference); + Set granters = mutableState.grantingPermissions.get(permissionReference); if (granters == null) { - Set internal = getGrantingPermissionsImpl(permissionReference); - granters = new HashSet(); - for (PermissionReference grantee : internal) + mutableState.lock.readLock().unlock(); + mutableState.lock.writeLock().lock(); + + try { - granters.add(SimplePermissionReference.getPermissionReference(grantee.getQName(), grantee.getName())); - } - granters = Collections.unmodifiableSet(granters); - grantingPermissions.put(permissionReference, granters); - } - return granters; - } - - private Set getGrantingPermissionsImpl(PermissionReference permissionReference) - { - // Query the model - HashSet permissions = new HashSet(256, 1.0f); - permissions.add(permissionReference); - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - if (grants(pg, permissionReference)) - { - permissions.add(getBasePermissionGroup(pg)); - } - if (pg.isAllowFullControl()) - { - permissions.add(pg); + granters = mutableState.grantingPermissions.get(permissionReference); + if (granters == null) + { + Set internal = mutableState.getGrantingPermissionsImpl(permissionReference); + granters = new HashSet(); + for (PermissionReference grantee : internal) + { + granters.add(SimplePermissionReference.getPermissionReference(grantee.getQName(), grantee.getName())); + } + granters = Collections.unmodifiableSet(granters); + mutableState.grantingPermissions.put(permissionReference, granters); } } - for (Permission p : ps.getPermissions()) + finally { - if (p.equals(permissionReference)) - { - for (PermissionReference pg : p.getGrantedToGroups()) - { - permissions.add(getBasePermissionGroup(getPermissionGroup(pg))); - } - } - for (RequiredPermission rp : p.getRequiredPermissions()) - { - if (rp.equals(permissionReference) && rp.isImplies()) - { - permissions.add(p); - break; - } - } - } - } - return permissions; - } - - private boolean grants(PermissionGroup pg, PermissionReference permissionReference) - { - if (pg.getIncludedPermissionGroups().contains(permissionReference)) - { - return true; - } - if (getGranteePermissions(pg).contains(permissionReference)) - { - return true; - } - for (PermissionReference nested : pg.getIncludedPermissionGroups()) - { - if (grants(getPermissionGroup(nested), permissionReference)) - { - return true; - } - } - return false; - } - - public synchronized Set getGranteePermissions(PermissionReference permissionReference) - { - if (permissionReference == null) - { - return Collections. emptySet(); - } - // Cache the results - Set grantees = granteePermissions.get(permissionReference); - if (grantees == null) - { - Set internal = getGranteePermissionsImpl(permissionReference); - grantees = new HashSet(); - for (PermissionReference grantee : internal) - { - grantees.add(SimplePermissionReference.getPermissionReference(grantee.getQName(), grantee.getName())); - } - grantees = Collections.unmodifiableSet(grantees); - granteePermissions.put(permissionReference, grantees); - } - return grantees; - } - - public synchronized Set getImmediateGranteePermissions(PermissionReference permissionReference) - { - // Cache the results - - Set internal = getImmediateGranteePermissionsImpl(permissionReference); - Set grantees = new HashSet(); - for (PermissionReference grantee : internal) - { - grantees.add(SimplePermissionReference.getPermissionReference(grantee.getQName(), grantee.getName())); - } - grantees = Collections.unmodifiableSet(grantees); - - return grantees; - } - - private Set getGranteePermissionsImpl(PermissionReference permissionReference) - { - // Query the model - HashSet permissions = new HashSet(256, 1.0f); - permissions.add(permissionReference); - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - if (pg.equals(permissionReference)) - { - for (PermissionReference included : pg.getIncludedPermissionGroups()) - { - permissions.addAll(getGranteePermissions(included)); - } - - if (pg.isExtends()) - { - if (pg.getTypeQName() != null) - { - permissions.addAll(getGranteePermissions(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName()))); - } - else - { - ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); - QName parent = classDefinition.getParentName(); - if (parent != null) - { - classDefinition = dictionaryService.getClass(parent); - PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); - if (attempt != null) - { - permissions.addAll(getGranteePermissions(attempt)); - } - } - } - } - - if (pg.isAllowFullControl()) - { - // add all available - permissions.addAll(getAllPermissions()); - } - } - } - PermissionGroup baseGroup = getBasePermissionGroupOrNull(getPermissionGroupOrNull(permissionReference)); - if (baseGroup != null) - { - for (Permission p : ps.getPermissions()) - { - for (PermissionReference grantedTo : p.getGrantedToGroups()) - { - PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); - if (baseGroup.equals(base)) - { - permissions.add(p); - } - } - } - } - } - return permissions; - } - - private Set getImmediateGranteePermissionsImpl(PermissionReference permissionReference) - { - // Query the model - HashSet permissions = new HashSet(256, 1.0f); - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - if (pg.equals(permissionReference)) - { - for (PermissionReference included : pg.getIncludedPermissionGroups()) - { - permissions.add(included); - } - - if (pg.isExtends()) - { - if (pg.getTypeQName() != null) - { - permissions.addAll(getImmediateGranteePermissions(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName()))); - } - else - { - ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); - QName parent = classDefinition.getParentName(); - if (parent != null) - { - classDefinition = dictionaryService.getClass(parent); - PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); - if (attempt != null) - { - permissions.addAll(getImmediateGranteePermissions(attempt)); - } - } - } - } - - if (pg.isAllowFullControl()) - { - // add all available - permissions.addAll(getAllPermissions()); - } - } - } - PermissionGroup baseGroup = getBasePermissionGroupOrNull(getPermissionGroupOrNull(permissionReference)); - if (baseGroup != null) - { - for (Permission p : ps.getPermissions()) - { - for (PermissionReference grantedTo : p.getGrantedToGroups()) - { - PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); - if (baseGroup.equals(base)) - { - permissions.add(p); - } - } - } - } - } - return permissions; - } - - public Set getAllPermissions() - { - HashSet permissions = new HashSet(256, 1.0f); - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - permissions.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); - } - for (Permission p : ps.getPermissions()) - { - permissions.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); - } - } - return permissions; - } - - /** - * Support to find permission groups - * - * @param target - * @return the permission group - */ - private PermissionGroup getPermissionGroupOrNull(PermissionReference target) - { - PermissionGroup pg = permissionGroupMap.get(target); - return pg == null ? null : pg; - } - - /** - * Support to get a permission group - * - * @param target - * @return the permission group - */ - private PermissionGroup getPermissionGroup(PermissionReference target) - { - PermissionGroup pg = getPermissionGroupOrNull(target); - if (pg == null) - { - throw new PermissionModelException("There is no permission group :" + target.getQName() + " " + target.getName()); - } - return pg; - } - - /** - * Get the base permission group for a given permission group. - * - * @param pg - * @return the permission group - */ - private synchronized PermissionGroup getBasePermissionGroupOrNull(PermissionGroup pg) - { - if (pg == null) - { - return null; - } - PermissionGroup permissionGroup = groupsToBaseGroup.get(pg); - if (permissionGroup == null) - { - permissionGroup = getBasePermissionGroupOrNullImpl(pg); - groupsToBaseGroup.put(pg, permissionGroup); - } - return permissionGroup; - } - - /** - * Query the model for a base permission group Uses the Data Dictionary to reolve inheritance - * - * @param pg - * @return the permission group - */ - private PermissionGroup getBasePermissionGroupOrNullImpl(PermissionGroup pg) - { - if (pg == null) - { - return null; - } - if (pg.isExtends()) - { - if (pg.getTypeQName() != null) - { - return getPermissionGroup(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName())); - } - else - { - ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); - QName parent; - while ((parent = classDefinition.getParentName()) != null) - { - classDefinition = dictionaryService.getClass(parent); - PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); - if ((attempt != null) && (!attempt.isExtends())) - { - return attempt; - } - } - return null; + mutableState.lock.writeLock().unlock(); } } else { - return pg; + mutableState.lock.readLock().unlock(); } - } - - private PermissionGroup getBasePermissionGroup(PermissionGroup target) - { - PermissionGroup pg = getBasePermissionGroupOrNull(target); - if (pg == null) - { - throw new PermissionModelException("There is no parent for permission group :" + target.getQName() + " " + target.getName()); - } - return pg; + return granters; } static RequiredKey generateKey(PermissionReference required, QName qName, Set aspectQNames, RequiredPermission.On on) @@ -904,7 +1475,7 @@ public class PermissionModel implements ModelDAO private static ReadWriteLock lock = new ReentrantReadWriteLock(); - private static ConcurrentHashMap, EnumMap>>> instances = new ConcurrentHashMap, EnumMap>>>(); + private static Map, EnumMap>>> instances = new HashMap, EnumMap>>>(); /** * factory for the key @@ -920,10 +1491,10 @@ public class PermissionModel implements ModelDAO lock.readLock().lock(); try { - ConcurrentHashMap, EnumMap>> byPermRef = instances.get(required); + Map, EnumMap>> byPermRef = instances.get(required); if (byPermRef != null) { - ConcurrentHashMap, EnumMap> byType = byPermRef.get(qName); + Map, EnumMap> byType = byPermRef.get(qName); if (byType != null) { EnumMap byAspects = byType.get(aspectQNames); @@ -946,17 +1517,17 @@ public class PermissionModel implements ModelDAO lock.writeLock().lock(); try { - ConcurrentHashMap, EnumMap>> byPermRef = instances.get(required); + Map, EnumMap>> byPermRef = instances.get(required); if (byPermRef == null) { - byPermRef = new ConcurrentHashMap, EnumMap>>(); + byPermRef = new HashMap, EnumMap>>(); instances.put(required, byPermRef); } - ConcurrentHashMap, EnumMap> byType = byPermRef.get(qName); + Map, EnumMap> byType = byPermRef.get(qName); if (byType == null) { - byType = new ConcurrentHashMap, EnumMap>(); + byType = new HashMap, EnumMap>(); byPermRef.put(qName, byType); } EnumMap byAspects = byType.get(aspectQNames); @@ -1052,430 +1623,181 @@ public class PermissionModel implements ModelDAO } - public Set getRequiredPermissions(PermissionReference required, QName qName, Set aspectQNames, RequiredPermission.On on) - { - // Cache lookup as this is static - if ((required == null) || (qName == null)) - { - return Collections. emptySet(); - } - - RequiredKey key = generateKey(required, qName, aspectQNames, on); - - Set answer = requiredPermissionsCache.get(key); - if (answer == null) - { - PermissionGroup pg = getBasePermissionGroupOrNull(getPermissionGroupOrNull(required)); - if (pg == null) - { - answer = getRequirementsForPermission(required, on); - } - else - { - answer = getRequirementsForPermissionGroup(pg, on, qName, aspectQNames); - } - answer = Collections.unmodifiableSet(answer); - requiredPermissionsCache.put(key, answer); - } - return answer; - } - - public Set getUnconditionalRequiredPermissions(PermissionReference required, RequiredPermission.On on) - { - // Cache lookup as this is static - if(required == null) - { - return Collections.emptySet(); - } - Pair key = new Pair(required, on); - - Set answer = unconditionalRequiredPermissionsCache.get(key); - if (answer == null) - { - PermissionGroup pg = getBasePermissionGroupOrNull(getPermissionGroupOrNull(required)); - if (pg == null) - { - answer = getRequirementsForPermission(required, on); - } - else - { - answer = getUnconditionalRequirementsForPermissionGroup(pg, on); - } - answer = Collections.unmodifiableSet(answer); - unconditionalRequiredPermissionsCache.put(key, answer); - } - return answer; - } - - /** - * Get the requirements for a permission - * - * @param required - * @param on - * @return the set of permission references - */ - private Set getRequirementsForPermission(PermissionReference required, RequiredPermission.On on) - { - HashSet requiredPermissions = new HashSet(); - Permission p = getPermissionOrNull(required); - if (p != null) - { - for (RequiredPermission rp : p.getRequiredPermissions()) - { - if (!rp.isImplies() && rp.getOn().equals(on)) - { - requiredPermissions.add(rp); - } - } - } - return requiredPermissions; - } - - /** - * Get the requirements for a permission set - * - * @param target - * @param on - * @param qName - * @param aspectQNames - * @return the set of permission references - */ - private Set getRequirementsForPermissionGroup(PermissionGroup target, RequiredPermission.On on, QName qName, Set aspectQNames) - { - HashSet requiredPermissions = new HashSet(16, 1.0f); - if (target == null) - { - return requiredPermissions; - } - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - PermissionGroup base = getBasePermissionGroupOrNull(pg); - if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired() || isPartOfDynamicPermissionGroup(pg, qName, aspectQNames))) - { - // Add includes - for (PermissionReference pr : pg.getIncludedPermissionGroups()) - { - requiredPermissions.addAll(getRequirementsForPermissionGroup(getBasePermissionGroupOrNull(getPermissionGroupOrNull(pr)), on, qName, aspectQNames)); - } - } - } - for (Permission p : ps.getPermissions()) - { - for (PermissionReference grantedTo : p.getGrantedToGroups()) - { - PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); - if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired() || isPartOfDynamicPermissionGroup(grantedTo, qName, aspectQNames))) - { - if (on == RequiredPermission.On.NODE) - { - requiredPermissions.add(p); - } - } - } - } - } - return requiredPermissions; - } - - private Set getUnconditionalRequirementsForPermissionGroup(PermissionGroup target, RequiredPermission.On on) - { - HashSet requiredPermissions = new HashSet(16, 1.0f); - if (target == null) - { - return requiredPermissions; - } - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - PermissionGroup base = getBasePermissionGroupOrNull(pg); - if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired())) - { - // Add includes - for (PermissionReference pr : pg.getIncludedPermissionGroups()) - { - requiredPermissions.addAll(getUnconditionalRequirementsForPermissionGroup(getBasePermissionGroupOrNull(getPermissionGroupOrNull(pr)), on)); - } - } - } - for (Permission p : ps.getPermissions()) - { - for (PermissionReference grantedTo : p.getGrantedToGroups()) - { - PermissionGroup base = getBasePermissionGroupOrNull(getPermissionGroupOrNull(grantedTo)); - if ((target.equals(base) || target.isAllowFullControl()) && (!base.isTypeRequired())) - { - if (on == RequiredPermission.On.NODE) - { - requiredPermissions.add(p); - } - } - } - } - } - return requiredPermissions; - } - - /** - * Check type specifc extension of permission sets. - * - * @param pr - * @param typeQname - * @param aspects - * @return true if dynamic - */ - private boolean isPartOfDynamicPermissionGroup(PermissionReference pr, QName typeQname, Set aspects) - { - if (dictionaryService.isSubClass(typeQname, pr.getQName())) - { - return true; - } - for (QName aspect : aspects) - { - if (dictionaryService.isSubClass(aspect, pr.getQName())) - { - return true; - } - } - return false; - } - - /** - * Utility method to find a permission - * - * @param perm - * @return the permission - */ - private Permission getPermissionOrNull(PermissionReference perm) - { - Permission p = permissionMap.get(perm); - return p == null ? null : p; - } - public boolean checkPermission(PermissionReference required) { - Permission permission = getPermissionOrNull(required); - if (permission != null) + mutableState.lock.readLock().lock(); + try { - return true; + return mutableState.checkPermission(required); } - PermissionGroup pg = getPermissionGroupOrNull(required); - if (pg != null) + finally { - if (pg.isExtends()) - { - if (pg.getTypeQName() != null) - { - return checkPermission(SimplePermissionReference.getPermissionReference(pg.getTypeQName(), pg.getName())); - } - else - { - ClassDefinition classDefinition = dictionaryService.getClass(pg.getQName()); - QName parent; - while ((parent = classDefinition.getParentName()) != null) - { - classDefinition = dictionaryService.getClass(parent); - PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, pg.getName())); - if ((attempt != null) && attempt.isAllowFullControl()) - { - return true; - } - } - return false; - } - } - else - { - return pg.isAllowFullControl(); - } + mutableState.lock.readLock().unlock(); } - else + } + + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getGranteePermissions(org.alfresco.repo.security.permissions.PermissionReference) + */ + public Set getGranteePermissions(PermissionReference permissionReference) + { + mutableState.lock.readLock().lock(); + try { - return false; + return mutableState.getGranteePermissions(permissionReference); + } + finally + { + mutableState.lock.readLock().unlock(); + } + } + + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getImmediateGranteePermissions(org.alfresco.repo.security.permissions.PermissionReference) + */ + public Set getImmediateGranteePermissions(PermissionReference permissionReference) + { + mutableState.lock.readLock().lock(); + try + { + return mutableState.getImmediateGranteePermissions(permissionReference); + } + finally + { + mutableState.lock.readLock().unlock(); } - } + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getPermissionReference(org.alfresco.service.namespace.QName, java.lang.String) + */ public PermissionReference getPermissionReference(QName qname, String permissionName) { - if (permissionName == null) + mutableState.lock.readLock().lock(); + try { - return null; + return mutableState.getPermissionReference(qname, permissionName); } - PermissionReference pr = uniqueMap.get(permissionName); - if (pr == null) + finally { - pr = permissionReferenceMap.get(permissionName); - if (pr == null) - { - throw new UnsupportedOperationException("Can not find " + permissionName); - } + mutableState.lock.readLock().unlock(); } - return pr; - } + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getRequiredPermissions(org.alfresco.repo.security.permissions.PermissionReference, org.alfresco.service.namespace.QName, java.util.Set, org.alfresco.repo.security.permissions.impl.RequiredPermission.On) + */ + public Set getRequiredPermissions(PermissionReference required, QName qName, + Set aspectQNames, On on) + { + mutableState.lock.readLock().lock(); + try + { + return mutableState.getRequiredPermissions(required, qName, aspectQNames, on); + } + finally + { + mutableState.lock.readLock().unlock(); + } + } + + + + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getUnconditionalRequiredPermissions(org.alfresco.repo.security.permissions.PermissionReference, org.alfresco.repo.security.permissions.impl.RequiredPermission.On) + */ + @Override + public Set getUnconditionalRequiredPermissions(PermissionReference required, On on) + { + mutableState.lock.readLock().lock(); + try + { + return mutableState.getUnconditionalRequiredPermissions(required, on); + } + finally + { + mutableState.lock.readLock().unlock(); + } + } + + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#isUnique(org.alfresco.repo.security.permissions.PermissionReference) + */ public boolean isUnique(PermissionReference permissionReference) { - return uniqueMap.containsKey(permissionReference.getName()); + mutableState.lock.readLock().lock(); + try + { + return mutableState.isUnique(permissionReference); + } + finally + { + mutableState.lock.readLock().unlock(); + } } - - private void buildUniquePermissionMap() - { - Set excluded = new HashSet(128, 1.0f); - uniqueMap = new ConcurrentHashMap(256, 1.0f, 16); - permissionReferenceMap = new ConcurrentHashMap(256, 1.0f, 16); - permissionGroupMap = new ConcurrentHashMap(128, 1.0f, 16); - permissionMap = new ConcurrentHashMap(64, 1.0f, 16); - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - permissionGroupMap.put(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName()), pg); - permissionReferenceMap.put(pg.toString(), SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); - } - for (Permission p : ps.getPermissions()) - { - permissionReferenceMap.put(p.toString(), SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); - permissionMap.put(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName()), p); - } - } - - for (PermissionSet ps : permissionSets.values()) - { - for (PermissionGroup pg : ps.getPermissionGroups()) - { - if (uniqueMap.containsKey(pg.getName()) && !excluded.contains(pg.getName())) - { - PermissionReference value = uniqueMap.get(pg.getName()); - if (!value.equals(getBasePermissionGroup(pg))) - { - uniqueMap.remove(pg.getName()); - excluded.add(pg.getName()); - } - } - else - { - PermissionReference base = getBasePermissionGroup(pg); - uniqueMap.put(pg.getName(), SimplePermissionReference.getPermissionReference(base.getQName(), base.getName())); - } - } - for (Permission p : ps.getPermissions()) - { - if (uniqueMap.containsKey(p.getName()) && !excluded.contains(p.getName())) - { - PermissionReference value = uniqueMap.get(p.getName()); - if (!value.equals(p)) - { - uniqueMap.remove(p.getName()); - excluded.add(p.getName()); - } - } - else - { - uniqueMap.put(p.getName(), SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); - } - } - } - // Add all permissions to the unique list - if (uniqueMap.containsKey(PermissionService.ALL_PERMISSIONS)) - { - throw new IllegalStateException("There must not be a permission with the same name as the ALL_PERMISSION constant: " + PermissionService.ALL_PERMISSIONS); - } - uniqueMap.put(PermissionService.ALL_PERMISSIONS, SimplePermissionReference.getPermissionReference(QName.createQName(NamespaceService.SECURITY_MODEL_1_0_URI, - PermissionService.ALL_PERMISSIONS), PermissionService.ALL_PERMISSIONS)); - - } - /* * (non-Javadoc) * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getAllExposedPermissions() */ public Set getAllExposedPermissions() - { - HashSet permissions = new HashSet(256, 1.0f); - for (PermissionSet ps : permissionSets.values()) + { + Set permissions = new HashSet(256); + mutableState.lock.readLock().lock(); + try { - for (PermissionGroup pg : ps.getPermissionGroups()) + for (PermissionSet ps : mutableState.permissionSets.values()) { - if (pg.isExposed()) + for (PermissionGroup pg : ps.getPermissionGroups()) { - permissions.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); - } - } - for (Permission p : ps.getPermissions()) - { - if (p.isExposed()) - { - permissions.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + if (pg.isExposed()) + { + permissions.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); + } + } + for (Permission p : ps.getPermissions()) + { + if (p.isExposed()) + { + permissions.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + } } } + return permissions; } - return permissions; + finally + { + mutableState.lock.readLock().unlock(); + } } - - /* - * (non-Javadoc) - * @seeorg.alfresco.repo.security.permissions.impl.ModelDAO#hasFull(org.alfresco.repo.security.permissions. - * PermissionReference) - */ - private static PermissionReference ALL = SimplePermissionReference.getPermissionReference(QName.createQName(NamespaceService.SECURITY_MODEL_1_0_URI, - PermissionService.ALL_PERMISSIONS), PermissionService.ALL_PERMISSIONS); public boolean hasFull(PermissionReference permissionReference) { - if (permissionReference == null) + mutableState.lock.readLock().lock(); + try { - return false; + return mutableState.hasFull(permissionReference); } - if(permissionReference.equals(ALL)) + finally { - return true; - } - group = getPermissionGroupOrNull(permissionReference); - if (group == null) - { - return false; - } - else - { - if (group.isAllowFullControl()) - { - return true; - } - else - { - if(group.isExtends()) - { - if (group.getTypeQName() != null) - { - return hasFull(SimplePermissionReference.getPermissionReference(group.getTypeQName(), group.getName())); - } - else - { - ClassDefinition classDefinition = dictionaryService.getClass(group.getQName()); - QName parent; - while ((parent = classDefinition.getParentName()) != null) - { - classDefinition = dictionaryService.getClass(parent); - PermissionGroup attempt = getPermissionGroupOrNull(SimplePermissionReference.getPermissionReference(parent, group.getName())); - if ((attempt != null) && (attempt.isAllowFullControl())) - { - return true; - } - } - return false; - } - } - else - { - return false; - } - } + mutableState.lock.readLock().unlock(); } + } + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getAllPermissions() + */ + @Override + public Set getAllPermissions() + { + mutableState.lock.readLock().lock(); + try + { + return mutableState.getAllPermissions(); + } + finally + { + mutableState.lock.readLock().unlock(); + } } } diff --git a/source/java/org/alfresco/repo/tagging/TagScopePropertyMethodInterceptor.java b/source/java/org/alfresco/repo/tagging/TagScopePropertyMethodInterceptor.java new file mode 100644 index 0000000000..47e027eb86 --- /dev/null +++ b/source/java/org/alfresco/repo/tagging/TagScopePropertyMethodInterceptor.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2005-2010 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 . + */ +package org.alfresco.repo.tagging; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.cache.SimpleCache; +import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.tagging.TagDetails; +import org.alfresco.service.namespace.QName; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; + +/** + * This class is an interceptor of the NodeService that converts the content of the tagScopeCache property + * into a pseudo, multi-value text property (cm:tagScopeSummary) + * with each value of the spoofed property taking the form "=". + * This interceptor can be enabled by calling its + * static {@link TagScopePropertyMethodInterceptor#setEnabled(Boolean)} method. It is enabled by default. When enabled, + * a call to getProperties + * for a node that has a cm:tagScopeCache property will include the calculated cm:tagScopeSummary property. A call to + * getProperty specifying cm:tagScopeSummary as the property name will return the calculated property value or null + * if the node has no cm:tagScopeCache property value. + * + * @author Brian Remmington + * + */ +public class TagScopePropertyMethodInterceptor implements MethodInterceptor +{ + private static ThreadLocal enabled = new ThreadLocal() + { + @Override + protected Boolean initialValue() + { + return Boolean.TRUE; + } + }; + + private ContentService contentService; + private NodeService nodeService; + private SimpleCache> cache; + + + public void setContentService(ContentService contentService) + { + this.contentService = contentService; + } + + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + public void setCache(SimpleCache> cache) + { + this.cache = cache; + } + + @SuppressWarnings("unchecked") + @Override + public Object invoke(MethodInvocation invocation) throws Throwable + { + Object ret; + + //If we're not enabled then exit here + if (Boolean.FALSE.equals(getEnabled())) + { + return invocation.proceed(); + } + + String methodName = invocation.getMethod().getName(); + + if ("getProperty".equals(methodName)) + { + Object[] args = invocation.getArguments(); + NodeRef nodeRef = (NodeRef) args[0]; + QName propertyQName = (QName) args[1]; + //Is this a request for the calculated cm:tagScopeSummary property? + if (ContentModel.PROP_TAGSCOPE_SUMMARY.equals(propertyQName)) + { + ret = getTagSummary(nodeRef, null); + } + else + { + ret = invocation.proceed(); + } + } + else if ("getProperties".equals(methodName)) + { + ret = invocation.proceed(); + if (Map.class.isAssignableFrom(ret.getClass())) + { + Map retMap = (Map)ret; + NodeRef nodeRef = (NodeRef) invocation.getArguments()[0]; + List tagSummary = getTagSummary(nodeRef, retMap); + if (tagSummary != null) + { + retMap.put(ContentModel.PROP_TAGSCOPE_SUMMARY, (Serializable)tagSummary); + } + } + } + else + { + ret = invocation.proceed(); + } + return ret; + } + + /** + * Given a NodeRef and, optionally, the property map of that node, this operation establishes whether + * the node is a TagScope node, and returns the appropriate value of the cm:tagScopeSummary property. + * @param nodeRef + * @param allNodeProperties Optional. If the caller has a current property map for the node being queried + * then supplying it here saves a little time. This argument is allowed to be null. + * @return + */ + protected List getTagSummary(NodeRef nodeRef, Map allNodeProperties) + { + List tagSummary = null; + ContentData tagScopeCache = null; + if (allNodeProperties != null) + { + tagScopeCache = (ContentData) allNodeProperties.get(ContentModel.PROP_TAGSCOPE_CACHE); + } + else + { + tagScopeCache = (ContentData) nodeService.getProperty(nodeRef, ContentModel.PROP_TAGSCOPE_CACHE); + } + if (tagScopeCache != null) + { + String contentUrl = tagScopeCache.getContentUrl(); + tagSummary = cache.get(contentUrl); + if (tagSummary == null) + { + ContentReader contentReader = contentService.getRawReader(contentUrl); + if (contentReader != null && contentReader.exists()) + { + List tagDetails = TaggingServiceImpl.readTagDetails(contentReader.getContentInputStream()); + tagSummary = new ArrayList(tagDetails.size()); + for (TagDetails tagDetail : tagDetails) + { + tagSummary.add(tagDetail.getName() + "=" + tagDetail.getCount()); + } + //Push into the cache + tagSummary = Collections.unmodifiableList(tagSummary); + cache.put(contentUrl, tagSummary); + } + } + } + return tagSummary; + } + + public static final Boolean getEnabled() + { + return enabled.get(); + } + + /** + * Allows the functionality of this interceptor to be enabled and disabled on a thread-by-thread basis. + * The caller should ensure that the value is reset to its prior setting once it has finished using the + * thread of execution. + * @param enable + * @return The setting prior to invoking this operation. + */ + public static final Boolean setEnabled(Boolean enable) + { + Boolean oldSetting = enabled.get(); + enabled.set(enable); + return oldSetting; + } +} diff --git a/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java b/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java index 5d9688e5d2..5953682a6b 100644 --- a/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java +++ b/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java @@ -450,7 +450,108 @@ public class TaggingServiceImplTest extends TestCase } public void testTagScope() - throws Exception + throws Exception +{ + UserTransaction tx = this.transactionService.getUserTransaction(); + tx.begin(); + + // TODO add some tags before the scopes are added + + // Add some tag scopes + this.taggingService.addTagScope(this.folder); + this.taggingService.addTagScope(this.subFolder); + + // Add some more tags after the scopes have been added + this.taggingService.addTag(this.subDocument, TAG_1); // folder+subfolder + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.addTag(this.subDocument, TAG_2); // folder+subfolder + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.addTag(this.subDocument, TAG_3); // folder+subfolder + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.addTag(this.subFolder, TAG_1); // folder+subfolder + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.addTag(this.subFolder, TAG_2); // folder+subfolder + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.addTag(this.folder, TAG_2); // folder only + + tx = asyncOccurs.awaitExecution(tx); + + // re get the tag scopes + TagScope ts1 = this.taggingService.findTagScope(this.subDocument); + TagScope ts2 = this.taggingService.findTagScope(this.folder); + + // Check that the tag scopes got populated + assertEquals( + "Wrong tags on sub folder: " + ts1.getTags(), + 3, ts1.getTags().size() + ); + assertEquals( + "Wrong tags on main folder: " + ts2.getTags(), + 3, ts2.getTags().size() + ); + + // check the order and count of the tagscopes + assertEquals(2, ts1.getTags().get(0).getCount()); + assertEquals(2, ts1.getTags().get(1).getCount()); + assertEquals(1, ts1.getTags().get(2).getCount()); + assertEquals(TAG_1, ts1.getTags().get(0).getName()); + assertEquals(TAG_2, ts1.getTags().get(1).getName()); + assertEquals(TAG_3.toLowerCase(), ts1.getTags().get(2).getName()); + + assertEquals(3, ts2.getTags().get(0).getCount()); + assertEquals(2, ts2.getTags().get(1).getCount()); + assertEquals(1, ts2.getTags().get(2).getCount()); + assertEquals(TAG_2, ts2.getTags().get(0).getName()); + assertEquals(TAG_1, ts2.getTags().get(1).getName()); + assertEquals(TAG_3.toLowerCase(), ts2.getTags().get(2).getName()); + + + // Take some off again + this.taggingService.removeTag(this.folder, TAG_2); + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.removeTag(this.subFolder, TAG_2); + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.removeTag(this.subFolder, TAG_1); + tx = asyncOccurs.awaitExecution(tx); + this.taggingService.removeTag(this.subDocument, TAG_1); + tx = asyncOccurs.awaitExecution(tx); + // And add one more + this.taggingService.addTag(this.folder, TAG_3); + + tx = asyncOccurs.awaitExecution(tx); + + // re get the tag scopes + ts1 = this.taggingService.findTagScope(this.subDocument); + ts2 = this.taggingService.findTagScope(this.folder); + + // Recheck the tag scopes + assertEquals( + "Wrong tags on sub folder: " + ts1.getTags(), + 2, ts1.getTags().size() + ); + assertEquals( + "Wrong tags on main folder: " + ts2.getTags(), + 2, ts2.getTags().size() + ); + + // Sub-folder should be ordered by tag name, as all values 1 + assertEquals(1, ts1.getTags().get(0).getCount()); + assertEquals(1, ts1.getTags().get(1).getCount()); + assertEquals(TAG_2, ts1.getTags().get(0).getName()); + assertEquals(TAG_3.toLowerCase(), ts1.getTags().get(1).getName()); + + // Folder should be still sorted by size, as a 2 & a 1 + assertEquals(2, ts2.getTags().get(0).getCount()); + assertEquals(1, ts2.getTags().get(1).getCount()); + assertEquals(TAG_3.toLowerCase(), ts2.getTags().get(0).getName()); + assertEquals(TAG_2, ts2.getTags().get(1).getName()); + + // Finish + tx.commit(); +} + + @SuppressWarnings("unchecked") + public void testTagScopeSummary() throws Exception { UserTransaction tx = this.transactionService.getUserTransaction(); tx.begin(); @@ -460,7 +561,7 @@ public class TaggingServiceImplTest extends TestCase // Add some tag scopes this.taggingService.addTagScope(this.folder); this.taggingService.addTagScope(this.subFolder); - + // Add some more tags after the scopes have been added this.taggingService.addTag(this.subDocument, TAG_1); // folder+subfolder tx = asyncOccurs.awaitExecution(tx); @@ -475,81 +576,39 @@ public class TaggingServiceImplTest extends TestCase this.taggingService.addTag(this.folder, TAG_2); // folder only tx = asyncOccurs.awaitExecution(tx); + + TagScopePropertyMethodInterceptor.setEnabled(Boolean.TRUE); - // re get the tag scopes - TagScope ts1 = this.taggingService.findTagScope(this.subDocument); - TagScope ts2 = this.taggingService.findTagScope(this.folder); + Serializable summaryObj = nodeService.getProperty(this.folder, ContentModel.PROP_TAGSCOPE_SUMMARY); + assertTrue("TagScopeSummary value on main folder is not of correct class: " + summaryObj.getClass().getName(), + List.class.isAssignableFrom(summaryObj.getClass())); + assertEquals(3, ((List)summaryObj).size()); + + //Check that the next call for the same summary comes from the cache + Serializable summaryObj2 = nodeService.getProperty(this.folder, ContentModel.PROP_TAGSCOPE_SUMMARY); + assertTrue("TagScopeSummary value on main folder did not come from the cache", + summaryObj == summaryObj2); - // Check that the tag scopes got populated - assertEquals( - "Wrong tags on sub folder: " + ts1.getTags(), - 3, ts1.getTags().size() - ); - assertEquals( - "Wrong tags on main folder: " + ts2.getTags(), - 3, ts2.getTags().size() - ); + Map props = nodeService.getProperties(this.subFolder); + assertTrue("Properties of subfolder do not include tagScopeSummary", props.containsKey(ContentModel.PROP_TAGSCOPE_SUMMARY)); + summaryObj = props.get(ContentModel.PROP_TAGSCOPE_SUMMARY); + assertTrue("TagScopeSummary value on subfolder is not of correct class: " + summaryObj.getClass().getName(), + List.class.isAssignableFrom(summaryObj.getClass())); + assertEquals(3, ((List)summaryObj).size()); - // check the order and count of the tagscopes - assertEquals(2, ts1.getTags().get(0).getCount()); - assertEquals(2, ts1.getTags().get(1).getCount()); - assertEquals(1, ts1.getTags().get(2).getCount()); - assertEquals(TAG_1, ts1.getTags().get(0).getName()); - assertEquals(TAG_2, ts1.getTags().get(1).getName()); - assertEquals(TAG_3.toLowerCase(), ts1.getTags().get(2).getName()); + TagScopePropertyMethodInterceptor.setEnabled(Boolean.FALSE); - assertEquals(3, ts2.getTags().get(0).getCount()); - assertEquals(2, ts2.getTags().get(1).getCount()); - assertEquals(1, ts2.getTags().get(2).getCount()); - assertEquals(TAG_2, ts2.getTags().get(0).getName()); - assertEquals(TAG_1, ts2.getTags().get(1).getName()); - assertEquals(TAG_3.toLowerCase(), ts2.getTags().get(2).getName()); - - - // Take some off again - this.taggingService.removeTag(this.folder, TAG_2); - tx = asyncOccurs.awaitExecution(tx); - this.taggingService.removeTag(this.subFolder, TAG_2); - tx = asyncOccurs.awaitExecution(tx); - this.taggingService.removeTag(this.subFolder, TAG_1); - tx = asyncOccurs.awaitExecution(tx); - this.taggingService.removeTag(this.subDocument, TAG_1); - tx = asyncOccurs.awaitExecution(tx); - // And add one more - this.taggingService.addTag(this.folder, TAG_3); - - tx = asyncOccurs.awaitExecution(tx); - - // re get the tag scopes - ts1 = this.taggingService.findTagScope(this.subDocument); - ts2 = this.taggingService.findTagScope(this.folder); - - // Recheck the tag scopes - assertEquals( - "Wrong tags on sub folder: " + ts1.getTags(), - 2, ts1.getTags().size() - ); - assertEquals( - "Wrong tags on main folder: " + ts2.getTags(), - 2, ts2.getTags().size() - ); - - // Sub-folder should be ordered by tag name, as all values 1 - assertEquals(1, ts1.getTags().get(0).getCount()); - assertEquals(1, ts1.getTags().get(1).getCount()); - assertEquals(TAG_2, ts1.getTags().get(0).getName()); - assertEquals(TAG_3.toLowerCase(), ts1.getTags().get(1).getName()); - - // Folder should be still sorted by size, as a 2 & a 1 - assertEquals(2, ts2.getTags().get(0).getCount()); - assertEquals(1, ts2.getTags().get(1).getCount()); - assertEquals(TAG_3.toLowerCase(), ts2.getTags().get(0).getName()); - assertEquals(TAG_2, ts2.getTags().get(1).getName()); + summaryObj = nodeService.getProperty(this.folder, ContentModel.PROP_TAGSCOPE_SUMMARY); + assertNull("TagScopeSummary value on main folder should be null: " + summaryObj, + summaryObj); + props = nodeService.getProperties(this.subFolder); + assertFalse("Properties of subfolder should not contain tagScopeProperty", props.containsKey(ContentModel.PROP_TAGSCOPE_SUMMARY)); + // Finish tx.commit(); } - + public void testTagScopeRefresh() throws Exception { diff --git a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java index 6d47997bc6..bb03dd3479 100644 --- a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java +++ b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java @@ -512,7 +512,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo { if (! existsTenant(tenantDomain)) { - throw new RuntimeException("Tenant does not exist: " + tenantDomain); + throw new AlfrescoRuntimeException("Tenant does not exist: " + tenantDomain); } if (isEnabledTenant(tenantDomain)) @@ -555,7 +555,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo { if (! existsTenant(tenantDomain)) { - throw new RuntimeException("Tenant does not exist: " + tenantDomain); + throw new AlfrescoRuntimeException("Tenant does not exist: " + tenantDomain); } if (! isEnabledTenant(tenantDomain)) @@ -631,7 +631,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo { if (! existsTenant(tenantDomain)) { - throw new RuntimeException("Tenant does not exist: " + tenantDomain); + throw new AlfrescoRuntimeException("Tenant does not exist: " + tenantDomain); } return new Tenant(tenantDomain, isEnabledTenant(tenantDomain), getRootContentStoreDir(tenantDomain)); @@ -644,7 +644,7 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo { if (! existsTenant(tenantDomain)) { - throw new RuntimeException("Tenant does not exist: " + tenantDomain); + throw new AlfrescoRuntimeException("Tenant does not exist: " + tenantDomain); } else { diff --git a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java index 5bd1938930..4ed45a305c 100644 --- a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java +++ b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java @@ -37,6 +37,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; +import org.alfresco.repo.security.permissions.impl.AccessPermissionImpl; import org.alfresco.service.cmr.admin.RepoAdminService; import org.alfresco.service.cmr.coci.CheckOutCheckInService; import org.alfresco.service.cmr.dictionary.ClassDefinition; @@ -51,6 +52,8 @@ import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.CategoryService; import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.cmr.security.AccessPermission; +import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.MutableAuthenticationService; @@ -185,6 +188,223 @@ public class MultiTDemoTest extends TestCase } } + + private void deleteTestAuthoritiesForTenant(final String[] uniqueGroupNames, final String tenantName) + { + // Check deletion for tenant1 + AuthenticationUtil.runAs(new RunAsWork() + { + public Object doWork() throws Exception + { + // find person + NodeRef personNodeRef = personService.getPerson(tenantName); + NodeRef homeSpaceRef = (NodeRef)nodeService.getProperty(personNodeRef, ContentModel.PROP_HOMEFOLDER); + assertNotNull(homeSpaceRef); + + // Delete authorities + for (int i = 0; i < uniqueGroupNames.length; i++) + { + authorityService.deleteAuthority("GROUP_" + uniqueGroupNames[i]); + } + return null; + } + }, tenantName); + } + private void createTestAuthoritiesForTenant(final String[] uniqueGroupNames, final String tenantName) + { + // Create groups for tenant + AuthenticationUtil.runAs(new RunAsWork() + { + public Object doWork() throws Exception + { + // find person + NodeRef personNodeRef = personService.getPerson(tenantName); + NodeRef homeSpaceRef = (NodeRef)nodeService.getProperty(personNodeRef, ContentModel.PROP_HOMEFOLDER); + assertNotNull(homeSpaceRef); + + for (int i = 0; i < uniqueGroupNames.length; i++) + { + authorityService.createAuthority(AuthorityType.GROUP, uniqueGroupNames[i]); + permissionService.setPermission(homeSpaceRef, "GROUP_" + uniqueGroupNames[i], "Consumer", true); + } + + return null; + } + }, tenantName); + } + + private void checkTestAuthoritiesPresence(final String[] uniqueGroupNames, final String tenantName, final boolean shouldPresent) + { + // Check that created permissions are not visible to tenant 2 + AuthenticationUtil.runAs(new RunAsWork() + { + public Object doWork() throws Exception + { + NodeRef personNodeRef = personService.getPerson(tenantName); + NodeRef homeSpaceRef = (NodeRef)nodeService.getProperty(personNodeRef, ContentModel.PROP_HOMEFOLDER); + Set perms = permissionService.getAllSetPermissions(homeSpaceRef); + Set auths = authorityService.getAllAuthorities(AuthorityType.GROUP); + + for (int i = 0; i < uniqueGroupNames.length; i++) + { + AccessPermission toCheck = new AccessPermissionImpl("Consumer", AccessStatus.ALLOWED, "GROUP_" + uniqueGroupNames[i], 0); + if (shouldPresent) + { + assertTrue(auths.contains("GROUP_" + uniqueGroupNames[i])); + assertTrue(perms.contains(toCheck)); + } + else + { + assertTrue(!auths.contains("GROUP_" + uniqueGroupNames[i])); + assertTrue(!perms.contains(toCheck)); + } + } + + return null; + } + }, tenantName); + } + + public void testNonSharedGroupDeletion() + { + final String tenantDomain1 = TEST_RUN+".groupdel1"; + final String tenantDomain2 = TEST_RUN+".groupdel2"; + + final String[] tenantUniqueGroupNames = new String[10]; + final String[] superadminUniqueGroupNames = new String[10]; + for (int i = 0; i < tenantUniqueGroupNames.length; i++) + { + tenantUniqueGroupNames[i] = TEST_RUN + "test_group" + i; + superadminUniqueGroupNames[i] = TEST_RUN + "test_group_sa" + i; + } + + clearUsage(AuthenticationUtil.getAdminUserName()); + + createTenant(tenantDomain1); + createTenant(tenantDomain2); + + final String tenantAdminName1 = tenantService.getDomainUser(AuthenticationUtil.getAdminUserName(), tenantDomain1); + final String tenantAdminName2 = tenantService.getDomainUser(AuthenticationUtil.getAdminUserName(), tenantDomain2); + final String superAdmin = "admin"; + + // Create test authorities that are visible only to tenant1 + clearUsage(tenantDomain1); + createTestAuthoritiesForTenant(tenantUniqueGroupNames, tenantAdminName1); + // Check that tenant1's authorities are visible to tenant1 + clearUsage(tenantDomain1); + checkTestAuthoritiesPresence(tenantUniqueGroupNames, tenantAdminName1, true); + // Check that tenant1's authorities are not visible to tenant2 + clearUsage(tenantDomain2); + checkTestAuthoritiesPresence(tenantUniqueGroupNames, tenantAdminName2, false); + // Check that tenant1's authorities are not visible to super-admin + checkTestAuthoritiesPresence(tenantUniqueGroupNames, superAdmin, false); + + + // Create test authorities that are visible only to super-admin + createTestAuthoritiesForTenant(superadminUniqueGroupNames, superAdmin); + // Check that super-admin's authorities are not visible to tenant1 + clearUsage(tenantDomain1); + checkTestAuthoritiesPresence(superadminUniqueGroupNames, tenantAdminName1, false); + // Check that super-admin's authorities are not visible to tenant2 + clearUsage(tenantDomain2); + checkTestAuthoritiesPresence(superadminUniqueGroupNames, tenantAdminName2, false); + // Check that super-admin's authorities are visible to super-admin + checkTestAuthoritiesPresence(superadminUniqueGroupNames, superAdmin, true); + + + // Delete tenant1's authorities + clearUsage(tenantDomain1); + deleteTestAuthoritiesForTenant(tenantUniqueGroupNames, tenantAdminName1); + // Check that tenant1's authorities are not visible to tenant1 + checkTestAuthoritiesPresence(tenantUniqueGroupNames, tenantAdminName1, false); + + // Delete super-admin's authorities + deleteTestAuthoritiesForTenant(superadminUniqueGroupNames, superAdmin); + // Check that super-admin's authorities are not visible to super-admin + checkTestAuthoritiesPresence(superadminUniqueGroupNames, superAdmin, false); + } + + public void testSharedGroupDeletion() + { + final String tenantDomain1 = TEST_RUN+".groupdel3"; + final String tenantDomain2 = TEST_RUN+".groupdel4"; + + final String[] commonTenantUniqueGroupNames = new String[10]; + for (int i = 0; i < commonTenantUniqueGroupNames.length; i++) + { + commonTenantUniqueGroupNames[i] = TEST_RUN + "test_group" + i; + } + + clearUsage(AuthenticationUtil.getAdminUserName()); + + createTenant(tenantDomain1); + createTenant(tenantDomain2); + + final String tenantAdminName1 = tenantService.getDomainUser(AuthenticationUtil.getAdminUserName(), tenantDomain1); + final String tenantAdminName2 = tenantService.getDomainUser(AuthenticationUtil.getAdminUserName(), tenantDomain2); + final String superAdmin = "admin"; + + // Create test common authorities for tenant1 + clearUsage(tenantDomain1); + createTestAuthoritiesForTenant(commonTenantUniqueGroupNames, tenantAdminName1); + // Create test common authorities for tenant2 + clearUsage(tenantDomain2); + createTestAuthoritiesForTenant(commonTenantUniqueGroupNames, tenantAdminName2); + // Create test common authorities for super-admin + createTestAuthoritiesForTenant(commonTenantUniqueGroupNames, superAdmin); + + // Check that authorities are visible to tenant1 + clearUsage(tenantDomain1); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName1, true); + // Check that authorities are visible to tenant2 + clearUsage(tenantDomain2); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName2, true); + // Check that authorities are visible to super-admin + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, superAdmin, true); + + // Delete tenant1's authorities + clearUsage(tenantDomain1); + deleteTestAuthoritiesForTenant(commonTenantUniqueGroupNames, tenantAdminName1); + // Check that authorities are not visible to tenant1 + clearUsage(tenantDomain1); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName1, false); + // Check that authorities are visible to tenant2 + clearUsage(tenantDomain2); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName2, true); + // Check that authorities are visible to super-admin + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, superAdmin, true); + + // Create test common authorities for tenant1 + clearUsage(tenantDomain1); + createTestAuthoritiesForTenant(commonTenantUniqueGroupNames, tenantAdminName1); + // Delete tenant2's authorities + clearUsage(tenantDomain2); + deleteTestAuthoritiesForTenant(commonTenantUniqueGroupNames, tenantAdminName2); + // Check that authorities are visible to tenant1 + clearUsage(tenantDomain1); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName1, true); + // Check that authorities are not visible to tenant2 + clearUsage(tenantDomain2); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName2, false); + // Check that authorities are visible to super-admin + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, superAdmin, true); + + // Create test common authorities for tenant2 + clearUsage(tenantDomain2); + createTestAuthoritiesForTenant(commonTenantUniqueGroupNames, tenantAdminName2); + // Delete super-admin's authorities + deleteTestAuthoritiesForTenant(commonTenantUniqueGroupNames, superAdmin); + // Check that authorities are visible to tenant1 + clearUsage(tenantDomain1); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName1, true); + // Check that authorities are visible to tenant2 + clearUsage(tenantDomain2); + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, tenantAdminName2, true); + // Check that authorities are not visible to super-admin + checkTestAuthoritiesPresence(commonTenantUniqueGroupNames, superAdmin, false); + } + + private void createTenant(final String tenantDomain) { // create tenants (if not already created) diff --git a/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java b/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java index 2fb3d69562..487663a0ec 100644 --- a/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java +++ b/source/java/org/alfresco/repo/tenant/MultiTNodeServiceInterceptor.java @@ -147,9 +147,9 @@ public class MultiTNodeServiceInterceptor extends DelegatingIntroductionIntercep String rawStoreId = (String)ret; ret = tenantService.getBaseName(rawStoreId); } - else if (qname.equals(ContentModel.PROP_CREATOR) || qname.equals(ContentModel.PROP_MODIFIER)) + else if (qname.equals(ContentModel.PROP_CREATOR) || qname.equals(ContentModel.PROP_MODIFIER) || qname.equals(ContentModel.PROP_OWNER)) { - // ALF-6029 (else need to patch affected spaces - eg. Models, Workflow Definitions) + // ALF-6029 (eg. upgrade from V3.0.x - else need to patch all affected nodes) String rawUserId = (String)ret; if ("admin".equals(rawUserId)) { @@ -179,9 +179,9 @@ public class MultiTNodeServiceInterceptor extends DelegatingIntroductionIntercep { value = tenantService.getBaseName((String)value); } - else if (qname.equals(ContentModel.PROP_CREATOR) || qname.equals(ContentModel.PROP_MODIFIER)) + else if (qname.equals(ContentModel.PROP_CREATOR) || qname.equals(ContentModel.PROP_MODIFIER) || qname.equals(ContentModel.PROP_OWNER)) { - // ALF-6029 (else need to patch affected spaces - eg. Models, Workflow Definitions) + // ALF-6029 (eg. upgrade from V3.0.x - else need to patch all affected nodes) String rawUserId = (String)value; if ("admin".equals(rawUserId)) { diff --git a/source/java/org/alfresco/repo/transfer/RepoSecondaryManifestProcessorImpl.java b/source/java/org/alfresco/repo/transfer/RepoSecondaryManifestProcessorImpl.java index aed60e2b9b..ca8052912c 100644 --- a/source/java/org/alfresco/repo/transfer/RepoSecondaryManifestProcessorImpl.java +++ b/source/java/org/alfresco/repo/transfer/RepoSecondaryManifestProcessorImpl.java @@ -33,7 +33,11 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.transfer.TransferReceiver; +import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.RegexQNamePattern; +import org.alfresco.util.EqualsHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * @author brian @@ -50,6 +54,8 @@ public class RepoSecondaryManifestProcessorImpl extends AbstractManifestProcesso { private NodeService nodeService; private CorrespondingNodeResolver nodeResolver; + + private static final Log log = LogFactory.getLog(RepoSecondaryManifestProcessorImpl.class); /** * @param receiver @@ -72,6 +78,10 @@ public class RepoSecondaryManifestProcessorImpl extends AbstractManifestProcesso protected void processNode(TransferManifestNormalNode node) { + logComment("Seconday Processing incoming node: " + node.getNodeRef()); + + log.debug("Seconday Processing incoming node: " + node.getNodeRef()); + NodeRef correspondingNodeRef = nodeResolver.resolveCorrespondingNode(node.getNodeRef(), TransferManifestNodeHelper.getPrimaryParentAssoc(node), node.getParentPath()).resolvedChild; @@ -91,81 +101,105 @@ public class RepoSecondaryManifestProcessorImpl extends AbstractManifestProcesso currentAssocs = nodeService.getChildAssocs(correspondingNodeRef); processParentChildAssociations(requiredAssocs, currentAssocs, correspondingNodeRef, true); - //Process "target" peer associations (associations *from* this node) - List requiredPeerAssocs = node.getTargetAssocs(); - List currentPeerAssocs = nodeService.getTargetAssocs(correspondingNodeRef, RegexQNamePattern.MATCH_ALL); - processPeerAssociations(requiredPeerAssocs, currentPeerAssocs, correspondingNodeRef, true); + List requiredTargetAssocs = node.getTargetAssocs(); + List currentTargetAssocs = nodeService.getTargetAssocs(correspondingNodeRef, RegexQNamePattern.MATCH_ALL); + processPeerAssociations(requiredTargetAssocs, currentTargetAssocs, correspondingNodeRef, true); //Process "source" peer associations (associations *to* this node) - requiredPeerAssocs = node.getSourceAssocs(); - currentPeerAssocs = nodeService.getSourceAssocs(correspondingNodeRef, RegexQNamePattern.MATCH_ALL); - processPeerAssociations(requiredPeerAssocs, currentPeerAssocs, correspondingNodeRef, false); + List requiredSourceAssocs = node.getSourceAssocs(); + List currentSourceAssocs = nodeService.getSourceAssocs(correspondingNodeRef, RegexQNamePattern.MATCH_ALL); + processPeerAssociations(requiredSourceAssocs, currentSourceAssocs, correspondingNodeRef, false); } /** + * Process the peer associations + * * @param requiredAssocs * @param currentAssocs * @param correspondingNodeRef * @param isSource */ private void processPeerAssociations(List requiredAssocs, - List currentAssocs, NodeRef nodeRef, boolean isSource) + List currentAssocs, + NodeRef nodeRef, + boolean isSource) { - if (requiredAssocs == null) { + if (requiredAssocs == null) + { requiredAssocs = new ArrayList(); } - if (currentAssocs == null) { + if (currentAssocs == null) + { currentAssocs = new ArrayList(); } + + List keysRequired = new ArrayList(); + List keysCurrent = new ArrayList(); - List assocsToAdd = new ArrayList(); - List assocsToRemove = new ArrayList(); - - Map currentAssocMap = new HashMap(); - - for (AssociationRef currentAssoc : currentAssocs) { - NodeRef otherNode = isSource ? currentAssoc.getTargetRef() : currentAssoc.getSourceRef(); - currentAssocMap.put(otherNode, currentAssoc); - } - - for (AssociationRef requiredAssoc : requiredAssocs) + /** + * Which assocs do we need to add ? + * + * Need to compare on sourceNodeRef, targetNodeRef and qname but ignore, irrelevant id property + * which is why we need to introduce AssociationRefKey + */ + for(AssociationRef ref : requiredAssocs) { - NodeRef otherNode = isSource ? requiredAssoc.getTargetRef() : requiredAssoc.getSourceRef(); - AssociationRef existingAssociation = currentAssocMap.remove(otherNode); - if (existingAssociation != null) { - //We already have an association with the required node. - //Check whether it is correct - if (!existingAssociation.getTypeQName().equals(requiredAssoc.getTypeQName())) { - //No, the existing one doesn't match the required one - assocsToRemove.add(existingAssociation); - assocsToAdd.add(requiredAssoc); - } - } else { + keysRequired.add(new AssociationRefKey(ref)); + } + + for(AssociationRef ref : currentAssocs ) + { + keysCurrent.add(new AssociationRefKey(ref)); + } + + /** + * Which assocs do we need to add? + */ + for(AssociationRefKey ref : keysRequired) + { + + if(!keysCurrent.contains(ref)) + { //We don't have an existing association with this required node - //Check that the required node exists in this repo, and record it for adding - //if it does - if (nodeService.exists(otherNode)) { - assocsToAdd.add(requiredAssoc); + NodeRef otherNode = isSource ? ref.targetRef : ref.sourceRef; + if (nodeService.exists(otherNode)) + { + //the other node exists in this repo + if(log.isDebugEnabled()) + { + log.debug("need to add peer assoc from:" + ref.sourceRef + ", to:" + ref.targetRef +", qname:" + ref.assocTypeQName); + } + nodeService.createAssociation(ref.sourceRef, ref.targetRef, ref.assocTypeQName); } } } - //Once we get here, any entries remaining in currentParentMap are associations that need to be deleted. - assocsToRemove.addAll(currentAssocMap.values()); - //Deal with associations to be removed - for (AssociationRef assocToRemove : assocsToRemove) { - nodeService.removeAssociation(assocToRemove.getSourceRef(), assocToRemove.getTargetRef(), assocToRemove.getTypeQName()); - } - //Deal with associations to be added - for (AssociationRef assocToAdd : assocsToAdd) { - NodeRef source = isSource ? nodeRef : assocToAdd.getSourceRef(); - NodeRef target = isSource ? assocToAdd.getTargetRef() : nodeRef; - nodeService.createAssociation(source, target, assocToAdd.getTypeQName()); - } + + /** + * Which assocs do we need to remove ? + * + * Only remove the assocs for this node. + * + * TODO ALF-6543 - What if there is a local, non transferred, peer assoc, for example a rendition + * or a rule or something? Is there some way to say that that link was not transferred? + */ +// if(isSource) +// { + for(AssociationRefKey ref : keysCurrent) + { + if(!keysRequired.contains(ref)) + { + if(log.isDebugEnabled()) + { + log.debug("need to remove peer assoc from:" + ref.sourceRef + ", to:" + ref.targetRef +", qname:" + ref.assocTypeQName); + } + nodeService.removeAssociation(ref.sourceRef, ref.targetRef, ref.assocTypeQName); + } + } +// } } - private void processParentChildAssociations(List requiredAssocs, List currentAssocs, NodeRef nodeRef, boolean isParent) { @@ -263,4 +297,78 @@ public class RepoSecondaryManifestProcessorImpl extends AbstractManifestProcesso { this.nodeResolver = nodeResolver; } + + /** + * The AssociationRefKey is the key value for peer associations. + * + * In particular is differs from AssociationRef in that it does not have the "id" property. + */ + private class AssociationRefKey + { + NodeRef sourceRef; + NodeRef targetRef; + QName assocTypeQName; + + /** + * + * @param sourceRef + * @param targetRef + * @param assocTypeQName + */ + public AssociationRefKey(NodeRef sourceRef, NodeRef targetRef, QName assocTypeQName) + { + this.sourceRef = sourceRef; + this.targetRef = targetRef; + this.assocTypeQName = assocTypeQName; + } + + /** + * + * @param sourceRef + * @param targetRef + * @param assocTypeQName + */ + public AssociationRefKey(AssociationRef ref) + { + this.sourceRef = ref.getSourceRef(); + this.targetRef = ref.getTargetRef(); + this.assocTypeQName = ref.getTypeQName(); + } + + /** + * Compares: + *
    + *
  • {@link #id}
  • + *
  • {@link #sourceRef}
  • + *
  • {@link #targetRef}
  • + *
  • {@link #assocTypeQName}
  • + *
+ */ + public boolean equals(Object o) + { + if (this == o) + { + return true; + } + if (!(o instanceof AssociationRefKey)) + { + return false; + } + AssociationRefKey other = (AssociationRefKey) o; + + return + EqualsHelper.nullSafeEquals(this.sourceRef, other.sourceRef) + && EqualsHelper.nullSafeEquals(this.assocTypeQName, other.assocTypeQName) + && EqualsHelper.nullSafeEquals(this.targetRef, other.targetRef); + } + + public int hashCode() + { + int hashCode = targetRef.hashCode(); + hashCode = 37 * hashCode + ((sourceRef == null) ? 0 : sourceRef.hashCode()); + hashCode = 37 * hashCode + ((assocTypeQName == null) ? 0 : assocTypeQName.hashCode()); + return hashCode; + } + + } } diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java b/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java index 5417c623fd..960755ede4 100644 --- a/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java +++ b/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java @@ -39,7 +39,6 @@ import java.util.Map; import java.util.Queue; import java.util.Set; -import javax.transaction.UserTransaction; import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; @@ -51,14 +50,13 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.AlfrescoTransactionSupport; -import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactory; import org.alfresco.service.cmr.action.ActionService; import org.alfresco.service.cmr.lock.LockService; import org.alfresco.service.cmr.lock.LockType; +import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentReader; @@ -89,14 +87,13 @@ import org.alfresco.service.descriptor.Descriptor; import org.alfresco.service.descriptor.DescriptorService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; +import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.BaseAlfrescoSpringTest; import org.alfresco.util.GUID; import org.alfresco.util.Pair; import org.alfresco.util.PropertyMap; import org.alfresco.util.TempFileProvider; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.util.ResourceUtils; /** @@ -129,24 +126,12 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest String REPO_ID_B; String REPO_ID_C = "RepoIdC"; - @Override - public void runBare() throws Throwable - { - preventTransaction(); - super.runBare(); - } - /** * Called during the transaction setup */ protected void onSetUp() throws Exception { - // Catch transactions left dangling by inadequate transaction handling during test failures - if (AlfrescoTransactionSupport.getTransactionReadState() != TxnReadState.TXN_NONE) - { - fail("Dangling transaction at start of test."); - } - + super.onSetUp(); // Get the required services @@ -171,7 +156,6 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest REPO_ID_B = descriptorService.getCurrentRepositoryDescriptor().getId(); authenticationComponent.setSystemUserAsCurrentUser(); - setTransactionDefinition(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW)); assertNotNull("receiver is null", this.receiver); } @@ -191,47 +175,45 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest String endpointPath = "rhubarb"; String username = "admin"; char[] password = "password".toCharArray(); - - - startNewTransaction(); - try - { - /** - * Now go ahead and create our first transfer target - */ - TransferTarget ret = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - assertNotNull("return value is null", ret); - assertNotNull("node ref is null", ret.getNodeRef()); - - //titled aspect - assertEquals("name not equal", ret.getName(), name); - assertEquals("title not equal", ret.getTitle(), title); - assertEquals("description not equal", ret.getDescription(), description); - - // endpoint - assertEquals("endpointProtocol not equal", ret.getEndpointProtocol(), endpointProtocol); - assertEquals("endpointHost not equal", ret.getEndpointHost(), endpointHost); - assertEquals("endpointPort not equal", ret.getEndpointPort(), endpointPort); - assertEquals("endpointPath not equal", ret.getEndpointPath(), endpointPath); - - // authentication - assertEquals("username not equal", ret.getUsername(), username); - char[] password2 = ret.getPassword(); - - assertEquals(password.length, password2.length); - - for(int i = 0; i < password.length; i++) - { - if(password[i] != password2[i]) - { - fail("password not equal:" + new String(password) + new String(password2)); - } - } - - /** - * Negative test - try to create a transfer target with a name that's already used. - */ + + /** + * Now go ahead and create our first transfer target + */ + TransferTarget ret = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + assertNotNull("return value is null", ret); + assertNotNull("node ref is null", ret.getNodeRef()); + + //titled aspect + assertEquals("name not equal", ret.getName(), name); + assertEquals("title not equal", ret.getTitle(), title); + assertEquals("description not equal", ret.getDescription(), description); + + // endpoint + assertEquals("endpointProtocol not equal", ret.getEndpointProtocol(), endpointProtocol); + assertEquals("endpointHost not equal", ret.getEndpointHost(), endpointHost); + assertEquals("endpointPort not equal", ret.getEndpointPort(), endpointPort); + assertEquals("endpointPath not equal", ret.getEndpointPath(), endpointPath); + + // authentication + assertEquals("username not equal", ret.getUsername(), username); + char[] password2 = ret.getPassword(); + + assertEquals(password.length, password2.length); + + for(int i = 0; i < password.length; i++) + { + if(password[i] != password2[i]) + { + fail("password not equal:" + new String(password) + new String(password2)); + } + } + + /** + * Negative test - try to create a transfer target with a name that's already used. + */ + try + { transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); fail("duplicate name not detected"); } @@ -239,10 +221,6 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest { // expect to go here } - finally - { - endTransaction(); - } } /** @@ -261,58 +239,56 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest String endpointPath = "rhubarb"; String username = "admin"; char[] password = "password".toCharArray(); - - - startNewTransaction(); + + /** + * Now go ahead and create our first transfer target + */ + TransferTarget newValue = transferService.createTransferTarget(name); + newValue.setDescription(description); + newValue.setEndpointHost(endpointHost); + newValue.setEndpointPort(endpointPort); + newValue.setEndpointPath(endpointPath); + newValue.setEndpointProtocol(endpointProtocol); + newValue.setPassword(password); + newValue.setTitle(title); + newValue.setUsername(username); + + TransferTarget ret = transferService.saveTransferTarget(newValue); + + assertNotNull("return value is null", ret); + assertNotNull("node ref is null", ret.getNodeRef()); + + //titled aspect + assertEquals("name not equal", ret.getName(), name); + assertEquals("title not equal", ret.getTitle(), title); + assertEquals("description not equal", ret.getDescription(), description); + + // endpoint + assertEquals("endpointProtocol not equal", ret.getEndpointProtocol(), endpointProtocol); + assertEquals("endpointHost not equal", ret.getEndpointHost(), endpointHost); + assertEquals("endpointPort not equal", ret.getEndpointPort(), endpointPort); + assertEquals("endpointPath not equal", ret.getEndpointPath(), endpointPath); + + // authentication + assertEquals("username not equal", ret.getUsername(), username); + char[] password2 = ret.getPassword(); + + assertEquals(password.length, password2.length); + + for(int i = 0; i < password.length; i++) + { + if(password[i] != password2[i]) + { + fail("password not equal:" + new String(password) + new String(password2)); + } + } + + /** + * Negative test - try to create a transfer target with a name that's already used. + */ try { - /** - * Now go ahead and create our first transfer target - */ - TransferTarget newValue = transferService.createTransferTarget(name); - newValue.setDescription(description); - newValue.setEndpointHost(endpointHost); - newValue.setEndpointPort(endpointPort); - newValue.setEndpointPath(endpointPath); - newValue.setEndpointProtocol(endpointProtocol); - newValue.setPassword(password); - newValue.setTitle(title); - newValue.setUsername(username); - - TransferTarget ret = transferService.saveTransferTarget(newValue); - - assertNotNull("return value is null", ret); - assertNotNull("node ref is null", ret.getNodeRef()); - - //titled aspect - assertEquals("name not equal", ret.getName(), name); - assertEquals("title not equal", ret.getTitle(), title); - assertEquals("description not equal", ret.getDescription(), description); - - // endpoint - assertEquals("endpointProtocol not equal", ret.getEndpointProtocol(), endpointProtocol); - assertEquals("endpointHost not equal", ret.getEndpointHost(), endpointHost); - assertEquals("endpointPort not equal", ret.getEndpointPort(), endpointPort); - assertEquals("endpointPath not equal", ret.getEndpointPath(), endpointPath); - - // authentication - assertEquals("username not equal", ret.getUsername(), username); - char[] password2 = ret.getPassword(); - - assertEquals(password.length, password2.length); - - for(int i = 0; i < password.length; i++) - { - if(password[i] != password2[i]) - { - fail("password not equal:" + new String(password) + new String(password2)); - } - } - - /** - * Negative test - try to create a transfer target with a name that's already used. - */ transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); fail("duplicate name not detected"); } @@ -320,10 +296,6 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest { // expect to go here } - finally - { - endTransaction(); - } } /** @@ -343,28 +315,20 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest String endpointPath = "rhubarb"; String username = "admin"; char[] password = "password".toCharArray(); - - startNewTransaction(); - try + + /** + * Now go ahead and create our first transfer target + */ + TransferTarget targetA = transferService.createAndSaveTransferTarget(nameA, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + TransferTarget targetB = transferService.createAndSaveTransferTarget(nameB, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + + Set targets = transferService.getTransferTargets(); + assertTrue("targets is empty", targets.size() > 0); + assertTrue("didn't find target A", targets.contains(targetA) ); + assertTrue("didn't find target B", targets.contains(targetB)); + for(TransferTarget target : targets) { - /** - * Now go ahead and create our first transfer target - */ - TransferTarget targetA = transferService.createAndSaveTransferTarget(nameA, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - TransferTarget targetB = transferService.createAndSaveTransferTarget(nameB, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - - Set targets = transferService.getTransferTargets(); - assertTrue("targets is empty", targets.size() > 0); - assertTrue("didn't find target A", targets.contains(targetA) ); - assertTrue("didn't find target B", targets.contains(targetB)); - for(TransferTarget target : targets) - { - System.out.println("found target: " + target.getName()); - } - } - finally - { - endTransaction(); + System.out.println("found target: " + target.getName()); } } @@ -383,20 +347,18 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest String endpointPath = "rhubarb"; String username = "admin"; char[] password = "password".toCharArray(); - - startNewTransaction(); - try - { - /** - * Now go ahead and create our first transfer target - */ - transferService.createAndSaveTransferTarget(getMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - - Set targets = transferService.getTransferTargets("Default Group"); - assertTrue("targets is empty", targets.size() > 0); - /** - * Negative test - group does not exist - */ + + /** + * Now go ahead and create our first transfer target + */ + transferService.createAndSaveTransferTarget(getMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + + Set targets = transferService.getTransferTargets("Default Group"); + assertTrue("targets is empty", targets.size() > 0); + /** + * Negative test - group does not exist + */ + try { targets = transferService.getTransferTargets("Rubbish"); assertTrue("targets is empty", targets.size() > 0); fail("group does not exist"); @@ -405,10 +367,7 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest { // expect to go here } - finally - { - endTransaction(); - } + } /** @@ -416,111 +375,102 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testUpdateTransferTarget() throws Exception { - startNewTransaction(); - try + String updateMe = "updateMe"; + String title = "title"; + String description = "description"; + String endpointProtocol = "http"; + String endpointHost = "localhost"; + int endpointPort = 8080; + String endpointPath = "rhubarb"; + String username = "admin"; + char[] password = "password".toCharArray(); + + /** + * Create our transfer target + */ + TransferTarget target = transferService.createAndSaveTransferTarget(updateMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + + /* + * Now update with exactly the same values. + */ + TransferTarget update1 = transferService.saveTransferTarget(target); + + assertNotNull("return value is null", update1); + assertNotNull("node ref is null", update1.getNodeRef()); + + //titled aspect + assertEquals("name not equal", update1.getName(), updateMe); + assertEquals("title not equal", update1.getTitle(), title); + assertEquals("description not equal", update1.getDescription(), description); + + // endpoint + assertEquals("endpointProtocol not equal", update1.getEndpointProtocol(), endpointProtocol); + assertEquals("endpointHost not equal", update1.getEndpointHost(), endpointHost); + assertEquals("endpointPort not equal", update1.getEndpointPort(), endpointPort); + assertEquals("endpointPath not equal", update1.getEndpointPath(), endpointPath); + + // authentication + assertEquals("username not equal", update1.getUsername(), username); + char[] pass = update1.getPassword(); + + assertEquals(password.length, pass.length); + + for(int i = 0; i < password.length; i++) { - String updateMe = "updateMe"; - String title = "title"; - String description = "description"; - String endpointProtocol = "http"; - String endpointHost = "localhost"; - int endpointPort = 8080; - String endpointPath = "rhubarb"; - String username = "admin"; - char[] password = "password".toCharArray(); - - - /** - * Create our transfer target - */ - TransferTarget target = transferService.createAndSaveTransferTarget(updateMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - - /* - * Now update with exactly the same values. - */ - TransferTarget update1 = transferService.saveTransferTarget(target); - - assertNotNull("return value is null", update1); - assertNotNull("node ref is null", update1.getNodeRef()); - - //titled aspect - assertEquals("name not equal", update1.getName(), updateMe); - assertEquals("title not equal", update1.getTitle(), title); - assertEquals("description not equal", update1.getDescription(), description); - - // endpoint - assertEquals("endpointProtocol not equal", update1.getEndpointProtocol(), endpointProtocol); - assertEquals("endpointHost not equal", update1.getEndpointHost(), endpointHost); - assertEquals("endpointPort not equal", update1.getEndpointPort(), endpointPort); - assertEquals("endpointPath not equal", update1.getEndpointPath(), endpointPath); - - // authentication - assertEquals("username not equal", update1.getUsername(), username); - char[] pass = update1.getPassword(); - - assertEquals(password.length, pass.length); - - for(int i = 0; i < password.length; i++) + if(password[i] != pass[i]) { - if(password[i] != pass[i]) - { - fail("password not equal:" + new String(password) + new String(pass)); - } - } - - /** - * Now update with different values - */ - String title2 = "Two"; - String description2 = "descriptionTwo"; - String endpointProtocol2 = "https"; - String endpointHost2 = "1.0.0.127"; - int endpointPort2 = 4040; - String endpointPath2 = "custard"; - String username2 = "admin_two"; - char[] password2 = "two".toCharArray(); - - target.setDescription(description2); - target.setTitle(title2); - target.setEndpointHost(endpointHost2); - target.setEndpointPath(endpointPath2); - target.setEndpointPort(endpointPort2); - target.setEndpointProtocol(endpointProtocol2); - target.setPassword(password2); - target.setUsername(username2); - - TransferTarget update2 = transferService.saveTransferTarget(target); - assertNotNull("return value is null", update2); - assertNotNull("node ref is null", update2.getNodeRef()); - - //titled aspect - assertEquals("name not equal", update2.getName(), updateMe); - assertEquals("title not equal", update2.getTitle(), title2); - assertEquals("description not equal", update2.getDescription(), description2); - - // endpoint - assertEquals("endpointProtocol not equal", update2.getEndpointProtocol(), endpointProtocol2); - assertEquals("endpointHost not equal", update2.getEndpointHost(), endpointHost2); - assertEquals("endpointPort not equal", update2.getEndpointPort(), endpointPort2); - assertEquals("endpointPath not equal", update2.getEndpointPath(), endpointPath2); - - // authentication - assertEquals("username not equal", update2.getUsername(), username2); - pass = update2.getPassword(); - - assertEquals(password2.length, pass.length); - - for(int i = 0; i < pass.length; i++) - { - if(pass[i] != password2[i]) - { - fail("password not equal:" + new String(pass) + new String(password2)); - } + fail("password not equal:" + new String(password) + new String(pass)); } } - finally + + /** + * Now update with different values + */ + String title2 = "Two"; + String description2 = "descriptionTwo"; + String endpointProtocol2 = "https"; + String endpointHost2 = "1.0.0.127"; + int endpointPort2 = 4040; + String endpointPath2 = "custard"; + String username2 = "admin_two"; + char[] password2 = "two".toCharArray(); + + target.setDescription(description2); + target.setTitle(title2); + target.setEndpointHost(endpointHost2); + target.setEndpointPath(endpointPath2); + target.setEndpointPort(endpointPort2); + target.setEndpointProtocol(endpointProtocol2); + target.setPassword(password2); + target.setUsername(username2); + + TransferTarget update2 = transferService.saveTransferTarget(target); + assertNotNull("return value is null", update2); + assertNotNull("node ref is null", update2.getNodeRef()); + + //titled aspect + assertEquals("name not equal", update2.getName(), updateMe); + assertEquals("title not equal", update2.getTitle(), title2); + assertEquals("description not equal", update2.getDescription(), description2); + + // endpoint + assertEquals("endpointProtocol not equal", update2.getEndpointProtocol(), endpointProtocol2); + assertEquals("endpointHost not equal", update2.getEndpointHost(), endpointHost2); + assertEquals("endpointPort not equal", update2.getEndpointPort(), endpointPort2); + assertEquals("endpointPath not equal", update2.getEndpointPath(), endpointPath2); + + // authentication + assertEquals("username not equal", update2.getUsername(), username2); + pass = update2.getPassword(); + + assertEquals(password2.length, pass.length); + + for(int i = 0; i < pass.length; i++) { - endTransaction(); + if(pass[i] != password2[i]) + { + fail("password not equal:" + new String(pass) + new String(password2)); + } } } @@ -529,103 +479,88 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testDeleteTransferTarget() throws Exception { - startNewTransaction(); - try + String deleteMe = "deleteMe"; + String title = "title"; + String description = "description"; + String endpointProtocol = "http"; + String endpointHost = "localhost"; + int endpointPort = 8080; + String endpointPath = "rhubarb"; + String username = "admin"; + char[] password = "password".toCharArray(); + + /** + * Now go ahead and create our first transfer target + */ + transferService.createAndSaveTransferTarget(deleteMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + + transferService.deleteTransferTarget(deleteMe); + + /** + * Negative test - try to delete the transfer target we deleted above. + */ + try { - String deleteMe = "deleteMe"; - String title = "title"; - String description = "description"; - String endpointProtocol = "http"; - String endpointHost = "localhost"; - int endpointPort = 8080; - String endpointPath = "rhubarb"; - String username = "admin"; - char[] password = "password".toCharArray(); - - /** - * Now go ahead and create our first transfer target - */ - transferService.createAndSaveTransferTarget(deleteMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - transferService.deleteTransferTarget(deleteMe); - - /** - * Negative test - try to delete the transfer target we deleted above. - */ - try - { - transferService.deleteTransferTarget(deleteMe); - fail("duplicate name not detected"); - } - catch (TransferException e) - { - // expect to go here - } - - /** - * Negative test - try to delete a transfer target that has never existed - */ - try - { - transferService.deleteTransferTarget("rubbish"); - - fail("rubbish deleted"); - } - catch (TransferException e) - { - // expect to go here - } + fail("duplicate name not detected"); } - finally + catch (TransferException e) { - endTransaction(); + // expect to go here + } + + /** + * Negative test - try to delete a transfer target that has never existed + */ + try + { + transferService.deleteTransferTarget("rubbish"); + + fail("rubbish deleted"); } + catch (TransferException e) + { + // expect to go here + } + } public void testEnableTransferTarget() throws Exception { - startNewTransaction(); - try + String targetName = "enableMe"; + + /** + * Now go ahead and create our first transfer target + */ + TransferTarget enableMe = createTransferTarget(targetName); + try { - String targetName = "enableMe"; - /** - * Now go ahead and create our first transfer target + * Check a new target is enabled */ - TransferTarget enableMe = createTransferTarget(targetName); - try - { - /** - * Check a new target is enabled - */ - TransferTarget target = transferService.getTransferTarget(targetName); - assertTrue("new target is not enabled", enableMe.isEnabled()); - - /** - * Diasble the target - */ - transferService.enableTransferTarget(targetName, false); - target = transferService.getTransferTarget(targetName); - assertFalse("target is not disabled", target.isEnabled()); - - /** - * Now re-enable the target - */ - transferService.enableTransferTarget(targetName, true); - target = transferService.getTransferTarget(targetName); - assertTrue("re-enabled target is not enabled", target.isEnabled()); - } - finally - { - transferService.deleteTransferTarget(targetName); - } + TransferTarget target = transferService.getTransferTarget(targetName); + assertTrue("new target is not enabled", enableMe.isEnabled()); + + /** + * Diasble the target + */ + transferService.enableTransferTarget(targetName, false); + target = transferService.getTransferTarget(targetName); + assertFalse("target is not disabled", target.isEnabled()); + + /** + * Now re-enable the target + */ + transferService.enableTransferTarget(targetName, true); + target = transferService.getTransferTarget(targetName); + assertTrue("re-enabled target is not enabled", target.isEnabled()); } finally { - endTransaction(); + transferService.deleteTransferTarget(targetName); } } - + /** * Test the transfer method by sending one node (CRUD). * @@ -655,363 +590,324 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testTransferOneNode() throws Exception { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello World"; - String CONTENT_UPDATE_STRING = "Foo Bar"; + final String CONTENT_TITLE = "ContentTitle"; + final String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + final Locale CONTENT_LOCALE = Locale.GERMAN; + final String CONTENT_STRING = "Hello World"; + final String CONTENT_UPDATE_STRING = "Foo Bar"; + final String targetName = "testXferOneNode"; + + final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); + + class TestContext + { + TransferTarget transferMe; + NodeRef contentNodeRef; + NodeRef destNodeRef; + }; /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - * - * Fake Repository Id + * Unit test kludge to transfer from guest home to company home */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + final UnitTestTransferManifestNodeFactory testNodeFactory = unitTestKludgeToTransferGuestHomeToCompanyHome(); DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); transferServiceImpl.setDescriptorService(mockedDescriptorService); - + + RetryingTransactionCallback setupCB = new RetryingTransactionCallback() + { + @Override + public TestContext execute() throws Throwable + { + TestContext ctx = new TestContext(); + + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node that we will read and write + */ + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT); + ctx.contentNodeRef = child.getChildRef(); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_NAME, name); + + if(!transferService.targetExists(targetName)) + { + ctx.transferMe = createTransferTarget(targetName); + } + else + { + ctx.transferMe = transferService.getTransferTarget(targetName); + } + transferService.enableTransferTarget(targetName, true); + + return ctx; + } + }; + final TestContext testContext = tran.doInTransaction(setupCB); + /** - * Now go ahead and create our first transfer target - */ - String targetName = "testTransferOneNode"; - TransferTarget transferMe; - NodeRef contentNodeRef; - NodeRef destNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test node that we will read and write - */ - - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT); - contentNodeRef = child.getChildRef(); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, name); - - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - transferService.enableTransferTarget(targetName, true); - } - finally - { - endTransaction(); - } - + * Step 1: Transfer our node which has no content + */ logger.debug("First transfer - create new node (no content yet)"); - startNewTransaction(); - try - { - /** - * Step 1: Transfer our node which has no content - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); - assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - - // Check the modified time of the destination node is the same as the source node. - Date destModifiedDate = (Date)nodeService.getProperty(destNodeRef, ContentModel.PROP_MODIFIED); - Date srcModifiedDate = (Date)nodeService.getProperty(contentNodeRef, ContentModel.PROP_MODIFIED); - - logger.debug("srcModifiedDate : " + srcModifiedDate + " destModifiedDate : " + destModifiedDate); - assertTrue("dest modified date is not correct", destModifiedDate.compareTo(srcModifiedDate)== 0); - - Date destCreatedDate = (Date)nodeService.getProperty(destNodeRef, ContentModel.PROP_CREATED); - Date srcCreatedDate = (Date)nodeService.getProperty(contentNodeRef, ContentModel.PROP_CREATED); - - logger.debug("srcCreatedDate : " + srcCreatedDate + " destCreatedDate : " + destCreatedDate); - assertTrue("dest created date is not correct", destCreatedDate.compareTo(srcCreatedDate)== 0); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - - // Now set up the next test which is to change the title - nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED); - } - finally - { - endTransaction(); - } - - logger.debug("Second transfer - update title property (no content yet)"); - startNewTransaction(); - try - { - /** - * Step 2: - * Transfer our node again - so this is an update of the title property - */ + RetryingTransactionCallback transferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { TransferDefinition definition = new TransferDefinition(); Setnodes = new HashSet(); - nodes.add(contentNodeRef); + nodes.add(testContext.contentNodeRef); definition.setNodes(nodes); transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } + return null; + } + }; + tran.doInTransaction(transferCB); - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED); - assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - - // Check the modified time of the destination node is the same as the source node. - Date destModifiedDate = (Date)nodeService.getProperty(destNodeRef, ContentModel.PROP_MODIFIED); - Date srcModifiedDate = (Date)nodeService.getProperty(contentNodeRef, ContentModel.PROP_MODIFIED); + RetryingTransactionCallback validateStep1CB = new RetryingTransactionCallback() { - logger.debug("srcModifiedDate : " + srcModifiedDate + " destModifiedDate : " + destModifiedDate); - assertTrue("after update, modified date is not correct", destModifiedDate.compareTo(srcModifiedDate) == 0); - - Date destCreatedDate = (Date)nodeService.getProperty(destNodeRef, ContentModel.PROP_CREATED); - Date srcCreatedDate = (Date)nodeService.getProperty(contentNodeRef, ContentModel.PROP_CREATED); - - logger.debug("srcCreatedDate : " + srcCreatedDate + " destCreatedDate : " + destCreatedDate); - assertTrue("after update, created date is not correct", destCreatedDate.compareTo(srcCreatedDate)== 0); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + @Override + public Void execute() throws Throwable + { + // Now validate that the target node exists and has similar properties to the source + testContext.destNodeRef = testNodeFactory.getMappedNodeRef( testContext.contentNodeRef); + assertFalse("unit test stuffed up - comparing with self", testContext.destNodeRef.equals( testContext.transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists( testContext.destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty( testContext.destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); + assertEquals("type is wrong", nodeService.getType( testContext.contentNodeRef), nodeService.getType( testContext.destNodeRef)); + + // Check the modified time of the destination node is the same as the source node. + Date destModifiedDate = (Date)nodeService.getProperty( testContext.destNodeRef, ContentModel.PROP_MODIFIED); + Date srcModifiedDate = (Date)nodeService.getProperty( testContext.contentNodeRef, ContentModel.PROP_MODIFIED); + + logger.debug("srcModifiedDate : " + srcModifiedDate + " destModifiedDate : " + destModifiedDate); + assertTrue("dest modified date is not correct", destModifiedDate.compareTo(srcModifiedDate)== 0); + + Date destCreatedDate = (Date)nodeService.getProperty( testContext.destNodeRef, ContentModel.PROP_CREATED); + Date srcCreatedDate = (Date)nodeService.getProperty( testContext.contentNodeRef, ContentModel.PROP_CREATED); + + logger.debug("srcCreatedDate : " + srcCreatedDate + " destCreatedDate : " + destCreatedDate); + assertTrue("dest created date is not correct", destCreatedDate.compareTo(srcCreatedDate)== 0); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty( testContext.destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + + // Now set up the next test which is to change the title + nodeService.setProperty( testContext.contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED); + return null; + } + }; + tran.doInTransaction(validateStep1CB); + + /** + * Step 2: + * Transfer our node again - so this is an update of the title property + */ + logger.debug("Second transfer - update title property (no content yet)"); + tran.doInTransaction(transferCB); + + RetryingTransactionCallback validateStep2CB = new RetryingTransactionCallback() { - } - finally - { - endTransaction(); - } + @Override + public Void execute() throws Throwable + { + + // Now validate that the target node exists and has similar properties to the source + assertFalse("unit test stuffed up - comparing with self", testContext.destNodeRef.equals(testContext.transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists(testContext.destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(testContext.destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED); + assertEquals("type is wrong", nodeService.getType(testContext.contentNodeRef), nodeService.getType(testContext.destNodeRef)); + + // Check the modified time of the destination node is the same as the source node. + Date destModifiedDate = (Date)nodeService.getProperty(testContext.destNodeRef, ContentModel.PROP_MODIFIED); + Date srcModifiedDate = (Date)nodeService.getProperty(testContext.contentNodeRef, ContentModel.PROP_MODIFIED); + + logger.debug("srcModifiedDate : " + srcModifiedDate + " destModifiedDate : " + destModifiedDate); + assertTrue("after update, modified date is not correct", destModifiedDate.compareTo(srcModifiedDate) == 0); + + Date destCreatedDate = (Date)nodeService.getProperty(testContext.destNodeRef, ContentModel.PROP_CREATED); + Date srcCreatedDate = (Date)nodeService.getProperty(testContext.contentNodeRef, ContentModel.PROP_CREATED); + + logger.debug("srcCreatedDate : " + srcCreatedDate + " destCreatedDate : " + destCreatedDate); + assertTrue("after update, created date is not correct", destCreatedDate.compareTo(srcCreatedDate)== 0); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(testContext.destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + + return null; + } + }; + + tran.doInTransaction(validateStep2CB); /** * Step 3 - update to add content */ - startNewTransaction(); - try - { - ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - logger.debug("Transfer again - this is an update to add new content"); - startNewTransaction(); - try - { - /** - * Step 3: - * Transfer our node again - so this is an update - */ + RetryingTransactionCallback step3WriteContentCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(destNodeRef, ContentModel.PROP_CONTENT); - assertNotNull("reader is null", reader); - String contentStr = reader.getContentString(); - assertEquals("Content is wrong", contentStr, CONTENT_STRING); - } - finally - { - endTransaction(); - } - + ContentWriter writer = contentService.getWriter(testContext.contentNodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + + return null; + } + }; + + tran.doInTransaction(step3WriteContentCB); + + + logger.debug("Transfer again - this is an update to add new content"); + tran.doInTransaction(transferCB); + + RetryingTransactionCallback validateStep3CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + ContentReader reader = contentService.getReader(testContext.destNodeRef, ContentModel.PROP_CONTENT); + assertNotNull("reader is null", reader); + String contentStr = reader.getContentString(); + assertEquals("Content is wrong", contentStr, CONTENT_STRING); + + + return null; + } + }; + + tran.doInTransaction(validateStep3CB); + /** * Step 4: * Now transfer nothing - content items do not need to be transferred since its already on * the destination. */ logger.debug("Transfer again - with no new content"); - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } + tran.doInTransaction(transferCB); - startNewTransaction(); - try - { - // Now validate that the target node still exists and in particular that the old content is still there - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED); - assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - - ContentReader reader = contentService.getReader(destNodeRef, ContentModel.PROP_CONTENT); - assertNotNull("reader is null", reader); - String contentStr = reader.getContentString(); - assertEquals("Content is wrong", contentStr, CONTENT_STRING); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + RetryingTransactionCallback validateStep4CB = new RetryingTransactionCallback() { - } - finally - { - endTransaction(); - } - + @Override + public Void execute() throws Throwable + { + // Now validate that the target node still exists and in particular that the old content is still there + assertFalse("unit test stuffed up - comparing with self", testContext.destNodeRef.equals(testContext.transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists(testContext.destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(testContext.destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED); + assertEquals("type is wrong", nodeService.getType(testContext.contentNodeRef), nodeService.getType(testContext.destNodeRef)); + + ContentReader reader = contentService.getReader(testContext.destNodeRef, ContentModel.PROP_CONTENT); + assertNotNull("reader is null", reader); + String contentStr = reader.getContentString(); + assertEquals("Content is wrong", contentStr, CONTENT_STRING); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(testContext.destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + return null; + } + }; + + tran.doInTransaction(validateStep4CB); + + /** * Step 5 - update content through transfer */ - startNewTransaction(); - try - { - ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_UPDATE_STRING); - } - finally - { - endTransaction(); - } + + RetryingTransactionCallback step5UpdateContentCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + ContentWriter writer = contentService.getWriter(testContext.contentNodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_UPDATE_STRING); + + return null; + } + }; + + tran.doInTransaction(step5UpdateContentCB); + logger.debug("Transfer again - this is an update to add new content"); - startNewTransaction(); - try - { - /** - * Step 3: - * Transfer our node again - so this is an update - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(destNodeRef, ContentModel.PROP_CONTENT); - assertNotNull("reader is null", reader); - String contentStr = reader.getContentString(); - assertEquals("Content is wrong", CONTENT_UPDATE_STRING, contentStr); - } - finally - { - endTransaction(); - } + tran.doInTransaction(transferCB); + RetryingTransactionCallback validateStep5CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + ContentReader reader = contentService.getReader(testContext.destNodeRef, ContentModel.PROP_CONTENT); + assertNotNull("reader is null", reader); + String contentStr = reader.getContentString(); + assertEquals("Content is wrong", CONTENT_UPDATE_STRING, contentStr); + + + return null; + } + }; + + tran.doInTransaction(validateStep5CB); + /** * Step 6 * Delete the node through transfer of the archive node */ logger.debug("Transfer again - to delete a node through transferring an archive node"); - startNewTransaction(); - try - { - nodeService.deleteNode(contentNodeRef); - } - finally - { - endTransaction(); - } + RetryingTransactionCallback step6CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + nodeService.deleteNode(testContext.contentNodeRef); + return null; + } + }; + + tran.doInTransaction(step6CB); - NodeRef deletedContentNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, contentNodeRef.getId()); - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(deletedContentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertFalse("dest node still exists", nodeService.exists(destNodeRef)); - } - finally - { - endTransaction(); - } + RetryingTransactionCallback transferDeletedCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + NodeRef deletedContentNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, testContext.contentNodeRef.getId()); + + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(deletedContentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + + return null; + } + }; + + tran.doInTransaction(transferDeletedCB); + + RetryingTransactionCallback validateStep6CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + assertFalse("dest node still exists", nodeService.exists(testContext.destNodeRef)); + return null; + } + }; + + tran.doInTransaction(validateStep6CB); /** * Step 7 @@ -1021,6 +917,8 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest try { TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + definition.setNodes(nodes); transferService.transfer(targetName, definition); fail("exception not thrown"); } @@ -1040,7 +938,7 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest TransferDefinition definition = new TransferDefinition(); Setnodes = new HashSet(); - nodes.add(deletedContentNodeRef); + nodes.add(testContext.contentNodeRef); definition.setNodes(nodes); transferService.transfer(targetName, definition); fail("target not enabled exception not thrown"); @@ -1048,7 +946,7 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest catch(TransferException te) { // expect to go here - assertTrue("check contents of exception message", te.getCause().getMessage().contains("enabled")); + assertTrue("check contents of exception message :" + te.toString(), te.getCause().getMessage().contains("enabled")); } } @@ -1062,183 +960,200 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testMoveNode() throws Exception { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; + final String CONTENT_TITLE = "ContentTitle"; + final String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + final Locale CONTENT_LOCALE = Locale.GERMAN; + final String CONTENT_STRING = "Hello"; + + final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - * - * Fake Repository Id + * Now go ahead and create our first transfer target */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + final String targetName = "testTransferMoveNode"; + class TestContext + { + TransferTarget transferMe; + NodeRef contentNodeRef; + NodeRef parentNodeRef; + NodeRef destNodeRef; + NodeRef moveToNodeRef; + }; + + /** + * Unit test kludge to transfer from guest home to company home + */ + final UnitTestTransferManifestNodeFactory testNodeFactory = unitTestKludgeToTransferGuestHomeToCompanyHome(); + + RetryingTransactionCallback setupCB = new RetryingTransactionCallback() + { + @Override + public TestContext execute() throws Throwable + { + TestContext ctx = new TestContext(); + + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node that we will read and write + */ + String name = GUID.generate(); + + ChildAssociationRef newParent = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + ctx.parentNodeRef = newParent.getChildRef(); + nodeService.setProperty(ctx.parentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.parentNodeRef, ContentModel.PROP_NAME, name); + + ChildAssociationRef child = nodeService.createNode(ctx.parentNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("TransferOneNode"), ContentModel.TYPE_CONTENT); + ctx.contentNodeRef = child.getChildRef(); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_NAME, "TransferOneNode"); + + ChildAssociationRef moveTo = nodeService.createNode(ctx.parentNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("moveTo"), ContentModel.TYPE_FOLDER); + ctx.moveToNodeRef = moveTo.getChildRef(); + nodeService.setProperty(ctx.moveToNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.moveToNodeRef, ContentModel.PROP_NAME, "moveTo"); + + if(!transferService.targetExists(targetName)) + { + ctx.transferMe = createTransferTarget(targetName); + } + else + { + ctx.transferMe = transferService.getTransferTarget(targetName); + } + transferService.enableTransferTarget(targetName, true); + + + return ctx; + } + }; + + final TestContext testContext = tran.doInTransaction(setupCB); + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); transferServiceImpl.setDescriptorService(mockedDescriptorService); - + + RetryingTransactionCallback firstTransferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + logger.debug("First transfer - create new node (no content yet)"); + + /** + * Step 0: Transfer our node which has no content + */ + + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.parentNodeRef); + nodes.add(testContext.contentNodeRef); + nodes.add(testContext.moveToNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + + return null; + } + }; + + tran.doInTransaction(firstTransferCB); + + RetryingTransactionCallback validateTransferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + + // Now validate that the target node exists and has similar properties to the source + NodeRef destNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + NodeRef destParentNodeRef = testNodeFactory.getMappedNodeRef(testContext.parentNodeRef); + + ChildAssociationRef destParent = nodeService.getPrimaryParent(destNodeRef); + assertEquals("parent node ref not correct prior to test", destParentNodeRef, destParent.getParentRef()); + + return null; + } + }; + + tran.doInTransaction(validateTransferCB); + + /** - * Now go ahead and create our first transfer target - */ - String targetName = "testTransferMoveNode"; - TransferTarget transferMe; - NodeRef contentNodeRef; - NodeRef parentNodeRef; - NodeRef destNodeRef; - NodeRef moveToNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test node that we will read and write - */ - String name = GUID.generate(); - - ChildAssociationRef newParent = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - parentNodeRef = newParent.getChildRef(); - nodeService.setProperty(parentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(parentNodeRef, ContentModel.PROP_NAME, name); - - ChildAssociationRef child = nodeService.createNode(parentNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("TransferOneNode"), ContentModel.TYPE_CONTENT); - contentNodeRef = child.getChildRef(); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, "TransferOneNode"); - - ChildAssociationRef moveTo = nodeService.createNode(parentNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("moveTo"), ContentModel.TYPE_FOLDER); - moveToNodeRef = moveTo.getChildRef(); - nodeService.setProperty(moveToNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(moveToNodeRef, ContentModel.PROP_NAME, "moveTo"); - - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - transferService.enableTransferTarget(targetName, true); - } - finally - { - endTransaction(); - } - - logger.debug("First transfer - create new node (no content yet)"); - startNewTransaction(); - try - { - /** - * Step 0: Transfer our node which has no content - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(parentNodeRef); - nodes.add(contentNodeRef); - nodes.add(moveToNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - NodeRef destParentNodeRef = testNodeFactory.getMappedNodeRef(parentNodeRef); - - ChildAssociationRef destParent = nodeService.getPrimaryParent(destNodeRef); - assertEquals("parent node ref not correct prior to test", destParentNodeRef, destParent.getParentRef()); - } - finally - { - endTransaction(); - } - - /** - * Step 1: Move a node through transfer - * Move the destination node - * transfer (Should transfer the destination node back) - */ - logger.debug("Transfer again with moved node"); - startNewTransaction(); - try - { - // Move the node up one level on the destination. - nodeService.moveNode(contentNodeRef, moveToNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("testOneNode")); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - NodeRef destParentNodeRef = testNodeFactory.getMappedNodeRef(moveToNodeRef); - - ChildAssociationRef destParent = nodeService.getPrimaryParent(destNodeRef); - assertEquals("node not moved", destParentNodeRef, destParent.getParentRef()); + * Step 1: Move a node through transfer + * Move the destination node + * transfer (Should transfer the destination node back) + */ + + RetryingTransactionCallback moveNodeCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + logger.debug("Transfer again with moved node"); + + // Move the node up one level on the destination. + nodeService.moveNode(testContext.contentNodeRef, testContext.moveToNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("testOneNode")); + return null; + } + }; + + tran.doInTransaction(moveNodeCB); + + RetryingTransactionCallback secondTransferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + logger.debug("Second transfer"); + + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + + return null; + } + }; + + tran.doInTransaction(secondTransferCB); + + RetryingTransactionCallback secondValidateCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + // Now validate that the target node exists and has similar properties to the source + NodeRef destNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + NodeRef destParentNodeRef = testNodeFactory.getMappedNodeRef(testContext.moveToNodeRef); + + ChildAssociationRef destParent = nodeService.getPrimaryParent(destNodeRef); + assertEquals("node not moved", destParentNodeRef, destParent.getParentRef()); + + return null; + } + }; + + tran.doInTransaction(secondValidateCB); + + } // test move node - } - finally - { - endTransaction(); - } - - } // test move node - /** * Test the transfer method by sending a graph of nodes. * * This is a unit test so it does some shenanigans to send to he same instance of alfresco. */ public void testManyNodes() throws Exception - { - setDefaultRollback(false); - + { final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); final String CONTENT_TITLE = "ContentTitle"; @@ -1505,149 +1420,160 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testPathBasedUpdate() throws Exception { - setDefaultRollback(false); - + final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); + + final String CONTENT_TITLE = "ContentTitle"; + final String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + final String CONTENT_NAME = GUID.generate(); + final Locale CONTENT_LOCALE = Locale.GERMAN; + final String CONTENT_STRING = "Hello"; + final QName TEST_QNAME = QName.createQName(CONTENT_NAME); + + class TestContext + { + String targetName; + NodeRef contentNodeRef; + NodeRef newContentNodeRef; + NodeRef guestHome; + ChildAssociationRef child; + }; + + RetryingTransactionCallback setupCB = new RetryingTransactionCallback() + { + @Override + public TestContext execute() throws Throwable + { + TestContext ctx = new TestContext(); + ctx.targetName = GUID.generate(); + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + ctx.guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node that we will transfer. Its path is what is important + */ + ctx.child = nodeService.createNode(ctx.guestHome, ContentModel.ASSOC_CONTAINS, TEST_QNAME, ContentModel.TYPE_CONTENT); + ctx.contentNodeRef = ctx.child.getChildRef(); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_NAME, CONTENT_NAME); + + ContentWriter writer = contentService.getWriter(ctx.contentNodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + + /** + * Now go ahead and create our first transfer target + */ + if(!transferService.targetExists(ctx.targetName)) + { + createTransferTarget(ctx.targetName); + } + else + { + transferService.getTransferTarget(ctx.targetName); + } + + return ctx; + } + }; + + final TestContext testContext = tran.doInTransaction(setupCB); + /** * For unit test * - replace the HTTP transport with the in-process transport * - replace the node factory with one that will map node refs, paths etc. */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - String CONTENT_NAME = GUID.generate(); - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - String targetName = GUID.generate(); - NodeRef contentNodeRef; - NodeRef newContentNodeRef; - - QName TEST_QNAME = QName.createQName(CONTENT_NAME); - NodeRef guestHome; - ChildAssociationRef child; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test node that we will transfer. Its path is what is important - */ - child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, TEST_QNAME, ContentModel.TYPE_CONTENT); - contentNodeRef = child.getChildRef(); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, CONTENT_NAME); - - ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - - /** - * Now go ahead and create our first transfer target - */ - if(!transferService.targetExists(targetName)) + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + final UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + RetryingTransactionCallback step1CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { - createTransferTarget(targetName); + /** + * Transfer our transfer target node + */ + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(testContext.targetName, definition); + return null; } - else - { - transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer our transfer target node - */ - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(contentNodeRef)); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); - assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - - /** - * Now delete the content node and re-create another one with the old path - */ - nodeService.deleteNode(contentNodeRef); - - child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, TEST_QNAME, ContentModel.TYPE_CONTENT); - newContentNodeRef = child.getChildRef(); - nodeService.setProperty(newContentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED); - - /** - * Transfer our node which is a new node (so will not exist on the back end) with a path that already has a node. - */ + }; + tran.doInTransaction(step1CB); + + RetryingTransactionCallback transfer1CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { + // Now validate that the target node exists and has similar properties to the source + NodeRef destNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(testContext.contentNodeRef)); + assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); + assertEquals("type is wrong", nodeService.getType(testContext.contentNodeRef), nodeService.getType(destNodeRef)); + + /** + * Now delete the content node and re-create another one with the old path + */ + nodeService.deleteNode(testContext.contentNodeRef); + + testContext.child = nodeService.createNode(testContext.guestHome, ContentModel.ASSOC_CONTAINS, TEST_QNAME, ContentModel.TYPE_CONTENT); + testContext.newContentNodeRef = testContext.child.getChildRef(); + nodeService.setProperty(testContext.newContentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED); + + /** + * Transfer our node which is a new node (so will not exist on the back end) with a path that already has a node. + */ + { TransferDefinition definition = new TransferDefinition(); Setnodes = new HashSet(); - nodes.add(newContentNodeRef); + nodes.add(testContext.newContentNodeRef); definition.setNodes(nodes); - transferService.transfer(targetName, definition); + transferService.transfer(testContext.targetName, definition); + } + return null; } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef oldDestNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - NodeRef newDestNodeRef = testNodeFactory.getMappedNodeRef(newContentNodeRef); - - // Now validate that the target node does not exist - it should have - // been updated by path. - assertFalse("unit test stuffed up - comparing with self", oldDestNodeRef.equals(newDestNodeRef)); - assertFalse("new dest node ref exists", nodeService.exists(newDestNodeRef)); - assertTrue("old dest node does not exists", nodeService.exists(oldDestNodeRef)); - - assertEquals("title is wrong", (String)nodeService.getProperty(oldDestNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED); -// assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - } - finally - { - endTransaction(); - } + }; + tran.doInTransaction(transfer1CB); + + RetryingTransactionCallback validateStep1CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + NodeRef oldDestNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + NodeRef newDestNodeRef = testNodeFactory.getMappedNodeRef(testContext.newContentNodeRef); + + // Now validate that the target node does not exist - it should have + // been updated by path. + assertFalse("unit test stuffed up - comparing with self", oldDestNodeRef.equals(newDestNodeRef)); + assertFalse("new dest node ref exists", nodeService.exists(newDestNodeRef)); + assertTrue("old dest node does not exists", nodeService.exists(oldDestNodeRef)); + + assertEquals("title is wrong", (String)nodeService.getProperty(oldDestNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED); + // assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); + return null; + } + }; + tran.doInTransaction(validateStep1CB); + } // Path based update @@ -1870,81 +1796,75 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testAsyncCancel() throws Exception { - int MAX_SLEEPS = 5; - + final int MAX_SLEEPS = 5; + + final String CONTENT_TITLE = "ContentTitle"; + final String CONTENT_NAME_A = "Demo Node A"; + final String CONTENT_NAME_B = "Demo Node B"; + final Locale CONTENT_LOCALE = Locale.GERMAN; + final String CONTENT_STRING = "Hello"; + final String targetName = "testAsyncCallback"; /** - * Get guest home - */ + * Get guest home + */ String guestHomeQuery = "/app:company_home/app:guest_home"; ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); + final NodeRef guestHome = guestHomeResult.getNodeRef(0); + + final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); + + class TestContext + { + TransferTarget transferMe; + NodeRef nodeRefA = null; + NodeRef nodeRefB = null; + }; /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Now go ahead and create our first transfer target - * This needs to be committed before we can call transfer asycnc. - */ - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_NAME_A = "Demo Node A"; - String CONTENT_NAME_B = "Demo Node B"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - NodeRef nodeRefA = null; - NodeRef nodeRefB = null; - String targetName = "testAsyncCallback"; + * Unit test kludge to transfer from guest home to company home + */ + final UnitTestTransferManifestNodeFactory testNodeFactory = unitTestKludgeToTransferGuestHomeToCompanyHome(); + + + RetryingTransactionCallback setupCB = new RetryingTransactionCallback() { - UserTransaction trx = transactionService.getNonPropagatingUserTransaction(); - trx.begin(); - try + @Override + public TestContext execute() throws Throwable { - nodeRefA = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_A); - - if(nodeRefA == null) + TestContext ctx = new TestContext(); + + ctx.nodeRefA = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_A); + + if(ctx.nodeRefA == null) { /** * Create a test node that we will read and write */ ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT); - nodeRefA = child.getChildRef(); - nodeService.setProperty(nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A); - - ContentWriter writer = contentService.getWriter(nodeRefA, ContentModel.PROP_CONTENT, true); + ctx.nodeRefA = child.getChildRef(); + nodeService.setProperty(ctx.nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A); + + ContentWriter writer = contentService.getWriter(ctx.nodeRefA, ContentModel.PROP_CONTENT, true); writer.setLocale(CONTENT_LOCALE); writer.putContent(CONTENT_STRING); } - - nodeRefB = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_B); - - if(nodeRefB == null) + + ctx.nodeRefB = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_B); + + if(ctx.nodeRefB == null) { ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT); - nodeRefB = child.getChildRef(); - nodeService.setProperty(nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B); - - ContentWriter writer = contentService.getWriter(nodeRefB, ContentModel.PROP_CONTENT, true); + ctx.nodeRefB = child.getChildRef(); + nodeService.setProperty(ctx.nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B); + + ContentWriter writer = contentService.getWriter(ctx.nodeRefB, ContentModel.PROP_CONTENT, true); writer.setLocale(CONTENT_LOCALE); writer.putContent(CONTENT_STRING); } - + /** * Now go ahead and create our first transfer target */ @@ -1956,28 +1876,24 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest { transferService.getTransferTarget(targetName); } - } - finally - { - int status = trx.getStatus(); - - trx.commit(); - } - } - + + return ctx; + } + }; + + final TestContext testContext = tran.doInTransaction(setupCB); + /** * The transfer report is a plain report of the transfer - no async shenanigans to worry about */ - ListtransferReport = new ArrayList(50); - - startNewTransaction(); - try - { - /** - * Call the transferAsync method. - */ + final ListtransferReport = new ArrayList(50); + + RetryingTransactionCallback transferAsyncCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { - + /** * The poison callback will cancel the transfer after * the begin @@ -1989,57 +1905,57 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest public void processEvent(TransferEvent event) { logger.debug(event.toString()); - + if(event instanceof TransferEventBegin) { TransferEventBegin beginEvent = (TransferEventBegin)event; transferId = beginEvent.getTransferId(); - + transferService.cancelAsync(transferId); } } }; - + TestTransferCallback callback = new TestTransferCallback(); Set callbacks = new HashSet(); callbacks.add(callback); callbacks.add(poison); TransferDefinition definition = new TransferDefinition(); Setnodes = new HashSet(); - nodes.add(nodeRefA); - nodes.add(nodeRefB); + nodes.add(testContext.nodeRefA); + nodes.add(testContext.nodeRefB); definition.setNodes(nodes); - + transferService.transferAsync(targetName, definition, callbacks); logger.debug("transfer async has returned"); - + /** * Need to poll the transfer events here until callback receives the last event */ Queue events = callback.getEvents(); - + int sleepCount = MAX_SLEEPS; boolean ended = false; - + TransferEvent event = events.poll(); while (!ended) { logger.debug("polling loop:" + sleepCount); - + while(event != null) { /** * Got an event - reset the sleep counter */ sleepCount = MAX_SLEEPS; - + logger.debug("Got an event" + event.toString()); - + /** * Squirrel away the event for analysis later */ transferReport.add(event); - + /** * If we read the last record which will either be SUCCESS or ERROR then we we have finished */ @@ -2048,13 +1964,13 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest logger.debug("got last event"); ended = true; } - + /** * Try to get the next event */ event = events.poll(); } - + if(event == null && !ended) { if(sleepCount <= 0) @@ -2073,424 +1989,33 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest Thread.sleep(5000); } } - + /** * Try to get the next event */ event = events.poll(); } } - } - - /** - * Now validate the transferReport - */ - assertTrue("transfer report is too small", transferReport.size() > 3); - assertTrue("transfer report does not start with START", transferReport.get(0).getTransferState().equals(TransferEvent.TransferState.START)); - assertTrue("transfer report does not end with CANCELLED", transferReport.get(transferReport.size()-1).getTransferState().equals(TransferEvent.TransferState.CANCELLED)); - // last event is the transfer report event. - } - finally - { -// UserTransaction trx = transactionService.getNonPropagatingUserTransaction(); -// trx.begin(); - transferService.deleteTransferTarget(targetName); -// trx.commit(); - endTransaction(); - } + + + + return null; + } + }; + tran.doInTransaction(transferAsyncCB); + + + /** + * Now validate the transferReport + */ + assertTrue("transfer report is too small", transferReport.size() > 3); + assertTrue("transfer report does not start with START", transferReport.get(0).getTransferState().equals(TransferEvent.TransferState.START)); + assertTrue("transfer report does not end with CANCELLED", transferReport.get(transferReport.size()-1).getTransferState().equals(TransferEvent.TransferState.CANCELLED)); + // last event is the transfer report event. + + } // test async cancel - /** - * Test the transfer report. - * - * This is a unit test so it does some shenanigans to send to the same instance of alfresco. - */ - public void testTransferReport() throws Exception - { - setDefaultRollback(false); - - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Now go ahead and create our first transfer target - * This needs to be committed before we can call transfer asycnc. - */ - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_NAME_A = "Report Node A"; - String CONTENT_NAME_B = "Report Node B"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - NodeRef nodeRefA = null; - NodeRef nodeRefB = null; - NodeRef testFolder = null; - - String targetName = "testTransferReport"; - - startNewTransaction(); - try - { - { - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - testFolder = child.getChildRef(); - nodeService.setProperty(testFolder, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(testFolder, ContentModel.PROP_NAME, name); - } - - { - /** - * Create a test node that we will read and write - */ - ChildAssociationRef child = nodeService.createNode(testFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT); - nodeRefA = child.getChildRef(); - nodeService.setProperty(nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A); - - ContentWriter writer = contentService.getWriter(nodeRefA, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - - { - ChildAssociationRef child = nodeService.createNode(testFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT); - nodeRefB = child.getChildRef(); - nodeService.setProperty(nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B); - - ContentWriter writer = contentService.getWriter(nodeRefB, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - - /** - * Now go ahead and create our first transfer target - */ - if(!transferService.targetExists(targetName)) - { - createTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - NodeRef transferReport = null; - NodeRef transferDestReport = null; - - /** - * Step 1. - * Call the transfer method. to get a failed transfer - orphan nodes exist - */ - setDefaultRollback(true); - startNewTransaction(); - try - { - TestTransferCallback callback = new TestTransferCallback(); - Set callbacks = new HashSet(); - callbacks.add(callback); - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(nodeRefA); - nodes.add(nodeRefB); - // missing the folder node (testFolder) - definition.setNodes(nodes); - - // Do the transfer here - - try - { - transferService.transfer(targetName, definition, callbacks); - fail("transfer should have failed with an orphan not found exception"); - } - catch (TransferException te) - { - logger.debug("deliberatly caught and ignored exception"); - } - - // Can't dirty read transfer report here - - boolean foundSourceReport = false; - boolean foundDestReport = false; - - for(TransferEvent event : callback.getEvents()) - { - if(event instanceof TransferEventReport) - { - TransferEventReport reportEvent = (TransferEventReport)event; - switch (reportEvent.getReportType()) - { - case DESTINATION: - foundDestReport = true; - transferDestReport = reportEvent.getNodeRef(); - assertNotNull("dest transfer nodeId null", transferDestReport); - break; - - case SOURCE: - foundSourceReport = true; - transferReport = reportEvent.getNodeRef(); - break; - } - } - } - - assertTrue("source report not found", foundSourceReport); - assertTrue("dest report not found", foundDestReport); - } - finally - { - endTransaction(); - } - - setDefaultRollback(false); - - /** - * Now validate the client side error transfer report against the xsd file - */ - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(transferReport, ContentModel.PROP_CONTENT); - assertNotNull("transfer reader is null", reader); - assertEquals("client report mimetype not set", reader.getMimetype(), MimetypeMap.MIMETYPE_XML); - String name = (String)nodeService.getProperty(transferReport, ContentModel.PROP_NAME); - assertTrue("client report does not end with .xml", name.endsWith(".xml")); - - logger.debug("This report should have failed"); - if(logger.isDebugEnabled()) - { - dumpToSystemOut(transferReport); - } - - // Now validate the client side transfer report against the XSD - Source transferReportSource = new StreamSource(reader.getContentInputStream()); - SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/report/TransferReport2.xsd"; - Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); - Validator validator = schema.newValidator(); - try - { - validator.validate(transferReportSource); - } - catch (Exception e) - { - fail(e.getMessage() ); - } - } - finally - { - endTransaction(); - } - - /** - * Step 2 - * Call the transfer method to get a good success transfer report - */ - startNewTransaction(); - try - { - { - TestTransferCallback callback = new TestTransferCallback(); - Set callbacks = new HashSet(); - callbacks.add(callback); - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(nodeRefA); - nodes.add(nodeRefB); - nodes.add(testFolder); - definition.setNodes(nodes); - - transferReport = transferService.transfer(targetName, definition, callbacks); - assertNotNull("transfer report is null", transferReport); - // Can't dirty read transfer report here - - boolean foundSourceReport = false; - boolean foundDestReport = false; - - for(TransferEvent event : callback.getEvents()) - { - if(event instanceof TransferEventReport) - { - TransferEventReport reportEvent = (TransferEventReport)event; - switch (reportEvent.getReportType()) - { - case DESTINATION: - foundDestReport = true; - transferDestReport = reportEvent.getNodeRef(); - assertNotNull("dest transfer nodeId null", transferDestReport); - assertFalse("dest transfer nodeId not correct", transferReport.equals(transferDestReport)); - break; - - case SOURCE: - foundSourceReport = true; - - assertEquals("source transfer nodeId not correct", transferReport, reportEvent.getNodeRef()); - break; - } - } - } - - assertTrue("source report not found", foundSourceReport); - assertTrue("dest report not found", foundDestReport); - } - } - finally - { - endTransaction(); - } - - /** - * Now validate the client side transfer report against the xsd file - */ - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(transferReport, ContentModel.PROP_CONTENT); - assertNotNull("transfer reader is null", reader); - - logger.debug("This report should succeed"); - if(logger.isDebugEnabled()) - { - dumpToSystemOut(transferReport); - } - - // Now validate the client side transfer report against the XSD - Source transferReportSource = new StreamSource(reader.getContentInputStream()); - SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/report/TransferReport2.xsd"; - Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); - Validator validator = schema.newValidator(); - try - { - validator.validate(transferReportSource); - } - catch (Exception e) - { - fail(e.getMessage() ); - } - } - finally - { - endTransaction(); - } - - /** - * Now validate the destination side transfer report against its xsd file - */ - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(transferDestReport, ContentModel.PROP_CONTENT); - assertNotNull("transfer reader is null", reader); - - assertEquals("dest report mimetype not set", reader.getMimetype(), MimetypeMap.MIMETYPE_XML); - String name = (String)nodeService.getProperty(transferReport, ContentModel.PROP_NAME); - assertTrue("dest report does not end with .xml", name.endsWith(".xml")); - - if(logger.isDebugEnabled()) - { - dumpToSystemOut(transferDestReport); - } - - // Now validate the destination side transfer report against the XSD - Source transferReportSource = new StreamSource(reader.getContentInputStream()); - SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/reportd/TransferDestinationReport.xsd"; - Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); - Validator validator = schema.newValidator(); - try - { - validator.validate(transferReportSource); - } - catch (Exception e) - { - fail("Destination Transfer Report " + e.getMessage() ); - } - } - finally - { - endTransaction(); - } - - /** - * Now validate all transfer reports. - */ - startNewTransaction(); - try - { - - String query = "TYPE:\"trx:transferReportDest\""; - ResultSet results = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_LUCENE, query); - - SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/reportd/TransferDestinationReport.xsd"; - Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); - Validator validator = schema.newValidator(); - - for(ResultSetRow result : results) - { - NodeRef reportNode = result.getNodeRef(); - - logger.debug("validating reportNode " + reportNode); - // Now validate the destination side transfer report against the XSD - ContentReader reader = contentService.getReader(reportNode, ContentModel.PROP_CONTENT); - assertNotNull("transfer reader is null", reader); - if (reader.getMimetype().equals(MimetypeMap.MIMETYPE_XML)) - { - Source transferReportSource = new StreamSource(reader.getContentInputStream()); - try - { - validator.validate(transferReportSource); - } - catch (Exception e) - { - fail("Destination Transfer Report reportNode:" + reportNode + " message :" + e.getMessage() ); - } - } - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - - logger.debug("now delete the target:" + targetName); - - transferService.deleteTransferTarget(targetName); - } - finally - { - endTransaction(); - } - } // test transfer report - private void dumpToSystemOut(NodeRef nodeRef) throws IOException { ContentReader reader2 = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT); @@ -2526,7 +2051,6 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest transferServiceImpl.setDescriptorService(mockedDescriptorService); return testNodeFactory; - } /** @@ -2664,4378 +2188,12 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ tran.doInTransaction(transferCB); tran.doInTransaction(finishCB); - } else { System.out.println("test supressed"); } - } // test big content - - /** - * Test the transfer method behaviour with respect to sync folders - sending a complete set - * of nodes and implying delete from the absence of an association. - * - * This is a unit test so it does some shenanigans to send to the same instance of alfresco. - * - * Tree of nodes - * - * A1 - * | | - * A2 A3 (Content Node) - * | - * A4 A5 (Content Node) - * - * Test steps - - * 1 add A1 - * transfer(sync) - * 2 add A2, A3, A4, A5 - * transfer(sync) - * 3 remove A2 - * transfer(sync) A4 and A5 should cascade delete on source - * 4 remove A3 - * transfer(sync) - * 5 add back A3 - new node ref - * transfer(sync) - * 6 add A2, A4, A5 - * transfer(sync) - * 7 test delete and restore of a single node - * remove A3 . - * transfer - * restore node A3 - * transfer - * 8 test delete and restore of a tree of nodes - * remove A2 (A4 and A5 should cascade delete on source as well) - * transfer - * restore node A2 (and A4 and A5 cascade restore) - * transfer - */ - public void testTransferSyncNodes() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Now go ahead and create our first transfer target - */ - String targetName = "testTransferSyncNodes"; - TransferTarget transferMe; - NodeRef A1NodeRef; - NodeRef A2NodeRef; - NodeRef A3NodeRef; - NodeRef A4NodeRef; - NodeRef A5NodeRef; - - NodeRef destNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test nodes A1 through A5 that we will read and write - */ - { - // Node A1 - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A2 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); - A2NodeRef = child.getChildRef(); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); - } - - { - // Node A3 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); - A3NodeRef = child.getChildRef(); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); - - ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A4 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_CONTENT); - A4NodeRef = child.getChildRef(); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); - - ContentWriter writer = contentService.getWriter(A4NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A5 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); - A5NodeRef = child.getChildRef(); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); - - ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - - /** - * Step 1. Add Node A1. - */ - startNewTransaction(); - try - { - /** - * Transfer Node A with no children - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); - assertEquals("type is wrong", nodeService.getType(A1NodeRef), nodeService.getType(destNodeRef)); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 2. Add Node A2, A3, A4, A5. - */ - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 3 - remove folder node A2 - */ - startNewTransaction(); - try - { - nodeService.deleteNode(A2NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - //nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - //nodes.add(A4NodeRef); - //nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 4 - remove content node A3 - */ - startNewTransaction(); - try - { - nodeService.deleteNode(A3NodeRef); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - //nodes.add(A2NodeRef); - //nodes.add(A3NodeRef); - //nodes.add(A4NodeRef); - //nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertFalse("dest node ref A3 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 5. Add back A3. - */ - startNewTransaction(); - try - { - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); - A3NodeRef = child.getChildRef(); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); - - ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - //nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - //nodes.add(A4NodeRef); - //nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 6. add A2, A4, A5 - */ - startNewTransaction(); - try - { - - { - // Node A2 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); - A2NodeRef = child.getChildRef(); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); - } - - { - // Node A4 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_CONTENT); - A4NodeRef = child.getChildRef(); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); - - ContentWriter writer = contentService.getWriter(A4NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A5 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); - A5NodeRef = child.getChildRef(); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); - - ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertTrue("dest node A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 7 - test delete and restore of a single node - * remove A3 . - * transfer - * restore node A3 - * transfer - */ - startNewTransaction(); - try - { - logger.debug("Step 7 - delete node A3"); - nodeService.deleteNode(A3NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - //nodes.add(A3NodeRef); A3 has gone. - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertFalse("dest node ref A3 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - NodeRef archivedNode = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, A3NodeRef.getId()); - NodeRef newNodeRef = nodeService.restoreNode(archivedNode, A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3")); - assertEquals("restored node ref is different", newNodeRef, A3NodeRef); - logger.debug("Step 7 - restore node A3"); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5. - * (So we are seeing what happens to node 3 on the target - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - } - finally - { - endTransaction(); - } - - /** - * Step 8 - test delete and restore of a tree - * remove A2 (A4, A5) should cascade delete. - * transfer - * restore node A2 - * transfer - */ - startNewTransaction(); - try - { - nodeService.deleteNode(A2NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - //nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - //nodes.add(A4NodeRef); - //nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - NodeRef archivedNode = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, A2NodeRef.getId()); - nodeService.restoreNode(archivedNode, A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2")); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - /** - * Transfer Node A 1-5. - * (So we are seeing what happens to node 2, 4, 5 on the target - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - } - finally - { - endTransaction(); - } - - } - - /** - * Test the transfer method behaviour with respect to sync with (local) alien nodes. - * - * So we have Repository A transferring content and Repository B is the local repo that we - * add and delete alien nodes. - * - * In general an alien node will prevent deletion of the parent folders - * - *
-     * Tree of nodes
-     * 
-     *      A1
-     *      |      |                      | 
-     *      A2     A3 (Content Node)      B9 (Alien Content Node)
-     *      |
-     *   A4 A5 B10 (Alien Content Node)   A6
-     *   |                                |
-     *   A7 B11 (Alien Content Node)      A8 B12 B13 (Alien Content Node)
-     *                                        |
-     *                                       B14
-     * 
- * Test steps - - *
    - *
  1. add A1, A2, A3, A4, A5, A6, A7, A8 - * transfer(sync)
  2. - *
  3. add Alien node B9. A1 becomes Alien.
  4. - *
  5. remove alien node B9. A1 becomes non Alien.
  6. - *
  7. add Alien node B10. A1 and A2 become Alien
  8. - *
  9. remove Alien node B10. A1 and A2 become non Alien
  10. - *
  11. add B12 and B14 A6, A2, A1 becomes Alien
  12. - *
  13. remove B14, B12, A6, A2, A1 remain Alien
  14. - *
  15. add B13 A6, A2, A1 remains Alien
  16. - *
  17. remove B13 A6, A2, A1 remains Alien
  18. - *
  19. remove B12 A6, A2, A1 becomes non Alien.
  20. - *
  21. add B9 and B10 A1 and A2 become Alien
  22. - *
  23. remove B10 A2 becomes non alien A1 remains alien.
  24. - *
  25. Add B11, delete A2 - * transfer sync
  26. - * (A5, A6, A7 and A8 should be deleted A2 and A4 remain since they contain alien content.) - *
- */ - public void testTransferInvadedByLocalAlienNodes() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.JAPAN; - String CONTENT_STRING = "Hello"; - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - * - * Mock the transfer service to be from Repo A - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - final String localRepositoryId = descriptorService.getCurrentRepositoryDescriptor().getId(); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Now go ahead and create our first transfer target - */ - String targetName = "testSyncWithAlienNodes"; - TransferTarget transferMe; - - NodeRef A1NodeRef; - NodeRef A2NodeRef; - NodeRef A3NodeRef; - NodeRef A4NodeRef; - NodeRef A5NodeRef; - NodeRef A6NodeRef; - NodeRef A7NodeRef; - NodeRef A8NodeRef; - NodeRef B9NodeRef; - NodeRef B10NodeRef; - NodeRef B11NodeRef; - NodeRef B12NodeRef; - NodeRef B13NodeRef; - NodeRef B14NodeRef; - - NodeRef destNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test nodes A1 through A8 that we will read and write - */ - { - // Node A1 - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A2 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); - A2NodeRef = child.getChildRef(); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); - } - - { - // Node A3 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); - A3NodeRef = child.getChildRef(); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); - - ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A4 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_FOLDER); - A4NodeRef = child.getChildRef(); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); - } - { - // Node A5 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); - A5NodeRef = child.getChildRef(); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); - - ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - - { - // Node A6 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A6"), ContentModel.TYPE_FOLDER); - A6NodeRef = child.getChildRef(); - nodeService.setProperty(A6NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A6NodeRef, ContentModel.PROP_NAME, "A6"); - } - { - // Node A7 - ChildAssociationRef child = nodeService.createNode(A4NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A7"), ContentModel.TYPE_CONTENT); - A7NodeRef = child.getChildRef(); - nodeService.setProperty(A7NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A7NodeRef, ContentModel.PROP_NAME, "A7"); - - ContentWriter writer = contentService.getWriter(A7NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A8 - ChildAssociationRef child = nodeService.createNode(A6NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A8"), ContentModel.TYPE_CONTENT); - A8NodeRef = child.getChildRef(); - nodeService.setProperty(A8NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A8NodeRef, ContentModel.PROP_NAME, "A8"); - - ContentWriter writer = contentService.getWriter(A8NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - - /** - * Step 1. add A1, A2, A3, A4, A5, A6, A7, A8 - * transfer(sync) - */ - startNewTransaction(); - try - { - /** - * Transfer Nodes A1 through A8 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - nodes.add(A6NodeRef); - nodes.add(A7NodeRef); - nodes.add(A8NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertFalse("unit test stuffed up - comparing with self", A1destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(A1destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); - assertEquals("type is wrong", nodeService.getType(A1NodeRef), nodeService.getType(A1destNodeRef)); - assertFalse("A1 is alien", nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 2 add Alien node B9 child of A1(dest). A1(dest) becomes Alien because it contains an alien child. - */ - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B9"), ContentModel.TYPE_CONTENT); - B9NodeRef = child.getChildRef(); - nodeService.setProperty(B9NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B9NodeRef, ContentModel.PROP_NAME, "B9"); - - ContentWriter writer = contentService.getWriter(B9NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - // Check injected transferred aspect. - assertTrue("node A1 is not alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); - assertTrue("node B9 is not alien", (Boolean)nodeService.hasAspect(B9NodeRef, TransferModel.ASPECT_ALIEN)); - - // Temp code - List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); - assertTrue("invaders contains local repository Id", invaders.contains(localRepositoryId)); - assertFalse("invaders contains REPO_ID_A", invaders.contains(REPO_ID_A)); - - } - finally - { - endTransaction(); - } - - /** - * Step 3 remove alien node B9. A1 becomes non Alien. - */ - startNewTransaction(); - try - { - logger.debug("delete node B9"); - nodeService.deleteNode(B9NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A3destNodeRef = testNodeFactory.getMappedNodeRef(A3NodeRef); - List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("node A3 is alien", (Boolean)nodeService.hasAspect(A3destNodeRef, TransferModel.ASPECT_ALIEN)); - assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * 4 add Alien node B10 child of A2. A1 and A2 become Alien - */ - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B10"), ContentModel.TYPE_CONTENT); - B10NodeRef = child.getChildRef(); - nodeService.setProperty(B10NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B10NodeRef, ContentModel.PROP_NAME, "B10"); - - ContentWriter writer = contentService.getWriter(B10NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - - assertTrue("node A1 is not alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien aspect", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * 5 remove Alien node B10. A1 and A2 become non Alien - */ - startNewTransaction(); - try - { - logger.debug("delete node B10"); - nodeService.deleteNode(B10NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - - assertFalse("node A1 is still alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("node A2 is still alien aspect", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * Step 6 - * add B12 (child of A6) and B14 A6, A2, A1 becomes Alien - */ - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B12"), ContentModel.TYPE_FOLDER); - B12NodeRef = child.getChildRef(); - nodeService.setProperty(B12NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B12NodeRef, ContentModel.PROP_NAME, "B12"); - - child = nodeService.createNode(B12NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B14"), ContentModel.TYPE_CONTENT); - B14NodeRef = child.getChildRef(); - nodeService.setProperty(B14NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B14NodeRef, ContentModel.PROP_NAME, "B14"); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node B14 is not alien", (Boolean)nodeService.hasAspect(B14NodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node B12 is not alien", (Boolean)nodeService.hasAspect(B12NodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * Step 7 - * Delete B14. B12 remains alien - */ - startNewTransaction(); - try - { - nodeService.deleteNode(B14NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node B12 is not alien", (Boolean)nodeService.hasAspect(B12NodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * Step 8 - * add B13 A6, A2, A1 remains Alien - */ - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B13"), ContentModel.TYPE_CONTENT); - B13NodeRef = child.getChildRef(); - nodeService.setProperty(B13NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B13NodeRef, ContentModel.PROP_NAME, "B13"); - - ContentWriter writer = contentService.getWriter(B13NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * Step 9 remove B13 A6, A2, A1 remains Alien Due to B12 - */ - startNewTransaction(); - try - { - nodeService.deleteNode(B13NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * Step 10 remove B12 A6, A2, A1 becomes non Alien. - */ - startNewTransaction(); - try - { - nodeService.deleteNode(B12NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - - assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("node A2 is still alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("node A6 is still alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - /** - * Step 11 add B9 and B10 A1 and A2 become Alien - */ - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B9"), ContentModel.TYPE_CONTENT); - B9NodeRef = child.getChildRef(); - nodeService.setProperty(B9NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B9NodeRef, ContentModel.PROP_NAME, "B9"); - - ContentWriter writer = contentService.getWriter(B9NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - - destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B10"), ContentModel.TYPE_CONTENT); - B10NodeRef = child.getChildRef(); - nodeService.setProperty(B10NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B10NodeRef, ContentModel.PROP_NAME, "B10"); - - writer = contentService.getWriter(B10NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - - /** - * Step 12 remove B10 A2 becomes non alien A1 remains alien. - */ - startNewTransaction(); - try - { - nodeService.deleteNode(B10NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - - // BUGBUG - assertTrue("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("node A2 is still alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - } - - finally - { - endTransaction(); - } - - - /** - * 13 Add Alien node B11. - */ - logger.debug("Step 12 Add Node B11, Delete A2 and sync"); - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A4NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B11"), ContentModel.TYPE_CONTENT); - B11NodeRef = child.getChildRef(); - nodeService.setProperty(B11NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B11NodeRef, ContentModel.PROP_NAME, "B11"); - - ContentWriter writer = contentService.getWriter(B11NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - - nodeService.deleteNode(A2NodeRef); - } - finally - { - endTransaction(); - } - - /** - * Step 14 - * delete A2 (will cascade delete A4, A5, A6, A7, A8 - * transfer sync - * (A5, A6, A7, A8 and should be deleted A2 and A4 remain since they contain alien content.) - */ - startNewTransaction(); - try - { - // Now validate A1, A2 and A4 are alien - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A4destNodeRef = testNodeFactory.getMappedNodeRef(A4NodeRef); - - - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A4 is not alien", (Boolean)nodeService.hasAspect(A4destNodeRef, TransferModel.ASPECT_ALIEN)); - - assertFalse("test error: node A2 not deleted", nodeService.exists(A2NodeRef)); - assertFalse("test error: node A4 not deleted", nodeService.exists(A4NodeRef)); - assertFalse("test error: node A5 not deleted", nodeService.exists(A5NodeRef)); - assertFalse("test error: node A6 not deleted", nodeService.exists(A6NodeRef)); - assertFalse("test error: node A7 not deleted", nodeService.exists(A7NodeRef)); - assertFalse("test error: node A8 not deleted", nodeService.exists(A8NodeRef)); - - assertTrue("test error: node does not exist", nodeService.exists(A3NodeRef)); - - /** - * Transfer Nodes A1 through A8 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A3NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - NodeRef A3destNodeRef = testNodeFactory.getMappedNodeRef(A3NodeRef); - NodeRef A4destNodeRef = testNodeFactory.getMappedNodeRef(A4NodeRef); - NodeRef A5destNodeRef = testNodeFactory.getMappedNodeRef(A5NodeRef); - NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); - NodeRef A7destNodeRef = testNodeFactory.getMappedNodeRef(A7NodeRef); - NodeRef A8destNodeRef = testNodeFactory.getMappedNodeRef(A8NodeRef); - - assertTrue("node A1 not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A2 not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node A4 not alien", (Boolean)nodeService.hasAspect(A4destNodeRef, TransferModel.ASPECT_ALIEN)); - assertTrue("node B11 does not exist", nodeService.exists(B11NodeRef)); - - assertTrue("node A3 deleted", nodeService.exists(A3destNodeRef)); - - assertFalse("node A5 not deleted", nodeService.exists(A5destNodeRef)); - assertFalse("node A6 not deleted", nodeService.exists(A6destNodeRef)); - assertFalse("node A7 not deleted", nodeService.exists(A7destNodeRef)); - assertFalse("node A8 not deleted", nodeService.exists(A8destNodeRef)); - } - - finally - { - endTransaction(); - } - } - - /** - * Test restore of a local node. - *
-     * Tree of nodes
-     *     A1   B1
-     *     |
-     *     B2
-     *     |
-     *     B3
-     * 
-     * 
    - *
  1. Add B2. A1 is alien.
  2. - *
  3. Delete B2. A1 not alien
  4. - *
  5. Restore B2. A1 is alien
  6. - *
  7. Add B3. A1 is alien
  8. - *
  9. Delete B2. A1 not alien
  10. - *
  11. Restore to B1. B2 and B3 not alien.
  12. - *
- * @throws Exception - */ - public void testLocalAlienRestore() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.JAPAN; - String CONTENT_STRING = "Hello"; - - - /** - * Now go ahead and create our first transfer target - */ - String targetName = "testRestoreOfAlienNodes"; - TransferTarget transferMe; - - NodeRef S0NodeRef; - NodeRef A0NodeRef; - NodeRef A1NodeRef; - NodeRef B1NodeRef; - NodeRef B2NodeRef; - NodeRef B3NodeRef; - - NodeRef destNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test nodes A1 through A8 that we will read and write - */ - { - // Node S0 - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - S0NodeRef = child.getChildRef(); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); - } - { - // Node A1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A0"), ContentModel.TYPE_FOLDER); - A0NodeRef = child.getChildRef(); - nodeService.setProperty(A0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A0NodeRef, ContentModel.PROP_NAME, "A0"); - } - { - // Node A1 - ChildAssociationRef child = nodeService.createNode(A0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); - } - { - // Node B1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); - B1NodeRef = child.getChildRef(); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - * - * Mock the transfer service to be from Repo A - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - pathMap.add(new Pair(nodeService.getPath(A0NodeRef), nodeService.getPath(B1NodeRef))); - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Step 1. add A1 - * transfer(sync) - */ - startNewTransaction(); - try - { - /** - * Transfer Nodes A1 - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - assertFalse("A1 is alien", nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - // Check injected transferred aspect. - assertNotNull("transferredAspect", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 2 add Alien node B1 child of A1(dest). - */ - startNewTransaction(); - try - { - destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B2"), ContentModel.TYPE_FOLDER); - B2NodeRef = child.getChildRef(); - nodeService.setProperty(B2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B2NodeRef, ContentModel.PROP_NAME, "B2"); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists and has similar properties to the source - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - // Check injected transferred aspect. - assertTrue("node A1 is not alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); - assertTrue("node B2 is not alien", (Boolean)nodeService.hasAspect(B2NodeRef, TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - /** - * Step 3 remove alien node B2. A1 becomes non Alien. - */ - startNewTransaction(); - try - { - logger.debug("delete node B2"); - nodeService.deleteNode(B2NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 4 restore alien node B2. A1 becomes Alien again - */ - startNewTransaction(); - try - { - logger.debug("restore node B2"); - NodeRef B2ArchiveNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, B2NodeRef.getId()); - nodeService.restoreNode(B2ArchiveNodeRef, testNodeFactory.getMappedNodeRef(A1NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("B2")); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step 5 - add B3 - */ - startNewTransaction(); - try - { - ChildAssociationRef child = nodeService.createNode(B2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B3"), ContentModel.TYPE_FOLDER); - B3NodeRef = child.getChildRef(); - nodeService.setProperty(B3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B3NodeRef, ContentModel.PROP_NAME, "B3"); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - assertTrue("node B3 is not alien", (Boolean)nodeService.hasAspect(B3NodeRef, TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - /** - * Step 5 remove alien node B2. A1 becomes non Alien (again). - */ - startNewTransaction(); - try - { - logger.debug("delete node B2"); - nodeService.deleteNode(B2NodeRef); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); - List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); - assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); - assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); - assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); - assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); - } - finally - { - endTransaction(); - } - - /** - * Step6 restore B2 and B3 to B1. - */ - startNewTransaction(); - try - { - logger.debug("restore node B2"); - NodeRef B2ArchiveNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, B2NodeRef.getId()); - nodeService.restoreNode(B2ArchiveNodeRef, B1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B2")); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("node A2 is still alien", (Boolean)nodeService.hasAspect(B2NodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("node A3 is still alien", (Boolean)nodeService.hasAspect(B3NodeRef, TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - } - - - - /** - * Test the transfer method with regard to permissions on a node. - *

- * Step 1: - * Create a node with a single permission - * Inherit:false - * Read, Admin, Allow - * Transfer - *

- * Step 2: - * Update it to have several permissions - * Inherit:false - * Read, Everyone, DENY - * Read, Admin, Allow - *

- * Step 3: - * Remove a permission - * Inherit:false - * Read, Admin, Allow - *

- * Step 4: - * Revert to inherit all permissions - * Inherit:true - *

- * This is a unit test so it does some shenanigans to send to the same instance of alfresco. - */ - public void testTransferWithPermissions() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Now go ahead and create our transfer target - */ - String targetName = "testTransferWithPermissions"; - TransferTarget transferMe; - NodeRef contentNodeRef; - NodeRef destNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test node that we will read and write - */ - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT); - contentNodeRef = child.getChildRef(); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, name); - - ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - - permissionService.setInheritParentPermissions(contentNodeRef, false); - permissionService.setPermission(contentNodeRef, "admin", PermissionService.READ, true); - - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * Step 1 - */ - logger.debug("First transfer - create new node with inheritParent permission off"); - startNewTransaction(); - try - { - /** - * Transfer our transfer target node - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists with the correct permissions - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); - assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - - // Check ACL of destination node - boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); - Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); - - boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); - Set destPerm = permissionService.getAllSetPermissions(destNodeRef); - - assertFalse("inherit parent permissions (src) flag is incorrect", srcInherit); - assertFalse("inherit parent permissions (dest) flag is incorrect", destInherit); - - // Check destination has the source's permissions - for (AccessPermission p : srcPerm) - { - logger.debug("checking permission :" + p); - assertTrue("permission is missing", destPerm.contains(p)); - } - } - finally - { - endTransaction(); - } - - /** - * Step 2 - * Update it to have several permissions - * Inherit:false - * Read, Everyone, DENY - * Read, Admin, Allow - */ - startNewTransaction(); - try - { - permissionService.setPermission(contentNodeRef, "EVERYONE", PermissionService.READ, false); - permissionService.setPermission(contentNodeRef, "admin", PermissionService.FULL_CONTROL, true); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer our transfer target node - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - - startNewTransaction(); - try - { - // Now validate that the target node exists with the correct permissions - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - - // Check ACL of destination node - boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); - Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); - - boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); - Set destPerm = permissionService.getAllSetPermissions(destNodeRef); - - assertFalse("inherit parent permissions (src) flag is incorrect", srcInherit); - assertFalse("inherit parent permissions (dest) flag is incorrect", destInherit); - - // Check destination has the source's permissions - for (AccessPermission p : srcPerm) - { - logger.debug("checking permission :" + p); - assertTrue("Step2, permission is missing", destPerm.contains(p)); - } - } - finally - { - endTransaction(); - } - - /** - * Step 3 Remove a permission - */ - startNewTransaction(); - try - { - permissionService.deletePermission(contentNodeRef, "admin", PermissionService.FULL_CONTROL); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer our transfer target node - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists with the correct permissions - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - - // Check ACL of destination node - boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); - Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); - - boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); - Set destPerm = permissionService.getAllSetPermissions(destNodeRef); - - assertFalse("inherit parent permissions (src) flag is incorrect", srcInherit); - assertFalse("inherit parent permissions (dest) flag is incorrect", destInherit); - - // Check destination has the source's permissions - for (AccessPermission p : srcPerm) - { - logger.debug("checking permission :" + p); - assertTrue("permission is missing", destPerm.contains(p)); - } - } - finally - { - endTransaction(); - } - - /** - * Step 4 - * Revert to inherit all permissions - */ - startNewTransaction(); - try - { - permissionService.setInheritParentPermissions(contentNodeRef, true); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - /** - * Transfer our transfer target node - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists with the correct permissions - destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); - assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); - assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); - assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); - - // Check ACL of destination node - boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); - Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); - - boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); - Set destPerm = permissionService.getAllSetPermissions(destNodeRef); - - assertTrue("inherit parent permissions (src) flag is incorrect", srcInherit); - assertTrue("inherit parent permissions (dest) flag is incorrect", destInherit); - - // Check destination has the source's permissions - for (AccessPermission p : srcPerm) - { - if(p.isSetDirectly()) - { - logger.debug("checking permission :" + p); - assertTrue("permission is missing:" + p, destPerm.contains(p)); - } - } - } - finally - { - endTransaction(); - } - } - - - /** - * Transfer with read only flag - * - * Node tree for this test - *

 
-     *           A (Folder)
-     *   |                 | 
-     *   B (Content)   C (Folder)
-     *                     |
-     *                     D (Content)
-     * 
- * Step 1 - * transfer Nodes ABCD with read only flag set - content should all be locked on destination - *

- * Step 2 - * lock B (Content node) as user fred - * transfer (read only) - destination lock should change to Admin - *

- * Step 3 - * lock C (Folder) as user fred - * transfer (read only) - destination lock should change to Admin - *

- * Step 4 - * transfer without read only flag - locks should revert from Admin to Fred. - *

- * Step 5 - * remove locks on A and B - transfer without read only flag - content should all be unlocked. - */ - public void testReadOnlyFlag() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - String CONTENT_NAME = "Demo Node 1"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "The quick brown fox"; - Setnodes = new HashSet(); - String USER_ONE = "TransferServiceImplTest"; - String PASSWORD = "Password"; - - String targetName = "testReadOnlyFlag"; - - NodeRef nodeA; - NodeRef nodeB; - NodeRef nodeC; - NodeRef nodeD; - - ChildAssociationRef child; - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - TransferTarget transferMe; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test node that we will read and write - */ - String guid = GUID.generate(); - - child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(guid), ContentModel.TYPE_FOLDER); - nodeA = child.getChildRef(); - nodeService.setProperty(nodeA , ContentModel.PROP_TITLE, guid); - nodeService.setProperty(nodeA , ContentModel.PROP_NAME, guid); - nodes.add(nodeA); - - child = nodeService.createNode(nodeA, ContentModel.ASSOC_CONTAINS, QName.createQName("testNodeB"), ContentModel.TYPE_CONTENT); - nodeB = child.getChildRef(); - nodeService.setProperty(nodeB , ContentModel.PROP_TITLE, CONTENT_TITLE + "B"); - nodeService.setProperty(nodeB , ContentModel.PROP_NAME, "DemoNodeB"); - - { - ContentWriter writer = contentService.getWriter(nodeB , ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - nodes.add(nodeB); - } - - child = nodeService.createNode(nodeA, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeC"), ContentModel.TYPE_FOLDER); - nodeC = child.getChildRef(); - nodeService.setProperty(nodeC , ContentModel.PROP_TITLE, "TestNodeC"); - nodeService.setProperty(nodeC , ContentModel.PROP_NAME, "TestNodeC"); - nodes.add(nodeC); - - child = nodeService.createNode(nodeC, ContentModel.ASSOC_CONTAINS, QName.createQName("testNodeD"), ContentModel.TYPE_CONTENT); - nodeD = child.getChildRef(); - nodeService.setProperty(nodeD , ContentModel.PROP_TITLE, CONTENT_TITLE + "D"); - nodeService.setProperty(nodeD , ContentModel.PROP_NAME, "DemoNodeD"); - { - ContentWriter writer = contentService.getWriter(nodeD , ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - nodes.add(nodeD); - } - - // Create users - createUser(USER_ONE, PASSWORD); - - /** - * Now go ahead and create our first transfer target - */ - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * Step 1. - * transfer Nodes ABCD with read only flag set - content should all be locked on destination - */ - logger.debug("transfer read only - step 1"); - startNewTransaction(); - try - { - /** - * Transfer our transfer target nodes - */ - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setReadOnly(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Check destination nodes are locked. - assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); - assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); - assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); - assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); - - assertTrue("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); - } - finally - { - endTransaction(); - } - - /** - * Step 2 - * lock B (Content node) as user ONE - * transfer (read only) - destination lock should change user to "Admin" - */ - startNewTransaction(); - try - { - AuthenticationUtil.pushAuthentication(); - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - lockService.lock(nodeB, LockType.READ_ONLY_LOCK); - } - finally - { - assertEquals("test error: dest node B lock ownership", nodeService.getProperty(nodeB, ContentModel.PROP_LOCK_OWNER), USER_ONE); - AuthenticationUtil.popAuthentication(); - endTransaction(); - } - - logger.debug("transfer read only - step 2"); - startNewTransaction(); - try - { - /** - * Transfer our transfer target nodes - */ - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setReadOnly(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Check destination nodes are locked. - assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); - assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); - assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); - assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); - - assertTrue("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); - - // check that the lock owner is no longer USER_ONE - assertTrue("lock owner not changed", !USER_ONE.equalsIgnoreCase((String)nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.PROP_LOCK_OWNER))); - } - finally - { - endTransaction(); - } - - - /** - * Step 3 - * lock C (Folder node) as user ONE - * transfer (read only) - destination lock should change to Admin - */ - startNewTransaction(); - try - { - AuthenticationUtil.pushAuthentication(); - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - lockService.lock(nodeC, LockType.READ_ONLY_LOCK); - } - finally - { - assertEquals("test error: dest node C lock ownership", nodeService.getProperty(nodeC, ContentModel.PROP_LOCK_OWNER), USER_ONE); - AuthenticationUtil.popAuthentication(); - endTransaction(); - } - - logger.debug("transfer read only - step 3"); - startNewTransaction(); - try - { - /** - * Transfer our transfer target nodes - */ - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setReadOnly(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Check destination nodes are locked. - assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); - assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); - assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); - assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); - - assertTrue("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); - - // check that the lock owner is no longer USER_ONE for content node B and folder node C - assertTrue("lock owner not changed", !USER_ONE.equalsIgnoreCase((String)nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.PROP_LOCK_OWNER))); - assertTrue("lock owner not changed", !USER_ONE.equalsIgnoreCase((String)nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.PROP_LOCK_OWNER))); - } - finally - { - endTransaction(); - } - - - /** - * Step 4 - * transfer without read only flag - locks should revert from Admin to USER_ONE. - */ - logger.debug("transfer read only - step 4"); - startNewTransaction(); - try - { - /** - * Transfer our transfer target nodes - */ - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setReadOnly(false); // turn off read-only - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - // Check destination nodes are not locked. - assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); - assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); - assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); - assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); - - assertFalse("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); - assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); - assertFalse("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); - - assertEquals("dest node B lock ownership", nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.PROP_LOCK_OWNER), USER_ONE); - assertEquals("dest node C lock ownership", nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.PROP_LOCK_OWNER), USER_ONE); - - } - finally - { - endTransaction(); - } - - - /** - * Step 5 - * remove locks on A and B - transfer without read only flag - content should all be unlocked. - */ - logger.debug("transfer read only - step 5"); - startNewTransaction(); - try - { - lockService.unlock(nodeB); - lockService.unlock(nodeC); - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - /** - * Transfer our transfer target nodes - */ - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setReadOnly(false); // turn off read-only - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - // Check destination nodes are not locked. - assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); - assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); - assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); - assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); - - assertFalse("test fail: dest node B is still locked", nodeService.hasAspect(nodeB, ContentModel.ASPECT_LOCKABLE)); - assertFalse("test fail: dest node C is still locked", nodeService.hasAspect(nodeC, ContentModel.ASPECT_LOCKABLE)); - - assertFalse("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); - assertFalse("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); - assertFalse("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); - assertFalse("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); - } - finally - { - endTransaction(); - } - } // end test read only flag - - /** - * Transfer sync from multiple repos. - * - * This is a unit test so does lots of shenanigans to fake transfer from three repositories on a single repo. - * - * Multi-repo sync depends upon the following pieces of functionality - * a) transferred nodes are tagged with a trx:transferred aspect containing the originating repository - * id and the from repository id - * b) to support hub and spoke - when syncing don't imply delete nodes that are not "from" the transferring system - * - * * Tree of nodes - * A1 - * | | - * A2 A3 (Content Node) B6 (Content Node) - * | - * A4 A5 B7 - * - * Step 1 - * Hub and Spoke Sync - * create Tree A1...A5 - * transfer (sync) - * check the transfered aspects on destination - * create node B6. Fake its transfered aspect to be from Repo B. - * transfer (sync) - * - * Step 2 - * Chain Sync - * Create Node A7 "from repo B". - * Change Nodes A1 ... A5 source to be received "from repo B" - * transfer - * - */ - public void testTwoRepoSync() throws Exception - { - /** - * Step 1 - * create Tree A1...A6 - * transfer (sync) - * check the transfered aspect - * create node B6. Fake its transfered aspect to be from Repo B, Non Alien. - * transfer (sync) - */ - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - replace the node factory with one that will map node refs, paths etc. - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - String repositoryId = REPO_ID_A; - - /** - * Now go ahead and create our first transfer target - */ - String targetName = "testTransferSyncNodes"; - TransferTarget transferMe; - NodeRef A1NodeRef; - NodeRef A2NodeRef; - NodeRef A3NodeRef; - NodeRef A4NodeRef; - NodeRef A5NodeRef; - NodeRef B6NodeRef; - NodeRef A7NodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test nodes A1 through A5 that we will read and write - */ - { - // Node A1 - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A2 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); - A2NodeRef = child.getChildRef(); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); - } - - { - // Node A3 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); - A3NodeRef = child.getChildRef(); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); - - ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A4 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_CONTENT); - A4NodeRef = child.getChildRef(); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); - - ContentWriter writer = contentService.getWriter(A4NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - { - // Node A5 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); - A5NodeRef = child.getChildRef(); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); - - ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - Setnodes = new HashSet(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - - /** - * transfer (sync) - * check the transfered aspect - * create node B6. Fake its transfered aspect to be from Repo B, Non Alien. - * transfer (sync) - */ - startNewTransaction(); - try - { - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - // Node B6 - faked transfer from repository B. Child of Destination node A1 - NodeRef a1Dest = testNodeFactory.getMappedNodeRef(A1NodeRef); - - assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); - assertEquals("dest node A1 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - assertEquals("dest node A1 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); - assertEquals("dest node A2 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - assertEquals("dest node A2 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); - assertEquals("dest node A3 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - assertEquals("dest node A3 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); - assertEquals("dest node A4 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - assertEquals("dest node A4 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); - assertEquals("dest node A5 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - assertEquals("dest node A5 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); - - ChildAssociationRef child = nodeService.createNode(a1Dest, ContentModel.ASSOC_CONTAINS, QName.createQName("B6"), ContentModel.TYPE_CONTENT); - B6NodeRef = child.getChildRef(); - nodeService.setProperty(B6NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(B6NodeRef, ContentModel.PROP_NAME, "B6"); - - /** - * The first tranfer was mocked to repository A - this is repository B. - */ - - // This is repository B so there's no need to fake it -// nodeService.setProperty(B6NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); -// nodeService.setProperty(B6NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); - - ContentWriter writer = contentService.getWriter(B6NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Does node B6 still exist ? - assertTrue("dest node B6 does not exist", nodeService.exists(B6NodeRef)); - assertTrue("B6 not alien", nodeService.hasAspect(B6NodeRef, TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - /** Step 2 - * Chain Sync - * Change Nodes A1 ... A5 source to be received "from repo B" - * Create Node A7 - Fake it to be received "from repo B" - * transfer - */ - String NEW_TITLE="Chain sync"; - - - startNewTransaction(); - try - { - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); - nodeService.setProperty(A1NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); - nodeService.setProperty(A1NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); - - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); - nodeService.setProperty(A2NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); - nodeService.setProperty(A2NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); - - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); - nodeService.setProperty(A3NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); - nodeService.setProperty(A3NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); - - /** - * The repository was mocked to repoistory A. This is repository B - */ - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A7"), ContentModel.TYPE_CONTENT); - A7NodeRef = child.getChildRef(); - nodeService.setProperty(A7NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); - nodeService.setProperty(A7NodeRef, ContentModel.PROP_NAME, "A7"); - nodeService.setProperty(A7NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); - nodeService.setProperty(A7NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); - nodeService.setProperty(A7NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); - - ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - nodes.add(A7NodeRef); - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - try - { - assertTrue("dest node A7 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A7NodeRef))); - - assertEquals("dest node A1 Title", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), ContentModel.PROP_TITLE), NEW_TITLE); - assertEquals("dest node A1 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_REPOSITORY_ID), REPO_ID_B); - assertEquals("dest node A1 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - - assertEquals("dest node A2 Title", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), ContentModel.PROP_TITLE), NEW_TITLE); - assertEquals("dest node A2 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_REPOSITORY_ID), REPO_ID_B); - assertEquals("dest node A2 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - - assertEquals("dest node A3 Title", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), ContentModel.PROP_TITLE), NEW_TITLE); - assertEquals("dest node A3 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_REPOSITORY_ID), REPO_ID_B); - assertEquals("dest node A3 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); - } - finally - { - endTransaction(); - } - } // test two repo sync - - /** - * Transfer sync from multiple repos. - * - * This is a unit test so does lots of shenanigans to fake transfer from three repositories on a single repo. - * - * Trees of nodes - *

-     *      A1              B1               C1
-     *      |                                 |    
-     *    A2/images                       A2 Dummy/images
-     *      |                              |
-     *      A3                            C3 
-     *                                          
-     * Destination   
-     *      B1
-     *      |
-     *    A2/images
-     *      |     |
-     *      C3    A3 
-     *            | 
-     *            C4         
-     * 
- * Step 1. Transfer from A to B. - * Step 2. Transfer from C to B (crossing over on A2Dest) - * Step 3. Invade A3Dest via C4 - * Step 4. Delete C4. Sync from C - * Step 5. Delete C3 - A2 dest images folder uninvaded. - - */ - public void testMultiRepoTransfer() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - String targetName = "testMultiRepoTransfer"; - TransferTarget transferMe; - NodeRef S0NodeRef; - NodeRef A1NodeRef; - NodeRef A2NodeRef; - NodeRef A3NodeRef; - NodeRef B1NodeRef; - NodeRef C1NodeRef; - NodeRef C2NodeRef; - NodeRef C3NodeRef; - NodeRef C4NodeRef; - NodeRef A3Dummy; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - { - /** - * Node Source - located under guest home - */ - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - S0NodeRef = child.getChildRef(); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); - } - - { - // Node A2 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("images"), ContentModel.TYPE_FOLDER); - A2NodeRef = child.getChildRef(); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, "images"); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "images"); - } - - { - // Node A3 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_FOLDER); - A3NodeRef = child.getChildRef(); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, "A3"); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); - } - - { - // Node B1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); - B1NodeRef = child.getChildRef(); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); - } - - { - // Node C1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C1"), ContentModel.TYPE_FOLDER); - C1NodeRef = child.getChildRef(); - nodeService.setProperty(C1NodeRef, ContentModel.PROP_TITLE, "C1"); - nodeService.setProperty(C1NodeRef, ContentModel.PROP_NAME, "C1"); - } - - { - // Node C2/images - ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("images"), ContentModel.TYPE_FOLDER); - C2NodeRef = child.getChildRef(); - nodeService.setProperty(C2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C2NodeRef, ContentModel.PROP_NAME, "images"); - } - - { - // Node C3 - ChildAssociationRef child = nodeService.createNode(C2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C3"), ContentModel.TYPE_FOLDER); - C3NodeRef = child.getChildRef(); - nodeService.setProperty(C3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C3NodeRef, ContentModel.PROP_NAME, "C3"); - } - - { - // Node A3 (Dummy) - ChildAssociationRef child = nodeService.createNode(C2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_FOLDER); - A3Dummy = child.getChildRef(); - nodeService.setProperty(A3Dummy, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(A3Dummy, ContentModel.PROP_NAME, "A3 Dummy"); - } - - { - // Node C4 - ChildAssociationRef child = nodeService.createNode(A3Dummy, ContentModel.ASSOC_CONTAINS, QName.createQName("C4"), ContentModel.TYPE_FOLDER); - C4NodeRef = child.getChildRef(); - nodeService.setProperty(C4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C4NodeRef, ContentModel.PROP_NAME, "C4"); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - Map path from A1 to B1 (So transfer will transfer by path) - * - Map path from C1 to B1 - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map Project A/images to Project B/images - // Map Project C/images to Project A/images - nodeService.getPath(A2NodeRef); - pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); - pathMap.add(new Pair(nodeService.getPath(C1NodeRef), nodeService.getPath(B1NodeRef))); - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Step 1 - * Now transfer in A's nodes to Repo B - */ - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A1NodeRef); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - - // Check that A3 dest is a child of A2Dest which is a child of B1 - ChildAssociationRef A3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A3NodeRef)); - assertEquals("A3 dest is connected to the wrong node", A3Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A2NodeRef)); - ChildAssociationRef A2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A2NodeRef)); - assertEquals("A2 dest is connected to the wrong node", A2Ref.getParentRef(), B1NodeRef); - assertEquals("A2 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); - assertEquals("A3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); - } - finally - { - endTransaction(); - } - - /** - * Step 2 - * Now transfer in C's nodes - * B2 (Owned by A) gets invaded by C - */ - startNewTransaction(); - try - { - mockedDescriptorService = getMockDescriptorService(REPO_ID_C); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(C1NodeRef); - nodes.add(C2NodeRef); - nodes.add(C3NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - - // Check that A3 dest is a child of A2Dest which is a child of B1 - // Check that C3 dest is a child of A2Dest - ChildAssociationRef A3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A3NodeRef)); - assertEquals("A3 dest is connected to the wrong node", A3Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A2NodeRef)); - ChildAssociationRef C3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A3NodeRef)); - assertEquals("C3 dest is connected to the wrong node", C3Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A2NodeRef)); - ChildAssociationRef A2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A2NodeRef)); - assertEquals("A2 dest is connected to the wrong node", A2Ref.getParentRef(), B1NodeRef); - - assertTrue("A2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("A3 dest is invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); - - assertEquals("A2 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); - assertEquals("A3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); - assertEquals("C3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_C); - } - finally - { - endTransaction(); - } - - /** - * Step 3 - * Invade A3Dest via transfer of C4 from C - */ - startNewTransaction(); - try - { - mockedDescriptorService = getMockDescriptorService(REPO_ID_C); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(C4NodeRef); - definition.setNodes(nodes); - definition.setSync(false); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C4NodeRef))); - - assertTrue("C4 is not an invader", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C4NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("A3 is not an invader", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); - - assertEquals("A2 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); - assertEquals("A3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); - assertEquals("C3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_C); - - } - finally - { - endTransaction(); - } - - /** - * Step 4 - * Uninvade A3 from C by deleting C4 - * Via Sync of A3Dummy (which has the same destination path as A3). - */ - startNewTransaction(); - try - { - nodeService.deleteNode(C4NodeRef); - - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - mockedDescriptorService = getMockDescriptorService(REPO_ID_C); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A3Dummy); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertFalse("dest node C4 not deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(C4NodeRef))); - - logger.debug("A3 Dest is " + testNodeFactory.getMappedNodeRef(A3NodeRef)); - assertFalse("A3 Dest still invaded by C4", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - /** - * Step 5 - repeat the above test with transfer(non sync) rather than transfer(sync) - * Uninvade by deleting C3. - */ - startNewTransaction(); - try - { - nodeService.deleteNode(C3NodeRef); - - } - finally - { - endTransaction(); - } - startNewTransaction(); - try - { - mockedDescriptorService = getMockDescriptorService(REPO_ID_C); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - - NodeRef C3Deleted = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, C3NodeRef.getId()); - nodes.add(C3Deleted); - - definition.setNodes(nodes); - definition.setSync(false); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); - assertFalse("dest node C3 not deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertFalse("dest node C4 not deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(C4NodeRef))); - assertFalse("A3 still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("A2 still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - } // test multi repo sync - - - - // Utility methods below. - private TransferTarget createTransferTarget(String name) - { - String title = "title"; - String description = "description"; - String endpointProtocol = "http"; - String endpointHost = "MARKR02"; - int endpointPort = 7080; - String endpointPath = "/alfresco/service/api/transfer"; - String username = "admin"; - char[] password = "admin".toCharArray(); - - /** - * Now go ahead and create our first transfer target - */ - TransferTarget target = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); - return target; - } - - /** - * Test the transfer method behaviour with respect to move and alien nodes. - * - * So we have Repository A transferring content and Repository B is the local repo that we - * move alien nodes in and out. - * - * Tree - *
-     *         B1
-     *    |          |         |
-     *    C2(p1)    C3(p2)     A4
-     *    |          
-     *    A5        
-     *    |
-     *    B6
-     * 
- * - * Step 1: Tansfer in C's nodes to Repo B - * - * Step 2. Transfer in A's nodes to Repo B - * - * Setup tree above. Validat that A2 is child of C2 dest. - * A4 is a child of B1 - * - * Step 3. Move A5 from C2 to C3 via transfer. - * C2Dest should stop being invaded by A5, C3Dest should be invaded by A5. - * - * Step 4. Invade A5 by B6. Move from C3 to C2 via transfer. - * C2Dest should be invaded by A and B. - * C3Dest should not be invaded. - * - * Step 5. Move A5 to A4. - * A4 should be invaded by B due to B6 but not by A. - * C2Dest should not be invaded. - */ - public void testMultiRepoTransferMove() throws Exception - { - setDefaultRollback(false); - - final String localRepositoryId = descriptorService.getCurrentRepositoryDescriptor().getId(); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - String targetName = "testMultiRepoTransferMove"; - TransferTarget transferMe; - NodeRef S0NodeRef; - NodeRef A1NodeRef; - NodeRef B1NodeRef; - NodeRef C1NodeRef; - NodeRef C2NodeRef; - NodeRef C3NodeRef; - NodeRef A4NodeRef; - NodeRef A5NodeRef; - NodeRef B6NodeRef; - NodeRef C2DummyNodeRef; - NodeRef C3DummyNodeRef; - QName C2Path = QName.createQName("p2"); - QName C3Path= QName.createQName("p3"); - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - { - /** - * Node Source - located under guest home - */ - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - S0NodeRef = child.getChildRef(); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); - } - - { - // Node B1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); - B1NodeRef = child.getChildRef(); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); - } - - { - // Node C1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C1"), ContentModel.TYPE_FOLDER); - C1NodeRef = child.getChildRef(); - nodeService.setProperty(C1NodeRef, ContentModel.PROP_TITLE, "C1"); - nodeService.setProperty(C1NodeRef, ContentModel.PROP_NAME, "C1"); - } - - { - // Node C2 - ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); - C2NodeRef = child.getChildRef(); - nodeService.setProperty(C2NodeRef, ContentModel.PROP_TITLE, "C2"); - nodeService.setProperty(C2NodeRef, ContentModel.PROP_NAME, "C2"); - } - - { - // Node C3 - ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); - C3NodeRef = child.getChildRef(); - nodeService.setProperty(C3NodeRef, ContentModel.PROP_TITLE, "C3"); - nodeService.setProperty(C3NodeRef, ContentModel.PROP_NAME, "C3"); - } - - { - // Node C2 (Dummy) - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); - C2DummyNodeRef = child.getChildRef(); - nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_NAME, "C2 Dummy"); - } - - { - // Node C3 (Dummy) - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); - C3DummyNodeRef = child.getChildRef(); - nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_NAME, "C3 Dummy"); - } - - { - // Node A4 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C4"), ContentModel.TYPE_FOLDER); - A4NodeRef = child.getChildRef(); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, "A4"); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); - } - - { - // Node A5 - ChildAssociationRef child = nodeService.createNode(C2DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_FOLDER); - A5NodeRef = child.getChildRef(); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, "A5"); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - Map path from A1 to B1 (So transfer will transfer by path) - * - Map path from C1 to B1 - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map Project A to Project B - // Map Project C to Project B - pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); - pathMap.add(new Pair(nodeService.getPath(C1NodeRef), nodeService.getPath(B1NodeRef))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_C); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Step 1 - * Now transfer in C's nodes to Repo B - */ - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(C1NodeRef); - nodes.add(C2NodeRef); - nodes.add(C3NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - - // Check that C3 dest is a child of B1 - ChildAssociationRef C3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C3NodeRef)); - assertEquals("A3 dest is connected to the wrong node", C3Ref.getParentRef(), B1NodeRef); - ChildAssociationRef C2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C2NodeRef)); - assertEquals("A2 dest is connected to the wrong node", C2Ref.getParentRef(), B1NodeRef); - } - finally - { - endTransaction(); - } - - mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Step 2 - * Now transfer in A's nodes - * C2 (Dest) gets invaded by A4 - */ - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); - assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C2NodeRef)); - assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - - ChildAssociationRef A4Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A4NodeRef)); - assertEquals("A4 dest is connected to the wrong node", A4Ref.getParentRef(), B1NodeRef); - - } - finally - { - endTransaction(); - } - - /** - * Step 3 - * Now move A5 - * C3 (Dest) gets invaded by A5 - */ - startNewTransaction(); - try - { - nodeService.moveNode(A5NodeRef, C3DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C4")); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - - // Check that A4 dest is a child of C3Dest which is a child of B1 - ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); - assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C3NodeRef)); - assertTrue("A5 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("C2 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - /** - * Step 4 - multi invasion move via transfer service. - * Invade A5 by B6. - * Transfer from C3 back to C2. - */ - startNewTransaction(); - try - { - nodeService.moveNode(A5NodeRef, C2DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B6")); - - // Node B6 - ChildAssociationRef child = nodeService.createNode(testNodeFactory.getMappedNodeRef(A5NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("B6"), ContentModel.TYPE_FOLDER); - B6NodeRef = child.getChildRef(); - nodeService.setProperty(B6NodeRef, ContentModel.PROP_TITLE, "B6"); - nodeService.setProperty(B6NodeRef, ContentModel.PROP_NAME, "B6"); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - - // Check that A4 dest is a child of C2Dest which is a child of B1 - ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); - ChildAssociationRef B6Ref = nodeService.getPrimaryParent(B6NodeRef); - assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C2NodeRef)); - assertEquals("B6 connected to the wrong node", B6Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A5NodeRef)); - assertTrue("A5 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("C3 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - Listinvaders = (List)nodeService.getProperty(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.PROP_INVADED_BY); - assertTrue("invaders is too small", invaders.size() > 1); - assertTrue("invaders does not contain REPO A", invaders.contains(REPO_ID_A)); - assertTrue("invaders does not contain REPO B", invaders.contains(localRepositoryId)); - } - finally - { - endTransaction(); - } - - /** - * Step 5 - * Move - */ - startNewTransaction(); - try - { - nodeService.moveNode(A5NodeRef, A4NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5")); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - - // Check that A5dest is a child of A4Dest which is a child of B1 - ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); - assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A4NodeRef)); - assertTrue("A4 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("A5 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("B6 dest is not invaded", nodeService.hasAspect(B6NodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("C2 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("C3 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - - Listinvaders = (List)nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_INVADED_BY); - assertTrue("invaders is too big", invaders.size() < 2); - assertFalse("invaders contains REPO A", invaders.contains(REPO_ID_A)); - assertTrue("invaders does not contains REPO B", invaders.contains(REPO_ID_B)); - - } - finally - { - endTransaction(); - } - } - - /** - * Test the behaviour with regard to copying transferred nodes. - *

- * Transfer node read only - *

- * Copy transferred node. - *

- * New node should not be locked and should not be transferred. - *

- * This is a unit test so it does some shenanigans to send to the same instance of alfresco. - */ - public void testCopyTransferredNode() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - - /** - * Now go ahead and create our transfer target - */ - String targetName = "testCopyTransferredNode"; - TransferTarget transferMe; - NodeRef S0NodeRef; - NodeRef A1NodeRef; - NodeRef A2NodeRef; - NodeRef A3NodeRef; - NodeRef B1NodeRef; - NodeRef B2NodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Node Source - located under guest home - */ - { - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - S0NodeRef = child.getChildRef(); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); - } - - { - // Node A2 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); - A2NodeRef = child.getChildRef(); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, "A2"); - nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); - } - - { - // Node A3 - ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_FOLDER); - A3NodeRef = child.getChildRef(); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, "A3"); - nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); - } - - { - // Node B1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); - B1NodeRef = child.getChildRef(); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); - } - - { - // Node B2 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B2"), ContentModel.TYPE_FOLDER); - B2NodeRef = child.getChildRef(); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B2"); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B2"); - } - - - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - Map path from A1 to B1 (So transfer will transfer by path) - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - - // Map Project A to Project B - pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - - /** - * Step 1 - */ - logger.debug("First transfer - "); - startNewTransaction(); - try - { - /** - * Transfer our transfer target node - */ - { - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(A2NodeRef); - nodes.add(A3NodeRef); - definition.setNodes(nodes); - definition.setReadOnly(true); - transferService.transfer(targetName, definition); - } - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - // Now validate that the target node exists with the correct permissions - NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); - assertTrue("dest node ref does not exist", nodeService.exists(A2destNodeRef)); - - /** - * Copy the node A2 Dest - */ - NodeRef copiedNode = copyService.copy(A2destNodeRef, B2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2Copy")); - assertTrue("copied node does not exist", nodeService.exists(copiedNode)); - System.out.println("copied node is " + copiedNode); - assertFalse("copied node still has transferred aspect", nodeService.hasAspect(copiedNode, TransferModel.ASPECT_TRANSFERRED)); - assertNull("copied node still has from repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_FROM_REPOSITORY_ID)); - assertNull("copied node still has original repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_REPOSITORY_ID)); - Set aspects = nodeService.getAspects(copiedNode); - - /** - * Copy a chain of transferred nodes - well A2dest and A3dest - */ - copiedNode = copyService.copy(A2destNodeRef, B2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2Copy2"), true); - assertTrue("copied node does not exist", nodeService.exists(copiedNode)); - System.out.println("copied node is " + copiedNode); - assertFalse("copied node still has transferred aspect", nodeService.hasAspect(copiedNode, TransferModel.ASPECT_TRANSFERRED)); - assertNull("copied node still has from repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_FROM_REPOSITORY_ID)); - assertNull("copied node still has original repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_REPOSITORY_ID)); - - List children = nodeService.getChildAssocs(copiedNode); - for(ChildAssociationRef child : children) - { - assertFalse("copied node still has transferred aspect", nodeService.hasAspect(child.getChildRef(), TransferModel.ASPECT_TRANSFERRED)); - assertNull("copied node still has from repository id", nodeService.getProperty(child.getChildRef(), TransferModel.PROP_FROM_REPOSITORY_ID)); - assertNull("copied node still has original repository id", nodeService.getProperty(child.getChildRef(), TransferModel.PROP_REPOSITORY_ID)); - } - } - finally - { - endTransaction(); - } - } - - - /** - * Test the behaviour with respect to copy of alien nodes. - * - * So we have Repository A transferring content and Repository B is the local repo that we - * copy alien nodes in and out. Copied nodes are not "transferred" so they change - * from being "from repository A" to "from the local repository". - * - * Tree - *

-     *         B1
-     *    |          |         |
-     *    C2(p1)    C3(p2)     A4
-     *    |          
-     *    A5        
-     *    |
-     *    B6
-     * 
- * - * Step 1: Tansfer in C's nodes to Repo B - * - * Step 2. Transfer in A's nodes to Repo B - * - * Setup tree above. Validat that A2 is child of C2 dest. - * A4 is a child of B1 - * - * Step 3. Copy A5 from C2 to C3. - * C2Dest should still be invaded by A5 - * C3Dest should be invaded by A5(copy 1) which is now a "B" invader. - * - * Step 4. Copy A5 from C2 to A4. - * C2Dest should still be invaded by A5 - * A4Dest should be invaded by A5(copy 2) which is now a "B" invader. - * - * Step 5. Invade A5 dest with B6. - * Copy A5(Dest) to B1 (A5 Copy 3) - * B1 should not be invaded. - * A5 Copy 3 not invaded. - * B6 Copy not invaded. - * - * Step 6. Invade A5 dest with B6. - * Copy A5(Dest) to B1 (A5 Copy 3) with children - * B1 should not be invaded. - * A5 Copy 4 not invaded. - * B6 Copy not invaded. - * - */ - public void testCopyAlien() throws Exception - { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.GERMAN; - String CONTENT_STRING = "Hello"; - - String targetName = "testCopyAlien"; - TransferTarget transferMe; - NodeRef S0NodeRef; - NodeRef A1NodeRef; - NodeRef B1NodeRef; - NodeRef C1NodeRef; - NodeRef C2NodeRef; - NodeRef C3NodeRef; - NodeRef A4NodeRef; - NodeRef A5NodeRef; - NodeRef B6NodeRef; - NodeRef C2DummyNodeRef; - NodeRef C3DummyNodeRef; - QName C2Path = QName.createQName("p2"); - QName C3Path= QName.createQName("p3"); - - final String localRepositoryId = descriptorService.getCurrentRepositoryDescriptor().getId(); - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - { - /** - * Node Source - located under guest home - */ - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); - S0NodeRef = child.getChildRef(); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); - } - - { - // Node A1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); - A1NodeRef = child.getChildRef(); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); - nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); - } - - { - // Node B1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); - B1NodeRef = child.getChildRef(); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); - nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); - } - - { - // Node C1 - ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C1"), ContentModel.TYPE_FOLDER); - C1NodeRef = child.getChildRef(); - nodeService.setProperty(C1NodeRef, ContentModel.PROP_TITLE, "C1"); - nodeService.setProperty(C1NodeRef, ContentModel.PROP_NAME, "C1"); - } - - { - // Node C2 - ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); - C2NodeRef = child.getChildRef(); - nodeService.setProperty(C2NodeRef, ContentModel.PROP_TITLE, "C2"); - nodeService.setProperty(C2NodeRef, ContentModel.PROP_NAME, "C2"); - } - - { - // Node C3 - ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); - C3NodeRef = child.getChildRef(); - nodeService.setProperty(C3NodeRef, ContentModel.PROP_TITLE, "C3"); - nodeService.setProperty(C3NodeRef, ContentModel.PROP_NAME, "C3"); - } - - { - // Node C2 (Dummy) - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); - C2DummyNodeRef = child.getChildRef(); - nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_NAME, "C2 Dummy"); - } - - { - // Node C3 (Dummy) - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); - C3DummyNodeRef = child.getChildRef(); - nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_NAME, "C3 Dummy"); - } - - { - // Node A4 - ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C4"), ContentModel.TYPE_FOLDER); - A4NodeRef = child.getChildRef(); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, "A4"); - nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); - } - - { - // Node A5 - ChildAssociationRef child = nodeService.createNode(C2DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_FOLDER); - A5NodeRef = child.getChildRef(); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, "A5"); - nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); - } - - // Create the transfer target if it does not already exist - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - } - finally - { - endTransaction(); - } - - /** - * For unit test - * - replace the HTTP transport with the in-process transport - * - Map path from A1 to B1 (So transfer will transfer by path) - * - Map path from C1 to B1 - */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map Project A to Project B - // Map Project C to Project B - pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); - pathMap.add(new Pair(nodeService.getPath(C1NodeRef), nodeService.getPath(B1NodeRef))); - - DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_C); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Step 1 - * Now transfer in C's nodes to Repo B - */ - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(C1NodeRef); - nodes.add(C2NodeRef); - nodes.add(C3NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - - // Check that C3 dest is a child of B1 - ChildAssociationRef C3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C3NodeRef)); - assertEquals("A3 dest is connected to the wrong node", C3Ref.getParentRef(), B1NodeRef); - ChildAssociationRef C2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C2NodeRef)); - assertEquals("A2 dest is connected to the wrong node", C2Ref.getParentRef(), B1NodeRef); - } - finally - { - endTransaction(); - } - - mockedDescriptorService = getMockDescriptorService(REPO_ID_A); - transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Step 2 - * Now transfer in A's nodes - * C2 (Dest) gets invaded by A4 - */ - startNewTransaction(); - try - { - TransferDefinition definition = new TransferDefinition(); - Collection nodes = new ArrayList(); - nodes.add(A4NodeRef); - nodes.add(A5NodeRef); - definition.setNodes(nodes); - definition.setSync(true); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); - assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C2NodeRef)); - assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - assertFalse("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - - ChildAssociationRef A4Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A4NodeRef)); - assertEquals("A4 dest is connected to the wrong node", A4Ref.getParentRef(), B1NodeRef); - - } - finally - { - endTransaction(); - } - - /** - * Step 3. Copy A5 from C2 to C3. - * C2Dest should still be invaded by A5 - * C3Dest should be invaded by A5(copy) which is now a "B/local" invader. - */ - startNewTransaction(); - try - { - NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), testNodeFactory.getMappedNodeRef(C3NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 1")); - assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - - assertTrue("A5(copy 1) is not invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); - assertTrue("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - - List C2invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.PROP_INVADED_BY); - List C3invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.PROP_INVADED_BY); - assertTrue("C3 invaders contains local repository Id", C3invaders.contains(localRepositoryId)); - assertFalse("C3 invaders contains REPO_ID_A", C3invaders.contains(REPO_ID_A)); - - assertFalse("C2 invaders contains local repository Id", C2invaders.contains(localRepositoryId)); - assertTrue("C2 invaders contains REPO_ID_A", C2invaders.contains(REPO_ID_A)); - - } - finally - { - endTransaction(); - } - - /** - * Step 4. Copy A5 from C2 to A4. - * C2Dest should still be invaded by A5 - * A4Dest should be invaded by A5(copy 2) which is now a "B" invader. - */ - startNewTransaction(); - try - { - NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), testNodeFactory.getMappedNodeRef(A4NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 2")); - assertTrue("dest node A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); - assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); - - assertTrue("A5(copy 2) is not invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); - assertTrue("A4 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.ASPECT_ALIEN)); - assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); - - List C2invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.PROP_INVADED_BY); - List A4invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_INVADED_BY); - assertTrue("A4 invaders contains local repository Id", A4invaders.contains(localRepositoryId)); - - assertFalse("C2 invaders contains local repository Id", C2invaders.contains(localRepositoryId)); - assertTrue("C2 invaders contains REPO_ID_A", C2invaders.contains(REPO_ID_A)); - - } - finally - { - endTransaction(); - } - - /** - * Step 5. Invade A5 dest with B6. - * Copy A5(Dest) to B1 (A5 Copy 3) no children - * B1 should not be invaded. - * A5 Copy 3 not invaded. - * B6 Copy not invaded. - */ - startNewTransaction(); - try - { - ChildAssociationRef child = nodeService.createNode(testNodeFactory.getMappedNodeRef(A5NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("B6"), ContentModel.TYPE_FOLDER); - B6NodeRef = child.getChildRef(); - nodeService.setProperty(B6NodeRef, ContentModel.PROP_TITLE, "B6"); - nodeService.setProperty(B6NodeRef, ContentModel.PROP_NAME, "B6"); - - assertTrue("A4 dest is not invaded prior to test - test error", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.ASPECT_ALIEN)); - - NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), B1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 3")); - - assertFalse("B1 is invaded", nodeService.hasAspect(B1NodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("A5 copy 3 is invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); - } - finally - { - endTransaction(); - } - - /** - * Step 6. Invade A5 dest with B6. - * Copy A5(Dest) to B1 (A5 Copy 3) with children - * B1 should not be invaded. - * A5 Copy 4 not invaded. - * B6 Copy not invaded. - */ - startNewTransaction(); - try - { - assertFalse("B1 is invaded prior to test - test error", nodeService.hasAspect(B1NodeRef, TransferModel.ASPECT_ALIEN)); - - NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), B1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 4"), true); - assertFalse("B1 is invaded", nodeService.hasAspect(B1NodeRef, TransferModel.ASPECT_ALIEN)); - assertFalse("A5 copy 4 is invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); - - List refs = nodeService.getChildAssocs(copyRef); - - assertTrue("can't find child of A5 copy 4", refs.size() == 1); - - for(ChildAssociationRef ref : refs) - { - assertFalse("B6 copy is invaded", nodeService.hasAspect(ref.getChildRef(), TransferModel.ASPECT_ALIEN)); - } - } - finally - { - endTransaction(); - } - } // copy node - + } // test big content /** * Test the transfer method with regard to an empty content property. ALF-4865 @@ -7053,13 +2211,14 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest */ public void testEmptyContent() throws Exception { - setDefaultRollback(false); - - String CONTENT_TITLE = "ContentTitle"; - String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; - Locale CONTENT_LOCALE = Locale.ENGLISH; - String CONTENT_ENCODING = "UTF-8"; - String CONTENT_STRING = "The quick brown fox jumps over the lazy dog."; + final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); + + final String CONTENT_TITLE = "ContentTitle"; + final String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + final Locale CONTENT_LOCALE = Locale.ENGLISH; + final String CONTENT_ENCODING = "UTF-8"; + final String CONTENT_STRING = "The quick brown fox jumps over the lazy dog."; + final String targetName = "testTransferEmptyContent"; /** * For unit test @@ -7068,237 +2227,253 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest * * Fake Repository Id */ - TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); - transferServiceImpl.setTransmitter(transmitter); - UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); - transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); - List> pathMap = testNodeFactory.getPathMap(); - // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. - pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); - + class TestContext + { + TransferTarget transferMe; + NodeRef contentNodeRef; + NodeRef savedDestinationNodeRef; + }; + + /** + * Unit test kludge to transfer from guest home to company home + */ + final UnitTestTransferManifestNodeFactory testNodeFactory = unitTestKludgeToTransferGuestHomeToCompanyHome(); + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); transferServiceImpl.setDescriptorService(mockedDescriptorService); - - /** - * Now go ahead and create our first transfer target - */ - String targetName = "testTransferEmptyContent"; - TransferTarget transferMe; - NodeRef contentNodeRef; - NodeRef savedDestinationNodeRef; - - startNewTransaction(); - try - { - /** - * Get guest home - */ - String guestHomeQuery = "/app:company_home/app:guest_home"; - ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); - assertEquals("", 1, guestHomeResult.length()); - NodeRef guestHome = guestHomeResult.getNodeRef(0); - - /** - * Create a test node with an empty content that we will read and write - */ - String name = GUID.generate(); - ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT); - contentNodeRef = child.getChildRef(); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, name); - ContentData cd = new ContentData(null, null, 0, null); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_CONTENT, cd); - - if(!transferService.targetExists(targetName)) - { - transferMe = createTransferTarget(targetName); - } - else - { - transferMe = transferService.getTransferTarget(targetName); - } - transferService.enableTransferTarget(targetName, true); - } - finally - { - endTransaction(); - } - - SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); - - - + TransferTarget transferMe; + + RetryingTransactionCallback setupCB = new RetryingTransactionCallback() + { + @Override + public TestContext execute() throws Throwable + { + TestContext ctx = new TestContext(); + + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node with an empty content that we will read and write + */ + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT); + ctx.contentNodeRef = child.getChildRef(); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_NAME, name); + ContentData cd = new ContentData(null, null, 0, null); + nodeService.setProperty(ctx.contentNodeRef, ContentModel.PROP_CONTENT, cd); + + if(!transferService.targetExists(targetName)) + { + ctx.transferMe = createTransferTarget(targetName); + } + else + { + ctx.transferMe = transferService.getTransferTarget(targetName); + } + transferService.enableTransferTarget(targetName, true); + + return ctx; + } + }; + final TestContext testContext = tran.doInTransaction(setupCB); + + final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + /** * Step 1: Transfer our node which has empty content */ logger.debug("testEmptyContent : First transfer - create new node (empty content)"); - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(contentNodeRef, ContentModel.PROP_CONTENT); - assertNull("test setup content reader not null", reader); - Map props = nodeService.getProperties(contentNodeRef); - assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); - - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - Serializable modifiedDate = nodeService.getProperty(contentNodeRef, ContentModel.PROP_MODIFIED); - if(modifiedDate instanceof Date) + + + RetryingTransactionCallback step1CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { - logger.debug("srcModified: " + SDF.format(modifiedDate)); + ContentReader reader = contentService.getReader(testContext.contentNodeRef, ContentModel.PROP_CONTENT); + assertNull("test setup content reader not null", reader); + Map props = nodeService.getProperties(testContext.contentNodeRef); + assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); + + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + + return null; } - - NodeRef destinationNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - savedDestinationNodeRef = destinationNodeRef; - assertTrue("content node (dest) does not exist", nodeService.exists(destinationNodeRef)); - - ContentReader reader = contentService.getReader(destinationNodeRef, ContentModel.PROP_CONTENT); - assertNull("content reader not null", reader); - Map props = nodeService.getProperties(destinationNodeRef); - assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); - - } - finally + }; + tran.doInTransaction(step1CB); + + RetryingTransactionCallback validateStep1CB = new RetryingTransactionCallback() { - endTransaction(); - } - + @Override + public Void execute() throws Throwable + { + Serializable modifiedDate = nodeService.getProperty(testContext.contentNodeRef, ContentModel.PROP_MODIFIED); + if(modifiedDate instanceof Date) + { + logger.debug("srcModified: " + SDF.format(modifiedDate)); + } + + NodeRef destinationNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + testContext.savedDestinationNodeRef = destinationNodeRef; + assertTrue("content node (dest) does not exist", nodeService.exists(destinationNodeRef)); + + ContentReader reader = contentService.getReader(destinationNodeRef, ContentModel.PROP_CONTENT); + assertNull("content reader not null", reader); + Map props = nodeService.getProperties(destinationNodeRef); + assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); + return null; + } + }; + tran.doInTransaction(validateStep1CB); + /** * Step 2: replace empty content with new content */ logger.debug("testEmptyContent : Second transfer - replace empty content with some content"); - - startNewTransaction(); - try - { - Serializable modifiedDate = nodeService.getProperty(contentNodeRef, ContentModel.PROP_MODIFIED); - if(modifiedDate instanceof Date) + + + RetryingTransactionCallback step2CB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable { - logger.debug("srcModified: " + SDF.format(modifiedDate)); + Serializable modifiedDate = nodeService.getProperty(testContext.contentNodeRef, ContentModel.PROP_MODIFIED); + if(modifiedDate instanceof Date) + { + logger.debug("srcModified: " + SDF.format(modifiedDate)); + } + + ContentWriter writer = contentService.getWriter(testContext.contentNodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.setEncoding(CONTENT_ENCODING); + writer.putContent(CONTENT_STRING); + + return null; } - - ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true); - writer.setLocale(CONTENT_LOCALE); - writer.setEncoding(CONTENT_ENCODING); - writer.putContent(CONTENT_STRING); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(contentNodeRef, ContentModel.PROP_CONTENT); - assertNotNull("test setup content reader not null", reader); - Map props = nodeService.getProperties(contentNodeRef); - assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); - - /** - * Step 2: replace empty content with new content - */ - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef destinationNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - - assertEquals("test error destinationNodeRef not correct", savedDestinationNodeRef, destinationNodeRef); - ContentReader reader = contentService.getReader(destinationNodeRef, ContentModel.PROP_CONTENT); - assertNotNull("content reader is null", reader); - assertTrue("content encoding is wrong", reader.getEncoding().equalsIgnoreCase(CONTENT_ENCODING)); - assertEquals("content locale is wrong", reader.getLocale(), CONTENT_LOCALE); - assertTrue("content does not exist", reader.exists()); - String contentStr = reader.getContentString(); - assertEquals("Content is wrong", contentStr, CONTENT_STRING); - } - finally - { - endTransaction(); - } - + }; + + tran.doInTransaction(step2CB); + + + RetryingTransactionCallback step2TransferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + ContentReader reader = contentService.getReader(testContext.contentNodeRef, ContentModel.PROP_CONTENT); + assertNotNull("test setup content reader not null", reader); + Map props = nodeService.getProperties(testContext.contentNodeRef); + assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); + + /** + * Step 2: replace empty content with new content + */ + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + + return null; + } + }; + + tran.doInTransaction(step2TransferCB); + + + RetryingTransactionCallback step2ValidateCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + NodeRef destinationNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + + assertEquals("test error destinationNodeRef not correct", testContext.savedDestinationNodeRef, destinationNodeRef); + ContentReader reader = contentService.getReader(destinationNodeRef, ContentModel.PROP_CONTENT); + assertNotNull("content reader is null", reader); + assertTrue("content encoding is wrong", reader.getEncoding().equalsIgnoreCase(CONTENT_ENCODING)); + assertEquals("content locale is wrong", reader.getLocale(), CONTENT_LOCALE); + assertTrue("content does not exist", reader.exists()); + String contentStr = reader.getContentString(); + assertEquals("Content is wrong", contentStr, CONTENT_STRING); + + return null; + } + }; + + tran.doInTransaction(step2ValidateCB); + /** * Step 3 - transition from a content property having content to one that is empty */ logger.debug("testEmptyContent : Third transfer - remove existing content"); - - startNewTransaction(); - try - { - ContentData cd = new ContentData(null, null, 0, null); - nodeService.setProperty(contentNodeRef, ContentModel.PROP_CONTENT, cd); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - ContentReader reader = contentService.getReader(contentNodeRef, ContentModel.PROP_CONTENT); - assertNull("test setup content reader not null", reader); - Map props = nodeService.getProperties(contentNodeRef); - assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); - - /** - * Step 3: Transfer our node which has empty content to over-write existing - * content - */ - TransferDefinition definition = new TransferDefinition(); - Setnodes = new HashSet(); - nodes.add(contentNodeRef); - definition.setNodes(nodes); - transferService.transfer(targetName, definition); - } - finally - { - endTransaction(); - } - - startNewTransaction(); - try - { - NodeRef destinationNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); - assertTrue("content node (dest) does not exist", nodeService.exists(destinationNodeRef)); - - ContentReader reader = contentService.getReader(destinationNodeRef, ContentModel.PROP_CONTENT); - assertNull("content reader not null", reader); - Map props = nodeService.getProperties(destinationNodeRef); - assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); - - } - finally - { - endTransaction(); - } + + RetryingTransactionCallback step3SetupCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + ContentData cd = new ContentData(null, null, 0, null); + nodeService.setProperty(testContext.contentNodeRef, ContentModel.PROP_CONTENT, cd); + return null; + } + }; + tran.doInTransaction(step3SetupCB); + + + RetryingTransactionCallback step3TransferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + ContentReader reader = contentService.getReader(testContext.contentNodeRef, ContentModel.PROP_CONTENT); + assertNull("test setup content reader not null", reader); + Map props = nodeService.getProperties(testContext.contentNodeRef); + assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); + + /** + * Step 3: Transfer our node which has empty content to over-write existing + * content + */ + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + return null; + } + }; + tran.doInTransaction(step3TransferCB); + + RetryingTransactionCallback step3ValidateCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + NodeRef destinationNodeRef = testNodeFactory.getMappedNodeRef(testContext.contentNodeRef); + assertTrue("content node (dest) does not exist", nodeService.exists(destinationNodeRef)); + + ContentReader reader = contentService.getReader(destinationNodeRef, ContentModel.PROP_CONTENT); + assertNull("content reader not null", reader); + Map props = nodeService.getProperties(destinationNodeRef); + assertTrue(props.containsKey(ContentModel.PROP_CONTENT)); + return null; + } + }; + tran.doInTransaction(step3ValidateCB); } // end of testEmptyContent @@ -7822,6 +2997,243 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest // tran.doInTransaction(check2CB); // // } // horrible paths + + /** + * ALF-6174 + * Test transfer of peer associations + * + * Step 1 : Create 2 nodes + * Add a peer assoc + * Transfer + * + * Step 2: Add another peer assoc + * Transfer + * + * Step 3: Remove a peer assoc + * Transfer + * + * Step 4: Remove a peer assoc + * Transfer + * + * @throws Exception + */ + public void testPeerAssocs() throws Exception + { + final RetryingTransactionHelper tran = transactionService.getRetryingTransactionHelper(); + final String CONTENT_TITLE = "ContentTitle"; + final Locale CONTENT_LOCALE = Locale.GERMAN; + final String CONTENT_ENCODING = "UTF-8"; + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + * + * Fake Repository Id + */ + final TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + final UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + final List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + final String targetName = "testPeerAssocs"; + + class TestContext + { + TransferTarget transferMe; + NodeRef folderNodeRef; + NodeRef sourceNodeRef; + NodeRef targetNodeRef; + NodeRef destSourceNodeRef; + NodeRef destTargetNodeRef; + }; + + RetryingTransactionCallback setupCB = new RetryingTransactionCallback() + { + @Override + public TestContext execute() throws Throwable + { + TestContext testContext = new TestContext(); + + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node that we will read and write + */ + String name = GUID.generate(); + + TransferDefinition def = new TransferDefinition(); + + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + testContext.folderNodeRef = child.getChildRef(); + nodeService.setProperty(testContext.folderNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(testContext.folderNodeRef, ContentModel.PROP_NAME, name); + + // Side effect - initialisee nodeid mapping + testNodeFactory.createTransferManifestNode(testContext.folderNodeRef, def); + + child = nodeService.createNode(testContext.folderNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("source"), ContentModel.TYPE_CONTENT); + testContext.sourceNodeRef = child.getChildRef(); + nodeService.setProperty(testContext.sourceNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(testContext.sourceNodeRef, ContentModel.PROP_NAME, "source"); + + // Side effect - initialise nodeid mapping + testNodeFactory.createTransferManifestNode(testContext.sourceNodeRef, def); + + child = nodeService.createNode(testContext.folderNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("target"), ContentModel.TYPE_CONTENT); + testContext.targetNodeRef = child.getChildRef(); + nodeService.setProperty(testContext.targetNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(testContext.targetNodeRef, ContentModel.PROP_NAME, "target"); + testNodeFactory.createTransferManifestNode(testContext.folderNodeRef, def); + nodeService.createAssociation(testContext.sourceNodeRef, testContext.targetNodeRef, ContentModel.ASSOC_REFERENCES); + + // Side effect - initialise nodeid mapping + testNodeFactory.createTransferManifestNode(testContext.targetNodeRef, def); + + /** + * Make sure the transfer target exists and is enabled. + */ + if(!transferService.targetExists(targetName)) + { + testContext.transferMe = createTransferTarget(targetName); + } + else + { + testContext.transferMe = transferService.getTransferTarget(targetName); + } + transferService.enableTransferTarget(targetName, true); + return testContext; + } + }; + + final TestContext testContext = tran.doInTransaction(setupCB); + + RetryingTransactionCallback addPeerAssocCB = new RetryingTransactionCallback() { + + public QName assocQName = ContentModel.ASSOC_ATTACHMENTS; + + @Override + public Void execute() throws Throwable + { + nodeService.createAssociation(testContext.sourceNodeRef, testContext.targetNodeRef, assocQName); + + return null; + } + }; + + RetryingTransactionCallback removePeerAssocCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + List refs = nodeService.getTargetAssocs(testContext.sourceNodeRef, RegexQNamePattern.MATCH_ALL); + if(refs.size() > 0) + { + AssociationRef ref = refs.get(0); + nodeService.removeAssociation(ref.getSourceRef(), ref.getTargetRef(), ref.getTypeQName()); + } + return null; + } + }; + + RetryingTransactionCallback transferCB = new RetryingTransactionCallback() { + + @Override + public Void execute() throws Throwable + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(testContext.sourceNodeRef); + nodes.add(testContext.targetNodeRef); + nodes.add(testContext.folderNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + return null; + } + }; + + RetryingTransactionCallback> readAssocsCB = new RetryingTransactionCallback>() { + + @Override + public List execute() throws Throwable + { + List source = nodeService.getSourceAssocs(testContext.sourceNodeRef, RegexQNamePattern.MATCH_ALL); + List target = nodeService.getTargetAssocs(testContext.sourceNodeRef, RegexQNamePattern.MATCH_ALL); + + NodeRef destNode = testNodeFactory.getMappedNodeRef(testContext.sourceNodeRef); + List destSource = nodeService.getSourceAssocs(destNode, RegexQNamePattern.MATCH_ALL); + List destTarget = nodeService.getTargetAssocs(destNode, RegexQNamePattern.MATCH_ALL); + + assertEquals("source peers different sizes", destSource.size(), source.size() ); + assertEquals("target peers different sizes", destTarget.size(), target.size() ); + + if(destSource.size() == 1) + { + assertEquals(destSource.get(0).getTypeQName(), source.get(0).getTypeQName()); + } + + if(destTarget.size() == 1) + { + assertEquals(destTarget.get(0).getTypeQName(), target.get(0).getTypeQName()); + } + + return destTarget; + } + }; + + /** + * This is the test + */ + + tran.doInTransaction(transferCB); + + List assocs = tran.doInTransaction(readAssocsCB); + assertEquals("assocs not one", 1, assocs.size()); + + tran.doInTransaction(addPeerAssocCB); + + tran.doInTransaction(transferCB); + + assocs = tran.doInTransaction(readAssocsCB); + assertEquals("assocs not two", 2, assocs.size()); + + tran.doInTransaction(removePeerAssocCB); + + tran.doInTransaction(transferCB); + + tran.doInTransaction(removePeerAssocCB); + + tran.doInTransaction(transferCB); + + } // testPeerAssocs + + // Utility methods below. + private TransferTarget createTransferTarget(String name) + { + String title = "title"; + String description = "description"; + String endpointProtocol = "http"; + String endpointHost = "MARKR02"; + int endpointPort = 7080; + String endpointPath = "/alfresco/service/api/transfer"; + String username = "admin"; + char[] password = "admin".toCharArray(); + + /** + * Now go ahead and create our first transfer target + */ + TransferTarget target = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + return target; + } private void createUser(String userName, String password) { diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java b/source/java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java new file mode 100644 index 0000000000..6d0bc39142 --- /dev/null +++ b/source/java/org/alfresco/repo/transfer/TransferServiceToBeRefactoredTest.java @@ -0,0 +1,4990 @@ +/* + * Copyright (C) 2009-2010 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 . + */ +package org.alfresco.repo.transfer; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +import javax.xml.XMLConstants; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Validator; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.security.authentication.AuthenticationComponent; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.transaction.AlfrescoTransactionSupport; +import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; +import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactory; +import org.alfresco.service.cmr.action.ActionService; +import org.alfresco.service.cmr.lock.LockService; +import org.alfresco.service.cmr.lock.LockType; +import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentService; +import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.CopyService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.Path; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.ResultSet; +import org.alfresco.service.cmr.search.ResultSetRow; +import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.cmr.security.AccessPermission; +import org.alfresco.service.cmr.security.MutableAuthenticationService; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.cmr.security.PersonService; +import org.alfresco.service.cmr.transfer.TransferCallback; +import org.alfresco.service.cmr.transfer.TransferDefinition; +import org.alfresco.service.cmr.transfer.TransferEvent; +import org.alfresco.service.cmr.transfer.TransferEventReport; +import org.alfresco.service.cmr.transfer.TransferException; +import org.alfresco.service.cmr.transfer.TransferReceiver; +import org.alfresco.service.cmr.transfer.TransferService; +import org.alfresco.service.cmr.transfer.TransferTarget; +import org.alfresco.service.descriptor.Descriptor; +import org.alfresco.service.descriptor.DescriptorService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.transaction.TransactionService; +import org.alfresco.util.BaseAlfrescoSpringTest; +import org.alfresco.util.GUID; +import org.alfresco.util.Pair; +import org.alfresco.util.PropertyMap; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.springframework.util.ResourceUtils; + +/** + * Unit test for TransferServiceImpl + * + * Contains some integration tests for the transfer service + * + * These tests need their transaction management to be re-factored then they can be re-instated into + * TransferServiceImplTest + * + * @author Mark Rogers + */ +@SuppressWarnings("deprecation") +public class TransferServiceToBeRefactoredTest extends BaseAlfrescoSpringTest +{ + private TransferService transferService; + private ContentService contentService; + private TransferServiceImpl2 transferServiceImpl; + private SearchService searchService; + private TransactionService transactionService; + private TransferReceiver receiver; + private TransferManifestNodeFactory transferManifestNodeFactory; + private PermissionService permissionService; + private LockService lockService; + private PersonService personService; + private DescriptorService descriptorService; + private CopyService copyService; + + String COMPANY_HOME_XPATH_QUERY = "/{http://www.alfresco.org/model/application/1.0}company_home"; + String GUEST_HOME_XPATH_QUERY = "/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/application/1.0}guest_home"; + + String REPO_ID_A = "RepoIdA"; + String REPO_ID_B; + String REPO_ID_C = "RepoIdC"; + + @Override + public void runBare() throws Throwable + { + preventTransaction(); + super.runBare(); + } + + /** + * Called during the transaction setup + */ + protected void onSetUp() throws Exception + { + // Catch transactions left dangling by inadequate transaction handling during test failures + if (AlfrescoTransactionSupport.getTransactionReadState() != TxnReadState.TXN_NONE) + { + fail("Dangling transaction at start of test."); + } + + super.onSetUp(); + + // Get the required services + this.transferService = (TransferService)this.applicationContext.getBean("TransferService"); + this.contentService = (ContentService)this.applicationContext.getBean("ContentService"); + this.transferServiceImpl = (TransferServiceImpl2)this.applicationContext.getBean("transferService2"); + this.searchService = (SearchService)this.applicationContext.getBean("SearchService"); + this.transactionService = (TransactionService)this.applicationContext.getBean("TransactionService"); + this.nodeService = (NodeService) this.applicationContext.getBean("nodeService"); + this.contentService = (ContentService) this.applicationContext.getBean("contentService"); + this.authenticationService = (MutableAuthenticationService) this.applicationContext.getBean("authenticationService"); + this.actionService = (ActionService)this.applicationContext.getBean("actionService"); + this.permissionService = (PermissionService)this.applicationContext.getBean("permissionService"); + this.receiver = (TransferReceiver)this.applicationContext.getBean("transferReceiver"); + this.transferManifestNodeFactory = (TransferManifestNodeFactory)this.applicationContext.getBean("transferManifestNodeFactory"); + this.authenticationComponent = (AuthenticationComponent) this.applicationContext.getBean("authenticationComponent"); + this.lockService = (LockService) this.applicationContext.getBean("lockService"); + this.personService = (PersonService)this.applicationContext.getBean("PersonService"); + this.descriptorService = (DescriptorService)this.applicationContext.getBean("DescriptorService"); + this.copyService = (CopyService)this.applicationContext.getBean("CopyService"); + + REPO_ID_B = descriptorService.getCurrentRepositoryDescriptor().getId(); + + authenticationComponent.setSystemUserAsCurrentUser(); + setTransactionDefinition(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW)); + assertNotNull("receiver is null", this.receiver); + } + + /** + * Test the transfer report. + * + * This is a unit test so it does some shenanigans to send to the same instance of alfresco. + */ + public void testTransferReport() throws Exception + { + setDefaultRollback(false); + + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Now go ahead and create our first transfer target + * This needs to be committed before we can call transfer asycnc. + */ + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_NAME_A = "Report Node A"; + String CONTENT_NAME_B = "Report Node B"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + NodeRef nodeRefA = null; + NodeRef nodeRefB = null; + NodeRef testFolder = null; + + String targetName = "testTransferReport"; + + startNewTransaction(); + try + { + { + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + testFolder = child.getChildRef(); + nodeService.setProperty(testFolder, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(testFolder, ContentModel.PROP_NAME, name); + } + + { + /** + * Create a test node that we will read and write + */ + ChildAssociationRef child = nodeService.createNode(testFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT); + nodeRefA = child.getChildRef(); + nodeService.setProperty(nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A); + + ContentWriter writer = contentService.getWriter(nodeRefA, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + + { + ChildAssociationRef child = nodeService.createNode(testFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT); + nodeRefB = child.getChildRef(); + nodeService.setProperty(nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B); + + ContentWriter writer = contentService.getWriter(nodeRefB, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + + /** + * Now go ahead and create our first transfer target + */ + if(!transferService.targetExists(targetName)) + { + createTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + NodeRef transferReport = null; + NodeRef transferDestReport = null; + + /** + * Step 1. + * Call the transfer method. to get a failed transfer - orphan nodes exist + */ + setDefaultRollback(true); + startNewTransaction(); + try + { + TestTransferCallback callback = new TestTransferCallback(); + Set callbacks = new HashSet(); + callbacks.add(callback); + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(nodeRefA); + nodes.add(nodeRefB); + // missing the folder node (testFolder) + definition.setNodes(nodes); + + // Do the transfer here + + try + { + transferService.transfer(targetName, definition, callbacks); + fail("transfer should have failed with an orphan not found exception"); + } + catch (TransferException te) + { + logger.debug("deliberatly caught and ignored exception"); + } + + // Can't dirty read transfer report here + + boolean foundSourceReport = false; + boolean foundDestReport = false; + + for(TransferEvent event : callback.getEvents()) + { + if(event instanceof TransferEventReport) + { + TransferEventReport reportEvent = (TransferEventReport)event; + switch (reportEvent.getReportType()) + { + case DESTINATION: + foundDestReport = true; + transferDestReport = reportEvent.getNodeRef(); + assertNotNull("dest transfer nodeId null", transferDestReport); + break; + + case SOURCE: + foundSourceReport = true; + transferReport = reportEvent.getNodeRef(); + break; + } + } + } + + assertTrue("source report not found", foundSourceReport); + assertTrue("dest report not found", foundDestReport); + } + finally + { + endTransaction(); + } + + setDefaultRollback(false); + + /** + * Now validate the client side error transfer report against the xsd file + */ + startNewTransaction(); + try + { + ContentReader reader = contentService.getReader(transferReport, ContentModel.PROP_CONTENT); + assertNotNull("transfer reader is null", reader); + assertEquals("client report mimetype not set", reader.getMimetype(), MimetypeMap.MIMETYPE_XML); + String name = (String)nodeService.getProperty(transferReport, ContentModel.PROP_NAME); + assertTrue("client report does not end with .xml", name.endsWith(".xml")); + + logger.debug("This report should have failed"); + if(logger.isDebugEnabled()) + { + dumpToSystemOut(transferReport); + } + + // Now validate the client side transfer report against the XSD + Source transferReportSource = new StreamSource(reader.getContentInputStream()); + SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/report/TransferReport2.xsd"; + Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); + Validator validator = schema.newValidator(); + try + { + validator.validate(transferReportSource); + } + catch (Exception e) + { + fail(e.getMessage() ); + } + } + finally + { + endTransaction(); + } + + /** + * Step 2 + * Call the transfer method to get a good success transfer report + */ + startNewTransaction(); + try + { + { + TestTransferCallback callback = new TestTransferCallback(); + Set callbacks = new HashSet(); + callbacks.add(callback); + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(nodeRefA); + nodes.add(nodeRefB); + nodes.add(testFolder); + definition.setNodes(nodes); + + transferReport = transferService.transfer(targetName, definition, callbacks); + assertNotNull("transfer report is null", transferReport); + // Can't dirty read transfer report here + + boolean foundSourceReport = false; + boolean foundDestReport = false; + + for(TransferEvent event : callback.getEvents()) + { + if(event instanceof TransferEventReport) + { + TransferEventReport reportEvent = (TransferEventReport)event; + switch (reportEvent.getReportType()) + { + case DESTINATION: + foundDestReport = true; + transferDestReport = reportEvent.getNodeRef(); + assertNotNull("dest transfer nodeId null", transferDestReport); + assertFalse("dest transfer nodeId not correct", transferReport.equals(transferDestReport)); + break; + + case SOURCE: + foundSourceReport = true; + + assertEquals("source transfer nodeId not correct", transferReport, reportEvent.getNodeRef()); + break; + } + } + } + + assertTrue("source report not found", foundSourceReport); + assertTrue("dest report not found", foundDestReport); + } + } + finally + { + endTransaction(); + } + + /** + * Now validate the client side transfer report against the xsd file + */ + startNewTransaction(); + try + { + ContentReader reader = contentService.getReader(transferReport, ContentModel.PROP_CONTENT); + assertNotNull("transfer reader is null", reader); + + logger.debug("This report should succeed"); + if(logger.isDebugEnabled()) + { + dumpToSystemOut(transferReport); + } + + // Now validate the client side transfer report against the XSD + Source transferReportSource = new StreamSource(reader.getContentInputStream()); + SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/report/TransferReport2.xsd"; + Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); + Validator validator = schema.newValidator(); + try + { + validator.validate(transferReportSource); + } + catch (Exception e) + { + fail(e.getMessage() ); + } + } + finally + { + endTransaction(); + } + + /** + * Now validate the destination side transfer report against its xsd file + */ + startNewTransaction(); + try + { + ContentReader reader = contentService.getReader(transferDestReport, ContentModel.PROP_CONTENT); + assertNotNull("transfer reader is null", reader); + + assertEquals("dest report mimetype not set", reader.getMimetype(), MimetypeMap.MIMETYPE_XML); + String name = (String)nodeService.getProperty(transferReport, ContentModel.PROP_NAME); + assertTrue("dest report does not end with .xml", name.endsWith(".xml")); + + if(logger.isDebugEnabled()) + { + dumpToSystemOut(transferDestReport); + } + + // Now validate the destination side transfer report against the XSD + Source transferReportSource = new StreamSource(reader.getContentInputStream()); + SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/reportd/TransferDestinationReport.xsd"; + Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); + Validator validator = schema.newValidator(); + try + { + validator.validate(transferReportSource); + } + catch (Exception e) + { + fail("Destination Transfer Report " + e.getMessage() ); + } + } + finally + { + endTransaction(); + } + + /** + * Now validate all transfer reports. + */ + startNewTransaction(); + try + { + + String query = "TYPE:\"trx:transferReportDest\""; + ResultSet results = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_LUCENE, query); + + SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/reportd/TransferDestinationReport.xsd"; + Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION)); + Validator validator = schema.newValidator(); + + for(ResultSetRow result : results) + { + NodeRef reportNode = result.getNodeRef(); + + logger.debug("validating reportNode " + reportNode); + // Now validate the destination side transfer report against the XSD + ContentReader reader = contentService.getReader(reportNode, ContentModel.PROP_CONTENT); + assertNotNull("transfer reader is null", reader); + if (reader.getMimetype().equals(MimetypeMap.MIMETYPE_XML)) + { + Source transferReportSource = new StreamSource(reader.getContentInputStream()); + try + { + validator.validate(transferReportSource); + } + catch (Exception e) + { + fail("Destination Transfer Report reportNode:" + reportNode + " message :" + e.getMessage() ); + } + } + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + + logger.debug("now delete the target:" + targetName); + + transferService.deleteTransferTarget(targetName); + } + finally + { + endTransaction(); + } + } // test transfer report + + private void dumpToSystemOut(NodeRef nodeRef) throws IOException + { + ContentReader reader2 = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT); + assertNotNull("transfer reader is null", reader2); + InputStream is = reader2.getContentInputStream(); + + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + + String s = br.readLine(); + while(s != null) + { + System.out.println(s); + s = br.readLine(); + } + } + + private UnitTestTransferManifestNodeFactory unitTestKludgeToTransferGuestHomeToCompanyHome() + { + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + return testNodeFactory; + + } + + + /** + * Test the transfer method behaviour with respect to sync folders - sending a complete set + * of nodes and implying delete from the absence of an association. + * + * This is a unit test so it does some shenanigans to send to the same instance of alfresco. + * + * Tree of nodes + * + * A1 + * | | + * A2 A3 (Content Node) + * | + * A4 A5 (Content Node) + * + * Test steps - + * 1 add A1 + * transfer(sync) + * 2 add A2, A3, A4, A5 + * transfer(sync) + * 3 remove A2 + * transfer(sync) A4 and A5 should cascade delete on source + * 4 remove A3 + * transfer(sync) + * 5 add back A3 - new node ref + * transfer(sync) + * 6 add A2, A4, A5 + * transfer(sync) + * 7 test delete and restore of a single node + * remove A3 . + * transfer + * restore node A3 + * transfer + * 8 test delete and restore of a tree of nodes + * remove A2 (A4 and A5 should cascade delete on source as well) + * transfer + * restore node A2 (and A4 and A5 cascade restore) + * transfer + */ + public void testTransferSyncNodes() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Now go ahead and create our first transfer target + */ + String targetName = "testTransferSyncNodes"; + TransferTarget transferMe; + NodeRef A1NodeRef; + NodeRef A2NodeRef; + NodeRef A3NodeRef; + NodeRef A4NodeRef; + NodeRef A5NodeRef; + + NodeRef destNodeRef; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test nodes A1 through A5 that we will read and write + */ + { + // Node A1 + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A2 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); + A2NodeRef = child.getChildRef(); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); + } + + { + // Node A3 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); + A3NodeRef = child.getChildRef(); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); + + ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A4 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_CONTENT); + A4NodeRef = child.getChildRef(); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); + + ContentWriter writer = contentService.getWriter(A4NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A5 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); + A5NodeRef = child.getChildRef(); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); + + ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + + /** + * Step 1. Add Node A1. + */ + startNewTransaction(); + try + { + /** + * Transfer Node A with no children + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); + assertEquals("type is wrong", nodeService.getType(A1NodeRef), nodeService.getType(destNodeRef)); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 2. Add Node A2, A3, A4, A5. + */ + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 3 - remove folder node A2 + */ + startNewTransaction(); + try + { + nodeService.deleteNode(A2NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + //nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + //nodes.add(A4NodeRef); + //nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 4 - remove content node A3 + */ + startNewTransaction(); + try + { + nodeService.deleteNode(A3NodeRef); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + //nodes.add(A2NodeRef); + //nodes.add(A3NodeRef); + //nodes.add(A4NodeRef); + //nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertFalse("dest node ref A3 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 5. Add back A3. + */ + startNewTransaction(); + try + { + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); + A3NodeRef = child.getChildRef(); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); + + ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + //nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + //nodes.add(A4NodeRef); + //nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 6. add A2, A4, A5 + */ + startNewTransaction(); + try + { + + { + // Node A2 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); + A2NodeRef = child.getChildRef(); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); + } + + { + // Node A4 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_CONTENT); + A4NodeRef = child.getChildRef(); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); + + ContentWriter writer = contentService.getWriter(A4NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A5 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); + A5NodeRef = child.getChildRef(); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); + + ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertTrue("dest node A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 7 - test delete and restore of a single node + * remove A3 . + * transfer + * restore node A3 + * transfer + */ + startNewTransaction(); + try + { + logger.debug("Step 7 - delete node A3"); + nodeService.deleteNode(A3NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + //nodes.add(A3NodeRef); A3 has gone. + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertFalse("dest node ref A3 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + NodeRef archivedNode = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, A3NodeRef.getId()); + NodeRef newNodeRef = nodeService.restoreNode(archivedNode, A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3")); + assertEquals("restored node ref is different", newNodeRef, A3NodeRef); + logger.debug("Step 7 - restore node A3"); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5. + * (So we are seeing what happens to node 3 on the target + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + } + finally + { + endTransaction(); + } + + /** + * Step 8 - test delete and restore of a tree + * remove A2 (A4, A5) should cascade delete. + * transfer + * restore node A2 + * transfer + */ + startNewTransaction(); + try + { + nodeService.deleteNode(A2NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + //nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + //nodes.add(A4NodeRef); + //nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertFalse("dest node ref A2 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertFalse("dest node ref A4 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertFalse("dest node ref A5 has not been deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + NodeRef archivedNode = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, A2NodeRef.getId()); + nodeService.restoreNode(archivedNode, A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2")); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + /** + * Transfer Node A 1-5. + * (So we are seeing what happens to node 2, 4, 5 on the target + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref A1 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertTrue("dest node ref A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node ref A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node ref A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertTrue("dest node ref A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + } + finally + { + endTransaction(); + } + + } + + /** + * Test the transfer method behaviour with respect to sync with (local) alien nodes. + * + * So we have Repository A transferring content and Repository B is the local repo that we + * add and delete alien nodes. + * + * In general an alien node will prevent deletion of the parent folders + * + *
+     * Tree of nodes
+     * 
+     *      A1
+     *      |      |                      | 
+     *      A2     A3 (Content Node)      B9 (Alien Content Node)
+     *      |
+     *   A4 A5 B10 (Alien Content Node)   A6
+     *   |                                |
+     *   A7 B11 (Alien Content Node)      A8 B12 B13 (Alien Content Node)
+     *                                        |
+     *                                       B14
+     * 
+ * Test steps - + *
    + *
  1. add A1, A2, A3, A4, A5, A6, A7, A8 + * transfer(sync)
  2. + *
  3. add Alien node B9. A1 becomes Alien.
  4. + *
  5. remove alien node B9. A1 becomes non Alien.
  6. + *
  7. add Alien node B10. A1 and A2 become Alien
  8. + *
  9. remove Alien node B10. A1 and A2 become non Alien
  10. + *
  11. add B12 and B14 A6, A2, A1 becomes Alien
  12. + *
  13. remove B14, B12, A6, A2, A1 remain Alien
  14. + *
  15. add B13 A6, A2, A1 remains Alien
  16. + *
  17. remove B13 A6, A2, A1 remains Alien
  18. + *
  19. remove B12 A6, A2, A1 becomes non Alien.
  20. + *
  21. add B9 and B10 A1 and A2 become Alien
  22. + *
  23. remove B10 A2 becomes non alien A1 remains alien.
  24. + *
  25. Add B11, delete A2 + * transfer sync
  26. + * (A5, A6, A7 and A8 should be deleted A2 and A4 remain since they contain alien content.) + *
+ */ + public void testTransferInvadedByLocalAlienNodes() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.JAPAN; + String CONTENT_STRING = "Hello"; + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + * + * Mock the transfer service to be from Repo A + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + final String localRepositoryId = descriptorService.getCurrentRepositoryDescriptor().getId(); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Now go ahead and create our first transfer target + */ + String targetName = "testSyncWithAlienNodes"; + TransferTarget transferMe; + + NodeRef A1NodeRef; + NodeRef A2NodeRef; + NodeRef A3NodeRef; + NodeRef A4NodeRef; + NodeRef A5NodeRef; + NodeRef A6NodeRef; + NodeRef A7NodeRef; + NodeRef A8NodeRef; + NodeRef B9NodeRef; + NodeRef B10NodeRef; + NodeRef B11NodeRef; + NodeRef B12NodeRef; + NodeRef B13NodeRef; + NodeRef B14NodeRef; + + NodeRef destNodeRef; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test nodes A1 through A8 that we will read and write + */ + { + // Node A1 + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A2 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); + A2NodeRef = child.getChildRef(); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); + } + + { + // Node A3 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); + A3NodeRef = child.getChildRef(); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); + + ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A4 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_FOLDER); + A4NodeRef = child.getChildRef(); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); + } + { + // Node A5 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); + A5NodeRef = child.getChildRef(); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); + + ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + + { + // Node A6 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A6"), ContentModel.TYPE_FOLDER); + A6NodeRef = child.getChildRef(); + nodeService.setProperty(A6NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A6NodeRef, ContentModel.PROP_NAME, "A6"); + } + { + // Node A7 + ChildAssociationRef child = nodeService.createNode(A4NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A7"), ContentModel.TYPE_CONTENT); + A7NodeRef = child.getChildRef(); + nodeService.setProperty(A7NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A7NodeRef, ContentModel.PROP_NAME, "A7"); + + ContentWriter writer = contentService.getWriter(A7NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A8 + ChildAssociationRef child = nodeService.createNode(A6NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A8"), ContentModel.TYPE_CONTENT); + A8NodeRef = child.getChildRef(); + nodeService.setProperty(A8NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A8NodeRef, ContentModel.PROP_NAME, "A8"); + + ContentWriter writer = contentService.getWriter(A8NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + + /** + * Step 1. add A1, A2, A3, A4, A5, A6, A7, A8 + * transfer(sync) + */ + startNewTransaction(); + try + { + /** + * Transfer Nodes A1 through A8 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + nodes.add(A6NodeRef); + nodes.add(A7NodeRef); + nodes.add(A8NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertFalse("unit test stuffed up - comparing with self", A1destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(A1destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); + assertEquals("type is wrong", nodeService.getType(A1NodeRef), nodeService.getType(A1destNodeRef)); + assertFalse("A1 is alien", nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 2 add Alien node B9 child of A1(dest). A1(dest) becomes Alien because it contains an alien child. + */ + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B9"), ContentModel.TYPE_CONTENT); + B9NodeRef = child.getChildRef(); + nodeService.setProperty(B9NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B9NodeRef, ContentModel.PROP_NAME, "B9"); + + ContentWriter writer = contentService.getWriter(B9NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + // Check injected transferred aspect. + assertTrue("node A1 is not alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); + assertTrue("node B9 is not alien", (Boolean)nodeService.hasAspect(B9NodeRef, TransferModel.ASPECT_ALIEN)); + + // Temp code + List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); + assertTrue("invaders contains local repository Id", invaders.contains(localRepositoryId)); + assertFalse("invaders contains REPO_ID_A", invaders.contains(REPO_ID_A)); + + } + finally + { + endTransaction(); + } + + /** + * Step 3 remove alien node B9. A1 becomes non Alien. + */ + startNewTransaction(); + try + { + logger.debug("delete node B9"); + nodeService.deleteNode(B9NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A3destNodeRef = testNodeFactory.getMappedNodeRef(A3NodeRef); + List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("node A3 is alien", (Boolean)nodeService.hasAspect(A3destNodeRef, TransferModel.ASPECT_ALIEN)); + assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * 4 add Alien node B10 child of A2. A1 and A2 become Alien + */ + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B10"), ContentModel.TYPE_CONTENT); + B10NodeRef = child.getChildRef(); + nodeService.setProperty(B10NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B10NodeRef, ContentModel.PROP_NAME, "B10"); + + ContentWriter writer = contentService.getWriter(B10NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + + assertTrue("node A1 is not alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien aspect", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * 5 remove Alien node B10. A1 and A2 become non Alien + */ + startNewTransaction(); + try + { + logger.debug("delete node B10"); + nodeService.deleteNode(B10NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + + assertFalse("node A1 is still alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("node A2 is still alien aspect", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * Step 6 + * add B12 (child of A6) and B14 A6, A2, A1 becomes Alien + */ + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B12"), ContentModel.TYPE_FOLDER); + B12NodeRef = child.getChildRef(); + nodeService.setProperty(B12NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B12NodeRef, ContentModel.PROP_NAME, "B12"); + + child = nodeService.createNode(B12NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B14"), ContentModel.TYPE_CONTENT); + B14NodeRef = child.getChildRef(); + nodeService.setProperty(B14NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B14NodeRef, ContentModel.PROP_NAME, "B14"); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node B14 is not alien", (Boolean)nodeService.hasAspect(B14NodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node B12 is not alien", (Boolean)nodeService.hasAspect(B12NodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * Step 7 + * Delete B14. B12 remains alien + */ + startNewTransaction(); + try + { + nodeService.deleteNode(B14NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node B12 is not alien", (Boolean)nodeService.hasAspect(B12NodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * Step 8 + * add B13 A6, A2, A1 remains Alien + */ + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B13"), ContentModel.TYPE_CONTENT); + B13NodeRef = child.getChildRef(); + nodeService.setProperty(B13NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B13NodeRef, ContentModel.PROP_NAME, "B13"); + + ContentWriter writer = contentService.getWriter(B13NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * Step 9 remove B13 A6, A2, A1 remains Alien Due to B12 + */ + startNewTransaction(); + try + { + nodeService.deleteNode(B13NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A6 is not alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * Step 10 remove B12 A6, A2, A1 becomes non Alien. + */ + startNewTransaction(); + try + { + nodeService.deleteNode(B12NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + + assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("node A2 is still alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("node A6 is still alien", (Boolean)nodeService.hasAspect(A6destNodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + /** + * Step 11 add B9 and B10 A1 and A2 become Alien + */ + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B9"), ContentModel.TYPE_CONTENT); + B9NodeRef = child.getChildRef(); + nodeService.setProperty(B9NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B9NodeRef, ContentModel.PROP_NAME, "B9"); + + ContentWriter writer = contentService.getWriter(B9NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + + destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B10"), ContentModel.TYPE_CONTENT); + B10NodeRef = child.getChildRef(); + nodeService.setProperty(B10NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B10NodeRef, ContentModel.PROP_NAME, "B10"); + + writer = contentService.getWriter(B10NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + + /** + * Step 12 remove B10 A2 becomes non alien A1 remains alien. + */ + startNewTransaction(); + try + { + nodeService.deleteNode(B10NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + + // BUGBUG + assertTrue("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("node A2 is still alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + } + + finally + { + endTransaction(); + } + + + /** + * 13 Add Alien node B11. + */ + logger.debug("Step 12 Add Node B11, Delete A2 and sync"); + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A4NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B11"), ContentModel.TYPE_CONTENT); + B11NodeRef = child.getChildRef(); + nodeService.setProperty(B11NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B11NodeRef, ContentModel.PROP_NAME, "B11"); + + ContentWriter writer = contentService.getWriter(B11NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + + nodeService.deleteNode(A2NodeRef); + } + finally + { + endTransaction(); + } + + /** + * Step 14 + * delete A2 (will cascade delete A4, A5, A6, A7, A8 + * transfer sync + * (A5, A6, A7, A8 and should be deleted A2 and A4 remain since they contain alien content.) + */ + startNewTransaction(); + try + { + // Now validate A1, A2 and A4 are alien + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A4destNodeRef = testNodeFactory.getMappedNodeRef(A4NodeRef); + + + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 is not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A4 is not alien", (Boolean)nodeService.hasAspect(A4destNodeRef, TransferModel.ASPECT_ALIEN)); + + assertFalse("test error: node A2 not deleted", nodeService.exists(A2NodeRef)); + assertFalse("test error: node A4 not deleted", nodeService.exists(A4NodeRef)); + assertFalse("test error: node A5 not deleted", nodeService.exists(A5NodeRef)); + assertFalse("test error: node A6 not deleted", nodeService.exists(A6NodeRef)); + assertFalse("test error: node A7 not deleted", nodeService.exists(A7NodeRef)); + assertFalse("test error: node A8 not deleted", nodeService.exists(A8NodeRef)); + + assertTrue("test error: node does not exist", nodeService.exists(A3NodeRef)); + + /** + * Transfer Nodes A1 through A8 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A3NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + NodeRef A3destNodeRef = testNodeFactory.getMappedNodeRef(A3NodeRef); + NodeRef A4destNodeRef = testNodeFactory.getMappedNodeRef(A4NodeRef); + NodeRef A5destNodeRef = testNodeFactory.getMappedNodeRef(A5NodeRef); + NodeRef A6destNodeRef = testNodeFactory.getMappedNodeRef(A6NodeRef); + NodeRef A7destNodeRef = testNodeFactory.getMappedNodeRef(A7NodeRef); + NodeRef A8destNodeRef = testNodeFactory.getMappedNodeRef(A8NodeRef); + + assertTrue("node A1 not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A2 not alien", (Boolean)nodeService.hasAspect(A2destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node A4 not alien", (Boolean)nodeService.hasAspect(A4destNodeRef, TransferModel.ASPECT_ALIEN)); + assertTrue("node B11 does not exist", nodeService.exists(B11NodeRef)); + + assertTrue("node A3 deleted", nodeService.exists(A3destNodeRef)); + + assertFalse("node A5 not deleted", nodeService.exists(A5destNodeRef)); + assertFalse("node A6 not deleted", nodeService.exists(A6destNodeRef)); + assertFalse("node A7 not deleted", nodeService.exists(A7destNodeRef)); + assertFalse("node A8 not deleted", nodeService.exists(A8destNodeRef)); + } + + finally + { + endTransaction(); + } + } + + /** + * Test restore of a local node. + *
+     * Tree of nodes
+     *     A1   B1
+     *     |
+     *     B2
+     *     |
+     *     B3
+     * 
+     * 
    + *
  1. Add B2. A1 is alien.
  2. + *
  3. Delete B2. A1 not alien
  4. + *
  5. Restore B2. A1 is alien
  6. + *
  7. Add B3. A1 is alien
  8. + *
  9. Delete B2. A1 not alien
  10. + *
  11. Restore to B1. B2 and B3 not alien.
  12. + *
+ * @throws Exception + */ + public void testLocalAlienRestore() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.JAPAN; + String CONTENT_STRING = "Hello"; + + + /** + * Now go ahead and create our first transfer target + */ + String targetName = "testRestoreOfAlienNodes"; + TransferTarget transferMe; + + NodeRef S0NodeRef; + NodeRef A0NodeRef; + NodeRef A1NodeRef; + NodeRef B1NodeRef; + NodeRef B2NodeRef; + NodeRef B3NodeRef; + + NodeRef destNodeRef; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test nodes A1 through A8 that we will read and write + */ + { + // Node S0 + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + S0NodeRef = child.getChildRef(); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); + } + { + // Node A1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A0"), ContentModel.TYPE_FOLDER); + A0NodeRef = child.getChildRef(); + nodeService.setProperty(A0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A0NodeRef, ContentModel.PROP_NAME, "A0"); + } + { + // Node A1 + ChildAssociationRef child = nodeService.createNode(A0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); + } + { + // Node B1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); + B1NodeRef = child.getChildRef(); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + * + * Mock the transfer service to be from Repo A + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + pathMap.add(new Pair(nodeService.getPath(A0NodeRef), nodeService.getPath(B1NodeRef))); + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Step 1. add A1 + * transfer(sync) + */ + startNewTransaction(); + try + { + /** + * Transfer Nodes A1 + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + assertFalse("A1 is alien", nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + // Check injected transferred aspect. + assertNotNull("transferredAspect", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 2 add Alien node B1 child of A1(dest). + */ + startNewTransaction(); + try + { + destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + ChildAssociationRef child = nodeService.createNode(destNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B2"), ContentModel.TYPE_FOLDER); + B2NodeRef = child.getChildRef(); + nodeService.setProperty(B2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B2NodeRef, ContentModel.PROP_NAME, "B2"); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists and has similar properties to the source + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + // Check injected transferred aspect. + assertTrue("node A1 is not alien aspect", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); + assertTrue("node B2 is not alien", (Boolean)nodeService.hasAspect(B2NodeRef, TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + /** + * Step 3 remove alien node B2. A1 becomes non Alien. + */ + startNewTransaction(); + try + { + logger.debug("delete node B2"); + nodeService.deleteNode(B2NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 4 restore alien node B2. A1 becomes Alien again + */ + startNewTransaction(); + try + { + logger.debug("restore node B2"); + NodeRef B2ArchiveNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, B2NodeRef.getId()); + nodeService.restoreNode(B2ArchiveNodeRef, testNodeFactory.getMappedNodeRef(A1NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("B2")); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + assertTrue("node A1 is not alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step 5 - add B3 + */ + startNewTransaction(); + try + { + ChildAssociationRef child = nodeService.createNode(B2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B3"), ContentModel.TYPE_FOLDER); + B3NodeRef = child.getChildRef(); + nodeService.setProperty(B3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B3NodeRef, ContentModel.PROP_NAME, "B3"); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + assertTrue("node B3 is not alien", (Boolean)nodeService.hasAspect(B3NodeRef, TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + /** + * Step 5 remove alien node B2. A1 becomes non Alien (again). + */ + startNewTransaction(); + try + { + logger.debug("delete node B2"); + nodeService.deleteNode(B2NodeRef); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + NodeRef A1destNodeRef = testNodeFactory.getMappedNodeRef(A1NodeRef); + List invaders = (List) nodeService.getProperty(A1destNodeRef, TransferModel.PROP_INVADED_BY); + assertTrue("dest node ref does not exist", nodeService.exists(A1destNodeRef)); + assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(A1destNodeRef, TransferModel.ASPECT_ALIEN)); + assertNotNull("repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_REPOSITORY_ID)); + assertNotNull("from repository id is null", (String)nodeService.getProperty(A1destNodeRef, TransferModel.PROP_FROM_REPOSITORY_ID)); + } + finally + { + endTransaction(); + } + + /** + * Step6 restore B2 and B3 to B1. + */ + startNewTransaction(); + try + { + logger.debug("restore node B2"); + NodeRef B2ArchiveNodeRef = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, B2NodeRef.getId()); + nodeService.restoreNode(B2ArchiveNodeRef, B1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B2")); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertFalse("node A1 is still alien", (Boolean)nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("node A2 is still alien", (Boolean)nodeService.hasAspect(B2NodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("node A3 is still alien", (Boolean)nodeService.hasAspect(B3NodeRef, TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + } + + + + /** + * Test the transfer method with regard to permissions on a node. + *

+ * Step 1: + * Create a node with a single permission + * Inherit:false + * Read, Admin, Allow + * Transfer + *

+ * Step 2: + * Update it to have several permissions + * Inherit:false + * Read, Everyone, DENY + * Read, Admin, Allow + *

+ * Step 3: + * Remove a permission + * Inherit:false + * Read, Admin, Allow + *

+ * Step 4: + * Revert to inherit all permissions + * Inherit:true + *

+ * This is a unit test so it does some shenanigans to send to the same instance of alfresco. + */ + public void testTransferWithPermissions() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Now go ahead and create our transfer target + */ + String targetName = "testTransferWithPermissions"; + TransferTarget transferMe; + NodeRef contentNodeRef; + NodeRef destNodeRef; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node that we will read and write + */ + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT); + contentNodeRef = child.getChildRef(); + nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, name); + + ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + + permissionService.setInheritParentPermissions(contentNodeRef, false); + permissionService.setPermission(contentNodeRef, "admin", PermissionService.READ, true); + + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * Step 1 + */ + logger.debug("First transfer - create new node with inheritParent permission off"); + startNewTransaction(); + try + { + /** + * Transfer our transfer target node + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists with the correct permissions + destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); + assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); + + // Check ACL of destination node + boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); + Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); + + boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); + Set destPerm = permissionService.getAllSetPermissions(destNodeRef); + + assertFalse("inherit parent permissions (src) flag is incorrect", srcInherit); + assertFalse("inherit parent permissions (dest) flag is incorrect", destInherit); + + // Check destination has the source's permissions + for (AccessPermission p : srcPerm) + { + logger.debug("checking permission :" + p); + assertTrue("permission is missing", destPerm.contains(p)); + } + } + finally + { + endTransaction(); + } + + /** + * Step 2 + * Update it to have several permissions + * Inherit:false + * Read, Everyone, DENY + * Read, Admin, Allow + */ + startNewTransaction(); + try + { + permissionService.setPermission(contentNodeRef, "EVERYONE", PermissionService.READ, false); + permissionService.setPermission(contentNodeRef, "admin", PermissionService.FULL_CONTROL, true); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + /** + * Transfer our transfer target node + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + + startNewTransaction(); + try + { + // Now validate that the target node exists with the correct permissions + destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); + + // Check ACL of destination node + boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); + Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); + + boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); + Set destPerm = permissionService.getAllSetPermissions(destNodeRef); + + assertFalse("inherit parent permissions (src) flag is incorrect", srcInherit); + assertFalse("inherit parent permissions (dest) flag is incorrect", destInherit); + + // Check destination has the source's permissions + for (AccessPermission p : srcPerm) + { + logger.debug("checking permission :" + p); + assertTrue("Step2, permission is missing", destPerm.contains(p)); + } + } + finally + { + endTransaction(); + } + + /** + * Step 3 Remove a permission + */ + startNewTransaction(); + try + { + permissionService.deletePermission(contentNodeRef, "admin", PermissionService.FULL_CONTROL); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + /** + * Transfer our transfer target node + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists with the correct permissions + destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); + + // Check ACL of destination node + boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); + Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); + + boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); + Set destPerm = permissionService.getAllSetPermissions(destNodeRef); + + assertFalse("inherit parent permissions (src) flag is incorrect", srcInherit); + assertFalse("inherit parent permissions (dest) flag is incorrect", destInherit); + + // Check destination has the source's permissions + for (AccessPermission p : srcPerm) + { + logger.debug("checking permission :" + p); + assertTrue("permission is missing", destPerm.contains(p)); + } + } + finally + { + endTransaction(); + } + + /** + * Step 4 + * Revert to inherit all permissions + */ + startNewTransaction(); + try + { + permissionService.setInheritParentPermissions(contentNodeRef, true); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + /** + * Transfer our transfer target node + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(contentNodeRef); + definition.setNodes(nodes); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists with the correct permissions + destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef); + assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef())); + assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef)); + assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE); + assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef)); + + // Check ACL of destination node + boolean srcInherit = permissionService.getInheritParentPermissions(contentNodeRef); + Set srcPerm = permissionService.getAllSetPermissions(contentNodeRef); + + boolean destInherit = permissionService.getInheritParentPermissions(destNodeRef); + Set destPerm = permissionService.getAllSetPermissions(destNodeRef); + + assertTrue("inherit parent permissions (src) flag is incorrect", srcInherit); + assertTrue("inherit parent permissions (dest) flag is incorrect", destInherit); + + // Check destination has the source's permissions + for (AccessPermission p : srcPerm) + { + if(p.isSetDirectly()) + { + logger.debug("checking permission :" + p); + assertTrue("permission is missing:" + p, destPerm.contains(p)); + } + } + } + finally + { + endTransaction(); + } + } + + + /** + * Transfer with read only flag + * + * Node tree for this test + *

 
+     *           A (Folder)
+     *   |                 | 
+     *   B (Content)   C (Folder)
+     *                     |
+     *                     D (Content)
+     * 
+ * Step 1 + * transfer Nodes ABCD with read only flag set - content should all be locked on destination + *

+ * Step 2 + * lock B (Content node) as user fred + * transfer (read only) - destination lock should change to Admin + *

+ * Step 3 + * lock C (Folder) as user fred + * transfer (read only) - destination lock should change to Admin + *

+ * Step 4 + * transfer without read only flag - locks should revert from Admin to Fred. + *

+ * Step 5 + * remove locks on A and B - transfer without read only flag - content should all be unlocked. + */ + public void testReadOnlyFlag() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + String CONTENT_NAME = "Demo Node 1"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "The quick brown fox"; + Setnodes = new HashSet(); + String USER_ONE = "TransferServiceImplTest"; + String PASSWORD = "Password"; + + String targetName = "testReadOnlyFlag"; + + NodeRef nodeA; + NodeRef nodeB; + NodeRef nodeC; + NodeRef nodeD; + + ChildAssociationRef child; + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + TransferTarget transferMe; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test node that we will read and write + */ + String guid = GUID.generate(); + + child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(guid), ContentModel.TYPE_FOLDER); + nodeA = child.getChildRef(); + nodeService.setProperty(nodeA , ContentModel.PROP_TITLE, guid); + nodeService.setProperty(nodeA , ContentModel.PROP_NAME, guid); + nodes.add(nodeA); + + child = nodeService.createNode(nodeA, ContentModel.ASSOC_CONTAINS, QName.createQName("testNodeB"), ContentModel.TYPE_CONTENT); + nodeB = child.getChildRef(); + nodeService.setProperty(nodeB , ContentModel.PROP_TITLE, CONTENT_TITLE + "B"); + nodeService.setProperty(nodeB , ContentModel.PROP_NAME, "DemoNodeB"); + + { + ContentWriter writer = contentService.getWriter(nodeB , ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + nodes.add(nodeB); + } + + child = nodeService.createNode(nodeA, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeC"), ContentModel.TYPE_FOLDER); + nodeC = child.getChildRef(); + nodeService.setProperty(nodeC , ContentModel.PROP_TITLE, "TestNodeC"); + nodeService.setProperty(nodeC , ContentModel.PROP_NAME, "TestNodeC"); + nodes.add(nodeC); + + child = nodeService.createNode(nodeC, ContentModel.ASSOC_CONTAINS, QName.createQName("testNodeD"), ContentModel.TYPE_CONTENT); + nodeD = child.getChildRef(); + nodeService.setProperty(nodeD , ContentModel.PROP_TITLE, CONTENT_TITLE + "D"); + nodeService.setProperty(nodeD , ContentModel.PROP_NAME, "DemoNodeD"); + { + ContentWriter writer = contentService.getWriter(nodeD , ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + nodes.add(nodeD); + } + + // Create users + createUser(USER_ONE, PASSWORD); + + /** + * Now go ahead and create our first transfer target + */ + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * Step 1. + * transfer Nodes ABCD with read only flag set - content should all be locked on destination + */ + logger.debug("transfer read only - step 1"); + startNewTransaction(); + try + { + /** + * Transfer our transfer target nodes + */ + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setReadOnly(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Check destination nodes are locked. + assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); + assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); + assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); + assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); + + assertTrue("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); + } + finally + { + endTransaction(); + } + + /** + * Step 2 + * lock B (Content node) as user ONE + * transfer (read only) - destination lock should change user to "Admin" + */ + startNewTransaction(); + try + { + AuthenticationUtil.pushAuthentication(); + AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); + lockService.lock(nodeB, LockType.READ_ONLY_LOCK); + } + finally + { + assertEquals("test error: dest node B lock ownership", nodeService.getProperty(nodeB, ContentModel.PROP_LOCK_OWNER), USER_ONE); + AuthenticationUtil.popAuthentication(); + endTransaction(); + } + + logger.debug("transfer read only - step 2"); + startNewTransaction(); + try + { + /** + * Transfer our transfer target nodes + */ + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setReadOnly(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Check destination nodes are locked. + assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); + assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); + assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); + assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); + + assertTrue("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); + + // check that the lock owner is no longer USER_ONE + assertTrue("lock owner not changed", !USER_ONE.equalsIgnoreCase((String)nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.PROP_LOCK_OWNER))); + } + finally + { + endTransaction(); + } + + + /** + * Step 3 + * lock C (Folder node) as user ONE + * transfer (read only) - destination lock should change to Admin + */ + startNewTransaction(); + try + { + AuthenticationUtil.pushAuthentication(); + AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); + lockService.lock(nodeC, LockType.READ_ONLY_LOCK); + } + finally + { + assertEquals("test error: dest node C lock ownership", nodeService.getProperty(nodeC, ContentModel.PROP_LOCK_OWNER), USER_ONE); + AuthenticationUtil.popAuthentication(); + endTransaction(); + } + + logger.debug("transfer read only - step 3"); + startNewTransaction(); + try + { + /** + * Transfer our transfer target nodes + */ + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setReadOnly(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Check destination nodes are locked. + assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); + assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); + assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); + assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); + + assertTrue("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); + + // check that the lock owner is no longer USER_ONE for content node B and folder node C + assertTrue("lock owner not changed", !USER_ONE.equalsIgnoreCase((String)nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.PROP_LOCK_OWNER))); + assertTrue("lock owner not changed", !USER_ONE.equalsIgnoreCase((String)nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.PROP_LOCK_OWNER))); + } + finally + { + endTransaction(); + } + + + /** + * Step 4 + * transfer without read only flag - locks should revert from Admin to USER_ONE. + */ + logger.debug("transfer read only - step 4"); + startNewTransaction(); + try + { + /** + * Transfer our transfer target nodes + */ + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setReadOnly(false); // turn off read-only + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + // Check destination nodes are not locked. + assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); + assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); + assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); + assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); + + assertFalse("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); + assertTrue("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); + assertFalse("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); + + assertEquals("dest node B lock ownership", nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.PROP_LOCK_OWNER), USER_ONE); + assertEquals("dest node C lock ownership", nodeService.getProperty(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.PROP_LOCK_OWNER), USER_ONE); + + } + finally + { + endTransaction(); + } + + + /** + * Step 5 + * remove locks on A and B - transfer without read only flag - content should all be unlocked. + */ + logger.debug("transfer read only - step 5"); + startNewTransaction(); + try + { + lockService.unlock(nodeB); + lockService.unlock(nodeC); + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + /** + * Transfer our transfer target nodes + */ + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setReadOnly(false); // turn off read-only + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + // Check destination nodes are not locked. + assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeA))); + assertTrue("dest node B does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeB))); + assertTrue("dest node C does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeC))); + assertTrue("dest node D does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(nodeD))); + + assertFalse("test fail: dest node B is still locked", nodeService.hasAspect(nodeB, ContentModel.ASPECT_LOCKABLE)); + assertFalse("test fail: dest node C is still locked", nodeService.hasAspect(nodeC, ContentModel.ASPECT_LOCKABLE)); + + assertFalse("dest node A not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeA), ContentModel.ASPECT_LOCKABLE)); + assertFalse("dest node B not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeB), ContentModel.ASPECT_LOCKABLE)); + assertFalse("dest node C not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeC), ContentModel.ASPECT_LOCKABLE)); + assertFalse("dest node D not locked", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(nodeD), ContentModel.ASPECT_LOCKABLE)); + } + finally + { + endTransaction(); + } + } // end test read only flag + + /** + * Transfer sync from multiple repos. + * + * This is a unit test so does lots of shenanigans to fake transfer from three repositories on a single repo. + * + * Multi-repo sync depends upon the following pieces of functionality + * a) transferred nodes are tagged with a trx:transferred aspect containing the originating repository + * id and the from repository id + * b) to support hub and spoke - when syncing don't imply delete nodes that are not "from" the transferring system + * + * * Tree of nodes + * A1 + * | | + * A2 A3 (Content Node) B6 (Content Node) + * | + * A4 A5 B7 + * + * Step 1 + * Hub and Spoke Sync + * create Tree A1...A5 + * transfer (sync) + * check the transfered aspects on destination + * create node B6. Fake its transfered aspect to be from Repo B. + * transfer (sync) + * + * Step 2 + * Chain Sync + * Create Node A7 "from repo B". + * Change Nodes A1 ... A5 source to be received "from repo B" + * transfer + * + */ + public void testTwoRepoSync() throws Exception + { + /** + * Step 1 + * create Tree A1...A6 + * transfer (sync) + * check the transfered aspect + * create node B6. Fake its transfered aspect to be from Repo B, Non Alien. + * transfer (sync) + */ + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - replace the node factory with one that will map node refs, paths etc. + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level. + pathMap.add(new Pair(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + String repositoryId = REPO_ID_A; + + /** + * Now go ahead and create our first transfer target + */ + String targetName = "testTransferSyncNodes"; + TransferTarget transferMe; + NodeRef A1NodeRef; + NodeRef A2NodeRef; + NodeRef A3NodeRef; + NodeRef A4NodeRef; + NodeRef A5NodeRef; + NodeRef B6NodeRef; + NodeRef A7NodeRef; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Create a test nodes A1 through A5 that we will read and write + */ + { + // Node A1 + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A2 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); + A2NodeRef = child.getChildRef(); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); + } + + { + // Node A3 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_CONTENT); + A3NodeRef = child.getChildRef(); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); + + ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A4 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A4"), ContentModel.TYPE_CONTENT); + A4NodeRef = child.getChildRef(); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); + + ContentWriter writer = contentService.getWriter(A4NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + { + // Node A5 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_CONTENT); + A5NodeRef = child.getChildRef(); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); + + ContentWriter writer = contentService.getWriter(A5NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + Setnodes = new HashSet(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + + /** + * transfer (sync) + * check the transfered aspect + * create node B6. Fake its transfered aspect to be from Repo B, Non Alien. + * transfer (sync) + */ + startNewTransaction(); + try + { + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + // Node B6 - faked transfer from repository B. Child of Destination node A1 + NodeRef a1Dest = testNodeFactory.getMappedNodeRef(A1NodeRef); + + assertTrue("dest node A does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A1NodeRef))); + assertEquals("dest node A1 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + assertEquals("dest node A1 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); + assertEquals("dest node A2 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + assertEquals("dest node A2 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); + assertEquals("dest node A3 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + assertEquals("dest node A3 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); + assertEquals("dest node A4 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + assertEquals("dest node A4 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); + assertEquals("dest node A5 From RepositoryId", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + assertEquals("dest node A5 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.PROP_REPOSITORY_ID), repositoryId); + + ChildAssociationRef child = nodeService.createNode(a1Dest, ContentModel.ASSOC_CONTAINS, QName.createQName("B6"), ContentModel.TYPE_CONTENT); + B6NodeRef = child.getChildRef(); + nodeService.setProperty(B6NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(B6NodeRef, ContentModel.PROP_NAME, "B6"); + + /** + * The first tranfer was mocked to repository A - this is repository B. + */ + + // This is repository B so there's no need to fake it +// nodeService.setProperty(B6NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); +// nodeService.setProperty(B6NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); + + ContentWriter writer = contentService.getWriter(B6NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Does node B6 still exist ? + assertTrue("dest node B6 does not exist", nodeService.exists(B6NodeRef)); + assertTrue("B6 not alien", nodeService.hasAspect(B6NodeRef, TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + /** Step 2 + * Chain Sync + * Change Nodes A1 ... A5 source to be received "from repo B" + * Create Node A7 - Fake it to be received "from repo B" + * transfer + */ + String NEW_TITLE="Chain sync"; + + + startNewTransaction(); + try + { + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); + nodeService.setProperty(A1NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); + nodeService.setProperty(A1NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); + + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); + nodeService.setProperty(A2NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); + nodeService.setProperty(A2NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); + + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); + nodeService.setProperty(A3NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); + nodeService.setProperty(A3NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); + + /** + * The repository was mocked to repoistory A. This is repository B + */ + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A7"), ContentModel.TYPE_CONTENT); + A7NodeRef = child.getChildRef(); + nodeService.setProperty(A7NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); + nodeService.setProperty(A7NodeRef, ContentModel.PROP_NAME, "A7"); + nodeService.setProperty(A7NodeRef, ContentModel.PROP_TITLE, NEW_TITLE); + nodeService.setProperty(A7NodeRef, TransferModel.PROP_FROM_REPOSITORY_ID, REPO_ID_B); + nodeService.setProperty(A7NodeRef, TransferModel.PROP_REPOSITORY_ID, REPO_ID_B); + + ContentWriter writer = contentService.getWriter(A3NodeRef, ContentModel.PROP_CONTENT, true); + writer.setLocale(CONTENT_LOCALE); + writer.putContent(CONTENT_STRING); + } + finally + { + endTransaction(); + } + nodes.add(A7NodeRef); + + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + try + { + assertTrue("dest node A7 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A7NodeRef))); + + assertEquals("dest node A1 Title", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), ContentModel.PROP_TITLE), NEW_TITLE); + assertEquals("dest node A1 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_REPOSITORY_ID), REPO_ID_B); + assertEquals("dest node A1 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A1NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + + assertEquals("dest node A2 Title", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), ContentModel.PROP_TITLE), NEW_TITLE); + assertEquals("dest node A2 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_REPOSITORY_ID), REPO_ID_B); + assertEquals("dest node A2 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + + assertEquals("dest node A3 Title", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), ContentModel.PROP_TITLE), NEW_TITLE); + assertEquals("dest node A3 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_REPOSITORY_ID), REPO_ID_B); + assertEquals("dest node A3 Repository Id", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), repositoryId); + } + finally + { + endTransaction(); + } + } // test two repo sync + + /** + * Transfer sync from multiple repos. + * + * This is a unit test so does lots of shenanigans to fake transfer from three repositories on a single repo. + * + * Trees of nodes + *

+     *      A1              B1               C1
+     *      |                                 |    
+     *    A2/images                       A2 Dummy/images
+     *      |                              |
+     *      A3                            C3 
+     *                                          
+     * Destination   
+     *      B1
+     *      |
+     *    A2/images
+     *      |     |
+     *      C3    A3 
+     *            | 
+     *            C4         
+     * 
+ * Step 1. Transfer from A to B. + * Step 2. Transfer from C to B (crossing over on A2Dest) + * Step 3. Invade A3Dest via C4 + * Step 4. Delete C4. Sync from C + * Step 5. Delete C3 - A2 dest images folder uninvaded. + + */ + public void testMultiRepoTransfer() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + String targetName = "testMultiRepoTransfer"; + TransferTarget transferMe; + NodeRef S0NodeRef; + NodeRef A1NodeRef; + NodeRef A2NodeRef; + NodeRef A3NodeRef; + NodeRef B1NodeRef; + NodeRef C1NodeRef; + NodeRef C2NodeRef; + NodeRef C3NodeRef; + NodeRef C4NodeRef; + NodeRef A3Dummy; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + { + /** + * Node Source - located under guest home + */ + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + S0NodeRef = child.getChildRef(); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); + } + + { + // Node A2 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("images"), ContentModel.TYPE_FOLDER); + A2NodeRef = child.getChildRef(); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, "images"); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "images"); + } + + { + // Node A3 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_FOLDER); + A3NodeRef = child.getChildRef(); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, "A3"); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); + } + + { + // Node B1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); + B1NodeRef = child.getChildRef(); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); + } + + { + // Node C1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C1"), ContentModel.TYPE_FOLDER); + C1NodeRef = child.getChildRef(); + nodeService.setProperty(C1NodeRef, ContentModel.PROP_TITLE, "C1"); + nodeService.setProperty(C1NodeRef, ContentModel.PROP_NAME, "C1"); + } + + { + // Node C2/images + ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("images"), ContentModel.TYPE_FOLDER); + C2NodeRef = child.getChildRef(); + nodeService.setProperty(C2NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C2NodeRef, ContentModel.PROP_NAME, "images"); + } + + { + // Node C3 + ChildAssociationRef child = nodeService.createNode(C2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C3"), ContentModel.TYPE_FOLDER); + C3NodeRef = child.getChildRef(); + nodeService.setProperty(C3NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C3NodeRef, ContentModel.PROP_NAME, "C3"); + } + + { + // Node A3 (Dummy) + ChildAssociationRef child = nodeService.createNode(C2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_FOLDER); + A3Dummy = child.getChildRef(); + nodeService.setProperty(A3Dummy, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(A3Dummy, ContentModel.PROP_NAME, "A3 Dummy"); + } + + { + // Node C4 + ChildAssociationRef child = nodeService.createNode(A3Dummy, ContentModel.ASSOC_CONTAINS, QName.createQName("C4"), ContentModel.TYPE_FOLDER); + C4NodeRef = child.getChildRef(); + nodeService.setProperty(C4NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C4NodeRef, ContentModel.PROP_NAME, "C4"); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - Map path from A1 to B1 (So transfer will transfer by path) + * - Map path from C1 to B1 + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map Project A/images to Project B/images + // Map Project C/images to Project A/images + nodeService.getPath(A2NodeRef); + pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); + pathMap.add(new Pair(nodeService.getPath(C1NodeRef), nodeService.getPath(B1NodeRef))); + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Step 1 + * Now transfer in A's nodes to Repo B + */ + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A1NodeRef); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A2NodeRef))); + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + + // Check that A3 dest is a child of A2Dest which is a child of B1 + ChildAssociationRef A3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A3NodeRef)); + assertEquals("A3 dest is connected to the wrong node", A3Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A2NodeRef)); + ChildAssociationRef A2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A2NodeRef)); + assertEquals("A2 dest is connected to the wrong node", A2Ref.getParentRef(), B1NodeRef); + assertEquals("A2 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); + assertEquals("A3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); + } + finally + { + endTransaction(); + } + + /** + * Step 2 + * Now transfer in C's nodes + * B2 (Owned by A) gets invaded by C + */ + startNewTransaction(); + try + { + mockedDescriptorService = getMockDescriptorService(REPO_ID_C); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(C1NodeRef); + nodes.add(C2NodeRef); + nodes.add(C3NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + + // Check that A3 dest is a child of A2Dest which is a child of B1 + // Check that C3 dest is a child of A2Dest + ChildAssociationRef A3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A3NodeRef)); + assertEquals("A3 dest is connected to the wrong node", A3Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A2NodeRef)); + ChildAssociationRef C3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A3NodeRef)); + assertEquals("C3 dest is connected to the wrong node", C3Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A2NodeRef)); + ChildAssociationRef A2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A2NodeRef)); + assertEquals("A2 dest is connected to the wrong node", A2Ref.getParentRef(), B1NodeRef); + + assertTrue("A2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("A3 dest is invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); + + assertEquals("A2 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); + assertEquals("A3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); + assertEquals("C3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_C); + } + finally + { + endTransaction(); + } + + /** + * Step 3 + * Invade A3Dest via transfer of C4 from C + */ + startNewTransaction(); + try + { + mockedDescriptorService = getMockDescriptorService(REPO_ID_C); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(C4NodeRef); + definition.setNodes(nodes); + definition.setSync(false); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C4NodeRef))); + + assertTrue("C4 is not an invader", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C4NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("A3 is not an invader", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); + + assertEquals("A2 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); + assertEquals("A3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_A); + assertEquals("C3 dest owned by wrong repo", nodeService.getProperty(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.PROP_FROM_REPOSITORY_ID), REPO_ID_C); + + } + finally + { + endTransaction(); + } + + /** + * Step 4 + * Uninvade A3 from C by deleting C4 + * Via Sync of A3Dummy (which has the same destination path as A3). + */ + startNewTransaction(); + try + { + nodeService.deleteNode(C4NodeRef); + + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + mockedDescriptorService = getMockDescriptorService(REPO_ID_C); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A3Dummy); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertFalse("dest node C4 not deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(C4NodeRef))); + + logger.debug("A3 Dest is " + testNodeFactory.getMappedNodeRef(A3NodeRef)); + assertFalse("A3 Dest still invaded by C4", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + /** + * Step 5 - repeat the above test with transfer(non sync) rather than transfer(sync) + * Uninvade by deleting C3. + */ + startNewTransaction(); + try + { + nodeService.deleteNode(C3NodeRef); + + } + finally + { + endTransaction(); + } + startNewTransaction(); + try + { + mockedDescriptorService = getMockDescriptorService(REPO_ID_C); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + + NodeRef C3Deleted = new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, C3NodeRef.getId()); + nodes.add(C3Deleted); + + definition.setNodes(nodes); + definition.setSync(false); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A3NodeRef))); + assertFalse("dest node C3 not deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertFalse("dest node C4 not deleted", nodeService.exists(testNodeFactory.getMappedNodeRef(C4NodeRef))); + assertFalse("A3 still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A3NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("A2 still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A2NodeRef), TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + } // test multi repo sync + + + + // Utility methods below. + private TransferTarget createTransferTarget(String name) + { + String title = "title"; + String description = "description"; + String endpointProtocol = "http"; + String endpointHost = "MARKR02"; + int endpointPort = 7080; + String endpointPath = "/alfresco/service/api/transfer"; + String username = "admin"; + char[] password = "admin".toCharArray(); + + /** + * Now go ahead and create our first transfer target + */ + TransferTarget target = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password); + return target; + } + + /** + * Test the transfer method behaviour with respect to move and alien nodes. + * + * So we have Repository A transferring content and Repository B is the local repo that we + * move alien nodes in and out. + * + * Tree + *
+     *         B1
+     *    |          |         |
+     *    C2(p1)    C3(p2)     A4
+     *    |          
+     *    A5        
+     *    |
+     *    B6
+     * 
+ * + * Step 1: Tansfer in C's nodes to Repo B + * + * Step 2. Transfer in A's nodes to Repo B + * + * Setup tree above. Validat that A2 is child of C2 dest. + * A4 is a child of B1 + * + * Step 3. Move A5 from C2 to C3 via transfer. + * C2Dest should stop being invaded by A5, C3Dest should be invaded by A5. + * + * Step 4. Invade A5 by B6. Move from C3 to C2 via transfer. + * C2Dest should be invaded by A and B. + * C3Dest should not be invaded. + * + * Step 5. Move A5 to A4. + * A4 should be invaded by B due to B6 but not by A. + * C2Dest should not be invaded. + */ + public void testMultiRepoTransferMove() throws Exception + { + setDefaultRollback(false); + + final String localRepositoryId = descriptorService.getCurrentRepositoryDescriptor().getId(); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + String targetName = "testMultiRepoTransferMove"; + TransferTarget transferMe; + NodeRef S0NodeRef; + NodeRef A1NodeRef; + NodeRef B1NodeRef; + NodeRef C1NodeRef; + NodeRef C2NodeRef; + NodeRef C3NodeRef; + NodeRef A4NodeRef; + NodeRef A5NodeRef; + NodeRef B6NodeRef; + NodeRef C2DummyNodeRef; + NodeRef C3DummyNodeRef; + QName C2Path = QName.createQName("p2"); + QName C3Path= QName.createQName("p3"); + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + { + /** + * Node Source - located under guest home + */ + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + S0NodeRef = child.getChildRef(); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); + } + + { + // Node B1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); + B1NodeRef = child.getChildRef(); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); + } + + { + // Node C1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C1"), ContentModel.TYPE_FOLDER); + C1NodeRef = child.getChildRef(); + nodeService.setProperty(C1NodeRef, ContentModel.PROP_TITLE, "C1"); + nodeService.setProperty(C1NodeRef, ContentModel.PROP_NAME, "C1"); + } + + { + // Node C2 + ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); + C2NodeRef = child.getChildRef(); + nodeService.setProperty(C2NodeRef, ContentModel.PROP_TITLE, "C2"); + nodeService.setProperty(C2NodeRef, ContentModel.PROP_NAME, "C2"); + } + + { + // Node C3 + ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); + C3NodeRef = child.getChildRef(); + nodeService.setProperty(C3NodeRef, ContentModel.PROP_TITLE, "C3"); + nodeService.setProperty(C3NodeRef, ContentModel.PROP_NAME, "C3"); + } + + { + // Node C2 (Dummy) + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); + C2DummyNodeRef = child.getChildRef(); + nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_NAME, "C2 Dummy"); + } + + { + // Node C3 (Dummy) + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); + C3DummyNodeRef = child.getChildRef(); + nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_NAME, "C3 Dummy"); + } + + { + // Node A4 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C4"), ContentModel.TYPE_FOLDER); + A4NodeRef = child.getChildRef(); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, "A4"); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); + } + + { + // Node A5 + ChildAssociationRef child = nodeService.createNode(C2DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_FOLDER); + A5NodeRef = child.getChildRef(); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, "A5"); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - Map path from A1 to B1 (So transfer will transfer by path) + * - Map path from C1 to B1 + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map Project A to Project B + // Map Project C to Project B + pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); + pathMap.add(new Pair(nodeService.getPath(C1NodeRef), nodeService.getPath(B1NodeRef))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_C); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Step 1 + * Now transfer in C's nodes to Repo B + */ + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(C1NodeRef); + nodes.add(C2NodeRef); + nodes.add(C3NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + + // Check that C3 dest is a child of B1 + ChildAssociationRef C3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C3NodeRef)); + assertEquals("A3 dest is connected to the wrong node", C3Ref.getParentRef(), B1NodeRef); + ChildAssociationRef C2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C2NodeRef)); + assertEquals("A2 dest is connected to the wrong node", C2Ref.getParentRef(), B1NodeRef); + } + finally + { + endTransaction(); + } + + mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Step 2 + * Now transfer in A's nodes + * C2 (Dest) gets invaded by A4 + */ + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); + assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C2NodeRef)); + assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + + ChildAssociationRef A4Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A4NodeRef)); + assertEquals("A4 dest is connected to the wrong node", A4Ref.getParentRef(), B1NodeRef); + + } + finally + { + endTransaction(); + } + + /** + * Step 3 + * Now move A5 + * C3 (Dest) gets invaded by A5 + */ + startNewTransaction(); + try + { + nodeService.moveNode(A5NodeRef, C3DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C4")); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + + // Check that A4 dest is a child of C3Dest which is a child of B1 + ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); + assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C3NodeRef)); + assertTrue("A5 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("C2 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + /** + * Step 4 - multi invasion move via transfer service. + * Invade A5 by B6. + * Transfer from C3 back to C2. + */ + startNewTransaction(); + try + { + nodeService.moveNode(A5NodeRef, C2DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B6")); + + // Node B6 + ChildAssociationRef child = nodeService.createNode(testNodeFactory.getMappedNodeRef(A5NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("B6"), ContentModel.TYPE_FOLDER); + B6NodeRef = child.getChildRef(); + nodeService.setProperty(B6NodeRef, ContentModel.PROP_TITLE, "B6"); + nodeService.setProperty(B6NodeRef, ContentModel.PROP_NAME, "B6"); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + + // Check that A4 dest is a child of C2Dest which is a child of B1 + ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); + ChildAssociationRef B6Ref = nodeService.getPrimaryParent(B6NodeRef); + assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C2NodeRef)); + assertEquals("B6 connected to the wrong node", B6Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A5NodeRef)); + assertTrue("A5 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("C3 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + Listinvaders = (List)nodeService.getProperty(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.PROP_INVADED_BY); + assertTrue("invaders is too small", invaders.size() > 1); + assertTrue("invaders does not contain REPO A", invaders.contains(REPO_ID_A)); + assertTrue("invaders does not contain REPO B", invaders.contains(localRepositoryId)); + } + finally + { + endTransaction(); + } + + /** + * Step 5 + * Move + */ + startNewTransaction(); + try + { + nodeService.moveNode(A5NodeRef, A4NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5")); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + + // Check that A5dest is a child of A4Dest which is a child of B1 + ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); + assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(A4NodeRef)); + assertTrue("A4 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("A5 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A5NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("B6 dest is not invaded", nodeService.hasAspect(B6NodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("C2 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("C3 dest is still invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + + Listinvaders = (List)nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_INVADED_BY); + assertTrue("invaders is too big", invaders.size() < 2); + assertFalse("invaders contains REPO A", invaders.contains(REPO_ID_A)); + assertTrue("invaders does not contains REPO B", invaders.contains(REPO_ID_B)); + + } + finally + { + endTransaction(); + } + } + + /** + * Test the behaviour with regard to copying transferred nodes. + *

+ * Transfer node read only + *

+ * Copy transferred node. + *

+ * New node should not be locked and should not be transferred. + *

+ * This is a unit test so it does some shenanigans to send to the same instance of alfresco. + */ + public void testCopyTransferredNode() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + + /** + * Now go ahead and create our transfer target + */ + String targetName = "testCopyTransferredNode"; + TransferTarget transferMe; + NodeRef S0NodeRef; + NodeRef A1NodeRef; + NodeRef A2NodeRef; + NodeRef A3NodeRef; + NodeRef B1NodeRef; + NodeRef B2NodeRef; + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + /** + * Node Source - located under guest home + */ + { + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + S0NodeRef = child.getChildRef(); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); + } + + { + // Node A2 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2"), ContentModel.TYPE_FOLDER); + A2NodeRef = child.getChildRef(); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_TITLE, "A2"); + nodeService.setProperty(A2NodeRef, ContentModel.PROP_NAME, "A2"); + } + + { + // Node A3 + ChildAssociationRef child = nodeService.createNode(A2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A3"), ContentModel.TYPE_FOLDER); + A3NodeRef = child.getChildRef(); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_TITLE, "A3"); + nodeService.setProperty(A3NodeRef, ContentModel.PROP_NAME, "A3"); + } + + { + // Node B1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); + B1NodeRef = child.getChildRef(); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); + } + + { + // Node B2 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B2"), ContentModel.TYPE_FOLDER); + B2NodeRef = child.getChildRef(); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B2"); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B2"); + } + + + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - Map path from A1 to B1 (So transfer will transfer by path) + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + + // Map Project A to Project B + pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + + /** + * Step 1 + */ + logger.debug("First transfer - "); + startNewTransaction(); + try + { + /** + * Transfer our transfer target node + */ + { + TransferDefinition definition = new TransferDefinition(); + Setnodes = new HashSet(); + nodes.add(A2NodeRef); + nodes.add(A3NodeRef); + definition.setNodes(nodes); + definition.setReadOnly(true); + transferService.transfer(targetName, definition); + } + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + // Now validate that the target node exists with the correct permissions + NodeRef A2destNodeRef = testNodeFactory.getMappedNodeRef(A2NodeRef); + assertTrue("dest node ref does not exist", nodeService.exists(A2destNodeRef)); + + /** + * Copy the node A2 Dest + */ + NodeRef copiedNode = copyService.copy(A2destNodeRef, B2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2Copy")); + assertTrue("copied node does not exist", nodeService.exists(copiedNode)); + System.out.println("copied node is " + copiedNode); + assertFalse("copied node still has transferred aspect", nodeService.hasAspect(copiedNode, TransferModel.ASPECT_TRANSFERRED)); + assertNull("copied node still has from repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_FROM_REPOSITORY_ID)); + assertNull("copied node still has original repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_REPOSITORY_ID)); + Set aspects = nodeService.getAspects(copiedNode); + + /** + * Copy a chain of transferred nodes - well A2dest and A3dest + */ + copiedNode = copyService.copy(A2destNodeRef, B2NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A2Copy2"), true); + assertTrue("copied node does not exist", nodeService.exists(copiedNode)); + System.out.println("copied node is " + copiedNode); + assertFalse("copied node still has transferred aspect", nodeService.hasAspect(copiedNode, TransferModel.ASPECT_TRANSFERRED)); + assertNull("copied node still has from repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_FROM_REPOSITORY_ID)); + assertNull("copied node still has original repository id", nodeService.getProperty(copiedNode, TransferModel.PROP_REPOSITORY_ID)); + + List children = nodeService.getChildAssocs(copiedNode); + for(ChildAssociationRef child : children) + { + assertFalse("copied node still has transferred aspect", nodeService.hasAspect(child.getChildRef(), TransferModel.ASPECT_TRANSFERRED)); + assertNull("copied node still has from repository id", nodeService.getProperty(child.getChildRef(), TransferModel.PROP_FROM_REPOSITORY_ID)); + assertNull("copied node still has original repository id", nodeService.getProperty(child.getChildRef(), TransferModel.PROP_REPOSITORY_ID)); + } + } + finally + { + endTransaction(); + } + } + + + /** + * Test the behaviour with respect to copy of alien nodes. + * + * So we have Repository A transferring content and Repository B is the local repo that we + * copy alien nodes in and out. Copied nodes are not "transferred" so they change + * from being "from repository A" to "from the local repository". + * + * Tree + *

+     *         B1
+     *    |          |         |
+     *    C2(p1)    C3(p2)     A4
+     *    |          
+     *    A5        
+     *    |
+     *    B6
+     * 
+ * + * Step 1: Tansfer in C's nodes to Repo B + * + * Step 2. Transfer in A's nodes to Repo B + * + * Setup tree above. Validat that A2 is child of C2 dest. + * A4 is a child of B1 + * + * Step 3. Copy A5 from C2 to C3. + * C2Dest should still be invaded by A5 + * C3Dest should be invaded by A5(copy 1) which is now a "B" invader. + * + * Step 4. Copy A5 from C2 to A4. + * C2Dest should still be invaded by A5 + * A4Dest should be invaded by A5(copy 2) which is now a "B" invader. + * + * Step 5. Invade A5 dest with B6. + * Copy A5(Dest) to B1 (A5 Copy 3) + * B1 should not be invaded. + * A5 Copy 3 not invaded. + * B6 Copy not invaded. + * + * Step 6. Invade A5 dest with B6. + * Copy A5(Dest) to B1 (A5 Copy 3) with children + * B1 should not be invaded. + * A5 Copy 4 not invaded. + * B6 Copy not invaded. + * + */ + public void testCopyAlien() throws Exception + { + setDefaultRollback(false); + + String CONTENT_TITLE = "ContentTitle"; + String CONTENT_TITLE_UPDATED = "ContentTitleUpdated"; + Locale CONTENT_LOCALE = Locale.GERMAN; + String CONTENT_STRING = "Hello"; + + String targetName = "testCopyAlien"; + TransferTarget transferMe; + NodeRef S0NodeRef; + NodeRef A1NodeRef; + NodeRef B1NodeRef; + NodeRef C1NodeRef; + NodeRef C2NodeRef; + NodeRef C3NodeRef; + NodeRef A4NodeRef; + NodeRef A5NodeRef; + NodeRef B6NodeRef; + NodeRef C2DummyNodeRef; + NodeRef C3DummyNodeRef; + QName C2Path = QName.createQName("p2"); + QName C3Path= QName.createQName("p3"); + + final String localRepositoryId = descriptorService.getCurrentRepositoryDescriptor().getId(); + + startNewTransaction(); + try + { + /** + * Get guest home + */ + String guestHomeQuery = "/app:company_home/app:guest_home"; + ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery); + assertEquals("", 1, guestHomeResult.length()); + NodeRef guestHome = guestHomeResult.getNodeRef(0); + + { + /** + * Node Source - located under guest home + */ + String name = GUID.generate(); + ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_FOLDER); + S0NodeRef = child.getChildRef(); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(S0NodeRef, ContentModel.PROP_NAME, name); + } + + { + // Node A1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A1"), ContentModel.TYPE_FOLDER); + A1NodeRef = child.getChildRef(); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_TITLE, "A1"); + nodeService.setProperty(A1NodeRef, ContentModel.PROP_NAME, "A1"); + } + + { + // Node B1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("B1"), ContentModel.TYPE_FOLDER); + B1NodeRef = child.getChildRef(); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_TITLE, "B1"); + nodeService.setProperty(B1NodeRef, ContentModel.PROP_NAME, "B1"); + } + + { + // Node C1 + ChildAssociationRef child = nodeService.createNode(S0NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C1"), ContentModel.TYPE_FOLDER); + C1NodeRef = child.getChildRef(); + nodeService.setProperty(C1NodeRef, ContentModel.PROP_TITLE, "C1"); + nodeService.setProperty(C1NodeRef, ContentModel.PROP_NAME, "C1"); + } + + { + // Node C2 + ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); + C2NodeRef = child.getChildRef(); + nodeService.setProperty(C2NodeRef, ContentModel.PROP_TITLE, "C2"); + nodeService.setProperty(C2NodeRef, ContentModel.PROP_NAME, "C2"); + } + + { + // Node C3 + ChildAssociationRef child = nodeService.createNode(C1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); + C3NodeRef = child.getChildRef(); + nodeService.setProperty(C3NodeRef, ContentModel.PROP_TITLE, "C3"); + nodeService.setProperty(C3NodeRef, ContentModel.PROP_NAME, "C3"); + } + + { + // Node C2 (Dummy) + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C2Path, ContentModel.TYPE_FOLDER); + C2DummyNodeRef = child.getChildRef(); + nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C2DummyNodeRef, ContentModel.PROP_NAME, "C2 Dummy"); + } + + { + // Node C3 (Dummy) + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, C3Path, ContentModel.TYPE_FOLDER); + C3DummyNodeRef = child.getChildRef(); + nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE); + nodeService.setProperty(C3DummyNodeRef, ContentModel.PROP_NAME, "C3 Dummy"); + } + + { + // Node A4 + ChildAssociationRef child = nodeService.createNode(A1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("C4"), ContentModel.TYPE_FOLDER); + A4NodeRef = child.getChildRef(); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_TITLE, "A4"); + nodeService.setProperty(A4NodeRef, ContentModel.PROP_NAME, "A4"); + } + + { + // Node A5 + ChildAssociationRef child = nodeService.createNode(C2DummyNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5"), ContentModel.TYPE_FOLDER); + A5NodeRef = child.getChildRef(); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_TITLE, "A5"); + nodeService.setProperty(A5NodeRef, ContentModel.PROP_NAME, "A5"); + } + + // Create the transfer target if it does not already exist + if(!transferService.targetExists(targetName)) + { + transferMe = createTransferTarget(targetName); + } + else + { + transferMe = transferService.getTransferTarget(targetName); + } + } + finally + { + endTransaction(); + } + + /** + * For unit test + * - replace the HTTP transport with the in-process transport + * - Map path from A1 to B1 (So transfer will transfer by path) + * - Map path from C1 to B1 + */ + TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService); + transferServiceImpl.setTransmitter(transmitter); + UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory); + transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory); + List> pathMap = testNodeFactory.getPathMap(); + // Map Project A to Project B + // Map Project C to Project B + pathMap.add(new Pair(nodeService.getPath(A1NodeRef), nodeService.getPath(B1NodeRef))); + pathMap.add(new Pair(nodeService.getPath(C1NodeRef), nodeService.getPath(B1NodeRef))); + + DescriptorService mockedDescriptorService = getMockDescriptorService(REPO_ID_C); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Step 1 + * Now transfer in C's nodes to Repo B + */ + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(C1NodeRef); + nodes.add(C2NodeRef); + nodes.add(C3NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + + // Check that C3 dest is a child of B1 + ChildAssociationRef C3Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C3NodeRef)); + assertEquals("A3 dest is connected to the wrong node", C3Ref.getParentRef(), B1NodeRef); + ChildAssociationRef C2Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(C2NodeRef)); + assertEquals("A2 dest is connected to the wrong node", C2Ref.getParentRef(), B1NodeRef); + } + finally + { + endTransaction(); + } + + mockedDescriptorService = getMockDescriptorService(REPO_ID_A); + transferServiceImpl.setDescriptorService(mockedDescriptorService); + + /** + * Step 2 + * Now transfer in A's nodes + * C2 (Dest) gets invaded by A4 + */ + startNewTransaction(); + try + { + TransferDefinition definition = new TransferDefinition(); + Collection nodes = new ArrayList(); + nodes.add(A4NodeRef); + nodes.add(A5NodeRef); + definition.setNodes(nodes); + definition.setSync(true); + transferService.transfer(targetName, definition); + } + finally + { + endTransaction(); + } + + startNewTransaction(); + try + { + assertTrue("dest node A5 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A5NodeRef))); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + ChildAssociationRef A5Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A5NodeRef)); + assertEquals("A5 dest is connected to the wrong node", A5Ref.getParentRef(), testNodeFactory.getMappedNodeRef(C2NodeRef)); + assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + assertFalse("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + + ChildAssociationRef A4Ref = nodeService.getPrimaryParent(testNodeFactory.getMappedNodeRef(A4NodeRef)); + assertEquals("A4 dest is connected to the wrong node", A4Ref.getParentRef(), B1NodeRef); + + } + finally + { + endTransaction(); + } + + /** + * Step 3. Copy A5 from C2 to C3. + * C2Dest should still be invaded by A5 + * C3Dest should be invaded by A5(copy) which is now a "B/local" invader. + */ + startNewTransaction(); + try + { + NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), testNodeFactory.getMappedNodeRef(C3NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 1")); + assertTrue("dest node C3 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C3NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + + assertTrue("A5(copy 1) is not invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); + assertTrue("C3 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + + List C2invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.PROP_INVADED_BY); + List C3invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(C3NodeRef), TransferModel.PROP_INVADED_BY); + assertTrue("C3 invaders contains local repository Id", C3invaders.contains(localRepositoryId)); + assertFalse("C3 invaders contains REPO_ID_A", C3invaders.contains(REPO_ID_A)); + + assertFalse("C2 invaders contains local repository Id", C2invaders.contains(localRepositoryId)); + assertTrue("C2 invaders contains REPO_ID_A", C2invaders.contains(REPO_ID_A)); + + } + finally + { + endTransaction(); + } + + /** + * Step 4. Copy A5 from C2 to A4. + * C2Dest should still be invaded by A5 + * A4Dest should be invaded by A5(copy 2) which is now a "B" invader. + */ + startNewTransaction(); + try + { + NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), testNodeFactory.getMappedNodeRef(A4NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 2")); + assertTrue("dest node A4 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(A4NodeRef))); + assertTrue("dest node C2 does not exist", nodeService.exists(testNodeFactory.getMappedNodeRef(C2NodeRef))); + + assertTrue("A5(copy 2) is not invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); + assertTrue("A4 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.ASPECT_ALIEN)); + assertTrue("C2 dest is not invaded", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.ASPECT_ALIEN)); + + List C2invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(C2NodeRef), TransferModel.PROP_INVADED_BY); + List A4invaders = (List) nodeService.getProperty(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.PROP_INVADED_BY); + assertTrue("A4 invaders contains local repository Id", A4invaders.contains(localRepositoryId)); + + assertFalse("C2 invaders contains local repository Id", C2invaders.contains(localRepositoryId)); + assertTrue("C2 invaders contains REPO_ID_A", C2invaders.contains(REPO_ID_A)); + + } + finally + { + endTransaction(); + } + + /** + * Step 5. Invade A5 dest with B6. + * Copy A5(Dest) to B1 (A5 Copy 3) no children + * B1 should not be invaded. + * A5 Copy 3 not invaded. + * B6 Copy not invaded. + */ + startNewTransaction(); + try + { + ChildAssociationRef child = nodeService.createNode(testNodeFactory.getMappedNodeRef(A5NodeRef), ContentModel.ASSOC_CONTAINS, QName.createQName("B6"), ContentModel.TYPE_FOLDER); + B6NodeRef = child.getChildRef(); + nodeService.setProperty(B6NodeRef, ContentModel.PROP_TITLE, "B6"); + nodeService.setProperty(B6NodeRef, ContentModel.PROP_NAME, "B6"); + + assertTrue("A4 dest is not invaded prior to test - test error", nodeService.hasAspect(testNodeFactory.getMappedNodeRef(A4NodeRef), TransferModel.ASPECT_ALIEN)); + + NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), B1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 3")); + + assertFalse("B1 is invaded", nodeService.hasAspect(B1NodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("A5 copy 3 is invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); + } + finally + { + endTransaction(); + } + + /** + * Step 6. Invade A5 dest with B6. + * Copy A5(Dest) to B1 (A5 Copy 3) with children + * B1 should not be invaded. + * A5 Copy 4 not invaded. + * B6 Copy not invaded. + */ + startNewTransaction(); + try + { + assertFalse("B1 is invaded prior to test - test error", nodeService.hasAspect(B1NodeRef, TransferModel.ASPECT_ALIEN)); + + NodeRef copyRef = copyService.copy(testNodeFactory.getMappedNodeRef(A5NodeRef), B1NodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName("A5 Copy 4"), true); + assertFalse("B1 is invaded", nodeService.hasAspect(B1NodeRef, TransferModel.ASPECT_ALIEN)); + assertFalse("A5 copy 4 is invaded", nodeService.hasAspect(copyRef, TransferModel.ASPECT_ALIEN)); + + List refs = nodeService.getChildAssocs(copyRef); + + assertTrue("can't find child of A5 copy 4", refs.size() == 1); + + for(ChildAssociationRef ref : refs) + { + assertFalse("B6 copy is invaded", nodeService.hasAspect(ref.getChildRef(), TransferModel.ASPECT_ALIEN)); + } + } + finally + { + endTransaction(); + } + } // copy node + + + private void createUser(String userName, String password) + { + if (this.authenticationService.authenticationExists(userName) == false) + { + this.authenticationService.createAuthentication(userName, password.toCharArray()); + + PropertyMap ppOne = new PropertyMap(4); + ppOne.put(ContentModel.PROP_USERNAME, userName); + ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName"); + ppOne.put(ContentModel.PROP_LASTNAME, "lastName"); + ppOne.put(ContentModel.PROP_EMAIL, "email@email.com"); + ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle"); + + this.personService.createPerson(ppOne); + } + } + + private DescriptorService getMockDescriptorService(String repositoryId) + { + DescriptorService descriptorService = mock(DescriptorService.class); + Descriptor descriptor = mock(Descriptor.class); + + when(descriptor.getId()).thenReturn(repositoryId); + when(descriptorService.getCurrentRepositoryDescriptor()).thenReturn(descriptor); + + return descriptorService; + } +} diff --git a/source/java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java b/source/java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java index adf60ba017..d2fd0ee139 100644 --- a/source/java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java +++ b/source/java/org/alfresco/repo/transfer/UnitTestTransferManifestNodeFactory.java @@ -28,6 +28,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.transfer.manifest.TransferManifestNode; import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactory; import org.alfresco.repo.transfer.manifest.TransferManifestNormalNode; +import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.Path; @@ -93,6 +94,7 @@ public class UnitTestTransferManifestNodeFactory implements TransferManifestNode primaryParentAssoc.getQName(), mappedNodeRef, primaryParentAssoc.isPrimary(), primaryParentAssoc.getNthSibling())); + /** * Fiddle with the parent assocs */ @@ -143,6 +145,34 @@ public class UnitTestTransferManifestNodeFactory implements TransferManifestNode props.put(ContentModel.PROP_NODE_UUID, mappedNodeRef.getId()); } } + + /** + * Fiddle with the Peer Assocs property + */ + if (newNode instanceof TransferManifestNormalNode) + { + TransferManifestNormalNode normalNode = (TransferManifestNormalNode) newNode; + + List source = normalNode.getSourceAssocs(); + List target = normalNode.getTargetAssocs(); + + List mappedSourceAssocs = new ArrayList(); + List mappedTargetAssocs = new ArrayList(); + + for(AssociationRef ref :source) + { + mappedSourceAssocs.add(new AssociationRef(6L, getMappedNodeRef(ref.getSourceRef()), ref.getTypeQName(), getMappedNodeRef(ref.getTargetRef()))); + } + + for(AssociationRef ref: target) + { + mappedTargetAssocs.add(new AssociationRef(6L, getMappedNodeRef(ref.getSourceRef()), ref.getTypeQName(), getMappedNodeRef(ref.getTargetRef()))); + } + normalNode.setSourceAssocs(mappedSourceAssocs); + normalNode.setTargetAssocs(mappedTargetAssocs); + + + } return newNode; } diff --git a/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java b/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java index 89dda1aebe..7faeb61fa6 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowInterpreter.java @@ -40,11 +40,17 @@ import org.alfresco.service.cmr.avm.AVMNodeDescriptor; import org.alfresco.service.cmr.avm.AVMService; import org.alfresco.service.cmr.avmsync.AVMDifference; import org.alfresco.service.cmr.avmsync.AVMSyncService; +import org.alfresco.service.cmr.dictionary.AspectDefinition; +import org.alfresco.service.cmr.dictionary.ClassDefinition; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.dictionary.PropertyDefinition; +import org.alfresco.service.cmr.dictionary.TypeDefinition; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.workflow.WorkflowDefinition; import org.alfresco.service.cmr.workflow.WorkflowDeployment; @@ -81,6 +87,7 @@ public class WorkflowInterpreter extends BaseInterpreter private PersonService personService; private FileFolderService fileFolderService; private TenantService tenantService; + private DictionaryService dictionaryService; /** * Current context @@ -141,6 +148,14 @@ public class WorkflowInterpreter extends BaseInterpreter this.tenantService = tenantService; } + /** + * @param dictionaryService dictionaryService + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + /** * @param avmService The AVM Service */ @@ -879,7 +894,9 @@ public class WorkflowInterpreter extends BaseInterpreter { return "Workflow definition not selected.\n"; } + setupStartTaskParameters(currentWorkflowDef.getStartTaskDefinition().metadata, params); WorkflowPath path = workflowService.startWorkflow(currentWorkflowDef.getId(), params); + endStartTaskForPath(path); out.println("started workflow id: " + path.getInstance().getId() + " , def: " + path.getInstance().getDefinition().getTitle()); currentPath = path; out.print(interpretCommand("show transitions")); @@ -1251,4 +1268,73 @@ public class WorkflowInterpreter extends BaseInterpreter return currentWorkflowDef; } + private void setupStartTaskParameters(TypeDefinition typeDef, Map params) + { + // build a complete anonymous type for the start task + List aspects = typeDef.getDefaultAspects(); + List aspectNames = new ArrayList(aspects.size()); + getMandatoryAspects(typeDef, aspectNames); + ClassDefinition startTaskDef = dictionaryService.getAnonymousType(typeDef.getName(), aspectNames); + + // apply default values + Map propertyDefs = startTaskDef.getProperties(); + for (Map.Entry entry : propertyDefs.entrySet()) + { + String defaultValue = entry.getValue().getDefaultValue(); + + if (params.get(entry.getKey()) == null) + { + if (defaultValue != null) + { + params.put(entry.getKey(), (Serializable)DefaultTypeConverter.INSTANCE.convert(entry.getValue().getDataType(), defaultValue)); + } + } + else + { + params.put(entry.getKey(), (Serializable)DefaultTypeConverter.INSTANCE.convert(entry.getValue().getDataType(), params.get(entry.getKey()))); + } + } + + if (params.containsKey(WorkflowModel.ASSOC_ASSIGNEE)) + { + String value = (String)params.get(WorkflowModel.ASSOC_ASSIGNEE); + ArrayList assignees = new ArrayList(); + assignees.add(personService.getPerson(value)); + params.put(WorkflowModel.ASSOC_ASSIGNEE, assignees); + } + + params.put(WorkflowModel.ASSOC_PACKAGE, workflowService.createPackage(null)); + } + + private void getMandatoryAspects(ClassDefinition classDef, List aspects) + { + for (AspectDefinition aspect : classDef.getDefaultAspects()) + { + QName aspectName = aspect.getName(); + if (!aspects.contains(aspectName)) + { + aspects.add(aspect.getName()); + getMandatoryAspects(aspect, aspects); + } + } + } + + private void endStartTaskForPath(WorkflowPath path) + { + if (path != null) + { + List tasks = this.workflowService.getTasksForWorkflowPath(path.id); + if (tasks.size() == 1) + { + WorkflowTask startTask = tasks.get(0); + + if (startTask.state == WorkflowTaskState.IN_PROGRESS) + { + // end the start task to trigger the first 'proper' + // task in the workflow + this.workflowService.endTask(startTask.id, null); + } + } + } + } } \ No newline at end of file diff --git a/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java b/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java index c9ea8abc08..90c9970fbc 100644 --- a/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java +++ b/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java @@ -672,7 +672,7 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest { // submit the changes sbService.submitWebApp(sbStoreId, defaultWebApp, "some updates by "+user, "some updates by "+user); - + snapCnt += (canUpdateExisting || canDeleteExisting) ? (1):(0); pollForSnapshotCount(stagingStoreId, snapCnt); diff --git a/source/java/org/apache/lucene/index/TermInfosReader.java b/source/java/org/apache/lucene/index/TermInfosReader.java new file mode 100644 index 0000000000..1178456910 --- /dev/null +++ b/source/java/org/apache/lucene/index/TermInfosReader.java @@ -0,0 +1,351 @@ +package org.apache.lucene.index; + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.BufferedIndexInput; +import org.apache.lucene.util.cache.Cache; +import org.apache.lucene.util.cache.SimpleLRUCache; +import org.apache.lucene.util.CloseableThreadLocal; + +/** This stores a monotonically increasing set of pairs in a + * Directory. Pairs are accessed either by Term or by ordinal position the + * set. */ + +final class TermInfosReader { + private Directory directory; + private String segment; + private FieldInfos fieldInfos; + + private CloseableThreadLocal threadResources = new CloseableThreadLocal(); + private SegmentTermEnum origEnum; + private long size; + + private Term[] indexTerms = null; + private ReentrantReadWriteLock indexTermsLock = new ReentrantReadWriteLock(); + private TermInfo[] indexInfos; + private long[] indexPointers; + + private SegmentTermEnum indexEnum; + + private int indexDivisor = 1; + private int totalIndexInterval; + + private final static int DEFAULT_CACHE_SIZE = 1024; + + /** + * Per-thread resources managed by ThreadLocal + */ + private static final class ThreadResources { + SegmentTermEnum termEnum; + + // Used for caching the least recently looked-up Terms + Cache termInfoCache; + } + + TermInfosReader(Directory dir, String seg, FieldInfos fis) + throws CorruptIndexException, IOException { + this(dir, seg, fis, BufferedIndexInput.BUFFER_SIZE); + } + + TermInfosReader(Directory dir, String seg, FieldInfos fis, int readBufferSize) + throws CorruptIndexException, IOException { + boolean success = false; + + try { + directory = dir; + segment = seg; + fieldInfos = fis; + + origEnum = new SegmentTermEnum(directory.openInput(segment + "." + IndexFileNames.TERMS_EXTENSION, + readBufferSize), fieldInfos, false); + size = origEnum.size; + totalIndexInterval = origEnum.indexInterval; + + indexEnum = new SegmentTermEnum(directory.openInput(segment + "." + IndexFileNames.TERMS_INDEX_EXTENSION, + readBufferSize), fieldInfos, true); + + success = true; + } finally { + // With lock-less commits, it's entirely possible (and + // fine) to hit a FileNotFound exception above. In + // this case, we want to explicitly close any subset + // of things that were opened so that we don't have to + // wait for a GC to do so. + if (!success) { + close(); + } + } + } + + public int getSkipInterval() { + return origEnum.skipInterval; + } + + public int getMaxSkipLevels() { + return origEnum.maxSkipLevels; + } + + /** + *

Sets the indexDivisor, which subsamples the number + * of indexed terms loaded into memory. This has a + * similar effect as {@link + * IndexWriter#setTermIndexInterval} except that setting + * must be done at indexing time while this setting can be + * set per reader. When set to N, then one in every + * N*termIndexInterval terms in the index is loaded into + * memory. By setting this to a value > 1 you can reduce + * memory usage, at the expense of higher latency when + * loading a TermInfo. The default value is 1.

+ * + * NOTE: you must call this before the term + * index is loaded. If the index is already loaded, + * an IllegalStateException is thrown. + * + + @throws IllegalStateException if the term index has + * already been loaded into memory. + */ + public void setIndexDivisor(int indexDivisor) throws IllegalStateException { + if (indexDivisor < 1) + throw new IllegalArgumentException("indexDivisor must be > 0: got " + indexDivisor); + + if (indexTerms != null) + throw new IllegalStateException("index terms are already loaded"); + + this.indexDivisor = indexDivisor; + totalIndexInterval = origEnum.indexInterval * indexDivisor; + } + + /** Returns the indexDivisor. + * @see #setIndexDivisor + */ + public int getIndexDivisor() { + return indexDivisor; + } + + final void close() throws IOException { + if (origEnum != null) + origEnum.close(); + if (indexEnum != null) + indexEnum.close(); + threadResources.close(); + } + + /** Returns the number of term/value pairs in the set. */ + final long size() { + return size; + } + + private ThreadResources getThreadResources() { + ThreadResources resources = (ThreadResources)threadResources.get(); + if (resources == null) { + resources = new ThreadResources(); + resources.termEnum = terms(); + // Cache does not have to be thread-safe, it is only used by one thread at the same time + resources.termInfoCache = new SimpleLRUCache(DEFAULT_CACHE_SIZE); + threadResources.set(resources); + } + return resources; + } + + private void ensureIndexIsRead() throws IOException { + indexTermsLock.readLock().lock(); + try { + if (indexTerms != null) { // index already read + return; // do nothing + } + } + finally { + indexTermsLock.readLock().unlock(); + } + indexTermsLock.writeLock().lock(); + try { + if (indexTerms != null) { + return; + } + int indexSize = 1+((int)indexEnum.size-1)/indexDivisor; // otherwise read index + + indexTerms = new Term[indexSize]; + indexInfos = new TermInfo[indexSize]; + indexPointers = new long[indexSize]; + + for (int i = 0; indexEnum.next(); i++) { + indexTerms[i] = indexEnum.term(); + indexInfos[i] = indexEnum.termInfo(); + indexPointers[i] = indexEnum.indexPointer; + + for (int j = 1; j < indexDivisor; j++) + if (!indexEnum.next()) + break; + } + } finally { + if (indexEnum != null) { + indexEnum.close(); + indexEnum = null; + } + indexTermsLock.writeLock().unlock(); + } + } + + /** Returns the offset of the greatest index entry which is less than or equal to term.*/ + private final int getIndexOffset(Term term) { + int lo = 0; // binary search indexTerms[] + int hi = indexTerms.length - 1; + + while (hi >= lo) { + int mid = (lo + hi) >>> 1; + int delta = term.compareTo(indexTerms[mid]); + if (delta < 0) + hi = mid - 1; + else if (delta > 0) + lo = mid + 1; + else + return mid; + } + return hi; + } + + private final void seekEnum(SegmentTermEnum enumerator, int indexOffset) throws IOException { + enumerator.seek(indexPointers[indexOffset], + (indexOffset * totalIndexInterval) - 1, + indexTerms[indexOffset], indexInfos[indexOffset]); + } + + /** Returns the TermInfo for a Term in the set, or null. */ + TermInfo get(Term term) throws IOException { + return get(term, true); + } + + /** Returns the TermInfo for a Term in the set, or null. */ + private TermInfo get(Term term, boolean useCache) throws IOException { + if (size == 0) return null; + + ensureIndexIsRead(); + + TermInfo ti; + ThreadResources resources = getThreadResources(); + Cache cache = null; + + if (useCache) { + cache = resources.termInfoCache; + // check the cache first if the term was recently looked up + ti = (TermInfo) cache.get(term); + if (ti != null) { + return ti; + } + } + + // optimize sequential access: first try scanning cached enum w/o seeking + SegmentTermEnum enumerator = resources.termEnum; + if (enumerator.term() != null // term is at or past current + && ((enumerator.prev() != null && term.compareTo(enumerator.prev())> 0) + || term.compareTo(enumerator.term()) >= 0)) { + int enumOffset = (int)(enumerator.position/totalIndexInterval)+1; + if (indexTerms.length == enumOffset // but before end of block + || term.compareTo(indexTerms[enumOffset]) < 0) { + // no need to seek + + int numScans = enumerator.scanTo(term); + if (enumerator.term() != null && term.compareTo(enumerator.term()) == 0) { + ti = enumerator.termInfo(); + if (cache != null && numScans > 1) { + // we only want to put this TermInfo into the cache if + // scanEnum skipped more than one dictionary entry. + // This prevents RangeQueries or WildcardQueries to + // wipe out the cache when they iterate over a large numbers + // of terms in order + cache.put(term, ti); + } + } else { + ti = null; + } + + return ti; + } + } + + // random-access: must seek + seekEnum(enumerator, getIndexOffset(term)); + enumerator.scanTo(term); + if (enumerator.term() != null && term.compareTo(enumerator.term()) == 0) { + ti = enumerator.termInfo(); + if (cache != null) { + cache.put(term, ti); + } + } else { + ti = null; + } + return ti; + } + + /** Returns the nth term in the set. */ + final Term get(int position) throws IOException { + if (size == 0) return null; + + SegmentTermEnum enumerator = getThreadResources().termEnum; + if (enumerator != null && enumerator.term() != null && + position >= enumerator.position && + position < (enumerator.position + totalIndexInterval)) + return scanEnum(enumerator, position); // can avoid seek + + seekEnum(enumerator, position/totalIndexInterval); // must seek + return scanEnum(enumerator, position); + } + + private final Term scanEnum(SegmentTermEnum enumerator, int position) throws IOException { + while(enumerator.position < position) + if (!enumerator.next()) + return null; + + return enumerator.term(); + } + + /** Returns the position of a Term in the set or -1. */ + final long getPosition(Term term) throws IOException { + if (size == 0) return -1; + + ensureIndexIsRead(); + int indexOffset = getIndexOffset(term); + + SegmentTermEnum enumerator = getThreadResources().termEnum; + seekEnum(enumerator, indexOffset); + + while(term.compareTo(enumerator.term()) > 0 && enumerator.next()) {} + + if (term.compareTo(enumerator.term()) == 0) + return enumerator.position; + else + return -1; + } + + /** Returns an enumeration of all the Terms and TermInfos in the set. */ + public SegmentTermEnum terms() { + return (SegmentTermEnum)origEnum.clone(); + } + + /** Returns an enumeration of terms starting at or after the named term. */ + public SegmentTermEnum terms(Term term) throws IOException { + // don't use the cache in this call because we want to reposition the + // enumeration + get(term, false); + return (SegmentTermEnum)getThreadResources().termEnum.clone(); + } +} diff --git a/source/java/org/apache/lucene/store/FSDirectory.java b/source/java/org/apache/lucene/store/FSDirectory.java index 8cc3128cc7..cd6ac6fb61 100644 --- a/source/java/org/apache/lucene/store/FSDirectory.java +++ b/source/java/org/apache/lucene/store/FSDirectory.java @@ -19,6 +19,7 @@ package org.apache.lucene.store; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; @@ -26,10 +27,10 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.Map; +import java.util.TreeMap; +import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.lucene.index.IndexFileNameFilter; - -// Used only for WRITE_LOCK_NAME in deprecated create=true case: import org.apache.lucene.index.IndexWriter; /** @@ -541,23 +542,71 @@ public class FSDirectory extends Directory { protected static class FSIndexInput extends BufferedIndexInput { - protected static class Descriptor extends RandomAccessFile { + protected static class Descriptor implements Cloneable{ // remember if the file is open, so that we don't try to close it // more than once - protected volatile boolean isOpen; - long position; + private boolean isOpen; final long length; - + final Map fileMap = new TreeMap(); + final File file; + final String mode; + final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + public Descriptor(File file, String mode) throws IOException { - super(file, mode); + this.file = file; + this.mode = mode; isOpen=true; - length=length(); + RandomAccessFile raf = new RandomAccessFile(file, mode); + length=raf.length(); + fileMap.put(Thread.currentThread().getName(), raf); } - + + private RandomAccessFile getFile() { + String threadKey = Thread.currentThread().getName(); + lock.readLock().lock(); + RandomAccessFile file = fileMap.get(threadKey); + if (file == null) { + lock.readLock().unlock(); + lock.writeLock().lock(); + try { + file = fileMap.get(threadKey); + if (file == null) { + file = new RandomAccessFile(this.file, mode); + fileMap.put(threadKey, file); + } + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } finally { + lock.writeLock().unlock(); + } + } else { + lock.readLock().unlock(); + } + return file; + } + public void close() throws IOException { + lock.readLock().lock(); if (isOpen) { - isOpen=false; - super.close(); + lock.readLock().unlock(); + lock.writeLock().lock(); + try { + if (isOpen) { + for (RandomAccessFile file : fileMap.values()) + { + file.close(); + } + fileMap.clear(); + isOpen=false; + } + } + finally + { + lock.writeLock().unlock(); + } + } + else { + lock.readLock().unlock(); } } @@ -585,21 +634,15 @@ public class FSDirectory extends Directory { /** IndexInput methods */ protected void readInternal(byte[] b, int offset, int len) throws IOException { - synchronized (file) { - long position = getFilePointer(); - if (position != file.position) { - file.seek(position); - file.position = position; - } - int total = 0; - do { - int i = file.read(b, offset+total, len-total); - if (i == -1) - throw new IOException("read past EOF"); - file.position += i; - total += i; - } while (total < len); - } + int total = 0; + do { + RandomAccessFile raf = file.getFile(); + raf.seek(getFilePointer()); + int i = raf.read(b, offset+total, len-total); + if (i == -1) + throw new IOException("read past EOF"); + total += i; + } while (total < len); } public void close() throws IOException { @@ -624,7 +667,7 @@ public class FSDirectory extends Directory { * file descriptor is valid. */ boolean isFDValid() throws IOException { - return file.getFD().valid(); + return file.getFile().getFD().valid(); } }