eagle-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From h..@apache.org
Subject [6/7] incubator-eagle git commit: EAGLE-139 EAGLE-163 Eagle UI Modularization and fix bugs in policy extensions
Date Thu, 25 Feb 2016 10:25:22 GMT
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/resources/eagleSecurity.xml
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/resources/eagleSecurity.xml b/eagle-webservice/src/main/resources/eagleSecurity.xml
index 2b106b3..b8683dc 100644
--- a/eagle-webservice/src/main/resources/eagleSecurity.xml
+++ b/eagle-webservice/src/main/resources/eagleSecurity.xml
@@ -28,6 +28,8 @@
         <scr:http-basic entry-point-ref="unauthorisedEntryPoint"/>
         <scr:intercept-url pattern="/rest/entities" method="POST" access="hasRole('ROLE_ADMIN')" />
         <scr:intercept-url pattern="/rest/entities/delete" method="POST" access="hasRole('ROLE_ADMIN')" />
+        <scr:intercept-url pattern="/rest/module/*" method="DELETE" access="hasRole('ROLE_ADMIN')" />
+        <scr:intercept-url pattern="/rest/module/*" method="POST" access="hasRole('ROLE_ADMIN')" />
         <scr:intercept-url pattern="/rest/list" method="POST" access="hasRole('ROLE_ADMIN')" />
         <scr:intercept-url pattern="/rest/status" method="GET" access="permitAll" />
         <scr:intercept-url pattern="/rest/*" access="isAuthenticated()" />
@@ -82,7 +84,7 @@
                 <scr:user-service>
                     <!-- user admin has role ADMIN, user eagle has role USER, both have password "secret" -->
                 	<scr:user name="eagle" password="$2a$10$TwALMRHpSetDaeTurg9rj.DnIdOde4fkQGBSPG3fVqtH.G5ZH8sQK" authorities="ROLE_USER" />
