bruno 2003/07/26 07:05:05
Modified: src/blocks/woody/java/org/apache/cocoon/woody/acting
HandleFormSubmitAction.java
src/blocks/woody/java/org/apache/cocoon/woody/flow/javascript
woody.js
src/blocks/woody/java/org/apache/cocoon/woody/transformation
WidgetReplacingPipe.java
WoodyTemplateTransformer.java
src/blocks/woody/samples/flow woody_flow_example.js
Log:
removed hardcoded locales
Revision Changes Path
1.7 +7 -1
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/acting/HandleFormSubmitAction.java
Index: HandleFormSubmitAction.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/acting/HandleFormSubmitAction.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- HandleFormSubmitAction.java 16 Jul 2003 13:59:12 -0000 1.6
+++ HandleFormSubmitAction.java 26 Jul 2003 14:05:05 -0000 1.7
@@ -60,6 +60,7 @@
import org.apache.cocoon.woody.FormContext;
import org.apache.cocoon.woody.FormHandler;
import org.apache.cocoon.woody.formmodel.Form;
+import org.apache.cocoon.i18n.I18nUtils;
import org.apache.excalibur.source.Source;
import java.util.Map;
@@ -86,6 +87,11 @@
String formAttribute = parameters.getParameter("attribute-name");
String formHandlerClassName = parameters.getParameter("formhandler",
null);
+ Locale locale = Locale.getDefault();
+ String localeStr = parameters.getParameter("locale", null);
+ if (localeStr != null)
+ locale = I18nUtils.parseLocale(localeStr, locale);
+
Source source = resolver.resolveURI(formSource);
try {
Form form = formManager.createForm(source);
@@ -101,7 +107,7 @@
form.setFormHandler(formHandler);
}
- FormContext formContext = new FormContext(request, Locale.US);
+ FormContext formContext = new FormContext(request, locale);
boolean finished = form.process(formContext);
request.setAttribute(formAttribute, form);
1.7 +10 -6
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/flow/javascript/woody.js
Index: woody.js
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/flow/javascript/woody.js,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- woody.js 25 Jul 2003 09:05:35 -0000 1.6
+++ woody.js 26 Jul 2003 14:05:05 -0000 1.7
@@ -104,12 +104,16 @@
return this.formWidget;
}
-Form.prototype.show = function(uri, validator) {
+Form.prototype.show = function(uri, validator, locale) {
var lastWebCont = this.lastWebContinuation;
// create a continuation, the invocation of which will resend
// the page: this will be used to implement automated "back"
// navigation
var wk = this.start(lastWebCont);
+
+ if (locale == null)
+ locale = java.util.Locale.getDefault();
+
while (true) {
if (cocoon.request == null) {
// this continuation has been invalidated
@@ -117,7 +121,7 @@
handleInvalidContinuation();
Woody.suicide();
}
- var thisWebCont = this._show(uri, wk);
+ var thisWebCont = this._show(uri, locale, wk);
// _show creates a continuation, the invocation of which
// will return right here: it is used to implement
// automated "next" navigation
@@ -126,9 +130,9 @@
handleInvalidContinuation();
suicide();
}
+
var formContext =
- new
Packages.org.apache.cocoon.woody.FormContext(this.woody.request,
-
java.util.Locale.US);
+ new
Packages.org.apache.cocoon.woody.FormContext(this.woody.request, locale);
var finished = this.form.process(formContext);
var evt = formContext.getActionEvent();
if (evt != null) {
@@ -145,10 +149,10 @@
}
}
-Form.prototype._show = function(uri, lastWebCont, timeToLive) {
+Form.prototype._show = function(uri, locale, lastWebCont, timeToLive) {
var k = new Continuation();
var wk = this.woody.makeWebContinuation(k, lastWebCont, timeToLive);
- var bizData = { "woody-form": this.form };
+ var bizData = { "woody-form": this.form, "locale" : locale };
this.lastWebContinuation = wk;
this.woody.forwardTo(uri, bizData, wk);
Woody.suicide();
1.6 +34 -16
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/WidgetReplacingPipe.java
Index: WidgetReplacingPipe.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/WidgetReplacingPipe.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- WidgetReplacingPipe.java 25 Jul 2003 11:23:10 -0000 1.5
+++ WidgetReplacingPipe.java 26 Jul 2003 14:05:05 -0000 1.6
@@ -62,7 +62,7 @@
import org.apache.cocoon.woody.formmodel.Widget;
import org.apache.cocoon.woody.formmodel.Form;
import org.apache.cocoon.xml.AbstractXMLPipe;
-import org.apache.commons.jxpath.JXPathContext;
+import org.apache.cocoon.i18n.I18nUtils;
import org.apache.commons.jxpath.JXPathException;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -105,14 +105,15 @@
protected Widget widget;
/** Boolean indicating wether the current widget requires special
repeater-treatement. */
protected boolean repeaterWidget;
+
protected WoodyTemplateTransformer.InsertStylingContentHandler
stylingHandler = new WoodyTemplateTransformer.InsertStylingContentHandler();
- protected JXPathContext jxpathContext;
+ protected WoodyTemplateTransformer pipeContext;
- public void init(Widget contextWidget, JXPathContext jxpathContext) {
+ public void init(Widget contextWidget, WoodyTemplateTransformer
pipeContext) {
this.contextWidget = contextWidget;
inWidgetElement = false;
elementNestingCounter = 0;
- this.jxpathContext = jxpathContext;
+ this.pipeContext = pipeContext;
}
public void startElement(String namespaceURI, String localName, String
qName, Attributes attributes)
@@ -159,10 +160,7 @@
throw new SAXException("Detected nested wt:form-template
elements, this is not allowed.");
contentHandler.startPrefixMapping(Constants.WI_PREFIX,
Constants.WI_NS);
- // Note: since the wt:form-template element is the top-level
element in which
- // all other widget elements must be nested, we can safely
assume here that this
- // instance of the WidgetReplacingPipe ==
WoodyTemplateTransformer
- WoodyTemplateTransformer wtt =
(WoodyTemplateTransformer)this;
+ // ====> Retrieve the form
// first look for the form using the location attribute, if
any
String formJXPath = attributes.getValue("location");
@@ -172,21 +170,21 @@
attrsCopy.removeAttribute(attributes.getIndex("location"));
attributes = attrsCopy;
- Object form = jxpathContext.getValue(formJXPath);
+ Object form =
pipeContext.getJXPathContext().getValue(formJXPath);
if (form == null)
throw new SAXException("No form found at location
\"" + formJXPath + "\".");
if (!(form instanceof Form))
throw new SAXException("Object returned by
expression \"" + formJXPath + "\" is not a Woody Form.");
contextWidget = (Form)form;
- } else if (wtt.attributeName != null) { // then see if an
attribute-name was specified
- contextWidget =
(Form)wtt.request.getAttribute(wtt.attributeName);
+ } else if (pipeContext.getAttributeName() != null) { // then
see if an attribute-name was specified
+ contextWidget =
(Form)pipeContext.getRequest().getAttribute(pipeContext.getAttributeName());
if (contextWidget == null)
- throw new SAXException("No form found in request
attribute with name \"" + wtt.attributeName);
+ throw new SAXException("No form found in request
attribute with name \"" + pipeContext.getAttributeName());
} else { // and then see if we got a form from the flow
formJXPath = "/" + WoodyTemplateTransformer.WOODY_FORM;
Object form = null;
try {
- form = jxpathContext.getValue(formJXPath);
+ form =
pipeContext.getJXPathContext().getValue(formJXPath);
} catch (JXPathException e) {}
if (form != null)
contextWidget = (Form)form;
@@ -194,6 +192,26 @@
throw new SAXException("No Woody form found.");
}
+ // ====> Determine the Locale
+
+ String localeAttr = attributes.getValue("locale");
+ if (localeAttr != null) { // first use value of locale
attribute if any
+ localeAttr = translateText(localeAttr);
+ pipeContext.setLocale(I18nUtils.parseLocale(localeAttr));
+ } else if (pipeContext.getLocaleParameter() != null) { //
then use locale specified as transformer parameter, if any
+ pipeContext.setLocale(pipeContext.getLocaleParameter());
+ } else { // use locale specified in bizdata supplied for form
+ String localeJXPath = "/locale";
+ Object locale = null;
+ try {
+ locale =
pipeContext.getJXPathContext().getValue(localeJXPath);
+ } catch (JXPathException e) {}
+ if (locale != null)
+ pipeContext.setLocale((Locale)locale);
+ else // final solution: use US locale
+ pipeContext.setLocale(Locale.getDefault());
+ }
+
String[] namesToTranslate = {"action"};
Attributes transAtts = translateAttributes(attributes,
namesToTranslate);
contentHandler.startElement(Constants.WI_NS ,
FORM_TEMPLATE_EL, Constants.WI_PREFIX_COLON + FORM_TEMPLATE_EL, transAtts);
@@ -271,7 +289,7 @@
}
private String evaluateExpression(String expression) {
- return jxpathContext.getValue(expression).toString();
+ return
pipeContext.getJXPathContext().getValue(expression).toString();
}
protected Widget getWidget(Attributes attributes) throws SAXException {
@@ -298,7 +316,7 @@
Object saxFragment = xmlCompiler.getSAXFragment();
for (int i = 0; i < rowCount; i++) {
Repeater.RepeaterRow row = repeater.getRow(i);
- rowPipe.init(row, jxpathContext);
+ rowPipe.init(row, pipeContext);
rowPipe.setContentHandler(contentHandler);
rowPipe.setLexicalHandler(lexicalHandler);
interpreter.setConsumer(rowPipe);
@@ -312,7 +330,7 @@
stylingHandler.setContentHandler(contentHandler);
stylingHandler.setLexicalHandler(lexicalHandler);
contentHandler.startPrefixMapping(Constants.WI_PREFIX,
Constants.WI_NS);
- widget.generateSaxFragment(stylingHandler, Locale.US /* TODO
take locale from transformer parameter */);
+ widget.generateSaxFragment(stylingHandler,
pipeContext.getLocale());
contentHandler.endPrefixMapping(Constants.WI_PREFIX);
}
1.4 +46 -3
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/WoodyTemplateTransformer.java
Index: WoodyTemplateTransformer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/WoodyTemplateTransformer.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- WoodyTemplateTransformer.java 25 Jul 2003 09:07:46 -0000 1.3
+++ WoodyTemplateTransformer.java 26 Jul 2003 14:05:05 -0000 1.4
@@ -52,9 +52,11 @@
import java.io.IOException;
import java.util.Map;
+import java.util.Locale;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.i18n.I18nUtils;
import org.apache.cocoon.components.flow.FlowHelper;
import org.apache.cocoon.components.flow.WebContinuation;
import org.apache.cocoon.environment.ObjectModelHelper;
@@ -72,8 +74,13 @@
public class WoodyTemplateTransformer extends WidgetReplacingPipe implements
Transformer {
/** Name of the request attribute under which the Woody form is stored
(optional). */
- protected String attributeName;
- protected Request request;
+ private String attributeName;
+ private Request request;
+ private JXPathContext jxpathContext;
+ /** Containts locale specified as a parameter to the transformer, if
any. */
+ private Locale localeParameter;
+ /** The locale currently used by the transformer. */
+ private Locale locale;
public void setup(SourceResolver resolver, Map objectModel, String src,
Parameters parameters)
throws ProcessingException, SAXException, IOException {
@@ -94,6 +101,42 @@
this.attributeName = parameters.getParameter("attribute-name", null);
this.request = request;
- init(null, jxpathContext);
+ String localeStr = parameters.getParameter("locale", null);
+ if (localeStr != null)
+ localeParameter = I18nUtils.parseLocale(localeStr);
+
+ init(null, this);
+ }
+
+ public JXPathContext getJXPathContext() {
+ return jxpathContext;
+ }
+
+ public String getAttributeName() {
+ return attributeName;
+ }
+
+ public Request getRequest() {
+ return request;
+ }
+
+ public JXPathContext getJxpathContext() {
+ return jxpathContext;
+ }
+
+ public void setJxpathContext(JXPathContext jxpathContext) {
+ this.jxpathContext = jxpathContext;
+ }
+
+ public Locale getLocale() {
+ return locale;
+ }
+
+ public void setLocale(Locale locale) {
+ this.locale = locale;
+ }
+
+ public Locale getLocaleParameter() {
+ return localeParameter;
}
}
1.4 +33 -22
cocoon-2.1/src/blocks/woody/samples/flow/woody_flow_example.js
Index: woody_flow_example.js
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/woody/samples/flow/woody_flow_example.js,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- woody_flow_example.js 22 Jul 2003 20:58:41 -0000 1.3
+++ woody_flow_example.js 26 Jul 2003 14:05:05 -0000 1.4
@@ -1,6 +1,7 @@
cocoon.load("resource://org/apache/cocoon/woody/flow/javascript/woody.js");
function form1(form) {
+ var locale = determineLocale();
var model = form.getModel();
model.email = "[EMAIL PROTECTED]";
model.somebool = true;
@@ -15,31 +16,41 @@
model.contacts[2].firstname = "Chris";
model.drinks = ["Jupiler", "Coca Cola"];
- form.show("form1-display-pipeline", function(form) {
- print("submitId="+form.getSubmitId());
- switch(form.getSubmitId()) {
- case "remove-selected-contacts":
- {
- for (var i = model.contacts.length-1; i >= 0; i--) {
- if (model.contacts[i].select) {
- model.contacts.remove(i);
- }
- }
- }
- break;
- case "add-contact":
- {
- model.contacts.length++;
- }
- break;
- default:
- return true;
- }
- return false;
- });
+ form.show("form1-display-pipeline", formHandler, locale);
print("visa="+model.visa);
cocoon.sendPage("form1-success-pipeline");
form.finish();
+}
+
+function formHandler(form) {
+ print("submitId="+form.getSubmitId());
+ switch(form.getSubmitId()) {
+ case "remove-selected-contacts":
+ {
+ for (var i = model.contacts.length-1; i >= 0; i--) {
+ if (model.contacts[i].select) {
+ model.contacts.remove(i);
+ }
+ }
+ }
+ break;
+ case "add-contact":
+ {
+ model.contacts.length++;
+ }
+ break;
+ default:
+ return true;
+ }
+ return false;
+}
+
+function determineLocale() {
+ var localeParam = cocoon.request.get("locale");
+ if (localeParam != null && localeParam.length > 0) {
+ return
Packages.org.apache.cocoon.i18n.I18nUtils.parseLocale(localeParam);
+ }
+ return null;
}