259 lines
6.2 KiB
Java
259 lines
6.2 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/*
|
|
* $Id: Arg.java 468655 2006-10-28 07:12:06Z minchau $
|
|
*/
|
|
package org.apache.xpath;
|
|
|
|
import org.apache.xml.utils.QName;
|
|
import org.apache.xpath.objects.XObject;
|
|
|
|
/**
|
|
* This class holds an instance of an argument on
|
|
* the stack. The value of the argument can be either an
|
|
* XObject or a String containing an expression.
|
|
* @xsl.usage internal
|
|
*/
|
|
public class Arg
|
|
{
|
|
|
|
/** Field m_qname: The name of this argument, expressed as a QName
|
|
* (Qualified Name) object.
|
|
* @see getQName
|
|
* @see setQName
|
|
* */
|
|
private QName m_qname;
|
|
|
|
/**
|
|
* Get the qualified name for this argument.
|
|
*
|
|
* @return QName object containing the qualified name
|
|
*/
|
|
public final QName getQName()
|
|
{
|
|
return m_qname;
|
|
}
|
|
|
|
/**
|
|
* Set the qualified name for this argument.
|
|
*
|
|
* @param name QName object representing the new Qualified Name.
|
|
*/
|
|
public final void setQName(QName name)
|
|
{
|
|
m_qname = name;
|
|
}
|
|
|
|
/** Field m_val: Stored XObject value of this argument
|
|
* @see #getVal()
|
|
* @see #setVal()
|
|
*/
|
|
private XObject m_val;
|
|
|
|
/**
|
|
* Get the value for this argument.
|
|
*
|
|
* @return the argument's stored XObject value.
|
|
* @see #setVal(XObject)
|
|
*/
|
|
public final XObject getVal()
|
|
{
|
|
return m_val;
|
|
}
|
|
|
|
/**
|
|
* Set the value of this argument.
|
|
*
|
|
* @param val an XObject representing the arguments's value.
|
|
* @see #getVal()
|
|
*/
|
|
public final void setVal(XObject val)
|
|
{
|
|
m_val = val;
|
|
}
|
|
|
|
/**
|
|
* Have the object release it's resources.
|
|
* Call only when the variable or argument is going out of scope.
|
|
*/
|
|
public void detach()
|
|
{
|
|
if(null != m_val)
|
|
{
|
|
m_val.allowDetachToRelease(true);
|
|
m_val.detach();
|
|
}
|
|
}
|
|
|
|
|
|
/** Field m_expression: Stored expression value of this argument.
|
|
* @see #setExpression
|
|
* @see #getExpression
|
|
* */
|
|
private String m_expression;
|
|
|
|
/**
|
|
* Get the value expression for this argument.
|
|
*
|
|
* @return String containing the expression previously stored into this
|
|
* argument
|
|
* @see #setExpression
|
|
*/
|
|
public String getExpression()
|
|
{
|
|
return m_expression;
|
|
}
|
|
|
|
/**
|
|
* Set the value expression for this argument.
|
|
*
|
|
* @param expr String containing the expression to be stored as this
|
|
* argument's value.
|
|
* @see #getExpression
|
|
*/
|
|
public void setExpression(String expr)
|
|
{
|
|
m_expression = expr;
|
|
}
|
|
|
|
/**
|
|
* True if this variable was added with an xsl:with-param or
|
|
* is added via setParameter.
|
|
*/
|
|
private boolean m_isFromWithParam;
|
|
|
|
/**
|
|
* Tell if this variable is a parameter passed with a with-param or as
|
|
* a top-level parameter.
|
|
*/
|
|
public boolean isFromWithParam()
|
|
{
|
|
return m_isFromWithParam;
|
|
}
|
|
|
|
/**
|
|
* True if this variable is currently visible. To be visible,
|
|
* a variable needs to come either from xsl:variable or be
|
|
* a "received" parameter, ie one for which an xsl:param has
|
|
* been encountered.
|
|
* Set at the time the object is constructed and updated as needed.
|
|
*/
|
|
private boolean m_isVisible;
|
|
|
|
/**
|
|
* Tell if this variable is currently visible.
|
|
*/
|
|
public boolean isVisible()
|
|
{
|
|
return m_isVisible;
|
|
}
|
|
|
|
/**
|
|
* Update visibility status of this variable.
|
|
*/
|
|
public void setIsVisible(boolean b)
|
|
{
|
|
m_isVisible = b;
|
|
}
|
|
|
|
/**
|
|
* Construct a dummy parameter argument, with no QName and no
|
|
* value (either expression string or value XObject). isVisible
|
|
* defaults to true.
|
|
*/
|
|
public Arg()
|
|
{
|
|
|
|
m_qname = new QName("");
|
|
; // so that string compares can be done.
|
|
m_val = null;
|
|
m_expression = null;
|
|
m_isVisible = true;
|
|
m_isFromWithParam = false;
|
|
}
|
|
|
|
/**
|
|
* Construct a parameter argument that contains an expression.
|
|
*
|
|
* @param qname Name of the argument, expressed as a QName object.
|
|
* @param expression String to be stored as this argument's value expression.
|
|
* @param isFromWithParam True if this is a parameter variable.
|
|
*/
|
|
public Arg(QName qname, String expression, boolean isFromWithParam)
|
|
{
|
|
|
|
m_qname = qname;
|
|
m_val = null;
|
|
m_expression = expression;
|
|
m_isFromWithParam = isFromWithParam;
|
|
m_isVisible = !isFromWithParam;
|
|
}
|
|
|
|
/**
|
|
* Construct a parameter argument which has an XObject value.
|
|
* isVisible defaults to true.
|
|
*
|
|
* @param qname Name of the argument, expressed as a QName object.
|
|
* @param val Value of the argument, expressed as an XObject
|
|
*/
|
|
public Arg(QName qname, XObject val)
|
|
{
|
|
|
|
m_qname = qname;
|
|
m_val = val;
|
|
m_isVisible = true;
|
|
m_isFromWithParam = false;
|
|
m_expression = null;
|
|
}
|
|
|
|
/**
|
|
* Equality function specialized for the variable name. If the argument
|
|
* is not a qname, it will deligate to the super class.
|
|
*
|
|
* @param obj the reference object with which to compare.
|
|
* @return <code>true</code> if this object is the same as the obj
|
|
* argument; <code>false</code> otherwise.
|
|
*/
|
|
public boolean equals(Object obj)
|
|
{
|
|
if(obj instanceof QName)
|
|
{
|
|
return m_qname.equals(obj);
|
|
}
|
|
else
|
|
return super.equals(obj);
|
|
}
|
|
|
|
/**
|
|
* Construct a parameter argument.
|
|
*
|
|
* @param qname Name of the argument, expressed as a QName object.
|
|
* @param val Value of the argument, expressed as an XObject
|
|
* @param isFromWithParam True if this is a parameter variable.
|
|
*/
|
|
public Arg(QName qname, XObject val, boolean isFromWithParam)
|
|
{
|
|
|
|
m_qname = qname;
|
|
m_val = val;
|
|
m_isFromWithParam = isFromWithParam;
|
|
m_isVisible = !isFromWithParam;
|
|
m_expression = null;
|
|
}
|
|
}
|