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>
