blob: 58f9969cf111d949f3377e803d68a3a6e7bc2159 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (11.0.8) on Thu Oct 22 13:32:16 CDT 2020 -->
<title>DefaultFileLocatorHelper (Jetty :: Javadoc Build 10.0.0.beta3 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="dc.created" content="2020-10-22">
<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.3.1.js"></script>
<script type="text/javascript" src="../../../../../../../jquery/jquery-migrate-3.0.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="DefaultFileLocatorHelper (Jetty :: Javadoc Build 10.0.0.beta3 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance 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="class-use/DefaultFileLocatorHelper.html">Use</a></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><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&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.eclipse.jetty.osgi.boot.utils.internal</a></div>
<h2 title="Class DefaultFileLocatorHelper" class="title">Class DefaultFileLocatorHelper</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.eclipse.jetty.osgi.boot.utils.internal.DefaultFileLocatorHelper</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">DefaultFileLocatorHelper</span>
extends java.lang.Object
implements <a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></pre>
<div class="block">DefaultFileLocatorHelper
<p>
From a bundle to its location on the filesystem. Assumes the bundle is not a
jar.</div>
</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>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.eclipse.jetty.osgi.boot.utils.BundleFileLocatorHelper">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;org.eclipse.jetty.osgi.boot.utils.<a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></h3>
<code><a href="../BundleFileLocatorHelper.html#CLASS_NAME">CLASS_NAME</a>, <a href="../BundleFileLocatorHelper.html#DEFAULT">DEFAULT</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">DefaultFileLocatorHelper</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="t2" class="tableTab"><span><a href="javascript:show(2);">Instance 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>java.util.Enumeration&lt;java.net.URL&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#findEntries(org.osgi.framework.Bundle,java.lang.String)">findEntries</a></span>&#8203;(org.osgi.framework.Bundle&nbsp;bundle,
java.lang.String&nbsp;entryPath)</code></th>
<td class="colLast">
<div class="block">Helper method equivalent to Bundle#getEntry(String entryPath) except that
it searches for entries in the fragments by using the Bundle#findEntries
method.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>java.io.File</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getBundleInstallLocation(org.osgi.framework.Bundle)">getBundleInstallLocation</a></span>&#8203;(org.osgi.framework.Bundle&nbsp;bundle)</code></th>
<td class="colLast">
<div class="block">Works with equinox, felix, nuxeo and probably more.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>java.io.File</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFileInBundle(org.osgi.framework.Bundle,java.lang.String)">getFileInBundle</a></span>&#8203;(org.osgi.framework.Bundle&nbsp;bundle,
java.lang.String&nbsp;path)</code></th>
<td class="colLast">
<div class="block">Locate a file inside a bundle.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>java.net.URL</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getFileURL(java.net.URL)">getFileURL</a></span>&#8203;(java.net.URL&nbsp;url)</code></th>
<td class="colLast">
<div class="block">Only useful for equinox: on felix we get the file:// url already.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>java.net.URL</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getLocalURL(java.net.URL)">getLocalURL</a></span>&#8203;(java.net.URL&nbsp;url)</code></th>
<td class="colLast">
<div class="block">Only useful for equinox: on felix we get the file:// or jar:// url
already.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>java.io.File[]</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#locateJarsInsideBundle(org.osgi.framework.Bundle)">locateJarsInsideBundle</a></span>&#8203;(org.osgi.framework.Bundle&nbsp;bundle)</code></th>
<td class="colLast">
<div class="block">If the bundle is a jar, returns the jar.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>static boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#match(java.lang.String,java.lang.String...)">match</a></span>&#8203;(java.lang.String&nbsp;name,
java.lang.String...&nbsp;names)</code></th>
<td class="colLast">&nbsp;</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">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DefaultFileLocatorHelper</h4>
<pre>public&nbsp;DefaultFileLocatorHelper()</pre>
</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="match(java.lang.String,java.lang.String...)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>match</h4>
<pre class="methodSignature">public static&nbsp;boolean&nbsp;match&#8203;(java.lang.String&nbsp;name,
java.lang.String...&nbsp;names)</pre>
</li>
</ul>
<a id="getBundleInstallLocation(org.osgi.framework.Bundle)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getBundleInstallLocation</h4>
<pre class="methodSignature">public&nbsp;java.io.File&nbsp;getBundleInstallLocation&#8203;(org.osgi.framework.Bundle&nbsp;bundle)
throws java.lang.Exception</pre>
<div class="block">Works with equinox, felix, nuxeo and probably more. Not exactly in the
spirit of OSGi but quite necessary to support self-contained webapps and
other situations.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../BundleFileLocatorHelper.html#getBundleInstallLocation(org.osgi.framework.Bundle)">getBundleInstallLocation</a></code>&nbsp;in interface&nbsp;<code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>bundle</code> - The bundle</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Its installation location as a file.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - if unable to get the bundle install location</dd>
</dl>
</li>
</ul>
<a id="getFileInBundle(org.osgi.framework.Bundle,java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFileInBundle</h4>
<pre class="methodSignature">public&nbsp;java.io.File&nbsp;getFileInBundle&#8203;(org.osgi.framework.Bundle&nbsp;bundle,
java.lang.String&nbsp;path)
throws java.lang.Exception</pre>
<div class="block">Locate a file inside a bundle.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../BundleFileLocatorHelper.html#getFileInBundle(org.osgi.framework.Bundle,java.lang.String)">getFileInBundle</a></code>&nbsp;in interface&nbsp;<code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>bundle</code> - the bundle</dd>
<dd><code>path</code> - the path</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>file object</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - if unable to get the file in the bundle</dd>
</dl>
</li>
</ul>
<a id="findEntries(org.osgi.framework.Bundle,java.lang.String)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>findEntries</h4>
<pre class="methodSignature">public&nbsp;java.util.Enumeration&lt;java.net.URL&gt;&nbsp;findEntries&#8203;(org.osgi.framework.Bundle&nbsp;bundle,
java.lang.String&nbsp;entryPath)</pre>
<div class="block">Helper method equivalent to Bundle#getEntry(String entryPath) except that
it searches for entries in the fragments by using the Bundle#findEntries
method.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../BundleFileLocatorHelper.html#findEntries(org.osgi.framework.Bundle,java.lang.String)">findEntries</a></code>&nbsp;in interface&nbsp;<code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>bundle</code> - the bundle</dd>
<dd><code>entryPath</code> - the entry path</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>null or all the entries found for that path.</dd>
</dl>
</li>
</ul>
<a id="locateJarsInsideBundle(org.osgi.framework.Bundle)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>locateJarsInsideBundle</h4>
<pre class="methodSignature">public&nbsp;java.io.File[]&nbsp;locateJarsInsideBundle&#8203;(org.osgi.framework.Bundle&nbsp;bundle)
throws java.lang.Exception</pre>
<div class="block">If the bundle is a jar, returns the jar. If the bundle is a folder, look
inside it and search for jars that it returns.
<p>
Good enough for our purpose (TldLocationsCache when it scans for tld
files inside jars alone. In fact we only support the second situation for
development purpose where the bundle was imported in pde and the classes
kept in a jar.
</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../BundleFileLocatorHelper.html#locateJarsInsideBundle(org.osgi.framework.Bundle)">locateJarsInsideBundle</a></code>&nbsp;in interface&nbsp;<code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>bundle</code> - the bundle</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The jar(s) file that is either the bundle itself, either the jars
embedded inside it.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - if unable to locate the jars</dd>
</dl>
</li>
</ul>
<a id="getLocalURL(java.net.URL)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLocalURL</h4>
<pre class="methodSignature">public&nbsp;java.net.URL&nbsp;getLocalURL&#8203;(java.net.URL&nbsp;url)
throws java.lang.Exception</pre>
<div class="block">Only useful for equinox: on felix we get the file:// or jar:// url
already. Other OSGi implementations have not been tested
<p>
Get a URL to the bundle entry that uses a common protocol (i.e. file:
jar: or http: etc.).
</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../BundleFileLocatorHelper.html#getLocalURL(java.net.URL)">getLocalURL</a></code>&nbsp;in interface&nbsp;<code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>url</code> - the url</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a URL to the bundle entry that uses a common protocol</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - if unable to get the local url</dd>
</dl>
</li>
</ul>
<a id="getFileURL(java.net.URL)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getFileURL</h4>
<pre class="methodSignature">public&nbsp;java.net.URL&nbsp;getFileURL&#8203;(java.net.URL&nbsp;url)
throws java.lang.Exception</pre>
<div class="block">Only useful for equinox: on felix we get the file:// url already. Other
OSGi implementations have not been tested
<p>
Get a URL to the content of the bundle entry that uses the file:
protocol. The content of the bundle entry may be downloaded or extracted
to the local file system in order to create a file: URL.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../BundleFileLocatorHelper.html#getFileURL(java.net.URL)">getFileURL</a></code>&nbsp;in interface&nbsp;<code><a href="../BundleFileLocatorHelper.html" title="interface in org.eclipse.jetty.osgi.boot.utils">BundleFileLocatorHelper</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>url</code> - the url</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a URL to the content of the bundle entry that uses the file:
protocol
</p></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - if unable to get the file url</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="class-use/DefaultFileLocatorHelper.html">Use</a></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><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&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>
<p class="legalCopy"><small>Copyright &#169; 1995&#x2013;2020 <a href="https://webtide.com">Webtide</a>. All rights reserved.</small></p>
</footer>
</body>
</html>