Seize


Захватывает для заявки заданное количество ресурсов определенного типа (заданных указанным объектом ResourcePool). Объект ResourcePool может быть задан как графически, путем соединения его порта с портом access этого объекта Seize, так и с помощью параметра Объект ResourcePool (в случае одновременого использования обоих способов будут захватываться ресурсы объекта, указанного в параметре).

При захвате ресурса заявка мгновенно покидает этот объект. Освободить ресурс можно с помощью объекта Release. Все захваченные ресурсы должны быть освобождены до того, как заявка будет уничтожена с помощью объекта Sink.

Захваченные ресурсы добавляются в поле заявки LinkedList<ResourceUnit> resourceUnits. Доступ к этому списку открыт, но несмотря на это изменять его содержимое не рекомендуется.

Объект содержит очередь Queue, в которой заявки ожидают, пока запрашиваемые ресурсы не станут доступными. Вначале ресурсы запрашиваются для первой заявки из очереди, и пока эта заявка не захватит ресурсы (или не покинет объект по какой-либо другой причине), ресурсы для последующих заявок не выделяются (даже если они и могли бы быть выделены). Обратите внимание, что если заявкам нужно захватить несколько невзаисмосвязанных ресурсов, то, возможно, лучше использовать несколько объектов Seize

При необходимости поведение встроенной очереди Queue может быть настроено на Вашу конкретную задачу с помощью таймаутов, вытеснения, приоритетов и т.д.

Если заявка планирует захватить ресурс на какое-то определенное время, а затем освободить его, то попробуйте использовать для этой задачи объект Service, аналогичный последовательности объектов [Seize, Delay, Release].

Параметры класса

Класс заявки
Класс заявок, проходящих через объект, должен быть подклассом Entity. Указав класс заявки, Вы можете напрямую обращаться к полям этого класса в коде динамических параметров, таких, как onEnter.
Синтаксис: T extends Entity
Значение по умолчанию: Entity

Вложенные объекты

Queue queue
Очередь, в которой заявки ждут, пока запрашиваемые ими ресурсы не станут доступны.

Порты

Port in
Входной порт.
ResourceAccessPort access
Порт, который может быть соединен с портом того объекта ResourcePool, чьи ресурсы будут захватываться этим объектом по умолчанию (если не будет указан другой объект в поле Объект ResourcePool).
Port outTimeout
Выходной порт для заявок, покидающих объект по таймауту (вследствие истечения заданного времени ожидания).
Port outPreempted
Выходной порт для заявок, покидающих объект в результате вытеснения.
OutPortPush out
Выходной порт.

Параметры

Количество ресурсов [динамический]
Выражение, вычисляющее количество ресурсов, которое необходимо захватить текущей заявке.
Если Количество ресурсов равно нулю, то наличие ресурсов не проверяется (может ни быть соединен объект ресурсов, ни указано его имя в поле Объект ResourcePool, т.e. там будет значение null), при этом заявка будет просто проходить через объект.
Синтаксис: int quantity
Значение по умолчанию: 1
Локальная переменная: T entity - заявка.
Действие при входе [динамический]
Код, выполняемый, когда заявка поступает в объект.
Синтаксис: void onEnter
Локальная переменная: T entity - заявка.
Действие при выходе [динамический]
Код, выполняемый, когда заявка покидает объект через порт out.
Синтаксис: void onExit
Локальная переменная: T entity - заявка.
Объект ResourcePool [динамический]
Выражение, возвращающее имя объекта ResourcePool, задающего ресурсы, которые требуется захватить. Если Вы оставите поле пустым, или если выражение будет возвращать null, то будут использоваться ресурсы объекта ResourcePool, соединенного с портом access этого объекта Seize.
Синтаксис: ResourcePool resourcePool
Значение по умолчанию: null
Локальная переменная: T entity - заявка.
Вместимость очереди
[Параметр виден, если не выбрана опция Максимальная вместимость] Вместимость вложенной очереди queue.
Синтаксис: int capacity
Значение по умолчанию: 100
Максимальная вместимость очереди
Если опция выбрана (true), то вместимость очереди queue будет максимально возможной (ограничена константой Integer.MAX_VALUE).
Синтаксис: boolean maximumCapacity
Значение по умолчанию: false
Разрешить уход по таймауту
Если опция выбрана (true), то заявки могут покидать очередь по таймауту. После проведения в очереди максимально допустимого времени заявки будут покидать объект через специальный порт outTimeout.
Синтаксис: boolean enableTimeout
Значение по умолчанию: true
Таймаут [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Выражение, вычисляющее значение таймаута (максимально допустимое время, которое заявка может провести в очереди) для заявки.
Синтаксис: double timeout
Локальная переменная: T entity - заявка.
Значение по умолчанию: Double.POSITIVE_INFINITY
Действие при уходе по таймауту [динамический]
[Параметр виден, если выбрана опция Разрешить уход по таймауту] Код, выполняемый, когда заявка покидает объект по таймауту (прождав в очереди максимально допустимое время) через специальный порт outTimeout.
Синтаксис: void onExitTimeout
Локальная переменная: T entity - заявка.
Разрешить вытеснение
Если опция выбрана (true), то заявки помещаются в очередь в соответствии с их приоритетами и могут быть вытеснены из очереди заявками с более высокими приоритетами. 
Синтаксис: boolean enablePreemption
Значение по умолчанию: false
Приоритет заявки [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Приоритет поступающей в объект заявки (чем больше значение, тем выше приоритет).
Синтаксис: double priority
Значение по умолчанию: 0
Локальная переменная: T entity - заявка.
Действие при вытеснении [динамический]
[Параметр виден, если выбрана опция Разрешить вытеснение] Код, выполняемый, когда заявка покидает объект через порт outPreempted в результате вытеснения.
Синтаксис: void onExitPreempted
Локальная переменная: T entity - заявка.
Фигура анимации
Фигура анимации вложенного объекта queue. Тип фигуры зависит от выбранного Типа анимации.
Синтаксис: Shape animationGuide
Тип анимации
Тип анимации вложенного объекта queue. Допустимые значения: Путь, Мешок, Упорядоченная, Набор, Одиночная
Синтаксис: int animationType
Значение по умолчанию: Путь
Допустимые значения: Animator.PATH, Animator.BAG, Animator.ARRANGED, Animator.SET, Animator.SINGLE
Направление анимации
[Параметр виден, если в качестве Типа анимации выбран Путь] Направление движение анимаций заявок по фигуре анимации вложенного объекта queue.
Синтаксис: boolean animationForward
Значение по умолчанию: Вперед (true)
Включить сбор статистики
Если опция выбрана (true), то будет собираться статистика длины очереди заявок.
Синтаксис: boolean enableStats
Значение по умолчанию: false

Функции

int size() - возвращает количество заявок, находящихся в данный момент в очереди queue

T get( int index ) -  возвращает заявку, находящуюся в очереди в позиции с номером index (ближайшая к выходу из очереди позиция имеет номер 0).

T remove( T entity ) - извлекает заявку entity из очереди и возвращает ее. Если такой заявки в очереди обнаружено не будет, метод вернет null.