19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file
49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information
59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file
69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License.
89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at
99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson *
129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software
139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and
169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License.
179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/*
199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: Arg.java 468655 2006-10-28 07:12:06Z minchau $
209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath;
229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.QName;
249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xpath.objects.XObject;
259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/**
279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class holds an instance of an argument on
289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the stack. The value of the argument can be either an
299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * XObject or a String containing an expression.
309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal
319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */
329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class Arg
339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{
349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Field m_qname: The name of this argument, expressed as a QName
369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * (Qualified Name) object.
379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see getQName
389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see setQName
399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *  */
409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private QName m_qname;
419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the qualified name for this argument.
449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return QName object containing the qualified name
469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public final QName getQName()
489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_qname;
509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the qualified name for this argument.
549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param name QName object representing the new Qualified Name.
569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public final void setQName(QName name)
589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_qname = name;
609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Field m_val: Stored XObject value of this argument
639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #getVal()
649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #setVal()
659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private XObject m_val;
679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the value for this argument.
709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return the argument's stored XObject value.
729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #setVal(XObject)
739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public final XObject getVal()
759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_val;
779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the value of this argument.
819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param val an XObject representing the arguments's value.
839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #getVal()
849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public final void setVal(XObject val)
869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_val = val;
889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Have the object release it's resources.
929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Call only when the variable or argument is going out of scope.
939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void detach()
959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(null != m_val)
979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      m_val.allowDetachToRelease(true);
999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      m_val.detach();
1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /** Field m_expression: Stored expression value of this argument.
1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #setExpression
1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #getExpression
1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * */
1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private String m_expression;
1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Get the value expression for this argument.
1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return String containing the expression previously stored into this
1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * argument
1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #setExpression
1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public String getExpression()
1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_expression;
1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set the value expression for this argument.
1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param expr String containing the expression to be stored as this
1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * argument's value.
1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @see #getExpression
1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public void setExpression(String expr)
1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_expression = expr;
1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * True if this variable was added with an xsl:with-param or
1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * is added via setParameter.
1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private boolean m_isFromWithParam;
1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Tell if this variable is a parameter passed with a with-param or as
1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * a top-level parameter.
1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   public boolean isFromWithParam()
1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   {
1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_isFromWithParam;
1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   }
1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * True if this variable is currently visible.  To be visible,
1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * a variable needs to come either from xsl:variable or be
1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * a "received" parameter, ie one for which an xsl:param has
1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * been encountered.
1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Set at the time the object is constructed and updated as needed.
1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  private boolean m_isVisible;
1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Tell if this variable is currently visible.
1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   public boolean isVisible()
1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   {
1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    return m_isVisible;
1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   }
1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Update visibility status of this variable.
1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   public void setIsVisible(boolean b)
1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   {
1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isVisible = b;
1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   }
1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Construct a dummy parameter argument, with no QName and no
1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * value (either expression string or value XObject). isVisible
1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * defaults to true.
1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public Arg()
1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_qname = new QName("");
1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    ;  // so that string compares can be done.
1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_val = null;
1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_expression = null;
1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isVisible = true;
1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isFromWithParam = false;
1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Construct a parameter argument that contains an expression.
1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param qname Name of the argument, expressed as a QName object.
1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param expression String to be stored as this argument's value expression.
1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param isFromWithParam True if this is a parameter variable.
1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public Arg(QName qname, String expression, boolean isFromWithParam)
1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_qname = qname;
2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_val = null;
2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_expression = expression;
2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isFromWithParam = isFromWithParam;
2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isVisible = !isFromWithParam;
2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Construct a parameter argument which has an XObject value.
2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * isVisible defaults to true.
2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param qname Name of the argument, expressed as a QName object.
2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param val Value of the argument, expressed as an XObject
2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public Arg(QName qname, XObject val)
2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_qname = qname;
2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_val = val;
2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isVisible = true;
2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isFromWithParam = false;
2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_expression = null;
2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Equality function specialized for the variable name.  If the argument
2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * is not a qname, it will deligate to the super class.
2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param   obj   the reference object with which to compare.
2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @return  <code>true</code> if this object is the same as the obj
2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *          argument; <code>false</code> otherwise.
2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public boolean equals(Object obj)
2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    if(obj instanceof QName)
2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    {
2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return m_qname.equals(obj);
2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    }
2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    else
2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson      return super.equals(obj);
2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  /**
2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * Construct a parameter argument.
2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   *
2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param qname Name of the argument, expressed as a QName object.
2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param val Value of the argument, expressed as an XObject
2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   * @param isFromWithParam True if this is a parameter variable.
2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson   */
2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  public Arg(QName qname, XObject val, boolean isFromWithParam)
2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  {
2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson
2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_qname = qname;
2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_val = val;
2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isFromWithParam = isFromWithParam;
2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_isVisible = !isFromWithParam;
2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson    m_expression = null;
2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson  }
2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}
259