You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by mp...@apache.org on 2003/12/29 16:37:28 UTC
cvs commit: cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation WoodyPipelineConfig.java WidgetReplacingPipe.java EffectWidgetReplacingPipe.java
mpo 2003/12/29 07:37:28
Modified: src/blocks/woody/java/org/apache/cocoon/woody/transformation
WoodyPipelineConfig.java WidgetReplacingPipe.java
EffectWidgetReplacingPipe.java
Log:
Hiding the jxpathContext inside the pipeline-config.
More reuse of the code accross Woody-pipeline-components.
(similar work TBD on the Locale)
PR:
Obtained from:
Submitted by:
Reviewed by:
CVS: ----------------------------------------------------------------------
CVS: PR:
CVS: If this change addresses a PR in the problem report tracking
CVS: database, then enter the PR number(s) here.
CVS: Obtained from:
CVS: If this change has been taken from another system, such as NCSA,
CVS: then name the system in this line, otherwise delete it.
CVS: Submitted by:
CVS: If this code has been contributed to Apache by someone else; i.e.,
CVS: they sent us a patch or a new module, then include their name/email
CVS: address here. If this is your work then delete this line.
CVS: Reviewed by:
CVS: If we are doing pre-commit code reviews and someone else has
CVS: reviewed your changes, include their name(s) here.
CVS: If you have not had it reviewed then delete this line.
Revision Changes Path
1.2 +140 -21 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/WoodyPipelineConfig.java
Index: WoodyPipelineConfig.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/WoodyPipelineConfig.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- WoodyPipelineConfig.java 23 Dec 2003 08:46:17 -0000 1.1
+++ WoodyPipelineConfig.java 29 Dec 2003 15:37:28 -0000 1.2
@@ -50,6 +50,8 @@
*/
package org.apache.cocoon.woody.transformation;
+import java.io.IOException;
+import java.io.StringReader;
import java.util.Locale;
import java.util.Map;
@@ -61,9 +63,11 @@
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.i18n.I18nUtils;
import org.apache.cocoon.woody.formmodel.Form;
+import org.apache.cocoon.xml.AttributesImpl;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.JXPathException;
import org.apache.commons.jxpath.Variables;
+import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
@@ -96,16 +100,39 @@
* The locale currently used by the transformer. */
private Locale locale;
+ /**
+ * Value for the action attribute of the form.
+ */
+ private String formAction;
+
+ /**
+ * Value for the method attribute of the form.
+ */
+ private String formMethod;
+
+
- private WoodyPipelineConfig(String attName, Request req, JXPathContext jxpc, Locale localeParam) {
+ private WoodyPipelineConfig(JXPathContext jxpc, Request req, Locale localeParam,
+ String attName, String actionExpression, String method) {
this.attributeName = attName;
this.request = req;
this.jxpathContext =jxpc;
this.localeParameter = localeParam;
+ this.formAction = translateText(actionExpression);
+ this.formMethod = method;
}
+ /**
+ * Creates and initializes a WoodyPipelineConfig object based on the passed
+ * arguments of the setup() of the specific Pipeline-component.
+ *
+ * @param objectModel the objectmodel as passed in the setup()
+ * @param parameters the parameters as passed in the setup()
+ * @return an instance of WoodyPipelineConfig initialized according to the
+ * settings in the sitemap.
+ */
public static WoodyPipelineConfig createConfig(Map objectModel, Parameters parameters) {
// create and set the jxpathContext...
Object flowContext = FlowHelper.getContextObject(objectModel);
@@ -119,15 +146,21 @@
vars.declareVariable("session", session);
vars.declareVariable("parameters", parameters);
- String attributeName = parameters.getParameter("attribute-name", null);
-
Locale localeParameter = null;
String localeStr = parameters.getParameter("locale", null);
if (localeStr != null) {
localeParameter = I18nUtils.parseLocale(localeStr);
}
+
+ String attributeName = parameters.getParameter("attribute-name", null);
+ String actionExpression = parameters.getParameter("form-action", null);
+ String formMethod = parameters.getParameter("form-method", "POST");
+ //TODO (20031223 mpo)think about adding form-encoding for the Generator.
+ // Note generator will also need some text to go on the submit-button?
+ // Alternative to adding more here is to apply xinclude ?
- return new WoodyPipelineConfig(attributeName, request, jxpc, localeParameter);
+ return new WoodyPipelineConfig(jxpc, request, localeParameter,
+ attributeName, actionExpression, formMethod);
}
@@ -193,26 +226,76 @@
}
}
- public JXPathContext getJXPathContext() {
- return jxpathContext;
- }
-
- public String getAttributeName() {
- return attributeName;
- }
-
- public Request getRequest() {
- return request;
- }
-
- public JXPathContext getJxpathContext() {
- return jxpathContext;
+ /**
+ * Replaces JXPath expressions embedded inside #{ and } by their value.
+ * This will parse the passed String looking for #{} occurances and then
+ * uses the {@see #evaluateExpression(String)} to evaluate the found expression.
+ *
+ * @return the original String with it's #{}-parts replaced by the evaulated results.
+ */
+ public String translateText(String original) {
+ if (original==null) {
+ return null;
+ }
+
+ StringBuffer expression;
+ StringBuffer translated = new StringBuffer();
+ StringReader in = new StringReader(original);
+ int chr;
+ try {
+ while ((chr = in.read()) != -1) {
+ char c = (char) chr;
+ if (c == '#') {
+ chr = in.read();
+ if (chr != -1) {
+ c = (char) chr;
+ if (c == '{') {
+ expression = new StringBuffer();
+ boolean more = true;
+ while ( more ) {
+ more = false;
+ if ((chr = in.read()) != -1) {
+ c = (char)chr;
+ if (c != '}') {
+ expression.append(c);
+ more = true;
+ } else {
+ translated.append(evaluateExpression(expression.toString()).toString());
+ }
+ } else {
+ translated.append('#').append('{').append(expression);
+ }
+ }
+ }
+ } else {
+ translated.append((char) chr);
+ }
+ } else {
+ translated.append(c);
+ }
+ }
+ } catch (IOException ignored) {
+ ignored.printStackTrace();
+ }
+ return translated.toString();
}
-// public void setJxpathContext(JXPathContext jxpathContext) {
-// this.jxpathContext = jxpathContext;
-// }
+ /**
+ * Evaluates the passed xpath expression using the internal jxpath context
+ * holding the declared variables:
+ * <ol><li>continuation: as made available by flowscript</li>
+ * <li>request: as present in the cocoon processing environment</li>
+ * <li>session: as present in the cocoon processing environment</li>
+ * <li>parameters: as present in the cocoon sitemap node of the pipeline component</li></ol>
+ *
+ * @param expression
+ * @return the object-value resulting the expression evaluation.
+ */
+ public Object evaluateExpression(String expression) {
+ return this.jxpathContext.getValue(expression);
+ }
+
public Locale getLocale() {
return locale;
}
@@ -225,6 +308,42 @@
return localeParameter;
}
+ /**
+ * The value for the wi:form-generated/@action.
+ * Note: wi:form-template copies this from its wt:form-template counterpart.
+ *
+ * @return the {@see #translateText(String)} result of the 'form-action' sitemap
+ * parameter to the pipeline component, or null if that parameter was not set.
+ */
+ public String getFormAction() {
+ return formAction;
+ }
+ /**
+ * The value for the wi:form-generated/@method.
+ * Note: wi:form-template copies this from its wt:form-template counterpart.
+ *
+ * @return the value of the 'form-method' sitemap parameter to the pipeline
+ * component. Defaults to 'POST' if it was not set.
+ */
+ public String getFormMethod() {
+ return formMethod;
+ }
+
+ /**
+ * The grouped attributes to set on the wi:form-generated element.
+ * Note: wi:form-template copies this from its wt:form-template counterpart.
+ *
+ * @see #getFormAction()
+ * @see #getFormMethod()
+ */
+ public Attributes getFormAttributes() {
+ AttributesImpl formAtts = new AttributesImpl();
+ if (getFormAction() != null) {
+ formAtts.addCDATAAttribute("action", getFormAction());
+ }
+ formAtts.addCDATAAttribute("method", getFormMethod());
+ return formAtts;
+ }
}
1.22 +5 -56 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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- WidgetReplacingPipe.java 29 Dec 2003 06:14:49 -0000 1.21
+++ WidgetReplacingPipe.java 29 Dec 2003 15:37:28 -0000 1.22
@@ -50,8 +50,6 @@
*/
package org.apache.cocoon.woody.transformation;
-import java.io.IOException;
-import java.io.StringReader;
import java.util.Locale;
import org.apache.avalon.excalibur.pool.Recyclable;
@@ -216,14 +214,14 @@
String localeAttr = attributes.getValue("locale");
if (localeAttr != null) { // first use value of locale attribute if any
- localeAttr = translateText(localeAttr);
+ localeAttr = pipeContext.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
Object locale = null;
try {
- locale = pipeContext.getJXPathContext().getValue("/locale");
+ locale = pipeContext.evaluateExpression("/locale");
} catch (JXPathException e) {}
if (locale != null) {
pipeContext.setLocale((Locale)locale);
@@ -241,7 +239,7 @@
} else if (localName.equals(CONTINUATION_ID)){
// Insert the continuation id
// FIXME(SW) we could avoid costly JXPath evaluation if we had the objectmodel here.
- Object idObj = pipeContext.getJXPathContext().getValue("$continuation/id");
+ Object idObj = pipeContext.evaluateExpression("$continuation/id");
if (idObj == null) {
throw new SAXException("No continuation found");
}
@@ -271,62 +269,13 @@
for (int i = 0; i < names.length; i++) {
String name = names[i];
int position = newAtts.getIndex(name);
- String newValue = translateText(newAtts.getValue(position));
+ String newValue = pipeContext.translateText(newAtts.getValue(position));
newAtts.setValue(position, newValue);
}
}
return newAtts;
}
- /**
- * Replaces JXPath expressions embedded inside #{ and } by their value.
- */
- private String translateText(String original) {
- StringBuffer expression;
- StringBuffer translated = new StringBuffer();
- StringReader in = new StringReader(original);
- int chr;
- try {
- while ((chr = in.read()) != -1) {
- char c = (char) chr;
- if (c == '#') {
- chr = in.read();
- if (chr != -1) {
- c = (char) chr;
- if (c == '{') {
- expression = new StringBuffer();
- boolean more = true;
- while ( more ) {
- more = false;
- if ((chr = in.read()) != -1) {
- c = (char)chr;
- if (c != '}') {
- expression.append(c);
- more = true;
- } else {
- translated.append(evaluateExpression(expression.toString()));
- }
- } else {
- translated.append('#').append('{').append(expression);
- }
- }
- }
- } else {
- translated.append((char) chr);
- }
- } else {
- translated.append(c);
- }
- }
- } catch (IOException ignored) {
- ignored.printStackTrace();
- }
- return translated.toString();
- }
-
- private String evaluateExpression(String expression) {
- return pipeContext.getJXPathContext().getValue(expression).toString();
- }
protected Widget getWidget(Attributes attributes) throws SAXException {
String widgetId = attributes.getValue("id");
1.2 +58 -57 cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/EffectWidgetReplacingPipe.java
Index: EffectWidgetReplacingPipe.java
===================================================================
RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/transformation/EffectWidgetReplacingPipe.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EffectWidgetReplacingPipe.java 29 Dec 2003 06:14:49 -0000 1.1
+++ EffectWidgetReplacingPipe.java 29 Dec 2003 15:37:28 -0000 1.2
@@ -50,8 +50,6 @@
*/
package org.apache.cocoon.woody.transformation;
-import java.io.IOException;
-import java.io.StringReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Locale;
@@ -64,6 +62,7 @@
import org.apache.cocoon.woody.formmodel.Struct;
import org.apache.cocoon.woody.formmodel.Union;
import org.apache.cocoon.woody.formmodel.Widget;
+import org.apache.cocoon.woody.transformation.EffectPipe.Handler;
import org.apache.cocoon.xml.AbstractXMLPipe;
import org.apache.cocoon.xml.SaxBuffer;
import org.apache.commons.jxpath.JXPathException;
@@ -281,14 +280,16 @@
//TODO pull this locale stuff also up in the Config object?
String localeAttr = input.attrs.getValue("locale");
if (localeAttr != null) { // first use value of locale attribute if any
- localeAttr = translateText(localeAttr);
+ localeAttr = pipeContext.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
+ } else {
+ //TODO pull this locale stuff also up in the Config object?
+ // use locale specified in bizdata supplied for form
Object locale = null;
try {
- locale = pipeContext.getJXPathContext().getValue("/locale");
+ locale = pipeContext.evaluateExpression("/locale");
} catch (JXPathException e) {}
if (locale != null) {
pipeContext.setLocale((Locale)locale);
@@ -597,7 +598,7 @@
case EVENT_START_ELEMENT:
// Insert the continuation id
// FIXME(SW) we could avoid costly JXPath evaluation if we had the objectmodel here.
- Object idObj = pipeContext.getJXPathContext().getValue("$continuation/id");
+ Object idObj = pipeContext.evaluateExpression("$continuation/id");
if (idObj == null) {
throwSAXException("No continuation found");
}
@@ -625,62 +626,62 @@
for (int i = 0; i < names.length; i++) {
String name = names[i];
int position = newAtts.getIndex(name);
- String newValue = translateText(newAtts.getValue(position));
+ String newValue = pipeContext.translateText(newAtts.getValue(position));
newAtts.setValue(position, newValue);
}
}
return newAtts;
}
- /**
- * Replaces JXPath expressions embedded inside #{ and } by their value.
- */
- private String translateText(String original) {
- StringBuffer expression;
- StringBuffer translated = new StringBuffer();
- StringReader in = new StringReader(original);
- int chr;
- try {
- while ((chr = in.read()) != -1) {
- char c = (char) chr;
- if (c == '#') {
- chr = in.read();
- if (chr != -1) {
- c = (char) chr;
- if (c == '{') {
- expression = new StringBuffer();
- boolean more = true;
- while ( more ) {
- more = false;
- if ((chr = in.read()) != -1) {
- c = (char)chr;
- if (c != '}') {
- expression.append(c);
- more = true;
- } else {
- translated.append(evaluateExpression(expression.toString()));
- }
- } else {
- translated.append('#').append('{').append(expression);
- }
- }
- }
- } else {
- translated.append((char) chr);
- }
- } else {
- translated.append(c);
- }
- }
- } catch (IOException ignored) {
- ignored.printStackTrace();
- }
- return translated.toString();
- }
-
- private String evaluateExpression(String expression) {
- return pipeContext.getJXPathContext().getValue(expression).toString();
- }
+// /**
+// * Replaces JXPath expressions embedded inside #{ and } by their value.
+// */
+// private String translateText(String original) {
+// StringBuffer expression;
+// StringBuffer translated = new StringBuffer();
+// StringReader in = new StringReader(original);
+// int chr;
+// try {
+// while ((chr = in.read()) != -1) {
+// char c = (char) chr;
+// if (c == '#') {
+// chr = in.read();
+// if (chr != -1) {
+// c = (char) chr;
+// if (c == '{') {
+// expression = new StringBuffer();
+// boolean more = true;
+// while ( more ) {
+// more = false;
+// if ((chr = in.read()) != -1) {
+// c = (char)chr;
+// if (c != '}') {
+// expression.append(c);
+// more = true;
+// } else {
+// translated.append(evaluateExpression(expression.toString()));
+// }
+// } else {
+// translated.append('#').append('{').append(expression);
+// }
+// }
+// }
+// } else {
+// translated.append((char) chr);
+// }
+// } else {
+// translated.append(c);
+// }
+// }
+// } catch (IOException ignored) {
+// ignored.printStackTrace();
+// }
+// return translated.toString();
+// }
+
+// private String evaluateExpression(String expression) {
+// return pipeContext.evaluateExpression(expression).toString();
+// }
public void recycle() {
super.recycle();