You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by pe...@apache.org on 2016/08/22 04:48:05 UTC

[12/16] falcon git commit: FALCON-2118 Proposal for new UI changes

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html
new file mode 100644
index 0000000..e5ca971
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormGeneralStepTpl.html
@@ -0,0 +1,355 @@
+<!--
+/**
+* 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.
+*/
+-->
+<form name="datasourceForm" novalidate id="datasourceFormGeneralStep">
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-12">
+			<label class="light" tooltip="datasource.name">Connection Name<mandatory-field></mandatory-field></label>
+			<input type="text" class="form-control" ng-disabled="editingMode" ng-keydown="validations.acceptNoSpaces($event)"
+			check-name="{type:'datasource', check:!editingMode}" ng-class="{fakeInvalid:!validations.nameAvailable}"
+			ng-model="datasource.name" ng-required="true" ng-pattern="validations.patterns.name"/>
+		</div>
+		<div class="col-xs-12">
+			<label class="light" tooltip="cluster.colo">Data Center or Colo Name<mandatory-field></mandatory-field></label>
+			<input type="text" class="form-control"
+						ng-pattern="validations.patterns.name"
+						ng-required="true" ng-disabled="xmlPreview.edit"
+						ng-model="datasource.colo" validation-message="{{validations.messages.colo}}"/>
+		</div>
+	</div>
+	<div class="col-xs-24">
+		<label class="light">Description</label>
+		<input type="text" class="form-control"
+		ng-disabled="xmlPreview.edit"
+		ng-pattern="validations.patterns.freeText"
+		ng-model="datasource.description" />
+	</div>
+	<div class="col-xs-24">
+		<label class="light">Tags</label>
+	</div>
+
+	<div class="col-xs-12">
+		<div ng-repeat="tag in datasource.tags">
+			<div class="row dynamic-table-spacer">
+				<div class="col-xs-8">
+					<input type="text" class="form-control" ng-model="tag.key"
+						validation-optional-message="{{validations.messages.key}}"
+							ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
+				</div>
+				<div class="col-xs-8">
+					<input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
+							ng-model="tag.value"
+							ng-pattern="validations.patterns.alpha" ng-required="tag.key" placeholder="value"/>
+				</div>
+				<div class="col-xs-8">
+					<button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-disabled="xmlPreview.edit" ng-if="!$first || !$last">
+						<span class="entypo minus"></span> delete
+					</button>
+					<button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-disabled="xmlPreview.edit" ng-if="$last">
+						<span class="entypo plus"></span> add tag
+					</button>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-12">
+			<label class="light">Database Manager<mandatory-field></mandatory-field></label>
+			<select class="form-control padding0 "ng-required="true" validation-message="{{validations.messages.dbManager}}"
+				ng-model="datasource.type" ng-change="getDatabaseDefaultDetails()">
+				<option value="" disabled selected style='display:none;'>- Select Database Manager -</option>
+				<option value="mysql">MySQL</option>
+				<option value="oracle">Oracle</option>
+				<option value="hsql">HSQL</option>
+				<option value="db2">DB2</option>
+				<option value="postgres">Postgres</option>
+				<option value="netezza">Netezza</option>
+				<option value="teradata">Teradata</option>
+				<option value="generic">Generic</option>
+				<!-- <option ng-repeat="driverItem in driverList">{{driverItem.name}}</option> -->
+			</select>
+		</div>
+		<div class="col-xs-12">
+			<label class="light">Connection String<mandatory-field></mandatory-field></label>
+			<input type="text" title="You need to update the connection string to point to your db"
+			 ng-required="true"
+			 validation-message="{{validations.messages.connectionString}}"
+			 class="form-control endpointDefault" ng-class="{endpointChanged:datasourceForm.endpoint.$dirty}"
+			 ng-model="datasource.interfaces.interfaces[0].endpoint"/>
+			<!-- <span>jdbc:sqlserver//localhost:80</span> -->
+		</div>
+	</div>
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-12">
+			<label class="light" tooltip="datasource.driver.jar">Driver Jar<mandatory-field></mandatory-field></label>
+			<div ng-repeat="jar in datasource.driver.jar track by $index" class="col-xs-24 plr0px">
+				<div class="col-xs-16 plr0px">
+					<input type="text" class="form-control" ng-model="jar.value"
+					validation-message="{{validations.messages.driver.jar}}"
+					ng-pattern="validations.patterns.driver"
+					ng-required="true"
+					/>
+				</div>
+				<div class="col-xs-4" ng-if="!$first || !$last">
+					<a href="" class="driver-jar-link" ng-click="removeDriverJar($index)" ng-disabled="xmlPreview.edit">- Delete</a>
+				</div>
+				<div class="col-xs-4">
+					<a href="" class="driver-jar-link" ng-click="addDriverJar()" ng-disabled="xmlPreview.edit" ng-if="$last">+ Add</a>
+				</div>
+			</div>
+		</div>
+		<div class="col-xs-12">
+			<label class="light" tooltip="datasource.driver">Driver Class<mandatory-field></mandatory-field></label>
+			<input type="text" name="driverClass" class="form-control" ng-model="datasource.driver.clazz"
+				validation-message="{{validations.messages.driver.clazz}}"
+				ng-required="true"
+				ng-pattern="validations.patterns.driver"
+			/>
+		</div>
+	</div>
+	<div class="col-xs-12 plr0px">
+		<div class="col-xs-24">
+			<label class="light">Type<mandatory-field></mandatory-field></label>
+		</div>
+		<div class="col-xs-24">
+			<input type="radio" ng-model="datasource.interfaces.interfaces[0].type" value="readonly" class="ml0" />
+			<label class="light mt5" tooltip="datasource.readMode">Read only</label>
+			<input type="radio" ng-model="datasource.interfaces.interfaces[0].type" value="write"/>
+			<label class="light mt5" tooltip="datasource.writeMode">Write</label>
+		</div>
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-24">
+				<label class="light" tooltip="datasource.interfaces.credentialType">Credential Type<mandatory-field></mandatory-field></label>
+			</div>
+			<div class="col-xs-24">
+				<input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-text" class="ml0" />
+				<label class="light mt5" tooltip="datasource.interfaces.credentialType">Username / Password</label>
+				<input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-file"/>
+				<label class="light mt5" tooltip="datasource.interfaces.credentialType">Password File</label>
+				<input type="radio" ng-model="datasource.interfaces.interfaces[0].credential.type" ng-required="!datasource.interfaces.credential.type" value="password-alias"/>
+				<label class="light mt5" tooltip="datasource.interfaces.credentialType">Password Alias</label>
+				<label class="col-xs-24 custom-danger validationMessageGral" ng-if="!datasource.interfaces.interfaces[0].credential.type">
+          {{validations.messages.credential.empty}}
+        </label>
+			</div>
+
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type">
+				<label class="light" tooltip="datasource.userName">Username<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.userName"
+				ng-required="true"
+				validation-optional-message="{{validations.messages.userName}}"
+				ng-pattern="validations.patterns.userName"
+				/>
+			</div>
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-text'">
+				<label class="light" tooltip="datasource.password">Password<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordText"
+				ng-required="true"
+				validation-optional-message="{{validations.messages.dbPassword}}"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-file'">
+				<label class="light" tooltip="datasource.credential.passwordFile">Password File<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordFile"
+				ng-required="true"
+				validation-optional-message="{{validations.messages.passwordFile}}"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-alias'">
+				<label class="light" tooltip="datasource.password">Password Alias<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.passwordAlias"
+				validation-optional-message="{{validations.messages.passwordAlias}}"
+				ng-required="true"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+
+			<div class="col-xs-10" ng-if="datasource.interfaces.interfaces[0].credential.type == 'password-alias'">
+				<label class="light" tooltip="datasource.password">Provider Path<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" ng-model="datasource.interfaces.interfaces[0].credential.providerPath"
+				validation-optional-message="{{validations.messages.providerPath}}"
+				ng-required="true"
+				ng-pattern="validations.patterns.password"
+				/>
+			</div>
+		</div>
+	</div>
+	<div class="col-xs-24 plr0px">
+		<label class="col-xs-24" tooltip="datasource.properties">Sqoop Properties</label>
+		<div class="col-xs-12">
+			<input type="checkbox" class="ml0"
+			ng-model="((datasource.properties | filter:{name:'directMode'})[0]).value"
+			ng-disabled="xmlPreview.edit" />
+			<label class="light" tooltip="datasource.directMode">Direct</label>
+			<input type="checkbox"
+			ng-model="((datasource.properties | filter:{name:'verboseMode'})[0]).value"
+			ng-disabled="xmlPreview.edit" />
+			<label class="light" tooltip="datasource.verboseMode">Verbose</label>
+		</div>
+	</div>
+	<div class="col-xs-24 plr0px">
+		<div class="col-xs-24">
+			<a href="" class="datasource-link" ng-click="addProperty()" ng-disabled="xmlPreview.edit">+ Add Property</a>
+		</div>
+		<div class="row m0" ng-if="datasource.customProperties.length > 0">
+			<label class="col-xs-8">Property Name</label><label class="col-xs-16">Value</label>
+		</div>
+		<div ng-repeat="property in datasource.customProperties" class="row m0"  ng-if="datasource.customProperties.length > 0">
+			<div class="col-xs-8 dynamic-table-spacer">
+				<input type="text" class="form-control" ng-model="property.name"
+				ng-pattern="validations.patterns.propertyName"
+				validation-optional-message="{{validations.messages.name}}"
+				ng-disabled="xmlPreview.edit"
+				ng-required="property.value" placeholder="name" />
+			</div>
+			<div class="col-xs-8 dynamic-table-spacer">
+				<input type="text" class="form-control" ng-model="property.value"
+				validation-optional-message="{{validations.messages.value}}"
+				ng-disabled="xmlPreview.edit"
+				ng-required="property.name" placeholder="value" />
+			</div>
+			<div class="dynamic-table-spacer">
+				<button type="button" class="btn btn-default btn-xs" ng-click="removeProperty($index)"
+				ng-disabled="xmlPreview.edit">
+				<span class="entypo minus"></span> delete
+			</button>
+		</div>
+	</div>
+</div>
+</div>
+<div class="col-xs-24 plr0px">
+	<div class="col-xs-12">
+		<label class="light" tooltip="datasource.parameterFile">Sqoop Parameter File</label>
+		<div class="form-inline">
+			<input type="text" class="form-control" ng-disabled="xmlPreview.edit"
+			ng-model="((datasource.properties | filter:{name:'parameterFile'})[0]).value"
+			validation-optional-message="{{validations.messages.parameterFile}}"/>
+			<!-- <button type="button" class="btn btn-sharp btn-browse" ng-disabled="xmlPreview.edit" ng-click="">
+			<i>Browse</i>
+		</button> -->
+		<!-- <a href="" class="datasource-link" ng-click="addParameter()" ng-disabled="xmlPreview.edit">+ Add Parameters</a> -->
+		<!-- <div class="pull-right">
+		<label class="light" tooltip="datasource.parameters">Parameters</label>
+		<a href="" class="datasource-link">+ Add Parameters</a>
+	</div>
+</div> -->
+<!-- <div class="form-inline pull-right">
+<label class="light" tooltip="datasource.parameterFile">Parameter File</label>
+<input type="text" class="form-control" ng-disabled="xmlPreview.edit"
+ng-model="datasource.parameterFile"
+validation-optional-message="{{validations.messages.parameterFile}}"/>
+<button type="button" class="btn btn-sharp btn-browse" ng-disabled="xmlPreview.edit" ng-click="">
+<i>Browse</i>
+</button>
+</div> -->
+</div>
+</div>
+</div>
+
+<div class="col-xs-12 plr0px">
+	<div class="row m0" ng-if="datasource.parameters.length > 0">
+		<label class="col-xs-8">Parameter Name</label><label class="col-xs-16">Value</label>
+	</div>
+	<div ng-repeat="parameter in datasource.parameters" class="row m0" ng-if="datasource.parameters.length > 0">
+		<div class="col-xs-8 dynamic-table-spacer">
+			<input type="text" class="form-control" ng-model="parameter.name"
+			ng-pattern="validations.patterns.propertyName"
+			validation-optional-message="{{validations.messages.name}}"
+			ng-disabled="xmlPreview.edit"
+			ng-required="parameter.value" placeholder="name" />
+		</div>
+		<div class="col-xs-8 dynamic-table-spacer">
+			<input type="text" class="form-control" ng-model="parameter.value"
+			validation-optional-message="{{validations.messages.value}}"
+			ng-disabled="xmlPreview.edit"
+			ng-required="parameter.name" placeholder="value" />
+		</div>
+		<div class="dynamic-table-spacer">
+			<button type="button" class="btn btn-default btn-xs" ng-click="removeParameter($index)"
+			ng-disabled="xmlPreview.edit">
+			<span class="entypo minus"></span> delete
+		</button>
+	</div>
+</div>
+</div>
+<!-- <div class="pull-right">
+<label class="light" tooltip="datasource.properties">Properties</label>
+<a href="" class="datasource-link">+ Add Properties</a>
+</div> -->
+
+	<div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions" id="snapshotAdvancedOption">
+		<label class="mt15 pointer blink-success">ADVANCED OPTIONS</label>
+		<i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
+		<i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
+	</div>
+
+	<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
+		<div class="col-xs-24"><label>Access Control List</label></div>
+		<div class="col-xs-24 plr0px">
+			<div class="col-xs-8">
+				<label class="light">Owner<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" validation-message="{{validations.messages.acl.owner}}"
+							 ng-required="true"
+							 ng-pattern="validations.patterns.unixId"
+							 ng-model="datasource.ACL.owner"/>
+			</div>
+			<div class="col-xs-8">
+				<label class="light">Group<mandatory-field></mandatory-field></label>
+				<input type="text" class="form-control" validation-message="{{validations.messages.acl.group}}"
+							 ng-required="true"
+							 ng-pattern="validations.patterns.unixId"
+							 ng-model="datasource.ACL.group"/>
+			</div>
+			<div class="col-xs-24">
+				<div class="col-xs-8 plr0px">
+					<label class="light">Permissions<mandatory-field></mandatory-field></label>
+					<acl-permissions acl-model="datasource.ACL.permission"></acl-permissions>
+				</div>
+			</div>
+		</div>
+	</div>
+
+	<div class="col-xs-24">
+		<div class="pull-right">
+			<button id="datasource.step2" class="btn btn-datasource"
+					 ng-disabled="buttonSpinners.validateShow"
+					 ng-click="validate()">
+				TEST <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.validateShow" />
+			</button>
+		</div>
+	</div>
+
+	<div class="col-xs-24 pb15px mt35">
+		<div class="pull-right">
+			<a class="btn cnclBtn" ui-sref="main">
+				CANCEL
+			</a>
+			<button id="datasource.step1" class="btn nextBtn"
+				ng-disabled="buttonSpinners.show"
+				ng-click="goNext(datasourceForm.$invalid)"
+				scroll-to-error>
+				NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+			</button>
+		</div>
+	</div>
+
+</form>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html b/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html
new file mode 100644
index 0000000..29923f9
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormSummaryStepTpl.html
@@ -0,0 +1,113 @@
+<!--
+/**
+ * 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 datasourceSummaryRow" id="datasourceSummaryStep">
+  <h4 class="col-sm-24">
+    General
+  </h4>
+  <div class="col-sm-24">
+    <label>Connection Name</label>: <span>{{datasource.name}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Data Center or Colo Name</label>: <span>{{datasource.colo}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Description</label>: <span>{{datasource.description}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Type</label>: <span>{{datasource.type}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Interfaces
+  </h4>
+  <div class="col-sm-24 plr0px" ng-repeat="interface in datasource.interfaces.interfaces">
+    <div class="col-sm-24">
+      <label>Interface Type</label>: <span>{{interface.type}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Interface Endpoint</label>: <span>{{interface.endpoint}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Interface Credentials</label>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Credential Type</label>: <span>{{interface.credential.type}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>User Name</label>: <span>{{interface.credential.userName}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>Password Text</label>: <span>{{interface.credential.passwordText}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-file'">
+      <label>Password File</label>: <span>{{interface.credential.passwordFile}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-alias'">
+      <label>Password Alias</label>: <span>{{interface.credential.passwordAlias}}</span>
+    </div>
+  </div>
+
+  <h4 class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    Default Credentials
+  </h4>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    <label>Credential Type</label>: <span>{{datasource.interfaces.credential.type}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>User Name</label>: <span>{{datasource.interfaces.credential.userName}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>Password Text</label>: <span>{{datasource.interfaces.credential.passwordText}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-file'">
+    <label>Password File</label>: <span>{{datasource.interfaces.credential.passwordFile}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-alias'">
+    <label>Password Alias</label>: <span>{{datasource.interfaces.credential.passwordAlias}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Properties
+  </h4>
+  <div class="col-sm-24" ng-repeat="property in datasource.customProperties | filter: {name: '!!'}">
+    <label>{{property.name}}</label>: <span>{{property.value}}</span>
+  </div>
+  <div ng-repeat="property in datasource.properties">
+    <div class="col-sm-24" ng-if="property.value && property.value !== ''">
+      <label>{{property.name}}</label>: <span>{{property.value}}</span>
+    </div>
+  </div>
+</div>
+
+<div class="col-xs-24 mt35 pb15px pl0px">
+  <button id="datasource.backToStep1" class="btn prevBtn" type="button"
+       ng-click="goBack()"
+       ng-disabled="buttonSpinners.backShow">
+    PREVIOUS <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.backShow" />
+  </button>
+  <div class="pull-right">
+    <a class="btn cnclBtn" ui-sref="main">
+      CANCEL
+    </a>
+    <button id="datasource.step2" class="btn nextBtn" ng-click="saveEntity()" focus-if>
+      SAVE <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
+    </button>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceFormTpl.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/datasource/datasourceFormTpl.html b/falcon-ui/app/html/datasource/datasourceFormTpl.html
new file mode 100644
index 0000000..7a0b7ec
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceFormTpl.html
@@ -0,0 +1,96 @@
+<!--
+/**
+ * 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="datasourceForm">
+  <div class="col-xs-24">
+    <div class="preview pullOver">
+      <button  type="button" class="btn btn-default btn-md pull-right nextBtn" ng-click="toggleclick()" >Preview XML</button>
+    </div>
+    <br/>
+    <div>
+      <div class=" formBoxContainer detailsBox">
+        <div class="datasourceProgressBox" ng-class="{
+          general:isActive('forms.datasource.general'),
+          summary:isActive('forms.datasource.summary')
+          }">
+          <div class="progressBar col-xs-24">
+              <div class="text-center fir" ng-class="{
+                active:isActive('forms.datasource.general'),
+                completed:isCompleted('forms.datasource.general')}">General</div>
+              <div class="text-center fif" ng-class="{
+                active:isActive('forms.datasource.summary'),
+                completed:isCompleted('forms.datasource.summary')}">Summary</div>
+          </div>
+        </div>
+        <div class="row customContainer">
+          <div class="col-xs-offset-1 col-xs-22">
+            <fieldset ng-disabled="!editXmlDisabled">
+              <div class="formViewContainer">
+                <div class="col-xs-24">
+                  <label class="title"><span class="entypo download icon-lg entypo-align-sub"></span> NEW DATA SOURCE</label>
+                </div>
+                <div ui-view></div>
+              </div>
+            </fieldset>
+          </div>
+        </div>
+      </div>
+
+      <div class="hide xmlPreviewContainer detailsBox">
+        <div class="row dt">
+          <div class="col-xs-24 pt15px">
+            <div class="col-xs-13 noSpecial">
+                <h5>XML Preview</h5>
+                <label style="margin-top: -10px;margin-bottom: -2px;" ng-if="invalidXml" class="custom-danger">Invalid Xml</label>
+            </div>
+
+            <div class="pull-right">
+              <button type="button"
+                      id="datasource.editXML"
+                      class="btn btn-default btn-xs"
+                      ng-click="toggleEditXml()"
+                      ng-class="{'btn-warning':!editXmlDisabled}"
+                      ng-disabled="invalidXml">
+                <div ng-if="editXmlDisabled">Edit XML</div>
+                <div ng-if="!editXmlDisabled">Finish</div>
+              </button>
+
+              <button type="button"
+                      class="btn btn-default btn-xs"
+                      ng-if="invalidXml"
+                      ng-click="revertXml()">
+                  <div>Revert</div>
+              </button>
+            </div>
+		  </div>
+          <div class="col-sm-24 showValidationStyle">
+            <textarea ng-model="prettyXml"
+                      elastic
+                      class="form-control"
+                      ng-disabled="editXmlDisabled"
+                      ng-class="{fakeInvalid:invalidXml}">
+            </textarea>
+            <!--{{xmlEditValidationError}}-->
+          </div>
+
+          </div>
+        </div>
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/datasource/datasourceSummary.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/datasource/datasourceSummary.html b/falcon-ui/app/html/datasource/datasourceSummary.html
new file mode 100644
index 0000000..69e68f8
--- /dev/null
+++ b/falcon-ui/app/html/datasource/datasourceSummary.html
@@ -0,0 +1,95 @@
+<!--
+/**
+ * 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="summaryBox" id="datasourceFormSummary">
+  <h4 class="col-sm-24">
+    General
+  </h4>
+  <div class="col-sm-24">
+    <label>Connection Name</label>: <span>{{datasource.name}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Data Center or Colo Name</label>: <span>{{datasource.colo}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Description</label>: <span>{{datasource.description}}</span>
+  </div>
+  <div class="col-sm-24">
+    <label>Type</label>: <span>{{datasource.type}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Interfaces
+  </h4>
+  <div class="col-sm-24 plr0px" ng-repeat="interface in datasource.interfaces.interfaces">
+    <div class="col-sm-24">
+      <label>Interface Type</label>: <span>{{interface.type}}</span>
+    </div>
+    <div class="col-sm-24">
+      <label>Interface Endpoint</label>: <span>{{interface.endpoint}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Interface Credentials</label>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type != ''">
+      <label>Credential Type</label>: <span>{{interface.credential.type}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>User Name</label>: <span>{{interface.credential.userName}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-text'">
+      <label>Password Text</label>: <span>{{interface.credential.passwordText}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-file'">
+      <label>Password File</label>: <span>{{interface.credential.passwordFile}}</span>
+    </div>
+    <div class="col-sm-24" ng-if="interface.credential.type == 'password-alias'">
+      <label>Password Alias</label>: <span>{{interface.credential.passwordAlias}}</span>
+    </div>
+  </div>
+
+  <h4 class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    Default Credentials
+  </h4>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type != ''">
+    <label>Credential Type</label>: <span>{{datasource.interfaces.credential.type}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>User Name</label>: <span>{{datasource.interfaces.credential.userName}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-text'">
+    <label>Password Text</label>: <span>{{datasource.interfaces.credential.passwordText}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-file'">
+    <label>Password File</label>: <span>{{datasource.interfaces.credential.passwordFile}}</span>
+  </div>
+  <div class="col-sm-24" ng-if="datasource.interfaces.credential.type == 'password-alias'">
+    <label>Password Alias</label>: <span>{{datasource.interfaces.credential.passwordAlias}}</span>
+  </div>
+
+  <h4 class="col-sm-24">
+    Properties
+  </h4>
+  <div class="col-sm-24" ng-repeat="property in datasource.customProperties">
+    <label>{{property.name}}</label>: <span>{{property.value}}</span>
+  </div>
+  <div class="col-sm-24" ng-repeat="property in datasource.properties">
+    <label>{{property.name}}</label>: <span>{{property.value}}</span>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/aclPermissions.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/aclPermissions.html b/falcon-ui/app/html/directives/aclPermissions.html
new file mode 100644
index 0000000..13e4b50
--- /dev/null
+++ b/falcon-ui/app/html/directives/aclPermissions.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.
+ */
+-->
+<div class="col-xs-24 plr0px panel panel-default aclPermission">
+  <div class="col-xs-24 plr0px">
+    <span class="col-xs-4"></span>
+    <span class="col-xs-4 font11px pt5px">Read</span>
+    <span class="col-xs-4 font11px pt5px">Write</span>
+    <span class="col-xs-4 font11px pt5px">Execute</span>
+  </div>
+      <div class="col-xs-24 plr0px">
+      <span class="col-xs-4 font11px pt5px">Owner</span>
+      <span class="col-xs-4"><input type="checkbox" name="owner" value="4" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="owner" value="2" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="owner" value="1" ng-click="calculatePermission('owner')" ng-disabled="xmlPreview.edit"></span>
+    </div>
+    <div class="col-xs-24 plr0px">
+      <span class="col-xs-4 font11px pt5px">Group</span>
+      <span class="col-xs-4"><input type="checkbox" name="groups" value="4" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="groups" value="2" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="groups" value="1" ng-click="calculatePermission('groups')" ng-disabled="xmlPreview.edit"></span>
+    </div>
+    <div class="col-xs-24 plr0px">
+      <span class="col-xs-4 font11px pt5px">Others</span>
+      <span class="col-xs-4"><input type="checkbox" name="others" value="4" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="others" value="2" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span>
+      <span class="col-xs-4"><input type="checkbox" name="others" value="1" ng-click="calculatePermission('others')" ng-disabled="xmlPreview.edit"></span>
+    </div>
+</div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/dependenciesGraphDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/dependenciesGraphDv.html b/falcon-ui/app/html/directives/dependenciesGraphDv.html
index 7fbba06..9b263fd 100644
--- a/falcon-ui/app/html/directives/dependenciesGraphDv.html
+++ b/falcon-ui/app/html/directives/dependenciesGraphDv.html
@@ -16,4 +16,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
--->
\ No newline at end of file
+-->
+<svg >
+    <g/>
+</svg>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/entitiesListDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/entitiesListDv.html b/falcon-ui/app/html/directives/entitiesListDv.html
index 7016de1..f791e50 100644
--- a/falcon-ui/app/html/directives/entitiesListDv.html
+++ b/falcon-ui/app/html/directives/entitiesListDv.html
@@ -52,9 +52,9 @@
             <span class="entypo play"></span> <div>Resume</div>
         </div>
         <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-hide="selectedDisabledButtons.suspend" ng-if="type !== 'cluster'">
