diff --git a/config/alfresco/thumbnail-service-context.xml b/config/alfresco/thumbnail-service-context.xml
index 61c02df622..a1d65beac1 100644
--- a/config/alfresco/thumbnail-service-context.xml
+++ b/config/alfresco/thumbnail-service-context.xml
@@ -39,10 +39,7 @@
-
-
-
diff --git a/source/java/org/alfresco/repo/action/ActionImpl.java b/source/java/org/alfresco/repo/action/ActionImpl.java
index da1b70c221..d8d8e5d337 100644
--- a/source/java/org/alfresco/repo/action/ActionImpl.java
+++ b/source/java/org/alfresco/repo/action/ActionImpl.java
@@ -35,7 +35,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
*
* @author Roy Wetherall
*/
-public class ActionImpl extends ParameterizedItemImpl implements Serializable, Action
+public class ActionImpl extends ParameterizedItemImpl implements Action
{
/**
* Serial version UID
@@ -432,4 +432,10 @@ public class ActionImpl extends ParameterizedItemImpl implements Serializable, A
{
this.nodeRef = nodeRef;
}
+
+ public void addParameterValues(Map values)
+ {
+ getParameterValues().putAll(values);
+ }
+
}
diff --git a/source/java/org/alfresco/repo/rendition/AllRenditionTests.java b/source/java/org/alfresco/repo/rendition/AllRenditionTests.java
index fd6d779f9e..f9c31a40e0 100644
--- a/source/java/org/alfresco/repo/rendition/AllRenditionTests.java
+++ b/source/java/org/alfresco/repo/rendition/AllRenditionTests.java
@@ -18,6 +18,7 @@
*/
package org.alfresco.repo.rendition;
+import org.alfresco.repo.rendition.executer.AbstractRenderingEngineTest;
import org.alfresco.repo.thumbnail.ThumbnailServiceImplParameterTest;
import org.alfresco.repo.thumbnail.ThumbnailServiceImplTest;
import org.junit.runner.RunWith;
@@ -33,6 +34,7 @@ import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
RenditionServiceImplTest.class,
+ AbstractRenderingEngineTest.class,
ThumbnailServiceImplParameterTest.class,
ThumbnailServiceImplTest.class,
StandardRenditionLocationResolverTest.class,
diff --git a/source/java/org/alfresco/repo/rendition/PerformRenditionActionExecuter.java b/source/java/org/alfresco/repo/rendition/PerformRenditionActionExecuter.java
index 94bc09818f..71714bb9be 100644
--- a/source/java/org/alfresco/repo/rendition/PerformRenditionActionExecuter.java
+++ b/source/java/org/alfresco/repo/rendition/PerformRenditionActionExecuter.java
@@ -492,6 +492,8 @@ public class PerformRenditionActionExecuter extends ActionExecuterAbstractBase
log.debug(msg.toString());
}
+ QName type = nodeService.getType(sourceNode);
+ nodeService.setType(targetNode, type);
Map newProps = nodeService.getProperties(sourceNode);
for (QName propKey : unchangedProperties)
{
diff --git a/source/java/org/alfresco/repo/rendition/RenditionDefinitionImpl.java b/source/java/org/alfresco/repo/rendition/RenditionDefinitionImpl.java
index c48fbccf6c..a0c4002b8f 100644
--- a/source/java/org/alfresco/repo/rendition/RenditionDefinitionImpl.java
+++ b/source/java/org/alfresco/repo/rendition/RenditionDefinitionImpl.java
@@ -19,6 +19,9 @@
package org.alfresco.repo.rendition;
+import java.io.Serializable;
+import java.util.Map;
+
import org.alfresco.repo.action.ActionImpl;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.rendition.RenderCallback;
@@ -33,7 +36,6 @@ import org.alfresco.service.namespace.QName;
*/
public class RenditionDefinitionImpl extends ActionImpl implements RenditionDefinition
{
-
/**
* Serial version UID
*/
@@ -45,9 +47,12 @@ public class RenditionDefinitionImpl extends ActionImpl implements RenditionDefi
private RenderCallback renderCallback;
/**
- * @param id the action id
- * @param renditionName a unique name for the rendering action.
- * @param renderingEngineName the name of the rendering action definition
+ * @param id
+ * the action id
+ * @param renditionName
+ * a unique name for the rendering action.
+ * @param renderingEngineName
+ * the name of the rendering action definition
*/
public RenditionDefinitionImpl(String id, QName renditionName, String renderingEngineName)
{
@@ -114,7 +119,10 @@ public class RenditionDefinitionImpl extends ActionImpl implements RenditionDefi
/*
* (non-Javadoc)
- * @see org.alfresco.service.cmr.rendition.RenditionDefinition#setCallback(org.alfresco.service.cmr.rendition.RenderCallback)
+ *
+ * @see
+ * org.alfresco.service.cmr.rendition.RenditionDefinition#setCallback(org
+ * .alfresco.service.cmr.rendition.RenderCallback)
*/
public void setCallback(RenderCallback callback)
{
@@ -123,7 +131,10 @@ public class RenditionDefinitionImpl extends ActionImpl implements RenditionDefi
/*
* (non-Javadoc)
- * @see org.alfresco.service.cmr.rendition.RenditionDefinition#setCallback(org.alfresco.service.cmr.rendition.RenderCallback)
+ *
+ * @see
+ * org.alfresco.service.cmr.rendition.RenditionDefinition#setCallback(org
+ * .alfresco.service.cmr.rendition.RenderCallback)
*/
public RenderCallback getCallback()
{
diff --git a/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngine.java b/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngine.java
index b1de310959..a4eb723242 100644
--- a/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngine.java
+++ b/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngine.java
@@ -16,7 +16,6 @@
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see .
*/
-
package org.alfresco.repo.rendition.executer;
import static org.alfresco.service.cmr.rendition.RenditionService.*;
@@ -326,7 +325,7 @@ public abstract class AbstractRenderingEngine extends ActionExecuterAbstractBase
* @param renditionDefinition
* @return
*/
- public QName getRenditionNodeType(RenditionDefinition renditionDefinition)
+ private QName getRenditionNodeType(RenditionDefinition renditionDefinition)
{
return getParamWithDefault(PARAM_RENDITION_NODETYPE, defaultRenditionNodeType, renditionDefinition);
}
@@ -378,7 +377,7 @@ public abstract class AbstractRenderingEngine extends ActionExecuterAbstractBase
// The ThumbnailService puts a cm:name property on its thumbnail nodes.
Map nodeProps = new HashMap();
nodeProps.put(ContentModel.PROP_NAME, renditionName.getLocalName());
- nodeProps.put(ContentModel.PROP_CONTENT_PROPERTY_NAME, getDefaultRenditionContentProp());
+ nodeProps.put(ContentModel.PROP_CONTENT_PROPERTY_NAME, getRenditionContentProp(renditionDefinition));
QName assocName = QName.createQName(NamespaceService.RENDITION_MODEL_1_0_URI, GUID.generate());
NodeRef parentNode = renditionDefinition.getRenditionParent();
QName assocType = renditionDefinition.getRenditionAssociationType();
@@ -387,6 +386,11 @@ public abstract class AbstractRenderingEngine extends ActionExecuterAbstractBase
return childAssoc;
}
+ private Serializable getRenditionContentProp(RenditionDefinition renditionDefinition)
+ {
+ return getParamWithDefault(PARAM_TARGET_CONTENT_PROPERTY, getDefaultRenditionContentProp(), renditionDefinition);
+ }
+
/**
* Gets the value for the named parameter. Checks the type of the parameter
* is correct and throws a {@link RenditionServiceException} if it isn't.
diff --git a/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngineTest.java b/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngineTest.java
new file mode 100644
index 0000000000..9a8c08bbe1
--- /dev/null
+++ b/source/java/org/alfresco/repo/rendition/executer/AbstractRenderingEngineTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.rendition.executer;
+
+import static org.mockito.Mockito.*;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.repo.action.executer.ActionExecuter;
+import org.alfresco.repo.rendition.RenditionDefinitionImpl;
+import org.alfresco.repo.rendition.executer.AbstractRenderingEngine.RenderingContext;
+import org.alfresco.service.cmr.rendition.RenditionDefinition;
+import org.alfresco.service.cmr.rendition.RenditionService;
+import org.alfresco.service.cmr.repository.ChildAssociationRef;
+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.namespace.QName;
+import org.mockito.ArgumentCaptor;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+/**
+ * @author Nick Smith
+ */
+public class AbstractRenderingEngineTest extends TestCase
+{
+ private ContentService contentService;
+ private NodeService nodeService;
+ private TestRenderingEngine engine;
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ this.contentService = mock(ContentService.class);
+ NodeService nodeService1 = makeNodeService();
+ this.nodeService = nodeService1;
+ engine = new TestRenderingEngine();
+ engine.setContentService(contentService);
+ engine.setNodeService(nodeService);
+ }
+
+ /**
+ * Creates a mock node service which fails with a helpful message by default if createNode is called.
+ * @return
+ */
+ private NodeService makeNodeService()
+ {
+ NodeService nodeService1 = mock(NodeService.class);
+ return nodeService1;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void testCreateRenditionNodeAssoc() throws Exception
+ {
+ NodeRef source = new NodeRef("http://test/sourceId");
+ when(nodeService.exists(source)).thenReturn(true);
+
+ QName assocType = ContentModel.ASSOC_CONTAINS;
+ QName assocName = QName.createQName("url", "renditionName");
+ QName nodeType = ContentModel.TYPE_CONTENT;
+ ChildAssociationRef renditionAssoc = mock(ChildAssociationRef.class);
+
+ // Set up the rendition definition.
+ String id = "definitionId";
+ RenditionDefinition definition = new RenditionDefinitionImpl(id, assocName, TestRenderingEngine.NAME);
+ definition.setRenditionAssociationType(assocType);
+ definition.setRenditionParent(source);
+
+ // Stub the createNode() method to return renditionAssoc.
+ when(nodeService
+ .createNode(eq(source), eq(assocType), any(QName.class), any(QName.class), anyMap()))
+ .thenReturn(renditionAssoc);
+ engine.execute(definition, source);
+
+ // Check the createNode method was called with the correct parameters.
+ // Check the nodeType defaults to cm:content.
+ ArgumentCaptor