<!--

    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.

-->
<project name="Lens" xmlns="http://maven.apache.org/DECORATION/1.3.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd">

  <publishDate position="right"/>
  <version position="right"/>
  <bannerLeft>
      <name>Lens Analytics Platform</name>
      <src>/images/apache-lens-logo.png</src>
      <title>Lens Analytics Platform</title>
      <href>http://lens.apache.org</href>
      <height>54px</height>
  </bannerLeft>

  <bannerRight>
      <name>Apache</name>
      <src>http://www.apache.org/images/feather-small.gif</src>
      <href>http://www.apache.org</href>
  </bannerRight>

 <body>
    <menu name="Lens" >
      <item name="Overview" href="index.html" />
      <item name="Getting Started" href="./lenshome/quick-start.html" />
      <item name="Installing and Running Lens" href="./lenshome/install-and-run.html" />
      <item name="Pseudo Distributed Setup" href="./lenshome/pseudo-distributed-setup.html" />
      <item name="20 Minute Video demo" target="_new"
        href="http://cwiki.apache.org/confluence/display/LENS/2015/07/13/20+Minute+video+demo+of+Apache+Lens+through+examples" />
    </menu>
    <menu name="Releases" >
      <item name="Download" href="./releases/download.html" />
      <item name="Compatibility" href="./releases/compatibility.html" />
      <item name="All Releases" href="./releases/release-history.html" />
    </menu>
    <menu name="User Documentation">
      <item name="Lens User Guide" href="./user/index.html" />
      <item name="OLAP data cube" href="./user/olap-cube.html" />
      <item name="REST API" href="./rest.html" />
      <item name="Lens CLI" href="./user/cli.html" />
      <item name="Java Client Library" href="./user/java-client.html"/>
      <item name="JDBC Client" href="./user/jdbc-client.html"/>
      <item name="Lens ML" href="./user/ml.html" />
      <item name="FAQ" href="./user/faq.html"/>
    </menu>
    <menu name="Developer Documentation">
      <item name="Contributor Guide" href="./developer/contribute.html" />
      <item name="Committer Guide" href="./developer/commit.html" />
      <item name="Lens Design" href="./developer/design.html" />
      <item name="Lens Code Structure" href="./developer/codestructure.html" />
      <item name="Driver Developer Guide" href="./developer/driver.html" />
    </menu>
    <menu name="Admin Documentation">
      <item name="Admin Overview" href="./admin/index.html"/>
      <item name="Deployment" href="./admin/deployment.html"/>
      <item name="Configuration" href="./admin/config-server.html"/>
      <item name="Admin CLI" href="./admin/cli.html" />
    </menu>
    <menu ref="reports"/>
    <breadcrumbs>
        <item name="Apache" href="http://www.apache.org" />
        <item name="Lens" href="http://lens.apache.org" />
    </breadcrumbs>
  </body>
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.0</version>
  </skin>
  <poweredBy>
    <logo name="ASF" href="http://www.apache.org/"/>
  </poweredBy>
</project>
