Author: lgawron
Date: Thu Feb 24 07:52:36 2005
New Revision: 155191
URL: http://svn.apache.org/viewcvs?view=rev&rev=155191
Log:
no more if/else if on instruction creation
Modified:
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/template/jxtg/script/Parser.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&r1=155190&r2=155191
==============================================================================
---
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
Thu Feb 24 07:52:36 2005
@@ -15,6 +15,9 @@
*/
package org.apache.cocoon.template.jxtg.script;
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Stack;
import org.apache.cocoon.template.jxtg.JXTemplateGenerator;
@@ -40,25 +43,46 @@
Locator charLocation;
StringBuffer charBuf;
- final static String TEMPLATE = "template";
- final static String FOR_EACH = "forEach";
- final static String IF = "if";
- final static String CHOOSE = "choose";
- final static String WHEN = "when";
- final static String OTHERWISE = "otherwise";
- final static String OUT = "out";
- final static String IMPORT = "import";
- final static String SET = "set";
- final static String MACRO = "macro";
- final static String EVALBODY = "evalBody";
- final static String EVAL = "eval";
- final static String PARAMETER = "parameter";
- final static String FORMAT_NUMBER = "formatNumber";
- final static String FORMAT_DATE = "formatDate";
- final static String COMMENT = "comment";
+ final static Map instructions = new HashMap();
+ final static Class[] parametersClasses = new Class[] { StartElement.class,
+ Attributes.class, Stack.class };
public static final Locator NULL_LOCATOR = new LocatorImpl();
+ static {
+ try {
+ registerInstruction("template", StartTemplate.class.getName());
+ registerInstruction("forEach", StartForEach.class.getName());
+ registerInstruction("if", StartIf.class.getName());
+ registerInstruction("choose", StartChoose.class.getName());
+ registerInstruction("when", StartWhen.class.getName());
+ registerInstruction("otherwise", StartOtherwise.class.getName());
+ registerInstruction("out", StartOut.class.getName());
+ registerInstruction("import", StartImport.class.getName());
+ registerInstruction("set", StartSet.class.getName());
+ registerInstruction("macro", StartDefine.class.getName());
+ registerInstruction("evalBody", StartEvalBody.class.getName());
+ registerInstruction("eval", StartEval.class.getName());
+ registerInstruction("parameter", StartParameter.class.getName());
+ registerInstruction("formatNumber", StartFormatNumber.class
+ .getName());
+ registerInstruction("formatDate", StartFormatDate.class.getName());
+ registerInstruction("comment", StartComment.class.getName());
+ } catch (Exception e) {
+ // we'll do something more professional with that when the
configuration moves
+ // to the sitemap
+ e.printStackTrace();
+ }
+ }
+
+ public static void registerInstruction(String instructionName,
+ String className) throws ClassNotFoundException, SecurityException,
+ NoSuchMethodException {
+ Class clazz = Class.forName(className);
+ Constructor constructor = clazz.getConstructor(parametersClasses);
+ instructions.put(instructionName, constructor);
+ }
+
public Parser() {
// EMPTY
}
@@ -106,7 +130,8 @@
throws SAXException {
if (charBuf == null) {
charBuf = new StringBuffer(length);
- charLocation = locator != null ? new LocatorImpl(locator) :
NULL_LOCATOR;
+ charLocation = locator != null ? new LocatorImpl(locator)
+ : NULL_LOCATOR;
}
charBuf.append(ch, start, length);
}
@@ -179,48 +204,26 @@
if (StringUtils.equals(attributeURI, JXTemplateGenerator.NS)) {
getStartEvent().getTemplateProperties().put(
elementAttributes.getLocalName(i),
-
JXTExpression.compileExpr(elementAttributes.getValue(i), null,
- locator));
+ JXTExpression.compileExpr(
+ elementAttributes.getValue(i), null, locator));
elementAttributes.removeAttribute(i--);
}
}
StartElement startElement = new StartElement(locator, namespaceURI,
localName, qname, elementAttributes);
if (JXTemplateGenerator.NS.equals(namespaceURI)) {
- if (localName.equals(FOR_EACH)) {
- newEvent = new StartForEach(startElement, attrs, stack);
- } else if (localName.equals(FORMAT_NUMBER)) {
- newEvent = new StartFormatNumber(startElement, attrs, stack);
- } else if (localName.equals(FORMAT_DATE)) {
- newEvent = new StartFormatDate(startElement, attrs, stack);
- } else if (localName.equals(CHOOSE)) {
- newEvent = new StartChoose(startElement, attrs, stack);
- } else if (localName.equals(WHEN)) {
- newEvent = new StartWhen(startElement, attrs, stack);
- } else if (localName.equals(OUT)) {
- newEvent = new StartOut(startElement, attrs, stack);
- } else if (localName.equals(OTHERWISE)) {
- newEvent = new StartOtherwise(startElement, attrs, stack);
- } else if (localName.equals(IF)) {
- newEvent = new StartIf(startElement, attrs, stack);
- } else if (localName.equals(MACRO)) {
- newEvent = new StartDefine(startElement, attrs, stack);
- } else if (localName.equals(PARAMETER)) {
- newEvent = new StartParameter(startElement, attrs, stack);
- } else if (localName.equals(EVALBODY)) {
- newEvent = new StartEvalBody(startElement, attrs, stack);
- } else if (localName.equals(EVAL)) {
- newEvent = new StartEval(startElement, attrs, stack);
- } else if (localName.equals(SET)) {
- newEvent = new StartSet(startElement, attrs, stack);
- } else if (localName.equals(IMPORT)) {
- newEvent = new StartImport(startElement, attrs, stack);
- } else if (localName.equals(TEMPLATE)) {
- newEvent = new StartTemplate(startElement, attrs, stack);
- } else if (localName.equals(COMMENT)) {
- newEvent = new StartComment(startElement, attrs, stack);
- } else {
- throw new SAXParseException("unrecognized tag: " + localName,
locator, null);
+ Constructor constructor = (Constructor)
instructions.get(localName);
+ if (constructor == null) {
+ throw new SAXParseException("unrecognized tag: " + localName,
+ locator, null);
+ }
+
+ Object[] arguments = new Object[] { startElement, attrs, stack };
+ try {
+ newEvent = (Event) constructor.newInstance(arguments);
+ } catch (Exception e) {
+ throw new SAXParseException("error creating instruction: "
+ + localName, locator, e);
}
} else {
newEvent = startElement;
@@ -235,7 +238,7 @@
}
public void comment(char ch[], int start, int length) throws SAXException {
- //DO NOTHING
+ // DO NOTHING
}
public void endCDATA() throws SAXException {
@@ -263,8 +266,3 @@
addEvent(new StartEntity(locator, name));
}
}
-
-
-
-
-