-                    <scr:user name="admin" password="$2a$10$TwALMRHpSetDaeTurg9rj.DnIdOde4fkQGBSPG3fVqtH.G5ZH8sQK" authorities="ROLE_ADMIN, ROLE_USER" />
+                    <scr:user name="admin" password="$2a$10$TwALMRHpSetDaeTurg9rj.DnIdOde4fkQGBSPG3fVqtH.G5ZH8sQK" authorities="ROLE_ADMIN" />
                 </scr:user-service>
                 <scr:password-encoder ref="passwordEncoder" />
             </scr:authentication-provider>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/Gruntfile.js
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/Gruntfile.js b/eagle-webservice/src/main/webapp/Gruntfile.js
index a32b1da..d547ad6 100644
--- a/eagle-webservice/src/main/webapp/Gruntfile.js
+++ b/eagle-webservice/src/main/webapp/Gruntfile.js
@@ -45,6 +45,9 @@ module.exports = function (grunt) {
 		concat: {
 			app: {
 				src: [
+					'app/public/js/srv/main.js',
+					'app/public/js/srv/**.js',
+
 					'app/public/js/app.js',
 					'app/public/js/app.*.js',
 
@@ -54,7 +57,7 @@ module.exports = function (grunt) {
 					'app/public/js/components/**.js',
 					'app/public/js/components/**/**.js',
 
-					'app/public/js/ctrl/damController.js',
+					'app/public/js/ctrl/main.js',
 					'app/public/js/ctrl/*.js',
 				],
 				dest: 'tmp/public/js/scripts.js'
@@ -89,14 +92,24 @@ module.exports = function (grunt) {
 				options: {
 					mangle: false
 				},
-				src: 'tmp/public/js/scripts.js',
-				dest: 'tmp/public/js/scripts.min.js'
-			}
+				files: [
+					{
+						src: 'tmp/public/js/scripts.js',
+						dest: 'tmp/public/js/scripts.min.js'
+					},
+					{
+						expand: true,
+						src: '**/*.js',
+						dest: 'tmp/feature',
+						cwd: 'app/public/feature'
+					}
+				]
+			},
 		},
 		cssmin: {
 			ui: {
 				files: {
-					'tmp/public/css/styles.css': ['app/public/css/main.css']
+					'tmp/public/css/styles.css': ['app/public/css/main.css', 'app/public/css/animation.css']
 				}
 			}
 		},
@@ -107,6 +120,11 @@ module.exports = function (grunt) {
 			}
 		},
 		copy: {
+			feature: {
+				files: [
+					{expand: true, cwd: 'app/', src: ['public/feature/**'], dest: 'tmp'}
+				]
+			},
 			ui: {
 				files: [
 					{expand: true, cwd: 'tmp/', src: ['**'], dest: 'ui'},
@@ -133,6 +151,7 @@ module.exports = function (grunt) {
 		// Clean Env
 		'clean:build',
 		// Compress JS
+		'copy:feature',
 		'concat:app',
 		'regex-replace:strict',
 		'uglify',
@@ -142,7 +161,7 @@ module.exports = function (grunt) {
 		'concat:css',
 		// Pass HTML Resources
 		'htmlrefs',
-		'copy',
+		'copy:ui',
 		// Clean Env
 		'clean:tmp',
 	]);

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/index.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/index.html b/eagle-webservice/src/main/webapp/app/index.html
index 82b543f..f3d61a4 100644
--- a/eagle-webservice/src/main/webapp/app/index.html
+++ b/eagle-webservice/src/main/webapp/app/index.html
@@ -30,72 +30,63 @@
 
 		<!-- ref:css public/css/styles.min.css -->
 		<link href="public/css/main.css" rel="stylesheet" type="text/css" media="screen">
-		<link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" type="text/css" media="screen">
-		<link href="../node_modules/zombiej-bootstrap-components/bootstrap-components/css/bootstrap-components.min.css" rel="stylesheet" type="text/css" media="screen">
-		<link href="../node_modules/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
-		<link href="../node_modules/zombiej-nvd3/build/nv.d3.min.css" rel="stylesheet" type="text/css" />
-		<link href="../node_modules/admin-lte/dist/css/AdminLTE.min.css" rel="stylesheet" type="text/css" />
-		<link href="../node_modules/admin-lte/dist/css/skins/skin-blue.min.css" rel="stylesheet" type="text/css" />
+		<link href="public/css/animation.css" rel="stylesheet" type="text/css" media="screen">
+		<link href="../node_modules/bootstrap/dist/css/bootstrap.css" rel="stylesheet" type="text/css" media="screen">
+		<link href="../node_modules/zombiej-bootstrap-components/bootstrap-components/css/bootstrap-components.css" rel="stylesheet" type="text/css" media="screen">
+		<link href="../node_modules/zombiej-nvd3/build/nv.d3.css" rel="stylesheet" type="text/css" />
+		<link href="../node_modules/font-awesome/css/font-awesome.css" rel="stylesheet" type="text/css" />
+		<link href="../node_modules/admin-lte/dist/css/AdminLTE.css" rel="stylesheet" type="text/css" />
+		<link href="../node_modules/admin-lte/dist/css/skins/skin-blue.css" rel="stylesheet" type="text/css" />
 		<!-- endref -->
 	</head>
-	<body class="skin-blue sidebar-mini" ng-class="{'no-sidebar' : globalContent.hideSidebar}">
+	<body class="skin-blue sidebar-mini" ng-class="{'no-sidebar' : PageConfig.hideSidebar}">
 		<!-- Site wrapper -->
 		<div class="wrapper">
 			<header class="main-header">
 				<a href="#/" class="logo">
-					<span class="logo-mini">DAM</span>
-					<span class="logo-lg">Eagle <small>Data Activity Monitoring</small></span>
+					<span class="logo-mini"><img src="public/images/favicon_white.png" /></span>
+					<span class="logo-lg">Apache Eagle</span>
 				</a>
 				<!-- Header Navbar: style can be found in header.less -->
 				<nav class="navbar navbar-static-top" role="navigation">
 					<!-- Sidebar toggle button-->
-					<a ng-hide="globalContent.hideSidebar" class="sidebar-toggle" data-toggle="offcanvas" role="button">
+					<a ng-hide="PageConfig.hideSidebar" class="sidebar-toggle" data-toggle="offcanvas" role="button">
 						<span class="sr-only">Toggle navigation</span>
 						<span class="icon-bar"></span>
 						<span class="icon-bar"></span>
 						<span class="icon-bar"></span>
 					</a>
+
 					<div class="navbar-custom-menu">
 						<ul class="nav navbar-nav">
 							<!-- Site -->
-							<li class="dropdown" ng-show="!globalContent.hideSite && !globalContent.lockSite">
+							<li class="dropdown" ng-show="!PageConfig.hideSite && !PageConfig.lockSite">
 								<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
 									<i class="fa fa-server"></i>
-									{{site.current().name}}
+									{{Site.current().tags.site}}
 									<i class="fa fa-caret-down"></i>
 								</a>
 								<ul class="dropdown-menu">
-									<li ng-repeat="sites in site.list">
-										<a ng-click="site.current(sites);">
-											<span class="fa fa-database"></span> {{sites.name}}
+									<li ng-repeat="_site in Site.list" ng-if="_site.enabled">
+										<a ng-click="Site.current(_site);">
+											<span class="fa fa-database"></span> {{_site.tags.site}}
 										</a>
 									</li>
-									<!--li role="separator" class="divider"></li>
-									<li>
-										<a href="#/dam/siteList"><span class="fa fa-cog"></span>Config Sites</a>
-									</li-->
 								</ul>
 							</li>
-							<li class="dropdown" ng-show="globalContent.lockSite">
+							<li class="dropdown" ng-show="PageConfig.lockSite">
 								<a>
 									<i class="fa fa-server"></i>
-									{{site.current().name}}
+									{{Site.current().tags.site}}
 								</a>
 							</li>
 
 							<!-- User -->
-							<li class="dropdown user user-menu" ng-hide="globalContent.hideUser">
+							<li class="dropdown user user-menu" ng-hide="PageConfig.hideUser">
 								<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
 									<i class="fa fa-user"></i>
-									{{auth.userProfile.username}}
+									{{Auth.userProfile.username}}
 								</a>
-								<!--ul class="dropdown-menu">
-									<li>
-										<a ng-click="logout();">
-											<span class="fa fa-sign-out"></span> Logout
-										</a>
-									</li>
-								</ul-->
 								<ul class="dropdown-menu">
 									<!-- User image -->
 									<li class="user-header">
@@ -103,14 +94,17 @@
 											<span class="fa fa-user" alt="User Image"></span>
 										</span>
 										<p>
-											{{auth.userProfile.username}}
+											{{Auth.userProfile.username}}
 											<small>
-												<span ng-repeat="role in auth.userProfile.authorities">{{role.authority}} </span>
+												<span ng-repeat="role in Auth.userProfile.authorities">{{role.authority}} </span>
 											</small>
 										</p>
 									</li>
 									<!-- Menu Footer-->
 									<li class="user-footer">
+										<div class="pull-left" ng-if="Auth.isRole('ROLE_ADMIN')">
+											<a href="#/config/site" class="btn btn-default btn-flat">Configuration</a>
+										</div>
 										<div class="pull-right">
 											<a ng-click="logout();" class="btn btn-default btn-flat">Sign out</a>
 										</div>
@@ -119,16 +113,45 @@
 							</li>
 						</ul>
 					</div>
+
+					<!-- Applications -->
+					<div ng-hide="PageConfig.hideApplication">
+						<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#moduleMenu">
+							<span class="sr-only">Toggle navigation</span>
+							<span class="fa fa-map"></span>
+						</button>
+						<div class="collapse navbar-collapse" id="moduleMenu">
+							<ul class="nav navbar-nav">
+								<li ng-repeat="_grp in Site.current().applicationGroupList" ng-if="_grp.enabledList.length"
+									class="dropdown" ng-class="{active: Application.current().groupName === _grp.name}">
+									<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
+										{{_grp.name}}
+									</a>
+									<ul class="dropdown-menu">
+										<li ng-repeat="_app in _grp.enabledList">
+											<a ng-click="Application.current(_app);">
+												<span class="fa fa-cubes"></span> {{_app.displayName}}
+											</a>
+										</li>
+									</ul>
+								</li>
+							</ul>
+						</div>
+					</div>
 				</nav>
 			</header>
 
 			<!-- =============================================== -->
 			<!-- Left side column. contains the side bar -->
-			<aside class="main-sidebar" ng-hide="globalContent.hideSidebar">
+			<aside class="main-sidebar" ng-hide="PageConfig.hideSidebar">
 				<!-- side bar: style can be found in sidebar.less -->
 				<section class="sidebar">
 					<ul class="sidebar-menu">
-						<li ng-repeat="page in globalContent.pageList" ng-class="getNavClass(page)" ng-show="getNavVisible(page)">
+						<li class="header">
+							{{Application.current().groupName || 'Application'}} >
+							{{Application.current().displayName || 'Features'}}
+						</li>
+						<li ng-repeat="page in PageConfig.navConfig.pageList track by $index" ng-class="getNavClass(page)" ng-show="getNavVisible(page)">
 							<a href="{{page.url}}">
 								<i class="fa fa-{{page.icon}}"></i> <span>{{page.title}}</span> 
 							</a>
@@ -142,17 +165,18 @@
 			<!-- Right side column. Contains the navbar and content of the page -->
 			<div class="content-wrapper">
 				<!-- Content Header (Page header) -->
-				<section class="content-header" ng-hide="globalContent.hideSidebar">
+				<section class="content-header" ng-hide="PageConfig.hideSidebar">
 					<h1>
-						<span class="pageTitle">{{globalContent.pageTitle}}</span>
-						<small class="pageSubTitle">{{globalContent.pageSubTitle}}</small>
+						<span class="pageTitle">{{PageConfig.pageTitle}}</span>
+						<small class="pageSubTitle">{{PageConfig.pageSubTitle}}</small>
 					</h1>
 
+
 					<ol class="breadcrumb">
-						<li ng-repeat="nav in globalContent.navPath">
-							<a ng-href="{{$last ? '' : globalContent.navMapping[nav]}}">
-								<span class="fa fa-home" ng-show="$first"></span>
-								{{nav}}
+						<li ng-repeat="navPath in PageConfig.navPath">
+							<a ng-href="#{{navPath.path}}">
+								<span class="fa fa-home" ng-if="$first"></span>
+								{{navPath.title || navPath.path}}
 							</a>
 						</li>
 					</ol>
@@ -160,7 +184,9 @@
 
 				<!-- Main content -->
 				<section class="content">
-					<div id="content" ng-view></div>
+					<div id="content">
+						<div ui-view></div>
+					</div>
 				</section><!-- /.content -->
 			</div><!-- /.content-wrapper -->
 		</div><!-- ./wrapper -->
@@ -176,12 +202,23 @@
 		<script src="../node_modules/angular/angular.js"></script>
 		<script src="../node_modules/angular-resource/angular-resource.js"></script>
 		<script src="../node_modules/angular-route/angular-route.js"></script>
-		<script src="../node_modules/angular-cookies/angular-cookies.js"></script>
+		<script src="../node_modules/angular-animate/angular-animate.js"></script>
 		<script src="../node_modules/angular-ui-bootstrap/ui-bootstrap-tpls.js"></script>
+		<script src="../node_modules/angular-ui-router/release/angular-ui-router.js"></script>
 		<script src="../node_modules/d3/d3.js"></script>
 		<script src="../node_modules/zombiej-nvd3/build/nv.d3.js"></script>
 
-
+		<!-- Service -->
+		<script src="public/js/srv/main.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/applicationSrv.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/authorizationSrv.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/entitiesSrv.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/siteSrv.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/pageSrv.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/wrapStateSrv.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/srv/uiSrv.js" type="text/javascript" charset="utf-8"></script>
+
+		<!-- Application -->
 		<script src="public/js/app.js" type="text/javascript" charset="utf-8"></script>
 		<script src="public/js/app.ui.js" type="text/javascript" charset="utf-8"></script>
 		<script src="public/js/app.time.js" type="text/javascript" charset="utf-8"></script>
@@ -189,6 +226,7 @@
 
 		<script src="public/js/common.js" type="text/javascript" charset="utf-8"></script>
 
+		<!-- Components -->
 		<script src="public/js/components/main.js" type="text/javascript" charset="utf-8"></script>
 		<script src="public/js/components/sortTable.js" type="text/javascript" charset="utf-8"></script>
 		<script src="public/js/components/tabs.js" type="text/javascript" charset="utf-8"></script>
@@ -196,15 +234,10 @@
 		<script src="public/js/components/charts/line3d.js" type="text/javascript" charset="utf-8"></script>
 		<script src="public/js/components/nvd3.js" type="text/javascript" charset="utf-8"></script>
 
-
-		<script src="public/js/ctrl/damController.js" type="text/javascript" charset="utf-8"></script>
-		<script src="public/js/ctrl/policyController.js" type="text/javascript" charset="utf-8"></script>
-		<script src="public/js/ctrl/siteController.js" type="text/javascript" charset="utf-8"></script>
-		<script src="public/js/ctrl/streamController.js" type="text/javascript" charset="utf-8"></script>
-		<script src="public/js/ctrl/alertController.js" type="text/javascript" charset="utf-8"></script>
-		<script src="public/js/ctrl/sensitivityController.js" type="text/javascript" charset="utf-8"></script>
-		<script src="public/js/ctrl/userProfileController.js" type="text/javascript" charset="utf-8"></script>
+		<!-- Controllers -->
+		<script src="public/js/ctrl/main.js" type="text/javascript" charset="utf-8"></script>
 		<script src="public/js/ctrl/authController.js" type="text/javascript" charset="utf-8"></script>
+		<script src="public/js/ctrl/configurationController.js" type="text/javascript" charset="utf-8"></script>
 		<!-- endref -->
 	</body>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/config/application.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/config/application.html b/eagle-webservice/src/main/webapp/app/partials/config/application.html
new file mode 100644
index 0000000..5c5b09e
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/config/application.html
@@ -0,0 +1,103 @@
+<div class="box box-info">
+	<div class="box-header with-border">
+		<h3 class="box-title">
+			<span class="fa fa-cogs"></span>
+			Configuration
+		</h3>
+	</div><!-- /.box-header -->
+
+	<div class="box-body">
+		<div class="row">
+			<div class="col-md-3">
+				<ul class="nav nav-pills nav-stacked">
+					<li class="disabled"><a>Application</a></li>
+					<li role="presentation" ng-repeat="_application in Application.list track by $index" ng-class="{active: application === _application}">
+						<a ng-click="setApplication(_application)">
+							<span class="fa fa-server"></span>
+							{{_application.tags.application}}
+							<span ng-if="_application.alias">({{_application.alias}})</span>
+						</a>
+					</li>
+
+					<li>
+						<a class="text-light-blue" ng-click="newApplication()" ng-disabled="_pageLock">
+							<span class="fa fa-plus-square"></span>
+							New Application
+						</a>
+					</li>
+				</ul>
+			</div>
+
+			<div class="col-md-9">
+				<a class="pull-right btn btn-danger btn-xs" ng-click="deleteApplication(application)" ng-disabled="_pageLock">
+					<span class="fa fa-trash-o"></span>
+					Delete Application
+				</a>
+
+				<!-- Title -->
+				<h3 class="guideline">
+					Application
+					<small>{{application.tags.application}}</small>
+				</h3>
+				<hr/>
+
+				<!-- Config -->
+				<div class="form-group">
+					<label for="displayName">Display Name</label>
+					<input type="text" class="form-control" id="displayName" placeholder="(Optional) Display name." ng-model="applications[application.tags.application].alias">
+				</div>
+				<div class="form-group">
+					<label for="applicationGroup">Group</label>
+					<input type="text" class="form-control" id="applicationGroup" placeholder="(Optional) Group name" ng-model="applications[application.tags.application].group">
+				</div>
+				<div class="form-group">
+					<label for="applicationDescription">Description</label>
+					<textarea id="applicationDescription" class="form-control" placeholder="(Optional) Application description" rows="2" ng-model="applications[application.tags.application].desc"></textarea>
+				</div>
+				<div class="form-group">
+					<label for="applicationConfiguration">Configuration</label>
+					<span class="text-danger">{{configCheck(applications[application.tags.application].config)}}</span>
+					<textarea id="applicationConfiguration" class="form-control" placeholder="Application configuration. Feature can read this " rows="5" ng-model="applications[application.tags.application].config"></textarea>
+				</div>
+
+				<!-- Feature -->
+				<label>* Feature</label>
+				<div class="row">
+					<div class="col-sm-6">
+						<h1 class="text-muted text-center" ng-show="applications[application.tags.application].features.length === 0">No feature in using</h1>
+						<ul class="products-list product-list-in-box fixed-height" ng-show="applications[application.tags.application].features.length !== 0">
+							<li class="item" ng-repeat="feature in applications[application.tags.application].features track by $index" ng-class="{active: _feature === feature}">
+								<div class="product-operation">
+									<a class="fa fa-chevron-up" ng-click="moveFeature(feature, applications[application.tags.application].features, -1)"></a>
+									<a class="fa fa-chevron-down" ng-click="moveFeature(feature, applications[application.tags.application].features, 1)"></a>
+								</div>
+								<div class="product-info">
+									<a class="fa fa-times pull-right" ng-click="removeFeature(feature, applications[application.tags.application])"></a>
+									<span class="product-title">{{feature}}</span>
+									<span class="product-description">{{Application.featureList.set[feature].desc}}</span>
+								</div>
+							</li>
+						</ul>
+					</div>
+					<div class="col-sm-6">
+						<ul class="products-list product-list-in-box fixed-height">
+							<li class="item" ng-repeat="feature in applications[application.tags.application].optionalFeatures track by $index">
+								<button class="btn btn-lg btn-primary pull-left" ng-click="addFeature(feature, applications[application.tags.application])" ng-disabled="_pageLock">
+									<span class="fa fa-star-o"></span>
+								</button>
+								<div class="product-info">
+									<span class="product-title">{{feature}}</span>
+									<span class="product-description">{{Application.featureList.set[feature].desc}}</span>
+								</div>
+							</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div><!-- /.box-body -->
+
+	<div class="box-footer clearfix">
+		<button class="btn btn-primary" ng-click="saveAll()" ng-disabled="_pageLock">Save All</button>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/config/feature.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/config/feature.html b/eagle-webservice/src/main/webapp/app/partials/config/feature.html
new file mode 100644
index 0000000..3088883
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/config/feature.html
@@ -0,0 +1,64 @@
+<div class="box box-info">
+	<div class="box-header with-border">
+		<h3 class="box-title">
+			<span class="fa fa-cogs"></span>
+			Configuration
+		</h3>
+	</div><!-- /.box-header -->
+
+	<div class="box-body">
+		<div class="row">
+			<div class="col-md-3">
+				<ul class="nav nav-pills nav-stacked">
+					<li class="disabled">
+						<a>Feature</a>
+					</li>
+					<li role="presentation" ng-repeat="_feature in Application.featureList" ng-class="{active: feature === _feature}">
+						<a ng-click="setFeature(_feature)">
+							<span class="fa fa-leaf" ng-class="{'text-danger': _feature._loaded === false}" uib-tooltip="Module load failed!" tooltip-enable="_feature._loaded === false"></span>
+							{{_feature.tags.feature}}
+						</a>
+					</li>
+					<li>
+						<a class="text-light-blue" ng-click="newFeature()" ng-disabled="_pageLock">
+							<span class="fa fa-plus-square"></span>
+							New Feature
+						</a>
+					</li>
+				</ul>
+			</div>
+
+			<div class="col-md-9">
+				<a class="pull-right btn btn-danger btn-xs" ng-click="deleteFeature(feature)" ng-disabled="_pageLock">
+					<span class="fa fa-trash-o"></span>
+					Delete Feature
+				</a>
+
+				<h3 class="guideline">
+					<span class="fa fa-exclamation-triangle text-danger" uib-tooltip="Module load failed!" ng-show="feature._loaded === false"></span>
+					{{feature.tags.feature}}
+				</h3>
+				<hr/>
+
+				<p class="text text-muted">
+					Will load the start up file <code>controller.js</code> from <code>public/feature/{{feature.tags.feature}}</code>.
+					If you are developing customized feature, please reference provided feature.
+				</p>
+
+				<!-- Config -->
+				<div class="form-group">
+					<label for="featureVersion">Version</label>
+					<input id="featureVersion" type="text" class="form-control" placeholder="(Optional) Feature version." ng-model="features[feature.tags.feature].version">
+				</div>
+				<div class="form-group">
+					<label for="featureDescription">Description</label>
+					<textarea id="featureDescription" class="form-control" placeholder="(Optional) Feature description." rows="10" ng-model="features[feature.tags.feature].desc"></textarea>
+				</div>
+			</div>
+		</div>
+	</div><!-- /.box-body -->
+
+	<div class="box-footer clearfix">
+		<button class="btn btn-primary" ng-click="saveAll()" ng-disabled="_pageLock">Save All</button>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/config/site.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/config/site.html b/eagle-webservice/src/main/webapp/app/partials/config/site.html
new file mode 100644
index 0000000..1d792d9
--- /dev/null
+++ b/eagle-webservice/src/main/webapp/app/partials/config/site.html
@@ -0,0 +1,94 @@
+<div class="box box-info">
+	<div class="box-header with-border">
+		<h3 class="box-title">
+			<span class="fa fa-cogs"></span>
+			Configuration
+		</h3>
+	</div><!-- /.box-header -->
+
+	<div class="box-body">
+		<div class="row">
+			<div class="col-md-3">
+				<ul class="nav nav-pills nav-stacked">
+					<li class="disabled"><a>Site</a></li>
+					<li role="presentation" ng-repeat="_site in Site.list track by $index" ng-class="{active: site === _site}">
+						<a ng-click="setSite(_site)">
+							<span class="fa fa-server"></span>
+							{{_site.tags.site}}
+						</a>
+					</li>
+
+					<li>
+						<a class="text-light-blue" ng-click="newSite()" ng-disabled="_pageLock">
+							<span class="fa fa-plus-square"></span>
+							New Site
+						</a>
+					</li>
+				</ul>
+			</div>
+
+			<div class="col-md-9">
+				<a class="pull-right btn btn-danger btn-xs" ng-click="deleteSite(site)" ng-disabled="_pageLock">
+					<span class="fa fa-trash-o"></span>
+					Delete Site
+				</a>
+
+				<!-- Title -->
+				<h3 class="guideline">
+					Site
+					<small>{{site.tags.site}}</small>
+				</h3>
+				<hr/>
+
+				<!-- Config -->
+				<div class="checkbox">
+					<label>
+						<input type="checkbox" ng-checked="sites[site.tags.site].enabled" ng-click="sites[site.tags.site].enabled = !sites[site.tags.site].enabled">
+						<strong>Enabled</strong>
+					</label>
+				</div>
+				<hr/>
+
+				<!-- Application -->
+				<label>* Application</label>
+				<div class="row">
+					<div class="col-sm-6">
+						<h1 class="text-muted text-center" ng-show="sites[site.tags.site].applications.length === 0">No application in using</h1>
+						<ul class="products-list product-list-in-box fixed-height" ng-show="sites[site.tags.site].applications.length !== 0">
+							<li class="item" ng-repeat="application in sites[site.tags.site].applications track by $index" ng-class="{active: _application === application}">
+								<div class="product-operation single">
+									<span class="fa fa-cubes"></span>
+								</div>
+								<div class="product-info">
+									<a class="fa fa-times pull-right" ng-click="removeApplication(application, sites[site.tags.site])"></a>
+									<span class="product-title">
+										<a class="fa fa-cog" ng-click="setApplication(application)"></a>
+										{{application.tags.application}}
+									</span>
+									<span class="product-description">{{Application.list.set[application.tags.application].desc}}</span>
+								</div>
+							</li>
+						</ul>
+					</div>
+					<div class="col-sm-6">
+						<ul class="products-list product-list-in-box fixed-height">
+							<li class="item" ng-repeat="application in sites[site.tags.site].optionalApplications track by $index">
+								<button class="btn btn-lg btn-primary pull-left" ng-click="addApplication(application, sites[site.tags.site])" ng-disabled="_pageLock">
+									<span class="fa fa-star-o"></span>
+								</button>
+								<div class="product-info">
+									<span class="product-title">{{application.tags.application}}</span>
+									<span class="product-description">{{Application.list.set[application.tags.application].desc}}</span>
+								</div>
+							</li>
+						</ul>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div><!-- /.box-body -->
+
+	<div class="box-footer clearfix">
+		<button class="btn btn-primary" ng-click="saveAll()" ng-disabled="_pageLock">Save All</button>
+	</div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html b/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html
deleted file mode 100644
index 9b0ec01..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/alertDetail.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
-  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-info">
-	<div class="box-header with-border">
-		<h3 class="box-title" id="policyId">
-			{{alert.tags.policyId}}
-			<small>{{common.format.date(alert.timestamp)}}</small>
-		</h3>
-	</div><!-- /.box-header -->
-
-	<div class="box-body">
-		<a class="btn btn-primary pull-right" href="#/dam/policyDetail/?policy={{alert.tags.policyId}}&site={{alert.tags.site}}&executor={{alert.tags.alertExecutorId}}">View Policy</a>
-
-		<div class="inline-group">
-			<dl><dt>Site</dt><dd>{{alert.tags.site}}</dd></dl>
-			<dl><dt>Data Source</dt><dd>{{alert.tags.dataSource}}</dd></dl>
-		</div>
-		<div class="inline-group">
-			<dl><dt>Alert Time</dt><dd>{{common.format.date(alert.timestamp)}}</dd></dl>
-			<dl><dt>Message Time</dt><dd>{{common.format.date(alert.alertContext.properties.timestamp)}}</dd></dl>
-		</div>
-		<!--div class="inline-group">
-			<dl><dt>Severity</dt><dd>{{alert.alertContext.properties.severity}}</dd></dl>
-		</div-->
-		<div class="inline-group">
-			<dl><dt>Stream Name</dt><dd>{{alert.tags.sourceStreams}}</dd></dl>
-		</div>
-		<div class="inline-group">
-			<dl><dt>Alert Source</dt><dd>{{alert.tags.alertSource}}</dd></dl>
-		</div>
-		<div class="inline-group">
-			<dl><dt>User</dt><dd>{{alert.alertContext.properties.user}}</dd></dl>
-			<dl><dt>Host</dt><dd>{{alert.alertContext.properties.host}}</dd></dl>
-		</div>
-		<div class="inline-group">
-			<dl><dt>Event</dt><dd>{{alert.alertContext.properties.alertEvent}}</dd></dl>
-		</div>
-		<div class="inline-group">
-			<dl><dt>Message</dt><dd>{{alert.alertContext.properties.alertMessage}}</dd></dl>
-		</div>
-	</div><!-- /.box-body -->
-
-	<div class="overlay" ng-hide="alertList._promise.$$state.status === 1;">
-		<i class="fa fa-refresh fa-spin"></i>
-	</div>
-</div>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html b/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html
deleted file mode 100644
index d5492ca..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/alertList.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--
-  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">
-			{{dataSource || "All Alerts"}}
-			<div class="btn-group">
-				<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
-					<i class="fa fa-caret-down"></i>
-				</button>
-				<ul id="programList" class="dropdown-menu" role="menu">
-					<li ng-repeat="dataSrc in site.current().dataSrcList">
-						<a href="#/dam/alertList/{{dataSrc.tags.dataSource}}">{{dataSrc.tags.dataSource}}</a>
-					</li>
-					<li class="divider"></li>
-					<li>
-						<a href="#/dam/alertList">All Policy List</a>
-					</li>
-				</ul>
-			</div>
-		</h3>
-	</div>
-	<div class="box-body">
-		<p ng-show="!alertList.ready">
-			<span class="fa fa-refresh fa-spin"> </span>
-			Loading...
-		</p>
-
-		<div sorttable source="alertList" sort="-timestamp">
-			<table class="table table-bordered" ng-non-bindable>
-				<thead>
-					<tr>
-						<th width="170" sortpath="timestamp">Alert Time</th>
-						<th width="170" sortpath="alertContext.properties.timestamp">Message Time</th>
-						<th width="105" sortpath="tags.dataSource">Data Source</th>
-						<!--th width="70" sortpath="severity">Type</th-->
-						<th width="150" sortpath="tags.policyId">Policy Name</th>
-						<th width="60" sortpath="alertContext.properties.user">User</th>
-						<th width="150" sortpath="alertContext.properties.host">Host</th>
-						<th sortpath="alertContext.properties.emailMessage">Description</th>
-						<th width="50"> </th>
-					</tr>
-				</thead>
-				<tbody>
-					<tr ng-class="{info : item.__new}">
-						<td>{{common.format.date(item.timestamp)}}</td>
-						<td>{{common.format.date(item.alertContext.properties.timestamp)}}</td>
-						<td>{{item.tags.dataSource}}</td>
-						<!--td>{{item.severity}}</td-->
-						<td class="text-nowrap">
-							<a class="fa fa-share-square-o" ng-show="item.tags.policyId"
-							href="#/dam/policyDetail/?policy={{item.tags.policyId}}&site={{item.tags.site}}&executor={{item.tags.alertExecutorId}}"> </a>
-							{{item.tags.policyId}}
-						</td>
-						<td>{{item.alertContext.properties.user}}</td>
-						<td>{{item.alertContext.properties.host}}</td>
-						<td>{{item.alertContext.properties.alertMessage}}</td>
-						<td><a href="#/dam/alertDetail/{{item.encodedRowkey}}">Detail</a></td>
-					</tr>
-				</tbody>
-			</table>
-		</div>
-
-	</div>
-	<!--div class="box-footer clearfix">
-	</div-->
-</div>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/login.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/login.html b/eagle-webservice/src/main/webapp/app/partials/dam/login.html
deleted file mode 100644
index 0e2287c..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/login.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-  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="login-box">
-	<div class="login-logo">
-		<a href="#/"> Data Activity Monitoring </a>
-	</div>
-	<!-- /.login-logo -->
-	<div class="login-box-body">
-		<p class="login-box-msg">Sign in to start your session</p>
-		<div class="form-group has-feedback">
-			<input type="text" class="form-control" placeholder="User Name" ng-model="username" ng-keypress="login($event)" autocomplete="off" id="username">
-			<span class="glyphicon glyphicon-user form-control-feedback"></span>
-		</div>
-		<div class="form-group has-feedback">
-			<input type="password" class="form-control" placeholder="Password" ng-model="password" ng-keypress="login($event)">
-			<span class="glyphicon glyphicon-lock form-control-feedback"></span>
-		</div>
-		<div class="row">
-			<div class="col-xs-8">
-				<!--div class="checkbox">
-					<label> <input type="checkbox" /> Remember Me
-					</label>
-				</div-->
-			</div>
-			<!-- /.col -->
-			<div class="col-xs-4">
-				<button class="btn btn-primary btn-block btn-flat" ng-click="login($event, true)" ng-disabled="lock">Sign In</button>
-			</div>
-			<!-- /.col -->
-		</div>
-	</div>
-	<!-- /.login-box-body -->
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html b/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html
deleted file mode 100644
index 1a0196d..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/nvd3.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<style>
-	.nvd3-chart-cntr > h3 {
-		text-align: center;
-	}
-
-	.nvd3-chart-cntr > svg {
-		height: 300px;
-	}
-</style>
-
-<button class="btn btn-primary" ng-click="randomChartData()">Random</button>
-<button class="btn btn-primary" ng-click="chart = 'column'">To Column</button>
-<button class="btn btn-primary" ng-click="chart = 'line'">To Line</button>
-<button class="btn btn-primary" ng-click="chart = 'area'">To Area</button>
-<button class="btn btn-primary" ng-click="chart = 'pie'">To Pie</button>
-<button class="btn btn-warning" ng-click="chartConfig.xType = 'number'">Number</button>
-<button class="btn btn-warning" ng-click="chartConfig.xType = 'time'">Time</button>
-
-<div nvd3="data" data-title="Test" data-chart="{{chart}}" data-watching="true" data-config="chartConfig" class="nvd3-chart-cntr"></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html b/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html
deleted file mode 100644
index 9540ac6..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/policyDetail.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!--
-  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-info">
-	<div class="box-header with-border">
-		<h3 class="box-title">
-			{{policy.tags.policyId}}
-			<small>{{policy.tags.site}}</small>
-		</h3>
-	</div><!-- /.box-header -->
-
-	<div class="box-body">
-		<div class="row">
-			<div class="col-xs-8">
-				<div class="inline-group">
-					<dl><dt>Data Source</dt><dd>{{policy.tags.dataSource}}</dd></dl>
-					<dl><dt>Status</dt><dd>
-						<span ng-show="policy.enabled" class="text-muted"><i class="fa fa-square text-green"></i> Enabled</span>
-						<span ng-show="!policy.enabled" class="text-muted"><i class="fa fa-square text-muted"></i> Disabled</span>
-					</dd></dl>
-				</div>
-				<div class="inline-group">
-					<dl><dt>Description</dt><dd>{{policy.desc}}</dd></dl>
-				</div>
-				<div class="inline-group">
-					<dl><dt>Alert</dt><dd>
-						<a href="mailto:{{mail}}" ng-repeat="mail in policy.__mailList track by $index" style="margin-right: 10px;">{{mail}}</a>
-					</dd></dl>
-				</div>
-			</div>
-			<div class="col-xs-4 text-right" ng-show="auth.isRole('ROLE_ADMIN')">
-				<a class="btn btn-primary" href="#/dam/policyEdit/{{policy.encodedRowkey}}">Edit</a>
-				<button class="btn btn-warning" ng-show="!policy.enabled" ng-click="updatePolicyStatus(policy, true)">Enable</button>
-				<button class="btn btn-warning" ng-show="policy.enabled" ng-click="updatePolicyStatus(policy, false)">Disable</button>
-				<button class="btn btn-danger" ng-click="deletePolicy(policy)">Delete</button>
-			</div>
-		</div>
-	</div><!-- /.box-body -->
-
-	<div class="overlay" ng-hide="policyList._promise.$$state.status === 1;">
-		<i class="fa fa-refresh fa-spin"></i>
-	</div>
-
-	<div class="box-footer clearfix">
-		<a data-toggle="collapse" href="[data-id='query']">
-			View Query
-		</a>
-		<div data-id="query" class="collapse in">
-			<pre>{{policy.__expression}}</pre>
-		</div>
-	</div>
-</div>
-
-<div class="nav-tabs-custom">
-	<ul class="nav nav-tabs">
-		<li class="active">
-			<a href="[data-id='visualization']" data-toggle="tab">Visualization</a>
-		</li>
-		<li>
-			<a href="[data-id='statistics']" data-toggle="tab">Statistics</a>
-		</li>
-		<li>
-			<a href="[data-id='alerts']" data-toggle="tab">Alerts</a>
-		</li>
-	</ul>
-	<div class="tab-content">
-		<div class="tab-pane active" data-id="visualization">
-			<div class="row">
-				<div class="col-xs-6">
-					<div nvd3="policyEvalSeries" data-title="Policy Eval Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
-				</div>
-				<div class="col-xs-6">
-					<div nvd3="policyEvalFailSeries" data-title="Policy Eval Fail Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
-				</div>
-				<div class="col-xs-6">
-					<div nvd3="alertSeries" data-title="Alert Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
-				</div>
-				<div class="col-xs-6">
-					<div nvd3="alertFailSeries" data-title="Alert Fail Count" data-config="chartConfig" class="nvd3-chart-cntr"></div>
-				</div>
-			</div>
-		</div><!-- /.tab-pane -->
-
-		<div class="tab-pane" data-id="statistics">
-			<div class="row">
-				<div class="col-xs-3">
-					<div class="info-box bg-aqua">
-						<span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
-						<div class="info-box-content">
-							<span class="info-box-text">Policy Eval Count</span>
-							<span class="info-box-number">{{common.array.sum(policyEvalSeries, "1")}} <small>(Monthly)</small></span>
-							<span class="info-box-number">{{policyEvalSeries[policyEvalSeries.length - 1][1]}} <small>(Daily)</small></span>
-						</div><!-- /.info-box-content -->
-					</div>
-				</div>
-				<div class="col-xs-3">
-					<div class="info-box bg-red">
-						<span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
-						<div class="info-box-content">
-							<span class="info-box-text">Policy Eval Fail Count</span>
-							<span class="info-box-number">{{common.array.sum(policyEvalFailSeries, "1")}} <small>(Monthly)</small></span>
-							<span class="info-box-number">{{policyEvalFailSeries[policyEvalFailSeries.length - 1][1]}} <small>(Daily)</small></span>
-						</div><!-- /.info-box-content -->
-					</div>
-				</div>
-				<div class="col-xs-3">
-					<div class="info-box bg-aqua">
-						<span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
-						<div class="info-box-content">
-							<span class="info-box-text">Alert Count</span>
-							<span class="info-box-number">{{common.array.sum(alertSeries, "1")}} <small>(Monthly)</small></span>
-							<span class="info-box-number">{{alertSeries[alertSeries.length - 1][1]}} <small>(Daily)</small></span>
-						</div><!-- /.info-box-content -->
-					</div>
-				</div>
-				<div class="col-xs-3">
-					<div class="info-box bg-red">
-						<span class="info-box-icon"><i class="fa fa-bookmark-o"></i></span>
-						<div class="info-box-content">
-							<span class="info-box-text">Alert Fail Count</span>
-							<span class="info-box-number">{{common.array.sum(alertFailSeries, "1")}} <small>(Monthly)</small></span>
-							<span class="info-box-number">{{alertFailSeries[alertFailSeries.length - 1][1]}} <small>(Daily)</small></span>
-						</div><!-- /.info-box-content -->
-					</div>
-				</div>
-			</div>
-		</div><!-- /.tab-pane -->
-
-		<div class="tab-pane" data-id="alerts">
-			<div sorttable source="alertList" sort="-timestamp">
-				<table class="table table-bordered" ng-non-bindable>
-					<thead>
-						<tr>
-							<th width="170" sortpath="timestamp">Alert Time</th>
-							<th width="170" sortpath="alertContext.properties.timestamp">Message Time</th>
-							<th width="60" sortpath="alertContext.properties.user">User</th>
-							<th width="150" sortpath="alertContext.properties.host">Host</th>
-							<th sortpath="alertContext.properties.emailMessage">Description</th>
-							<th width="50"> </th>
-						</tr>
-					</thead>
-					<tbody>
-						<tr ng-class="{info : item.__new}">
-							<td>{{common.format.date(item.timestamp)}}</td>
-							<td>{{common.format.date(item.alertContext.properties.timestamp)}}</td>
-							<td>{{item.alertContext.properties.user}}</td>
-							<td>{{item.alertContext.properties.host}}</td>
-							<td>{{item.alertContext.properties.alertMessage}}</td>
-							<td><a href="#/dam/alertDetail/{{item.encodedRowkey}}">Detail</a></td>
-						</tr>
-					</tbody>
-				</table>
-			</div>
-		</div><!-- /.tab-pane -->
-
-	</div><!-- /.tab-content -->
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html b/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html
deleted file mode 100644
index 038a590..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/policyEdit.html
+++ /dev/null
@@ -1,359 +0,0 @@
-<!--
-  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="progress active" ng-show="!streamReady">
-	<div class="progress-bar progress-bar-primary progress-bar-striped" style="width: 100%">
-	</div>
-</div>
-
-<!-- Step navigation -->
-<div ng-show="streamReady">
-	<div class="row step-cntr">
-		<div class="col-md-3" ng-repeat="step in steps">
-			<div class="step" ng-class="stepSelect($index + 1)">
-				<h1>{{$index + 1}}</h1>
-				<h2>Step {{$index + 1}}</h2>
-				<p title="{{step.title}}">{{step.title}}</p>
-			</div>
-		</div>
-	</div>
-
-	<!-- Step container -->
-	<div class="box box-info">
-		<div class="box-header with-border">
-			<h3 class="box-title">Step {{step}} - {{steps[step - 1].title}}</h3>
-		</div><!-- /.box-header -->
-
-		<div class="box-body">
-			<!-- ---------------------- Step Body Start ---------------------- -->
-
-			<!-- Step 1: Data Source -->
-			<div ng-show="step === 1">
-				<div class="form-group">
-					<label>Select Data Source</label>
-					<select class="form-control" ng-model="policy.tags.dataSource">
-						<option ng-repeat="dataSource in site.current().dataSrcList" ng-hide="dataSource.hide" value="{{dataSource.tags.dataSource}}">{{dataSource.desc || dataSource.tags.dataSource}}</option>
-					</select>
-				</div>
-			</div>
-
-			<!-- Step 2: Stream -->
-			<div ng-show="step === 2">
-				<div class="pull-right" ng-show="policy.__.advanced === undefined">
-					<span class="text-muted">or</span>
-					<a ng-click="policy.__.advanced = true;">Advanced</a>
-				</div>
-
-				<div class="form-group">
-					<label>Select Stream</label>
-					<select class="form-control" ng-model="policy.__.streamName" ng-show="!policy.__.advanced">
-						<option ng-repeat="stream in dataSources[policy.tags.dataSource]">{{stream.tags.streamName}}</option>
-					</select>
-					<select class="form-control" ng-show="policy.__.advanced" disabled="disabled">
-						<option>[Advanced Mode]</option>
-					</select>
-				</div>
-
-				<div class="checkbox" ng-show="policy.__.advanced !== undefined">
-					<label>
-						<input type="checkbox" ng-model="policy.__.advanced">
-						Advanced Mode
-					</label>
-				</div>
-			</div>
-
-			<!-- Step 3: Define Alert Policy -->
-			<div ng-show="step === 3 && !policy.__.advanced">
-				<!-- Criteria -->
-				<div>
-					<label>Match Criteria</label>
-					<a ng-click="collapse('.panel-group')">expand / collapse all</a>
-
-					<div class="panel-group panel-group-sm" role="tablist">
-						<div class="panel panel-default"
-							ng-repeat="meta in _stream.metas"
-							ng-init="op = '=='; val = null; type = (meta.attrType || '').toLowerCase();">
-							<div class="panel-heading" role="tab">
-								<h4 class="panel-title">
-									<span class="bg-navy disabled color-palette pull-right">
-										{{parseConditionDesc(meta.tags.attrName)}}
-									</span>
-
-									<a role="button" data-toggle="collapse" href="[data-name='{{meta.tags.attrName}}']" class="collapsed">
-										<span class="fa fa-square" ng-class="hasCondition(meta.tags.attrName, type) ? 'text-green' : 'text-muted'"> </span>
-										{{meta.attrDisplayName || meta.tags.attrName}}
-										<span class="fa fa-question-circle" ng-show="meta.attrDescription"
-										uib-tooltip="{{meta.attrDescription}}" tooltip-placement="right" tooltip-animation="false"> </span>
-									</a>
-								</h4>
-							</div>
-							<div data-name="{{meta.tags.attrName}}" data-type="{{meta.attrType}}" role="tabpanel" class="collapse">
-								<div class="panel-body">
-									<ul ng-show="type !== 'bool'">
-										<li ng-repeat="cond in policy.__.conditions[meta.tags.attrName]">
-											[<a ng-click="policy.__.conditions[meta.tags.attrName].splice($index, 1)">X</a>]
-											{{cond.toString()}}
-										</li>
-									</ul>
-
-									<!-- String -->
-									<div ng-if="type == 'string'">
-										<div class="input-group" style="max-width: 450px;">
-											<div class="input-group-btn">
-												<select class="form-control" ng-model="op">
-													<option ng-repeat="mark in ['==','!=','contains','regex']">{{mark}}</option>
-												</select>
-											</div>
-
-											<!-- With resolver -->
-											<input type="text" class="form-control" autocomplete="off" ng-model="val" ng-show="meta.attrValueResolver"
-												ng-keypress="conditionPress($event, meta.tags.attrName, op, val, type)"
-												uib-typeahead="item for item in resolverTypeahead($viewValue, meta.attrValueResolver)">
-											<!-- Without resolver -->
-											<input type="text" class="form-control" autocomplete="off" ng-model="val" ng-show="!meta.attrValueResolver"
-												ng-keypress="conditionPress($event, meta.tags.attrName, op, val, type)">
-
-											<span class="input-group-btn">
-												<button class="btn btn-info btn-flat" type="button" ng-click="addCondition(meta.tags.attrName, op, val, type);val=null;">Add</button>
-											</span>
-										</div>
-									</div>
-
-									<!-- Number -->
-									<div ng-if="type == 'long' || type == 'integer' || type == 'number' || type == 'double' || type == 'float'">
-										<div class="input-group" style="max-width: 450px;">
-											<div class="input-group-btn">
-												<select class="form-control" ng-model="op">
-													<option ng-repeat="mark in ['==','!=','>','>=','<','<=']">{{mark}}</option>
-												</select>
-											</div>
-
-											<input type="number" class="form-control" autocomplete="off" placeholder="Number Only..." ng-model="val" ng-keypress="conditionPress($event, meta.tags.attrName, op, val, type)">
-											<span class="input-group-btn">
-												<button class="btn btn-info btn-flat" type="button" ng-click="addCondition(meta.tags.attrName, op, val, type) ? val=null : void(0);">Add</button>
-											</span>
-										</div>
-									</div>
-
-									<!-- Boolean -->
-									<div ng-if="type == 'bool'" ng-init="policy.__.conditions[meta.tags.attrName] = policy.__.conditions[meta.tags.attrName] || [_CondUnit(meta.tags.attrName, '==', 'none', 'bool')]">
-										<select class="form-control" ng-model="policy.__.conditions[meta.tags.attrName][0].val" style="max-width: 100px;">
-											<option ng-repeat="bool in ['none','true','false']">{{bool}}</option>
-										</select>
-									</div>
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-
-				<!-- Window -->
-				<div class="checkbox">
-					<label>
-						<input type="checkbox" ng-checked="policy.__.windowConfig" ng-click="policy.__.windowConfig = !policy.__.windowConfig"> Slide Window
-					</label>
-				</div>
-				<div ng-show="policy.__.windowConfig">
-					<div class="row">
-						<div class="col-md-4">
-							<div class="form-group">
-								<label for="window">Window</label>
-								<select class="form-control" ng-model="policy.__.window"
-								uib-tooltip="{{getWindow().description}}" tooltip-animation="false">
-									<option ng-repeat="item in config.window" value="{{item.type}}">{{item.title}}</option>
-								</select>
-							</div>
-						</div>
-
-						<!-- fields -->
-						<div class="col-md-4" ng-repeat="field in getWindow().fields" ng-init="field.val = field.val || (field.defaultValue || '');" ng-hide="field.hide">
-							<div class="form-group" ng-class="{'has-warning' : !field.val || !field.val.match(field.regex)}">
-								<label for="window">Window - {{field.title}}</label>
-								<input type="text" class="form-control" autocomplete="off" placeholder="{{field.description}}" ng-model="field.val" title="{{field.description}}">
-							</div>
-						</div>
-					</div>
-
-					<!-- Aggregation -->
-					<div class="row">
-						<div class="col-md-4">
-							<div class="form-group" ng-class="{'text-yellow' : (policy.__.groupAgg && !policy.__.groupAggPath)}">
-								<label for="window">Aggregation</label>
-								<div class="input-group">
-									<div class="input-group-btn">
-										<select class="form-control" ng-model="policy.__.groupAgg" ng-change="updateGroupAgg()">
-											<option ng-repeat="op in ['max','min','avg','count', 'sum']">{{op}}</option>
-										</select>
-									</div>
-									<select class="form-control" ng-model="policy.__.groupAggPath" ng-class="{'has-warning' : !policy.__.groupAggPath}" id="groupAggPath"
-											ng-show="policy.__.groupAgg" ng-disabled="policy.__.groupAgg === 'count'">
-										<option ng-repeat="meta in groupAggPathList()">{{meta.tags.attrName}}</option>
-									</select>
-								</div>
-							</div>
-						</div>
-
-						<div class="col-md-4">
-							<div class="form-group" ng-class="{'text-yellow' : (!policy.__.groupCondOp || !policy.__.groupCondVal)}">
-								<label for="window">Condition</label>
-								<div class="input-group">
-									<div class="input-group-btn">
-										<select class="form-control" ng-model="policy.__.groupCondOp" ng-class="{'has-warning' : !policy.__.groupCondOp}">
-											<option ng-repeat="op in ['>','<','>=','<=','==']">{{op}}</option>
-										</select>
-									</div>
-									<input type="text" class="form-control" ng-model="policy.__.groupCondVal" ng-class="{'has-warning' : !policy.__.groupCondVal}" />
-								</div>
-							</div>
-						</div>
-
-						<div class="col-md-4">
-							<div class="form-group">
-								<label for="window">Alias (Optional)</label>
-								<input type="text" class="form-control" ng-model="policy.__.groupAggAlias" placeholder="Default: aggValue" />
-							</div>
-						</div>
-					</div>
-
-					<!-- Group -->
-					<div class="row">
-						<div class="col-md-4">
-							<div class="form-group">
-								<label for="window">Group By</label>
-								<select class="form-control" ng-model="policy.__.group">
-									<option value="">None</option>
-									<option ng-repeat="meta in _stream.metas">{{meta.tags.attrName}}</option>
-								</select>
-							</div>
-						</div>
-					</div>
-				</div>
-			</div>
-
-			<!-- Step 3: Define Alert Policy -->
-			<div ng-show="step === 3 && policy.__.advanced">
-				<div class="form-group">
-					<label>Query Expression</label>
-					<textarea class="form-control" ng-model="policy.__._expression"
-					placeholder="Query expression. e.g. from hdfsAuditLogEventStream[(cmd=='open') and (host=='localhost' or host=='127.0.0.1')]#window.time(2 sec) select * insert into outputStream;" rows="5"></textarea>
-				</div>
-			</div>
-
-			<!-- Step 4: Email Notification -->
-			<div ng-show="step === 4">
-				<div class="row">
-					<div class="col-xs-4">
-						<div class="form-group" ng-class="{'has-warning' : !policy.tags.policyId}">
-							<label>Policy Name</label>
-							<input type="text" class="form-control" placeholder="" ng-model="policy.tags.policyId" ng-disabled="!create">
-						</div>
-					</div>
-					<div class="col-xs-3">
-						<div class="form-group">
-							<label>
-								Alert De-Dup Interval(min)
-								<span class="fa fa-question-circle" uib-tooltip="Same type alert will be De-dup in configured interval"> </span>
-							</label>
-							<input type="number" class="form-control" ng-model="policy.__.dedupe.alertDedupIntervalMin" placeholder="[Minute] Number only. Suggestion: 720">
-						</div>
-					</div>
-					<div class="col-xs-3">
-						<div class="form-group">
-							<label>
-								Email De-Dup Interval(min)
-								<span class="fa fa-question-circle" uib-tooltip="The minimun time interval of email"> </span>
-							</label>
-							<input type="number" class="form-control" ng-model="policy.__.dedupe.emailDedupIntervalMin" placeholder="[Minute] Number only. Suggestion: 1440">
-						</div>
-					</div>
-					<div class="col-xs-2">
-						<div class="form-group">
-							<label>
-								Enabled
-							</label>
-							<p>
-								<input type="checkbox" checked="checked" ng-model="policy.enabled">
-							</p>
-						</div>
-					</div>
-				</div>
-
-				<div>
-					<a data-toggle="collapse" href="[data-id='advancedDeDup']">Advanced De-Dup</a>
-					<div data-id='advancedDeDup' class="collapse">
-						<label>
-							De-Dup Key
-							<span class="fa fa-question-circle" uib-tooltip="Type of grouping alerts. If you don't know how to config, leave it default."> </span>
-						</label>
-						<div class="form-group">
-							<div class="checkbox" ng-repeat="meta in _stream.metas" ng-init="create ? policy.__._dedupTags[meta.tags.attrName] = !!meta.usedAsTag : void(0);">
-								<label>
-									<input type="checkbox" ng-model="policy.__._dedupTags[meta.tags.attrName]">
-									{{meta.tags.attrName}}
-								</label>
-							</div>
-						</div>
-					</div>
-				</div>
-
-				<hr/>
-
-				<div class="form-group">
-					<label>Sender</label>
-					<input type="text" class="form-control" value="noreply-hadoop-eagle@company1.com" placeholder="Enter Sender. e.g. sender@eaxmple.com" ng-model="policy.__.notification[0].sender">
-				</div>
-				<div class="form-group">
-					<label>Recipients</label>
-					<input type="text" class="form-control" placeholder="Enter Recipients. Split with ','. e.g. usera@example.com, userb@example.com" ng-model="policy.__.notification[0].recipients">
-				</div>
-				<div class="form-group">
-					<label>Subject</label>
-					<input type="text" class="form-control" placeholder="Enter Subject" ng-model="policy.__.notification[0].subject">
-				</div>
-				<div class="form-group">
-					<label>Description</label>
-					<textarea class="form-control" placeholder="Policy description" ng-model="policy.desc"></textarea>
-				</div>
-
-				<a data-toggle="collapse" href="[data-id='policyQuery']">
-					View Query
-				</a>
-				<div class="collapse in" data-id="policyQuery">
-					<pre>{{toQuery()}}</pre>
-				</div>
-			</div>
-
-			<!-- ----------------------- Step Body End ----------------------- -->
-		</div><!-- /.box-body -->
-
-		<div class="overlay" ng-hide="stepReady(step)">
-			<span class="fa fa-refresh fa-spin"> </span>
-		</div>
-
-		<div class="box-footer text-right">
-			<button class="btn btn-info" ng-show="step > 1" ng-click="changeStep(step, step - 1, false)" ng-disabled="lock">
-				Prev <span class="fa fa-arrow-circle-o-left"> </span>
-			</button>
-			<button class="btn btn-info" ng-show="step < steps.length" ng-click="changeStep(step, step + 1)" ng-disabled="checkNextable(step) || lock">
-				Next <span class="fa fa-arrow-circle-o-right"> </span>
-			</button>
-			<button class="btn btn-info" ng-show="step === steps.length" ng-click="finishPolicy()" ng-disabled="checkNextable(step) || lock">
-				Done <span class="fa fa-check-circle-o"> </span>
-			</button>
-		</div>
-	</div>
-</div>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html b/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html
deleted file mode 100644
index 376a513..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/policyList.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!--
-  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">
-			{{dataSource.desc || dataSource.tags.dataSource || "All Policies"}}
-			<div class="btn-group">
-				<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
-					<i class="fa fa-caret-down"></i>
-				</button>
-				<ul id="programList" class="dropdown-menu" role="menu">
-					<li ng-repeat="dataSrc in site.current().dataSrcList" ng-hide="dataSrc.hide">
-						<a href="#/dam/policyList/{{dataSrc.tags.dataSource}}">{{dataSrc.desc || dataSrc.tags.dataSource}}</a>
-					</li>
-					<li class="divider"></li>
-					<li>
-						<a href="#/dam/policyList">All Policy List</a>
-					</li>
-				</ul>
-			</div>
-		</h3>
-	</div>
-	<div class="box-body">
-		<div class="row">
-			<div class="col-xs-3">
-				<div class="search-box">
-					<input type="search" class="form-control input-sm" placeholder="Search" ng-model="search" />
-					<span class="fa fa-search"> </span>
-				</div>
-			</div>
-			<div class="col-xs-6">
-				<div class="inline-group form-inline text-muted">
-					<dl><dt><i class="fa fa-square text-green"> </i></dt><dd>Enabled</dd></dl>
-					<dl><dt><i class="fa fa-square text-muted"> </i></dt><dd>Disabled</dd></dl>
-				</div>
-			</div>
-			<div class="col-xs-3 text-right">
-				<a class="btn btn-primary" href="#/dam/policyCreate/{{!dataSource ? '' : '?dataSrc=' + dataSource.tags.dataSource}}" ng-show="auth.isRole('ROLE_ADMIN')">
-					New Policy
-					<i class="fa fa-plus-circle"> </i>
-				</a>
-			</div>
-		</div>
-
-		<p ng-show="policyList._promise.$$state.status !== 1">
-			<span class="fa fa-refresh fa-spin"> </span>
-			Loading...
-		</p>
-
-		<div sorttable source="policyList" ng-show="policyList._promise.$$state.status === 1" search="false" searchfunc="searchFunc">
-			<table class="table table-bordered" ng-non-bindable>
-				<thead>
-					<tr>
-						<th width="30" sortpath="enabled"> </th>
-						<th width="200" sortpath="tags.policyId">Policy Name</th>
-						<th sortpath="desc">Description</th>
-						<th width="150" sortpath="owner">Owner</th>
-						<th width="170" sortpath="lastModifiedDate">Last Modified</th>
-						<th width="95" ng-show="_parent.auth.isRole('ROLE_ADMIN')">Action</th>
-					</tr>
-				</thead>
-				<tbody>
-					<tr>
-						<td><span class='fa fa-square' ng-class="item.enabled ? 'text-green' : 'text-muted'"> </span></td>
-						<td><a href="#/dam/policyDetail/{{item.encodedRowkey}}">{{item.tags.policyId}}</a></td>
-						<td>{{item.desc}}</td>
-						<td>{{item.owner}}</td>
-						<td>{{common.format.date(item.lastModifiedDate) || "-"}}</td>
-						<td ng-show="_parent.auth.isRole('ROLE_ADMIN')">
-							<a class="fa fa-pencil btn btn-default btn-xs" uib-tooltip="Edit" tooltip-animation="false" href="#/dam/policyEdit/{{item.encodedRowkey}}"> </a>
-							<button class="fa fa-play sm btn btn-default btn-xs" uib-tooltip="Enable" tooltip-animation="false" ng-show="!item.enabled" ng-click="_parent.updatePolicyStatus(item, true)"> </button>
-							<button class="fa fa-pause sm btn btn-default btn-xs" uib-tooltip="Disable" tooltip-animation="false" ng-show="item.enabled" ng-click="_parent.updatePolicyStatus(item, false)"> </button>
-							<button class="rm fa fa-trash-o btn btn-danger btn-xs" uib-tooltip="Delete" tooltip-animation="false" ng-click="_parent.deletePolicy(item)"> </button>
-						</td>
-					</tr>
-				</tbody>
-			</table>
-		</div>
-	</div>
-	<!--div class="box-footer clearfix">
-	</div-->
-</div>

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html
deleted file mode 100644
index b00bbaf..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!--
-  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="nav-tabs-custom">
-	<!-- Tabs within a box -->
-	<ul class="nav nav-tabs pull-right ui-sortable-handle">
-		<li ng-repeat="entity in config.list" ng-class="{active: dataSrc.name === entity.name}">
-			<a ng-click="site.url('/dam/sensitivity/' + entity.name)">{{entity.name}}</a>
-		</li>
-		<li class="pull-left header"><i class="fa fa-folder-open"></i> Sensitivity Broswer</li>
-	</ul>
-	<div class="tab-content">
-		<!-- Morris chart - Sales -->
-		<div class="tab-pane active">
-			<ng-include src="'partials/dam/sensitivity/' + dataSrc.type + '.html?_=' + ajaxId"></ng-include>
-		</div>
-	</div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html
deleted file mode 100644
index 1827eac..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/folder.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!--
-  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="sensitivityViewFolderCtrl">
-	<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="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">
-						<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="sensitiveType" />
-					</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/d37643b0/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html
----------------------------------------------------------------------
diff --git a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html b/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html
deleted file mode 100644
index baa824c..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivity/table.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<!--
-  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="sensitivityViewTableCtrl">
-	<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" uib-tooltip="Contain child sensitivity defination" tooltip-placement="right" tooltip-append-to-body="true"> </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" tooltip-placement="right" tooltip-append-to-body="true"> </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="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">
-						<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[dataSrc.keys[0]]" />
-					</div>
-					<div class="form-group">
-						<label>* Sensitivity Type</label>
-						<input type="text" class="form-control" ng-model="_markItem.sensitivityType" id="sensitiveType" />
-					</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/d37643b0/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
deleted file mode 100644
index 3dfe103..0000000
--- a/eagle-webservice/src/main/webapp/app/partials/dam/sensitivitySummary.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!--
-  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 config.list">
-		<div class="info-box bg-aqua box-clickable">
-			<span class="info-box-icon" ng-click="site.url('/dam/sensitivity/' + 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/' + 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



Mime
View raw message