Поиск связанных элементов

Материал из Integra-S Wiki
Перейти к: навигация, поиск

Строка поиска связанных элементов состоит из набора команд разделенных символом /.

Механизм поиска связанных элементов по заданному элементу представляет собой конечный автомат, со следующими состояниями:

  1. Устройство (Item) - принимает следующие команды:
    1. Имя параметра - считать из параметра идентификатор (или список идентификаторов) устройств и перейти в них.
    2. Имя разъема - перейти в указаный разъем.
    3. Тип разъема - перейти в разъемы указанного типа.
    4. Тип связи - перейти в связи указанного типа.
    5. Тип устройства - остаться в текущем устройстве, если его тип совместим с указанным, иначе остановить поиск.
  2. Связь (Link) - принимает следующие команды:
    1. Имя параметра - считать из параметра идентификатор (или список идентификаторов) устройств и перейти в них.
    2. Тип разъема - перейти в разъемы указанного типа.
    3. Тип устройства - перейти в устройство указанного типа соединенного с любым концом данной связи.
    4. Тип связи - остаться в текущей связи, если ее тип совместим с указанным, иначе остановить поиск.
  3. Разъем (Pin) - принимает следующие команды:
    1. Тип устройства - перейти в устройства указанного типа подключенные к текущему разъему на другой стороне.
    2. Событие (Event) - принимает следующие команды:
    3. Имя параметра - считать из параметра идентификатор (или список идентификаторов) устройств и перейти в них.

Типом данных для поиска связанных элементов является список строк. Каждая строка из списка является командой для текущего состояния. Если по команде ничего не найдено, поиск по этой ветке останавливается.

В дополнение к описанному первым элементом этого списка строк можно указать:

  1. * - выбрать все устройства в графе.
  2. Идентификатор устройства - выбрать устройство по данному идентификатору или несколько устройств по идентификаторам разделенным символом |.
  3. Имя устройства - возможен так же поиск устройства по имени, однако имя устройства в таком случае должно содержать либо пробел, либо дефис, как в идентификаторе. Так же следует помнить о том, что имя устройства не обязательно уникально, и в случае наличия дубликатов будет найден первый попавшийся.

Так же каждая команда в свою очередь может состоять из нескольких вариантов разделенных символом |.


Примеры использования:

Найти все видеокамеры:

"*/VideoCamera"

Найти видеокамеру по идентификатору:

"2c5a5d58-5d04-4325-81c6-830a0661bb41/VideoCamera"

Найти видеокамеру по имени:

"Какая-то видеокамера/VideoCamera"

Найти все камеры, соединенные любым способом с двумя пространствами с указанными идентификаторами:

"1b63a2bd-733d-4788-9fb1-c987335eafcf|f62fe1da-a563-4c90-b13c-3d9eb95a5573/Space/Pin/VideoCamera"

Найти все видеокамеры подключенные к разъему logicOutput текущего устройства:

"logicOutput/VideoCamera"

Найти все видеокамеры находящиеся с текущим устройством в одном помещении:

"Pin/Space/Pin/VideoCamera"

Найти все видеокамеры соединенные любым способом с зоной, идентификатор которой содержится в параметре owner текущего события:

"owner/Zone/Pin/VideoCamera"

Найти все видеокамеры соединенные любым способом с зонами, идентификаторы которых содержатся в параметре trace_zones текущего подвижного объекта:

"trace_zones/Zone/Pin/VideoCamera"

Найти все сирены LowCurrentSirenMeta находящиеся с заданным элементом либо в одной зоне либо в одном пространстве:

"Link/Space|Zone/Link/LowCurrentSirenMeta"