//-
    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.

include /app/helpers/jade/mixins

-var model = '$ctrl.clonedCluster.collision.JobStealing'
-var stealingAttributes = `${model}.stealingAttributes`

.pc-form-grid-col-30
    +form-field__number({
        label: 'Active jobs threshold:',
        model: `${model}.activeJobsThreshold`,
        name: '"jsActiveJobsThreshold"',
        placeholder: '95',
        min: '0',
        tip: 'Number of jobs that can be executed in parallel'
    })
.pc-form-grid-col-30
    +form-field__number({
        label: 'Wait jobs threshold:',
        model: `${model}.waitJobsThreshold`,
        name: '"jsWaitJobsThreshold"',
        placeholder: '0',
        min: '0',
        tip: 'Job count threshold at which this node will start stealing jobs from other nodes'
    })
.pc-form-grid-col-30
    +form-field__number({
        label: 'Message expire time:',
        model: `${model}.messageExpireTime`,
        name: '"jsMessageExpireTime"',
        placeholder: '1000',
        min: '1',
        tip: 'Message expire time in ms'
    })
.pc-form-grid-col-30
    +form-field__number({
        label: 'Maximum stealing attempts:',
        model: `${model}.maximumStealingAttempts`,
        name: '"jsMaximumStealingAttempts"',
        placeholder: '5',
        min: '1',
        tip: 'Maximum number of attempts to steal job by another node'
    })
.pc-form-grid-col-60
    +form-field__checkbox({
        label: 'Stealing enabled',
        model: `${model}.stealingEnabled`,
        name: '"jsStealingEnabled"',
        tip: 'Node should attempt to steal jobs from other nodes'
    })
.pc-form-grid-col-60
    +form-field__java-class({
        label: 'External listener:',
        model: `${model}.externalCollisionListener`,
        name: '"jsExternalCollisionListener"',
        tip: 'Listener to be set for notification of external collision events',
        validationActive: '$ctrl.clonedCluster.collision.kind === "JobStealing"'
    })
.pc-form-grid-col-60
    .ignite-form-field
        +form-field__label({ label: 'Stealing attributes:', name: '"stealingAttributes"' })
            +form-field__tooltip(`Configuration parameter to enable stealing to/from only nodes that have these attributes set`)
        +list-pair-edit({
            items: stealingAttributes,
            keyLbl: 'Attribute name',
            valLbl: 'Attribute value',
            itemName: 'stealing attribute',
            itemsName: 'stealing attributes'
        })
