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

<div class="virtualhost">
    <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Virtual Host Attributes',  open: true">
        <div class="alignLeft">
            <div class="clear">
                <div class="formLabel-labelCell">Name:</div>
                <div class="name formValue-valueCell"></div>
            </div>
        </div>
        <div class="clear"></div>
        <div class="alignLeft">
            <div class="clear">
                <div class="formLabel-labelCell">Type:</div>
                <div class="type formValue-valueCell"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">State:</div>
                <div class="state formValue-valueCell"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">Durable:</div>
                <div class="durable formValue-valueCell"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">Lifespan:</div>
                <div class="lifetimePolicy formValue-valueCell"></div>
            </div>
        </div>
        <div class="alignRight">
            <div class="clear">
                <div class="formLabel-labelCell">Number of connection threads:</div>
                <div class="connectionThreadPoolSize formValue-valueCell"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">Statistics reporting period (s):</div>
                <div class="statisticsReportingPeriod formValue-valueCell"></div>
            </div>
        </div>
        <div class="clear virtualHostDetailsContainer"></div>
        <div class="clear"></div>

        <br/>

        <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Store Transaction Settings',  open: false">
            <div class="clear">
                <div class="formLabel-labelCell">Idle timeout before a warning (ms) :</div>
                <div class="storeTransactionIdleTimeoutWarn"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">Idle timeout before closing (ms) :</div>
                <div class="storeTransactionIdleTimeoutClose"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell" >Open timeout before warning (ms) :</div>
                <div class="storeTransactionOpenTimeoutWarn"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">Open timeout before closing (ms) :</div>
                <div class="storeTransactionOpenTimeoutClose"></div>
            </div>
            <div class="clear"></div>
        </div>

        <br/>

        <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'House Keeping Settings',  open: false">
            <div class="clear">
                <div class="formLabel-labelCell">House keeping check period (ms):</div>
                <div class="housekeepingCheckPeriod"></div>
            </div>
            <div class="clear">
                <div class="formLabel-labelCell">House keeping thread count:</div>
                <div class="housekeepingThreadCount"></div>
            </div>
            <div class="clear"></div>
        </div>
        <br/>
        <div data-dojo-type="dijit.TitlePane"
             data-dojo-props="title: 'Node Auto-Creation Policies',  open: false"
             class="nodeAutoCreationPolicies">
            <div class="policies"></div>
        </div>

    </div>
    <br/>
    <div class="virtualhostStatistics"></div>
    <div class="dijitDialogPaneActionBar">
        <div class="alignRight">
            <button data-dojo-type="dijit.form.Button" class="startButton" type="button" data-dojo-props="disabled: true">Start</button>
            <button data-dojo-type="dijit.form.Button" class="stopButton" type="button" data-dojo-props="disabled: true">Stop</button>
            <button data-dojo-type="dijit.form.Button" class="editButton" type="button" data-dojo-props="disabled: true">Edit</button>
            <button data-dojo-type="dijit.form.Button" class="downloadButton" type="button" data-dojo-props="disabled: true">Download</button>
            <button data-dojo-type="dijit.form.Button" class="deleteButton" data-dojo-props="iconClass: 'dijitIconDelete'">Delete</button>
        </div>
        <div class="clear"></div>
    </div>
    <br/>
    <div class="virtualHostChildren">
        <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Exchanges'" class="virtualHostExchanges">
            <div class="exchanges"></div>
            <button data-dojo-type="dijit.form.Button" class="addExchangeButton">Add Exchange</button>
            <button data-dojo-type="dijit.form.Button" class="deleteExchangeButton">Delete Exchange</button>
        </div>
        <br/>
        <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Queues'" class="virtualHostQueues">
            <div class="queues"></div>
            <button data-dojo-type="dijit.form.Button" class="addQueueButton">Add Queue</button>
            <button data-dojo-type="dijit.form.Button" class="deleteQueueButton">Delete Queue</button>
        </div>
        <br/>
        <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Connections'" class="virtualHostConnections">
            <div class="connections"></div>
            <button data-dojo-type="dijit.form.Button" class="closeConnectionButton">Close Connection</button>
        </div>
        <br/>
        <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Virtual Host Loggers'"  class="virtualHostLoggers">
            <div class="loggers"></div>
            <button data-dojo-type="dijit.form.Button" class="addVirtualHostLogger">Add Virtual Host Logger</button>
            <button data-dojo-type="dijit.form.Button" class="deleteVirtualHostLogger">Delete Virtual Host Logger</button>
        </div>
        <br/>
        <div data-dojo-type="dijit.TitlePane"
             data-dojo-props="title: 'Virtual Host Access Control Providers'"
             class="accessControlProviders">
            <div class="virtualHostAccessControlProviders"></div>
            <button data-dojo-type="dijit.form.Button"
                    class="addVirtualHostAccessControlProvider">Add Access Control Provider</button>
            <button data-dojo-type="dijit.form.Button"
                    class="deleteVirtualHostAccessControlProvider">Delete Access Control Provider</button>
        </div>
        <br/>
    </div>
</div>

