blob: 740c417b44719e3e3018088afc7d1b96387bfe37 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.12) on Wed Aug 18 10:34:26 PDT 2021 -->
<title>SparkUtil</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-08-18">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SparkUtil";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.iceberg.spark</a></div>
<h2 title="Class SparkUtil" class="title">Class SparkUtil</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.iceberg.spark.SparkUtil</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">SparkUtil</span>
extends java.lang.Object</pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#HANDLE_TIMESTAMP_WITHOUT_TIMEZONE">HANDLE_TIMESTAMP_WITHOUT_TIMEZONE</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#TIMESTAMP_WITHOUT_TIMEZONE_ERROR">TIMESTAMP_WITHOUT_TIMEZONE_ERROR</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES">USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#canHandleTimestampWithoutZone(java.util.Map,org.apache.spark.sql.RuntimeConfig)">canHandleTimestampWithoutZone</a></span>&#8203;(java.util.Map&lt;java.lang.String,&#8203;java.lang.String&gt;&nbsp;readerConfig,
org.apache.spark.sql.RuntimeConfig&nbsp;sessionConf)</code></th>
<td class="colLast">
<div class="block">Allow reading/writing timestamp without time zone as timestamp with time zone.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static &lt;C,&#8203;T&gt;<br><a href="../util/Pair.html" title="class in org.apache.iceberg.util">Pair</a>&lt;C,&#8203;T&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#catalogAndIdentifier(java.util.List,java.util.function.Function,java.util.function.BiFunction,C,java.lang.String%5B%5D)">catalogAndIdentifier</a></span>&#8203;(java.util.List&lt;java.lang.String&gt;&nbsp;nameParts,
java.util.function.Function&lt;java.lang.String,&#8203;C&gt;&nbsp;catalogProvider,
java.util.function.BiFunction&lt;java.lang.String[],&#8203;java.lang.String,&#8203;T&gt;&nbsp;identiferProvider,
C&nbsp;currentCatalog,
java.lang.String[]&nbsp;currentNamespace)</code></th>
<td class="colLast">
<div class="block">A modified version of Spark's LookupCatalog.CatalogAndIdentifier.unapply
Attempts to find the catalog and identifier a multipart identifier represents</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static org.apache.hadoop.conf.Configuration</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hadoopConfCatalogOverrides(org.apache.spark.sql.SparkSession,java.lang.String)">hadoopConfCatalogOverrides</a></span>&#8203;(org.apache.spark.sql.SparkSession&nbsp;spark,
java.lang.String&nbsp;catalogName)</code></th>
<td class="colLast">
<div class="block">Pulls any Catalog specific overrides for the Hadoop conf from the current SparkSession, which can be
set via `spark.sql.catalog.$catalogName.hadoop.*`
Mirrors the override of hadoop configurations for a given spark session using `spark.hadoop.*`.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#hasTimestampWithoutZone(org.apache.iceberg.Schema)">hasTimestampWithoutZone</a></span>&#8203;(<a href="../Schema.html" title="class in org.apache.iceberg">Schema</a>&nbsp;schema)</code></th>
<td class="colLast">
<div class="block">Responsible for checking if the table schema has a timestamp without timezone column</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static <a href="../io/FileIO.html" title="interface in org.apache.iceberg.io">FileIO</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#serializableFileIO(org.apache.iceberg.Table)">serializableFileIO</a></span>&#8203;(<a href="../Table.html" title="interface in org.apache.iceberg">Table</a>&nbsp;table)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#useTimestampWithoutZoneInNewTables(org.apache.spark.sql.RuntimeConfig)">useTimestampWithoutZoneInNewTables</a></span>&#8203;(org.apache.spark.sql.RuntimeConfig&nbsp;sessionConf)</code></th>
<td class="colLast">
<div class="block">Check whether the spark session config contains a <a href="#USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES"><code>USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES</code></a>
property.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#validatePartitionTransforms(org.apache.iceberg.PartitionSpec)">validatePartitionTransforms</a></span>&#8203;(<a href="../PartitionSpec.html" title="class in org.apache.iceberg">PartitionSpec</a>&nbsp;spec)</code></th>
<td class="colLast">
<div class="block">Check whether the partition transforms in a spec can be used to write data.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="HANDLE_TIMESTAMP_WITHOUT_TIMEZONE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>HANDLE_TIMESTAMP_WITHOUT_TIMEZONE</h4>
<pre>public static final&nbsp;java.lang.String HANDLE_TIMESTAMP_WITHOUT_TIMEZONE</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.spark.SparkUtil.HANDLE_TIMESTAMP_WITHOUT_TIMEZONE">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="TIMESTAMP_WITHOUT_TIMEZONE_ERROR">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TIMESTAMP_WITHOUT_TIMEZONE_ERROR</h4>
<pre>public static final&nbsp;java.lang.String TIMESTAMP_WITHOUT_TIMEZONE_ERROR</pre>
</li>
</ul>
<a id="USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES</h4>
<pre>public static final&nbsp;java.lang.String USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.iceberg.spark.SparkUtil.USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="serializableFileIO(org.apache.iceberg.Table)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>serializableFileIO</h4>
<pre class="methodSignature">public static&nbsp;<a href="../io/FileIO.html" title="interface in org.apache.iceberg.io">FileIO</a>&nbsp;serializableFileIO&#8203;(<a href="../Table.html" title="interface in org.apache.iceberg">Table</a>&nbsp;table)</pre>
</li>
</ul>
<a id="validatePartitionTransforms(org.apache.iceberg.PartitionSpec)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>validatePartitionTransforms</h4>
<pre class="methodSignature">public static&nbsp;void&nbsp;validatePartitionTransforms&#8203;(<a href="../PartitionSpec.html" title="class in org.apache.iceberg">PartitionSpec</a>&nbsp;spec)</pre>
<div class="block">Check whether the partition transforms in a spec can be used to write data.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>spec</code> - a PartitionSpec</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.UnsupportedOperationException</code> - if the spec contains unknown partition transforms</dd>
</dl>
</li>
</ul>
<a id="catalogAndIdentifier(java.util.List,java.util.function.Function,java.util.function.BiFunction,java.lang.Object,java.lang.String[])">
<!-- -->
</a><a id="catalogAndIdentifier(java.util.List,java.util.function.Function,java.util.function.BiFunction,C,java.lang.String[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>catalogAndIdentifier</h4>
<pre class="methodSignature">public static&nbsp;&lt;C,&#8203;T&gt;&nbsp;<a href="../util/Pair.html" title="class in org.apache.iceberg.util">Pair</a>&lt;C,&#8203;T&gt;&nbsp;catalogAndIdentifier&#8203;(java.util.List&lt;java.lang.String&gt;&nbsp;nameParts,
java.util.function.Function&lt;java.lang.String,&#8203;C&gt;&nbsp;catalogProvider,
java.util.function.BiFunction&lt;java.lang.String[],&#8203;java.lang.String,&#8203;T&gt;&nbsp;identiferProvider,
C&nbsp;currentCatalog,
java.lang.String[]&nbsp;currentNamespace)</pre>
<div class="block">A modified version of Spark's LookupCatalog.CatalogAndIdentifier.unapply
Attempts to find the catalog and identifier a multipart identifier represents</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>nameParts</code> - Multipart identifier representing a table</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The CatalogPlugin and Identifier for the table</dd>
</dl>
</li>
</ul>
<a id="hasTimestampWithoutZone(org.apache.iceberg.Schema)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>hasTimestampWithoutZone</h4>
<pre class="methodSignature">public static&nbsp;boolean&nbsp;hasTimestampWithoutZone&#8203;(<a href="../Schema.html" title="class in org.apache.iceberg">Schema</a>&nbsp;schema)</pre>
<div class="block">Responsible for checking if the table schema has a timestamp without timezone column</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>schema</code> - table schema to check if it contains a timestamp without timezone column</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>boolean indicating if the schema passed in has a timestamp field without a timezone</dd>
</dl>
</li>
</ul>
<a id="canHandleTimestampWithoutZone(java.util.Map,org.apache.spark.sql.RuntimeConfig)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>canHandleTimestampWithoutZone</h4>
<pre class="methodSignature">public static&nbsp;boolean&nbsp;canHandleTimestampWithoutZone&#8203;(java.util.Map&lt;java.lang.String,&#8203;java.lang.String&gt;&nbsp;readerConfig,
org.apache.spark.sql.RuntimeConfig&nbsp;sessionConf)</pre>
<div class="block">Allow reading/writing timestamp without time zone as timestamp with time zone. Generally,
this is not safe as timestamp without time zone is supposed to represent wall clock time semantics,
i.e. no matter the reader/writer timezone 3PM should always be read as 3PM,
but timestamp with time zone represents instant semantics, i.e the timestamp
is adjusted so that the corresponding time in the reader timezone is displayed.
When set to false (default), we throw an exception at runtime
"Spark does not support timestamp without time zone fields" if reading timestamp without time zone fields</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>readerConfig</code> - table read options</dd>
<dd><code>sessionConf</code> - spark session configurations</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>boolean indicating if reading timestamps without timezone is allowed</dd>
</dl>
</li>
</ul>
<a id="useTimestampWithoutZoneInNewTables(org.apache.spark.sql.RuntimeConfig)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>useTimestampWithoutZoneInNewTables</h4>
<pre class="methodSignature">public static&nbsp;boolean&nbsp;useTimestampWithoutZoneInNewTables&#8203;(org.apache.spark.sql.RuntimeConfig&nbsp;sessionConf)</pre>
<div class="block">Check whether the spark session config contains a <a href="#USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES"><code>USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES</code></a>
property.
Default value - false
If true in new table all timestamp fields will be stored as <a href="../types/Types.TimestampType.html#withoutZone()"><code>Types.TimestampType.withoutZone()</code></a>,
otherwise <a href="../types/Types.TimestampType.html#withZone()"><code>Types.TimestampType.withZone()</code></a> will be used</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>sessionConf</code> - a spark runtime config</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if the session config has <a href="#USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES"><code>USE_TIMESTAMP_WITHOUT_TIME_ZONE_IN_NEW_TABLES</code></a> property
and this property is set to true</dd>
</dl>
</li>
</ul>
<a id="hadoopConfCatalogOverrides(org.apache.spark.sql.SparkSession,java.lang.String)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>hadoopConfCatalogOverrides</h4>
<pre class="methodSignature">public static&nbsp;org.apache.hadoop.conf.Configuration&nbsp;hadoopConfCatalogOverrides&#8203;(org.apache.spark.sql.SparkSession&nbsp;spark,
java.lang.String&nbsp;catalogName)</pre>
<div class="block">Pulls any Catalog specific overrides for the Hadoop conf from the current SparkSession, which can be
set via `spark.sql.catalog.$catalogName.hadoop.*`
Mirrors the override of hadoop configurations for a given spark session using `spark.hadoop.*`.
The SparkCatalog allows for hadoop configurations to be overridden per catalog, by setting
them on the SQLConf, where the following will add the property "fs.default.name" with value
"hdfs://hanksnamenode:8020" to the catalog's hadoop configuration.
SparkSession.builder()
.config(s"spark.sql.catalog.$catalogName.hadoop.fs.default.name", "hdfs://hanksnamenode:8020")
.getOrCreate()</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>spark</code> - The current Spark session</dd>
<dd><code>catalogName</code> - Name of the catalog to find overrides for.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the Hadoop Configuration that should be used for this catalog, with catalog specific overrides applied.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>