<!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.10.0"><!-- 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>
