<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  ~ 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
  ~
  ~   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>
    <publishDate position="bottom"/>
    <version position="bottom"/>
    <skin>
        <groupId>org.apache.maven.skins</groupId>
        <artifactId>maven-fluido-skin</artifactId>
        <version>1.5</version>
    </skin>
    <bannerLeft>
        <name>Apache Streams</name>
        <src>http://streams.incubator.apache.org/images/streams_logo.jpg</src>
        <href>http://streams.incubator.apache.org</href>
        <height>100</height>
        <width>150</width>
    </bannerLeft>
    <bannerRight>
        <name>Apache Incubator</name>
        <src>http://incubator.apache.org/images/egg-logo.png</src>
        <href>http://incubator.apache.org</href>
    </bannerRight>
    <body>
        <breadcrumbs>
            <item name="Incubator" href="http://incubator.apache.org/"/>
            <item name="Streams" href="http://streams.incubator.apache.org/"/>
        </breadcrumbs>
        <head>
            <![CDATA[
            <script>
                (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
                m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
                })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

                ga('create', 'UA-77087101-1', 'auto');
                ga('send', 'pageview');
            </script>
            ]]>
        </head>
        <menu name="Overview">
            <item name="Overview" href="index.html" />
            <item name="Architecture" href="architecture.html" />
            <item name="Concepts" href="concepts.html" />
            <item name="Downloads" href="downloads.html" />
            <item name="Frequently Asked Questions" href="faq.html" />
        </menu>
        <menu name="Details">
            <item name="Project License" href="license.html" />
            <item name="Mailing Lists" href="mail-lists.html" />
            <item name="Project Team" href="team-list.html" />
            <item name="Continuous Integration" href="integration.html"/>
            <item name="Issue Tracking" href="issue-tracking.html" />
            <item name="Source Repositories" href="source-repository.html" />
            <item name="Dependency Info" href="dependency-info.html" />
            <item name="Dependency Management" href="dependency-management.html" />
            <item name="Distribution Management" href="distribution-management.html" />
            <item name="Plugin Management" href="plugin-management.html" />
            <item name="Release Setup" href="release-setup.html" />
            <item name="Release Process" href="release.html" />
            <item name="Website Management" href="website.html" />
        </menu>
        <menu name="Projects">
            <item name="streams-master" href="http://streams.incubator.apache.org/site/latest/streams-master" />
            <item name="streams-project" href="http://streams.incubator.apache.org/site/latest/streams-project" />
            <item name="streams-examples" href="http://streams.incubator.apache.org/site/latest/streams-examples/" />
        </menu>
        <menu name="Learn More">
            <item name="Run some official examples" href="http://streams.incubator.apache.org/site/latest/streams-examples/index.html"  />
            <item name="Browse streams providers, processors, and persisters" href="http://streams.incubator.apache.org/site/latest/streams-project/streams-contrib/index.html"  />
            <item name="View the official Apache Streams jsonschema files" href="http://streams.incubator.apache.org/site/latest/streams-project/streams-pojo/index.html" />
            <item name="View java POJOs generated from the official Apache Streams jsonschema files" href="http://streams.incubator.apache.org/site/latest/streams-project/streams-pojo/apidocs/org/apache/streams/pojo/json/package-summary.html" />
        </menu>
        <menu name="Other Resources">
            <item name="ActivityStreams Homepage" href="http://activitystrea.ms" />
            <item name="ActivityStreams Specifications" href="http://activitystrea.ms/specs/" />
            <item name="Streams Blog" href="http://blogs.apache.org/streams/" />
            <item name="Streams Proposal Wiki Page" href="http://wiki.apache.org/incubator/StreamsProposal" />
            <item name="Apache Foundation Info" href="http://www.apache.org/" />
            <item name="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html" />
            <item name="Thanks" href="http://www.apache.org/foundation/thanks.html" />
        </menu>
    </body>
    <custom>
        <fluidoSkin>
            <topBarEnabled>true</topBarEnabled>
            <navBarStyle>navbar-inverse</navBarStyle>
            <sideBarEnabled>false</sideBarEnabled>
            <gitHub>
                <projectId>apache/incubator-streams-master</projectId>
                <ribbonOrientation>right</ribbonOrientation>
                <ribbonColor>black</ribbonColor>
            </gitHub>
            <twitter>
                <user>ApacheStreams</user>
                <showUser>true</showUser>
                <showFollowers>true</showFollowers>
            </twitter>
        </fluidoSkin>
    </custom>
</project>
