diff --git a/source/java/org/alfresco/repo/model/ml/MultilingualContentServiceImpl.java b/source/java/org/alfresco/repo/model/ml/MultilingualContentServiceImpl.java index d39d4b004f..ea464f1f6b 100644 --- a/source/java/org/alfresco/repo/model/ml/MultilingualContentServiceImpl.java +++ b/source/java/org/alfresco/repo/model/ml/MultilingualContentServiceImpl.java @@ -37,6 +37,7 @@ import javax.transaction.SystemException; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.i18n.I18NUtil; import org.alfresco.model.ContentModel; +import org.alfresco.repo.node.MLPropertyInterceptor; import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.service.cmr.ml.ContentFilterLanguagesService; import org.alfresco.service.cmr.ml.MultilingualContentService; @@ -790,6 +791,9 @@ public class MultilingualContentServiceImpl implements MultilingualContentServic */ public NodeRef copyTranslationContainer(NodeRef mlContainerNodeRef, NodeRef newParentRef, String prefixName) throws Exception { + // There is no need for the properties interceptor here + boolean wasMLAware = MLPropertyInterceptor.setMLAware(true); + if(!ContentModel.TYPE_MULTILINGUAL_CONTAINER.equals(nodeService.getType(mlContainerNodeRef))) { throw new IllegalArgumentException( @@ -863,6 +867,10 @@ public class MultilingualContentServiceImpl implements MultilingualContentServic copyNodeRef, ContentModel.ASSOC_MULTILINGUAL_CHILD, QNAME_ML_TRANSLATION); + + // Add the ML aspects back + nodeService.addAspect(translationNodeRef, ContentModel.ASPECT_MULTILINGUAL_DOCUMENT, null); + nodeService.addAspect(translationNodeRef, ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION, null); } finally { @@ -887,6 +895,9 @@ public class MultilingualContentServiceImpl implements MultilingualContentServic } } + // The rest of the transaction can have properties modified + MLPropertyInterceptor.setMLAware(wasMLAware); + if (logger.isDebugEnabled()) { logger.debug("MLContainer copied: \n" + diff --git a/source/java/org/alfresco/repo/node/MLPropertyInterceptor.java b/source/java/org/alfresco/repo/node/MLPropertyInterceptor.java index 0fe9151467..67e8a51998 100644 --- a/source/java/org/alfresco/repo/node/MLPropertyInterceptor.java +++ b/source/java/org/alfresco/repo/node/MLPropertyInterceptor.java @@ -88,10 +88,14 @@ public class MLPropertyInterceptor implements MethodInterceptor * * @param mlAwareVal true if the current thread is able to handle * {@link MLText d:mltext} property types, otherwise false. + * @return + * true if the current transaction is ML aware */ - static public void setMLAware(boolean mlAwareVal) + static public boolean setMLAware(boolean mlAwareVal) { - mlAware.set(new Boolean(mlAwareVal)); + boolean wasMLAware = isMLAware(); + mlAware.set(Boolean.valueOf(mlAwareVal)); + return wasMLAware; } /**