From 39febbbcd85bbf2a384defb652040ce68d3f1558 Mon Sep 17 00:00:00 2001 From: David Caruana Date: Mon, 10 May 2010 18:15:53 +0000 Subject: [PATCH] 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 --- config/alfresco/cmis-api-context.xml | 4 +- .../java/org/alfresco/cmis/CMISRendition.java | 2 +- .../org/alfresco/cmis/CMISRenditionKind.java | 69 ----------- .../cmis/renditions/CMISRenditionImpl.java | 9 +- .../renditions/CMISRenditionServiceImpl.java | 107 +++++++----------- .../renditions/CMISRenditionServiceTest.java | 39 ++++--- 6 files changed, 65 insertions(+), 165 deletions(-) delete mode 100644 source/java/org/alfresco/cmis/CMISRenditionKind.java diff --git a/config/alfresco/cmis-api-context.xml b/config/alfresco/cmis-api-context.xml index 64bcb1eb00..bcf5259296 100644 --- a/config/alfresco/cmis-api-context.xml +++ b/config/alfresco/cmis-api-context.xml @@ -89,14 +89,14 @@ alf:icon16 image/gif - ICON16 + alf:icon16 16 16 alf:icon32 image/gif - ICON32 + alf:icon32 32 32 diff --git a/source/java/org/alfresco/cmis/CMISRendition.java b/source/java/org/alfresco/cmis/CMISRendition.java index 4f787e787b..f1565a0f08 100644 --- a/source/java/org/alfresco/cmis/CMISRendition.java +++ b/source/java/org/alfresco/cmis/CMISRendition.java @@ -48,7 +48,7 @@ public interface CMISRendition * Get rendition kind. * @return */ - public CMISRenditionKind getKind(); + public String getKind(); /** * Get the height of image. Typically used for ‘image’ renditions (expressed as pixels). diff --git a/source/java/org/alfresco/cmis/CMISRenditionKind.java b/source/java/org/alfresco/cmis/CMISRenditionKind.java deleted file mode 100644 index 2cd9d2b3fa..0000000000 --- a/source/java/org/alfresco/cmis/CMISRenditionKind.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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.cmis; - - -/** - * Enumeration of the CMIS Rendition Kinds - * - * @author Stas Sokolovsky - */ -public enum CMISRenditionKind implements EnumLabel -{ - THUMBNAIL("cmis:thumbnail"), - WEB_PREVIEW("alf:webpreview"), - ICON16("alf:icon16"), - ICON32("alf:icon32"); - - private String label; - - /** - * Construct - * - * @param label - */ - CMISRenditionKind(String label) - { - this.label = label; - } - - /* - * (non-Javadoc) - * - * @see org.alfresco.cmis.EnumLabel#label() - */ - public String getLabel() - { - return label; - } - - public static EnumFactory FACTORY = new EnumFactory(CMISRenditionKind.class); - - public static CMISRenditionKind valueOfLabel(String label) - { - for(CMISRenditionKind kind: CMISRenditionKind.values()) - { - if(kind.getLabel().equals(label)) - { - return kind; - } - } - return null; - } -} diff --git a/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java b/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java index 6122eaa9b3..96eac8bebd 100644 --- a/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java +++ b/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java @@ -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; } diff --git a/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java index 59894c061b..83a2922b95 100644 --- a/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java +++ b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java @@ -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> kindToThumbnailNames = new HashMap>(); - private Map thumbnailNamesToKind = new HashMap(); + private Map thumbnailNamesToKind = new HashMap(); /** 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 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 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 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 renditions = customRenditionsCache.getRenditionsByKind(kind); if (renditions != null) @@ -379,10 +351,9 @@ public class CMISRenditionServiceImpl implements CMISRenditionService this.kindToThumbnailNames = renditionKinds; for (Entry> 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> renditionsByKind; + private Map> renditionsByKind; private Map> renditionsByMimeType; private Map> renditionsByBaseMimeType; private List allRenditions; @@ -430,7 +401,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService public CustomRenditionsCache(List renditions) { allRenditions = renditions; - renditionsByKind = new HashMap>(renditions.size()); + renditionsByKind = new HashMap>(renditions.size()); renditionsByMimeType = new HashMap>(renditions.size()); renditionsByBaseMimeType = new HashMap>(renditions.size()); for (CMISRendition rendition : renditions) @@ -454,7 +425,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService } } - public List getRenditionsByKind(CMISRenditionKind kind) + public List getRenditionsByKind(String kind) { return renditionsByKind.get(kind); } @@ -494,7 +465,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService */ private class ThumbnailFilter { - private List kinds = new ArrayList(); + private List kinds = new ArrayList(); private List thumbnailNames = new ArrayList(); @@ -512,7 +483,7 @@ public class CMISRenditionServiceImpl implements CMISRenditionService return mimetypes; } - public List getKinds() + public List getKinds() { return kinds; } diff --git a/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java index b3d5b09fe7..973514066d 100644 --- a/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java +++ b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java @@ -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 documentRenditions = new ArrayList(); - 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 receivedRenditions = cmisRenditionService.getRenditions(document, filter); @@ -149,7 +148,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest List expectedRenditions = new ArrayList(); 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 getRenditionsByKind(CMISRenditionKind kind) + private List getRenditionsByKind(String kind) { return getRenditions(kind, null); } @@ -270,7 +269,7 @@ public class CMISRenditionServiceTest extends BaseCMISTest return getRenditions(null, mimetype); } - private List getRenditions(CMISRenditionKind kind, String mimetype) + private List getRenditions(String kind, String mimetype) { List result = new ArrayList(); @@ -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(","); } }