-            <span class="entypo paus"></span> <div>Suspend</div>
+            <span class="entypo paus"></span> <div>Pause</div>
         </div>
-        <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeEdit()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1" ng-if="type !== 'cluster'">
+        <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeEdit()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1">
             <span class="entypo cog"></span> <div>Edit</div>
         </div>
         <div class="btn btn-default btn-xs buttons-to-show" ng-click="scopeClone()" ng-hide="selectedRows.length === 0 || selectedRows.length > 1">
@@ -68,6 +68,8 @@
         </div>
       </td>
     </tr>
+  </tbody>
+  <tbody>
     <tr ng-if="input.length === 0 && !server.responses.listLoaded[type]">
       <td> loading {{ type }}s </td>
     </tr>
@@ -104,4 +106,4 @@
     </tr>
   </tbody>
 
-</table>
\ No newline at end of file
+</table>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/entitiesSearchListDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/entitiesSearchListDv.html b/falcon-ui/app/html/directives/entitiesSearchListDv.html
index 3e356fc..30dee7c 100644
--- a/falcon-ui/app/html/directives/entitiesSearchListDv.html
+++ b/falcon-ui/app/html/directives/entitiesSearchListDv.html
@@ -22,31 +22,39 @@
 <table class="listTable table" id="entitiesSearchList">
   <thead>
     <tr>
