Author: doebele
Date: Wed Mar  9 21:39:37 2022
New Revision: 1898806

URL: http://svn.apache.org/viewvc?rev=1898806&view=rev
Log:
optimization

Modified:
    empire-db/site/preview-v3/css/common.css
    empire-db/site/preview-v3/css/content.css
    empire-db/site/preview-v3/js/site.js
    empire-db/site/preview-v3/pages/community.html
    empire-db/site/preview-v3/pages/download.html
    empire-db/site/preview-v3/pages/home.html
    empire-db/site/preview-v3/pages/project.html

Modified: empire-db/site/preview-v3/css/common.css
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/css/common.css?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/css/common.css (original)
+++ empire-db/site/preview-v3/css/common.css Wed Mar  9 21:39:37 2022
@@ -165,7 +165,7 @@ table {
        */
 }
 .band .content {
-       padding: 20px;  
+       padding: 20px;
 }
 .first-letter {
 /*     font-weight: bold; */

Modified: empire-db/site/preview-v3/css/content.css
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/css/content.css?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/css/content.css (original)
+++ empire-db/site/preview-v3/css/content.css Wed Mar  9 21:39:37 2022
@@ -369,17 +369,25 @@ table.layout > tbody > tr > th {
        min-width: 400px;
        text-align: justify;
 }
-.layout2col .col-inlay {
-       /* this is required for some unknown reason */
-       border-top:    1px transparent solid;
-       border-bottom: 1px transparent solid;
-}
 .layout2col .col-left {
        padding-right: 20px;
 }
 .layout2col .col-right {
        padding-left: 20px;
 }
+.layout2col .col-left > .col-inlay {
+       padding-left: 10px;
+}
+.layout2col .col-right > .col-inlay {
+       padding-right: 10px;
+}
+.layout2col .col-inlay {
+       padding-top: 5px;
+       padding-bottom: 15px;
+       /* this is required for some unknown reason */
+       border-top:    1px transparent solid;
+       border-bottom: 1px transparent solid;
+}
 .layout2col .col-one,
 .layout2col .col-four {
        background-color: #E0E0E0;
@@ -397,14 +405,19 @@ table.layout > tbody > tr > th {
                float: none;
                min-width: inherit;
        }
-       .layout2col .col-one > .col-inlay,
-       .layout2col .col-three > .col-inlay {
+       .layout2col .col-one,
+       .layout2col .col-three {
                background-color: #E0E0E0;
        }
-       .layout2col .col-two > .col-inlay,
-       .layout2col .col-four > .col-inlay {
+       .layout2col .col-two,
+       .layout2col .col-four {
                background-color: #F0F0F0;
        }
+       .layout2col .col-left > .col-inlay,
+       .layout2col .col-right > .col-inlay {
+               padding-left: 10px;
+               padding-right: 10px;
+       }
 }
 
 

Modified: empire-db/site/preview-v3/js/site.js
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/js/site.js?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/js/site.js (original)
+++ empire-db/site/preview-v3/js/site.js Wed Mar  9 21:39:37 2022
@@ -79,6 +79,7 @@ const Page = {
                // controls
                TabView.init();
                Checkbox.init();
+               LayoutResize.init();
                // scroll to section
                var section = $.urlParam('sec');
                if (section) {
@@ -456,6 +457,53 @@ const TabView = {
                });
        }
 }
+
+
+/**
+ * LayoutResize
+ */
+const LayoutResize = {
+       layouts: null,
+       // init
+       init: function(menuId) {
+               layouts  = $('.layoutColResize:not(.initialized)');
+               if (layouts.length==0)
+                       return;
+               layouts.addClass("initialized");
+               LayoutResize.resizeLayouts();
+               $(window).resize(function() {
+                       LayoutResize.resizeLayouts();
+               });
+       },
+       /* resizeLayout */
+       resizeLayouts: function() {
+               layouts.each(function() {
+                       let children = $(this).children();
+                       if (children.length!=2)
+                               return;
+                       let left  = $(children[0]).find(".col-inlay");
+                       let right = $(children[1]).find(".col-inlay");
+                       if (left.length!=1 || right.length!=1)
+                               return;
+                       // reset
+                       left.height('auto');
+                       right.height('auto');
+                       // check alignment
+                       if (left.offset().top < right.offset().top)
+                               return; // above;
+                       // detect
+                       let hl = left.height();
+                       let hr = right.height();
+                       if (hl==hr)
+                               return;
+                       log("resizeLayout");
+                       if (hl>hr)
+                               right.height(hl);
+                   else
+                       left.height(hr);
+               });
+       }
+}
 
 /**
  * Checkbox

Modified: empire-db/site/preview-v3/pages/community.html
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/pages/community.html?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/pages/community.html (original)
+++ empire-db/site/preview-v3/pages/community.html Wed Mar  9 21:39:37 2022
@@ -48,7 +48,7 @@
 </head>
 <body>
 <div id="bodywrapper">
-<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Hello me on GitHub">Test me on GitHub</a>
+<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Fork me on GitHub"></a>
 <nav id="navigation">
 <!-- Main Nav -->
 <div class="navbar navbar-dark navbar-fixed-top navbar-main-style" 
id="navbar-main">

Modified: empire-db/site/preview-v3/pages/download.html
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/pages/download.html?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/pages/download.html (original)
+++ empire-db/site/preview-v3/pages/download.html Wed Mar  9 21:39:37 2022
@@ -52,7 +52,7 @@
 </head>
 <body>
 <div id="bodywrapper">
-<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Hello me on GitHub">Test me on GitHub</a>
+<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Fork me on GitHub"></a>
 <nav id="navigation">
 <!-- Main Nav -->
 <div class="navbar navbar-dark navbar-fixed-top navbar-main-style" 
id="navbar-main">
@@ -296,7 +296,7 @@
 
                        <p>Here's what we've got:</p>
 
-                       <div class="layout2col">
+                       <div class="layout2col layoutColResize">
                                <div class="col-left col-one">
                                <div class="col-inlay">
                                <!-- col start -->
@@ -317,7 +317,7 @@
                                </div>
                        </div>
 
-                       <div class="layout2col">
+                       <div class="layout2col layoutColResize">
                                <div class="col-left col-three">
                                <div class="col-inlay">
                                <!-- col start -->
@@ -442,7 +442,7 @@ app.<span class="func">generate</span>(d
                                        <div>In order to start the code 
generation, run this from a command prompt</div>
                                        <div class="codebox">
 <pre>
-<span class="prompt">&gt;</span> mvn <span 
class="literal">empire-db:codegen</span>
+<span class="prompt">&gt;</span> mvn <span class="obj">empire-db:codegen</span>
 </pre>
                                        </div>
                                <!-- col end -->

Modified: empire-db/site/preview-v3/pages/home.html
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/pages/home.html?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/pages/home.html (original)
+++ empire-db/site/preview-v3/pages/home.html Wed Mar  9 21:39:37 2022
@@ -49,7 +49,7 @@
 </head>
 <body>
 <div id="bodywrapper">
-<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Hello me on GitHub">Test me on GitHub</a>
+<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Fork me on GitHub"></a>
 <nav id="navigation">
 <!-- Main Nav -->
 <div class="navbar navbar-dark navbar-fixed-top navbar-main-style" 
id="navbar-main">

Modified: empire-db/site/preview-v3/pages/project.html
URL: 
http://svn.apache.org/viewvc/empire-db/site/preview-v3/pages/project.html?rev=1898806&r1=1898805&r2=1898806&view=diff
==============================================================================
--- empire-db/site/preview-v3/pages/project.html (original)
+++ empire-db/site/preview-v3/pages/project.html Wed Mar  9 21:39:37 2022
@@ -48,7 +48,7 @@
 </head>
 <body>
 <div id="bodywrapper">
-<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Hello me on GitHub">Test me on GitHub</a>
+<a class="github-fork-ribbon" target="_blank" 
href="https://github.com/apache/empire-db"; data-ribbon="Fork me on GitHub" 
title="Fork me on GitHub"></a>
 <nav id="navigation">
 <!-- Main Nav -->
 <div class="navbar navbar-dark navbar-fixed-top navbar-main-style" 
id="navbar-main">
@@ -334,12 +334,12 @@ log.<span class="func">info</span>(<span
                                                <div class="tab-body">
                                                        <!-- tab-page -->
 <pre>
-<span class="comment">// Microsoft SQL-Server syntax</span>
+<span class="comment">// Microsoft SQLServer syntax</span>
 <span class="word">UPDATE</span> <span class="alias">t2</span>
 <span class="word">SET</span> BASE_PRICE=<span class="func">round</span>(<span 
class="alias">t2</span>.BASE_PRICE*105/100,2), SALES_INFO=<span 
class="param"><span class="literal">'Price update 2022-03-03'</span></span>
 <span class="word">FROM</span> MODEL <span class="alias">t2</span>
      <span class="word">INNER JOIN</span> BRAND <span class="alias">t1</span> 
<span class="word">ON</span> <span class="alias">t1</span>.WMI = <span 
class="alias">t2</span>.WMI
-<span class="word">WHERE</span> upper(<span class="alias">t1</span>.NAME) LIKE 
<span class="param"><span class="literal">'VOLKSWAGEN'</span></span> <span 
class="word">AND</span> <span class="alias">t2</span>.ENGINE_TYPE=<span 
class="param"><span class="literal">'D'</span></span>
+<span class="word">WHERE</span> upper(<span class="alias">t1</span>.NAME) 
<span class="word">LIKE</span> <span class="param"><span 
class="literal">'VOLKSWAGEN'</span></span> <span class="word">AND</span> <span 
class="alias">t2</span>.ENGINE_TYPE=<span class="param"><span 
class="literal">'D'</span></span>
 </pre>
                                                        <!-- tab-page -->
 <pre>
@@ -349,15 +349,15 @@ log.<span class="func">info</span>(<span
 <span class="word">FROM</span> MODEL <span class="alias">t2</span>
      <span class="word">INNER JOIN</span> BRAND <span class="alias">t1</span> 
<span class="word">ON</span> <span class="alias">t1</span>.WMI = <span 
class="alias">t2</span>.WMI
 <span class="word">WHERE</span> <span class="alias">t0</span>.ID=<span 
class="alias">t2</span>.ID
-  <span class="word">AND</span> upper(<span class="alias">t1</span>.NAME) LIKE 
<span class="param"><span class="literal">'VOLKSWAGEN'</span></span> <span 
class="word">AND</span> <span class="alias">t2</span>.ENGINE_TYPE=<span 
class="param"><span class="literal">'D'</span></span>
+  <span class="word">AND</span> upper(<span class="alias">t1</span>.NAME) 
<span class="word">LIKE</span> <span class="param"><span 
class="literal">'VOLKSWAGEN'</span></span> <span class="word">AND</span> <span 
class="alias">t2</span>.ENGINE_TYPE=<span class="param"><span 
class="literal">'D'</span></span>
 </pre>
                                                        <!-- tab-page -->
 <pre>
 <span class="comment">// Oracle syntax</span>
 <span class="word">MERGE INTO</span> MODEL <span class="alias">t2</span>
-<span class="word">USING</span> (<span class="word">SELECT</span> <span 
class="alias">t2</span>.ID, <span class="func">round</span>(<span 
class="alias">t2</span>.BASE_PRICE*105/100,2) AS COL_0
+<span class="word">USING</span> (<span class="word">SELECT</span> <span 
class="alias">t2</span>.ID, <span class="func">round</span>(<span 
class="alias">t2</span>.BASE_PRICE*105/100,2) <span class="word">AS</span> COL_0
        <span class="word">FROM</span> MODEL <span class="alias">t2</span> 
<span class="word">INNER JOIN</span> BRAND <span class="alias">t1</span> <span 
class="word">ON</span> <span class="alias">t1</span>.WMI = <span 
class="alias">t2</span>.WMI
-       <span class="word">WHERE</span> upper(<span 
class="alias">t1</span>.NAME) LIKE <span class="param"><span 
class="literal">'VOLKSWAGEN'</span></span> <span class="word">AND</span> <span 
class="alias">t2</span>.ENGINE_TYPE=<span class="param"><span 
class="literal">'D'</span></span>) <span class="alias">q0</span>
+       <span class="word">WHERE</span> upper(<span 
class="alias">t1</span>.NAME) <span class="word">LIKE</span> <span 
class="param"><span class="literal">'VOLKSWAGEN'</span></span> <span 
class="word">AND</span> <span class="alias">t2</span>.ENGINE_TYPE=<span 
class="param"><span class="literal">'D'</span></span>) <span 
class="alias">q0</span>
    <span class="word">ON</span> ( <span class="alias">q0</span>.ID=<span 
class="alias">t2</span>.ID)
 <span class="word">WHEN MATCHED THEN</span> <span class="word">UPDATE</span> 
 <span class="word">SET</span> BASE_PRICE=<span class="alias">q0</span>.COL_0, 
SALES_INFO=<span class="param"><span class="literal">'Price update 
2022-03-03'</span></span>
@@ -553,7 +553,7 @@ log.<span class="func">info</span>(<span
 <span class="comment">// query a single String </span>
 <span class="type">String</span> text = <span class="var">utils</span>.<span 
class="func">querySingleString</span>(<span class="var">cmd</span>);
 <span class="comment">// query a list of Strings</span>
-<span class="type">List</span>&lt;String&gt; <span class="var">list</span> = 
<span class="var">utils</span>.<span class="func">querySimpleList</span>(<span 
class="type">String</span>.<span class="keyword">class</span>, <span 
class="var">cmd</span>);
+<span class="type">List</span>&lt;<span class="type">String</span>&gt; <span 
class="var">list</span> = <span class="var">utils</span>.<span 
class="func">querySimpleList</span>(<span class="type">String</span>.<span 
class="keyword">class</span>, <span class="var">cmd</span>);
 <span class="comment">// query a single row of data</span>
 <span class="type">Object</span>[] row = <span class="var">utils</span>.<span 
class="func">querySingleRow</span>(<span class="var">cmd</span>);
 <span class="comment">// query a set of options consisting of a value + text 
pair</span>
@@ -697,7 +697,7 @@ log.<span class="func">info</span>(<span
                        <p>In practice you almost never have "the one query" on 
a set of data. Rather your query often depends on the context and certain 
conditions for which you might need to dynamically select columns, add 
constraints and joins or set the row order.</p>
 
                        <p>Suppose your application provides a view of car 
dealers. A user might decide to list them all, or choose to set any of three 
possible filters: Country, Brand and/or the Minimum Annual Turnover. 
-                       Depending on which of those filters the user chooses, 
different constraints and joins need to be set and even the columns that should 
be displayed differ. So how do you dynamically build such a query statement?</p>
+                       Depending on which of those filters the user chooses, 
different constraints and joins need to be added to the statement and even the 
columns that should be displayed (i.e. selected) differ. So how do you 
dynamically build such a query statement?</p>
                        <!-- example -->
                        <div><a class="showMe">OK, show me how to do 
it</a></div>
                        
@@ -717,7 +717,7 @@ log.<span class="func">info</span>(<span
     if (brand!=<span class="keyword">null</span>) {
         <span class="comment">// Single brand</span>
         <span class="var">cmd</span>.<span class="func">join</span>(<span 
class="obj">DEALER</span>.<span class="field">ID</span>, <span 
class="obj">DEALER_BRANDS</span>.<span class="field">DEALER_ID</span>)
-           .<span class="func">where</span>(<span 
class="obj">BRAND</span>.<span class="field">NAME</span>.<span 
class="func">likeUpper</span>(brand));
+           .<span class="func">where</span>(<span 
class="obj">BRAND</span>.<span class="field">NAME</span>.<span 
class="func">likeUpper</span>(brand+<span class="literal">"%"</span>));
         <span class="comment">// select the BRAND NAME</span>
         <span class="var">cmd</span>.<span class="func">select</span>(<span 
class="obj">BRAND</span>.<span class="field">NAME</span>);
     } else {
@@ -741,19 +741,20 @@ log.<span class="func">info</span>(<span
             .<span class="func">groupBy</span>(<span 
class="obj">SALES</span>.<span class="field">DEALER_ID</span>)
             .<span class="func">having</span>(<span 
class="obj">SALES</span>.<span class="field">PRICE</span>.<span 
class="func">sum</span>().<span class="func">isMoreOrEqual</span>(minTurnover));
         <span class="type">DBQuery</span> qry = <span 
class="keyword">new</span> <span class="type">DBQuery</span>(qryCmd, <span 
class="literal">"qsales"</span>);
+        <span class="type">DBColumn</span> <span class="obj">PRICE_SUM</span> 
= qry.<span class="func">column</span>(<span class="obj">SALES</span>.<span 
class="field">PRICE</span>.<span class="func">sum</span>());
         <span class="comment">// join with dealer query</span>
         <span class="var">cmd</span>.<span class="func">join</span>(<span 
class="obj">DEALER</span>.<span class="field">ID</span>, qry.<span 
class="func">column</span>(<span class="obj">SALES</span>.<span 
class="field">DEALER_ID</span>));
         <span class="comment">// select the turnover</span>
-        <span class="var">cmd</span>.<span 
class="func">select</span>(qry.<span class="func">column</span>(<span 
class="obj">SALES</span>.<span class="field">PRICE</span>.<span 
class="func">sum</span>()).<span class="func">as</span>(<span 
class="literal">"TURNOVER"</span>));
+        <span class="var">cmd</span>.<span class="func">select</span>(<span 
class="obj">PRICE_SUM</span>.<span class="func">as</span>(<span 
class="literal">"TURNOVER"</span>));
         <span class="comment">// order by turnover descending</span>
-        <span class="var">cmd</span>.<span 
class="func">orderBy</span>(qry.<span class="func">column</span>(<span 
class="obj">SALES</span>.<span class="field">PRICE</span>.<span 
class="func">sum</span>()).<span class="func">desc</span>());
+        <span class="var">cmd</span>.<span class="func">orderBy</span>(<span 
class="obj">PRICE_SUM</span>.<span class="func">desc</span>());
     }
     <span class="comment">// order by</span>
     <span class="var">cmd</span>.<span class="func">orderBy</span>(<span 
class="obj">DEALER</span>.<span class="field">COMPANY_NAME</span>);
     
     <span class="comment">// Done. For curiosity, get the row count</span>
     <span class="type">int</span> dealerCount = <span 
class="var">context</span>.<span class="func">getUtils</span>().<span 
class="func">queryRowCount</span>(<span class="var">cmd</span>);
-    log.<span class="func">info</span>(<span class="literal">"Query will <span 
class="keyword">return</span> {} dealers"</span>, dealerCount);
+    log.<span class="func">info</span>(<span class="literal">"Query will 
return {} dealers"</span>, dealerCount);
     
     <span class="comment">// Finally, execute the query and print the 
result</span>
     <span class="type">List</span>&lt;<span 
class="type">DataListEntry</span>&gt; <span class="var">list</span> = <span 
class="var">context</span>.<span class="func">getUtils</span>().<span 
class="func">queryDataList</span>(<span class="var">cmd</span>);
@@ -767,19 +768,19 @@ log.<span class="func">info</span>(<span
                                                <div class="title">SQL (just 
one possiblity)</div>
 <pre>
 <span class="word">SELECT</span> <span class="alias">t3</span>.COMPANY_NAME, 
<span class="alias">t3</span>.CITY, <span class="alias">t3</span>.COUNTRY, 
-     <span class="alias">qbrands</span>.NAME_STRAGG AS ALL_BRANDS, <span 
class="alias">qsales</span>.PRICE_SUM AS TURNOVER
+     <span class="alias">qbrands</span>.NAME_STRAGG <span 
class="word">AS</span> ALL_BRANDS, <span class="alias">qsales</span>.PRICE_SUM 
<span class="word">AS</span> TURNOVER
 <span class="word">FROM</span> DEALER <span class="alias">t3</span>
-     <span class="word">INNER JOIN</span> (<span class="word">SELECT</span> 
<span class="alias">t4</span>.DEALER_ID, string_agg(<span 
class="alias">t1</span>.NAME,<span class="literal">'|'</span>) AS NAME_STRAGG
+     <span class="word">INNER JOIN</span> (<span class="word">SELECT</span> 
<span class="alias">t4</span>.DEALER_ID, string_agg(<span 
class="alias">t1</span>.NAME,<span class="literal">'|'</span>) <span 
class="word">AS</span> NAME_STRAGG
                  <span class="word">FROM</span> DEALER_BRANDS <span 
class="alias">t4</span> <span class="word">INNER JOIN</span> BRAND <span 
class="alias">t1</span> <span class="word">ON</span> <span 
class="alias">t1</span>.WMI = <span class="alias">t4</span>.WMI
                  <span class="word">GROUP BY</span> <span 
class="alias">t4</span>.DEALER_ID
                ) <span class="alias">qbrands</span> <span 
class="word">ON</span> <span class="alias">qbrands</span>.DEALER_ID = <span 
class="alias">t3</span>.ID
-     <span class="word">INNER JOIN</span> (<span class="word">SELECT</span> 
<span class="alias">t5</span>.DEALER_ID, sum(<span 
class="alias">t5</span>.PRICE) AS PRICE_SUM
+     <span class="word">INNER JOIN</span> (<span class="word">SELECT</span> 
<span class="alias">t5</span>.DEALER_ID, sum(<span 
class="alias">t5</span>.PRICE) <span class="word">AS</span> PRICE_SUM
                  <span class="word">FROM</span> SALES <span 
class="alias">t5</span>
                  <span class="word">WHERE</span> <span 
class="alias">t5</span>.YEAR=<span class="literal">2021</span>
                  <span class="word">GROUP BY</span> <span 
class="alias">t5</span>.DEALER_ID
                  <span class="word">HAVING</span> sum(<span 
class="alias">t5</span>.PRICE)&gt;=<span class="literal">100000</span>
                ) <span class="alias">qsales</span> <span 
class="word">ON</span> <span class="alias">qsales</span>.DEALER_ID = <span 
class="alias">t3</span>.ID
-<span class="word">WHERE</span> ucase(<span class="alias">t3</span>.COUNTRY) 
LIKE ucase(<span class="literal">'USA'</span>)
+<span class="word">WHERE</span> ucase(<span class="alias">t3</span>.COUNTRY) 
<span class="word">LIKE</span> ucase(<span class="literal">'USA'</span>)
 <span class="word">ORDER BY</span> <span class="alias">qsales</span>.PRICE_SUM 
DESC, <span class="alias">t3</span>.COMPANY_NAME
 </pre>
                                                </div>
@@ -805,7 +806,8 @@ log.<span class="func">info</span>(<span
                        <div class="footer-info">
                                <table class="inline">
                                        <tr>
-                                               <td class="logo"><img 
alt="Empire-db" src="../res/empire-db-sg.png" /></td>
+                                               <td class="logo">
+                                               <img alt="Empire-db" 
src="../res/empire-db-sg.png" /></td>
                                                <td class="info">
                                                        <span>Copyright © The 
Apache Software Foundation. All Rights Reserved.</span>
                                                        <br/>


Reply via email to