Juha Palomäki

Orbeon forms processsor for extracting locale from request

A simple processor for Orbeon forms that extracts locale information from request.

package fi.iki.juhap.xpl;

import java.util.Locale;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.orbeon.oxf.pipeline.api.ExternalContext;
import org.orbeon.oxf.pipeline.api.PipelineContext;
import org.orbeon.oxf.processor.ProcessorInputOutputInfo;
import org.orbeon.oxf.processor.SimpleProcessor;
import org.orbeon.oxf.xml.TransformerUtils;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;

/*\*
\* Extract locale information from request.
\*
\* Example output:
\*
\* <locale>
\* <language>en</language>
\* <country>US</country>
\* <variant />
\* </locale>
\*
\*/
public class RequestLocaleProcessor extends SimpleProcessor {
public RequestLocaleProcessor() {
    addOutputInfo(new ProcessorInputOutputInfo(OUTPUT_DATA));
}

public void generateData(PipelineContext context, ContentHandler contentHandler) throws SAXException {
    ExternalContext externalContext = (ExternalContext)
    context.getAttribute(PipelineContext.EXTERNAL_CONTEXT);

    Locale locale = externalContext.getRequest().getLocale();

    Document document = DocumentHelper.createDocument();
    Element root = document.addElement("locale");
    root.addElement("language").addText(locale.getLanguage());
    root.addElement("country").addText(locale.getCountry());
    root.addElement("variant").addText(locale.getVariant());

    TransformerUtils.writeDom4j(document, contentHandler);
    }
}

In order to use this you need to add it to processors-local.xml file (WEB-INF/resources/config) like this:

<processors xmlns:jp="http://fi.iki.juhap/processors">
    <processor name="jp:request-locale">
        <class name="fi.iki.juhap.xpl.RequestLocaleProcessor" />
    </processor>
</processors>

Usage very simple. In XPL you need to declare the namespace and then use the custom processor as any other.

<p:config xmlns:p="http://www.orbeon.com/oxf/pipeline" xmlns:jp="http://fi.iki.juhap/processors">
    ..
    <p:processor name="jp:request-locale">
        <p:output name="data" id="request-locale" />
    </p:processor>
    ..
</p:config>
Juha Palomäki
Projects
Categories