<!--

  Licensed 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="container-fluid">
  <div class="row">
    <!--<h5 class="over-title margin-bottom-15">Subscribe Models</h5>-->
  </div><!--//row-->
  <div class="row">
    <form name="Form" id="form" novalidate>
      <div id="wizard" class="swMain" >
        <div class="formStep" >

					<div class="container-fluid">
            <!-- select db tree -->
						<div class="col-md-4 col-lg-4 col-sm-4">
							<fieldset>
							  <legend>Please select data asset</legend>
                <!-- <div class="add-dataset" style="color:#b2c831">
                    <a class="bark-link" href="#/createdataasset">Cannot find your DataAsset? Click here to add</a>
                </div> -->
                <div angular-treeviewcheck="true"
                      tree-model-check="dbList"
                      node-id="id"
                      node-label="name"
                      node-children="children"
                      l1-icon="fa fa-database"
                      l2-icon="fa fa-table"
                      l3-icon="fa fa-file-text-o"
                      class="y-scrollable">
                </div>
              </fieldset>
						</div>

            <!-- schema definition list -->
						<div class="col-md-8 col-lg-8 col-sm-8">
							<fieldset>
								<legend>
									Models
								</legend>
								<div class="y-scrollable">
                  <div>
                   <label>The below are the models defined under the selected Data Assets.</label>
                 </div>
                 <div>
                   <table st-table="schemaCollection" class="table table-striped">
                   	<thead>
                     	<tr style="background-color:#7D95CC">
                     		<th st-ratio="20">Model Name</th>
                     		<th st-ratio="20">Model Type</th>
                        <th st-ratio="20">Organization</th>
                        <th st-ratio="20">Asset Name</th>
                        <th st-ratio="20">Description</th>
                     	</tr>
                   	</thead>
                   	<tbody>
                       <tr ng-if="!schemaCollection || schemaCollection.length == 0">
                         <td colspan="5" style="text-align:center" ><span class="highlight">Please select a data asset from the left tree first</span></td>
                       </tr>
                     	<tr ng-repeat="row in schemaCollection">
                        <td>{{row.modelName}}</td>
                        <td>{{row.modelType}}</td>
                        <td>{{row.systemName}}</td>
                        <td>{{row.assetName}}</td>
                        <td>{{row.desc}}</td>
                     	</tr>
                   	</tbody>
                   </table>
                 </div>
                </div>
              </fieldset>
            </div>

            <div class="form-group btn-container">
							<button class="btn btn-primary btn-o next-step btn-wide pull-right" ng-click="form.submit(Form)">
								Submit
							</button>
						</div>

          </div>

      </div>


      <div class="modal fade" id="confirm" role="dialog">
        <div class="modal-dialog modal-xg modal-lg">
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
              <h4 class="modal-title">Subscribe data assets with the below information?</h4>
            </div>
            <div class="modal-body">
              <ng-include src="'/pages/mydashboard/confirmation-subscribe.html'"/>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
              <button type="button" class="btn btn-primary" ng-click="form.save()">Save</button>
            </div>
          </div>
        </div>
      </div>
    </form>
  </div><!--//row-->
</div>