-      <th><div class="filtersSearchBox"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
+      <th><div class="filtersSearchBox pointer"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
       <th><div class="filtersSearchBox pointer" ng-click="toggleSortOrder()">Name <span class="glyphicon glyphicon-sort"></span></div> </th>
       <th><div class="filtersSearchBox">Tags</div></th>
-      <th><div class="filtersSearchBox">Cluster</div></th>
-      <th><div class="filtersSearchBox">Type</div></th>
-      <th><div class="filtersSearchBox">Status</div></th>
+      <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Cluster</div></th>
+      <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Type</div></th>
+      <th ng-if="$parent.$parent.$parent.entityType != 'cluster'"><div class="filtersSearchBox">Status</div></th>
     </tr>
+
   </thead>
 
   <tbody>
     <tr ng-if="input.length > 0" class="buttonsRow">
       <td class="buttonCell" colspan="9">
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSchedule()" ng-disabled="selectedDisabledButtons.schedule">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSchedule()" ng-disabled="selectedDisabledButtons.schedule"
+           ng-if="$parent.$parent.$parent.entityType != 'cluster'">
           <span class="entypo play"></span> <div>Schedule</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume"
+           ng-if="$parent.$parent.$parent.entityType != 'cluster'">
           <span class="entypo play"></span> <div>Resume</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend">
