blob: bb0d7a712f2d9f642a362a96901939141d98443c [file] [log] [blame]
<!--
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<form id="formGeneralBox"
name="datasetForm"
novalidate>
<div class="col-xs-8">
<label class="light" tooltip="dataset.name">Mirror Name<mandatory-field></mandatory-field></label>
<input type="text"
name="nameInput"
class="form-control"
ng-model="UIModel.name"
placeholder=""
ng-disabled="editingMode"
ng-pattern="validations.patterns.name"
ng-required="true"
check-name="{type:'process', check:!editingMode}"/>
</label>
</div>
<div class="col-xs-24 tagsBox plr0px">
<label class="col-xs-24 light">Tags</label>
<div class="col-xs-12">
<div ng-repeat="tag in UIModel.tags">
<div class="row dynamic-table-spacer">
<div class="col-xs-8">
<input type="text" class="form-control" ng-model="tag.key"
validation-optional-message="{{validations.messages.key}}"
ng-pattern="validations.patterns.alpha" ng-required="tag.value" placeholder="key"/>
</div>
<div class="col-xs-8">
<input type="text" class="form-control" validation-optional-message="{{validations.messages.value}}"
ng-model="tag.value" ng-pattern="validations.patterns.alpha"
ng-required="tag.key" placeholder="value"/>
</div>
<div class="col-xs-8">
<button type="button" class="btn btn-default btn-xs" ng-click="removeTag($index)" ng-if="!$first || !$last">
<span class="entypo minus"></span> delete
</button>
<button type="button" class="btn btn-default btn-xs" ng-click="addTag()" ng-if="$last">
<span class="entypo plus"></span> add tag
</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-24 plr0px">
<div class="col-xs-12 plr0px">
<div class="col-xs-24 clusterBox plr0px">
<h3>Source</h3>
<div class="runJobOnBox">
<input type="radio"
id="runJobOnSourceRadio"
ng-model="UIModel.runOn"
value="source"
ng-required="true"
ng-disabled="UIModel.source.location !== 'HDFS'"/>
Run job here
</div>
<div class="locationBox" ng-if="UIModel.type === 'HDFS'">
<div class="col-xs-5"><label class="light">Location</label></div>
<div class="col-xs-3"><label class="mt15 radio-inline">
<input type="radio"
ng-change="checkFromSource()"
id="sourceHDFSRadio"
ng-model="UIModel.source.location"
value="HDFS"
ng-required="!UIModel.source.location"/> HDFS
</label>
</div>
<div class="col-xs-3"><label class="mt15 radio-inline">
<input type="radio"
ng-change="checkFromSource()"
id="sourceAzureRadio"
ng-model="UIModel.source.location"
value="azure"
ng-required="!UIModel.source.location"/> Azure
</label>
</div>
<div class="col-xs-1"><label class="mt15 radio-inline">
<input type="radio"
ng-change="checkFromSource()"
id="sourceS3Radio"
ng-model="UIModel.source.location"
value="s3"
ng-required="!UIModel.source.location"/> S3
</label>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.source.location === 'HDFS' || UIModel.type === 'HIVE'">
<div class="col-xs-5 p0"><label class="light">Cluster<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<select ng-model="UIModel.source.cluster"
name="sourceClusterSelect"
ng-change="getSourceDefinition()"
ng-required="UIModel.source.location === 'HDFS' || UIModel.type === 'HIVE'"
class="form-control padding0"
id="sourceClusterSelect">
<option value="" disabled style='display:none;'>-Select cluster-</option>
<option ng-selected="UIModel.source.cluster === cluster.name"
ng-repeat="cluster in clustersList"
value="{{cluster.name}}">
{{cluster.name}}
</option>
</select>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.source.location === 'azure' && UIModel.type === 'HDFS'">
<div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceClusterUrlInput"
class="form-control"
ng-model="UIModel.source.url"
placeholder="URL"
ng-pattern="validations.patterns.azure"
ng-required="UIModel.source.location === 'azure'"
validation-message="{{validations.messages.azure}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.source.location === 's3' && UIModel.type === 'HDFS'">
<div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceClusterUrlInput"
class="form-control"
ng-model="UIModel.source.url"
placeholder="URL"
ng-pattern="validations.patterns.s3"
ng-required="UIModel.source.location === 's3'"
validation-message="{{validations.messages.s3}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HDFS'">
<div class="col-xs-5 p0"><label class="light">Path<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceClusterPathInput"
class="form-control"
ng-model="UIModel.source.path"
placeholder="Path"
ng-pattern="validations.patterns.osPath"
ng-required="UIModel.source.location === 'HDFS' || UIModel.type === 'HIVE'"
validation-message="{{validations.messages.path}}"/>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE'">
<div class="col-xs-5 p0">
<label class="light" tooltip="dataset.sourceHiveServer2Uri">HiveServer2 endpoint</label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceHiveServerInput"
ng-model="UIModel.hiveOptions.source.hiveServerToEndpoint"
class="form-control"
validation-optional-message="{{validations.messages.path}}" />
</div>
</div>
<div class="col-xs-24 mt5" ng-if="UIModel.type === 'HIVE'">
<div class="col-xs-5 p0">
<label class="light">I want to copy<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-4"><label class="mt15 radio-inline">
<input type="radio"
id="targetHIVEDatabaseRadio"
ng-model="UIModel.source.hiveDatabaseType"
value="databases"
ng-required="!UIModel.source.location"/>Entire databases
</label>
</div>
<div><label class="mt15 radio-inline">
<input type="radio"
id="targetHIVETablesRadio"
ng-model="UIModel.source.hiveDatabaseType"
value="tables"
ng-required="!UIModel.source.hiveDatabaseType"/>
Tables in a single database
</label>
</div>
<div class="col-xs-24 mt5 plr0px">
<div class="col-xs-13 col-xs-offset-5" ng-if="UIModel.source.hiveDatabaseType === 'databases'">
<label class="col-xs-24 p0 light" tooltip="dataset.sourceDatabases">Databases (comma separated)<mandatory-field></mandatory-field></label>
<textarea name="sourceDatabasesInput"
class="form-control databasesTextArea"
ng-model="UIModel.source.hiveDatabases"
ng-pattern="validations.patterns.hiveDatabases"
ng-required="UIModel.target.location === 'HDFS'"
validation-message="{{validations.messages.databases}}"
ng-keydown="validations.acceptNoSpaces($event)">
</textarea>
</div>
<div class="col-xs-13 col-xs-offset-5" ng-if="UIModel.source.hiveDatabaseType === 'tables'">
<label class="col-xs-24 p0 light">Database<mandatory-field></mandatory-field></label>
<input type="text"
name="sourceDatabaseInput"
class="form-control"
ng-model="UIModel.source.hiveDatabases"
ng-pattern="validations.patterns.hiveDatabase"
ng-required="UIModel.target.location === 'HDFS'"
validation-message="{{validations.messages.database}}"
ng-keydown="validations.acceptNoSpaces($event)"/>
<label class="col-xs-24 p0 light" tooltip="dataset.sourceTables">Tables (comma separated)<mandatory-field></mandatory-field></label>
<textarea name="sourceTablesInput"
class="form-control tablesTextArea"
ng-model="UIModel.source.hiveTables"
ng-pattern="validations.patterns.hiveTables"
ng-required="UIModel.target.location === 'HDFS'"
validation-message="{{validations.messages.tables}}"
ng-keydown="validations.acceptNoSpaces($event)">
</textarea>
</div>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
<div class="col-xs-5 p0">
<label class="light" tooltip="dataset.sourceHive2KerberosPrincipal">Hive2 Kerberos Principal<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceHive2KerberosPrincipal"
class="form-control"
ng-model="UIModel.source.hive2KerberosPrincipal"
placeholder="Source Metastore URI"
ng-pattern="validations.patterns.kerberosPrincipal"
ng-required="UIModel.type === 'HIVE'"
validation-message="{{validations.messages.kerberosPrincipal}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
<div class="col-xs-5 p0">
<label class="light">Meta Store URI<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceMetastoreUri"
class="form-control"
ng-model="UIModel.source.hiveMetastoreUri"
placeholder="Source Metastore URI"
ng-pattern="validations.patterns.metastoreUri"
ng-required="UIModel.type === 'HIVE'"
validation-message="{{validations.messages.metastoreUri}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
<div class="col-xs-5 p0">
<label class="light">Kerberos Principal<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="sourceMetastoreKerberosPrincipal"
class="form-control"
ng-model="UIModel.source.hiveMetastoreKerberosPrincipal"
placeholder="Kerberos Principal"
ng-pattern="validations.patterns.kerberosPrincipal"
ng-required="UIModel.type === 'HIVE'"
validation-message="{{validations.messages.kerberosPrincipal}}" />
</div>
</div>
</div>
</div>
<div class="col-xs-12 plr0px pl5">
<div class="col-xs-24 plr0px clusterBox">
<h3>Target</h3>
<div class="runJobOnBox">
<input type="radio"
id="runJobOnTargetRadio"
ng-model="UIModel.runOn"
value="target"
ng-required="true"
ng-disabled="UIModel.target.location !== 'HDFS'"/>
Run job here
</div>
<div class="locationBox" ng-if="UIModel.type === 'HDFS'">
<div class="col-xs-5"><label class="light">Location</label></div>
<div class="col-xs-3"><label class="mt15 radio-inline">
<input type="radio"
ng-change="checkFromTarget()"
id="targetHDFSRadio"
ng-model="UIModel.target.location"
value="HDFS"
ng-required="!UIModel.target.location"/> HDFS
</label>
</div>
<div class="col-xs-3"><label class="mt15 radio-inline">
<input type="radio"
ng-change="checkFromTarget()"
id="targetAzureRadio"
ng-model="UIModel.target.location"
value="azure"
ng-required="!UIModel.target.location"/> Azure
</label>
</div>
<div class="col-xs-1"><label class="mt15 radio-inline">
<input type="radio"
ng-change="checkFromTarget()"
id="targetS3Radio"
ng-model="UIModel.target.location"
value="S3"
ng-required="!UIModel.target.location"/> S3
</label>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.target.location === 'HDFS' || UIModel.type === 'HIVE'">
<div class="col-xs-5 p0">
<label class="light">Cluster<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-13 mt10">
<select ng-model="UIModel.target.cluster"
ng-change="getTargetDefinition()"
name="targetClusterSelect"
ng-required="UIModel.target.location === 'HDFS' || UIModel.type === 'HIVE'"
class="col-xs-24 form-control padding0"
id="targetClusterSelect">
<option value="" disabled selected style='display:none;'>-Select cluster-</option>
<option ng-selected="UIModel.target.cluster === clusterItem.name"
ng-repeat="clusterItem in clustersList"
value="{{clusterItem.name}}">
{{clusterItem.name}}
</option>
</select>
<div class="custom-danger" ng-show="clusterErrorMessage != ''">
{{clusterErrorMessage}}
</div>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE'">
<div class="col-xs-5 p0">
<label class="light" tooltip="dataset.targetHiveServer2Uri">HiveServer2 endpoint</label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetHiveServerInput"
ng-model="UIModel.hiveOptions.target.hiveServerToEndpoint"
class="form-control"
validation-optional-message="{{validations.messages.path}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE'&& secureMode === true">
<div class="col-xs-5 p0">
<label class="light" tooltip="dataset.targetHive2KerberosPrincipal">Hive2 Kerberos Principal<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetHive2KerberosPrincipal"
class="form-control"
ng-model="UIModel.target.hive2KerberosPrincipal"
placeholder="Hive2 Kerberos Principal"
ng-pattern="validations.patterns.kerberosPrincipal"
ng-required="UIModel.type === 'HIVE'"
validation-message="{{validations.messages.kerberosPrincipal}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE'&& secureMode === true">
<div class="col-xs-5 p0"><label class="light">Meta Store URI<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetMetastoreUri"
class="form-control"
ng-model="UIModel.target.hiveMetastoreUri"
placeholder="Target Metastore URI"
ng-pattern="validations.patterns.metastoreUri"
ng-required="UIModel.type === 'HIVE'"
validation-message="{{validations.messages.metastoreUri}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE' && secureMode === true">
<div class="col-xs-5 p0">
<label class="light">Kerberos Principal<mandatory-field></mandatory-field></label>
</div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetMetastoreKerberosPrincipal"
class="form-control"
ng-model="UIModel.target.hiveMetastoreKerberosPrincipal"
placeholder="Kerberos Principal"
ng-pattern="validations.patterns.kerberosPrincipal"
ng-required="UIModel.type === 'HIVE'"
validation-message="{{validations.messages.kerberosPrincipal}}" />
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.target.location === 'azure' && UIModel.type === 'HDFS'">
<div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetClusterUrlInput"
class="form-control"
ng-model="UIModel.target.url"
placeholder="URL"
ng-pattern="validations.patterns.azure"
ng-required="UIModel.target.location === 'azure'"
validation-message="{{validations.messages.azure}}"/>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.target.location === 'S3' && UIModel.type === 'HDFS'">
<div class="col-xs-5 p0"><label class="light">Base URL<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetClusterUrlInput"
class="form-control"
ng-model="UIModel.target.url"
placeholder="URL"
ng-pattern="validations.patterns.s3"
ng-required="UIModel.target.location === 'S3'"
validation-message="{{validations.messages.s3}}"/>
</div>
</div>
<div class="col-xs-24" ng-if="UIModel.type === 'HDFS'">
<div class="col-xs-5 p0"><label class="light">Path<mandatory-field></mandatory-field></label></div>
<div class="col-xs-13 mt10">
<input type="text"
name="targetClusterPathInput"
class="form-control"
ng-model="UIModel.target.path"
placeholder="Path"
ng-pattern="validations.patterns.osPath"
ng-required="UIModel.target.location === 'HDFS'"
validation-message="{{validations.messages.path}}"/>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-24 plr0px">
<div class="col-xs-12 plr0px clusterBoxEndLine">
</div>
<div class="col-xs-12 plr0px pl5">
<div class="col-xs-24 plr0px clusterBoxEndLine">
</div>
</div>
</div>
<div class="col-xs-24"><label class="mt15">Validity</label></div>
<div class="col-xs-24 validityBox plr0px">
<div class="col-xs-24 plr0px">
<div class="startDateBox col-xs-4">
<label class="light">Start<mandatory-field></mandatory-field></label>
<input type="text"
name="startDateInput"
class="form-control dateInput"
placeholder="{{dateFormat | lowercase}}"
ng-model="UIModel.validity.start.date"
ng-required="true"
simple-date-picker />
</div>
<div class="startTimeBox col-xs-4">
<label class="light">Begin Time<mandatory-field></mandatory-field></label>
<timepicker ng-change="constructDate()"
ng-model="UIModel.validity.start.time"
ng-required="true"
hour-step="1"
minute-step="1"
show-meridian="true">
</timepicker>
</div>
</div>
<div class="col-xs-24 plr0px">
<div class="endDateBox col-xs-4">
<label class="light">End<mandatory-field></mandatory-field></label>
<input type="text"
name="startDateInput"
class="form-control dateInput"
placeholder="{{dateFormat | lowercase}}"
ng-model="UIModel.validity.end.date"
ng-required="true"
simple-date-picker />
</div>
<div class="endTimeBox col-xs-4">
<label class="light">End Time<mandatory-field></mandatory-field></label>
<timepicker ng-change="constructDate()"
ng-model="UIModel.validity.end.time"
ng-required="true"
hour-step="1"
minute-step="1"
show-meridian="true">
</timepicker>
</div>
</div>
</div>
<div class="frequencyBox">
<div class="col-xs-24">
<label>Frequency</label>
</div>
<div class="col-xs-24 plr0px">
<div class="col-xs-24">
<label class="light">Repeat Every</label>
</div>
<div class="col-xs-2">
<input type="text"
name="frequencyQuantity"
ng-model="UIModel.frequency.quantity"
ng-pattern="validations.patterns.twoDigits"
ng-keydown="validations.acceptOnlyNumber($event)"
ng-keyup="checkMininumFrequency(UIModel.frequency.quantity, UIModel.frequency.unit, datasetForm.frequencyQuantity)"
class="form-control"
ng-required="true"
validation-optional-message="{{validations.messages.number}}" />
</div>
<div class="col-xs-6">
<select ng-model="UIModel.frequency.unit" class="form-control padding0" ng-required="true"
ng-change="checkMininumFrequency(UIModel.frequency.quantity, UIModel.frequency.unit, datasetForm.frequencyQuantity)">
<option selected value="minutes">minutes</option>
<option value="hours">hours</option>
<option value="days">days</option>
<option value="months">months</option>
</select>
</div>
<div class="col-xs-24 custom-danger" ng-if="!isFrequencyValid">{{validations.messages.frequency.minimum}}</div>
</div>
</div>
<div class="tzBox col-xs-8">
<label class="light">Timezone<mandatory-field></mandatory-field></label>
<time-zone-select ng-model="UIModel.validity.timezone"></time-zone-select>
</div>
<div class="col-xs-24">
<label class="light" tooltip="dataset.jobNotificationReceivers">Send alerts to</label>
</div>
<div class="col-xs-24 alertsBox plr0px">
<div class="emailBox">
<div class="col-xs-8">
<input class="form-control"
name="emailAlertInput"
ng-model="UIModel.alert.email"
type="text"
placeholder="Email"
ng-pattern="validations.patterns.email"
validation-message="{{validations.messages.email}}">
</div>
</div>
<div class="addAlertBox col-xs-3">
<button class="btn btn-default btn-xs"
ng-disabled="!UIModel.alert.email"
type="button"
ng-click="addAlert()">
<span class="glyphicon glyphicon-plus"></span>add alert
</button>
</div>
</div>
<div class="col-xs-24 emailArrayRow mt10 plr0px" ng-repeat="email in UIModel.alerts">
<span class="col-xs-8">{{email}}</span>
<div class="col-xs-3"><button class="btn btn-default btn-xs"
type="button"
ng-click="removeAlert()">
<span class="glyphicon glyphicon-minus"></span> delete
</button></div>
</div>
<div class="col-xs-24 advancedOption" ng-click="expandOptions = !expandOptions">
<label class="pointer blink-success">Advanced Options</label>
<i class="glyphicon glyphicon-chevron-down mt15" ng-if="!expandOptions"></i>
<i class="glyphicon glyphicon-chevron-up mt15" ng-if="expandOptions"></i>
</div>
<div id="advancedOptionsBox" class="col-xs-24 plr0px" ng-class="{expanded:expandOptions}">
<div class="col-xs-24" ng-if="UIModel.type === 'HIVE'">
<label tooltip="dataset.tdeEncryptionEnabled">TDE Encryption</label>
<input type="checkbox" ng-model="UIModel.tdeEncryptionEnabled" ng-checked="UIModel.tdeEncryptionEnabled"/>
</div>
<div class="allocationBox">
<div class="col-xs-24">
<label>Allocation</label>
</div>
<div class="col-xs-24 plr0px" ng-if="UIModel.type === 'HDFS'">
<div class="col-xs-6">
<label class="light" tooltip="dataset.distcpMaxMaps">Max Maps for Distcp</label>
<input type="text"
name="maxMapsInput"
ng-model="UIModel.allocation.hdfs.distcpMaxMaps"
ng-pattern="validations.patterns.number"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
validation-optional-message="{{validations.messages.allocationNumber}}"/>
</div>
<div class="col-xs-6">
<label class="light" tooltip="dataset.distcpMapBandwidth">Max bandwidth (MB)</label>
<input type="text"
name="maxBandwidthInput"
ng-model="UIModel.allocation.hdfs.distcpMapBandwidth"
ng-pattern="validations.patterns.number"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
validation-optional-message="{{validations.messages.allocationNumber}}" />
</div>
</div>
<div class="col-xs-24 plr0px" ng-if="UIModel.type === 'HIVE'">
<div class="col-xs-6">
<label class="light" tooltip="dataset.distcpMaxMaps">Max Maps for Distcp</label>
<input type="text"
name="hiveMaxMapsInput"
ng-model="UIModel.allocation.hive.distcpMaxMaps"
ng-pattern="validations.patterns.number"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
validation-optional-message="{{validations.messages.allocationNumber}}"/>
</div>
<div class="col-xs-6">
<label class="light" tooltip="dataset.replicationMaxMaps">Max Maps for Mirror</label>
<input type="text"
name="maxMapsInput"
ng-model="UIModel.allocation.hive.replicationMaxMaps"
ng-pattern="validations.patterns.number"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
validation-optional-message="{{validations.messages.allocationNumber}}" />
</div>
<div class="col-xs-6">
<label class="light" tooltip="dataset.maxEvents">Max Events</label>
<input type="text"
name="maxEventsInput"
ng-model="UIModel.allocation.hive.maxEvents"
ng-pattern="validations.patterns.number"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
validation-optional-message="{{validations.messages.allocationNumber}}" />
</div>
<div class="col-xs-6">
<label class="light" tooltip="dataset.distcpMapBandwidth">Max bandwidth (MB)</label>
<input type="text"
name="maxBandwidthInput"
ng-model="UIModel.allocation.hive.distcpMapBandwidth"
ng-pattern="validations.patterns.number"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
validation-optional-message="{{validations.messages.allocationNumber}}" />
</div>
</div>
</div>
<div class="hiveOptBox mt10 col-xs-24 plr0px" ng-if="UIModel.type === 'HIVE'">
<label class="col-xs-24">Source</label>
<label class="col-xs-24 light mt10">Staging path</label>
<div class="col-xs-8">
<input type="text"
name="sourceStagingPathInput"
ng-model="UIModel.hiveOptions.source.stagingPath"
ng-pattern="validations.patterns.path"
class="form-control"
validation-optional-message="{{validations.messages.path}}" />
</div>
<label class="col-xs-24 mt15">Target</label>
<label class="col-xs-24 light mt10">Staging path</label>
<div class="col-xs-8">
<input type="text"
name="targetStagingPathInput"
ng-model="UIModel.hiveOptions.target.stagingPath"
ng-pattern="validations.patterns.path"
class="form-control"
validation-optional-message="{{validations.messages.path}}" />
</div>
</div>
<div class="col-xs-24 plr0px retryBox">
<label class="col-xs-24">Retry</label>
<div class="col-xs-6 policyBox pt5px mt5">
<label class="light">Policy</label>
<select ng-model="UIModel.retry.policy" ng-required="true"
class="form-control padding0" ng-change="policyChange()">
<option selected value="periodic">PERIODIC</option>
<option value="exp-backoff">EXPONENTIAL_BACKOFF</option>
<option value="final">FINAL</option>
</select>
</div>
<div class="col-xs-6 pt5px mt8">
<label class="col-xs-6 light plr0px">Delay</label>
<div class="col-xs-8 plr0px">
<input type="text"
name="frequencyEveryInput"
ng-model="UIModel.retry.delay.quantity"
ng-pattern="validations.patterns.twoDigits"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
ng-disabled = "UIModel.retry.policy === 'final'"
validation-optional-message="{{validations.messages.number}}" />
</div>
<div class="col-xs-16">
<select ng-model="UIModel.retry.delay.unit"
class="form-control padding0" ng-disabled = "UIModel.retry.policy === 'final'">
<option selected value="minutes">minutes</option>
<option value="hours">hours</option>
<option value="days">days</option>
<option value="months">months</option>
</select>
</div>
</div>
<div class="col-xs-6 pt5px mt5">
<label class="light">Attempts</label>
<input type="text"
name="frequencyEveryInput"
ng-model="UIModel.retry.attempts"
ng-pattern="validations.patterns.twoDigits"
ng-keydown="validations.acceptOnlyNumber($event)"
class="form-control"
ng-disabled = "UIModel.retry.policy === 'final'"
validation-optional-message="{{validations.messages.number}}" />
</div>
</div>
<div class="col-xs-24 plr0px">
<label class="col-xs-24">Access Control List</label>
<div class="col-xs-24 plr0px">
<div class="col-xs-8">
<label class="light">Owner<mandatory-field></mandatory-field></label>
<input type="text"
name="aclOwnerInput"
ng-model="UIModel.ACL.owner"
ng-pattern="validations.patterns.unixId"
class="form-control"
ng-required="true"
validation-message="{{validations.messages.acl.owner}}"/>
</div>
<div class="col-xs-8 pl0px">
<label class="light">Group<mandatory-field></mandatory-field></label>
<input type="text"
name="aclGroupInput"
ng-model="UIModel.ACL.group"
ng-pattern="validations.patterns.unixId"
class="form-control"
ng-required="true"
validation-message="{{validations.messages.acl.group}}" />
</div>
</div>
<div class="col-xs-24">
<div class="col-xs-8 plr0px">
<label class="light">Permissions<mandatory-field></mandatory-field></label>
<acl-permissions acl-model="UIModel.ACL.permission"></acl-permissions>
</div>
</div>
</div>
</div>
<div class="col-xs-24 pb15px mt35">
<div class="pull-right">
<a class="btn cnclBtn" ui-sref="main">
CANCEL
</a>
<button class="btn nextBtn"
ng-disabled="buttonSpinners.show"
ng-click="goNext(datasetForm.$invalid)" scroll-to-error>
NEXT <img src="css/img/ajax-loader.gif" ng-if="buttonSpinners.show" />
</button>
</div>
</div>
</form>