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:
David Caruana
2010-05-10 18:15:53 +00:00
parent 1951617871
commit 39febbbcd8
6 changed files with 65 additions and 165 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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(",");
}
}