-          <span class="entypo paus"></span> <div>Suspend</div>
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend"
+           ng-if="$parent.$parent.$parent.entityType != 'cluster'">
+          <span class="entypo paus"></span> <div>Pause</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeEdit()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeEdit()"
+          ng-disabled="selectedRows.length === 0 || selectedRows.length > 1 || ($parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser()))"
+          ng-class="{disabledEditBtn: $parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode()  || !isSuperUser())}"
+          title="{{($parent.$parent.$parent.entityType === 'cluster' && (!isSafeMode() || !isSuperUser())) ? 'Cluster entity update can only be performed by superuser during safemode' : ''}}">
           <span class="entypo cog"></span> <div>Edit</div>
         </div>
-        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeClone()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1">
+        <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeClone()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1"
+          ng-if="$parent.$parent.$parent.entityType != 'cluster'">
           <span class="entypo docs"></span> <div>Copy</div>
         </div>
         <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeRemove()" ng-disabled="selectedRows.length === 0">
@@ -57,7 +65,8 @@
         </div>
       </td>
     </tr>
-
+  </tbody>
+  <tbody>
     <tr ng-if="input.length === 0 && !server.responses.listLoaded">
       <td> loading... </td>
     </tr>
@@ -72,14 +81,15 @@
         ng-class="{
               firstEntityRow:$first, lastEntityRow:$last,
               rowSelected:checkedRow(item.name)
-            }">
+            }"
+        ng-class-odd="'oddRow'" ng-class-even="'evenRow'">
       <td class="checkboxCell">
         <input type="checkbox" checklist-model="selectedRows" ng-model="$index"
                checklist-value="{name:item.name, type:item.type, status:item.status}"
                ng-change="checkButtonsToShow()"/>
       </td>
       <td class="nameCell" ng-init="entityType = item.type | uppercase">
-        <button type="button" class="btn btn-default" ng-click="goEntityDetails(item.name, item.type)">
+        <button type="button" class="btn btn-link" ng-click="goEntityDetails(item.name, item.type)">
           <span ng-class="displayIcon((item.type | uppercase), item.tags.tag)"></span> {{ item.name }}
         </button>
       </td>
@@ -88,17 +98,17 @@
           {{ tag }}{{$last ? '' : ', '}}
         </span>
       </td>
-      <td>
+      <td ng-if="$parent.$parent.$parent.entityType != 'cluster'">
         <span ng-repeat="cluster in item.clusters.cluster">
           {{ cluster }}{{$last ? '' : ', '}}
         </span>
       </td>
-      <td>
+      <td ng-if="$parent.$parent.$parent.entityType != 'cluster'">
         <span ng-repeat="tag in item.tags.tag" ng-init="type = displayType(tag)">
           {{ type | uppercase}}
         </span>
       </td>
-      <td class="stateCell">
+      <td class="stateCell" ng-if="$parent.$parent.$parent.entityType != 'cluster'">
         <span ng-class="{'blink-success': item.status == 'RUNNING',
                          'text-success': item.status == 'SUCCEEDED',
                          'blink-warning': item.status == 'SUSPENDED',
@@ -114,7 +124,7 @@
       </td>
     </tr>
 
