Author: buildbot
Date: Tue Dec 16 16:31:41 2014
New Revision: 932990
Log:
Staging update by buildbot for sling
Added:
websites/staging/sling/trunk/content/documentation/the-sling-engine/sling-api-crud-support.html
Modified:
websites/staging/sling/trunk/content/ (props changed)
websites/staging/sling/trunk/content/documentation/the-sling-engine.html
Propchange: websites/staging/sling/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Tue Dec 16 16:31:41 2014
@@ -1 +1 @@
-1645984
+1645999
Modified:
websites/staging/sling/trunk/content/documentation/the-sling-engine.html
==============================================================================
--- websites/staging/sling/trunk/content/documentation/the-sling-engine.html
(original)
+++ websites/staging/sling/trunk/content/documentation/the-sling-engine.html
Tue Dec 16 16:31:41 2014
@@ -110,7 +110,7 @@
<h2 id="resources">Resources</h2>
<ul>
<li><a href="/documentation/the-sling-engine/resources.html">Resources</a></li>
-<li><a href="/documentation/the-sling-engine/crud-api.html">CRUD API</a></li>
+<li><a href="/documentation/the-sling-engine/crud-api.html">Sling API CRUD
Support</a></li>
<li><a
href="/documentation/the-sling-engine/wrap-or-decorate-resources.html">Wrap or
Decorate Resources</a></li>
<li><a
href="/documentation/the-sling-engine/mappings-for-resource-resolution.html">Mappings
for Resource Resolution</a></li>
</ul>
@@ -120,7 +120,7 @@
<li><a href="/documentation/the-sling-engine/featureflags.html">Feature
Flags</a></li>
</ul>
<div class="timestamp" style="margin-top: 30px; font-size: 80%;
text-align: right;">
- Rev. 1645984 by dklco on Tue, 16 Dec 2014 15:39:15 +0000
+ Rev. 1645999 by dklco on Tue, 16 Dec 2014 16:31:34 +0000
</div>
<div class="trademarkFooter">
Apache Sling, Sling, Apache, the Apache feather logo, and the Apache
Sling project
Added:
websites/staging/sling/trunk/content/documentation/the-sling-engine/sling-api-crud-support.html
==============================================================================
---
websites/staging/sling/trunk/content/documentation/the-sling-engine/sling-api-crud-support.html
(added)
+++
websites/staging/sling/trunk/content/documentation/the-sling-engine/sling-api-crud-support.html
Tue Dec 16 16:31:41 2014
@@ -0,0 +1,273 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE- 2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+ <head>
+ <title>Apache Sling - Sling API CRUD Support</title>
+ <link rel="icon" href="/res/favicon.ico">
+ <link rel="stylesheet" href="/res/site.css" type="text/css" media="all">
+ <link rel="stylesheet" href="/res/codehilite.css" type="text/css"
media="all">
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ </head>
+ <body>
+ <div class="title">
+ <div class="logo">
+ <a href="http://sling.apache.org/">
+ <img border="0" alt="Apache Sling" src="/res/logo.png">
+ </a>
+ </div>
+ <div class="header">
+ <a href="http://www.apache.org/">
+ <img border="0" alt="Apache" src="/res/apache.png">
+ </a>
+ </div>
+ </div>
+
+ <div class="menu">
+ <p><strong><a href="/documentation.html">Documentation</a></strong> <br
/>
+<a href="/documentation/getting-started.html">Getting Started</a> <br />
+<a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br />
+<a href="/documentation/development.html">Development</a> <br />
+<a href="/documentation/bundles.html">Bundles</a> <br />
+<a href="/documentation/tutorials-how-tos.html">Tutorials & How-Tos</a>
<br />
+<a href="/documentation/configuration.html">Configuration</a> </p>
+<p><a href="http://s.apache.org/sling.wiki">Wiki</a> <br />
+<a href="http://s.apache.org/sling.faq">FAQ</a> </p>
+<p><strong>API Docs</strong> <br />
+<a href="/apidocs/sling7/index.html">Sling 7</a> <br />
+<a href="/apidocs/sling6/index.html">Sling 6</a> <br />
+<a href="/apidocs/sling5/index.html">Sling 5</a> </p>
+<p><strong>Project info</strong> <br />
+<a href="/downloads.cgi">Downloads</a> <br />
+<a href="http://www.apache.org/licenses/">License</a> <br />
+<a href="/contributing.html">Contributing</a> <br />
+<a href="/news.html">News</a> <br />
+<a href="/links.html">Links</a> <br />
+<a href="/project-information.html">Project Information</a> <br />
+<a href="https://issues.apache.org/jira/browse/SLING">Issue Tracker</a> <br />
+<a href="http://ci.apache.org/builders/sling-trunk">Build Server</a> <br />
+<a href="/project-information/security.html">Security</a> </p>
+<p><strong>Source</strong> <br />
+<a href="http://svn.apache.org/viewvc/sling/trunk">Subversion</a> <br />
+<a href="git://git.apache.org/sling.git">Git</a> <br />
+<a href="https://github.com/apache/sling">Github Mirror</a> </p>
+<p><strong>Sponsorship</strong> <br />
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> <br />
+<a href="http://www.apache.org/foundation/sponsorship.html">Become a
Sponsor</a> <br />
+<a href="http://www.apache.org/foundation/buy_stuff.html">Buy Stuff</a> </p>
+<p><strong><a href="/sitemap.html">Site Map</a></strong></p>
+<!-- no valid ads for now, we'll reactivate this when needed
+<iframe
+ src="http://www.apache.org/ads/button.html"
+ style="border-width:0; float: left" frameborder="0"
+ scrolling="no"
+ width="135"
+ height="135">
+</iframe>
+-->
+ </div>
+
+ <div class="main">
+ <div class="breadcrump" style="font-size: 80%;">
+ <a href="/">Home</a> » <a
href="/documentation.html">Documentation</a> » <a
href="/documentation/the-sling-engine.html">The Sling Engine</a>
+ </div>
+
+
+
+ <h1>Sling API CRUD Support</h1>
+ <div class="toc">
+<ul>
+<li><a href="#apache-sling-api-support">Apache Sling API Support</a></li>
+<li><a href="#comparing-sling-api-crud-to-sling-post-servlet">Comparing Sling
API CRUD to Sling Post Servlet</a><ul>
+<li><a href="#updating-a-property">Updating a Property</a></li>
+<li><a href="#create-new-resource">Create New Resource</a></li>
+<li><a href="#remove-a-property">Remove a Property</a></li>
+<li><a href="#copy-a-resource">Copy a Resource</a></li>
+<li><a href="#move-a-resource">Move a Resource</a></li>
+<li><a href="#setting-non-string-value">Setting non-String Value</a></li>
+<li><a href="#delete-a-resource">Delete a Resource</a></li>
+</ul>
+</li>
+<li><a href="#value-class-support">Value Class Support</a></li>
+</ul>
+</div>
+<h2 id="apache-sling-api-support">Apache Sling API Support</h2>
+<p>As of version 2.3.0, the Sling API provides full Create Read Update Delete
(CRUD) features. CRUD support is provided by the addition of the following
methods to the ResourceResolver:</p>
+<ul>
+<li><a
href="https://sling.apache.org/apidocs/sling7/org/apache/sling/api/resource/ResourceResolver.html#delete-org.apache.sling.api.resource.Resource-">void
delete(Resource resource) throws PersistenceException</a></li>
+<li><a
href="https://sling.apache.org/apidocs/sling7/org/apache/sling/api/resource/ResourceResolver.html#create-org.apache.sling.api.resource.Resource-java.lang.String-java.util.Map-">Resource
create(Resource parent, String name, Map<String, Object> properties) throws
PersistenceException</a></li>
+<li><a
href="https://sling.apache.org/apidocs/sling7/org/apache/sling/api/resource/ResourceResolver.html#revert--">void
revert()</a></li>
+<li><a
href="https://sling.apache.org/apidocs/sling7/org/apache/sling/api/resource/ResourceResolver.html#commit--">void
commit() throws PersistenceException</a></li>
+<li><a
href="https://sling.apache.org/apidocs/sling7/org/apache/sling/api/resource/ResourceResolver.html#hasChanges--">boolean
hasChanges()</a></li>
+<li><a
href="https://sling.apache.org/apidocs/sling7/org/apache/sling/api/resource/ResourceResolver.html#refresh--">void
refresh()</a></li>
+</ul>
+<p>Which provide the ability to create and delete resources as well as the
addition of the ModifiableValueMap interface which is similar to the ValueMap
interface, but allows for updating properties on a resource.</p>
+<h2 id="comparing-sling-api-crud-to-sling-post-servlet">Comparing Sling API
CRUD to Sling Post Servlet</h2>
+<p>Here are some examples of common operations performed using the Sling Post
Servlet and Sling API CRUD support. Note, the examples are derived from the <a
href="http://dev.day.com/content/ddc/blog/2008/07/cheatsheet/_jcr_content/images/cheatsheet/back.png">SlingPostServlet
Cheatsheet</a>.</p>
+<h3 id="updating-a-property">Updating a Property</h3>
+<p>Update /myresource, setting the title and body:</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"text"</span> <span class="na">name=</span><span
class="s">"title"</span><span class="nt">></span>
+ <span class="nt"><textarea</span> <span class="na">name=</span><span
class="s">"body"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">Resource</span> <span
class="n">myResource</span> <span class="p">=</span> <span
class="n">resourceResolver</span><span class="p">.</span><span
class="n">getResource</span><span class="p">(</span>"<span
class="o">/</span><span class="n">myresource</span>"<span
class="p">);</span>
+<span class="n">ModifiableValueMap</span> <span class="k">properties</span>
<span class="p">=</span> <span class="n">myNode</span><span
class="p">.</span><span class="n">adaptTo</span><span class="p">(</span><span
class="n">ModifiableValueMap</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
+<span class="k">properties</span><span class="p">.</span><span
class="n">put</span><span class="p">(</span>"<span
class="n">title</span>"<span class="p">,</span> <span
class="p">{</span><span class="n">TITLE</span><span class="p">});</span>
+<span class="k">properties</span><span class="p">.</span><span
class="n">put</span><span class="p">(</span>"<span
class="n">body</span>"<span class="p">,</span> <span
class="p">{</span><span class="n">BODY</span><span class="p">});</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="create-new-resource">Create New Resource</h3>
+<p>Create a new resource below /myresource</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource/"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"text"</span> <span class="na">name=</span><span
class="s">"dummy"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">Map</span><span
class="o"><</span><span class="n">String</span><span class="p">,</span><span
class="n">Object</span><span class="o">></span> <span
class="k">properties</span> <span class="p">=</span> <span class="n">new</span>
<span class="n">HashMap</span><span class="o"><</span><span
class="n">String</span><span class="p">,</span><span
class="n">Object</span><span class="o">></span><span class="p">();</span>
+<span class="k">properties</span><span class="p">.</span><span
class="n">put</span><span class="p">(</span>"<span
class="n">jcr</span><span class="p">:</span><span
class="n">primaryType</span>"<span class="p">,</span> "<span
class="n">nt</span><span class="p">:</span><span
class="n">unstructured</span>"<span class="p">);</span>
+<span class="k">properties</span><span class="p">.</span><span
class="n">put</span><span class="p">(</span>"<span
class="n">sling</span><span class="p">:</span><span
class="n">resourceType</span>"<span class="p">,</span> "<span
class="n">myapp</span><span class="o">/</span><span
class="n">components</span><span class="o">/</span><span
class="n">mytype</span>"<span class="p">);</span>
+<span class="n">Resource</span> <span class="n">dummy</span> <span
class="p">=</span> <span class="n">resourceResolver</span><span
class="p">.</span><span class="n">create</span><span class="p">(</span><span
class="n">myResource</span><span class="p">,</span> "<span
class="n">dummy</span>"<span class="p">,</span> <span
class="k">properties</span><span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="remove-a-property">Remove a Property</h3>
+<p>Remove the property title</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">"title@Delete"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">ModifiableValueMap</span> <span
class="k">properties</span> <span class="p">=</span> <span
class="n">myResource</span><span class="p">.</span><span
class="n">adaptTo</span><span class="p">(</span><span
class="n">ModifiableValueMap</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
+<span class="k">properties</span><span class="p">.</span><span
class="n">remove</span><span class="p">(</span>"<span
class="n">title</span>"<span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="copy-a-resource">Copy a Resource</h3>
+<p>Copy the resource /myresource to /myresource2</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">":operation"</span> <span class="na">value=</span><span
class="s">"copy"</span><span class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">":dest"</span> <span class="na">value=</span><span
class="s">"/myresource2"</span><span class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">":replace"</span> <span class="na">value=</span><span
class="s">"true"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">Map</span><span
class="o"><</span><span class="n">String</span><span class="p">,</span><span
class="n">Object</span><span class="o">></span> <span
class="k">properties</span> <span class="p">=</span> <span
class="n">myResource</span><span class="p">.</span><span
class="n">adaptTo</span><span class="p">(</span><span
class="n">ValueMap</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
+<span class="n">Resource</span> <span class="n">myResource2</span> <span
class="p">=</span> <span class="n">resourceResolver</span><span
class="p">.</span><span class="n">create</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">myresource2</span>"<span class="p">,</span> <span
class="k">properties</span><span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="move-a-resource">Move a Resource</h3>
+<p>Move the resource /myresource2 to /myresource3</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource2"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">":operation"</span> <span class="na">value=</span><span
class="s">"move"</span><span class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">":dest"</span> <span class="na">value=</span><span
class="s">"/myresource3"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">Map</span><span
class="o"><</span><span class="n">String</span><span class="p">,</span><span
class="n">Object</span><span class="o">></span> <span
class="k">properties</span> <span class="p">=</span> <span
class="n">myResource2</span><span class="p">.</span><span
class="n">adaptTo</span><span class="p">(</span><span
class="n">ValueMap</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
+<span class="n">Resource</span> <span class="n">myResource3</span> <span
class="p">=</span> <span class="n">resourceResolver</span><span
class="p">.</span><span class="n">create</span><span class="p">(</span><span
class="n">null</span><span class="p">,</span> "<span
class="n">myresource3</span>"<span class="p">,</span> <span
class="k">properties</span><span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">delete</span><span class="p">(</span><span
class="n">myResource2</span><span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="setting-non-string-value">Setting non-String Value</h3>
+<p>Set the property date to a particular date</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource3"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"text"</span> <span class="na">name=</span><span
class="s">"date"</span> <span class="na">value=</span><span
class="s">"2008-06-13T18:55:00"</span><span class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">"date@TypeHint"</span> <span class="na">value=</span><span
class="s">"Date"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">Calendar</span> <span
class="n">calendar</span> <span class="p">=</span> <span
class="p">[</span><span class="n">SOME_DATE</span><span class="p">];</span>
+<span class="n">ModifiableValueMap</span> <span class="k">properties</span>
<span class="p">=</span> <span class="n">myResource3</span><span
class="p">.</span><span class="n">adaptTo</span><span class="p">(</span><span
class="n">ModifiableValueMap</span><span class="p">.</span><span
class="n">class</span><span class="p">);</span>
+<span class="k">properties</span><span class="p">.</span><span
class="n">put</span><span class="p">(</span>"<span
class="n">date</span>"<span class="p">,</span> <span
class="n">calendar</span><span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h3 id="delete-a-resource">Delete a Resource</h3>
+<p>Delete the resource /myresource</p>
+<p><strong>Sling Post Servlet</strong></p>
+<div class="codehilite"><pre><span class="nt"><form</span> <span
class="na">action=</span><span class="s">"/myresource"</span> <span
class="na">method=</span><span class="s">"POST"</span><span
class="nt">></span>
+ <span class="nt"><input</span> <span class="na">type=</span><span
class="s">"hidden"</span> <span class="na">name=</span><span
class="s">":operation"</span> <span class="na">value=</span><span
class="s">"delete"</span><span class="nt">></span>
+<span class="nt"></form></span>
+</pre></div>
+
+
+<p><strong>Sling API CRUD</strong></p>
+<div class="codehilite"><pre><span class="n">resourceResolver</span><span
class="p">.</span><span class="n">delete</span><span class="p">(</span><span
class="n">myResource</span><span class="p">);</span>
+<span class="n">resourceResolver</span><span class="p">.</span><span
class="n">commit</span><span class="p">();</span>
+</pre></div>
+
+
+<h2 id="value-class-support">Value Class Support</h2>
+<div class="info">
+ Please note, this information is specific to the Sling JCR Resource
implementation provided by the Apache Sling project. Other implementations may
have different value class support.
+</div>
+
+<p>The Classes implementing the following types are supported directly when
setting properties:</p>
+<ul>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html">Calendar</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html">InputStream</a></li>
+<li><a
href="http://www.day.com/maven/javax.jcr/javadocs/jcr-2.0/javax/jcr/Node.html">Node</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html">BigDecimal</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html">Long</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/lang/Short.html">Short</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html">Integer</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/lang/Number.html">Number</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html">Boolean</a></li>
+<li><a
href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html">String</a></li>
+</ul>
+<p>As well as the corresponding primitive types. Any object which implements
the Serializable interface will be serialized and the result of the
serialization will be saved as a binary value for the property.</p>
+ <div class="timestamp" style="margin-top: 30px; font-size: 80%;
text-align: right;">
+ Rev. 1645999 by dklco on Tue, 16 Dec 2014 16:31:34 +0000
+ </div>
+ <div class="trademarkFooter">
+ Apache Sling, Sling, Apache, the Apache feather logo, and the Apache
Sling project
+ logo are trademarks of The Apache Software Foundation. All other marks
mentioned
+ may be trademarks or registered trademarks of their respective owners.
+ </div>
+ </div>
+ </body>
+</html>