Cleaner way to create application node factory. (see javadoc for more details)
git-svn-id: https://svn.apache.org/repos/asf/xalan/java/branches/xslt20@337593 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/xpath_rwapi/.cvsignore b/xpath_rwapi/.cvsignore
new file mode 100644
index 0000000..378eac2
--- /dev/null
+++ b/xpath_rwapi/.cvsignore
@@ -0,0 +1 @@
+build
diff --git a/xpath_rwapi/grammar/etree.xsl b/xpath_rwapi/grammar/etree.xsl
index c5c6e62..d4af66f 100644
--- a/xpath_rwapi/grammar/etree.xsl
+++ b/xpath_rwapi/grammar/etree.xsl
@@ -31,21 +31,17 @@
/**
* Node factory for customized parser.
*/
- NodeFactory m_nodeFactory;
-
- /**
- * Sets the node factory.
- * @param nodeFactory to use.
- */
- public void setNodeFactory(NodeFactory nodeFactory) {
- m_nodeFactory = nodeFactory;
- }
+ private NodeFactory m_nodeFactory;
/**
* Returns the node factory.
* @return NodeFactory
*/
public NodeFactory getNodeFactory() {
+ if (m_nodeFactory == null)
+ {
+ m_nodeFactory = DefaultNodeFactory.createNodeFactory();
+ }
return m_nodeFactory;
}
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/.cvsignore b/xpath_rwapi/src2/org/apache/xpath/impl/parser/.cvsignore
new file mode 100644
index 0000000..73ff854
--- /dev/null
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/.cvsignore
@@ -0,0 +1 @@
+xpath-grammar.jj*
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/DefaultNodeFactory.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/DefaultNodeFactory.java
similarity index 65%
rename from xpath_rwapi/src2/org/apache/xpath/impl/DefaultNodeFactory.java
rename to xpath_rwapi/src2/org/apache/xpath/impl/parser/DefaultNodeFactory.java
index 01a275e..a5458c5 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/DefaultNodeFactory.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/DefaultNodeFactory.java
@@ -53,98 +53,118 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
-package org.apache.xpath.impl;
+package org.apache.xpath.impl.parser;
-import org.apache.xpath.impl.parser.Node;
-import org.apache.xpath.impl.parser.NodeFactory;
+import org.apache.xpath.impl.FunctionCallImpl;
+import org.apache.xpath.impl.KindTestImpl;
+import org.apache.xpath.impl.LiteralImpl;
+import org.apache.xpath.impl.NameTestImpl;
+import org.apache.xpath.impl.OperatorImpl;
+import org.apache.xpath.impl.PathExprImpl;
+import org.apache.xpath.impl.SequenceTypeImpl;
+import org.apache.xpath.impl.StepExprImpl;
+import org.apache.xpath.impl.VariableImpl;
/**
- * Default implementation for node factory.
+ * Implementation of {@link NodeFactory}. Returns null for each
+ * factory method.
+ * <p>Provides also a way to create a node factory. By now, it tries
+ * to instantiate an user class, by looking at the system property
+ * with the key {@link #FACTORY_PROPERTY}. If its value is a valid
+ * class name which implements {@link NodeFactory}, then a new
+ * instance of this class is returned. Otherwise, a singletion of this object
+ * is returned.
+
+ * @author <a href="mailto:villard@us.ibm.com">Lionel Villard</a>
+ * @version $Id$
*/
-public class DefaultNodeFactory implements NodeFactory {
+public class DefaultNodeFactory implements NodeFactory
+{
+ final static public String FACTORY_PROPERTY_KEY = "org.apache.xpath.impl.parser.NodeFactory";
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createFunctionCallNode()
- */
+ final static private NodeFactory DEFAULT_NODE_FACTORY = new DefaultNodeFactory();
+
+ static protected NodeFactory createNodeFactory()
+ {
+ String cn = System.getProperty(FACTORY_PROPERTY_KEY);
+ NodeFactory result;
+ if (cn != null)
+ {
+ try
+ {
+ Class c = Class.forName(cn);
+
+ result = (NodeFactory) c.newInstance();
+ } catch (ClassNotFoundException e)
+ {
+ result = DEFAULT_NODE_FACTORY;
+ } catch (InstantiationException e)
+ {
+ result = DEFAULT_NODE_FACTORY;
+ } catch (IllegalAccessException e)
+ {
+ result = DEFAULT_NODE_FACTORY;
+ } catch (ClassCastException e)
+ {
+ result = DEFAULT_NODE_FACTORY;
+ }
+ }
+ else
+ {
+ result = DEFAULT_NODE_FACTORY;
+ }
+
+ return result;
+ }
+
+ // Implements NodeFactory
+
public FunctionCallImpl createFunctionCallNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createKindTestNode(int)
- */
public KindTestImpl createKindTestNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createLiteralNode(int)
- */
public LiteralImpl createLiteralNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createNameTestNode()
- */
public NameTestImpl createNameTestNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createNode(int)
- */
public Node createNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createOperatorNode(int)
- */
public OperatorImpl createOperatorNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createPathNode()
- */
public PathExprImpl createPathNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createStepNode()
- */
public StepExprImpl createStepNode(int id) {
return null;
}
- /**
- * @see org.apache.xpath.impl.parser.NodeFactory#createVarNameNode()
- */
public VariableImpl createVarNameNode(int id) {
return null;
}
-
- /* (non-Javadoc)
- * @see org.apache.xpath.impl.parser.NodeFactory#createSequenceTypeNode(int)
- */
+
public SequenceTypeImpl createSequenceTypeNode(int id) {
return null;
}
- /* (non-Javadoc)
- * @see org.apache.xpath.impl.parser.NodeFactory#createCastAsNode(int)
- */
public SequenceTypeImpl createCastAsNode(int id) {
return null;
}
- /* (non-Javadoc)
- * @see org.apache.xpath.impl.parser.NodeFactory#createTreatAsNode(int)
- */
public SequenceTypeImpl createTreatAsNode(int id) {
return null;
}
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java
index dd1c69b..64830dc 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/NodeFactory.java
@@ -69,6 +69,7 @@
/**
* Applications which want to generate their own AST need to implement this
* interface.
+ * <p></p>
*
* @see org.apache.xpath.impl.parser.XPathTreeConstants
*/
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java
index c7b1192..a9984b6 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/SimpleNode.java
@@ -5,7 +5,6 @@
import org.apache.xpath.impl.CastOrTreatAsExprImpl;
import org.apache.xpath.impl.CastableAsExprImpl;
import org.apache.xpath.impl.ConditionalExprImpl;
-import org.apache.xpath.impl.DefaultNodeFactory;
import org.apache.xpath.impl.ExpressionFactoryImpl;
import org.apache.xpath.impl.ForAndQuantifiedExprImpl;
import org.apache.xpath.impl.FunctionCallImpl;
@@ -27,23 +26,25 @@
{
public static boolean PRODUCE_RAW_TREE = false;
- final static private NodeFactory DEFAULT_NODE_FACTORY = new DefaultNodeFactory();
-
- /**
- * List of child nodes
- */
- protected Node[] m_children;
+ static ExpressionFactory m_exprFact = new ExpressionFactoryImpl();
+
+ protected Node[] m_children; // to remove
protected int id; // to remove
+ protected static ExpressionFactory getExpressionFactory()
+ {
+ return m_exprFact;
+ }
+
+ // Constructors
+
protected SimpleNode()
{
}
/**
* Creates a new SimpleNode object.
- *
- * @param i DOCUMENT ME!
*/
public SimpleNode(int i)
{
@@ -52,30 +53,12 @@
/**
* Creates a new SimpleNode object.
- *
- * @param p DOCUMENT ME!
- * @param i DOCUMENT ME!
*/
public SimpleNode(XPath p, int i)
{
this(i);
}
- static ExpressionFactory m_exprFact = new ExpressionFactoryImpl();
-
- protected static ExpressionFactory getExpressionFactory()
- {
- return m_exprFact;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param p DOCUMENT ME!
- * @param id DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
public static Node jjtCreate(XPath p, int id)
{
if (PRODUCE_RAW_TREE)
@@ -84,8 +67,7 @@
}
Node newNode;
- NodeFactory nodeFactory = (p.m_nodeFactory == null)
- ? DEFAULT_NODE_FACTORY : p.m_nodeFactory;
+ NodeFactory nodeFactory = p.getNodeFactory();
switch (id)
{
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java
index d6b3fdd..dd15824 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPath.java
@@ -13,21 +13,17 @@
/**
* Node factory for customized parser.
*/
- NodeFactory m_nodeFactory;
-
- /**
- * Sets the node factory.
- * @param nodeFactory to use.
- */
- public void setNodeFactory(NodeFactory nodeFactory) {
- m_nodeFactory = nodeFactory;
- }
+ private NodeFactory m_nodeFactory;
/**
* Returns the node factory.
* @return NodeFactory
*/
public NodeFactory getNodeFactory() {
+ if (m_nodeFactory == null)
+ {
+ m_nodeFactory = DefaultNodeFactory.createNodeFactory();
+ }
return m_nodeFactory;
}
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java
index 021fff0..cb57907 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathTreeConstants.java
@@ -1,4 +1,4 @@
-/* Generated By:JJTree: Do not edit this line. F:/projets/xml-xalan-xslt20/xml-xalan/java/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathTreeConstants.java */
+/* Generated By:JJTree: Do not edit this line. D:/projects/xml-xalan-xslt20/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathTreeConstants.java */
package org.apache.xpath.impl.parser;
diff --git a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java
index 32c5e3a..e23b828 100644
--- a/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java
+++ b/xpath_rwapi/src2/org/apache/xpath/impl/parser/XPathVisitor.java
@@ -1,4 +1,4 @@
-/* Generated By:JJTree: Do not edit this line. F:/projets/xml-xalan-xslt20/xml-xalan/java/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathVisitor.java */
+/* Generated By:JJTree: Do not edit this line. D:/projects/xml-xalan-xslt20/xpath_rwapi/src2/org/apache/xpath/impl/parser\XPathVisitor.java */
package org.apache.xpath.impl.parser;