-    <tr>
+    <tr class="paginationRow">
       <td colspan="9">
         <nav class="pull-right">
           <ul class="pagination">

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/feedFormHdfsStorage.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/feedFormHdfsStorage.html b/falcon-ui/app/html/directives/feedFormHdfsStorage.html
new file mode 100644
index 0000000..143d155
--- /dev/null
+++ b/falcon-ui/app/html/directives/feedFormHdfsStorage.html
@@ -0,0 +1,139 @@
+<!--
+/**
+* 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="col-xs-24 plr0px">
+  <div class="col-xs-10 plr0px">
+    <div class="col-xs-24">
+      <label class="light">Cluster<mandatory-field></mandatory-field></label>
+    </div>
+    <div class="col-xs-24">
+      <select ng-model="cluster.name" name="clusterName"
+        class="form-control padding0" ng-required="required"
+        ng-change="findClusterExists(cluster.name, cluster.type, storageInfo.feedClusters)"
+        validation-message="{{validations.messages.cluster}}">
+        <option value="" disabled style='display:none;'>-Select {{cluster.type}} cluster-</option>
+        <option ng-repeat="clusterItem in storageInfo.clustersList"
+          value="{{clusterItem.name}}" ng-selected="cluster.name === clusterItem.name">
+          {{clusterItem.name}}
+        </option>
+      </select>
+    </div>
+    <div class="col-xs-24 custom-danger" ng-show="checkDuplicateClusterOnTarget()">
+      Target cannot be the same as the Source
+    </div>
+    <div class="col-xs-24 custom-danger" ng-show="clusterExists">
+      Cluster is already added
+    </div>
+    <div class="col-xs-24">
+      <label class="light">Data Path<mandatory-field></mandatory-field></label>
+    </div>
+    <div ng-repeat="location in cluster.storage.fileSystem.locations">
+      <div class="col-xs-24" ng-if="location.type==='data'">
+        <input type="text" name="dataPath"
+          placeholder="Enter Data Path"
+          ng-required="cluster.name"
+          validation-optional-message="{{validations.messages.path}}"
+          class="form-control"
+          ng-model="location.path" />
+      </div>
+    </div>
+    <div class="col-xs-24">
+      <a href="" ng-click="toggleAdvancedOptions()">MORE OPTIONS ></a>
+    </div>
+  </div>
+  <div class="col-xs-12 plr0px">
+    <div class="datasourceBox" ng-show="showingAdvancedOptions">
+      <div class="col-xs-24">
+        <label class="light">Statistics Path</label>
+      </div>
+      <div ng-repeat="location in cluster.storage.fileSystem.locations">
+        <div class="col-xs-24" ng-if="location.type==='stats'">
+          <input type="text" class="form-control" ng-model="location.path"/>
+        </div>
+      </div>
+      <div class="col-xs-24 validityBox plr0px">
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 startDateBox">
+            <label class="light">Start<mandatory-field></mandatory-field></label>
+              <input type="text"
+                name="startDateInput"
+                class="form-control dateInput"
+                placeholder="{{dateFormat | lowercase}}"
+                ng-model="cluster.validity.start.date"
+                simple-date-picker />
+          </div>
+          <div class="col-xs-12 startTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.start.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.start.date">
+          {{validations.messages.date.empty}}
+        </label>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 endDateBox">
+            <label class="light">End<mandatory-field></mandatory-field></label>
+                          <input type="text"
+                name="startDateInput"
+                class="form-control dateInput"
+                placeholder="{{dateFormat | lowercase}}"
+                ng-model="cluster.validity.end.date"
+                simple-date-picker />
+          </div>
+          <div class="col-xs-12 endTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.end.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.end.date">
+          {{validations.messages.date.empty}}
+        </label>
+      </div>
+      <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label>
+      <div class="col-xs-24 inlineInputsGroup">
+        <input type="text" class="form-control" ng-model="cluster.retention.quantity"
+          ng-keydown="validations.acceptOnlyNumber($event)" ng-pattern="validations.patterns.twoDigits" />
+        <select ng-model="cluster.retention.unit">
+          <option selected value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+      </div>
+    </div>
+  </div>
+</div>
+<div class="col-xs-24 mt10">
+  <a ng-click="reset()" ng-if="!storageInfo.readOnly">Reset</a>
+  <button class="btn datasourceBtn" ng-if="!storageInfo.readOnly"
+    ng-disabled="cluster.name==='' || !cluster.storage.fileSystem.locations[0].path || cluster.storage.fileSystem.locations[0].path ==='' || clusterExists"
+    ng-click="addCluster({type : storageInfo.type, dataTransferType : 'hdfs'})">Add {{buttonText}}</button>
+  <button class="btn datasourceBtn" ng-click="deleteCluster()"
+    ng-if="(storageInfo.feedClusters | filter:{type: cluster.type}).length > 1">Delete</button>
+</div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/feedFormHiveStorage.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/feedFormHiveStorage.html b/falcon-ui/app/html/directives/feedFormHiveStorage.html
new file mode 100644
index 0000000..655a973
--- /dev/null
+++ b/falcon-ui/app/html/directives/feedFormHiveStorage.html
@@ -0,0 +1,132 @@
+<!--
+/**
+* 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="col-xs-24 plr0px">
+  <div class="col-xs-10 plr0px">
+    <div class="datasourceBox">
+      <div class="col-xs-24">
+        <label class="light">Cluster<mandatory-field></mandatory-field></label>
+      </div>
+      <div class="col-xs-24">
+        <select ng-model="cluster.name" class="form-control padding0" ng-required="required"
+          ng-change="findClusterExists(cluster.name, cluster.type, storageInfo.feedClusters)"
+          validation-message="{{validations.messages.cluster}}">
+          <option value="" disabled style='display:none;'>-Select {{cluster.type}} cluster-</option>
+          <option ng-repeat="clusterItem in storageInfo.clustersList"
+            value="{{clusterItem.name}}" ng-selected="cluster.name === clusterItem.name">
+          {{clusterItem.name}}
+          </option>
+        </select>
+      </div>
+      <div class="col-xs-24 custom-danger" ng-show="checkDuplicateClusterOnTarget()">
+        Target cannot be the same as the Source
+      </div>
+      <div class="col-xs-24 custom-danger" ng-show="clusterExists">
+        Cluster is already added
+      </div>
+      <div class="col-xs-24">
+        <label class="light" tooltip="feed.storage.tableUri">
+          Table URI<mandatory-field></mandatory-field>
+        </label>
+      </div>
+      <div class="col-xs-24">
+        <input type="text"
+          placeholder="Enter table uri"
+          class="form-control"
+          ng-required="cluster.name"
+          validation-optional-message="{{validations.messages.tableUri}}"
+          ng-model="cluster.storage.catalog.catalogTable.uri" />
+      </div>
+      <div class="col-xs-24">
+        <a href="" ng-click="toggleAdvancedOptions()">MORE OPTIONS ></a>
+      </div>
+    </div>
+  </div>
+  <div class="col-xs-12 plr0px">
+    <div class="datasourceBox" ng-show="showingAdvancedOptions">
+      <div class="col-xs-24 validityBox plr0px">
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 startDateBox">
+            <label class="light">Start<mandatory-field></mandatory-field></label>
+            <input type="text"
+              name="startDateInput"
+              class="form-control dateInput"
+              placeholder="{{dateFormat | lowercase}}"
+              ng-model="cluster.validity.start.date"
+              simple-date-picker />
+          </div>
+          <div class="col-xs-12 startTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.start.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.start.date">
+          {{validations.messages.date.empty}}
+        </label>
+        <div class="col-xs-24 plr0px">
+          <div class="col-xs-12 endDateBox">
+            <label class="light">End<mandatory-field></mandatory-field></label>
+            <input type="text"
+              name="startDateInput"
+              class="form-control dateInput"
+              placeholder="{{dateFormat | lowercase}}"
+              ng-model="cluster.validity.end.date"
+              simple-date-picker />
+          </div>
+          <div class="col-xs-12 endTimeBox">
+            <label class="light">Time<mandatory-field></mandatory-field></label>
+            <timepicker ng-change="constructDate()"
+              ng-model="cluster.validity.end.time"
+              hour-step="1"
+              minute-step="1"
+              show-meridian="true">
+            </timepicker>
+          </div>
+        </div>
+        <label class="col-xs-24 custom-danger validationMessageGral" ng-if="!cluster.validity.end.date">
+          {{validations.messages.date.empty}}
+        </label>
+      </div>
+      <label class="light col-xs-24">Retention<mandatory-field></mandatory-field></label>
+      <div class="col-xs-24 inlineInputsGroup">
+        <input type="text" class="form-control" ng-required="required" ng-model="cluster.retention.quantity" ng-keydown="validations.acceptOnlyNumber($event)" ng-pattern="validations.patterns.twoDigits">
+        <select ng-model="cluster.retention.unit" ng-keydown="validations.acceptOnlyNumber({$event:$event})" ng-required="required">
+          <option selected value="minutes">minutes</option>
+          <option value="hours">hours</option>
+          <option value="days">days</option>
+          <option value="months">months</option>
+        </select>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="col-xs-24 mt10">
+  <a ng-click="reset()" ng-if="!storageInfo.readOnly">Reset</a>
+  <button class="btn datasourceBtn" ng-if="!storageInfo.readOnly"
+    ng-disabled="cluster.name === '' || !cluster.storage.catalog.catalogTable.uri || $scope.cluster.name === '' || $scope.cluster.storage.catalog.catalogTable.uri==='' || clusterExists"
+    ng-click="addCluster({type : storageInfo.type, dataTransferType : 'hive'})">Add {{buttonText}}</button>
+  <button class="btn datasourceBtn" ng-click="deleteCluster()"
+    ng-if="(storageInfo.feedClusters | filter:{type: cluster.type}).length > 1">Delete</button>
+</div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/instancesListDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/instancesListDv.html b/falcon-ui/app/html/directives/instancesListDv.html
index 5abc9d3..a3cc193 100644
--- a/falcon-ui/app/html/directives/instancesListDv.html
+++ b/falcon-ui/app/html/directives/instancesListDv.html
@@ -17,34 +17,28 @@
  * limitations under the License.
  */
 -->
-<table class="listTable table" id="instancesList">
+<table class="listTable table">
   <thead>
   <tr>
