﻿<!--
  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.
-->
<script type="text/javascript" src="${pluginRoot}/res/ui/factory_detail.js"></script>
<script>
    var root_url = '${pluginRoot}';
    var instances_url = '${pluginRoot}' + '/instances';
    var factories_url = '${pluginRoot}' + '/factories';
    var handlers_url = '${pluginRoot}' + '/handlers';
    var factory_name = '${name}';
</script>

<!-- status line -->
<p class="statline">&nbsp;</p>

<!-- top header -->
<form method="post" enctype="multipart/form-data" action="">
	<div class="ui-widget-header ui-corner-top buttonGroup">
		<button class="instancesButton" type="button">Instances</button>
		<button class="factoriesButton" type="button">Factories</button>
		<button class="handlersButton" type="button">Handlers</button>
	</div>
</form>

<table id="plugin_table" class="nicetable noauto ui-widget-content">
	<tbody>
	    <!-- template -->
		<tr>
			<td class="Nname lheader">Factory Name</td>
			<td class="Vname">&nbsp;</td>
		</tr>
        <tr>
            <td class="Nstate lheader">State</td>
            <td class="Vstate">&nbsp;</td>
        </tr>
        <tr>
            <td class="Nbundle lheader">Bundle</td>
            <td class="Vbundle">&nbsp;</td>
        </tr>
        <tr>
            <td class="Nservices lheader">Provided Service Specifications</td>
            <td class="Vservices">&nbsp;</td>
        </tr>
        <tr>
            <td class="Nproperties lheader">Configuration Properties</td>
            <td class="Vproperties">
                <table class="properties ui-widget-content">
                    <thead>
                        <tr>
                            <th class="col_Name">Name</th>
                            <th class="col_Type">Type</th>
                            <th class="col_Mandatory">Mandatory</th>
                            <th class="col_Immutable">Immutable</th>
                            <th class="col_Value">Default Value</th>
                        </tr>
                    </thead>
                    <tbody>
                       <tr class="ui-widget-content"><!-- template -->
                            <td class="ui-widget-content name">&nbsp; </td>
                            <td class="ui-widget-content type">&nbsp; </td>
                            <td class="ui-widget-content mandatory">&nbsp;</td>
                            <td class="ui-widget-content immutable">&nbsp;</td>
                            <td class="ui-widget-content value">&nbsp; </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        <tr>
            <td class="NrequiredHandlers lheader">Required Handlers</td>
            <td class="VrequiredHandlers">&nbsp;</td>
        </tr>
        <tr>
            <td class="NmissingHandlers lheader">Missing Handlers</td>
            <td class="VmissingHandlers">&nbsp;</td>
        </tr>
        <tr>
            <td class="NcreatedInstances lheader">Created Instances</td>
            <td class="VcreatedInstances">&nbsp;</td>
        </tr>
        <tr>
            <td class="Narchitecture lheader">Architecture</td>
            <td class="Varchitecture"><div class="architecture"><pre class="architecture_content">&nbsp;</pre></div></td>
        </tr>
        
	</tbody>
</table>

<!-- bottom header -->
<form method="post" enctype="multipart/form-data" action="">
    <div class="ui-widget-header ui-corner-bottom buttonGroup">
        <button class="instancesButton" type="button">Instances</button>
        <button class="factoriesButton" type="button">Factories</button>
        <button class="handlersButton" type="button">Handlers</button>
    </div>
</form>

<!-- status line -->
<p class="statline">&nbsp;</p>
