<?xml version="1.0" encoding="UTF-8"?>

<!--
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 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"
         name="Jackrabbit Oak">
  <body>
    <menu name="Overview">
      <item href="index.html" name="Jackrabbit Oak" />
      <item href="license.html" name="License" />
      <item href="downloads.html" name="Downloads" />
      <item href="articles.html" name="Articles" />
    </menu>
    <menu name="Concepts and Architecture">
      <item href="architecture/overview.html" name="Overview" />
      <item href="architecture/nodestate.html" name="The Node State Model" />
    </menu>
    <menu name="Main APIs">
      <item href="http://www.day.com/specs/jcr/2.0/index.html" name="JCR API" />
      <item href="oak_api/overview.html" name="Oak API" />
    </menu>
    <menu name="Features and Plugins">
      <item href="nodestore/overview.html" name="Node Storage" collapse="false">
        <item href="nodestore/documentmk.html" name="Document NodeStore" collapse="false">
          <item href="nodestore/document/node-bundling.html" name="Node Bundling" />
          <item href="nodestore/document/secondary-store.html" name="Secondary Store" />
          <item href="nodestore/persistent-cache.html" name="Persistent Cache" />
          <item href="clustering.html" name="Clustering" />
        </item>
        <item href="nodestore/segment/overview.html" name="Segment NodeStore" />
        <item href="nodestore/compositens.html" name="Composite NodeStore" />
      </item>
      <item href="plugins/blobstore.html" name="Blob Storage" />
      <item href="query/query.html" name="Query" collapse="false">
        <item href="query/query-engine.html" name="Query Engine" />
        <item href="query/query-troubleshooting.html" name="Troubleshooting" />
        <item href="query/indexing.html" name="Indexing" />
        <item href="query/lucene.html" name="Lucene Index" />
        <item href="query/property-index.html" name="Property Index" />
        <item href="query/solr.html" name="Solr Index" />
      </item>
      <item href="security/overview.html" name="Security" />
      <item href="features/atomic-counter.html" name="Atomic Counter" />
      <item href="features/observation.html" name="Observation" />
    </menu>
    <menu name="Using Oak">
      <item href="use_getting_started.html" name="Getting Started" />
      <item href="construct.html" name="Repository Construction" />
      <item href="osgi_config.html" name="Configuring Oak" />
      <item href="command_line.html" name="Command Line Tools" />
      <item href="migration.html" name="Migration" />
      <item href="differences.html" name="Differences to Jackrabbit 2" />
      <item href="known_issues.html" name="Known Issues" />
      <item href="dos_and_donts.html" name="Dos and Don'ts" />
      <item href="coldstandby/coldstandby.html" name="Cold Standby" />
      <item href="FAQ.html" name="FAQ" />
    </menu>
    <menu name="Developing Oak">
      <item href="dev_getting_started.html" name="Getting Started" />
      <item href="participating.html" name="Participating" />
      <item href="developing-with-git.html" name="Developing with Git" />
      <item href="diagnostic-builds.html" name="Cutting diagnostic builds" />
      <item href="attribution.html" name="Attribution" />
      <item href="release-schedule.html" name="Release Schedule" />
    </menu>
    <menu name="Links">
      <item href="http://jackrabbit.apache.org/oak" name="Apache Jackrabbit Oak" />
      <item href="http://jackrabbit.apache.org/" name="Apache Jackrabbit" />
    </menu>
  </body>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.6</version>
  </skin>

  <custom>
    <fluidoSkin>
      <sourceLineNumbersEnabled>false</sourceLineNumbersEnabled>
      <topBarEnabled>true</topBarEnabled>
      <topBarIcon>
        <name>Oak logo</name>
        <alt>Oak logo</alt>
        <src>oak_logo.png</src>
        <href>/</href>
      </topBarIcon>
      <sideBarEnabled>true</sideBarEnabled>
      <gitHub>
        <projectId>apache/jackrabbit-oak</projectId>
        <ribbonOrientation>right</ribbonOrientation>
      </gitHub>
      <ohloh>
        <projectId>jackrabbit-oak</projectId>
        <widget>thin-badge</widget>
      </ohloh>
      <googlePlusOne />
    </fluidoSkin>
  </custom>
</project>