-    <th><div class="filtersSearchBox vertical-align"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
-    <th><div class="filtersSearchBox vertical-align">Instance</div></th>
-    <th><div class="filtersSearchBox">Started&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('startTime')"></span>
-      <input type="text" class="form-control dateInput" ng-model="startFilter" ng-keypress="validateDate($event, 'start');"
-             ng-enter="filterInstances('startTime')" placeholder="mm/dd/yyyy hh:mm">
-      <label class="error" ng-if="startFilterError">Incorrect Date Format</label>
-      <label class="error" ng-if="startAfterEndError">Start date should be before end date</label>
-      <label class="error" ng-if="startAfterNominalError">Start date should be after nominal start date {{ start }}</label>
-      <label class="error" ng-if="startBeforeNominalError">Start date should be before nominal end date {{ end }}</label>
+    <th class="align-top"><div class="filtersSearchBox vertical-align pt35px"><input type="checkbox" ng-model="selectedAll" ng-click="checkAll()"/></div></th>
+    <th class="align-top"><div class="filtersSearchBox vertical-align">Instance</div>
+		 <input type="text" class="form-control" placeholder="instance" restrict="reject">
+	</th>
+    <th class="align-top"><div class="filtersSearchBox" ng-class="{showMessage:!startDateValid, showValidationStyle :!startDateValid, validationMessageParent:!startDateValid}">Started&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('startTime')"></span>
+      <input type="text" title="Date should be entered in {{dateFormat | lowercase}} format." class="form-control dateInput" ng-model="startFilter" ng-enter="filterInstances('startTime')" placeholder="{{dateFormat | lowercase}}" ng-keypress="validateDate($event,'start')">
+      <label class="custom-danger validationMessageGral" ng-if="!startDateValid">You need to provide a valid date</label>
     </div></th>
-    <th><div class="filtersSearchBox">Ended&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('endTime')"></span>
-      <input type="text" class="form-control dateInput" ng-model="endFilter" ng-keypress="validateDate($event, 'end');"
-             ng-enter="filterInstances('endTime')" placeholder="mm/dd/yyyy hh:mm">
-      <label class="error" ng-if="endFilterError">Incorrect Date Format</label>
-      <label class="error" ng-if="endAfterNominalError">End date should be after nominal start date {{ start }}</label>
-      <label class="error" ng-if="endBeforeNominalError">End date should be before nominal end date {{ end }}</label>
+    <th class="align-top"><div class="filtersSearchBox" ng-class="{showMessage:!endDateValid, showValidationStyle :!endDateValid, validationMessageParent:!endDateValid}">Ended&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('endTime')"></span>
+      <input type="text" title="Date should be entered in {{dateFormat | lowercase}} format." class="form-control dateInput" ng-model="endFilter" ng-enter="filterInstances('startTime')" placeholder="{{dateFormat | lowercase}}" ng-keypress="validateDate($event,'end')">
+      <label class="custom-danger validationMessageGral" ng-if="!endDateValid">You need to provide a valid date</label>
     </div></th>
-    <th>
+    <th class="align-top">
       <div class="filtersSearchBox">Status&nbsp;<span class="glyphicon glyphicon-sort pointer" ng-click="filterInstances('status')"></span>
         <select class="form-control padding0" ng-model="statusFilter" ng-change="filterInstances('startTime')">
           <option value="">ALL</option>
           <option value="RUNNING">RUNNING</option>
           <option value="SUCCEEDED">SUCCEEDED</option>
           <option value="SUSPENDED">SUSPENDED</option>
-          <option value="WAITING">WAITING</option>
           <option value="KILLED">KILLED</option>
         </select>
       </div>
@@ -54,18 +48,18 @@
 
   <tbody>
   <tr ng-if="input.length > 0" class="buttonsRow">
-    <td class="buttonCell" colspan="9">
+    <td class="buttonCell border0px" colspan="9">
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="download()" ng-disabled="selectedRows.length === 0 || selectedRows.length > 1">
         <span class="entypo down"></span> <div>Log</div>
       </div>
-      <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selectedDisabledButtons.resume">
+      <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeResume()" ng-disabled="selecteisabledButtons.resume">
         <span class="entypo play"></span> <div>Resume</div>
       </div>
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeRerun()" ng-disabled="selectedDisabledButtons.rerun">
         <span class="entypo play"></span> <div>Rerun</div>
       </div>
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeSuspend()" ng-disabled="selectedDisabledButtons.suspend">
-        <span class="entypo paus"></span> <div>Suspend</div>
+        <span class="entypo paus"></span> <div>Pause</div>
       </div>
       <div class="btn btn-gray btn-xs buttons-to-show" ng-click="scopeKill()" ng-disabled="selectedDisabledButtons.stop">
         <span class="entypo stop"></span> <div>Kill</div>
@@ -107,18 +101,18 @@
     <td>
       <!--{{ item.startTime }}<br/>-->
       <!--{{ item.startTime | date :'yyyy-MM-ddTHH:mm:ssZ' }}<br/>-->
-      {{ item.startTime | date :'MM/dd/yyyy HH:mm'}}
+      {{ item.startTime | date : dateFormat}}
     </td>
     <td>
-      {{ item.endTime | date :'MM/dd/yyyy HH:mm'}}
+      {{ item.endTime | date : dateFormat}}
     </td>
     <td class="stateCell">
       <span ng-class="{
-      'blink-success': item.status == 'RUNNING',
-      'text-success': item.status == 'SUCCEEDED',
-      'blink-warning': item.status == 'WAITING' || item.status == 'UNKNOWN',
-      'blink-danger': item.status == 'SUSPENDED',
-      'text-danger': item.status == 'FAILED' || item.status == 'KILLED',
+        'blink-success': item.status == 'RUNNING',
+        'text-success': item.status == 'SUCCEEDED',
+        'blink-warning': item.status == 'WAITING' || item.status == 'UNKNOWN',
+        'blink-danger': item.status == 'SUSPENDED',
+        'text-danger': item.status == 'FAILED' || item.status == 'KILLED',
       }">{{ item.status }}</span>
     </td>
 
@@ -131,7 +125,7 @@
     </td>
   </tr>
 
-  <tr>
+  <tr class="paginationRow">
     <td colspan="5">
       <nav class="pull-right">
         <ul class="pagination">

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/lineageGraphDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/lineageGraphDv.html b/falcon-ui/app/html/directives/lineageGraphDv.html
index 93a2896..7e01d78 100644
--- a/falcon-ui/app/html/directives/lineageGraphDv.html
+++ b/falcon-ui/app/html/directives/lineageGraphDv.html
@@ -20,10 +20,10 @@
 <div id="lineageGraph">
   <h4><small>Legends</small></h4>
   <ul class="lineage-legend">
-    <li class="lineage-legend-feed-inst">Feed instance</li>
-    <li class="lineage-legend-feed-inst lineage-legend-terminal">Feed instance (terminal)</li>
-    <li class="lineage-legend-process-inst">Process instance</li>
-    <li class="lineage-legend-process-inst lineage-legend-terminal">Process instance (terminal)</li>
+    <li class="lineage-legend-feed-inst"><span>Feed instance</span></li>
+    <li class="lineage-legend-feed-inst lineage-legend-terminal"><span>Feed instance (terminal)</span></li>
+    <li class="lineage-legend-process-inst"><span>Process instance</span></li>
+    <li class="lineage-legend-process-inst lineage-legend-terminal"><span>Process instance (terminal)</span></li>
   </ul>
 </div>
 <div>

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/navDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/navDv.html b/falcon-ui/app/html/directives/navDv.html
index 63046f6..cffc170 100644
--- a/falcon-ui/app/html/directives/navDv.html
+++ b/falcon-ui/app/html/directives/navDv.html
@@ -17,84 +17,216 @@
  * limitations under the License.
  */
 -->
-<nav class="col-sm-24 navbar navbar-default" role="navigation">
-  <div class="col-sm-offset-1 col-sm-22">
-    <button class="logoTitle" ui-sref="main">
+<nav class="col-sm-24 navbar navbar-default header1" role="navigation">
+  <div class="col-sm-offset-2 col-sm-20">
+    <a class="btn-link logoTitle" ui-sref="main">
       <h1 class="navbar-header">
-        <span class="falconLogo"></span> <span>Falcon</span>
+        <span class="falconLogo"></span>
       </h1>
