You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by da...@apache.org on 2004/12/13 23:25:08 UTC
svn commit: r111751 - in cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script: . event
Author: danielf
Date: Mon Dec 13 14:25:06 2004
New Revision: 111751
URL: http://svn.apache.org/viewcvs?view=rev&rev=111751
Log:
Refactored out most of the code that constructs executable tags from the Parser to the constructors of the tags.
Modified:
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.java Mon Dec 13 14:25:06 2004
@@ -131,23 +131,6 @@
EndInstruction endInstruction = new EndInstruction(locator,
startInstruction);
newEvent = endInstruction;
- if (start instanceof StartWhen) {
- StartWhen startWhen = (StartWhen) start;
- StartChoose startChoose = (StartChoose) stack.peek();
- if (startChoose.getFirstChoice() != null) {
- StartWhen w = startChoose.getFirstChoice();
- while (w.getNextChoice() != null) {
- w = w.getNextChoice();
- }
- w.setNextChoice(startWhen);
- } else {
- startChoose.setFirstChoice(startWhen);
- }
- } else if (start instanceof StartOtherwise) {
- StartOtherwise startOtherwise = (StartOtherwise) start;
- StartChoose startChoose = (StartChoose) stack.peek();
- startChoose.setOtherwise(startOtherwise);
- }
} else {
StartElement startElement = (StartElement) start;
newEvent = new EndElement(locator, startElement);
@@ -211,234 +194,39 @@
localName, qname, elementAttributes);
if (JXTemplateGenerator.NS.equals(namespaceURI)) {
if (localName.equals(FOR_EACH)) {
- String items = attrs.getValue("items");
- String select = attrs.getValue("select");
- JXTExpression begin = compileInt(attrs.getValue("begin"),
- FOR_EACH, locator);
- JXTExpression end = compileInt(attrs.getValue("end"), FOR_EACH,
- locator);
- JXTExpression step = compileInt(attrs.getValue("step"),
- FOR_EACH, locator);
- JXTExpression var = compileExpr(attrs.getValue("var"), null,
- locator);
- JXTExpression varStatus = compileExpr(attrs
- .getValue("varStatus"), null, locator);
- if (items == null) {
- if (select == null && (begin == null || end == null)) {
- throw new SAXParseException(
- "forEach: \"select\", \"items\", or both \"begin\" and \"end\" must be specified",
- locator, null);
- }
- } else if (select != null) {
- throw new SAXParseException(
- "forEach: only one of \"select\" or \"items\" may be specified",
- locator, null);
- }
- JXTExpression expr = compileExpr(
- items == null ? select : items, null, locator);
- String lenientValue = attrs.getValue("lenient");
- Boolean lenient = (lenientValue == null) ? null : Boolean
- .valueOf(lenientValue);
- StartForEach startForEach = new StartForEach(startElement,
- expr, var, varStatus, begin, end, step, lenient);
- newEvent = startForEach;
+ newEvent = new StartForEach(startElement, attrs, stack);
} else if (localName.equals(FORMAT_NUMBER)) {
- JXTExpression value = compileExpr(attrs.getValue("value"),
- null, locator);
- JXTExpression type = compileExpr(attrs.getValue("type"), null,
- locator);
- JXTExpression pattern = compileExpr(attrs.getValue("pattern"),
- null, locator);
- JXTExpression currencyCode = compileExpr(attrs
- .getValue("currencyCode"), null, locator);
- JXTExpression currencySymbol = compileExpr(attrs
- .getValue("currencySymbol"), null, locator);
- JXTExpression isGroupingUsed = compileBoolean(attrs
- .getValue("isGroupingUsed"), null, locator);
- JXTExpression maxIntegerDigits = compileInt(attrs
- .getValue("maxIntegerDigits"), null, locator);
- JXTExpression minIntegerDigits = compileInt(attrs
- .getValue("minIntegerDigits"), null, locator);
- JXTExpression maxFractionDigits = compileInt(attrs
- .getValue("maxFractionDigits"), null, locator);
- JXTExpression minFractionDigits = compileInt(attrs
- .getValue("minFractionDigits"), null, locator);
- JXTExpression var = compileExpr(attrs.getValue("var"), null,
- locator);
- JXTExpression locale = compileExpr(attrs.getValue("locale"),
- null, locator);
- StartFormatNumber startFormatNumber = new StartFormatNumber(
- startElement, var, value, type, pattern, currencyCode,
- currencySymbol, isGroupingUsed, maxIntegerDigits,
- minIntegerDigits, maxFractionDigits, minFractionDigits,
- locale);
- newEvent = startFormatNumber;
+ newEvent = new StartFormatNumber(startElement, attrs, stack);
} else if (localName.equals(FORMAT_DATE)) {
- JXTExpression var = compileExpr(attrs.getValue("var"), null,
- locator);
- JXTExpression value = compileExpr(attrs.getValue("value"),
- null, locator);
- JXTExpression type = compileExpr(attrs.getValue("type"), null,
- locator);
- JXTExpression pattern = compileExpr(attrs.getValue("pattern"),
- null, locator);
- JXTExpression timeZone = compileExpr(
- attrs.getValue("timeZone"), null, locator);
- JXTExpression dateStyle = compileExpr(attrs
- .getValue("dateStyle"), null, locator);
- JXTExpression timeStyle = compileExpr(attrs
- .getValue("timeStyle"), null, locator);
- JXTExpression locale = compileExpr(attrs.getValue("locale"),
- null, locator);
- StartFormatDate startFormatDate = new StartFormatDate(
- startElement, var, value, type, pattern, timeZone,
- dateStyle, timeStyle, locale);
- newEvent = startFormatDate;
+ newEvent = new StartFormatDate(startElement, attrs, stack);
} else if (localName.equals(CHOOSE)) {
- StartChoose startChoose = new StartChoose(startElement);
- newEvent = startChoose;
+ newEvent = new StartChoose(startElement, attrs, stack);
} else if (localName.equals(WHEN)) {
- if (stack.size() == 0 || !(stack.peek() instanceof StartChoose)) {
- throw new SAXParseException(
- "<when> must be within <choose>", locator, null);
- }
- String test = attrs.getValue("test");
- if (test != null) {
- JXTExpression expr = compileExpr(test, "when: \"test\": ",
- locator);
- StartWhen startWhen = new StartWhen(startElement, expr);
- newEvent = startWhen;
- } else {
- throw new SAXParseException("when: \"test\" is required",
- locator, null);
- }
+ newEvent = new StartWhen(startElement, attrs, stack);
} else if (localName.equals(OUT)) {
- String value = attrs.getValue("value");
- if (value != null) {
- JXTExpression expr = compileExpr(value, "out: \"value\": ",
- locator);
- String lenientValue = attrs.getValue("lenient");
- Boolean lenient = lenientValue == null ? null : Boolean
- .valueOf(lenientValue);
- newEvent = new StartOut(startElement, expr, lenient);
- } else {
- throw new SAXParseException("out: \"value\" is required",
- locator, null);
- }
+ newEvent = new StartOut(startElement, attrs, stack);
} else if (localName.equals(OTHERWISE)) {
- if (stack.size() != 0 && (stack.peek() instanceof StartChoose)) {
- StartOtherwise startOtherwise = new StartOtherwise(
- startElement);
- newEvent = startOtherwise;
- } else {
- throw new SAXParseException(
- "<otherwise> must be within <choose>", locator,
- null);
- }
+ newEvent = new StartOtherwise(startElement, attrs, stack);
} else if (localName.equals(IF)) {
- String test = attrs.getValue("test");
- if (test != null) {
- JXTExpression expr = compileExpr(test, "if: \"test\": ",
- locator);
- StartIf startIf = new StartIf(startElement, expr);
- newEvent = startIf;
- } else {
- throw new SAXParseException("if: \"test\" is required",
- locator, null);
- }
+ newEvent = new StartIf(startElement, attrs, stack);
} else if (localName.equals(MACRO)) {
- // <macro name="myTag" targetNamespace="myNamespace">
- // <parameter name="paramName" required="Boolean"
- // default="value"/>
- // body
- // </macro>
- String namespace = StringUtils.defaultString(attrs
- .getValue("targetNamespace"));
- String name = attrs.getValue("name");
- if (name != null) {
- StartDefine startDefine = new StartDefine(startElement,
- namespace, name);
- newEvent = startDefine;
- } else {
- throw new SAXParseException("macro: \"name\" is required",
- locator, null);
- }
+ newEvent = new StartDefine(startElement, attrs, stack);
} else if (localName.equals(PARAMETER)) {
- if (stack.size() == 0 || !(stack.peek() instanceof StartDefine)) {
- throw new SAXParseException("<parameter> not allowed here",
- locator, null);
- } else {
- String name = attrs.getValue("name");
- String optional = attrs.getValue("optional");
- String default_ = attrs.getValue("default");
- if (name != null) {
- StartParameter startParameter = new StartParameter(
- startElement, name, optional, default_);
- newEvent = startParameter;
- } else {
- throw new SAXParseException(
- "parameter: \"name\" is required", locator,
- null);
- }
- }
+ newEvent = new StartParameter(startElement, attrs, stack);
} else if (localName.equals(EVALBODY)) {
- newEvent = new StartEvalBody(startElement);
+ newEvent = new StartEvalBody(startElement, attrs, stack);
} else if (localName.equals(EVAL)) {
- String value = attrs.getValue("select");
- JXTExpression valueExpr = compileExpr(value,
- "eval: \"select\":", locator);
- newEvent = new StartEval(startElement, valueExpr);
+ newEvent = new StartEval(startElement, attrs, stack);
} else if (localName.equals(SET)) {
- String var = attrs.getValue("var");
- String value = attrs.getValue("value");
- JXTExpression varExpr = null;
- JXTExpression valueExpr = null;
- if (var != null) {
- varExpr = compileExpr(var, "set: \"var\":", locator);
- }
- if (value != null) {
- valueExpr = compileExpr(value, "set: \"value\":", locator);
- }
- StartSet startSet = new StartSet(startElement, varExpr,
- valueExpr);
- newEvent = startSet;
+ newEvent = new StartSet(startElement, attrs, stack);
} else if (localName.equals(IMPORT)) {
- // <import uri="${root}/foo/bar.xml" context="${foo}"/>
- AttributeEvent uri = null;
- Iterator iter = startElement.getAttributeEvents().iterator();
- while (iter.hasNext()) {
- AttributeEvent e = (AttributeEvent) iter.next();
- if (e.getLocalName().equals("uri")) {
- uri = e;
- break;
- }
- }
- if (uri != null) {
- // If "context" is present then its value will be used
- // as the context object in the imported template
- String select = attrs.getValue("context");
- JXTExpression expr = null;
- if (select != null) {
- expr = compileExpr(select, "import: \"context\": ",
- locator);
- }
- StartImport startImport = new StartImport(startElement,
- uri, expr);
- newEvent = startImport;
- } else {
- throw new SAXParseException("import: \"uri\" is required",
- locator, null);
- }
+ newEvent = new StartImport(startElement, attrs, stack);
} else if (localName.equals(TEMPLATE)) {
- StartTemplate startTemplate = new StartTemplate(startElement);
- newEvent = startTemplate;
+ newEvent = new StartTemplate(startElement, attrs, stack);
} else if (localName.equals(COMMENT)) {
- // <jx:comment>This will be parsed</jx:comment>
- StartComment startJXComment = new StartComment(startElement);
- newEvent = startJXComment;
+ newEvent = new StartComment(startElement, attrs, stack);
} else {
- throw new SAXParseException("unrecognized tag: " + localName,
- locator, null);
+ throw new SAXParseException("unrecognized tag: " + localName, locator, null);
}
} else {
newEvent = startElement;
@@ -582,4 +370,4 @@
location, new ErrorHolder(err));
}
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartChoose.java Mon Dec 13 14:25:06 2004
@@ -15,8 +15,16 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+
public class StartChoose extends StartInstruction {
- public StartChoose(StartElement raw) {
+
+ private StartWhen firstChoice;
+ private StartOtherwise otherwise;
+
+ public StartChoose(StartElement raw, Attributes attrs, Stack stack) {
super(raw);
}
@@ -35,7 +43,4 @@
public StartOtherwise getOtherwise() {
return otherwise;
}
-
- private StartWhen firstChoice;
- private StartOtherwise otherwise;
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartComment.java Mon Dec 13 14:25:06 2004
@@ -15,8 +15,13 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+
public class StartComment extends StartInstruction {
- public StartComment(StartElement raw) {
+ public StartComment(StartElement raw, Attributes attrs, Stack stack) {
+ // <jx:comment>This will be parsed</jx:comment>
super(raw);
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartDefine.java Mon Dec 13 14:25:06 2004
@@ -17,18 +17,16 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.Stack;
+import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.apache.commons.lang.StringUtils;
+import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class StartDefine extends StartInstruction {
- public StartDefine(StartElement raw, String namespace, String name) {
- super(raw);
- this.namespace = namespace;
- this.name = name;
- this.qname = "{" + namespace + "}" + name;
- this.parameters = new HashMap();
- }
final String name;
final String namespace;
@@ -36,6 +34,26 @@
private final Map parameters;
private Event body;
+ public StartDefine(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
+ super(raw);
+
+ // <macro name="myTag" targetNamespace="myNamespace">
+ // <parameter name="paramName" required="Boolean"
+ // default="value"/>
+ // body
+ // </macro>
+ this.namespace = StringUtils.defaultString(attrs.getValue("targetNamespace"));
+ this.name = attrs.getValue("name");
+ if (this.name == null) {
+ throw new SAXParseException("macro: \"name\" is required", getLocation(), null);
+ }
+
+ this.qname = "{" + namespace + "}" + name;
+ this.parameters = new HashMap();
+ }
+
public void finish() throws SAXException {
Event e = next;
boolean params = true;
@@ -97,4 +115,4 @@
public String getQname() {
return qname;
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEval.java Mon Dec 13 14:25:06 2004
@@ -15,17 +15,26 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
public class StartEval extends StartInstruction {
- public StartEval(StartElement raw, JXTExpression value) {
+ private final JXTExpression value;
+
+ public StartEval(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.value = value;
+
+ String select = attrs.getValue("select");
+ this.value = Parser.compileExpr(select, "eval: \"select\":", getLocation());
}
public JXTExpression getValue() {
return value;
}
-
- private final JXTExpression value;
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartEvalBody.java Mon Dec 13 14:25:06 2004
@@ -15,8 +15,12 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+
public class StartEvalBody extends StartInstruction {
- public StartEvalBody(StartElement raw) {
+ public StartEvalBody(StartElement raw, Attributes attrs, Stack stack) {
super(raw);
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartForEach.java Mon Dec 13 14:25:06 2004
@@ -15,21 +15,16 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
public class StartForEach extends StartInstruction {
- public StartForEach(StartElement raw, JXTExpression items,
- JXTExpression var, JXTExpression varStatus, JXTExpression begin,
- JXTExpression end, JXTExpression step, Boolean lenient) {
- super(raw);
- this.items = items;
- this.var = var;
- this.varStatus = varStatus;
- this.begin = begin;
- this.end = end;
- this.step = step;
- this.lenient = lenient;
- }
final JXTExpression items;
final JXTExpression var;
@@ -39,6 +34,36 @@
final JXTExpression step;
final Boolean lenient;
+ public StartForEach(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
+ super(raw);
+
+ String name = raw.getLocalName();
+ Locator locator = getLocation();
+
+ String items = attrs.getValue("items");
+ String select = attrs.getValue("select");
+ this.var = Parser.compileExpr(attrs.getValue("var"), null, locator);
+ this.varStatus = Parser.compileExpr(attrs.getValue("varStatus"), null, locator);
+ this.begin = Parser.compileInt(attrs.getValue("begin"), name, locator);
+ this.end = Parser.compileInt(attrs.getValue("end"), name, locator);
+ this.step = Parser.compileInt(attrs.getValue("step"), name, locator);
+ String lenientValue = attrs.getValue("lenient");
+ this.lenient = (lenientValue == null) ? null : Boolean.valueOf(lenientValue);
+
+ if (items == null) {
+ if (select == null && (begin == null || end == null)) {
+ throw new SAXParseException("forEach: \"select\", \"items\", or both \"begin\" and \"end\" must be specified",
+ locator, null);
+ }
+ } else if (select != null) {
+ throw new SAXParseException("forEach: only one of \"select\" or \"items\" may be specified",
+ locator, null);
+ }
+ this.items = Parser.compileExpr(items == null ? select : items, null, locator);
+ }
+
public JXTExpression getBegin() {
return begin;
}
@@ -66,4 +91,4 @@
public JXTExpression getVarStatus() {
return varStatus;
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatDate.java Mon Dec 13 14:25:06 2004
@@ -18,12 +18,17 @@
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
+import java.util.Stack;
import java.util.TimeZone;
import org.apache.cocoon.template.jxtg.environment.ValueHelper;
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jxpath.JXPathContext;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
public class StartFormatDate extends StartInstruction {
@@ -40,19 +45,21 @@
JXTExpression timeStyle;
JXTExpression locale;
- public StartFormatDate(StartElement raw, JXTExpression var,
- JXTExpression value, JXTExpression type, JXTExpression pattern,
- JXTExpression timeZone, JXTExpression dateStyle,
- JXTExpression timeStyle, JXTExpression locale) {
+ public StartFormatDate(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException{
+
super(raw);
- this.var = var;
- this.value = value;
- this.type = type;
- this.pattern = pattern;
- this.timeZone = timeZone;
- this.dateStyle = dateStyle;
- this.timeStyle = timeStyle;
- this.locale = locale;
+
+ Locator locator = getLocation();
+
+ this.var = Parser.compileExpr(attrs.getValue("var"), null, locator);
+ this.value = Parser.compileExpr(attrs.getValue("value"), null, locator);
+ this.type = Parser.compileExpr(attrs.getValue("type"), null, locator);
+ this.pattern = Parser.compileExpr(attrs.getValue("pattern"), null, locator);
+ this.timeZone = Parser.compileExpr(attrs.getValue("timeZone"), null, locator);
+ this.dateStyle = Parser.compileExpr(attrs.getValue("dateStyle"), null, locator);
+ this.timeStyle = Parser.compileExpr(attrs.getValue("timeStyle"), null, locator);
+ this.locale = Parser.compileExpr(attrs.getValue("locale"), null, locator);
}
public String format(JexlContext jexl, JXPathContext jxp) throws Exception {
@@ -161,4 +168,4 @@
}
return ret;
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartFormatNumber.java Mon Dec 13 14:25:06 2004
@@ -20,12 +20,17 @@
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
+import java.util.Stack;
import org.apache.cocoon.template.jxtg.environment.ValueHelper;
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.lang.StringUtils;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
public class StartFormatNumber extends StartInstruction {
@@ -57,25 +62,32 @@
}
}
- public StartFormatNumber(StartElement raw, JXTExpression var,
- JXTExpression value, JXTExpression type, JXTExpression pattern,
- JXTExpression currencyCode, JXTExpression currencySymbol,
- JXTExpression isGroupingUsed, JXTExpression maxIntegerDigits,
- JXTExpression minIntegerDigits, JXTExpression maxFractionDigits,
- JXTExpression minFractionDigits, JXTExpression locale) {
+ public StartFormatNumber(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.var = var;
- this.value = value;
- this.type = type;
- this.pattern = pattern;
- this.currencyCode = currencyCode;
- this.currencySymbol = currencySymbol;
- this.isGroupingUsed = isGroupingUsed;
- this.maxIntegerDigits = maxIntegerDigits;
- this.minIntegerDigits = minIntegerDigits;
- this.maxFractionDigits = maxFractionDigits;
- this.minFractionDigits = minFractionDigits;
- this.locale = locale;
+
+ Locator locator = getLocation();
+
+ this.value = Parser.compileExpr(attrs.getValue("value"), null, locator);
+ this.type = Parser.compileExpr(attrs.getValue("type"), null, locator);
+ this.pattern = Parser.compileExpr(attrs.getValue("pattern"), null, locator);
+ this.currencyCode =
+ Parser.compileExpr(attrs.getValue("currencyCode"), null, locator);
+ this.currencySymbol =
+ Parser.compileExpr(attrs.getValue("currencySymbol"), null, locator);
+ this.isGroupingUsed =
+ Parser.compileBoolean(attrs.getValue("isGroupingUsed"), null, locator);
+ this.maxIntegerDigits =
+ Parser.compileInt(attrs.getValue("maxIntegerDigits"), null, locator);
+ this.minIntegerDigits =
+ Parser.compileInt(attrs.getValue("minIntegerDigits"), null, locator);
+ this.maxFractionDigits =
+ Parser.compileInt(attrs.getValue("maxFractionDigits"), null, locator);
+ this.minFractionDigits =
+ Parser.compileInt(attrs.getValue("minFractionDigits"), null, locator);
+ this.locale = Parser.compileExpr(attrs.getValue("locale"), null, locator);
+ this.var = Parser.compileExpr(attrs.getValue("var"), null, locator);
}
public String format(JexlContext jexl, JXPathContext jxp) throws Exception {
@@ -250,4 +262,4 @@
df.setDecimalFormatSymbols(dfs);
}
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartIf.java Mon Dec 13 14:25:06 2004
@@ -15,17 +15,33 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
public class StartIf extends StartInstruction {
- public StartIf(StartElement raw, JXTExpression test) {
+ final JXTExpression test;
+
+ public StartIf(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.test = test;
- }
- final JXTExpression test;
+ Locator locator = getLocation();
+ String test = attrs.getValue("test");
+ if (test != null) {
+ this.test = Parser.compileExpr(test, "if: \"test\": ", locator);
+ } else {
+ throw new SAXParseException("if: \"test\" is required", locator, null);
+ }
+ }
public JXTExpression getTest() {
return test;
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartImport.java Mon Dec 13 14:25:06 2004
@@ -15,12 +15,48 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Iterator;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
public class StartImport extends StartInstruction {
- public StartImport(StartElement raw, AttributeEvent uri,
- JXTExpression select) {
+
+ private final AttributeEvent uri;
+ private final JXTExpression select;
+
+ public StartImport(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
+
+ // <import uri="${root}/foo/bar.xml" context="${foo}"/>
+ Locator locator = getLocation();
+ Iterator iter = raw.getAttributeEvents().iterator();
+ AttributeEvent uri = null;
+ JXTExpression select = null;
+ while (iter.hasNext()) {
+ AttributeEvent e = (AttributeEvent) iter.next();
+ if (e.getLocalName().equals("uri")) {
+ uri = e;
+ break;
+ }
+ }
+ if (uri != null) {
+ // If "context" is present then its value will be used
+ // as the context object in the imported template
+ String context = attrs.getValue("context");
+ if (context != null) {
+ select = Parser.compileExpr(context, "import: \"context\": ", locator);
+ }
+ } else {
+ throw new SAXParseException("import: \"uri\" is required", locator, null);
+ }
this.uri = uri;
this.select = select;
}
@@ -32,7 +68,4 @@
public JXTExpression getSelect() {
return select;
}
-
- private final AttributeEvent uri;
- private final JXTExpression select;
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOtherwise.java Mon Dec 13 14:25:06 2004
@@ -15,8 +15,24 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
public class StartOtherwise extends StartInstruction {
- public StartOtherwise(StartElement raw) {
+ public StartOtherwise(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
+
+ if (stack.size() != 0 && (stack.peek() instanceof StartChoose)) {
+ StartChoose startChoose = (StartChoose) stack.peek();
+ startChoose.setOtherwise(this);
+ } else {
+ throw new SAXParseException("<otherwise> must be within <choose>",
+ getLocation(), null);
+ }
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartOut.java Mon Dec 13 14:25:06 2004
@@ -15,13 +15,32 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
public class StartOut extends StartInstruction {
- public StartOut(StartElement raw, JXTExpression expr, Boolean lenient) {
+ private final JXTExpression compiledExpression;
+ private final Boolean lenient;
+
+ public StartOut(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.compiledExpression = expr;
- this.lenient = lenient;
+ Locator locator = getLocation();
+ String value = attrs.getValue("value");
+ if (value != null) {
+ this.compiledExpression = Parser.compileExpr(value, "out: \"value\": ", locator);
+ String lenientValue = attrs.getValue("lenient");
+ this.lenient = lenientValue == null ? null : Boolean.valueOf(lenientValue);
+ } else {
+ throw new SAXParseException("out: \"value\" is required", locator, null);
+ }
}
public JXTExpression getCompiledExpression() {
@@ -31,7 +50,4 @@
public Boolean getLenient() {
return lenient;
}
-
- private final JXTExpression compiledExpression;
- private final Boolean lenient;
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartParameter.java Mon Dec 13 14:25:06 2004
@@ -15,20 +15,37 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
public class StartParameter extends StartInstruction {
- public StartParameter(StartElement raw, String name, String optional,
- String defaultValue) {
+ final String name;
+ final String optional;
+ private final String defaultValue;
+
+ public StartParameter(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.name = name;
- this.optional = optional;
- this.defaultValue = defaultValue;
+
+ Locator locator = getLocation();
+ if (stack.size() == 0 || !(stack.peek() instanceof StartDefine)) {
+ throw new SAXParseException("<parameter> not allowed here", locator, null);
+ } else {
+ this.name = attrs.getValue("name");
+ this.optional = attrs.getValue("optional");
+ this.defaultValue = attrs.getValue("default");
+ if (this.name == null) {
+ throw new SAXParseException("parameter: \"name\" is required", locator, null);
+ }
+ }
}
public String getDefaultValue() {
return defaultValue;
}
-
- final String name;
- final String optional;
- private final String defaultValue;
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartSet.java Mon Dec 13 14:25:06 2004
@@ -15,13 +15,37 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
public class StartSet extends StartInstruction {
- public StartSet(StartElement raw, JXTExpression var, JXTExpression value) {
+
+ private final JXTExpression var;
+ private final JXTExpression value;
+
+ public StartSet(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.var = var;
- this.value = value;
+
+ Locator locator = getLocation();
+ String var = attrs.getValue("var");
+ String value = attrs.getValue("value");
+ JXTExpression varExpr = null;
+ JXTExpression valueExpr = null;
+ if (var != null) {
+ varExpr = Parser.compileExpr(var, "set: \"var\":", locator);
+ }
+ if (value != null) {
+ valueExpr = Parser.compileExpr(value, "set: \"value\":", locator);
+ }
+ this.var = varExpr;
+ this.value = valueExpr;
}
public JXTExpression getVar() {
@@ -31,7 +55,4 @@
public JXTExpression getValue() {
return value;
}
-
- private final JXTExpression var;
- private final JXTExpression value;
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartTemplate.java Mon Dec 13 14:25:06 2004
@@ -15,8 +15,12 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+
public class StartTemplate extends StartInstruction {
- public StartTemplate(StartElement raw) {
+ public StartTemplate(StartElement raw, Attributes attrs, Stack stack) {
super(raw);
}
-}
\ No newline at end of file
+}
Modified: cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java
Url: http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java?view=diff&rev=111751&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java&r1=111750&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java&r2=111751
==============================================================================
--- cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java (original)
+++ cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/event/StartWhen.java Mon Dec 13 14:25:06 2004
@@ -15,12 +15,46 @@
*/
package org.apache.cocoon.template.jxtg.script.event;
+import java.util.Stack;
+
import org.apache.cocoon.template.jxtg.expression.JXTExpression;
+import org.apache.cocoon.template.jxtg.script.Parser;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
public class StartWhen extends StartInstruction {
- public StartWhen(StartElement raw, JXTExpression test) {
+ private final JXTExpression test;
+ private StartWhen nextChoice;
+
+ public StartWhen(StartElement raw, Attributes attrs, Stack stack)
+ throws SAXException {
+
super(raw);
- this.test = test;
+
+ Locator locator = getLocation();
+
+ if (stack.size() == 0 || !(stack.peek() instanceof StartChoose)) {
+ throw new SAXParseException("<when> must be within <choose>", locator, null);
+ }
+ String test = attrs.getValue("test");
+ if (test != null) {
+ this.test = Parser.compileExpr(test, "when: \"test\": ", locator);
+
+ StartChoose startChoose = (StartChoose) stack.peek();
+ if (startChoose.getFirstChoice() != null) {
+ StartWhen w = startChoose.getFirstChoice();
+ while (w.getNextChoice() != null) {
+ w = w.getNextChoice();
+ }
+ w.setNextChoice(this);
+ } else {
+ startChoose.setFirstChoice(this);
+ }
+ } else {
+ throw new SAXParseException("when: \"test\" is required", locator, null);
+ }
}
public JXTExpression getTest() {
@@ -34,7 +68,4 @@
public StartWhen getNextChoice() {
return nextChoice;
}
-
- private final JXTExpression test;
- private StartWhen nextChoice;
-}
\ No newline at end of file
+}