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

<!DOCTYPE html>
<html>
<head>
<title>Airavata Demo</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"
	media="screen">
</head>

<body>

	<div class="navbar navbar-inverse navbar-fixed-top">
		<div class="navbar-inner">
			<div class="container-fluid">
				<a class="brand" href="">Airavata API Demo</a>
			</div>
		</div>
	</div>
	<br><br>
	
	<div class="container-fluid">
		<div class="row-fluid">
			<div class="span3">
				<div class="well sidebar-nav">
					<ul class="nav nav-list">
						<li class="nav-header">View Descriptors</li>
						<li><a href="x_host_descriptor_view_json.html">View Host Descriptors</a></li>
						<li><a href="x_app_descriptor_view_json.html">View App Descriptors</a></li>
						<li class="nav-header">Save Descriptors</li>
						<li><a href="x_host_descriptor_save_json.html">Save Host Descriptors</a></li>
						<li><a href="x_app_descriptor_save_json.html">Save App Descriptors</a></li>
                        <li class="nav-header">Edit Descriptors</li>
                        <li><a href="x_host_descriptor_edit_json.html">Edit Host Descriptors</a></li>
                        <li><a href="x_app_descriptor_edit_json.html">Save App Descriptors</a></li>
                        <li class="nav-header">Monitor</li>
                        <li><a href="x_workflow_monitor.html">Workflow Monitor</a></li>
                        <li class="nav-header">Others</li>
						<li><a href="html/x_host_descriptor_save.html">Save Host	Descriptors</a></li>
						<li><a href="html/x_app_descriptor_save.html">Save App Descriptors</a></li>
						<li><a href="html/x_host_display.html">Registry Service Test	Get</a></li>
						<li><a href="html/x_host_save.html">Registry Service Test Post</a></li>
					</ul>
				</div>
			</div>
		</div>
	</div>

</body>
</html>