-    </button>
+    </a>
+    <div class="loginHeaderBox" ng-show="userLogged()">
+        <!--<button type="button" class="btn btn-lg btn-link" data-ng-click="showMenu=!showMenu">
+            <span class="glyphicon glyphicon-th" aria-hidden="true"></span>
+        </button>-->
+        <!-- <div class="dropdown visible-lg-inline-block">
+            <a class="btn btn-link dropdown-toggle" data-ng-click="" id="settingMenu"
+              data-toggle="dropdown" aria-expanded="true" role="button">
+                <span class="glyphicon glyphicon-th"></span>
+            </a>
+            <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="settingMenu">
+              <li role="presentation" role="menuitem" tabindex="-1">
+                  <button type="button" class="btn btn-link" data-ng-click="displayEntities('cluster')">
+                      Clusters
+                  </button>
+              </li>
+            </ul>
+        </div> -->
+        <span class="entypo archive icon-lg entypo-align-sub" title="Clusters" data-ng-click="displayEntities('cluster')">&nbsp;</span>
+        <span class="separator"> | </span>
+        <span class="notifications">
+          <button class="btn btn-link" ng-click="notify()">
+            <span class="glyphicon glyphicon-bell" title="Notifications"></span>
+          </button>
+          <server-messages></server-messages>
+        </span>
+        <span class="separator"> | </span>
+        <div class="dropdown visible-lg-inline-block">
+            <div class="dropdown-toggle pointer" id="userMenu" data-toggle="dropdown" aria-expanded="true" role="button">
+              <span class="user hide"></span>{{userToken}} <span class="caret"></span>
+            </div>
+            <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="userMenu">
+                <li role="presentation">
+                  <a class="btn btn-link" ng-show="userLogged() && !ambariView()" ng-click="logOut()">
+                      <span class="glyphicon glyphicon-log-out" title="Logout"></span>
+                      Logout
+                  </a>
+                </li>
+                <li>
+                  <a class="btn btn-link"
+                        href="https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_data_governance/content/ch_hdp_data_governance_overview.html"
+                        target="_blank">
+                    <span class="glyphicon glyphicon-question-sign" title="Help"></span>
+                    Help
+                  </a>
+                </li>
+                <li><a class="btn btn-link" href="http://hortonworks.com/hadoop/falcon/" target="_blank">
+                    <span class="glyphicon glyphicon-info-sign" title="About"></span>
+                    About
+                </a></li>
+            </ul>
+        </div>
+    </div>
+  </div>
+</nav>
+<nav class="col-sm-24 navbar navbar-default header2" role="navigation" ng-show="userLogged()">
 
-      <div class="createNavWrapper" ng-show="userLogged()">
-        <h4>Create an entity</h4>
-        <button type="button"
-                id="cluster.create"
-                ng-click="resetCluster()"
-                ng-disabled="isInForm('cluster')"
-                ng-class="{disabled:isInForm('cluster')}">
-          <span class="entypo archive"></span> <span>Cluster</span>
-        </button>
-        <button type="button"
-                id="feed.create"
-                ng-click="resetFeed()"
-                ng-disabled="isInForm('feed')"
-                ng-class="{disabled:isInForm('feed')}">
-          <span class="entypo download"></span> <span>Feed</span>
-        </button>
-        <button type="button"
-                id="process.create"
-                ng-click="resetProcess()"
-                ng-disabled="isInForm('process')"
-                ng-class="{disabled:isInForm('process')}">
-          <span class="entypo cycle"></span> <span>Process</span>
-        </button>
-        <button type="button"
-                id="dataset.create"
-                ng-click="resetDataset()"
-                ng-disabled="isInForm('dataset')"
-                ng-class="{disabled:isInForm('dataset')}">
-          <span class="glyphicon glyphicon-duplicate"></span> <span>Mirror</span>
-        </button>
-      </div>
+  <div class="col-sm-16" ng-show="userLogged()">
+      <div class="row searchBoxContainer">
+          <div class=" col-sm-offset-4 col-sm-16">
+              <!--<i class="glyphicon glyphicon-refresh search-loading-icon" ng-show="loading"></i>-->
+              <img src="css/img/ajax-loader.gif" class="glyphicon search-loading-icon" ng-show="loading"/>
+              <!--<tags-input ng-model="tags" min-length="1" add-on-space="true" on-tag-added="displayResults()"-->
+              <!--on-tag-removed="displayResults()"></tags-input>-->
 
-    <div class="uploadNavWrapper" ng-show="userLogged()">
-      <h4>Upload an entity</h4>
-      <div class="btn-file" ng-class="{fakeFocus: fake.focus}">
-        <span class="entypo up"></span>
-        <input type="file"
-               id="files"
-               ng-focus="fake.focus = true"
-               ng-blur="fake.focus = false"
-               name="files[]"
-               multiple
-               fileinput-change="handleFile"
-               ng-model="fileJson">
-        <span>Browse for the XML file</span>
+              <tags-input ng-model="tags" min-length="1" add-on-space="true" add-from-autocomplete-only="true"
+                          on-tag-added="displayResults()" on-tag-removed="displayResults(true)" placeholder="Search">
+                  <auto-complete source="loadTags($query)" min-length="0"></auto-complete>
+              </tags-input>
+              <!--ng-class="tags.length > 0 ? 'question-icon' : 'remove-icon'"-->
+              <i id="nsPopover" class="glyphicon glyphicon-question-sign question-icon"
+                 ns-popover
+                 ns-popover-template="menu"
+                 ns-popover-trigger="click"
+                 ns-popover-theme="ns-popover-tooltip-theme"
+                 ns-popover-timeout="5"
+                 ns-popover-placement="bottom|right"></i>
+              <i class="glyphicon glyphicon-search search-icon" ng-hide="loading" ng-click="displayResults()"></i>
+              <script type="text/ng-template" id="menu">
+                  <div class="triangle"></div>
+                  <div class="ns-popover-tooltip">
+                      <h5>Hey there! Want some search tips?</h5>
+                      The <strong>first word</strong> you type will be taken as the <strong>Name</strong> of the entity.
+                      <br/>
+                      You can search <strong>*</strong> for getting all the entities.
+                      <br/>
+                      The <strong>second and following</strong> words will be taken as <strong> Tags</strong>.
+                      <br/>
+                      For filtering by type, write <strong>type=feed|process|mirror</strong>
+                  </div>
+              </script>
+              <i class="glyphicon glyphicon-remove remove-icon" ng-if="tags.length > 0" ng-click="clearTags()"></i>
+          </div>
       </div>
-    </div>
+  </div>
 
-    <div class="loginHeaderBox">
-      <div ng-show="userLogged()">
-        <span class="user"></span> <div><strong>{{userToken}}</strong></div>
+  <div class="col-sm-8 uploadNavWrapper">
+    <div class="dropdown">
+          <!--<img src="css/img/32x32_create-entity.png" data-ng-click="showMenu=false" class="dropdown-toggle btn-create"
+            title="Create entity" id="entityMenu" data-toggle="dropdown" aria-expanded="true" role="button" />-->
+          <button class="dropdown-toggle btn-create" title="Create entity" id="entityMenu"
+            data-toggle="dropdown" aria-expanded="true" role="button">
+            Create <span class="caret"></span>
+          </button>
+          <ul class="dropdown-menu" role="menu" aria-labelledby="entityMenu">
+              <li role="presentation">
+                  <button class="cluster btn btn-link" role="menuitem" tabindex="-1" type="button" id="cluster.create"
+                    ng-click="resetCluster()" ng-disabled="isInForm('cluster')">
+                    <span title="Cluster">Cluster</span>
+                  </button>
+              </li>
+              <li role="presentation">
+                  <button class="feed btn btn-link" role="menuitem" tabindex="-1" type="button" id="feed.create"
+                    ng-click="resetFeed()" ng-disabled="isInForm('feed')">
+                    <span title="Feed">Feed</span>
+                  </button>
+              </li>
+              <li role="presentation">
+                  <button class="process btn btn-link" role="menuitem" tabindex="-1" type="button" id="process.create"
+                    ng-click="resetProcess()" ng-disabled="isInForm('process')">
+                    <span title="Process">Process</span>
+                  </button>
+              </li>
+              <li role="presentation">
+                <div class="dropdown open">
+                  <button class="dataset btn btn-link" role="menuitem" tabindex="-1" type="button" id="dataset.create"
+                    ng-click="resetDataset('HDFS')" ng-disabled="isInForm('dataset')  && isMirror('HDFS')">
+                    <span title="Mirror">Mirror</span>
+                  </button>
+                  <ul class="dropdown-submenu" role="menu" aria-labelledby="dataset.create">
+                    <li role="presentation">
+                      <button class="hdfsMirror btn btn-link" role="menuitem" tabindex="-2" type="button"
+                        id="hdfsMirror.create" ng-click="resetDataset('HDFS')" ng-disabled="isInForm('dataset') && isMirror('HDFS')">
+                        <span title="File System">File System</span>
+                      </button>
+                    </li>
+                    <li role="presentation">
+                      <button class="hiveMirror btn btn-link" role="menuitem" tabindex="-2" type="button"
+                        id="hiveMirror.create" ng-click="resetDataset('HIVE')" ng-disabled="isInForm('dataset') && isMirror('HIVE')">
+                        <span title="Hive">Hive</span>
+                      </button>
+                    </li>
+                    <li role="presentation">
+                      <button class="snapshot btn btn-link" role="menuitem" tabindex="-2" type="button"
+                        id="snapshot.create" ng-click="resetSnapshot()" ng-disabled="isInForm('snapshot')">
+                        <span title="Snapshot">Snapshot</span>
+                      </button>
+                    </li>
+                  </ul>
+              </li>
+              <li role="presentation">
+                  <button class="dataset btn btn-link" role="menuitem" tabindex="-1" type="button" id="datasource.create" ng-click="resetDatasource()" ng-disabled="isInForm('datasource')" ng-class="{disabled:isInForm('datasource')}">
+                    <span title="Data Source">Data Source</span>
+                  </button>
+              </li>
+          </ul>
+      </div>
+      <div class="dropdown">
+          <!--<img src="css/img/32x32_upload.png" data-ng-click="showMenu=false" class="dropdown-toggle btn-upload"
+          title="Upload an entity definition" id="uploadMenu" data-toggle="dropdown"
+          aria-expanded="true" role="button" />-->
+          <button class="dropdown-toggle btn-upload" title="Upload an entity definition" id="uploadMenu"
+            data-toggle="dropdown" aria-expanded="true" role="button">Import<span class="caret"></span></button>
+          <ul class="dropdown-menu" role="menu" aria-labelledby="uploadMenu">
+              <li role="presentation" class="btn-file">
+                  <button class="btn btn-link" role="menuitem" tabindex="-1" type="button">
+                      <span title="Xml file">Xml file</span>
+                  </button>
+                  <input type="file"
+                         id="files"
+                         ng-focus="fake.focus = true"
+                         ng-blur="fake.focus = false"
+                         name="files[]"
+                         multiple
+                         fileinput-change="handleFile"
+                         ng-model="fileJson" />
+              </li>
+          </ul>
       </div>
 
