<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/DECORATION/1.6.0"
         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.6.0 http://maven.apache.org/xsd/decoration-1.6.0.xsd">
    <skin>
        <groupId>lt.velykis.maven.skins</groupId>
        <artifactId>reflow-maven-skin</artifactId>
        <version>1.1.1</version>
    </skin>

    <poweredBy>
        <logo name="Karaf" href="http://karaf.apache.org/"
              img="http://karaf.apache.org/images/karaf-logo.png"/>
    </poweredBy>

    <googleAnalyticsAccountId>UA-70313240-1</googleAnalyticsAccountId>

    <custom>
        <reflowSkin>
            <!-- Make this to 'false' for local development, i.e. file:// URLs -->
            <protocolRelativeURLs>false</protocolRelativeURLs>
            <smoothScroll>true</smoothScroll>
            <theme>default</theme>
            <highlightJs>true</highlightJs>
            <highlightJsTheme>github</highlightJsTheme>
            <absoluteResourceURL>http://unomi.incubator.apache.org/</absoluteResourceURL>
            <brand>
                <name><![CDATA[
                    <img src="http://unomi.incubator.apache.org/images/unomi-86x20.png" />
                ]]></name>
                <href>http://unomi.incubator.apache.org</href>
            </brand>
            <!--slogan>Reference implementation of the OASIS Context Server specification</slogan-->
            <titleTemplate>%2$s | %1$s</titleTemplate>
            <toc>sidebar</toc>
            <!--tocTopMax>6</tocTopMax-->
            <topNav>Documentation|Standard|Contribute|Privacy|Community</topNav>
            <bottomNav>
                <column>Documentation|Standard|Contribute|Privacy|Community</column>
                <column>modules</column>
                <column>reports</column>
            </bottomNav>
            <bottomDescription>
                Powered by Apache Karaf
            </bottomDescription>
            <pages>
                <index project="unomi-root">
                    <shortTitle>Welcome</shortTitle>
                    <sections>
                        <body />
                        <sidebar />
                    </sections>
                </index>
                <developer-info>
                    <toc>sidebar</toc>
                </developer-info>
                <source-repository>
                    <highlightJs>false</highlightJs>
                </source-repository>
                <issue-tracking>
                    <highlightJs>false</highlightJs>
                    <toc>false</toc>
                </issue-tracking>
                <license>
                    <highlightJs>false</highlightJs>
                    <toc>false</toc>
                </license>
                <!-- Disable ToC for some Maven reports -->
                <project-info>
                    <toc>false</toc>
                </project-info>
                <github-report>
                    <toc>false</toc>
                </github-report>
                <dependencies>
                    <tocTopMax>4</tocTopMax>
                </dependencies>
            </pages>
        </reflowSkin>
    </custom>

    <body>

        <menu name="Documentation" inherit="top">
            <item name="Home" href="./" />
            <item name="Building and deploying" href="building-and-deploying.html" />
            <item name="Getting started" href="getting-started.html"/>
            <item name="Configuration" href="configuration.html" />
            <item name="Cluster setup" href="clustering.html" />
            <item name="Concepts" href="concepts.html"/>
            <item name="REST API documentation" href="./rest-api-doc/index.html"/>
            <item name="API Javadoc" href="./unomi-api/apidocs/index.html"/>
        </menu>

        <menu name="parent" ref="parent"/>
        <menu ref="modules"/>
        <menu ref="reports"/>

        <menu name="Standard" inherit="top">
            <item name="OASIS Context Server Technical Committee" href="https://www.oasis-open.org/committees/cxs/"/>
        </menu>

        <menu name="Privacy" inherit="bottom">
            <item name="Site policy" href="privacy-policy.html"/>
        </menu>

        <menu name="Contribute" inherit="bottom">
            <item name="Mailing lists" href="mail-lists.html"/>
            <item name="Source" href="source-repository.html"/>
            <item name="Issues" href="issue-tracking.html"/>
        </menu>

        <menu name="Community" inherit="top">
            <item name="Mailing lists" href="mail-lists.html"/>
            <item name="Team" href="team-list.html"/>
            <item name="Maturity model report card" href="maturity-model-report.html"/>
        </menu>

    </body>

</project>