You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2016/12/16 22:02:10 UTC
[02/51] [abbrv] ambari git commit: AMBARI-19031: UI Enhancements,
import/export assets and smart version configuration (Padma Priya via
nitirajrathore)
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/routes/job.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/routes/job.js b/contrib/views/wfmanager/src/main/resources/ui/app/routes/job.js
index d849609..d95a226 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/routes/job.js
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/routes/job.js
@@ -22,11 +22,11 @@ export default Ember.Route.extend({
queryParams: {
jobType: { refreshModel: true },
id: { refreshModel: true },
- from : {refreshModel: true},
- fromType :{refreshModel : true}
+ fromBundleId: {refreshModel: true},
+ fromCoordId: {refreshModel: true}
},
- from : null,
- fromType : null,
+ fromBundleId: null,
+ fromCoordId: null,
getJobInfo (url){
var deferred = Ember.RSVP.defer();
Ember.$.get(url).done(function(res){
@@ -48,18 +48,25 @@ export default Ember.Route.extend({
});
},
afterModel : function (model, transition){
- if(transition.queryParams.from){
- this.set('from', transition.queryParams.from);
- this.set('fromType',transition.queryParams.fromType);
+ if(transition.queryParams.fromBundleId){
+ this.set('fromBundleId', transition.queryParams.fromBundleId);
}else{
- this.set('from', null);
- this.set('fromType', null);
+ this.set('fromBundleId', null);
+ }
+ if(transition.queryParams.fromCoordId){
+ this.set('fromCoordId', transition.queryParams.fromCoordId);
+ }else{
+ this.set('fromCoordId', null);
}
},
actions : {
didTransition (){
- this.controller.set('from', this.get('from'));
- this.controller.set('fromType',this.get('fromType'));
+ if (this.get('fromBundleId')) {
+ this.controller.set('fromBundleId', this.get('fromBundleId'));
+ }
+ if (this.get('fromCoordId')) {
+ this.controller.set('fromCoordId',this.get('fromCoordId'));
+ }
},
onTabChange : function(tab){
this.set('currentTab', tab);
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/services/dashboard-context.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/services/dashboard-context.js b/contrib/views/wfmanager/src/main/resources/ui/app/services/dashboard-context.js
new file mode 100644
index 0000000..6c5d183
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/services/dashboard-context.js
@@ -0,0 +1,38 @@
+/*
+* 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.
+*/
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+ currentBundleName: null,
+ currentCoordName: null,
+
+ getCurrentBundleName: function() {
+ return this.get('currentBundleName');
+ },
+
+ setCurrentBundleName: function(currentBundleName) {
+ this.set('currentBundleName', currentBundleName);
+ },
+
+ getCurrentCoordName: function() {
+ return this.get('currentCoordName');
+ },
+
+ setCurrentCoordName: function(currentCoordName) {
+ this.set('currentCoordName', currentCoordName);
+ }
+});
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/services/save-job.js
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/services/save-job.js b/contrib/views/wfmanager/src/main/resources/ui/app/services/save-job.js
new file mode 100644
index 0000000..d2e5fe2
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/services/save-job.js
@@ -0,0 +1,42 @@
+/*
+* 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.
+*/
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+ saveWorkflow(url, jobxml){
+ var deferred = Ember.RSVP.defer();
+ Ember.$.ajax({
+ url: url,
+ method: "POST",
+ dataType: "text",
+ contentType: "text/plain;charset=utf-8",
+ beforeSend: function(request) {
+ request.setRequestHeader("X-XSRF-HEADER", Math.round(Math.random()*100000));
+ request.setRequestHeader("X-Requested-By", "workflow-designer");
+ },
+ data: jobxml,
+ success: function(response) {
+ deferred.resolve(response);
+ }.bind(this),
+ error: function(response) {
+ deferred.reject(response);
+ }.bind(this)
+ });
+ return deferred;
+ }
+});
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
index 5d1b3a3..036f529 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/styles/app.less
@@ -63,6 +63,9 @@ a {
.marginright5{
margin-right: 5px !important;
}
+.padding15pcnt {
+ padding:15%;
+}
#arrow{
top: 24%;
left: -22px;
@@ -417,10 +420,6 @@ input:invalid {
white-space: nowrap;
}
-.breadcrumb {
- margin: 0;
-}
-
.collapse.width {
height: auto;
-webkit-transition: width 0.35s ease;
@@ -698,7 +697,7 @@ input:invalid {
display: none !important;
}
#search-bar .bootstrap-tagsinput {
- width: 260px;
+ width: 300px;
border-radius: 0px;
line-height: 20px;
vertical-align: top;
@@ -716,7 +715,7 @@ input:invalid {
border: 1px solid rgba(0,0,0,0.2);
margin-top: 7px;
background-color: white;
- width: 60% !important;
+ width: auto;
padding: 0 5px;
}
#job-detail-app-path{
@@ -741,6 +740,7 @@ input:invalid {
height: 24px;
margin-left: 10px;
line-height: 30px;
+ display: inline-block;
}
.info {
@@ -869,11 +869,11 @@ input:invalid {
#loading {
position: absolute;
- top: 90px;
- left: 0;
+ top: 20%;
+ left: 30%;
display: none;
- width: 100vw;
- height: 80vh;
+ width: 50vw;
+ height: 40vh;
overflow: hidden;
z-index: 1;
}
@@ -1188,9 +1188,7 @@ input:invalid {
}
.wf-path {
font-size: 12px;
- float: left;
color: gray;
- margin-top: 17px;
max-width: 150px;
text-overflow: ellipsis;
white-space: nowrap;
@@ -1318,6 +1316,9 @@ input:invalid {
border: 1px solid @defaultRed;
}
+.cy-panzoom-panner{
+ display:none;
+}
.decision-condition-label {
border-bottom: 1px solid #D0D0D0;
padding: 3px;
@@ -1495,3 +1496,50 @@ input:invalid {
max-height: 400px;
overflow: scroll;
}
+.jobIdClass {
+ width: 50px;
+}
+.width50 {
+ white-space: nowrap;
+ width: 150px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.twitter-typeahead .tt-input {
+ width:250px;
+}
+
+.breadcrumb {
+ padding: 0px;
+ margin: 0px;
+}
+
+.breadcrumb-item {
+ color: #777;
+ font-size: 11px;
+}
+
+.breadcrumb-item a {
+ color: #777;
+}
+
+.action-file-picker {
+ display: inline-block;
+}
+.prettyprint .CodeMirror {
+ height:auto;
+}
+#id{
+ width: 500px;
+}
+#xmlCodeStream{
+ width: 580px;
+ border: 1px solid #dddd;
+}
+.create-wf-menu{
+ display: inline-block;
+}
+.inlineBlock{
+ display:inline-block;
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
index 27168a4..698535f 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-config.hbs
@@ -29,34 +29,32 @@
</div>
</div>
<div class="navbar-brand pull-right paddingtop8 col-xs-18">
+ <div class="dropdown inlineBlock">
+ <button class="btn btn-default dropdown-toggle borderRightRadiusNone" type="button" data-toggle="dropdown">Bundle
+ <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ <li>
+ <a class="pointer" title="Import workflow" {{action "openFileBrowser" "bundleFilePath"}}>
+ <i class="fa fa-download"> Import</i>
+ </a>
+ </li>
+ <li>
+ <a class="pointer" href="#" data-toggle="modal" data-target="#previewModal" title="Preview Xml" {{action "preview"}}>
+ <i class="fa fa-eye marginright5"></i>Preview xml
+ </a>
+ </li>
+ </ul>
+ </div>
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#ConfirmDialog" title="New Workflow" {{action "confirmReset"}}>
<i class="fa fa-refresh"> Reset</i>
</button>
- <button type="button" class="btn btn-default" title="Import workflow" {{action "openFileBrowser" "bundleFilePath"}}>
- <i class="fa fa-download"> Import</i>
+ <button type="button" class="btn btn-default" title="Bundle Versions" {{action "showVersionSettings" true}}>
+ <i class="fa fa-cog marginright5"></i>Versions
</button>
<button id="import-bundle-test" type="button" class="btn btn-default hide" title="Import Bundle Test" {{action "importBundleTest"}}>
<i class="fa fa-download"></i>
</button>
- <div class="btn-group">
- <div class="dropdown">
- <button class="btn btn-default dropdown-toggle borderRadiusNone" type="button" data-toggle="dropdown"><i class="marginright5"></i>More
- <span class="caret"></span></button>
- <ul class="dropdown-menu">
- <li>
- <a href="javascript:void(0)" data-toggle="modal" data-target="#previewModal" title="Preview Xml" {{action "preview"}}>
- <i class="fa fa-eye marginright5"></i>Preview xml
- </a>
- </li>
- <!-- <li>
- <a href="javascript:void(0)" data-toggle="modal" title="Download workflow" {{action "downloadWorkflowXml"}}>
- <i class="fa fa-download marginright5"></i>Download xml
- </a>
- </li> -->
- </ul>
- </div>
- </div>
<button type="button" class="btn btn-primary" title="Submit Bundle" {{action "submitBundle"}}>
<i class="fa fa-upload"> Submit</i>
</button>
@@ -66,6 +64,7 @@
</div>
</nav>
<div class="container-fluid">
+ {{designer-errors errors=errors}}
<form class="form-horizontal">
<div class="col-sm-12 paddingtop10">
<div class="col-sm-8 centralize-panel">
@@ -127,3 +126,6 @@
{{#if showingPreview}}
{{#preview-dialog title="Bundle XML Preview" previewXml=previewXml}}{{/preview-dialog}}
{{/if}}
+{{#if showVersionSettings}}
+ {{bundle-version-settings schemaVersions=bundle.schemaVersions showVersionSettings="showVersionSettings" }}
+{{/if}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
index 86a49b9..140ff0a 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-coord-config.hbs
@@ -17,13 +17,6 @@
}}
<div class="well">
<div class="form-group">
- <label class="control-label col-xs-2">Coordinator Name<span class="requiredField"> *</span></label>
- <div class="col-xs-7">
- {{input type="text" class="form-control" name="name" value=coordinator.name placeholder="Coordinator Name"}}
- {{#field-error model=this field='coordinator.name' showErrorMessage=showErrorMessage}}{{/field-error}}
- </div>
- </div>
- <div class="form-group">
<label class="control-label col-xs-2">Coordinator Path<span class="requiredField"> *</span></label>
<div class="col-xs-7">
<div class="input-group">
@@ -33,12 +26,16 @@
<button class="btn btn-default" type="button" {{action "openTab" 'coord' coordinator.appPath}} name="button"><i class="fa fa-external-link"></i></button>
</span>
</div>
- {{#if coordinatorName}}
- <span title="Name of the coordinator">({{coordinatorName}})</span>
- {{/if}}
{{#field-error model=this field='coordinator.appPath' showErrorMessage=showErrorMessage}}{{/field-error}}
</div>
</div>
+ <div class="form-group">
+ <label class="control-label col-xs-2">Coordinator Name<span class="requiredField"> *</span></label>
+ <div class="col-xs-7">
+ {{input type="text" class="form-control" name="name" value=coordinator.name placeholder="Coordinator Name"}}
+ {{#field-error model=this field='coordinator.name' showErrorMessage=showErrorMessage}}{{/field-error}}
+ </div>
+ </div>
<div class="panel panel-default">
<div class="panel-heading">Configuration</div>
<div class="panel-body handlerPanel">
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
index f6b491b..97eb859 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-job-details.hbs
@@ -58,7 +58,6 @@
<thead>
<tr>
<th>Name</th>
- <th>Type</th>
<th>Status</th>
<th>User</th>
<th>Group</th>
@@ -66,13 +65,13 @@
<th>Time Unit</th>
<th>Start Time</th>
<th>End Time</th>
+ <th>Job Id</th>
</tr>
</thead>
<tbody>
{{#each model.bundleCoordJobs as |coordJob|}}
<tr {{action 'showCoord' coordJob.coordJobId}} class="{{if (eq actionInfo model.actionDetails) "active"}}">
- <td class="pointer">{{coordJob.coordJobId}}</td>
- <td>{{coordJob.coordJobName}}</td>
+ <td class="pointer">{{coordJob.coordJobName}}</td>
<td>{{coordJob.status}}</td>
<td>{{coordJob.user}}</td>
<td>{{coordJob.group}}</td>
@@ -80,6 +79,7 @@
<td>{{coordJob.timeUnit}}</td>
<td>{{coordJob.startTime}}</td>
<td>{{coordJob.endTime}}</td>
+ <td>{{coordJob.coordJobId}}</td>
</tr>
{{/each}}
</tbody>
@@ -88,7 +88,9 @@
<div role="tabpanel" class="tab-pane" id="jobDefinition">
<div class="panel panel-default">
<div class="panel-body preview">
- <pre class="prettyprint">{{model.jobDefinition}}</pre>
+ <pre class="prettyprint">
+ {{ivy-codemirror value=jobDefinition options=(hash lineNumbers=false mode="xml" indentWithTabs=true readOnly=true)}}
+ </pre>
</div>
</div>
</div>
@@ -103,7 +105,7 @@
</tr>
</thead>
<tbody>
- {{#each model.configurationProperties as |configurationProperty|}}
+ {{#each configurationProperties as |configurationProperty|}}
<tr>
<td class="propertyName">{{configurationProperty.name}}</td>
<td class="propertyValue">{{configurationProperty.value}}</td>
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-version-settings.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-version-settings.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-version-settings.hbs
new file mode 100644
index 0000000..6d6f675
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/bundle-version-settings.hbs
@@ -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 id="version-settings-dialog" class="modal fade" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" {{action "cancel"}}>×</button>
+ <h4 class="modal-title">Version Configuration</h4>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="form-group">
+ <label class="control-label col-xs-3"> Bundle Version</label>
+ <div class="col-xs-7">
+ <select onchange={{action (mut currentBundleVersion) value="target.value"}} name="select-version" class="form-control">
+ {{#each bundleSchemaVersions as |version index|}}
+ <option value={{version}} selected={{eq currentBundleVersion version}}>{{version}}</option>
+ {{/each}}
+ </select>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" {{action "cancel"}}>Cancel</button>
+ <button type="button" class="btn btn-primary" {{action "save"}} data-dismiss="modal">Save</button>
+ </div>
+ </div>
+ </div>
+</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
index a6edcec..f26c2ec 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-config.hbs
@@ -24,19 +24,31 @@
<label for="wf_title">Name </label>
{{input class="form-control" type="text" name="coord_title" value=coordinator.name title="Coordinator Name" placeholder="Coordinator Name"}}
{{#if (v-get this 'coordinator.name' 'isInvalid')}}
- <span class="text-danger" title="Name is required"><i class="fa fa-close"></i>Name is required</span>
+ <span class="text-danger" title="Name is required"><i class="fa fa-close"></i>Name is required</span>
{{/if}}
</div>
</div>
<div class="navbar-brand pull-right paddingtop8 col-xs-18">
+ <div class="dropdown inlineBlock">
+ <button class="btn btn-default dropdown-toggle borderRightRadiusNone" type="button" data-toggle="dropdown">Coordinator
+ <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ <li>
+ <a class="pointer" title="Import workflow" {{action "openFileBrowser" "coordinatorFilePath"}}>
+ <i class="fa fa-download"> Import</i>
+ </a>
+ </li>
+ <li>
+ <a class="pointer" href="#" data-toggle="modal" data-target="#previewModal" title="Preview Xml" {{action "preview"}}>
+ <i class="fa fa-eye marginright5"></i>Preview xml
+ </a>
+ </li>
+ </ul>
+ </div>
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#ConfirmDialog" title="New Workflow" {{action "confirmReset"}}>
<i class="fa fa-refresh"> Reset</i>
</button>
- <button type="button" class="btn btn-default" title="Import workflow" {{action "openFileBrowser" "coordinatorFilePath"}}>
- <i class="fa fa-download"> Import</i>
- </button>
-
<button id="import-test" type="button" class="btn btn-default hide" title="Import coordinator Test" {{action "importCoordinatorTest"}}>
<i class="fa fa-download"></i>
</button>
@@ -44,100 +56,88 @@
<i class="fa fa-cog marginright5"></i>Parameters
</button>
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#control-dialog" title="Coordinator Controls" {{action "showControlConfig"}}>
- <i class="fa fa-wrench marginright5"></i>Controls
+ <i class="fa fa-wrench marginright5"></i>Controls
+ </button>
+ <button type="button" class="btn btn-default" title="Coordinator Versions" {{action "showVersionSettings" true}}>
+ <i class="fa fa-cog marginright5"></i>Versions
</button>
- <div class="btn-group">
- <div class="dropdown">
- <button class="btn btn-default dropdown-toggle borderRadiusNone" type="button" data-toggle="dropdown"><i class="marginright5"></i>More
- <span class="caret"></span></button>
- <ul class="dropdown-menu">
- <li>
- <a href="javascript:void(0)" data-toggle="modal" data-target="#previewModal" title="Preview Xml" {{action "preview"}}>
- <i class="fa fa-eye marginright5"></i>Preview xml
- </a>
- </li>
- <!-- <li>
- <a href="javascript:void(0)" data-toggle="modal" title="Download workflow" {{action "downloadWorkflowXml"}}>
- <i class="fa fa-download marginright5"></i>Download xml
- </a>
- </li> -->
- </ul>
- </div>
- </div>
<button type="button" class="btn btn-primary" title="Submit Coordinator" {{action "submitCoordinator"}}>
<i class="fa fa-upload marginright5"></i>Submit
</button>
- </div>
</div>
</div>
</div>
- </nav>
- <div class="container-fluid">
- <form class="form-horizontal">
- <div class="col-sm-12 paddingtop10">
- <div class="col-sm-8 centralize-panel">
- <div class="panel panel-default">
- <div class="panel-body">
- <div class="form-group">
- <label class="control-label col-xs-2">Workflow Path<span class="requiredField"> *</span></label>
- <div class="col-xs-7">
- <div class="input-group">
- {{input type="text" class="form-control" name="appPath" focus-out="showWorkflowName" value=coordinator.workflow.appPath placeholder="Path of the workflow file"}}
- <span class="input-group-btn">
- <button class="btn btn-primary" type="button" {{action "openFileBrowser" "coordinator.workflow.appPath"}}>Browse</button>
- <button class="btn btn-default" type="button" {{action "openTab" 'wf' coordinator.workflow.appPath}} name="button"><i class="fa fa-external-link"></i></button>
- </span>
- </div>
- {{#if workflowName}}
- <span title="Name of the workflow">({{workflowName}})</span>
- {{/if}}
- {{#field-error model=this field='coordinator.workflow.appPath' showErrorMessage=showErrorMessage}}{{/field-error}}
+ </div>
+</nav>
+<div class="container-fluid">
+ {{designer-errors errors=errors}}
+ <form class="form-horizontal">
+ <div class="col-sm-12 paddingtop10">
+ <div class="col-sm-8 centralize-panel">
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="form-group">
+ <label class="control-label col-xs-2">Workflow Path<span class="requiredField"> *</span></label>
+ <div class="col-xs-7">
+ <div class="input-group">
+ {{input type="text" class="form-control" name="appPath" focus-out="showWorkflowName" value=coordinator.workflow.appPath placeholder="Path of the workflow file"}}
+ <span class="input-group-btn">
+ <button class="btn btn-primary" type="button" {{action "openFileBrowser" "coordinator.workflow.appPath"}}>Browse</button>
+ <button class="btn btn-default" type="button" {{action "openTab" 'wf' coordinator.workflow.appPath}} name="button"><i class="fa fa-external-link"></i></button>
+ </span>
</div>
+ {{#if workflowName}}
+ <span title="Name of the workflow">({{workflowName}})</span>
+ {{/if}}
+ {{#field-error model=this field='coordinator.workflow.appPath' showErrorMessage=showErrorMessage}}{{/field-error}}
</div>
- <div class="form-group">
- <label class="control-label col-xs-2">Frequency<span class="requiredField"> *</span></label>
- <div class="col-xs-2">
- <select class="form-control" name="frequency-type" title="Frequency type" onchange={{action (mut coordinator.frequency.type) value="target.value"}}>
- {{#each timeUnitOptions as |timeUnit|}}
- <option value={{timeUnit.value}} selected={{eq timeUnit.value coordinator.frequency.type}}>{{timeUnit.displayName}}</option>
- {{/each}}
- </select>
- {{#field-error model=this field='coordinator.frequency.type' showErrorMessage=showErrorMessage}}{{/field-error}}
- </div>
- <div class="col-xs-3">
- {{input class="form-control" type="text" value=coordinator.frequency.value placeholder="frequency" title="Periodic intervals at which datasets that are produced, and coordinator applications are scheduled to run"}}
- {{field-error model=this field='coordinator.frequency.value' showErrorMessage=showErrorMessage}}
- </div>
+ </div>
+ <div class="form-group">
+ <label class="control-label col-xs-2">Frequency<span class="requiredField"> *</span></label>
+ <div class="col-xs-2">
+ <select class="form-control" name="frequency-type" title="Frequency type" onchange={{action (mut coordinator.frequency.type) value="target.value"}}>
+ {{#each timeUnitOptions as |timeUnit|}}
+ <option value={{timeUnit.value}} selected={{eq timeUnit.value coordinator.frequency.type}}>{{timeUnit.displayName}}</option>
+ {{/each}}
+ </select>
+ {{#field-error model=this field='coordinator.frequency.type' showErrorMessage=showErrorMessage}}{{/field-error}}
</div>
- {{#date-with-expr required=true inputName="start" label="Start" inputPlaceholder="Start Time" dateField=coordinator.start timezone=coordinator.timezone register="registerChild" deregister="deregisterChild"}}{{/date-with-expr}}
- {{#date-with-expr required=true inputName="end" label="End" inputPlaceholder="End Time" dateField=coordinator.end timezone=coordinator.timezone register="registerChild" deregister="deregisterChild"}}{{/date-with-expr}}
- <div class="form-group">
- <label for="" class="control-label col-xs-2">Time Zone<span class="requiredField"> *</span></label>
- <div class="col-xs-7">
- <select onchange={{action (mut coordinator.timezone) value="target.value"}} name="select-input" class="form-control" data-show-icon="true">
- {{#each timezoneList as |timezone index|}}
- <option value={{timezone.value}} selected={{eq timezone.value coordinator.timezone}}>{{timezone.displayName}}</option>
- {{/each}}
- </select>
- {{field-error model=this field='coordinator.timezone' showErrorMessage=showErrorMessage}}
- </div>
+ <div class="col-xs-3">
+ {{input class="form-control" type="text" value=coordinator.frequency.value placeholder="frequency" title="Periodic intervals at which datasets that are produced, and coordinator applications are scheduled to run"}}
+ {{field-error model=this field='coordinator.frequency.value' showErrorMessage=showErrorMessage}}
</div>
- <div class="panel panel-default">
- <div class="panel-heading clearfix">
- <h4 class="panel-title pull-left paddingtop7">Configuration</h4>
- </div>
- <div class="panel-body handlerPanel">
- {{#name-value-config configuration=coordinator.workflow.configuration}}{{/name-value-config}}
- </div>
+ </div>
+ {{#date-with-expr required=true inputName="start" label="Start" inputPlaceholder="Start Time" dateField=coordinator.start timezone=coordinator.timezone register="registerChild" deregister="deregisterChild"}}{{/date-with-expr}}
+ {{#date-with-expr required=true inputName="end" label="End" inputPlaceholder="End Time" dateField=coordinator.end timezone=coordinator.timezone register="registerChild" deregister="deregisterChild"}}{{/date-with-expr}}
+ <div class="form-group">
+ <label for="" class="control-label col-xs-2">Time Zone<span class="requiredField"> *</span></label>
+ <div class="col-xs-7">
+ <select onchange={{action (mut coordinator.timezone) value="target.value"}} name="select-input" class="form-control" data-show-icon="true">
+ {{#each timezoneList as |timezone index|}}
+ <option value={{timezone.value}} selected={{eq timezone.value coordinator.timezone}}>{{timezone.displayName}}</option>
+ {{/each}}
+ </select>
+ {{field-error model=this field='coordinator.timezone' showErrorMessage=showErrorMessage}}
</div>
- {{#sla-info slaInfo=coordinator.slaInfo register="registerChild" slaEnabled=coordinator.slaEnabled}}{{/sla-info}}
</div>
- </div>
- <div class="panel panel-default">
- <div class="panel-heading clearfix">
- <h4 class="panel-title pull-left paddingtop7">Data</h4>
+ <div class="panel panel-default">
+ <div class="panel-heading clearfix">
+ <h4 class="panel-title pull-left paddingtop7">Configuration</h4>
+ </div>
+ <div class="panel-body handlerPanel">
+ {{#name-value-config configuration=coordinator.workflow.configuration}}{{/name-value-config}}
+ </div>
</div>
- <div class="panel-body handlerPanel">
+
+ </div>
+ </div>
+ <div class="panel panel-default">
+ <div class="panel-heading clearfix" data-toggle="collapse" data-target="#collapse">
+ <h4 class="panel-title pull-left paddingtop7">Input / Output Configuration</h4>
+ <i class="indicator glyphicon glyphicon-chevron-down pull-right paddingtop7"></i>
+ </div>
+ <div id="collapse" class="panel-collapse collapse">
+ <div class="panel-body">
<div class="panel panel-default">
<div class="panel-heading clearfix">
<h4 class="panel-title pull-left paddingtop7">Datasets</h4>
@@ -162,18 +162,16 @@
{{/each}}
</ul>
{{#if datasetCreateMode}}
- {{#dataset-config dataset=currentDataset add="addDataset" cancel="cancelDatasetOperation" createMode=datasetCreateMode}}{{/dataset-config}}
+ {{#dataset-config dataset=currentDataset add="addDataset" cancel="cancelDatasetOperation" createMode=datasetCreateMode}}{{/dataset-config}}
{{/if}}
{{#if datasetEditMode}}
- {{#dataset-config dataset=currentDataset update="updateDataset" cancel="cancelDatasetOperation" editMode=datasetEditMode}}{{/dataset-config}}
+ {{#dataset-config dataset=currentDataset update="updateDataset" cancel="cancelDatasetOperation" editMode=datasetEditMode}}{{/dataset-config}}
{{/if}}
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading clearfix">
- <h4 class="panel-title pull-left paddingtop7">Inputs</h4>
- </div>
- <div class="panel-body handlerPanel">
+ <h4 class="panel-title pull-left paddingtop7">Input Data Events</h4>
{{#if coordinator.supportsConditionalDataInput}}
<div class="">
<label for="" class="control-label col-xs-2">Data Input Type</label>
@@ -187,65 +185,62 @@
</div>
</div>
{{/if}}
+ {{#if (eq coordinator.dataInputType 'simple')}}
+ <button id="dataset-create-btn" {{action 'createDataInput'}} type="button" class="btn btn-default pull-right">
+ <i class="fa fa-plus-circle"></i> Add Data Input
+ </button>
+ {{else}}
+ {{#if (not conditionalDataInExists)}}
+ <button id="condition-create-btn" {{action 'createCondition'}} type="button" class="btn btn-default pull-right">
+ <i class="fa fa-plus-circle"></i> Add Condition
+ </button>
+ {{/if}}
+ {{/if}}
+ </div>
+ <div class="panel-body">
+ {{#if (eq coordinator.dataInputType 'simple')}}
+ <ul class="list-group">
+ {{#each coordinator.dataInputs as |data index|}}
+ <li class="list-group-item">
+ {{data.name}}
+ <span class="pull-right">
+ <i class="fa fa-trash-o" title="Delete" {{action "deleteDataInput" index bubbles=false}}></i>
+ </span>
+ <span class="pull-right paddingright10">
+ <i class="fa fa-pencil" title="Edit" {{action "editDataInput" index bubbles=false}}></i>
+ </span>
+ </li>
+ {{else}}
+ <li class="list-group-item">No Data inputs Configured</li>
+ {{/each}}
+ </ul>
+ {{#if dataInputCreateMode}}
+ {{#data-input-output-config datasets=datasetsForInputs data=currentDataInput type="input" add="addDataInput" cancel="cancelDataInputOperation" createMode=dataInputCreateMode}}{{/data-input-output-config}}
+ {{/if}}
+ {{#if dataInputEditMode}}
+ {{#data-input-output-config datasets=datasetsForInputs data=currentDataInput type="input" update="updateDataInput" cancel="cancelDataInputOperation" editMode=dataInputEditMode}}{{/data-input-output-config}}
+ {{/if}}
+ {{/if}}
+ {{#if (eq coordinator.dataInputType 'logical')}}
+ <ul class="list-groups">
+ {{#if conditionalDataInExists}}
+ <li class="list-group-item">
+ {{#conditional-data-input condition=coordinator.conditionalDataInput datasets=datasetsForInputs isToplevel=true register="registerChild" deregister="deregisterChild"}}
+ <span class="pull-right">
+ <i class="fa fa-trash-o" title="Delete" {{action "deleteCondition" index bubbles=false}}></i>
+ </span>
+ {{/conditional-data-input}}
+ </li>
+ {{else}}
+ <li class="list-group-item">No Conditional Data Inputs Configured</li>
+ {{/if}}
+ </ul>
+ {{/if}}
+ {{input type="checkbox" checked=inputLogicEnabled}} Advanced
+ {{#if inputLogicEnabled}}
<div class="panel panel-default">
<div class="panel-heading clearfix">
- <h4 class="panel-title pull-left paddingtop7">Datasets</h4>
- {{#if (eq coordinator.dataInputType 'simple')}}
- <button id="dataset-create-btn" {{action 'createDataInput'}} type="button" class="btn btn-default pull-right">
- <i class="fa fa-plus-circle"></i> Add Data Input
- </button>
- {{else}}
- {{#if (not conditionalDataInExists)}}
- <button id="condition-create-btn" {{action 'createCondition'}} type="button" class="btn btn-default pull-right">
- <i class="fa fa-plus-circle"></i> Add Condition
- </button>
- {{/if}}
- {{/if}}
- </div>
- <div class="panel-body">
- {{#if (eq coordinator.dataInputType 'simple')}}
- <ul class="list-group">
- {{#each coordinator.dataInputs as |data index|}}
- <li class="list-group-item">
- {{data.name}}
- <span class="pull-right">
- <i class="fa fa-trash-o" title="Delete" {{action "deleteDataInput" index bubbles=false}}></i>
- </span>
- <span class="pull-right paddingright10">
- <i class="fa fa-pencil" title="Edit" {{action "editDataInput" index bubbles=false}}></i>
- </span>
- </li>
- {{else}}
- <li class="list-group-item">No Data inputs Configured</li>
- {{/each}}
- </ul>
- {{#if dataInputCreateMode}}
- {{#data-input-output-config datasets=datasetsForInputs data=currentDataInput type="input" add="addDataInput" cancel="cancelDataInputOperation" createMode=dataInputCreateMode}}{{/data-input-output-config}}
- {{/if}}
- {{#if dataInputEditMode}}
- {{#data-input-output-config datasets=datasetsForInputs data=currentDataInput type="input" update="updateDataInput" cancel="cancelDataInputOperation" editMode=dataInputEditMode}}{{/data-input-output-config}}
- {{/if}}
- {{/if}}
- {{#if (eq coordinator.dataInputType 'logical')}}
- <ul class="list-groups">
- {{#if conditionalDataInExists}}
- <li class="list-group-item">
- {{#conditional-data-input condition=coordinator.conditionalDataInput datasets=datasetsForInputs isToplevel=true register="registerChild" deregister="deregisterChild"}}
- <span class="pull-right">
- <i class="fa fa-trash-o" title="Delete" {{action "deleteCondition" index bubbles=false}}></i>
- </span>
- {{/conditional-data-input}}
- </li>
- {{else}}
- <li class="list-group-item">No Conditional Data Inputs Configured</li>
- {{/if}}
- </ul>
- {{/if}}
- </div>
- </div>
- <div class="panel panel-default">
- <div class="panel-heading clearfix">
- <h4 class="panel-title pull-left paddingtop7">Conditional Inputs</h4>
+ <h4 class="panel-title pull-left paddingtop7">Input Logic</h4>
{{#if (not inputLogicExists)}}
<button id="condition-create-btn" {{action 'createInputLogic'}} type="button" class="btn btn-default pull-right">
<i class="fa fa-plus-circle"></i> Add Condition
@@ -263,16 +258,17 @@
{{/conditional-data-input}}
</li>
{{else}}
- <li class="list-group-item">No Conditional Data Inputs Configured</li>
+ <li class="list-group-item">No Input Logic Configured</li>
{{/if}}
</ul>
</div>
</div>
+ {{/if}}
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading clearfix">
- <h4 class="panel-title pull-left paddingtop7">Outputs</h4>
+ <h4 class="panel-title pull-left paddingtop7">Output Data Events</h4>
<button id="dataset-create-btn" {{action 'createDataOutput'}} type="button" class="btn btn-default pull-right">
<i class="fa fa-plus-circle"></i> Add Data Output
</button>
@@ -294,59 +290,66 @@
{{/each}}
</ul>
{{#if dataOutputCreateMode}}
- {{#data-input-output-config datasets=datasetsForOutputs data=currentDataOutput type="output" add="addDataOutput" cancel="cancelDataOutputOperation" createMode=dataOutputCreateMode}}{{/data-input-output-config}}
+ {{#data-input-output-config datasets=datasetsForOutputs data=currentDataOutput type="output" add="addDataOutput" cancel="cancelDataOutputOperation" createMode=dataOutputCreateMode}}{{/data-input-output-config}}
{{/if}}
{{#if dataOutputEditMode}}
- {{#data-input-output-config datasets=datasetsForOutputs data=currentDataOutput type="output" update="updateDataOutput" cancel="cancelDataOutputOperation" editMode=dataOutputEditMode}}{{/data-input-output-config}}
+ {{#data-input-output-config datasets=datasetsForOutputs data=currentDataOutput type="output" update="updateDataOutput" cancel="cancelDataOutputOperation" editMode=dataOutputEditMode}}{{/data-input-output-config}}
{{/if}}
</div>
</div>
+
</div>
+
</div>
</div>
+ {{#sla-info slaInfo=coordinator.slaInfo register="registerChild" slaEnabled=coordinator.slaEnabled}}{{/sla-info}}
</div>
- </form>
- </div>
+ </div>
+ </form>
+</div>
</div>
{{#if showingFileBrowser}}
- {{hdfs-browser closeFileBrowser="closeFileBrowser" selectFileCallback=selectFileCallback filePath=filePath}}
+{{hdfs-browser closeFileBrowser="closeFileBrowser" selectFileCallback=selectFileCallback filePath=filePath}}
{{/if}}
{{#if showingJobConfig}}
- {{job-config type='coord' closeJobConfigs="closeCoordSubmitConfig" jobFilePath=coordinatorFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=coordinatorConfigs}}
+{{job-config type='coord' closeJobConfigs="closeCoordSubmitConfig" jobFilePath=coordinatorFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=coordinatorConfigs}}
{{/if}}
{{#if showingResetConfirmation}}
- {{#confirmation-dialog title="Confirm Coordinator Reset"
- confirmationMessage="Any unsaved changes may be lost. Do you want to proceed resetting the coordinator ?"
- okBtnText="Continue" cancelBtnText="Cancel" onOk="resetCoordinator"}}{{/confirmation-dialog}}
+{{#confirmation-dialog title="Confirm Coordinator Reset"
+confirmationMessage="Any unsaved changes may be lost. Do you want to proceed resetting the coordinator ?"
+okBtnText="Continue" cancelBtnText="Cancel" onOk="resetCoordinator"}}{{/confirmation-dialog}}
{{/if}}
{{#if showingPreview}}
- {{#preview-dialog title="Coordinator XML Preview" previewXml=previewXml}}{{/preview-dialog}}
+{{#preview-dialog title="Coordinator XML Preview" previewXml=previewXml}}{{/preview-dialog}}
{{/if}}
{{#if showParameterSettings}}
- {{#workflow-parameters type='coord' closeWorkFlowParam="closeWorkFlowParam" saveWorkFlowParam="saveWorkFlowParam" parameters=parameters}}{{/workflow-parameters}}
+{{#workflow-parameters type='coord' closeWorkFlowParam="closeWorkFlowParam" saveWorkFlowParam="saveWorkFlowParam" parameters=parameters}}{{/workflow-parameters}}
+{{/if}}
+{{#if showVersionSettings}}
+ {{coord-version-settings schemaVersions=coordinator.schemaVersions showVersionSettings="showVersionSettings" }}
{{/if}}
{{#if showControlConfig}}
- <div id="control-dialog" class="modal fade" role="dialog">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal">×</button>
- <h4 class="modal-title">Controls</h4>
- </div>
- <div class="modal-body">
- <div class="panel panel-default">
- <div class="panel-body handlerPanel form-horizontal">
- {{#each coordinatorControls as |property|}}
- {{#named-properties property=property labelWidthClass="col-xs-4" inputWidthClass="col-xs-8"}}{{/named-properties}}
- {{/each}}
- </div>
+<div id="control-dialog" class="modal fade" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal">×</button>
+ <h4 class="modal-title">Controls</h4>
+ </div>
+ <div class="modal-body">
+ <div class="panel panel-default">
+ <div class="panel-body handlerPanel form-horizontal">
+ {{#each coordinatorControls as |property|}}
+ {{#named-properties property=property labelWidthClass="col-xs-4" inputWidthClass="col-xs-8"}}{{/named-properties}}
+ {{/each}}
</div>
</div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary" data-dismiss="modal" {{action "saveCoordControls"}}>Save</button>
- <button type="button" class="btn btn-default" data-dismiss="modal" onclick={{action (mut showControlConfig) false}}>Cancel</button>
- </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary" data-dismiss="modal" {{action "saveCoordControls"}}>Save</button>
+ <button type="button" class="btn btn-default" data-dismiss="modal" onclick={{action (mut showControlConfig) false}}>Cancel</button>
</div>
</div>
</div>
+</div>
{{/if}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
index 350f873..1418121 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-job-details.hbs
@@ -112,7 +112,9 @@
<div role="tabpanel" class="tab-pane" id="jobDefinition">
<div class="panel panel-default">
<div class="panel-body preview">
- <pre class="prettyprint">{{model.jobDefinition}}</pre>
+ <pre class="prettyprint">
+ {{ivy-codemirror value=jobDefinition options=(hash lineNumbers=false mode="xml" indentWithTabs=true readOnly=true)}}
+ </pre>
</div>
</div>
</div>
@@ -127,7 +129,7 @@
</tr>
</thead>
<tbody>
- {{#each model.configurationProperties as |configurationProperty|}}
+ {{#each configurationProperties as |configurationProperty|}}
<tr>
<td class="propertyName">{{configurationProperty.name}}</td>
<td class="propertyValue">{{configurationProperty.value}}</td>
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-version-settings.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-version-settings.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-version-settings.hbs
new file mode 100644
index 0000000..be862ac
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/coord-version-settings.hbs
@@ -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 id="version-settings-dialog" class="modal fade" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" {{action "cancel"}}>×</button>
+ <h4 class="modal-title">Version Configuration</h4>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="form-group">
+ <label class="control-label col-xs-3"> Coordinator Version</label>
+ <div class="col-xs-7">
+ <select onchange={{action (mut currentCoordinatorVersion) value="target.value"}} name="select-version" class="form-control">
+ {{#each coordinatorSchemaVersions as |version index|}}
+ <option value={{version}} selected={{eq currentCoordinatorVersion version}}>{{version}}</option>
+ {{/each}}
+ </select>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default" {{action "cancel"}}>Cancel</button>
+ <button type="button" class="btn btn-primary" {{action "save"}} data-dismiss="modal">Save</button>
+ </div>
+ </div>
+ </div>
+</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
index b775302..20e5b35 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/designer-workspace.hbs
@@ -26,81 +26,98 @@
</div>
<div class="col-sm-8">
<div class="text-right pull-right paddingtop7">
- <div class="btn-group btn-group" role="group" aria-label="buttons">
- <button id="wfs_btn" {{action 'show' 'wf'}} type="button" class="btn btn-default">
- <i class="fa fa-sitemap marginright5"></i>
- {{#if hasMultitabSupport}}
- New Workflow
- {{else}}
- Workflow
- {{/if}}
- </button>
- <button id="coords_btn" {{action 'show' 'coord'}} type="button" class="btn btn-default">
- <i class="fa fa-history marginright5"></i>
- {{#if hasMultitabSupport}}
- New Coordinator
- {{else}}
- Coordinator
- {{/if}}
- </button>
- <button id="bundles_btn" {{action 'show' 'bundle'}} type="button" class="btn btn-default">
- <i class="fa fa-cubes marginright5"></i>
- {{#if hasMultitabSupport}}
- New Bundle
- {{else}}
- Bundle
- {{/if}}
- </button>
- {{#link-to 'dashboard' class="backto-dashboard btn btn-default" title="Workflow Dashboard"}}
+ <div class="dropdown create-wf-menu">
+ <button class="btn btn-default dropdown-toggle borderRightRadiusNone" type="button" data-toggle="dropdown">Create
+ <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ <li>
+ <a id="wfs_btn" class="pointer" {{action 'show' 'wf'}}>
+ <i class="fa fa-sitemap marginright5"></i>
+ {{#if hasMultitabSupport}}
+ Workflow
+ {{else}}
+ Workflow
+ {{/if}}
+ </a>
+ </li>
+ <li>
+ <a id="coords_btn" class="pointer" {{action 'show' 'coord'}}>
+ <i class="fa fa-history marginright5"></i>
+ {{#if hasMultitabSupport}}
+ Coordinator
+ {{else}}
+ Coordinator
+ {{/if}}
+ </a>
+ </li>
+ <li>
+ <a id="bundles_btn" class="pointer" {{action 'show' 'bundle'}}>
+ <i class="fa fa-cubes marginright5"></i>
+ {{#if hasMultitabSupport}}
+ Bundle
+ {{else}}
+ Bundle
+ {{/if}}
+ </a>
+ </li>
+ </ul>
+ </div>
+ <button {{action 'showDashboard'}} class="backto-dashboard btn btn-default" title="Workflow Dashboard">
<i class="fa fa-th marginright5"></i>Dashboard
- {{/link-to}}
+ </button>
+ {{help-icon}}
</div>
- {{help-icon}}
</div>
</div>
</div>
- </div>
- </nav>
- <ul class="nav nav-tabs tab-panel-heading">
- {{#each tabs as |tab index|}}
- <li class="{{if (eq index currentIndex) 'active'}}" title="{{tab.filePath}}">
- <a href="#{{tab.id}}" data-toggle="tab" {{action 'interceptShow' tab}}>
+ </nav>
+ <ul class="nav nav-tabs tab-panel-heading">
+ {{#each tabs as |tab index|}}
+ <li class="{{if (eq index currentIndex) 'active'}}" title="{{tab.filePath}}" data-type="{{tab.type}}">
+ <a href="#{{tab.id}}" data-toggle="tab" {{action 'interceptShow' tab preventDefault=true}}>
{{#if (eq tab.type 'wf')}}
- <i class="fa fa-sitemap marginright5"></i>
+ <i class="fa fa-sitemap marginright5"></i>
{{else if (eq tab.type 'coord')}}
- <i class="fa fa-history marginright5"></i>
+ <i class="fa fa-history marginright5"></i>
{{else if (eq tab.type 'bundle')}}
- <i class="fa fa-cubes marginright5"></i>
+ <i class="fa fa-cubes marginright5"></i>
+ {{else}}
+ <i class="fa fa-th marginright5"></i>
{{/if}}
{{tab.name}}
<span class="closeTab" {{action "closeTab" index bubbles=false }}>x</span>
</a>
</li>
- {{/each}}
- </ul>
- <div class="tab-content">
- {{#each tabs as |tab index|}}
+ {{/each}}
+ </ul>
+ <div class="tab-content">
+ {{#each tabs as |tab index|}}
<div class="tab-pane {{if (eq index currentIndex) 'active'}}" id="{{tab.id}}">
{{#if (eq tab.type 'wf')}}
- {{flow-designer xmlAppPath=tab.path register="register" openTab="openTab" changeTabName="changeTabName" changeFilePath="changeFilePath" tabInfo=tab}}
+ {{flow-designer xmlAppPath=tab.path register="register" openTab="openTab" changeTabName="changeTabName"
+ changeFilePath="changeFilePath" tabInfo=tab}}
{{else if (eq tab.type 'coord')}}
- {{coord-config xmlAppPath=tab.path register="register" openTab="openTab" changeTabName="changeTabName" changeFilePath="changeFilePath" tabInfo=tab}}
+ {{coord-config xmlAppPath=tab.path register="register" openTab="openTab" changeTabName="changeTabName"
+ changeFilePath="changeFilePath" tabInfo=tab}}
{{else if (eq tab.type 'bundle')}}
- {{bundle-config register="register" openTab="openTab" changeTabName="changeTabName" changeFilePath="changeFilePath" tabInfo=tab}}
+ {{bundle-config register="register" openTab="openTab" changeTabName="changeTabName"
+ changeFilePath="changeFilePath" tabInfo=tab}}
+ {{else if (eq tab.type 'dashboard')}}
+ {{outlet}}
{{else}}
{{spin-spinner lines=7 length=3 width=3 radius=3 top=-10 left=150}}
{{/if}}
</div>
- {{/each}}
+ {{/each}}
+ </div>
</div>
-</div>
-<!--
+ <!--
{{#if (eq type 'wf')}}
- {{flow-designer xmlAppPath=appPath isNew=isNew}}
+ {{flow-designer xmlAppPath=appPath isNew=isNew}}
{{else if (eq type 'coord')}}
- {{coord-config}}
+ {{coord-config}}
{{else if (eq type 'bundle')}}
- {{bundle-config}}
+ {{bundle-config}}
{{else}}
- {{spin-spinner lines=7 length=3 width=3 radius=3 top=-10 left=150}}
+ {{spin-spinner lines=7 length=3 width=3 radius=3 top=-10 left=150}}
{{/if}} -->
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
index c8f0f0e..fa3215a 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/flow-designer.hbs
@@ -24,16 +24,58 @@
<label for="wf_title">Name</label>
{{input class="form-control job-title" type="text" name="wf_title" value=workflow.name title="Workflow Name" placeholder="Workflow Name"}}
</div>
+ {{#if workflowFilePath}}
+ <div class="form-group wf-path marginleft20" title={{workflowFilePath}}>
+ Path:{{ workflowFilePath}}
+ </div>
+ {{/if}}
</div>
- {{#if workflowFilePath}}
- <div class="wf-path padding20" title={{workflowFilePath}}>
- Path:{{ workflowFilePath}}
- </div>
- {{/if}}
- <div class="navbar-brand pull-right paddingtop8 col-xs-18">
- <button type="button" class="btn btn-default" title="Import workflow" {{action "showFileBrowser"}}>
+ <div class="navbar-brand pull-right paddingtop8 col-xs-18">
+ <div class="btn-group">
+ <div class="dropdown">
+ <button class="btn btn-default dropdown-toggle borderRightRadiusNone" type="button" data-toggle="dropdown">Workflow
+ <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ <li>
+ <!--a class="pointer" title="Save Draft" {{action "saveAsDraft"}}>
+ <i class="fa fa-download marginright5"></i>Save As Draft
+ </a-->
+ <a class="pointer" title="Import workflow from HDFS" {{action "showFileBrowser"}}>
+ <i class="fa fa-download marginright5"></i>Import from HDFS
+ </a>
+ <a class="pointer" title="Import workflow from Local File System">
+ {{#file-picker fileLoaded="fileLoaded" preview=false}}
+ <i class="fa fa-download marginright5"></i>Import from Local FS
+ {{/file-picker}}
+ </a>
+ <!--a class="pointer" title="Save workflow" {{action "saveWorkflow" "save"}}>
+ <i class="fa fa-floppy-o marginright5"></i>Save
+ </a>
+ <a class="pointer" title="Save workflow" {{action "saveWorkflow" }}>
+ <i class="fa fa-floppy-o marginright5"></i>Save As
+ </a-->
+ </li>
+ <li>
+ <a class="pointer" data-toggle="modal" title="Save workflow to local file system" {{action "downloadWorkflowXml"}}>
+ <i class="fa fa-download marginright5"></i>Export
+ </a>
+ </li>
+ <li>
+ <a class="pointer" data-toggle="modal" data-target="#previewModal" title="Preview workflow" {{action "previewWorkflow"}}>
+ <i class="fa fa-eye marginright5"></i>Preview xml
+ </a>
+ </li>
+ <!--li>
+ <a class="pointer" title="Create a coordinator with the workflow" {{action "scheduleWorkflow"}}>
+ <i class="fa fa-eye marginright5"></i>Schedule
+ </a>
+ </li-->
+ </ul>
+ </div>
+ </div>
+ <!--button type="button" class="btn btn-default" title="Import workflow" {{action "showFileBrowser"}}>
<i class="fa fa-download marginright5"></i>Import
- </button>
+ </button-->
<button id="import-workflow-test" type="button" class="btn btn-default hide" title="Import workflow Test" {{action "importWorkflowTest"}}>
<i class="fa fa-download"></i>
</button>
@@ -43,13 +85,13 @@
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li>
- <a data-toggle="modal" data-target="#ConfirmDialog" title="Reset Workflow" {{action "conirmCreatingNewWorkflow"}}>
+ <a class="pointer" data-toggle="modal" data-target="#ConfirmDialog" title="Reset Workflow" {{action "conirmCreatingNewWorkflow"}}>
Reset Workflow
</a>
</li>
{{#if useCytoscape}}
<li>
- <a title="Reset Layout" {{action "resetLayout"}}>
+ <a class="pointer" title="Reset Layout" {{action "resetLayout"}}>
Reset Layout
</a>
</li>
@@ -64,10 +106,10 @@
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li>
- <a data-toggle="modal" title="Create Kill Node" {{action "showCreateKillNode" true}}>
+ <a class="pointer" data-toggle="modal" title="Create Kill Node" {{action "showCreateKillNode" true}}>
Create Kill Node
</a>
- <a data-toggle="modal" title="Manage Kill Nodes" {{action "showKillNodeManager" true}}>
+ <a class="pointer" data-toggle="modal" title="Manage Kill Nodes" {{action "showKillNodeManager" true}}>
Manage Kill Nodes
</a>
</li>
@@ -101,13 +143,13 @@
</ul>
</div>
</div>
- <div class="btn-group">
+ <!--div class="btn-group">
<div class="dropdown">
<button class="btn btn-default dropdown-toggle borderRadiusNone" type="button" data-toggle="dropdown"><i class="marginright5"></i>More
<span class="caret"></span></button>
<ul class="dropdown-menu">
<li>
- <a href="javascript:void(0)" data-toggle="modal" data-target="#previewModal" title="Preview workflow" {{action "previewWorkflow"}}>
+ <a href="#" data-toggle="modal" data-target="#previewModal" title="Preview workflow" {{action "previewWorkflow"}}>
<i class="fa fa-eye marginright5"></i>Preview xml
</a>
</li>
@@ -118,12 +160,9 @@
</li>
</ul>
</div>
- </div>
- <button type="button" class="btn btn-default" title="Submit workflow" {{action "saveWorkflow"}}>
- <i class="fa fa-floppy-o marginright5"></i>Save
- </button>
- <button type="button" class="btn btn-primary" title="Dry run workflow" {{action "dryRunWorkflow"}}>
- <i class="fa fa-play marginright5"></i> Test Run
+ </div-->
+ <button type="button" class="btn btn-default" title="Validate workflow" {{action "dryRunWorkflow"}}>
+ <i class="fa fa-play marginright5"></i>Validate
</button>
<button type="button" class="btn btn-primary" title="Submit workflow" {{action "submitWorkflow"}}>
<i class="fa fa-upload marginright5"></i>Submit
@@ -137,7 +176,7 @@
{{component hoveredWidget hoveredAction=hoveredAction hideNotification="hideNotification"}}
{{/if}}
<div id="content" class="panel panel-default designer-main-panel col-xs-20">
- <div class="panel-body designer-panel designer-canvas">
+ <div class="designer-panel designer-canvas">
{{designer-errors errors=errors validationErrors=validationErrors}}
{{#if undoAvailable}}
<div id="alert"class="alert alert-warning" role="alert">
@@ -156,20 +195,34 @@
</div>
{{/if}}
{{#unless isImportingSuccess}}
- <div id="loader">
- <div id="alert"class="alert alert-danger alert-dismissible" role="alert">
- There is some problem while importing.Please try again.
- {{#if isStackTraceAvailable}}
- {{#if isStackTraceVisible}}
- <a href="#" {{action "hideStackTrace"}}>Hide Log</a>
- <div id="stackTrace">{{{stackTrace}}}</div>
+ <div id="loader">
+ <div id="alert"class="alert alert-danger alert-dismissible" role="alert">
+ {{errorMsg}}
+ {{#if isStackTraceAvailable}}
+ {{#if isStackTraceVisible}}
+ <a href="#" {{action "hideStackTrace"}}>Hide Log</a>
+ <div id="stackTrace">{{{stackTrace}}}</div>
+ {{/if}}
+ {{#unless isStackTraceVisible}}
+ <a href="#" {{action "showStackTrace"}}>Show Log</a>
+ {{/unless}}
{{/if}}
- {{#unless isStackTraceVisible}}
- <a href="#" {{action "showStackTrace"}}>Show Log</a>
- {{/unless}}
- {{/if}}
- </div>
- </div>
+ </div>
+ </div>
+ {{/unless}}
+ {{#if isAssetPublishing}}
+ <div id="loader">
+ <div id="alert"class="alert alert-info alert-dismissible" role="alert">
+ Publishing asset. Please wait...
+ </div>
+ </div>
+ {{/if}}
+ {{#unless isPublishingSuccess}}
+ <div id="loader">
+ <div id="alert"class="alert alert-danger alert-dismissible" role="alert">
+ {{errorMsg}}
+ </div>
+ </div>
{{/unless}}
<div id="flow-designer">
{{#each flattenedNodes as |node|}}
@@ -224,6 +277,19 @@
<span class="overlay-paste-icon" title="Replace Node from Clipboard">
<i class="fa fa-paste"></i>
</span>
+ <span class="overlay-local-fs-import-icon" title="Copy action settings from Local File System">
+ <div class="action-file-picker">
+ {{#file-picker fileLoaded="importActionSettings" preview=false}}
+ <i class="fa fa-download"></i>
+ {{/file-picker}}
+ </div>
+ </span>
+ <span class="overlay-hdfs-import-icon" title="Import action" {{action "showActionSettingsFileBrowser"}}>
+ <i class="fa fa-download"></i>
+ </span>
+ <span class="overlay-hdfs-export-icon" title="Export action" {{action "showExportActionNodeFileBrowser"}}>
+ <i class="fa fa-upload"></i>
+ </span>
</div>
{{decision-add-branch node=node registerAddBranchAction="registerAddBranchAction" addDecisionBranch="addDecisionBranch" workflow=workflow}}
</div>
@@ -233,16 +299,20 @@
{{/if}}
</div>
<div id="workflow-actions" class="hidden">
- {{workflow-actions element=popOverElement addNode="addNode" pasteNode="pasteNode" clipboard=clipboard}}
+ {{workflow-actions element=popOverElement addNode="addNode" pasteNode="pasteNode" showImportActionNodeFileBrowser="showImportActionNodeFileBrowser" importActionNodeLocalFS="importActionNodeLocalFS" clipboard=clipboard}}
</div>
</div>
</div>
</div>
+
+
+
+
{{#if showActionEditor}}
{{workflow-action-editor actionType=currentAction closeActionEditor="closeActionEditor" setNodeTransitions="setNodeTransitions" actionModel=currentNode.domain nodeType=currentNode.type currentNode=currentNode killNodes=workflow.killNodes credentials=workflow.credentials}}
{{/if}}
{{#if showingSaveWorkflow}}
- {{save-wf type='wf' closeJobConfigs="closeWorkflowSubmitConfigs" jobFilePath=workflowFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=workflowSubmitConfigs setFilePath="setFilePath" isDryrun=dryrun}}
+ {{save-wf type='wf' saveFileinfo="saveFileinfo" closeJobConfigs="closeWorkflowSubmitConfigs" jobFilePath=workflowFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=workflowSubmitConfigs setFilePath="setFilePath" isDryrun=dryrun isDraft=isDraft jobXmlJSONStr=jobXmlJSONStr}}
{{/if}}
{{#if showingWorkflowConfigProps}}
{{job-config type='wf' closeJobConfigs="closeWorkflowSubmitConfigs" jobFilePath=workflowFilePath openFileBrowser="openFileBrowser" closeFileBrowser="closeFileBrowser" jobConfigs=workflowSubmitConfigs isDryrun=dryrun}}
@@ -253,6 +323,15 @@
{{#if showingFileBrowser}}
{{hdfs-browser closeFileBrowser="closeFileBrowser" selectFileCallback=selectFileCallback filePath=workflowFilePath}}
{{/if}}
+{{#if showingActionSettingsFileBrowser}}
+ {{hdfs-browser closeFileBrowser="closeActionSettingsFileBrowser" selectFileCallback=selectFileCallback filePath=actionSettingsFilePath}}
+{{/if}}
+{{#if showingImportActionNodeFileBrowser}}
+ {{hdfs-browser closeFileBrowser="closeImportActionNodeFileBrowser" selectFileCallback=selectFileCallback filePath=actionNodeFilePath}}
+{{/if}}
+{{#if showingExportActionNodeFileBrowser}}
+ {{hdfs-browser closeFileBrowser="closeExportActionNodeFileBrowser" selectFileCallback=selectFileCallback filePath=exportActionNodeFilePath}}
+{{/if}}
{{#if showingPreview}}
{{#preview-dialog title="Workflow XML Preview" previewXml=previewXml}}{{/preview-dialog}}
{{/if}}
@@ -316,6 +395,9 @@
{{#if showParameterSettings}}
{{#workflow-parameters type='wf' closeWorkFlowParam="closeWorkFlowParam" saveWorkFlowParam="saveWorkFlowParam" parameters=parameters}}{{/workflow-parameters}}
{{/if}}
+{{#if showingStreamImport}}
+ {{import-from-stream type='wf' importWorkflowStream="importWorkflowStream" hideStreamImport="hideStreamImport" showingStreamImport=showingStreamImport workflowStream=workflowStream}}
+{{/if}}
{{#if showKillNodeManager}}
{{#killnode-manager killNodes=workflow.killNodes killNode=killNode createKillnodeError=createKillnodeError createKillNode="createKillNode" deleteNode="deleteNode" addKillNodeMode=addKillNodeMode editMode=editMode closeKillNodeManager="closeKillNodeManager"}}{{/killnode-manager}}
{{/if}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hdfs-browser.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hdfs-browser.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hdfs-browser.hbs
index 1922020..437640d 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hdfs-browser.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/hdfs-browser.hbs
@@ -74,7 +74,7 @@
<label class="control-label">Selected Path</label>
</div>
<div class="col-xs-6">
- {{input name="selectedPath" class="form-control" type="text" value=selectedPath placeholder="/enter folder here"}}
+ {{input name="selectedPath" class="form-control" type="text" value=selectedPath}}
</div>
<div class="col-xs-4">
<button type="button" class="btn btn-primary" {{action "selectFile"}}>Select</button>
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/import-from-stream.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/import-from-stream.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/import-from-stream.hbs
new file mode 100644
index 0000000..067d714
--- /dev/null
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/import-from-stream.hbs
@@ -0,0 +1,63 @@
+{{!
+* 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="modal fade" id="configureJob" role="dialog">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" {{action "close"}}>×</button>
+ <b>Import Workflow From Stream</b>
+ </div>
+ <div class="modal-body">
+ <div class="panel panel-default">
+ <div class="panel-body">
+ <div class="row form-group">
+ <div class="col-xs-3">
+ <label class="control-label" for="{{type}}-path">{{displayName}} stream</label><span class="requiredField"> *</span>
+ </div>
+ </div>
+
+ <div class="row form-group">
+ <div class="col-xs-8">
+ <div class="input-group">
+ <div id="xmlCodeStream">
+ {{ivy-codemirror value=workflowStream options=(hash lineNumbers=false mode="xml" indentWithTabs=true)}}
+ </div>
+ </div>
+ {{field-error model=this field='workflowStream' showErrorMessage=showErrorMessage}}
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ {{#if savingInProgress}}
+ {{spin-spinner lines=10 length=10 width=5 radius=10 }}
+ <span class="pull-left">Saving {{displayName}}</span>
+ {{/if}}
+ {{#if startingInProgress}}
+ {{spin-spinner lines=8 length=5 width=10 radius=5}}
+ <span class="pull-left">Starting {{displayName}}</span>
+ {{/if}}
+ <button type="button" class="btn btn-default" {{action "close"}}>Close</button>
+ <button type="button" class="btn btn-primary" {{action "save"}}>Import workflow stream</button>
+ </div>
+ </div>
+ </div>
+</div>
+
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
index ede8cb1..f0d9ee3 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-config.hbs
@@ -21,7 +21,7 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
{{#if isDryrun}}
- <h4 class="modal-title">Dryrun {{displayName}}</h4>
+ <h4 class="modal-title">Validate {{displayName}}</h4>
{{else}}
<h4 class="modal-title">Submit {{displayName}}</h4>
{{/if}}
@@ -39,14 +39,14 @@
<a href="#" {{action "hideStackTrace"}}>Hide Log</a>
<div id="stackTrace">{{{stackTrace}}}</div>
{{/if}}
- {{#unless isStackTraceVisible}}
+ {{#unless isStackTraceVisible}}
<a href="#" {{action "showStackTrace"}}>Show Log</a>
{{/unless}}
{{/if}}
</div>
{{/if}}
<div class="row form-group">
- <div class="col-xs-3">
+ <div class="col-xs-3">
<label class="control-label" for="{{type}}-path">{{displayName}} path</label><span class="requiredField"> *</span>
</div>
<div class="col-xs-8">
@@ -111,9 +111,9 @@
{{/if}}
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
{{#if isDryrun}}
- <button type="button" class="btn btn-primary" {{action "dryrun"}}>Test Run</button>
+ <button type="button" class="btn btn-primary" {{action "dryrun"}}>Validate</button>
{{else}}
- <button type="button" class="btn btn-default" {{action "dryrun"}}>Test Run</button>
+ <button type="button" class="btn btn-default" {{action "dryrun"}}>Validate</button>
<button type="button" class="btn btn-primary" {{action "save"}}>Submit</button>
{{/if}}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb567758/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
index f17f89e..32e468f 100644
--- a/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
+++ b/contrib/views/wfmanager/src/main/resources/ui/app/templates/components/job-details.hbs
@@ -18,19 +18,35 @@
<div id="job-details" class="panel panel-default">
<div class="panel-heading">
<div class="pull-right">
- {{#if from}}
- <button type="button" class="btn btn-default" title="Back" {{action 'back'}}>
- <i class="fa fa-arrow-left"></i>
- </button>
- {{/if}}
- {{#link-to 'dashboard' class="backto-dashboard"}}
+ {{#link-to 'design.dashboardtab' class="backto-dashboard"}}
<button type="button" class="btn btn-default" title="Workflow Dashboard">
<i class="fa fa-th"></i>
</button>
{{/link-to}}
</div>
<div class="pull-left">
- <span class="jobTitle">{{displayType}} Job : {{name}} </span>
+ <div class="jobTitle">
+ <!-- {{displayType}} Job : {{name}} -->
+ <ol class="breadcrumb">
+ {{#if fromBundleId}}
+ <li class="breadcrumb-item">
+ <a href="#" {{action 'back' 'bundles' fromBundleId}}>
+ {{#workflow-icon workflowType="bundles"}}{{/workflow-icon}} [ <span title="{{fromBundleId}}">{{dashboardContext.currentBundleName}}</span> ]
+ </a>
+ </li>
+ {{/if}}
+ {{#if fromCoordId}}
+ <li class="breadcrumb-item">
+ <a href="#" {{action 'back' 'coords' fromCoordId}}>
+ {{#workflow-icon workflowType="coords"}}{{/workflow-icon}} [ <span title="{{fromCoordId}}">{{dashboardContext.currentCoordName}}</span> ]
+ </a>
+ </li>
+ {{/if}}
+ <li class="breadcrumb-item">
+ {{#workflow-icon workflowType=model.jobType}}{{/workflow-icon}} [ <span title="{{id}}">{{name}}</span> ]
+ </li>
+ </ol>
+ </div>
<span class="fa fa-refresh fa-1 pointer btn btn-default" title="Refresh" {{action 'doRefresh'}} aria-hidden="true"></span>
</div>
<div class="clearfix"></div>
@@ -39,7 +55,7 @@
{{#if model.error}}<span class="messageDiv label label-danger">{{model.error}}</span>{{/if}}
{{#if error}}<span class="messageDiv label label-danger">{{errorMessage}}</span>{{/if}}
{{#if (eq model.jobType "wf")}}
- {{#workflow-job-details model=model getJobLog="getJobLog" getActionDetails="getActionDetails" id=id}}
+ {{#workflow-job-details model=model jobDefinition=jobDefinition configurationProperties=configurationProperties getJobLog="getJobLog" getActionDetails="getActionDetails" id=id}}
<div>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#jobInfo" aria-controls="job-info" role="tab" data-toggle="tab">Info</a></li>
@@ -51,22 +67,20 @@
<li {{action 'getAuditLog'}} role="presentation"><a href="#jobAuditLog" aria-controls="jobAuditLog" role="tab" data-toggle="tab">Audit Log</a></li>
<li {{action 'getJobDag'}} role="presentation"><a href="#jobDag" aria-controls="jobDag" role="tab" data-toggle="tab">Flow Graph</a></li>
<li role="presentation" class="pull-right">
- {{#link-to 'design' (query-params appPath=model.appPath) class="backto-designer" }}
- <button type="button" class="btn btn-success" title="Edit Workflow" >
- Edit Workflow
- </button>
- {{/link-to}}
- </li>
+ <button type="button" class="btn btn-success" title="Edit Workflow" {{action "editWorkflow" model.appPath}}>
+ Edit Workflow
+ </button>
+ </li>
</ul>
-
+
</div>
{{/workflow-job-details}}
{{else if (eq model.jobType "coords")}}
- {{#coord-job-details model=model getJobLog="getJobLog" id=id getCoordActionReruns="getCoordActionReruns" showWorkflow="showWorkflow"}}
+ {{#coord-job-details model=model jobDefinition=jobDefinition configurationProperties=configurationProperties getJobLog="getJobLog" id=id getCoordActionReruns="getCoordActionReruns" showWorkflow="showWorkflow"}}
<div>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#jobInfo" aria-controls="job-info" role="tab" data-toggle="tab">Info</a></li>
- <li {{action 'showFirstActionDetail'}} role="presentation"><a href="#jobAction" aria-controls="job-action" role="tab" data-toggle="tab">Action</a></li>
+ <li {{action 'showFirstActionDetail'}} role="presentation"><a href="#jobAction" aria-controls="job-action" role="tab" data-toggle="tab">Workflow Jobs</a></li>
<li {{action 'getJobDefinition'}} role="presentation"><a href="#jobDefinition" aria-controls="jobDefinition" role="tab" data-toggle="tab">Definition</a></li>
<li role="presentation"><a href="#jobConfig" aria-controls="jobConfig" role="tab" data-toggle="tab">Configuration</a></li>
<li {{action 'getJobLog'}} role="presentation"><a href="#jobLog" aria-controls="jobLog" role="tab" data-toggle="tab">Log</a></li>
@@ -77,7 +91,7 @@
</div>
{{/coord-job-details}}
{{else}}
- {{#bundle-job-details model=model getJobLog="getJobLog" id=id showCoord="showCoord"}}
+ {{#bundle-job-details model=model jobDefinition=jobDefinition configurationProperties=configurationProperties getJobLog="getJobLog" id=id showCoord="showCoord"}}
<div>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#jobInfo" aria-controls="job-info" role="tab" data-toggle="tab">Info</a></li>