mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Fix ALF-2765: Renditions created via 3.3 RenditionService are not exposed via OpenCMIS rendition API
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@20166 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -19,7 +19,6 @@
|
||||
package org.alfresco.cmis.renditions;
|
||||
|
||||
import org.alfresco.cmis.CMISRendition;
|
||||
import org.alfresco.cmis.CMISRenditionKind;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
|
||||
/**
|
||||
@@ -32,7 +31,7 @@ public class CMISRenditionImpl implements CMISRendition
|
||||
private NodeRef nodeRef;
|
||||
private String streamId;
|
||||
private String mimeType;
|
||||
private CMISRenditionKind kind;
|
||||
private String kind;
|
||||
private Integer height;
|
||||
private Integer width;
|
||||
private String title;
|
||||
@@ -52,7 +51,7 @@ public class CMISRenditionImpl implements CMISRendition
|
||||
* @param length the length of the rendition stream in bytes
|
||||
* @param renditionDocumentId the rendition document id
|
||||
*/
|
||||
public CMISRenditionImpl(NodeRef nodeRef, String streamId, String mimeType, CMISRenditionKind kind, Integer height, Integer width, String title, Integer length, String renditionDocumentId)
|
||||
public CMISRenditionImpl(NodeRef nodeRef, String streamId, String mimeType, String kind, Integer height, Integer width, String title, Integer length, String renditionDocumentId)
|
||||
{
|
||||
super();
|
||||
this.nodeRef = nodeRef;
|
||||
@@ -113,7 +112,7 @@ public class CMISRenditionImpl implements CMISRendition
|
||||
/**
|
||||
* @see org.alfresco.cmis.CMISRendition#getKind()
|
||||
*/
|
||||
public CMISRenditionKind getKind()
|
||||
public String getKind()
|
||||
{
|
||||
return kind;
|
||||
}
|
||||
@@ -123,7 +122,7 @@ public class CMISRenditionImpl implements CMISRendition
|
||||
*
|
||||
* @param kind rendition kind
|
||||
*/
|
||||
public void setKind(CMISRenditionKind kind)
|
||||
public void setKind(String kind)
|
||||
{
|
||||
this.kind = kind;
|
||||
}
|
||||
|
@@ -29,7 +29,6 @@ import java.util.Map.Entry;
|
||||
|
||||
import org.alfresco.cmis.CMISFilterNotValidException;
|
||||
import org.alfresco.cmis.CMISRendition;
|
||||
import org.alfresco.cmis.CMISRenditionKind;
|
||||
import org.alfresco.cmis.CMISRenditionService;
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.model.ContentModel;
|
||||
@@ -65,7 +64,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
|
||||
/** Kind to thumbnail mapping */
|
||||
private Map<String, List<String>> kindToThumbnailNames = new HashMap<String, List<String>>();
|
||||
private Map<String, CMISRenditionKind> thumbnailNamesToKind = new HashMap<String, CMISRenditionKind>();
|
||||
private Map<String, String> thumbnailNamesToKind = new HashMap<String, String>();
|
||||
|
||||
/** Custom renditions */
|
||||
private CustomRenditionsCache customRenditionsCache;
|
||||
@@ -200,17 +199,9 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
for (String filterElement : filterElements)
|
||||
{
|
||||
filterElement = filterElement.trim();
|
||||
if (isRenditionKind(filterElement))
|
||||
if (filterElement.indexOf('/') == -1)
|
||||
{
|
||||
CMISRenditionKind kind = null;
|
||||
for (CMISRenditionKind renditionKind : CMISRenditionKind.values())
|
||||
{
|
||||
if (renditionKind.getLabel().equals(filterElement))
|
||||
{
|
||||
kind = renditionKind;
|
||||
}
|
||||
}
|
||||
result.getKinds().add(kind);
|
||||
result.getKinds().add(filterElement);
|
||||
List<String> thumbnails = kindToThumbnailNames.get(filterElement);
|
||||
if (thumbnails != null)
|
||||
{
|
||||
@@ -255,23 +246,6 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param filterElement filter element
|
||||
* @return true if filter element is rendition kind
|
||||
*/
|
||||
private boolean isRenditionKind(String filterElement)
|
||||
{
|
||||
boolean result = false;
|
||||
for (CMISRenditionKind renditionKind : CMISRenditionKind.values())
|
||||
{
|
||||
if (renditionKind.getLabel().equals(filterElement))
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create CMISRendition by thumbnailNode and documentNode.
|
||||
*
|
||||
@@ -283,42 +257,40 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
{
|
||||
CMISRenditionImpl rendition = null;
|
||||
|
||||
String thumbnailName = getThumbnailName(thumbnailNode);
|
||||
CMISRenditionKind kind = thumbnailNamesToKind.get(thumbnailName);
|
||||
if (thumbnailName != null && kind != null)
|
||||
{
|
||||
rendition = new CMISRenditionImpl();
|
||||
ContentData contentData = (ContentData) nodeService.getProperty(thumbnailNode, ContentModel.PROP_CONTENT);
|
||||
rendition.setNodeRef(thumbnailNode);
|
||||
rendition.setStreamId(thumbnailNode.toString());
|
||||
rendition.setRenditionDocumentId(documentNode.toString());
|
||||
rendition.setTitle(thumbnailName);
|
||||
rendition.setKind(kind);
|
||||
rendition.setMimeType(contentData.getMimetype());
|
||||
rendition.setLength((int) contentData.getSize());
|
||||
String thumbnailName = getThumbnailName(thumbnailNode);
|
||||
String kind = thumbnailNamesToKind.get(thumbnailName);
|
||||
kind = (kind == null) ? thumbnailName : kind;
|
||||
|
||||
rendition = new CMISRenditionImpl();
|
||||
ContentData contentData = (ContentData) nodeService.getProperty(thumbnailNode, ContentModel.PROP_CONTENT);
|
||||
rendition.setNodeRef(thumbnailNode);
|
||||
rendition.setStreamId(thumbnailNode.toString());
|
||||
rendition.setRenditionDocumentId(documentNode.toString());
|
||||
rendition.setTitle(thumbnailName);
|
||||
rendition.setKind(kind);
|
||||
rendition.setMimeType(contentData.getMimetype());
|
||||
rendition.setLength((int) contentData.getSize());
|
||||
|
||||
ImageResizeOptions imageAttributes = getImageAttributes(thumbnailName);
|
||||
if (imageAttributes != null)
|
||||
{
|
||||
rendition.setWidth(imageAttributes.getWidth());
|
||||
rendition.setHeight(imageAttributes.getHeight());
|
||||
}
|
||||
ImageResizeOptions imageAttributes = getImageAttributes(thumbnailName);
|
||||
if (imageAttributes != null)
|
||||
{
|
||||
rendition.setWidth(imageAttributes.getWidth());
|
||||
rendition.setHeight(imageAttributes.getHeight());
|
||||
}
|
||||
return rendition;
|
||||
}
|
||||
|
||||
private String getThumbnailName(NodeRef thumbnailNode) {
|
||||
String thumbnailName = null;
|
||||
List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(
|
||||
thumbnailNode, RenditionModel.ASSOC_RENDITION,
|
||||
RegexQNamePattern.MATCH_ALL);
|
||||
if (parentAssocs.size() == 1)
|
||||
{
|
||||
ChildAssociationRef parentAssoc = parentAssocs.get(0);
|
||||
thumbnailName = parentAssoc.getQName().getLocalName();
|
||||
}
|
||||
return thumbnailName;
|
||||
}
|
||||
private String getThumbnailName(NodeRef thumbnailNode)
|
||||
{
|
||||
String thumbnailName = null;
|
||||
List<ChildAssociationRef> parentAssocs = nodeService.getParentAssocs(thumbnailNode,
|
||||
RenditionModel.ASSOC_RENDITION, RegexQNamePattern.MATCH_ALL);
|
||||
if (parentAssocs.size() == 1) {
|
||||
ChildAssociationRef parentAssoc = parentAssocs.get(0);
|
||||
thumbnailName = parentAssoc.getQName().getLocalName();
|
||||
}
|
||||
return thumbnailName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom renditions.
|
||||
@@ -337,7 +309,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
}
|
||||
else
|
||||
{
|
||||
for (CMISRenditionKind kind : filter.getKinds())
|
||||
for (String kind : filter.getKinds())
|
||||
{
|
||||
List<CMISRendition> renditions = customRenditionsCache.getRenditionsByKind(kind);
|
||||
if (renditions != null)
|
||||
@@ -379,10 +351,9 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
this.kindToThumbnailNames = renditionKinds;
|
||||
for (Entry<String, List<String>> entry : renditionKinds.entrySet())
|
||||
{
|
||||
CMISRenditionKind kind = CMISRenditionKind.valueOfLabel(entry.getKey());
|
||||
for (String thumbnailName : entry.getValue())
|
||||
{
|
||||
thumbnailNamesToKind.put(thumbnailName, kind);
|
||||
thumbnailNamesToKind.put(thumbnailName, entry.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -422,7 +393,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
*/
|
||||
private class CustomRenditionsCache
|
||||
{
|
||||
private Map<CMISRenditionKind, List<CMISRendition>> renditionsByKind;
|
||||
private Map<String, List<CMISRendition>> renditionsByKind;
|
||||
private Map<String, List<CMISRendition>> renditionsByMimeType;
|
||||
private Map<String, List<CMISRendition>> renditionsByBaseMimeType;
|
||||
private List<CMISRendition> allRenditions;
|
||||
@@ -430,7 +401,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
public CustomRenditionsCache(List<CMISRendition> renditions)
|
||||
{
|
||||
allRenditions = renditions;
|
||||
renditionsByKind = new HashMap<CMISRenditionKind, List<CMISRendition>>(renditions.size());
|
||||
renditionsByKind = new HashMap<String, List<CMISRendition>>(renditions.size());
|
||||
renditionsByMimeType = new HashMap<String, List<CMISRendition>>(renditions.size());
|
||||
renditionsByBaseMimeType = new HashMap<String, List<CMISRendition>>(renditions.size());
|
||||
for (CMISRendition rendition : renditions)
|
||||
@@ -454,7 +425,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
}
|
||||
}
|
||||
|
||||
public List<CMISRendition> getRenditionsByKind(CMISRenditionKind kind)
|
||||
public List<CMISRendition> getRenditionsByKind(String kind)
|
||||
{
|
||||
return renditionsByKind.get(kind);
|
||||
}
|
||||
@@ -494,7 +465,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
*/
|
||||
private class ThumbnailFilter
|
||||
{
|
||||
private List<CMISRenditionKind> kinds = new ArrayList<CMISRenditionKind>();
|
||||
private List<String> kinds = new ArrayList<String>();
|
||||
|
||||
private List<String> thumbnailNames = new ArrayList<String>();
|
||||
|
||||
@@ -512,7 +483,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService
|
||||
return mimetypes;
|
||||
}
|
||||
|
||||
public List<CMISRenditionKind> getKinds()
|
||||
public List<String> getKinds()
|
||||
{
|
||||
return kinds;
|
||||
}
|
||||
|
@@ -27,7 +27,6 @@ import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.cmis.CMISRendition;
|
||||
import org.alfresco.cmis.CMISRenditionKind;
|
||||
import org.alfresco.cmis.mapping.BaseCMISTest;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.content.MimetypeMap;
|
||||
@@ -43,12 +42,12 @@ import org.alfresco.service.cmr.repository.NodeRef;
|
||||
public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
{
|
||||
private static final String[] THUMBNAIL_NAMES = new String[] { "doclib", "webpreview", "imgpreview" };
|
||||
private static final CMISRenditionKind[] THUMBNAIL_KINDS = new CMISRenditionKind[] { CMISRenditionKind.THUMBNAIL, CMISRenditionKind.WEB_PREVIEW, CMISRenditionKind.WEB_PREVIEW };
|
||||
private static final String[] THUMBNAIL_KINDS = new String[] { "cmis:thumbnail", "alf:webpreview", "alf:webpreview" };
|
||||
|
||||
private NodeRef document;
|
||||
private List<CMISRendition> documentRenditions = new ArrayList<CMISRendition>();
|
||||
private CMISRendition icon16Rendition = new CMISRenditionImpl(null, "alf:icon16", "image/gif", CMISRenditionKind.ICON16, 16, 16, null, null, null);
|
||||
private CMISRendition icon32Rendition = new CMISRenditionImpl(null, "alf:icon32", "image/gif", CMISRenditionKind.ICON32, 32, 32, null, null, null);
|
||||
private CMISRendition icon16Rendition = new CMISRenditionImpl(null, "alf:icon16", "image/gif", "alf:icon16", 16, 16, null, null, null);
|
||||
private CMISRendition icon32Rendition = new CMISRenditionImpl(null, "alf:icon32", "image/gif", "alf:icon32", 32, 32, null, null, null);
|
||||
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
@@ -78,13 +77,13 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
|
||||
public void testGetRenditionsByKind() throws Exception
|
||||
{
|
||||
testGetRenditionsByKind(CMISRenditionKind.THUMBNAIL);
|
||||
testGetRenditionsByKind(CMISRenditionKind.WEB_PREVIEW);
|
||||
testGetRenditionsByKind(CMISRenditionKind.ICON16);
|
||||
testGetRenditionsByKind(CMISRenditionKind.ICON32);
|
||||
testGetRenditionsByKind("cmis:thumbnail");
|
||||
testGetRenditionsByKind("alf:webpreview");
|
||||
testGetRenditionsByKind("alf:icon16");
|
||||
testGetRenditionsByKind("alf:icon32");
|
||||
|
||||
testGetRenditionsByKind(CMISRenditionKind.WEB_PREVIEW, CMISRenditionKind.ICON32);
|
||||
testGetRenditionsByKind(CMISRenditionKind.THUMBNAIL, CMISRenditionKind.WEB_PREVIEW, CMISRenditionKind.ICON16, CMISRenditionKind.ICON32);
|
||||
testGetRenditionsByKind("alf:webpreview", "alf:icon32");
|
||||
testGetRenditionsByKind("cmis:thumbnail", "alf:webpreview", "alf:icon16", "alf:icon32");
|
||||
}
|
||||
|
||||
public void testGetRenditionsByMimetype() throws Exception
|
||||
@@ -136,12 +135,12 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
testGetRenditions(null, mimetypes);
|
||||
}
|
||||
|
||||
private void testGetRenditionsByKind(CMISRenditionKind... kinds) throws Exception
|
||||
private void testGetRenditionsByKind(String... kinds) throws Exception
|
||||
{
|
||||
testGetRenditions(kinds, null);
|
||||
}
|
||||
|
||||
private void testGetRenditions(CMISRenditionKind[] kinds, String[] mimetypes) throws Exception
|
||||
private void testGetRenditions(String[] kinds, String[] mimetypes) throws Exception
|
||||
{
|
||||
String filter = createFilter(kinds, mimetypes);
|
||||
List<CMISRendition> receivedRenditions = cmisRenditionService.getRenditions(document, filter);
|
||||
@@ -149,7 +148,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
List<CMISRendition> expectedRenditions = new ArrayList<CMISRendition>();
|
||||
if (kinds != null)
|
||||
{
|
||||
for (CMISRenditionKind kind : kinds)
|
||||
for (String kind : kinds)
|
||||
{
|
||||
expectedRenditions.addAll(getRenditionsByKind(kind));
|
||||
}
|
||||
@@ -171,7 +170,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
private CMISRendition createRendition(NodeRef nodeRef, String thumbnailName, CMISRenditionKind kind)
|
||||
private CMISRendition createRendition(NodeRef nodeRef, String thumbnailName, String kind)
|
||||
{
|
||||
ThumbnailDefinition details = thumbnailService.getThumbnailRegistry().getThumbnailDefinition(thumbnailName);
|
||||
NodeRef thumbnailNodeRef = thumbnailService.createThumbnail(nodeRef, ContentModel.PROP_CONTENT, details.getMimetype(), details.getTransformationOptions(), details
|
||||
@@ -260,7 +259,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
}
|
||||
};
|
||||
|
||||
private List<CMISRendition> getRenditionsByKind(CMISRenditionKind kind)
|
||||
private List<CMISRendition> getRenditionsByKind(String kind)
|
||||
{
|
||||
return getRenditions(kind, null);
|
||||
}
|
||||
@@ -270,7 +269,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
return getRenditions(null, mimetype);
|
||||
}
|
||||
|
||||
private List<CMISRendition> getRenditions(CMISRenditionKind kind, String mimetype)
|
||||
private List<CMISRendition> getRenditions(String kind, String mimetype)
|
||||
{
|
||||
List<CMISRendition> result = new ArrayList<CMISRendition>();
|
||||
|
||||
@@ -287,7 +286,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean isRenditionSatisfyConditions(CMISRendition rendition, CMISRenditionKind kind, String mimetype)
|
||||
private boolean isRenditionSatisfyConditions(CMISRendition rendition, String kind, String mimetype)
|
||||
{
|
||||
if (kind != null)
|
||||
{
|
||||
@@ -338,14 +337,14 @@ public class CMISRenditionServiceTest extends BaseCMISTest
|
||||
return baseMymetype;
|
||||
}
|
||||
|
||||
private String createFilter(CMISRenditionKind[] kinds, String[] mimetypes)
|
||||
private String createFilter(String[] kinds, String[] mimetypes)
|
||||
{
|
||||
StringBuilder filter = new StringBuilder();
|
||||
if (kinds != null)
|
||||
{
|
||||
for (CMISRenditionKind kind : kinds)
|
||||
for (String kind : kinds)
|
||||
{
|
||||
filter.append(kind.getLabel());
|
||||
filter.append(kind);
|
||||
filter.append(",");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user