/*
* 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.service.cmr.rendition;
import java.util.List;
import org.alfresco.repo.rendition.RenditionDefinitionPersister;
import org.alfresco.service.PublicService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.Auditable;
import org.alfresco.service.NotAuditable;
/**
* The Rendition service.
* @author Nick Smith
* @author Neil McErlean
*/
@PublicService
public interface RenditionService extends RenditionDefinitionPersister
{
/**
* This optional {@link NodeRef} parameter specifies an existing {@link NodeRef} to use
* as the rendition node. Properties on this node (including the content
* property cm:content) will be updated as required but the location and
* name of the node will not change. This parameter takes precedence over
* PARAM_DESTINATION_PATH_TEMPLATE.
*/
public static final String PARAM_DESTINATION_NODE = "rendition-destination-node";
/**
* This optional {@link String} parameter indicates where the rendition will be
* created. The parameter may specify either the actual file path to the
* rendition or it may specify a Freemarker template which can be resolved
* to a file path. In either case the path is relative to the root node of
* the store in which the source node exists. If the parameter
* PARAM_DESTINATION_NODE has been set then this parameter will be ignored.
*/
public static final String PARAM_DESTINATION_PATH_TEMPLATE = "destination-path-template";
/**
* This optional {@link QName} parameter specifies what the node type of the created rendition will
* be. If no type is specified then this defaults to cm:content.
*/
public static final String PARAM_RENDITION_NODETYPE = "rendition-nodetype";
/**
* This optional {@link Boolean} flag parameter determines whether an
* existing rendition is moved or orphaned. If the source node already has a
* rendition and this parameter is false
the old rendition will
* be moved to the new destination location and updated appropriately. If
* this parameter is set to true
then the old rendition will be
* left in its current location and the rold rendition association from the
* source node to the old rendition will be deleted.
*/
public static final String PARAM_ORPHAN_EXISTING_RENDITION = "orphan-existing-rendition";
/**
* This optional boolean parameter specified whether the rendition is a component within
* a composite rendition. Such component renditions should not execute the standard
* pre- and post-rendition behaviour as it will be taken care of by the CompositeRenderingEngine's
* execution.
*/
public static final String PARAM_IS_COMPONENT_RENDITION = "is-component-rendition";
/**
* Returns the {@link RenderingEngineDefinition} associated with the
* specified rendering engine name.
*
* @param name The rendering engine name.
* @return The {@link RenderingEngineDefinition} or null.
*/
@NotAuditable
RenderingEngineDefinition getRenderingEngineDefinition(String name);
/**
* @return A {@link List} of all available {@link RenderingEngineDefinition}
* s.
*/
@NotAuditable
List getRenderingEngineDefinitions();
/**
* Creates a new {@link RenditionDefinition} and sets the rendition name and
* the rendering engine name to the specified values.
*
* @param renditionName A unique identifier used to specify the created
* {@link RenditionDefinition}.
* @param renderingEngineName The name of the rendering engine associated
* with this {@link RenditionDefinition}.
* @return the created {@link RenditionDefinition}.
*/
@NotAuditable
RenditionDefinition createRenditionDefinition(QName renditionName, String renderingEngineName);
/**
* Creates a new {@link CompositeRenditionDefinition} and sets the rendition
* name and the rendering engine name to the specified values.
*
* @param renditionName A unique identifier used to specify the created
* {@link RenditionDefinition}.
* @return the created {@link CompositeRenditionDefinition}.
*/
@NotAuditable
CompositeRenditionDefinition createCompositeRenditionDefinition(QName renditionName);
/**
* This method gets all the renditions of the specified node.
*
* @return a list of ChildAssociationRefs which link the source node to the
* renditions.
*/
@NotAuditable
List getRenditions(NodeRef node);
/**
* This method gets all the renditions of the specified node filtered by
* MIME-type prefix. Renditions whose MIME-type string startsWith the prefix
* will be returned.
*
* @param node the source node for the renditions
* @param mimeTypePrefix a prefix to check against the rendition MIME-types.
* This must not be null and must not be an empty String
* @return a list of ChildAssociationRefs which link the source node to the
* filtered renditions.
*/
@NotAuditable
List getRenditions(NodeRef node, String mimeTypePrefix);
/**
* This method gets the rendition of the specified node identified by
* the provided rendition name.
*
* @param node the source node for the renditions
* @param renditionName the renditionName used to identify a rendition.
* @return the ChildAssociationRef which links the source node to the
* rendition or null
if there is no such rendition.
*/
@NotAuditable
ChildAssociationRef getRenditionByName(NodeRef node, QName renditionName);
/**
* This method returns true
if the specified NodeRef is a valid
* rendition node, else false
. A nodeRef is a rendition node
* if it has the rn:rendition aspect (or sub-aspect) applied.
*
* @param node
* @return true
if a rendition, else false
*/
@NotAuditable
boolean isRendition(NodeRef node);
/**
* This method gets the source node for the specified rendition node. There
* should only be one source node for any given rendition node.
*
* @param renditionNode the nodeRef holding the rendition.
* @return the ChildAssociationRef whose parentNodeRef is the source node, or
* null
if there is no source node.
*
* @see RenditionService#isRendition(NodeRef)
*/
@NotAuditable
ChildAssociationRef getSourceNode(NodeRef renditionNode);
/**
* This method synchronously renders content as specified by the given
* {@link RenditionDefinition}. The content to be rendered is provided by
* the specified source node.
*
* @param sourceNode the node from which the content is retrieved.
* @param renditionDefinition this fully specifies the rendition which is to
* be performed.
* @return a child association reference which is the link from the source
* node to the newly rendered content.
* @throws RenditionServiceException if there is a problem in rendering the
* given sourceNode
*/
@NotAuditable
ChildAssociationRef render(NodeRef sourceNode, RenditionDefinition renditionDefinition);
/**
* This method asynchronously renders content as specified by the given
* {@link RenditionDefinition}. The content to be rendered is provided by
* the specified source node.
*
* @param sourceNode the node from which the content is retrieved.
* @param renditionDefinition this fully specifies the rendition which is to
* be performed.
* @param callback a callback object to handle the ultimate result of the rendition.
*/
@NotAuditable
void render(NodeRef sourceNode, RenditionDefinition renditionDefinition,
RenderCallback callback);
}