-      <button ng-show="userLogged() && !ambariView() && !isSecureMode()" ng-click="logOut()" ng-class="responses.unreaded > 0 ? 'logoutBT' : ''">
-        <span class="glyphicon glyphicon-log-out header-icon"></span> <div><strong class="pointer">Logout</strong></div>
-      </button>
+  </div>
+</nav>
 
-      <button ng-click="notify()" ng-blur="hideNotifs()" class="no-outline">
-        <span class="badge badge-notify" ng-show="responses.unreaded > 0">{{ responses.unreaded }}</span>
-        <span class="glyphicon glyphicon-bell bell-notif header-icon"></span>
-        <strong class="pointer">Notifications</strong>
-        <div class="notifications">
-          <server-messages></server-messages>
+<!--
+<nav class="col-sm-24 navbar navbar-default header3" role="navigation" ng-show="userLogged() && showMenu">
+    <div class="col-sm-offset-4 col-sm-18">
+        <div class="loginHeaderBox">
+            <a class="btn btn-link" ng-click="notify()">
+                <span class="glyphicon glyphicon-bell" title="Notifications"></span>
+                <div class="notifications">
+                    <server-messages></server-messages>
+                </div>
+            </a>
+            <a class="btn btn-link" ng-show="userLogged() && !ambariView()" ng-click="logOut()">
+                <span class="glyphicon glyphicon-log-out" title="Logout"></span>
+            </a>
+            <a class="btn btn-link"
+              href="http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_falcon/bk_falcon-20140422.pdf"
+              target="_blank">
+                <span class="glyphicon glyphicon-question-sign" title="Help"></span>
+            </a>
+            <a class="btn btn-link" href="http://hortonworks.com/hadoop/falcon/" target="_blank">
+                <span class="glyphicon glyphicon-info-sign" title="About"></span>
+            </a>
         </div>
-      </button>
-
-      <a href="http://hortonworks.com/hadoop/falcon/">
-        <span class="glyphicon glyphicon-question-sign header-icon"></span> <div>Help</div>
-      </a>
     </div>
-
-  </div>
-</nav>
+</nav>-->

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/serverMessagesDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/serverMessagesDv.html b/falcon-ui/app/html/directives/serverMessagesDv.html
index dd5a2a2..3910831 100644
--- a/falcon-ui/app/html/directives/serverMessagesDv.html
+++ b/falcon-ui/app/html/directives/serverMessagesDv.html
@@ -20,7 +20,7 @@
 
 <div class="messagesArrow notifs" ng-show="server.responses.queue.length > 0"></div>
 <div class="messages notifs">
-
+  <div ng-if="showClose" class='notif-close'><button type='button' class='close' ng-click="close()">&times;</button></div>
   <div ng-show="server.responses.showAll" ng-repeat="message in server.responses.queue | reverse" class="message"
       ng-class="{ 'color-warning' : message.type === 'warning' || message.type === 'cancel',
                     'color-success' : message.type === 'success',

http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/html/directives/timeZoneSelectDv.html
----------------------------------------------------------------------
diff --git a/falcon-ui/app/html/directives/timeZoneSelectDv.html b/falcon-ui/app/html/directives/timeZoneSelectDv.html
index f15bed7..f1ba102 100644
--- a/falcon-ui/app/html/directives/timeZoneSelectDv.html
+++ b/falcon-ui/app/html/directives/timeZoneSelectDv.html
@@ -17,7 +17,8 @@
  * limitations under the License.
  */
 -->
-<select class="padding0 TZSelect form-control" ng-model="ngModel">
+<select class="padding0 TZSelect form-control" ng-model="ngModel"
+  ng-required="required">
   <option value="" disabled style='display:none;'>-Select timezone-</option>
   <option value="UTC">UTC</option>
   <option value="GMT-12:00">(GMT -12:00) Eniwetok, Kwajalein</option>
@@ -29,7 +30,7 @@
   <option value="GMT-06:00">(GMT -6:00) Central Time (US &amp; Canada), Mexico City</option>
   <option value="GMT-05:00">(GMT -5:00) Eastern Time (US &amp; Canada), Bogota, Lima</option>
   <option value="GMT-04:00">(GMT -4:00) Atlantic Time (Canada), Caracas, La Paz</option>
-  <option value="GMT-03:50">(GMT -3:30) Newfoundland</option>
+  <option value="GMT-03:30">(GMT -3:30) Newfoundland</option>
   <option value="GMT-03:00">(GMT -3:00) Brazil, Buenos Aires, Georgetown</option>
   <option value="GMT-02:00">(GMT -2:00) Mid-Atlantic</option>
   <option value="GMT-01:00">(GMT -1:00 hour) Azores, Cape Verde Islands</option>
@@ -37,17 +38,17 @@
   <option value="GMT+01:00">(GMT +1:00 hour) Brussels, Copenhagen, Madrid, Paris</option>
   <option value="GMT+02:00">(GMT +2:00) Kaliningrad, South Africa</option>
   <option value="GMT+03:00">(GMT +3:00) Baghdad, Riyadh, Moscow, St. Petersburg</option>
-  <option value="GMT+03:50">(GMT +3:30) Tehran</option>
+  <option value="GMT+03:30">(GMT +3:30) Tehran</option>
   <option value="GMT+04:00">(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi</option>
-  <option value="GMT+04:50">(GMT +4:30) Kabul</option>
+  <option value="GMT+04:30">(GMT +4:30) Kabul</option>
   <option value="GMT+05:00">(GMT +5:00) Ekaterinburg, Islamabad, Karachi, Tashkent</option>
-  <option value="GMT+05:50">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option>
-  <option value="GMT+05:75">(GMT +5:45) Kathmandu</option>
+  <option value="GMT+05:30">(GMT +5:30) Bombay, Calcutta, Madras, New Delhi</option>
+  <option value="GMT+05:45">(GMT +5:45) Kathmandu</option>
   <option value="GMT+06:00">(GMT +6:00) Almaty, Dhaka, Colombo</option>
   <option value="GMT+07:00">(GMT +7:00) Bangkok, Hanoi, Jakarta</option>
   <option value="GMT+08:00">(GMT +8:00) Beijing, Perth, Singapore, Hong Kong</option>
   <option value="GMT+09:00">(GMT +9:00) Tokyo, Seoul, Osaka, Sapporo, Yakutsk</option>
-  <option value="GMT+09:50">(GMT +9:30) Adelaide, Darwin</option>
+  <option value="GMT+09:30">(GMT +9:30) Adelaide, Darwin</option>
   <option value="GMT+10:00">(GMT +10:00) Eastern Australia, Guam, Vladivostok</option>
   <option value="GMT+11:00">(GMT +11:00) Magadan, Solomon Islands, New Caledonia</option>
   <option value="GMT+12:00">(GMT +12:00) Auckland, Wellington, Fiji, Kamchatka</option>