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>