• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the  "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 /*
19  * $Id: Arg.java 468655 2006-10-28 07:12:06Z minchau $
20  */
21 package org.apache.xpath;
22 
23 import org.apache.xml.utils.QName;
24 import org.apache.xpath.objects.XObject;
25 
26 /**
27  * This class holds an instance of an argument on
28  * the stack. The value of the argument can be either an
29  * XObject or a String containing an expression.
30  * @xsl.usage internal
31  */
32 public class Arg
33 {
34 
35   /** Field m_qname: The name of this argument, expressed as a QName
36    * (Qualified Name) object.
37    * @see getQName
38    * @see setQName
39    *  */
40   private QName m_qname;
41 
42   /**
43    * Get the qualified name for this argument.
44    *
45    * @return QName object containing the qualified name
46    */
getQName()47   public final QName getQName()
48   {
49     return m_qname;
50   }
51 
52   /**
53    * Set the qualified name for this argument.
54    *
55    * @param name QName object representing the new Qualified Name.
56    */
setQName(QName name)57   public final void setQName(QName name)
58   {
59     m_qname = name;
60   }
61 
62   /** Field m_val: Stored XObject value of this argument
63    * @see #getVal()
64    * @see #setVal()
65    */
66   private XObject m_val;
67 
68   /**
69    * Get the value for this argument.
70    *
71    * @return the argument's stored XObject value.
72    * @see #setVal(XObject)
73    */
getVal()74   public final XObject getVal()
75   {
76     return m_val;
77   }
78 
79   /**
80    * Set the value of this argument.
81    *
82    * @param val an XObject representing the arguments's value.
83    * @see #getVal()
84    */
setVal(XObject val)85   public final void setVal(XObject val)
86   {
87     m_val = val;
88   }
89 
90   /**
91    * Have the object release it's resources.
92    * Call only when the variable or argument is going out of scope.
93    */
detach()94   public void detach()
95   {
96     if(null != m_val)
97     {
98       m_val.allowDetachToRelease(true);
99       m_val.detach();
100     }
101   }
102 
103 
104   /** Field m_expression: Stored expression value of this argument.
105    * @see #setExpression
106    * @see #getExpression
107    * */
108   private String m_expression;
109 
110   /**
111    * Get the value expression for this argument.
112    *
113    * @return String containing the expression previously stored into this
114    * argument
115    * @see #setExpression
116    */
getExpression()117   public String getExpression()
118   {
119     return m_expression;
120   }
121 
122   /**
123    * Set the value expression for this argument.
124    *
125    * @param expr String containing the expression to be stored as this
126    * argument's value.
127    * @see #getExpression
128    */
setExpression(String expr)129   public void setExpression(String expr)
130   {
131     m_expression = expr;
132   }
133 
134   /**
135    * True if this variable was added with an xsl:with-param or
136    * is added via setParameter.
137    */
138   private boolean m_isFromWithParam;
139 
140   /**
141    * Tell if this variable is a parameter passed with a with-param or as
142    * a top-level parameter.
143    */
isFromWithParam()144    public boolean isFromWithParam()
145    {
146     return m_isFromWithParam;
147    }
148 
149   /**
150    * True if this variable is currently visible.  To be visible,
151    * a variable needs to come either from xsl:variable or be
152    * a "received" parameter, ie one for which an xsl:param has
153    * been encountered.
154    * Set at the time the object is constructed and updated as needed.
155    */
156   private boolean m_isVisible;
157 
158   /**
159    * Tell if this variable is currently visible.
160    */
isVisible()161    public boolean isVisible()
162    {
163     return m_isVisible;
164    }
165 
166   /**
167    * Update visibility status of this variable.
168    */
setIsVisible(boolean b)169    public void setIsVisible(boolean b)
170    {
171     m_isVisible = b;
172    }
173 
174   /**
175    * Construct a dummy parameter argument, with no QName and no
176    * value (either expression string or value XObject). isVisible
177    * defaults to true.
178    */
Arg()179   public Arg()
180   {
181 
182     m_qname = new QName("");
183     ;  // so that string compares can be done.
184     m_val = null;
185     m_expression = null;
186     m_isVisible = true;
187     m_isFromWithParam = false;
188   }
189 
190   /**
191    * Construct a parameter argument that contains an expression.
192    *
193    * @param qname Name of the argument, expressed as a QName object.
194    * @param expression String to be stored as this argument's value expression.
195    * @param isFromWithParam True if this is a parameter variable.
196    */
Arg(QName qname, String expression, boolean isFromWithParam)197   public Arg(QName qname, String expression, boolean isFromWithParam)
198   {
199 
200     m_qname = qname;
201     m_val = null;
202     m_expression = expression;
203     m_isFromWithParam = isFromWithParam;
204     m_isVisible = !isFromWithParam;
205   }
206 
207   /**
208    * Construct a parameter argument which has an XObject value.
209    * isVisible defaults to true.
210    *
211    * @param qname Name of the argument, expressed as a QName object.
212    * @param val Value of the argument, expressed as an XObject
213    */
Arg(QName qname, XObject val)214   public Arg(QName qname, XObject val)
215   {
216 
217     m_qname = qname;
218     m_val = val;
219     m_isVisible = true;
220     m_isFromWithParam = false;
221     m_expression = null;
222   }
223 
224   /**
225    * Equality function specialized for the variable name.  If the argument
226    * is not a qname, it will deligate to the super class.
227    *
228    * @param   obj   the reference object with which to compare.
229    * @return  <code>true</code> if this object is the same as the obj
230    *          argument; <code>false</code> otherwise.
231    */
equals(Object obj)232   public boolean equals(Object obj)
233   {
234     if(obj instanceof QName)
235     {
236       return m_qname.equals(obj);
237     }
238     else
239       return super.equals(obj);
240   }
241 
242   /**
243    * Construct a parameter argument.
244    *
245    * @param qname Name of the argument, expressed as a QName object.
246    * @param val Value of the argument, expressed as an XObject
247    * @param isFromWithParam True if this is a parameter variable.
248    */
Arg(QName qname, XObject val, boolean isFromWithParam)249   public Arg(QName qname, XObject val, boolean isFromWithParam)
250   {
251 
252     m_qname = qname;
253     m_val = val;
254     m_isFromWithParam = isFromWithParam;
255     m_isVisible = !isFromWithParam;
256     m_expression = null;
257   }
258 }
259