Methods Summary |
---|
public void | callArgVisitors(com.sun.org.apache.xpath.internal.XPathVisitor visitor)Call the visitors for the function arguments.
for (int i = 0; i < m_argVec.size(); i++)
{
Expression exp = (Expression)m_argVec.elementAt(i);
exp.callVisitors(new ArgExtOwner(exp), visitor);
}
|
public void | checkNumberArgs(int argNum)Check that the number of arguments passed to this function is correct.
|
public com.sun.org.apache.xpath.internal.objects.XObject | execute(com.sun.org.apache.xpath.internal.XPathContext xctxt)Execute the function. The function must return
a valid object.
if (xctxt.isSecureProcessing())
throw new javax.xml.transform.TransformerException(
XPATHMessages.createXPATHMessage(
XPATHErrorResources.ER_EXTENSION_FUNCTION_CANNOT_BE_INVOKED,
new Object[] {toString()}));
XObject result;
Vector argVec = new Vector();
int nArgs = m_argVec.size();
for (int i = 0; i < nArgs; i++)
{
Expression arg = (Expression) m_argVec.elementAt(i);
XObject xobj = arg.execute(xctxt);
/*
* Should cache the arguments for func:function
*/
xobj.allowDetachToRelease(false);
argVec.addElement(xobj);
}
//dml
ExtensionsProvider extProvider = (ExtensionsProvider)xctxt.getOwnerObject();
Object val = extProvider.extFunction(this, argVec);
if (null != val)
{
result = XObject.create(val, xctxt);
}
else
{
result = new XNull();
}
return result;
|
public void | exprSetParent(com.sun.org.apache.xpath.internal.ExpressionNode n)Set the parent node.
For an extension function, we also need to set the parent
node for all argument expressions.
super.exprSetParent(n);
int nArgs = m_argVec.size();
for (int i = 0; i < nArgs; i++)
{
Expression arg = (Expression) m_argVec.elementAt(i);
arg.exprSetParent(n);
}
|
public void | fixupVariables(java.util.Vector vars, int globalsSize)This function is used to fixup variables from QNames to stack frame
indexes at stylesheet build time.
if (null != m_argVec)
{
int nArgs = m_argVec.size();
for (int i = 0; i < nArgs; i++)
{
Expression arg = (Expression) m_argVec.elementAt(i);
arg.fixupVariables(vars, globalsSize);
}
}
|
public com.sun.org.apache.xpath.internal.Expression | getArg(int n)Return the nth argument passed to the extension function.
if (n >= 0 && n < m_argVec.size())
return (Expression) m_argVec.elementAt(n);
else
return null;
|
public int | getArgCount()Return the number of arguments that were passed
into this extension function.
return m_argVec.size();
|
public java.lang.String | getFunctionName()Return the name of the extension function.
return m_extensionName;
|
public java.lang.Object | getMethodKey()Return the method key of the extension function.
return m_methodKey;
|
public java.lang.String | getNamespace()Return the namespace of the extension function.
return m_namespace;
|
protected void | reportWrongNumberArgs()Constructs and throws a WrongNumberArgException with the appropriate
message for this function object. This class supports an arbitrary
number of arguments, so this method must never be called.
String fMsg = XSLMessages.createXPATHMessage(
XPATHErrorResources.ER_INCORRECT_PROGRAMMER_ASSERTION,
new Object[]{ "Programmer's assertion: the method FunctionMultiArgs.reportWrongNumberArgs() should never be called." });
throw new RuntimeException(fMsg);
|
public void | setArg(com.sun.org.apache.xpath.internal.Expression arg, int argNum)Set an argument expression for a function. This method is called by the
XPath compiler.
m_argVec.addElement(arg);
arg.exprSetParent(this);
|
public java.lang.String | toString()Return the name of the extesion function in string format
if (m_namespace != null && m_namespace.length() > 0)
return "{" + m_namespace + "}" + m_extensionName;
else
return m_extensionName;
|