Preview URI Service

From alfrescowiki

Jump to: navigation, search

Warning: AVM Deprecation
The AVM is no longer being actively developed by Alfresco Engineering and Enterprise support subscriptions for the AVM are no longer being offered to new customers. New projects requiring Web Content Management features may want to consider leveraging a CMIS-based solution such as Web Quick Start or the File System Transfer Receiver. The topic AVM Decommissioning collects useful information for migrating off of the AVM.

Back to WCM Preview

Contents

Background

As discussed in WCM Preview#Virtualised Content Retrieval, the virtualised content retrieval approach to in-context preview requires that the Alfresco authoring instance knows how to properly construct deep URIs for an arbitrary external web application. This mechanism is provided by the "Preview URI Service", that not only provides a way for developers to implement arbitrarily complex preview URI mapping rules, but also provides a number of implementations that may be used as is, or referred to as examples of best practice.

Preview URI Service

Alfresco Community 3.2 and higher introduces a new WCM Service for generating Preview URIs. For earlier implementations, please refer to Preview URI Service (2.2 to 3.1).

The sys admin can pre-configure a registered list of preview URI service providers. One of these must be specified as the default provider. These will appear in a drop-down when creating/editing web project in the Alfresco WCM client (Alfresco Explorer) and hence can be selected and associated on a per- web project basis.

The WCM Preview URI Service includes an SPI (Service Provider Interface) which provides the ability to develop and pre-register different types of PreviewURI providers. In order to calculate/generate preview URIs, a custom class can implement the following Java interface:

  package org.alfresco.wcm.preview;

  import java.util.List;

  public interface PreviewURIServiceProvider
  {
    /**
     * @param sbStoreId       The sandbox store id to generate the preview URI for.
     * @param pathToAsset     The path to the asset to generate the preview URI for (can be null or empty, to return preview URL to store).
     * @param previewContext  Additional preview context
     * 
     * @return The Preview URI for the given sandbox and/or asset (<i>may be null</i>).
     */
    public String getPreviewURI(String sbStoreId, String pathToAsset, PreviewContext previewContext);
    
    /**
     * @param sbStoreId       The sandbox store id to generate the preview URI for.
     * @param pathsToAssets   The paths to the assets to generate the preview URI for.
     * @param previewContext  Additional preview context
     * 
     * @return The Preview URIs for the given asset paths (<i>may be null</i>).
     */
    public List<String> getPreviewURIs(String sbStoreId, List<String> pathsToAssets, PreviewContext previewContext);

Preview URI Service Implementations

For Alfresco WCM (Community 3.2), three implementations of this interface are provided:

VirtualisationServerPreviewURIService

The class org.alfresco.wcm.preview.VirtualisationServerPreviewURIService generates virtualisation server preview URIs and is primarily provided for backwards compatibility.

URITemplatePreviewURIService

The class org.alfresco.wcm.preview.URITemplatePreviewURIService uses a (configurable) URI template for generating preview URIs. The template language is identical to the one used for Web Scripts - see Web Scripts#URL Templates for more details.

URI Template Variables

The URITemplatePreviewURIService currently recognises two parameters in URI templates:

  1. {storeId} - the AVM store id of the sandbox being previewed eg. mywebproject--alice
  2. {pathToAsset} - the root-relative path of the asset being previewed eg. /www/avm_webapps/ROOT/content/xml/press_releases/myPressRelease.xml

Note that both of these parameters are optional - if they're not found in the URI template the replacement value won't appear in the resulting preview URI.</math>

NullPreviewURIService

The class org.alfresco.wcm.preview.NullPreviewURIService generates no URI whatsoever. This is useful for Web Projects where preview is disabled or disallowed for some reason.

Configuring the Preview URI Service

To ensure backwards compatibility, the Web Client uses an instance of the VirtualisationServicePreviewURIService as the default PreviewURIService. You may override this behaviour by overriding the "previewURIServiceRegistry" Spring bean in a custom-*-context.xml file (as described at Repository Configuration). For example if you wish to register a new default preview URI service provider called "myCustomPreviewURIService", you could create the following Spring configuration in a file called custom-wcm-preview-context.xml:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

 <beans>

    <bean id="myCustomPreviewURIService" class="com.mydomain.MyCustomPreviewURIService" parent="basePreviewURIServiceProvider"/>

    <bean id="previewURIServiceRegistry" class="org.alfresco.wcm.preview.PreviewURIServiceRegistryImpl">
       <property name="defaultProviderName">
           <value>My Custom Preview</value>
       </property>
       <property name="previewURIServiceProvidersByName">
           <map>
               <entry key="Virtualisation Server Preview">
                   <ref bean="virtServerPreviewURIService"/>
               </entry>
               <!--
               <entry key="NOOP Preview">
                   <ref bean="nullPreviewURIService"/>
               </entry>
               -->
               <entry key="My Custom Preview">
                   <ref bean="myCustomPreviewURIService"/>
               </entry>
           </map>
       </property>
    </bean>
    
 </beans>

Developing a Custom Preview URI Service Implementation

Implementing a custom PreviewURIServiceProvider requires a working knowledge of Java development, as well as an Alfresco SVN Development Environment. You should also be familiar with how Alfresco code extensions are packaged (i.e. as AMP Files) and deployed (i.e. via the Module Management Tool).

If you're familiar with Java you should find implementing a custom PreviewURIServiceProvider straight forward, given the simplicity of the interface.

Sample Code

The following sample implementation shows how you might strip out the 'synthetic' directories that get added to the start of every asset in a Web Project:

 package com.mydomain;

 import org.alfresco.wcm.preview.AbstractPreviewURIServiceProvider

 public class MyCustomPreviewURIService extends AbstractPreviewURIServiceProvider
 {
     private final static String SYNTHETIC_DIRECTORIES = "/www/avm_webapps/ROOT/";
     private final String previewServerHostnameAndPort;
 
     public MyCustomPreviewURIService(String previewServerHostnameAndPort)
     {
         assert previewServerHostnameAndPort != null : "previewServerHostnameAndPort must not be null";
         this.previewServerHostnameAndPort = previewServerHostnameAndPort;
     }
 
     public String getPreviewURI(String storeId, String pathToAsset)
     {
         StringBuilder result = new StringBuilder("https://" + previewServerHostnameAndPort);
 
         if (pathToAsset.startsWith(SYNTHETIC_DIRECTORIES))
         {
             result.append(pathToAsset.replace(SYNTHETIC_DIRECTORIES, "/"));
         }
         else
         {
             result.append(pathToAsset);
         }
 
         return(result.toString());
     }
 }

Back to WCM Preview

Personal tools
Download and go
© 2014 Alfresco Software, Inc. All Rights Reserved. Legal | Privacy | Accessibility