diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml
index de52573612..5351d54630 100644
--- a/config/alfresco/core-services-context.xml
+++ b/config/alfresco/core-services-context.xml
@@ -1204,10 +1204,9 @@
-
+
-
diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java
index 0ce6b7fd51..0fdf3a597f 100644
--- a/source/java/org/alfresco/repo/copy/CopyServiceImpl.java
+++ b/source/java/org/alfresco/repo/copy/CopyServiceImpl.java
@@ -773,7 +773,7 @@ public class CopyServiceImpl implements CopyService
{
// The first call will fail permissions, so there is no point doing permission checks with
// the other calls
- Map sourceNodeProperties = nodeService.getProperties(sourceNodeRef);
+ Map sourceNodeProperties = internalNodeService.getProperties(sourceNodeRef);
QName sourceNodeTypeQName = internalNodeService.getType(sourceNodeRef);
Set sourceNodeAspectQNames = internalNodeService.getAspects(sourceNodeRef);
diff --git a/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java b/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java
index 7c681a28d9..e595337b12 100644
--- a/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java
+++ b/source/java/org/alfresco/repo/copy/CopyServiceImplTest.java
@@ -21,6 +21,7 @@ package org.alfresco.repo.copy;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import org.alfresco.model.ContentModel;
@@ -48,6 +49,7 @@ 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.MLText;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
@@ -59,9 +61,10 @@ import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern;
import org.alfresco.util.BaseSpringTest;
import org.alfresco.util.PropertyMap;
+import org.springframework.extensions.surf.util.I18NUtil;
/**
- * Node operations service unit tests
+ * Unit tests for copy service
*
* @author Roy Wetherall
*/
@@ -716,6 +719,61 @@ public class CopyServiceImplTest extends BaseSpringTest
assertEquals(copyQName, this.nodeService.getPrimaryParent(copy).getQName());
}
+
+ /**
+ * https://issues.alfresco.com/jira/browse/ALF-3119
+ *
+ * Test copying of MLText values.
+ */
+ public void testCopyMLText()
+ {
+ // Create a folder and content node
+ Map propsFolder = new HashMap(1);
+ propsFolder.put(ContentModel.PROP_NAME, "tempFolder");
+ NodeRef folderNode = this.nodeService.createNode(this.rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "tempFolder"), ContentModel.TYPE_FOLDER, propsFolder).getChildRef();
+
+ Map props = new HashMap(1);
+ props.put(ContentModel.PROP_NAME, "myDoc.txt");
+
+ String FRENCH_DESCRIPTION = "french description";
+ String GERMAN_DESCRIPTION = "german description";
+ String ITALY_DESCRIPTION = "italy description";
+ String DEFAULT_DESCRIPTION = "default description";
+ MLText description = new MLText();
+ description.addValue(Locale.getDefault(), DEFAULT_DESCRIPTION);
+ description.addValue(Locale.FRANCE, FRENCH_DESCRIPTION);
+ description.addValue(Locale.GERMAN, GERMAN_DESCRIPTION);
+ description.addValue(Locale.ITALY, ITALY_DESCRIPTION);
+ props.put(ContentModel.PROP_DESCRIPTION, description);
+
+ NodeRef contentNode = this.nodeService.createNode(folderNode, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myDoc.txt"), ContentModel.TYPE_CONTENT, props).getChildRef();
+
+ NodeRef copy = this.copyService.copyAndRename(contentNode, folderNode, ContentModel.ASSOC_CONTAINS, null, false);
+ assertEquals("Copy of myDoc.txt", this.nodeService.getProperty(copy, ContentModel.PROP_NAME));
+ QName copyQName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "Copy of myDoc.txt");
+ assertEquals(copyQName, this.nodeService.getPrimaryParent(copy).getQName());
+
+ // Test uses DB Node Service.
+ Serializable desc = nodeService.getProperty(copy, ContentModel.PROP_DESCRIPTION);
+ if(desc instanceof MLText)
+ {
+ // Using a node service without a MLProperty interceptor
+ MLText value = (MLText)desc;
+ assertEquals("French description is wrong", FRENCH_DESCRIPTION, value.get(Locale.FRANCE));
+ assertEquals("German description is wrong", GERMAN_DESCRIPTION, value.get(Locale.GERMAN));
+ }
+ else
+ {
+ I18NUtil.setLocale(Locale.FRANCE);
+ assertEquals("French description is wrong", FRENCH_DESCRIPTION, nodeService.getProperty(copy, ContentModel.PROP_DESCRIPTION));
+
+ I18NUtil.setLocale(Locale.GERMAN);
+ assertEquals("German description is wrong", GERMAN_DESCRIPTION, nodeService.getProperty(copy, ContentModel.PROP_DESCRIPTION));
+ }
+ }
+
+
+
/**
* Check that the copied node contains the state we are expecting
*