<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xml.xpath2.processor</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xml.xpath2.processor</strong></font><br>
               Class DynamicContext</h2><br><hr><pre>public class <strong>DynamicContext</strong>
extends </pre>Interface for dynamic context.<hr><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Field Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public static  java.lang.String</code></td><td width="80%" align="left"><code><a href="#field_CODEPOINT_COLLATION">CODEPOINT_COLLATION</a></code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               The default collation which is guaranteed to always be implemented</td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType</code></td><td width="" align="left"><code><a href="#method_context_item">context_item</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get context item.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_context_position">context_position</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get context node position.</td></tr><tr valign="top"><td width="20%" align="right"><code>public java.util.GregorianCalendar</code></td><td width="" align="left"><code><a href="#method_current_date_time">current_date_time</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns the current date time using the GregorianCalendar.</td></tr><tr valign="top"><td width="20%" align="right"><code>public java.lang.String</code></td><td width="" align="left"><code><a href="#method_default_collation_name">default_collation_name</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Returns the current default collator</td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xml.xpath2.processor.ResultSequence</code></td><td width="" align="left"><code><a href="#method_evaluate_function">evaluate_function</a>(org.eclipse.wst.xml.xpath2.processor.internal.types.QName name
         ,
      java.util.Collection args)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Evaluate the function of the arguments.</td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xml.xpath2.processor.internal.Focus</code></td><td width="" align="left"><code><a href="#method_focus">focus</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Return focus.</td></tr><tr valign="top"><td width="20%" align="right"><code>public java.util.Comparator</code></td><td width="" align="left"><code><a href="#method_get_collation">get_collation</a>(java.lang.String uri)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Return a useful collator for the specified URI</td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xml.xpath2.processor.ResultSequence</code></td><td width="" align="left"><code><a href="#method_get_doc">get_doc</a>(java.net.URI uri)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get document.</td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType</code></td><td width="" align="left"><code><a href="#method_get_variable">get_variable</a>(org.eclipse.wst.xml.xpath2.processor.internal.types.QName name)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get variable.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_last">last</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get position of last item.</td></tr><tr valign="top"><td width="20%" align="right"><code>public int</code></td><td width="" align="left"><code><a href="#method_node_position">node_position</a>(org.w3c.dom.Node node)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr><tr valign="top"><td width="20%" align="right"><code>public java.net.URI</code></td><td width="" align="left"><code><a href="#method_resolve_uri">resolve_uri</a>(java.lang.String uri)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Resolve an URI</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_set_focus">set_focus</a>(org.eclipse.wst.xml.xpath2.processor.internal.Focus focus)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set focus.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_set_variable">set_variable</a>(org.eclipse.wst.xml.xpath2.processor.internal.types.QName var
         ,
      org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType val)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set variable.</td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xml.xpath2.processor.internal.types.XSDuration</code></td><td width="" align="left"><code><a href="#method_tz">tz</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Reads the day from a TimeDuration type</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Field Detail
               </h2></td></tr></table><h2><a name="field_CODEPOINT_COLLATION">CODEPOINT_COLLATION</a></h2><p><code>public static  java.lang.String <strong>CODEPOINT_COLLATION</strong></code></p><table><tr><td>The default collation which is guaranteed to always be implemented</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_context_item">context_item</a></h2><p><code>public org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType <strong>context_item</strong>()</code></p><p>Get context item.</p><h3>Returns</h3><p><code>org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType</code> - the context item.</p><hr><h2><a name="method_context_position">context_position</a></h2><p><code>public int <strong>context_position</strong>()</code></p><p>Get context node position.</p><h3>Returns</h3><p><code>int</code> - position of context node.</p><hr><h2><a name="method_current_date_time">current_date_time</a></h2><p><code>public java.util.GregorianCalendar <strong>current_date_time</strong>()</code></p><p>Returns the current date time using the GregorianCalendar.</p><h3>Returns</h3><p><code>java.util.GregorianCalendar</code> - The current date and time, which will always be same for the dynamic context.</p><hr><h2><a name="method_default_collation_name">default_collation_name</a></h2><p><code>public java.lang.String <strong>default_collation_name</strong>()</code></p><p>Returns the current default collator</p><h3>Returns</h3><p><code>java.lang.String</code> - The default name to use as the collator</p><hr><h2><a name="method_evaluate_function">evaluate_function</a></h2><p><code>public org.eclipse.wst.xml.xpath2.processor.ResultSequence <strong>evaluate_function</strong>(org.eclipse.wst.xml.xpath2.processor.internal.types.QName name
         ,
      java.util.Collection args)</code></p><p>Evaluate the function of the arguments.</p><h3>Parameters</h3><p><code>name</code> - is the name.</p><p><code>args</code> - are the arguments.</p><h3>Returns</h3><p><code>org.eclipse.wst.xml.xpath2.processor.ResultSequence</code> - result of the function evaluation.</p><h3>Throws:</h3><p><code>org.eclipse.wst.xml.xpath2.processor.DynamicError - dynamic error.</code></p><hr><h2><a name="method_focus">focus</a></h2><p><code>public org.eclipse.wst.xml.xpath2.processor.internal.Focus <strong>focus</strong>()</code></p><p>Return focus.</p><h3>Returns</h3><p><code>org.eclipse.wst.xml.xpath2.processor.internal.Focus</code> - Focus</p><hr><h2><a name="method_get_collation">get_collation</a></h2><p><code>public java.util.Comparator <strong>get_collation</strong>(java.lang.String uri)</code></p><p>Return a useful collator for the specified URI</p><h3>Parameters</h3><p><code>uri</code></p><h3>Returns</h3><p><code>java.util.Comparator</code> - A Jaa collator, or null, if no such Collator exists</p><hr><h2><a name="method_get_doc">get_doc</a></h2><p><code>public org.eclipse.wst.xml.xpath2.processor.ResultSequence <strong>get_doc</strong>(java.net.URI uri)</code></p><p>Get document.</p><h3>Parameters</h3><p><code>uri</code> - is the URI of the document.</p><h3>Returns</h3><p><code>org.eclipse.wst.xml.xpath2.processor.ResultSequence</code> - document.</p><hr><h2><a name="method_get_variable">get_variable</a></h2><p><code>public org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType <strong>get_variable</strong>(org.eclipse.wst.xml.xpath2.processor.internal.types.QName name)</code></p><p>Get variable.</p><h3>Parameters</h3><p><code>name</code> - is the name of the variable.</p><h3>Returns</h3><p><code>org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType</code> - variable.</p><hr><h2><a name="method_last">last</a></h2><p><code>public int <strong>last</strong>()</code></p><p>Get position of last item.</p><h3>Returns</h3><p><code>int</code> - last item position.</p><hr><h2><a name="method_node_position">node_position</a></h2><p><code>public int <strong>node_position</strong>(org.w3c.dom.Node node)</code></p><p></p><h3>Parameters</h3><p><code>node</code></p><h3>Returns</h3><p><code>int</code></p><hr><h2><a name="method_resolve_uri">resolve_uri</a></h2><p><code>public java.net.URI <strong>resolve_uri</strong>(java.lang.String uri)</code></p><p>Resolve an URI</p><h3>Parameters</h3><p><code>uri</code> - is the possibly relative URI to resolve</p><h3>Returns</h3><p><code>java.net.URI</code> - the absolutized, resolved URI.</p><hr><h2><a name="method_set_focus">set_focus</a></h2><p><code>public void <strong>set_focus</strong>(org.eclipse.wst.xml.xpath2.processor.internal.Focus focus)</code></p><p>Set focus.</p><h3>Parameters</h3><p><code>focus</code> - is focus to be set.</p><hr><h2><a name="method_set_variable">set_variable</a></h2><p><code>public void <strong>set_variable</strong>(org.eclipse.wst.xml.xpath2.processor.internal.types.QName var
         ,
      org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType val)</code></p><p>Set variable.</p><h3>Parameters</h3><p><code>var</code> - is name of the variable.</p><p><code>val</code> - is the value to be set for the variable.</p><hr><h2><a name="method_tz">tz</a></h2><p><code>public org.eclipse.wst.xml.xpath2.processor.internal.types.XSDuration <strong>tz</strong>()</code></p><p>Reads the day from a TimeDuration type</p><h3>Returns</h3><p><code>org.eclipse.wst.xml.xpath2.processor.internal.types.XSDuration</code> - current date time and implicit timezone.</p><hr></body></html>