eagle-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From h..@apache.org
Subject [39/44] incubator-eagle git commit: update pom using npm to install web deps
Date Mon, 30 Nov 2015 02:51:13 GMT
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/HDFS.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/HDFS.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/HDFS.html
new file mode 100644
index 0000000..70929c4
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/HDFS.html
@@ -0,0 +1,110 @@
+<!--
+  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 ng-controller="sensitivityHDFSCtrl">
+	<ul class="list-inline path">
+		<li>Path:</li>
+		<li ng-repeat="unit in pathUnitList">
+			<a ng-click="updateItems(unit.path)" class="label bg-black">{{unit.name}}</a>
+		</li>
+	</ul>
+
+	<table class="table table-bordered">
+		<thead>
+			<tr>
+				<th width="15%">File Name</th>
+				<th width="10%">Owner</th>
+				<th width="10%">Group</th>
+				<th>Sensitivity Type</th>
+				<th width="10" ng-show="auth.isRole('ROLE_ADMIN')"> </th>
+			</tr>
+		</thead>
+		<tbody>
+			<tr ng-show="items._promise.$$state.status !== 1">
+				<td colspan="5">
+					<span class="fa fa-refresh fa-spin"> </span>
+					Loading...
+				</td>
+			</tr>
+			<tr ng-show="items._promise.$$state.status === 1 && !items.length">
+				<td colspan="5">
+					<span class="fa fa-exclamation-triangle"> </span>
+					Empty Folder
+				</td>
+			</tr>
+			<tr ng-repeat="item in items" ng-class="{warning : item.sensitiveType}">
+				<td>
+					<span ng-show="!item.isdir">
+						<span class="fa fa-file"> </span>
+						{{getFileName(item)}}
+					</span>
+					<a ng-show="item.isdir" ng-click="updateItems(item.resource)">
+						<span class="fa fa-folder"> </span>
+						{{getFileName(item)}}
+					</a>
+
+					<span class="pull-right" ng-show="item.childSensitiveTypes.length">
+						<span class="fa fa-dot-circle-o text-muted" uib-tooltip="Contain child sensitivity defination"> </span>
+					</span>
+				</td>
+				<td>{{item.owner}}</td>
+				<td>{{item.group}}</td>
+				<td>{{item.sensitiveType}}</td>
+				<td ng-show="auth.isRole('ROLE_ADMIN')">
+					<button class="fa fa-eye btn btn-primary btn-xs" ng-click="markSensitivity(item)" ng-show="!item.sensitiveType"
+					uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="left"> </button>
+					<button class="fa fa-eye-slash btn btn-warning btn-xs" ng-click="unmarkSensitivity(item)" ng-show="item.sensitiveType"
+					uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="left"> </button>
+				</td>
+			</tr>
+		</tbody>
+	</table>
+
+
+	<!-- Modal: Create / Edit site -->
+	<div class="modal fade" id="sensitivityHdfsMDL" tabindex="-1" role="dialog">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header">
+					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+						<span aria-hidden="true">&times;</span>
+					</button>
+					<h4 class="modal-title">Mark Sensitivity Data</h4>
+				</div>
+				<div class="modal-body">
+					<div class="form-group">
+						<label>Resource</label>
+						<input type="text" readonly="readonly" class="form-control" ng-model="_markItem.tags.filedir" />
+					</div>
+					<div class="form-group">
+						<label>* Sensitivity Type</label>
+						<input type="text" class="form-control" ng-model="_markItem.sensitivityType" id="hdfsSensitiveType" />
+					</div>
+				</div>
+				<div class="modal-footer">
+					<button type="button" class="btn btn-default" data-dismiss="modal">
+						Close
+					</button>
+					<button type="button" class="btn btn-primary" ng-click="confirmUpateSensitivity()" ng-disabled="!_markItem.sensitivityType">
+						Update
+					</button>
+				</div>
+			</div>
+		</div>
+	</div>
+
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/Hive.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/Hive.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/Hive.html
new file mode 100644
index 0000000..f276ee0
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/Hive.html
@@ -0,0 +1,150 @@
+<!--
+  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 ng-controller="sensitivityHiveCtrl">
+	<p ng-show="databases._promise.$$state.status !== 1">
+		<span class="fa fa-refresh fa-spin"> </span>
+		Loading...
+	</p>
+
+	<div ng-show="databases._promise.$$state.status === 1" class="row">
+		<div class="col-md-4">
+			<label>
+				Databases
+				({{databases.length}})
+			</label>
+			<ul class="tree tree-bordered" style="max-height: 500px; overflow-y: auto;">
+				<li ng-repeat="db in databases">
+					<span class="tree-item box-clickable text-primary" ng-click="db.show = !db.show; loadTables(db);">
+						<span ng-class="{'text-warning' : db.sensitiveType}">
+							<span class="fa fa-database"> </span>
+							{{db.database}}
+							<span ng-show="db.tables._promise.$$state.status === 1">({{db.tables.length}})</span>
+
+							<span ng-show="auth.isRole('ROLE_ADMIN')">
+								<a class="fa fa-eye text-muted hover" ng-click="markSensitivity(db, $event)" ng-show="!db.sensitiveType"
+								uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="right"></a>
+								<a class="fa fa-eye-slash text-muted hover" ng-click="unmarkSensitivity(db, $event)" ng-show="db.sensitiveType"
+								uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="right"></a>
+							</span>
+
+							<span class="pull-right" ng-show="db.childSensitiveTypes.length">
+								<span class="fa fa-dot-circle-o" tooltip="Contain child sensitivity defination"> </span>
+							</span>
+							<span ng-show="db.sensitiveType" class="pull-right">[{{db.sensitiveType}}]</span>
+						</span>
+					</span>
+					<ul ng-show="db.show">
+						<li ng-show="db.tables._promise.$$state.status !== 1">
+							<span>
+								<span class="fa fa-refresh fa-spin"> </span>
+								Loading...
+							</span>
+						</li>
+						<li ng-repeat="tb in db.tables" ng-class="{active : tb === table}">
+							<span class="tree-item box-clickable text-primary" ng-click="loadColumns(db, tb)">
+								<span ng-class="{'text-warning' : tb.sensitiveType}">
+									<span class="fa fa-table"> </span>
+									{{tb.table}}
+
+									<span ng-show="auth.isRole('ROLE_ADMIN')">
+										<a class="fa fa-eye text-muted hover" ng-click="markSensitivity(tb, $event)" ng-show="!tb.sensitiveType"
+										uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="right"></a>
+										<a class="fa fa-eye-slash text-muted hover" ng-click="unmarkSensitivity(tb, $event)" ng-show="tb.sensitiveType"
+										uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="right"></a>
+									</span>
+
+									<span class="pull-right" ng-show="tb.childSensitiveTypes.length">
+										<span class="fa fa-dot-circle-o" uib-tooltip="Contain child sensitivity defination"> </span>
+									</span>
+									<span ng-show="tb.sensitiveType" class="pull-right">[{{tb.sensitiveType}}]</span>
+								</span>
+							</span>
+						</li>
+					</ul>
+				</li>
+			</ul>
+		</div>
+		<div class="col-md-8">
+			<label ng-show="table">Route: {{table.database}} > {{table.table}}</label>
+			<p ng-show="table && table.columns._promise.$$state.status !== 1">
+				<span class="fa fa-refresh fa-spin"> </span>
+				Loading...
+			</p>
+			<div ng-show="table && table.columns._promise.$$state.status === 1">
+				<table class="table table-bordered">
+					<thead>
+						<tr>
+							<th width="40%">Column Name</th>
+							<th>Sensitivity Type</th>
+							<th width="10" ng-show="auth.isRole('ROLE_ADMIN')"> </th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr ng-repeat="col in table.columns" ng-class="{warning : col.sensitiveType}">
+							<td>{{col.column}}</td>
+							<td>{{col.sensitiveType}}</td>
+							<td ng-show="auth.isRole('ROLE_ADMIN')">
+								<button class="fa fa-eye btn btn-primary btn-xs" ng-click="markSensitivity(col)" ng-show="!col.sensitiveType"
+								uib-tooltip="Mark as sensitivity data" tooltip-animation="false" tooltip-placement="left"> </button>
+								<button class="fa fa-eye-slash btn btn-warning btn-xs" ng-click="unmarkSensitivity(col)" ng-show="col.sensitiveType"
+								uib-tooltip="Remove the sensitivity mark" tooltip-animation="false" tooltip-placement="left"> </button>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+
+
+
+
+
+
+	<!-- Modal: Create / Edit site -->
+	<div class="modal fade" id="sensitivityHiveMDL" tabindex="-1" role="dialog">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<div class="modal-header">
+					<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+						<span aria-hidden="true">&times;</span>
+					</button>
+					<h4 class="modal-title">Mark Sensitivity Data</h4>
+				</div>
+				<div class="modal-body">
+					<div class="form-group">
+						<label>Resource</label>
+						<input type="text" readonly="readonly" class="form-control" ng-model="_markItem.tags.hiveResource" />
+					</div>
+					<div class="form-group">
+						<label>* Sensitivity Type</label>
+						<input type="text" class="form-control" ng-model="_markItem.sensitivityType" id="hiveSensitiveType" />
+					</div>
+				</div>
+				<div class="modal-footer">
+					<button type="button" class="btn btn-default" data-dismiss="modal">
+						Close
+					</button>
+					<button type="button" class="btn btn-primary" ng-click="confirmUpateSensitivity()" ng-disabled="!_markItem.sensitivityType">
+						Update
+					</button>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
new file mode 100644
index 0000000..294b105
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
@@ -0,0 +1,143 @@
+<!--
+  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="row">
+	<div class="col-md-4" ng-repeat="entity in sensitivityList">
+			<div class="info-box bg-aqua box-clickable">
+				<span class="info-box-icon" ng-click="site.url('/dam/sensitivity?type=' + entity.name)"><i class="fa fa-suitcase"></i></span>
+				<div class="info-box-content">
+					<div class="pull-right btn-group" ng-show="auth.isRole('ROLE_ADMIN')">
+						<a class="fa fa-cog config" data-toggle="dropdown"></a>
+						<ul class="dropdown-menu" role="menu">
+							<li>
+								<a ng-click="showImportEditor(entity);"><span class="fa fa-cloud-upload"></span>Import</a>
+							</li>
+							<li class="divider"></li>
+							<li>
+								<a ng-click="showManagementEditor(entity);"><span class="fa fa-list"></span>Management</a>
+							</li>
+						</ul>
+					</div>
+
+					<div ng-click="site.url('/dam/sensitivity?type=' + entity.name)">
+						<span class="info-box-text text-large">{{entity.name}}</span>
+						<!--span class="info-box-number">
+							<small>Connected</small>
+						</span-->
+						<div class="progress">
+							<div class="progress-bar"></div>
+						</div>
+						<span class="progress-description">
+							<span class="fa fa-refresh fa-spin" ng-hide="entity.statisitc._promise.$$state.status === 1"></span>
+							<span ng-show="entity.statisitc._promise.$$state.status === 1">{{entity.statisitc[0].value[0] || 0}}</span>
+							sensitivity items
+						</span>
+					</div>
+				</div><!-- /.info-box-content -->
+			</div>
+		</div>
+</div>
+
+<!-- Modal: Create sensitivity -->
+<div class="modal fade" id="sensitivityMDL" tabindex="-1" role="dialog">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-disabled="_sensitivityLock">
+					<span aria-hidden="true">&times;</span>
+				</button>
+				<h4 class="modal-title">Import Sensitivity Data</h4>
+			</div>
+			<div class="modal-body">
+				<div tabs data-inner="true" selected="_sensitivityImportType">
+					<div pane data-title="By Text">
+						<div class="form-group">
+							<label>* Sensitivity Data</label>
+							<textarea class="form-control" placeholder="Json format here..." rows="10" id="sensitivityData" ng-model="_parent._sensitivityData" ng-disabled="_parent._sensitivityLock"></textarea>
+						</div>
+					</div>
+					<div pane data-title="By File">
+						<input type="file" file filepath="_parent._sensitivityFile" id="sensitivityFile" ng-disabled="_parent._sensitivityLock" />
+					</div>
+				</div>
+
+			</div>
+			<div class="modal-footer">
+				<p class="text-danger pull-left">{{_sensitivityError}}</p>
+
+				<button type="button" class="btn btn-default" data-dismiss="modal" ng-disabled="_sensitivityLock">
+					Close
+				</button>
+				<button type="button" class="btn btn-primary" ng-click="confirmImport()"
+				ng-disabled="!importCheck()">
+					Import
+				</button>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- Modal: Manage sensitivity -->
+<div class="modal fade" id="sensitivityListMDL" tabindex="-1" role="dialog">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close" ng-disabled="_sensitivityLock">
+					<span aria-hidden="true">&times;</span>
+				</button>
+				<h4 class="modal-title">Sensitivity List</h4>
+			</div>
+			<div class="modal-body">
+				<p ng-show="_sensitivitySource.list._promise.$$state.status !== 1">
+					<span class="fa fa-refresh fa-spin"> </span>
+					Loading...
+				</p>
+
+				<div sorttable source="_sensitivitySource.list" ng-show="_sensitivitySource.list._promise.$$state.status === 1">
+					<table class="table table-bordered" ng-non-bindable>
+						<thead>
+							<tr>
+								<!--th width="10"></th-->
+								<th ng-repeat="key in _parent._sensitivitySource.keys">{{key}}</th>
+								<th width="10"> </th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr>
+								<!--td>
+									<input type="checkbox" ng-checked="item.selected" ng-click="item.selected = !item.selected">
+								</td-->
+								<td ng-repeat="key in _parent._sensitivitySource.keys">{{item.tags[key] || item[key]}}</td>
+								<td>
+									<a ng-click="_parent.deleteItem(item)">Delete</a>
+								</td>
+							</tr>
+						</tbody>
+				</table>
+				</div>
+			</div>
+			<div class="modal-footer">
+				<button type="button" class="btn btn-danger pull-left" ng-click="deleteAll(_sensitivitySource)">
+					Delete All
+				</button>
+				<button type="button" class="btn btn-default" data-dismiss="modal">
+					Close
+				</button>
+			</div>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/siteList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/siteList.html b/eagle-webservice/src/main/webapp/app/partials/dam/siteList.html
new file mode 100644
index 0000000..44fad6f
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/siteList.html
@@ -0,0 +1,162 @@
+<!--
+  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="page-fixed">
+	<button class="btn btn-primary"
+		ng-disabled="dataSrcList._promise.$$state.status !== 1"
+		ng-click="showSiteEditor()"
+	>+ New Site</button>
+</div>
+
+<div class="box box-primary" ng-repeat="_site in site.list">
+	<div class="box-header">
+		<h3 class="box-title">{{_site.name}}</h3>
+		<div class="box-tools pull-right">
+			<button class="btn btn-box-tool" data-widget="collapse">
+				<i class="fa fa-minus"></i>
+			</button>
+			<div class="btn-group">
+				<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown">
+					<i class="fa fa-wrench"></i>
+				</button>
+				<ul class="dropdown-menu" role="menu">
+					<li>
+						<a ng-click="showSiteEditor(_site)"><span class="fa fa-cog"></span> Config</a>
+					</li>
+					<li class="divider"></li>
+					<li class="danger">
+						<a ng-click="deleteSite(_site)"><span class="fa fa-trash-o"></span> Delete Site</a>
+					</li>
+				</ul>
+			</div>
+		</div>
+	</div><!-- /.box-header -->
+	<div class="box-body">
+		<div class="row">
+			<div class="col-md-4" ng-repeat="dataSrc in _site.dataSrcList">
+				<div class="info-box" ng-class="dataSrc.enabled !== false ? 'bg-aqua' : 'bg-gray'">
+					<span class="info-box-icon"><i class="fa fa-suitcase"></i></span>
+					<div class="info-box-content">
+						<a class="fa fa-cog config pull-right" ng-click="showDataSourceEditor(dataSrc)"></a>
+						<span class="info-box-text">{{dataSrc.desc || dataSrc.tags.dataSource}}</span>
+
+						<span class="info-box-number" ng-show="dataSrc.hide"><small>-</small></span>
+						<a class="info-box-number" ng-show="!dataSrc.hide" ng-click="site.url(_site, '/dam/policyList/' + dataSrc.tags.dataSource);">
+							<span class="fa fa-refresh fa-spin" ng-hide="policyStatistic._promise.$$state.status === 1"></span>
+							<span ng-show="policyStatistic._promise.$$state.status === 1">{{getPolicyCount(_site.name, dataSrc.tags.dataSource)}}</span>
+							<small>Policies</small>
+						</a>
+						<div class="progress">
+							<div class="progress-bar"></div>
+						</div>
+						<span class="progress-description" ng-show="dataSrc.hide"><small>-</small></span>
+						<a class="progress-description" ng-show="!dataSrc.hide" ng-click="site.url(_site, '/dam/alertList/' + dataSrc.tags.dataSource);">
+							<span class="fa fa-refresh fa-spin" ng-hide="alertStatistic._promise.$$state.status === 1"></span>
+							<span ng-show="alertStatistic._promise.$$state.status === 1">{{getAlertCount(_site.name, dataSrc.tags.dataSource)}}</span>
+							alerts in 30 Days
+						</a>
+					</div><!-- /.info-box-content -->
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+
+
+<!-- Modal: Create / Edit site -->
+<div class="modal fade" id="siteMDL" tabindex="-1" role="dialog">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+					<span aria-hidden="true">&times;</span>
+				</button>
+				<h4 class="modal-title">{{!_siteEntity.srcSite ? 'Create' : 'Config'}} Site</h4>
+			</div>
+			<div class="modal-body">
+				<div class="form-group">
+					<label>* Site Name</label>
+					<input type="text" class="form-control" placeholder="Site name..." ng-model="_siteEntity.name" ng-disabled="!!_siteEntity.srcSite" id="siteName">
+				</div>
+
+				<label>
+					* Data Source
+					<small class="text-muted">at least select 1 source</small>
+				</label>
+				<div class="checkbox" ng-repeat="item in _siteEntity.dataSrcList">
+					<label>
+						<input type="checkbox" value="{{item.name}}"
+						ng-checked="item.enabled"
+						ng-click="item.enabled = !item.enabled">
+						{{item.name}}
+					</label>
+				</div>
+			</div>
+			<div class="modal-footer">
+				<button type="button" class="btn btn-default" data-dismiss="modal">
+					Close
+				</button>
+				<button type="button" class="btn btn-primary" ng-click="confirmUpateSite()"
+				ng-disabled="!checkUpdateSite()">
+					{{!_siteEntity.srcSite ? 'Create' : 'Update'}}
+				</button>
+			</div>
+		</div>
+	</div>
+</div>
+
+<!-- Modal: Edit data source -->
+<div class="modal fade" id="dataSrcMDL" tabindex="-1" role="dialog">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+					<span aria-hidden="true">&times;</span>
+				</button>
+				<h4 class="modal-title">{{_dataSrcEntity.tags.dataSource}}</h4>
+			</div>
+			<div class="modal-body">
+				<div class="checkbox">
+					<label>
+						<input type="checkbox"
+						ng-checked="_dataSrcEntity.enabled"
+						ng-click="_dataSrcEntity.enabled = !_dataSrcEntity.enabled">
+						Enabled
+					</label>
+				</div>
+
+				<div class="form-group">
+					<label>Configuration</label>
+					<textarea type="text" class="form-control" placeholder="Data source configuration..." ng-model="_dataSrcEntity.config" id="dataSrcConfig" rows="10"></textarea>
+				</div>
+			</div>
+			<div class="modal-footer">
+				<button type="button" class="btn btn-danger pull-left" ng-click="confirmDeleteDataSource()">
+					Delete Source
+				</button>
+
+				<button type="button" class="btn btn-default" data-dismiss="modal">
+					Close
+				</button>
+				<button type="button" class="btn btn-primary" ng-click="confirmUpateDataSource()" ng-disabled="_dataSrcEntityLock">
+					Update
+				</button>
+			</div>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/streamList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/streamList.html b/eagle-webservice/src/main/webapp/app/partials/dam/streamList.html
new file mode 100644
index 0000000..3b87207
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/streamList.html
@@ -0,0 +1,178 @@
+<!--
+  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="page-fixed">
+	<button class="btn btn-primary"
+		ng-click="showStreamEditor()"
+	>+ New Stream</button>
+</div>
+
+<p ng-show="streamList._promise.$$state.status !== 1">
+	<span class="fa fa-refresh fa-spin"> </span>
+	Loading...
+</p>
+
+<div class="box box-primary" ng-repeat="stream in streams">
+	<div class="box-header with-border">
+		<h3 class="box-title">{{stream.tags.streamName}}</h3>
+		<div class="box-tools pull-right">
+			<button class="btn btn-box-tool" data-widget="collapse">
+				<i class="fa fa-minus"></i>
+			</button>
+			<button class="btn btn-box-tool" ng-click="showStreamEditor(stream)">
+				<i class="fa fa-wrench"></i>
+			</button>
+		</div>
+	</div>
+	<div class="box-body">
+		<div class="inline-group">
+			<dl>
+				<dt>
+					Data Source
+				</dt>
+				<dd>
+					{{stream.tags.dataSource}}
+				</dd>
+			</dl>
+			<dl>
+				<dt>
+					Stream Name
+				</dt>
+				<dd>
+					{{stream.tags.streamName}}
+				</dd>
+			</dl>
+		</div>
+		<div>
+			<dl>
+				<dt>
+					Description
+				</dt>
+				<dd>
+					{{stream.desc}}
+				</dd>
+			</dl>
+		</div>
+
+		<p ng-show="streamSchemaList._promise.$$state.status !== 1">
+			<span class="fa fa-refresh fa-spin"> </span>
+			Loading...
+		</p>
+
+		<div class="list" ng-show="streamSchemaList._promise.$$state.status === 1">
+			<table class="table table-bordered">
+				<thead>
+					<tr>
+						<th width="10%">Attribute Name</th>
+						<th width="12%">Display Name</th>
+						<th width="8%">Type</th>
+						<th>Description</th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr ng-repeat="meta in stream.metaList">
+						<td>{{meta.tags.attrName}}</td>
+						<td>{{meta.attrDisplayName}}</td>
+						<td><span class="label label-warning">{{meta.attrType}}</span></td>
+						<td>{{meta.attrDescription}}</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+	</div><!-- /.box-body -->
+	<!-- Loading (remove the following to stop the loading)-->
+</div>
+
+
+
+
+
+
+<!-- Modal: Create / Edit stream -->
+<div class="modal fade" id="streamMDL" tabindex="-1" role="dialog">
+	<div class="modal-dialog modal-lg" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+					<span aria-hidden="true">&times;</span>
+				</button>
+				<h4 class="modal-title">{{!_streamEntity.srcStream ? 'Create' : 'Config'}} Stream</h4>
+			</div>
+			<div class="modal-body">
+				<div class="form-group">
+					<label>* Data Source</label>
+					<input type="text" class="form-control" placeholder="Data source..." ng-model="_streamEntity.dataSource"
+							ng-class="{'has-warning': !_streamEntity.dataSource}" ng-disabled="!!_streamEntity.srcStream" id="dataSource">
+				</div>
+
+				<div class="form-group">
+					<label>* Stream Name</label>
+					<input type="text" class="form-control" placeholder="Stream name..." ng-model="_streamEntity.streamName"
+							ng-class="{'has-warning': !_streamEntity.streamName}" ng-disabled="!!_streamEntity.srcStream">
+				</div>
+
+				<div class="form-group">
+					<label>Description</label>
+					<textarea class="form-control" placeholder="Description..." ng-model="_streamEntity.desc"></textarea>
+				</div>
+
+				<label>
+					* Data Source Schema
+				</label>
+				<table class="table table-bordered">
+					<thead>
+						<tr>
+							<th width="26"> </th>
+							<th width="15%">Attribute Name</th>
+							<th width="15%">Display Name</th>
+							<th width="15%">Type</th>
+							<th>Description</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr ng-repeat="meta in _streamEntity.metaList">
+							<td class="input-field text-center">
+								<a class="fa fa-trash-o text-danger" ng-click="deleteMeta(meta)"></a>
+							</td>
+							<td class="input-field"><input type="text" class="form-control" ng-class="{'has-warning': !meta.attrName}" ng-model="meta.attrName" /></td>
+							<td class="input-field"><input type="text" class="form-control" ng-model="meta.attrDisplayName" /></td>
+							<td class="input-field">
+								<select class="form-control" ng-model="meta.attrType">
+									<option ng-repeat="type in ['string','bool','long','integer','double','float']">{{type}}</option>
+								</select>
+							</td>
+							<td class="input-field"><input type="text" class="form-control" ng-model="meta.attrDescription" /></td>
+						</tr>
+					</tbody>
+				</table>
+				<a ng-click="_streamEntity.metaList.push({attrName: '', attrType: 'string'})">+ Add Schema Item</a>
+			</div>
+			<div class="modal-footer">
+				<button type="button" class="btn btn-danger pull-left" ng-show="_streamEntity.srcStream" ng-click="confirmDeleteStream()" ng-disabled="!checkUpdateStream()">
+					Delete
+				</button>
+
+				<button type="button" class="btn btn-default" data-dismiss="modal">
+					Close
+				</button>
+				<button type="button" class="btn btn-primary" ng-click="confirmUpateStream()" ng-disabled="!checkUpdateStream()">
+					{{!_streamEntity.srcStream ? 'Create' : 'Update'}}
+				</button>
+			</div>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/summary.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/summary.html b/eagle-webservice/src/main/webapp/app/partials/dam/summary.html
new file mode 100644
index 0000000..5a44551
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/summary.html
@@ -0,0 +1,45 @@
+<!--
+  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.
+  -->
+<p ng-show="!dataReady">
+	<span class="fa fa-refresh fa-spin"> </span>
+	Loading...
+</p>
+
+<div class="row">
+	<div class="col-md-4" ng-repeat="dataSrc in site.current().dataSrcList" ng-hide="dataSrc.hide">
+		<div class="small-box bg-aqua box-clickable" ng-click="site.url('/dam/policyList/' + dataSrc.tags.dataSource)">
+			<div class="inner">
+				<h3>
+					{{dataSrc.desc || dataSrc.tags.dataSource}}
+				</h3>
+				<p>
+					{{dataSrc.count || 0}} Policies
+				</p>
+			</div>
+			<div class="icon">
+				<i class="fa fa-arrow-circle-right"></i>
+			</div>
+			<span class="small-box-footer">
+				<i class="fa fa-arrow-circle-right"></i>
+				View Policy List
+			</span>
+		</div>
+	</div>
+</div>
+
+<a class="btn btn-primary" href="#/dam/policyCreate" ng-show="auth.isRole('ROLE_ADMIN')">+ New Policy</a>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/userProfileDetail.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/userProfileDetail.html b/eagle-webservice/src/main/webapp/app/partials/dam/userProfileDetail.html
new file mode 100644
index 0000000..3ee22e4
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/userProfileDetail.html
@@ -0,0 +1,86 @@
+<!--
+  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="box box-primary">
+	<div class="box-header with-border">
+		<i class="fa fa-user"> </i>
+		<h3 class="box-title">
+			{{user}}
+		</h3>
+	</div>
+	<div class="box-body">
+		<div>
+			<div class="inline-group">
+				<dl><dt>User</dt><dd>{{user}}</dd></dl>
+				<dl><dt>Site</dt><dd>{{site.current().name}}</dd></dl>
+			</div>
+			<div class="inline-group">
+				<dl><dt>Other Info</dt><dd class="text-muted">N/A</dd></dl>
+			</div>
+		</div>
+
+		<div class="overlay" ng-hide="profileList._promise.$$state.status === 1;">
+			<span class="fa fa-refresh fa-spin"></span>
+		</div>
+	</div>
+</div>
+
+<!-- Analysis -->
+<div class="nav-tabs-custom">
+	<ul class="nav nav-tabs">
+		<li class="active">
+			<a href="[data-id='DE']" data-toggle="tab">DE</a>
+		</li>
+		<li>
+			<a href="[data-id='EigenDecomposition']" data-toggle="tab">EigenDecomposition</a>
+		</li>
+	</ul>
+	<div class="tab-content">
+		<div class="tab-pane active" data-id="DE">
+			<div class="row">
+				<div class="col-md-9">
+					<button class="btn btn-primary fixed-right" ng-click="showRawData(profiles.DE.content)">Raw Data</button>
+					<div bar-chart height="400" data="profiles.DE._chart.series"> </div>
+					<div class="inline-group text-center">
+						<dl ng-repeat="(key, value) in profiles.DE.estimates"><dt>{{key}}</dt><dd>{{value}}</dd></dl>
+					</div>
+				</div>
+
+				<div class="col-md-3">
+					<table class="table table-bordered">
+						<thead>
+							<tr>
+								<th>Command</th>
+								<th>Percentage</th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr ng-repeat="unit in profiles.DE.meanList">
+								<td>{{unit.command}}</td>
+								<td class="text-right">{{(unit.percentage*100).toFixed(2)}}%</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+		</div><!-- /.tab-pane -->
+		<div class="tab-pane" data-id="EigenDecomposition">
+			<button class="btn btn-primary fixed-right" ng-click="showRawData(profiles.EigenDecomposition.content)">Raw Data</button>
+			<div line3d-chart height="400" data="profiles.EigenDecomposition._chart.series"> </div>
+		</div><!-- /.tab-pane -->
+	</div><!-- /.tab-content -->
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/partials/dam/userProfileList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/userProfileList.html b/eagle-webservice/src/main/webapp/app/partials/dam/userProfileList.html
new file mode 100644
index 0000000..8c0021a
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/dam/userProfileList.html
@@ -0,0 +1,138 @@
+<!--
+  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="box box-primary">
+	<div class="box-header with-border">
+		<i class="fa fa-list-alt"> </i>
+		<h3 class="box-title">
+			User Profiles
+			<small><a data-toggle="collapse" href="[data-id='algorithms']">Detail</a></small>
+		</h3>
+		<div class="pull-right">
+			<a class="label label-primary" ng-class="runningTaskCount() ? 'label-primary' : 'label-default'" data-toggle="modal" data-target="#taskMDL">Update</a>
+		</div>
+	</div>
+	<div class="box-body">
+		<!-- Algorithms -->
+		<div data-id="algorithms" class="collapse">
+			<table class="table table-bordered">
+				<thead>
+					<tr>
+						<th>Name</th>
+						<td>Feature</td>
+					</tr>
+				</thead>
+				<tbody>
+					<tr ng-repeat="algorithm in algorithmEntity.policy.algorithms">
+						<td>{{algorithm.name}}</td>
+						<td>{{algorithm.features}}</td>
+					</tr>
+				</tbody>
+			</table>
+			<hr/>
+		</div>
+
+		<!-- User Profile List -->
+		<p ng-show="profileList._promise.$$state.status !== 1">
+			<span class="fa fa-refresh fa-spin"> </span>
+			Loading...
+		</p>
+
+		<div sorttable source="profileList" ng-show="profileList._promise.$$state.status === 1">
+			<table class="table table-bordered" ng-non-bindable>
+				<thead>
+					<tr>
+						<th width="10%" sortpath="user">User</th>
+						<th>Most Predominat Feature</th>
+						<th width="10"></th>
+					</tr>
+				</thead>
+				<tbody>
+					<tr>
+						<td>
+							<a href="#/dam/userProfileDetail/{{item.user}}">{{item.user}}</a>
+						</td>
+						<td>
+							{{item.DE.topCommands.slice(0,3).join(", ")}}
+						</td>
+						<td>
+							<a href="#/dam/userProfileDetail/{{item.user}}">Detail</a>
+						</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+	</div>
+</div>
+
+<!-- Modal: User profile Schedule Task -->
+<div class="modal fade" id="taskMDL" tabindex="-1" role="dialog">
+	<div class="modal-dialog modal-lg" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
+					<span aria-hidden="true">&times;</span>
+				</button>
+				<h4 class="modal-title">Training History</h4>
+			</div>
+			<div class="modal-body">
+				<div sorttable source="tasks">
+					<table class="table table-bordered" ng-non-bindable>
+						<thead>
+							<tr>
+								<th sortpath="tags.type">Command</th>
+								<th sortpath="timestamp">Start Time</th>
+								<th sortpath="updateTime">Update Time</th>
+								<th sortpath="duration">Duration</th>
+								<th sortpath="status">Status</th>
+								<th width="10"> </th>
+							</tr>
+						</thead>
+						<tbody>
+							<tr>
+								<td>{{item.tags.type}}</td>
+								<td>{{common.format.date(item.timestamp) || "--"}}</td>
+								<td>{{common.format.date(item.updateTime) || "--"}}</td>
+								<td>{{item._duration}}</td>
+								<td class="text-nowrap">
+									<span class="fa fa-hourglass-start text-muted" ng-show="item.status === 'INITIALIZED'"></span>
+									<span class="fa fa-hourglass-half text-info" ng-show="item.status === 'PENDING'"></span>
+									<span class="fa fa-circle-o-notch text-primary" ng-show="item.status === 'EXECUTING'"></span>
+									<span class="fa fa-check-circle text-success" ng-show="item.status === 'SUCCEEDED'"></span>
+									<span class="fa fa-exclamation-circle text-danger" ng-show="item.status === 'FAILED'"></span>
+									<span class="fa fa-ban text-muted" ng-show="item.status === 'CANCELED'"></span>
+									{{item.status}}
+								</td>
+								<td>
+									<a ng-click="_parent.showTaskDetail(item)">Detail</a>
+								</td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="modal-footer">
+				<button type="button" class="btn btn-primary pull-left" ng-click="updateTask()" ng-show="auth.isRole('ROLE_ADMIN')">
+					Update Now
+				</button>
+				<button type="button" class="btn btn-default" data-dismiss="modal">
+					Close
+				</button>
+			</div>
+		</div>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.css
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.css b/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.css
new file mode 100644
index 0000000..96fafda
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.css
@@ -0,0 +1,395 @@
+/*Bootstrap Components 3.1 - Created By ZombieJ*/
+.progress [data-toggle="slider"] {
+	height: 100%;
+	vertical-align: top;
+	float: left;
+}
+
+.progress[data-slider-container] {
+	position: relative;
+}
+
+.progress[data-slider-container] [data-toggle="slider"] {
+	position: absolute;
+	height: 20px;
+}
+
+.progress[data-slider-container] [data-toggle="slider-background"] {
+	position: absolute;
+	height: 20px;
+}.callout {
+	margin: 0 0 18px 0;
+	padding: 20px;
+	border-left: 3px solid #eee;
+}
+
+.callout h1,
+.callout h2,
+.callout h3,
+.callout h4,
+.callout h5,
+.callout h6,
+.callout h7 {
+	margin-top: 0;
+	margin-bottom: 5px;
+}
+
+.callout p,
+.callout span {
+	color: #333;
+}
+
+.callout p:last-child {
+	margin-bottom: 0;
+}
+
+.callout-success {
+	background-color: #f4fff4;
+	border-color: #bcf1c8;
+	color: #3c763d;
+}
+
+.callout-info {
+	background-color: #f4f8fa;
+	border-color: #bce8f1;
+	color: #34789a;
+}
+
+.callout-warning {
+	background-color: #faf8f0;
+	border-color: #faebcc;
+	color: #8a6d3b;
+}
+
+.callout-danger {
+	background-color: #fdf7f7;
+	border-color: #eed3d7;
+	color: #b94a48;
+}.checkbox[data-toggle="checkbox"] {
+	margin: 0 0 1px 0;
+	padding: 0 0 0 0;
+	min-height: inherit;
+	display: inline-block;
+	width: 16px;
+	height: 17px;
+
+	position: relative;
+	top: 0;
+
+	font-family: 'Glyphicons Halflings';
+	-webkit-font-smoothing: antialiased;
+}
+
+.checkbox[data-toggle="checkbox"]:before {
+	content: "\e013";
+	position: relative;
+	top: -3px;
+
+	font-size: 10px;
+	opacity: 0;
+
+	transition: all 0.2s;
+	-moz-transition: all 0.2s;
+	-webkit-transition: all 0.2s;
+	-o-transition: all 0.2s;
+}
+
+.checkbox[data-toggle="checkbox"][checked]:before {
+	font-size: 15px;
+	opacity: 1;
+}.bsc-datepicker {
+	background: white;
+	display: inline-block;
+	border: 1px solid #CCC;
+	padding: 0 10px;
+	border-radius: 5px;
+	box-shadow: 0 5px 15px rgba(0,0,0,0.5);
+	overflow-y: hidden;
+	position: absolute;
+	z-index: 10;
+}
+
+/* picker-group */
+.bsc-datepicker .picker-group {
+	border-top: 1px solid gray;
+	padding: 15px 0 13px 0;
+	margin-top: -2px;
+}
+
+.bsc-datepicker .picker-group.first-group {
+	border-top: none;
+	padding-top: 0;
+}
+
+.bsc-datepicker .picker-group.last-group {
+	padding-bottom: 0;
+}
+
+	/* header */
+
+.bsc-datepicker .picker-group .picker-header {
+	text-align: center;
+	margin-bottom: 5px;
+}
+
+.bsc-datepicker > .picker-group .picker-header button {
+	padding: 6px 7px;
+	line-height: 100%;
+	vertical-align: top;
+}
+
+.bsc-datepicker > .picker-group .picker-header button.minus {
+	float: left;
+}
+
+.bsc-datepicker > .picker-group .picker-header button.plus {
+	float: right;
+}
+
+.bsc-datepicker > .picker-group .picker-header h4 {
+	display: inline-block;
+	margin: 0;
+	padding: 5px 0 7px 0;
+	cursor: pointer;
+}
+
+	/* body */
+.bsc-datepicker > .picker-group .picker-body {
+	width: 238px;
+}
+
+.bsc-datepicker > .picker-group .picker-body span {
+	display: inline-block;
+	padding: 5px 0;
+	margin: 3px 2px 0 2px;
+	float: left;
+	text-align: center;
+	border-radius: 5px;
+	cursor: pointer;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span:hover {
+	background: #EEE;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span:active {
+	background: #DDD;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span.active {
+	color: white;
+	background: #3276b1;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span.inactive:hover {
+	background: transparent;
+	cursor: default;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span.disabled {
+	color: #DDD;
+	cursor: default;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span.disabled:hover {
+	color: #DDD;
+	background: #FFF;
+}
+
+.bsc-datepicker > .picker-group .picker-selectable span.disabled.active {
+	color: #FFF;
+	background: #DDD;
+}
+
+/* yearpicker */
+.bsc-datepicker > .yearpicker .picker-body span {
+	width: 43px;
+}
+
+.bsc-datepicker > .yearpicker .picker-header h4 {
+	cursor: default;
+}
+
+/* monthpicker */
+.bsc-datepicker > .monthpicker .picker-body span {
+	width: 55px;
+}
+
+/* datepicker */
+.bsc-datepicker > .datepicker .picker-body span {
+	width: 30px;
+}
+
+/* timepicker */
+.bsc-datepicker > .timepicker {
+	width: 238px;
+}
+
+.bsc-datepicker > .timepicker .timepicker-group {
+	width: 60px;
+	float: left;
+}
+
+.bsc-datepicker > .timepicker .timepicker-group input {
+	font-size: 40px;
+	height: 65px;
+	text-align: center;
+	padding: 0;
+	margin: 0 0 10px 0;
+	border-radius: 5px;
+	display: block;
+}
+
+.bsc-datepicker > .timepicker .timepicker-group button {
+	padding: 6px 6px;
+	line-height: 100%;
+	vertical-align: top;
+}
+
+.bsc-datepicker > .timepicker .timepicker-group button.time-plus {
+	float: right;
+}
+
+.bsc-datepicker > .timepicker .timepicker-spliter {
+	float: left;
+	font-size: 45px;
+	font-weight: bolder;
+	display: inline-block;
+	width: 29px;
+	text-align: center;
+}.notification-body {
+	display: inline-block;
+	position: fixed;
+	padding: 7px 10px 7px 10px;
+	margin: 10px;
+	max-width: 300px;
+	z-index: 1040;
+	box-shadow: 0px 1px 5px;
+}
+
+.notification-body button.close {
+	position: absolute;
+	right: 7px;
+	top: 3px;
+}
+
+.notification-body h5 {
+	padding: 0 15px 0 0;
+	margin: 0 0 3px 0;
+}
+
+.notification-body.alert-normal h5 {
+	color: #666;
+}
+
+.notification-body.alert-normal {
+	border: 1px solid #ccc;
+	background: white;
+	color: #666;
+}
+
+.notification-body.left {
+	left: 0;
+}
+
+.notification-body.right {
+	right: 0;
+}
+
+.notification-body.top {
+	top: 0;
+}
+
+.notification-body.bottom {
+	bottom: 0;
+}.radio[data-toggle="radio"] {
+	display: inline-block;
+	margin: 0 0 1px 0;
+	padding: 0;
+	border: 1px solid #adadad;
+	border-radius: 10px;
+
+	width: 16px;
+	height: 16px;
+	line-height: 100%;
+
+	position: relative;
+	top: 0;
+
+	font-family: 'Glyphicons Halflings';
+	-webkit-font-smoothing: antialiased;
+}
+
+.radio[data-toggle="radio"]:before {
+	content: "\e013";
+	position: relative;
+	top: -1px;
+
+	font-size: 10px;
+	opacity: 0;
+
+	transition: all 0.2s;
+	-moz-transition: all 0.2s;
+	-webkit-transition: all 0.2s;
+	-o-transition: all 0.2s;
+}
+
+.radio[data-toggle="radio"][checked]:before {
+	font-size: 15px;
+	opacity: 1;
+}.dropdown-toggle[data-toggle="dropdown"][data-type="selector"] {
+	text-align: left;
+	padding-right: 25px;
+	position: relative;
+}
+
+.dropdown-toggle[data-toggle="dropdown"][data-type="selector"] .caret {
+	margin-top: 9px;
+	position: absolute;
+	right: 9px;
+}
+
+ul.dropdown-menu[role="menu"][data-type="selector"] li a {
+	cursor: default;
+}.progress [data-toggle="slider"] {
+	height: 100%;
+	vertical-align: top;
+	float: left;
+}
+
+.progress[data-slider-container] {
+	position: relative;
+}
+
+.progress[data-slider-container] [data-toggle="slider"] {
+	position: absolute;
+	height: 20px;
+}
+
+.progress[data-slider-container] [data-toggle="slider-background"] {
+	position: absolute;
+	height: 20px;
+}ul.treeView ul {
+	margin: 0;
+	padding: 0 0 0 25px;
+}
+
+ul.treeView li {
+	list-style: none;
+}
+
+ul.treeView li.disabled, 
+ul.treeView li.disabled .tree-icon {
+	color: #999;
+}
+
+ul.treeView li .tree-icon {
+	color: #333;
+	text-decoration: none;
+	margin-left: 3px;
+	margin-right: 5px;
+}
+
+ul.treeView li [data-toggle='tree'] {
+	cursor: pointer;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/2c3005c9/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.min.css
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.min.css b/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.min.css
new file mode 100644
index 0000000..9295cbb
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/public/assets/bootstrap-components/css/bootstrap-components.min.css
@@ -0,0 +1 @@
+/*Bootstrap Components 3.1 - Created By ZombieJ*/.progress [data-toggle="slider"] {height: 100%;vertical-align: top;float: left;}.progress[data-slider-container] {position: relative;}.progress[data-slider-container] [data-toggle="slider"] {position: absolute;height: 20px;}.progress[data-slider-container] [data-toggle="slider-background"] {position: absolute;height: 20px;}.callout {margin: 0 0 18px 0;padding: 20px;border-left: 3px solid #eee;}.callout h1,.callout h2,.callout h3,.callout h4,.callout h5,.callout h6,.callout h7 {margin-top: 0;margin-bottom: 5px;}.callout p,.callout span {color: #333;}.callout p:last-child {margin-bottom: 0;}.callout-success {background-color: #f4fff4;border-color: #bcf1c8;color: #3c763d;}.callout-info {background-color: #f4f8fa;border-color: #bce8f1;color: #34789a;}.callout-warning {background-color: #faf8f0;border-color: #faebcc;color: #8a6d3b;}.callout-danger {background-color: #fdf7f7;border-color: #eed3d7;color: #b94a48;}.checkbox[data-toggle="check
 box"] {margin: 0 0 1px 0;padding: 0 0 0 0;min-height: inherit;display: inline-block;width: 16px;height: 17px;position: relative;top: 0;font-family: 'Glyphicons Halflings';-webkit-font-smoothing: antialiased;}.checkbox[data-toggle="checkbox"]:before {content: "\e013";position: relative;top: -3px;font-size: 10px;opacity: 0;transition: all 0.2s;-moz-transition: all 0.2s;-webkit-transition: all 0.2s;-o-transition: all 0.2s;}.checkbox[data-toggle="checkbox"][checked]:before {font-size: 15px;opacity: 1;}.bsc-datepicker {background: white;display: inline-block;border: 1px solid #CCC;padding: 0 10px;border-radius: 5px;box-shadow: 0 5px 15px rgba(0,0,0,0.5);overflow-y: hidden;position: absolute;z-index: 10;}/* picker-group */.bsc-datepicker .picker-group {border-top: 1px solid gray;padding: 15px 0 13px 0;margin-top: -2px;}.bsc-datepicker .picker-group.first-group {border-top: none;padding-top: 0;}.bsc-datepicker .picker-group.last-group {padding-bottom: 0;}/* header */.bsc-datepicker .picker
 -group .picker-header {text-align: center;margin-bottom: 5px;}.bsc-datepicker > .picker-group .picker-header button {padding: 6px 7px;line-height: 100%;vertical-align: top;}.bsc-datepicker > .picker-group .picker-header button.minus {float: left;}.bsc-datepicker > .picker-group .picker-header button.plus {float: right;}.bsc-datepicker > .picker-group .picker-header h4 {display: inline-block;margin: 0;padding: 5px 0 7px 0;cursor: pointer;}/* body */.bsc-datepicker > .picker-group .picker-body {width: 238px;}.bsc-datepicker > .picker-group .picker-body span {display: inline-block;padding: 5px 0;margin: 3px 2px 0 2px;float: left;text-align: center;border-radius: 5px;cursor: pointer;}.bsc-datepicker > .picker-group .picker-selectable span:hover {background: #EEE;}.bsc-datepicker > .picker-group .picker-selectable span:active {background: #DDD;}.bsc-datepicker > .picker-group .picker-selectable span.active {color: white;background: #3276b1;}.bsc-datepicker > .picker-group .picker-selecta
 ble span.inactive:hover {background: transparent;cursor: default;}.bsc-datepicker > .picker-group .picker-selectable span.disabled {color: #DDD;cursor: default;}.bsc-datepicker > .picker-group .picker-selectable span.disabled:hover {color: #DDD;background: #FFF;}.bsc-datepicker > .picker-group .picker-selectable span.disabled.active {color: #FFF;background: #DDD;}/* yearpicker */.bsc-datepicker > .yearpicker .picker-body span {width: 43px;}.bsc-datepicker > .yearpicker .picker-header h4 {cursor: default;}/* monthpicker */.bsc-datepicker > .monthpicker .picker-body span {width: 55px;}/* datepicker */.bsc-datepicker > .datepicker .picker-body span {width: 30px;}/* timepicker */.bsc-datepicker > .timepicker {width: 238px;}.bsc-datepicker > .timepicker .timepicker-group {width: 60px;float: left;}.bsc-datepicker > .timepicker .timepicker-group input {font-size: 40px;height: 65px;text-align: center;padding: 0;margin: 0 0 10px 0;border-radius: 5px;display: block;}.bsc-datepicker > .timepic
 ker .timepicker-group button {padding: 6px 6px;line-height: 100%;vertical-align: top;}.bsc-datepicker > .timepicker .timepicker-group button.time-plus {float: right;}.bsc-datepicker > .timepicker .timepicker-spliter {float: left;font-size: 45px;font-weight: bolder;display: inline-block;width: 29px;text-align: center;}.notification-body {display: inline-block;position: fixed;padding: 7px 10px 7px 10px;margin: 10px;max-width: 300px;z-index: 1040;box-shadow: 0px 1px 5px;}.notification-body button.close {position: absolute;right: 7px;top: 3px;}.notification-body h5 {padding: 0 15px 0 0;margin: 0 0 3px 0;}.notification-body.alert-normal h5 {color: #666;}.notification-body.alert-normal {border: 1px solid #ccc;background: white;color: #666;}.notification-body.left {left: 0;}.notification-body.right {right: 0;}.notification-body.top {top: 0;}.notification-body.bottom {bottom: 0;}.radio[data-toggle="radio"] {display: inline-block;margin: 0 0 1px 0;padding: 0;border: 1px solid #adadad;border-
 radius: 10px;width: 16px;height: 16px;line-height: 100%;position: relative;top: 0;font-family: 'Glyphicons Halflings';-webkit-font-smoothing: antialiased;}.radio[data-toggle="radio"]:before {content: "\e013";position: relative;top: -1px;font-size: 10px;opacity: 0;transition: all 0.2s;-moz-transition: all 0.2s;-webkit-transition: all 0.2s;-o-transition: all 0.2s;}.radio[data-toggle="radio"][checked]:before {font-size: 15px;opacity: 1;}.dropdown-toggle[data-toggle="dropdown"][data-type="selector"] {text-align: left;padding-right: 25px;position: relative;}.dropdown-toggle[data-toggle="dropdown"][data-type="selector"] .caret {margin-top: 9px;position: absolute;right: 9px;}ul.dropdown-menu[role="menu"][data-type="selector"] li a {cursor: default;}.progress [data-toggle="slider"] {height: 100%;vertical-align: top;float: left;}.progress[data-slider-container] {position: relative;}.progress[data-slider-container] [data-toggle="slider"] {position: absolute;height: 20px;}.progress[data-slider
 -container] [data-toggle="slider-background"] {position: absolute;height: 20px;}ul.treeView ul {margin: 0;padding: 0 0 0 25px;}ul.treeView li {list-style: none;}ul.treeView li.disabled, ul.treeView li.disabled .tree-icon {color: #999;}ul.treeView li .tree-icon {color: #333;text-decoration: none;margin-left: 3px;margin-right: 5px;}ul.treeView li [data-toggle='tree'] {cursor: pointer;}
\ No newline at end of file


Mime
View raw message