<!DOCTYPE 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.
  -->
<!-- Brooklyn SHA-1: GIT_SHA_1 -->
<html>
<head>
    <meta charset="UTF-8">
    <title>Brooklyn API Docs</title>
    <link rel="icon" type="image/x-icon" href="/favicon.ico" sizes="16x16"/>
    <link href='../swagger-ui/css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
    <link href='../swagger-ui/css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
    <link href='../swagger-ui/css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
    <link href='../swagger-ui/css/reset.css' media='print' rel='stylesheet' type='text/css'/>
    <link href='../swagger-ui/css/print.css' media='print' rel='stylesheet' type='text/css'/>
    <link href='../swagger-ui/css/style.css' media='print' rel='stylesheet' type='text/css'/>
    <link rel="stylesheet" href="../css/styles.css">
    <link rel="stylesheet" href="../css/brooklyn.css">

    <script src='../swagger-ui/lib/jquery-1.8.0.min.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/jquery.wiggle.min.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/handlebars-2.0.0.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/underscore-min.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/backbone-min.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/swagger-ui.min.js' type='text/javascript'></script>
    <script src='../swagger-ui/lib/marked.js' type='text/javascript'></script>

    <script type="text/javascript">
        $(function () {
            window.swaggerUi = new SwaggerUi({
                url: "/v1/apidoc/swagger.json",
                dom_id: "swagger-ui-container",
                supportHeaderParams: false,
                supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
                onComplete: function (swaggerApi, swaggerUi) {
                    log("Brooklyn swagger api doc loaded");
                },
                onFailure: function (data) {
                    log("Unable to Load SwaggerUI");
                },
                docExpansion: "none",
                apisSorter: "alpha",
                showRequestHeaders: false
            });
            window.swaggerUi.load();

            function log() {
                if ('console' in window) {
                    console.log.apply(console, arguments);
                }
            }
        });
    </script>
    <style>
        #validator {
            display: none;
        }
    </style>
</head>
<body>
<div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
        <div class="userName-top"><span id="user"></span> | <a href="/logout" id="logout-link">Log out</a></div>
        <div class="container">
            <a class="logo" href="#" title="Brooklyn, Version 0.9.1-SNAPSHOT"><!-- Logo added via CSS --></a> <!-- BROOKLYN_VERSION -->
            <div class="menubar-top">
                <ul class="nav">
                    <li><a href="/#v1/home" class="nav1 nav1_home">Home</a></li>
                    <li><a href="/#v1/editor/" class="nav1 nav1_editor">Composer</a></li>
                    <li><a href="/#v1/applications" class="nav1 nav1_apps">Applications</a></li>
                    <li><a href="/#v1/catalog" class="nav1 nav1_catalog">Catalog</a></li>
                    <li class="dropdown">
                        <a href="#" class="nav1 nav1_script dropdown-toggle" data-toggle="dropdown">Script</a>
                        <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
                            <li><a href="/assets/html/swagger-ui.html" target="_blank" class="nav1 nav1_apidoc">REST API</a></li>
                            <li><a href="/#v1/script/groovy" class="nav1 nav1_groovy">Groovy</a></li>
                        </ul>
                    </li>
                    <li><a href="/#v1/help" class="nav1 nav1_help"><b>?</b></a></li>
                </ul>
            </div>
        </div>
    </div>
</div>
<div class="swagger-section">
<div id="message-bar" class="swagger-ui-wrap" data-sw-translate>&nbsp;</div>
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
</div>
</body>
</html>
