Skip to content

Example 1: Append a prefix to a content URL

This example demonstrates a content URL generation filter that appends a prefix to each content URL that is written. This type of content URL generation filter is useful when used with an HTTP server that dynamically rewrites incoming URLs.

Factory class

/******************************************************************
 * Copyright HCL Technologies Limited 2011, 2019                                       *
 ******************************************************************/
package com.ibm.workplace.wcm.api.samples;

import javax.portlet.*;
import com.ibm.workplace.wcm.api.extensions.url.*;

public class RewriteUrlGenerationFilterFactory implements ContentUrlGenerationFilterFactory {
    @Override
    public ContentUrlGenerationFilter getFilter(RenderRequest portletRequest, RenderResponse portletResponse) 
               throws ContentUrlFilterInstantiationException {
        return new RewriteUrlGenerationFilter();
    }

    @Override
    public int getFilterChainWeight() {
        return 5;
    }
}

Filter class

**************************************
 * Copyright HCL Technologies Limited 2011, 2019                                       *
 ******************************************************************/
package com.ibm.workplace.wcm.api.samples;

import java.io.*;
import com.ibm.workplace.wcm.api.extensions.url.*;

public class RewriteUrlGenerationFilter implements ContentUrlGenerationFilter {

    /** that static prefix that is prepended to all URLs */
    private static final String PREFIX = "/content/";

    @Override
    public void dispose() {
        // no cleanup required for this filter
    }

    @Override
    public void writeURL(ContentUrlGenerationRequest request, ContentUrlGenerationResponse response, 
                             ContentUrlGenerationFilterChain chain) throws ContentUrlGenerationException, 
                             IOException {

        final String contentPath = request.getContentPath(true);
        if (contentPath != null && !contentPath.isEmpty()) {
            // write the prefix
            final Writer out = response.getWriter();
            out.write(PREFIX);

            // write path to content
            if (contentPath.charAt(0) == '/') {
                // Omit a leading / to avoid 2 / characters
                out.write(contentPath, 1, contentPath.length() - 1);
            } else {
                out.write(contentPath);
            }
        } else {
            // let the other filters handle prefix URLs
            chain.writeURL(request, response);
        }
    }
}

plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin id="com.ibm.workplace.wcm.api.samples.plugin" 
        name="My content URL plugin"
        version="1.0.0" provider-name="IBM">
    <extension point="com.ibm.workplace.wcm.api.ContentUrlGenerationFilter" id="MyRewriteUrlGenerationFilter">
        <factory class="com.ibm.workplace.wcm.api.samples.RewriteUrlGenerationFilterFactory" 
                 weight="5"/>
    </extension>
</plugin>