Rendering engines are registered with the RenditionService through Spring dependency injection. The rendition-services-context.xml declares an abstract bean called baseRenderingAction, which is the parent bean for all rendering engines. baseRenderingAction itself is a child bean of the ActionServices action-executer bean.
In Content Services, there are a number of concrete rendering engine beans, for example, reformat within the same spring context file. To register a new rendering engine, add new spring bean definitions.
Creating a rendition definition:
// Names must be provided for the rendition definition and the rendering engine to use. QName renditionName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myRendDefn"); String renderingEngineName = ReformatRenderingEngine.NAME; // Create the Rendition Definition object. RenditionDefinition renditionDef = serviceRegistry.getRenditionService().createRenditionDefinition(renditionName, renderingEngineName); // Set parameters on the rendition definition. renditionDef.setParameterValue(AbstractRenderingEngine.PARAM_MIME_TYPE, MimetypeMap.MIMETYPE_PDF);
Storing a rendition definition:
// Store the Rendition Definition using the QName // of the Rendition Definition as a unique identifier. serviceRegistry.getRenditionService().saveRenditionDefinition(renditionDef);
Retrieving a rendition definition can be done in the following ways:
// 1. As a list of all stored Rendition Definitions List<RenditionDefinition> definitions = serviceRegistry.getRenditionService().loadRenditionDefinitions(); // 2. As a list of stored Rendition Definitions filtered by Rendering Engine name. String renderingEngineName = "myEngineName"; List<RenditionDefinition> definitions = serviceRegistry.getRenditionService().loadRenditionDefinitions(); // 3. As a single Rendition Definition, uniquely identified by its QName. QName renditionName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myRendDefn"); RenditionDefinition renditionDef = serviceRegistry.getRenditionService().loadRenditionDefinition(renditionName);
Editing an existing rendition definition:
// Retrieve the existing Rendition Definition QName renditionName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myRendDefn"); RenditionDefinition renditionDef = serviceRegistry.getRenditionService().loadRenditionDefinition(renditionName); // Make changes. renditionDef.setParameterValue(AbstractRenderingEngine.PARAM_MIME_TYPE, MimetypeMap.MIMETYPE_PDF); renditionDef.setParameterValue(serviceRegistry.getRenditionService().PARAM_ORPHAN_EXISTING_RENDITION, true); // Persist the changes. serviceRegistry.getRenditionService().saveRenditionDefinition(renditionDef);
Performing a simple rendition:
// A rendition definition is required to perform any rendition. // The rendition definition can be loaded from the repository or created as shown above. NodeRef sourceNode = // obtained in the usual way e.g. from nodeService ChildAssociationRef renditionAssoc = serviceRegistry.getRenditionService().render(sourceNode, renditionDef);
Performing a composite rendition:
// First obtain a Composite Rendition Definition // This can be loaded from the repository or created as shown here. QName renditionName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myRendDefn"); CompositeRenditionDefinition compositeDefinition = serviceRegistry.getRenditionService().createCompositeRenditionDefinition(renditionName); // Now specify which other renditions are to be performed as part of the composite rendition. RenditionDefinition reformatDefinition = serviceRegistry.getRenditionService().load(reformatRenditionName); RenditionDefinition rescaleImageDefinition = serviceRegistry.getRenditionService().load(rescaleImageRenditionName); compositeDefinition.addAction(reformatDefinition); compositeDefinition.addAction(rescaleImageDefinition); // Perform the composite rendition NodeRef sourceNode = // obtained in the usual way e.g. from nodeService ChildAssociationRef renditionAssoc = serviceRegistry.getRenditionService().render(sourceNode, compositeDefinition);
Retrieving renditions for a node:
NodeRef sourceNode = // obtained in the usual way e.g. from nodeService // 1. Get all renditions with the specified node as their source. List<ChildAssociationRef> allRenditions = serviceRegistry.getRenditionService().getRenditions(sourceNode); // 2. Get the rendition with the specified source node and the specified rendition definition name. // If there is no matching rendition, null is returned QName renditionName = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myRenditionDef"); ChildAssociationRef rendition = serviceRegistry.getRenditionService().getRenditionByName(sourceNode, renditionName); // 3. Get the renditions with the specified source node whose MIME types match a filter // This example returns renditions whose mimetype starts with "image". List<ChildAssociationRef> imageRenditions = serviceRegistry.getRenditionService().getRenditions(sourceNode, "image");
Specifying a rendition definition as asynchronous or synchronous:
This behaviour is inherited from the ActionService - remember that RenditionDefinition extends Action. So we can create a rendition definition as shown above and set it to execute asynchronously:
RenditionDefinition renditionDef = // created as shown above renditionDef.setExecuteAsynchronously(true);
See also: