Процессоры

Процессор - обработчик, который обрабатывает сообщение произвольным образом.

Подробнее - https://camel.apache.org/manual/processor.html

CsvToListOfDataProcessor

Данный процессор предназначен для чтения CSV-данных и преобразования их в список объектов DataValue:

../../_images/Proc_02.png

Первая строка файла - заголовки, последующие - данные, соответствующие заголовкам

Параметры:

Key

Value

delimiter

Разделитель. По умолчанию запятая

Пример:

- beans:
    - name: "csvToListOfDataProcessor"
      type: ru.citeck.ecos.camel.processor.reader.CsvToListOfDataProcessor
      properties:
        delimiter: ";"
- route:
    from:
      uri: "file-from-camel-dsl:randomName"
      steps:
        - process:
            ref: csvToListOfDataProcessor
        - split:
            simple: "${body}"
            steps:
              - to: ecos-records-mutate:?sourceId=emodel/camel-example-employee

ExcelToListOfDataProcessor

Данный процессор предназначен для чтения данных из формата Excel (XLSX) и преобразования их в список объектов DataValue:

../../_images/Proc_03.png

Параметры:

Key

Value

sheetName

Название листа Excel. По умолчанию используется первый лист

tableStartCellReference

Ссылка на начальную ячейку таблицы (откуда начинается строка с заголовками). По умолчанию «A1»

customAttNames

Ассоциативный массив пользовательских имен атрибутов, где ключ - буква столбца (например, «A»), а значение - желаемое имя атрибута.

Пример:

- beans:
    - name: "excelProcessor"
      type: ru.citeck.ecos.camel.processor.reader.ExcelToListOfDataProcessor
      properties:
        sheetName: SomeRandomSheetName
        tableStartCellReference: C11
        customAttNames:
          B: employeeSalary
          F: employeeManager
- route:
    from:
      uri: "file-from-camel-dsl:randomName"
      steps:
        - process:
            ref: excelProcessor
        - split:
            simple: "${body}"
            steps:
              - to: "ecos-records-mutate:?sourceId=emodel/camel-example-employee"

AssocRefByAttributeProcessor

Данный процессор принимает объект DataValue и на основании переданных заголовков (обязательных) находит EntityRef необходимой ассоциации и проставляет это значение в DataValue:

../../_images/Proc_04.png

Параметры заголовков («setHeader» должен быть под именем «AssocRefByAttributeConfig»):

Key

Value

sourceId

ID источника данных где будем искать ассоциацию

findByAttribute

Системное имя атрибута, по которому будем искать ассоциацию

attributeKey

Название ключа атрибута в переданном DataValue

Пример:

- beans:
    - name: "csvToListOfDataProcessor"
      type: ru.citeck.ecos.camel.processor.reader.CsvToListOfDataProcessor
    - name: "assocRefByAttributeProcessor"
      type: ru.citeck.ecos.camel.processor.data.AssocRefByAttributeProcessor
- route:
    from:
      uri: "file-from-camel-dsl:randomName"
      steps:
        - process:
            ref: csvToListOfDataProcessor
        - setHeader:
            name: AssocRefByAttributeConfig
            constant:
              sourceId: "emodel/camel-example-position"
              findByAttribute: "name"
              attributeKey: "position"
        - process:
            ref: assocRefByAttributeProcessor
        - split:
            simple: "${body}"
            steps:
              - to: "ecos-records-mutate:?sourceId=emodel/camel-example-employee"

CopyJournalSettingsProcessor

Данный процессор преобразует данные о шаблонах журнала, помогая тем самым перекопировать шаблоны от 1 журнала к другому.

Для его использования необходимо добавить его, с соответствующей конфигурацией, в свой конфигурационный yml файл:

- beans:
    - name: copyJournalSettings
      type: ru.citeck.ecos.camel.processor.data.CopyJournalSettingsProcessor
      properties:
        journalSettingMappingConfigs:
          - journalId: test-journal
            journalOldId: test-old-journal
            mapping:
              attFieldName: attOldFieldName
          - journalId: signerType
            journalOldId: old-signerType
            mapping:
              stTitle: old:stType
              stDescription: old:stDescription

Где:

  • name - Имя процессора, которое мы будем использовать в роутах Camel DSL

  • type - Класс, на основе которого создается процессор (Неизменяемый параметр)

  • properties - Конфигурация нашего класса. Нам необходимо заполнить переменную journalSettingMappingConfigs, которая является списком настроек для копирования шаблонов для журналов. Переменные настроек:

    • journalId - Id журнала в котором мы хотим создавать шаблоны

    • journalOldId - Id журнала из которого мы будем забирать шаблоны и переносить их в новый журнал

    • mapping - маппинг сопоставления колонок между старым журналом и новым. В качестве ключа указывается Id колонки из журнала в который мигрируем, а в качестве значения - из которого мигрируем

Далее мы просто используем данный процессор в своем Camel DSL роуте.

Пример полноценного роута с данным процессором:

---
- beans:
    - name: copyJournalSettings
      type: ru.citeck.ecos.camel.processor.data.CopyJournalSettingsProcessor
      properties:
        journalSettingMappingConfigs:
          - journalId: test-journal
            journalOldId: test-old-journal
            mapping:
              attFieldName: attOldFieldName
          - journalId: signerType
            journalOldId: old-signerType
            mapping:
              stTitle: old:stType
              stDescription: old:stDescription

# copy-journal-settings
- route:
    from:
      uri: ecos-records-sync-consumer:copy-journal-settings
      parameters:
        delay: 60000
        sourceId: uiserv/journal-settings
        predicate:
          t: and
          v:
            - t: not
              v:
                t: ends
                a: id
                v: -mgr
            - t: in
              a: journalId
              v:
                - old-signerType
        attributes:
          id: ?localId
          name: name?json
          authority: authority
          journalId: journalId
          settings: settings
      steps:
        - split:
            simple: "${body}"
            steps:
              - process:
                  ref: copyJournalSettings
              - to:
                  uri: ecos-records-mutate:?sourceId=uiserv/journal-settings

Примечания:

  • В предикате поиска мы указываем 2 предиката: 1-ый проверяет, что id**шаблона не заканчивается на *-mgr*, поскольку данный суффикс будут иметь перекопированные шаблоны и их не нужно обрабатывать. **2-ой указывает список журналов из которых мы хотим брать шаблоны для перекопирования (По идее тут должны быть журналы их конфигурации процессора, которые записаны в параметры journalOldId).

  • attributes остаются без изменения, поскольку данные поля обрабатываются в процессоре и переносятся в новый журнал.

  • В шаге роута используется split чтобы обрабатывать каждый шаблон по отдельности.

CreateEcosHistoryDocumentMirrorProcessor

Класс

ru.citeck.ecos.camel.processor.data.CreateEcosHistoryDocumentMirrorProcessor

Вход/Выход

На вход принимается либо объекты конвертируемые в DataValue, либо список таких объектов.

Если на входе Collection, то на выходе List<DataValue>.

Если на входе DataValue в виде листа, то на выходе новый лист с DataValue объектами после обработки.

Если на входе объект, конвертируемый в DataValue, то на выходе новый DataValue объект после обработки.

Описание

Создает связь между двумя записями DocumentRef и DocumentMirrorRef в БД ecos-history чтобы при загрузке истории для записи DocumentMirrorRef так же подтягивалась история записи DocumentRef.

При обработке сами записи истории не меняются и можно безопасно вызывать этот процессор для одной и той же записи многократно.

Процессор используется при миграции сущностей из одного хранилища в другое.

Свойства

Name

Тип

Описание

documentMirrorSourceId

String

см. хидеры → CreateEcosHistoryDocumentMirrorMirrorSourceId

documentMirrorRefIdPrefix

String

см. хидеры → CreateEcosHistoryDocumentMirrorDocumentMirrorRefIdPrefix

documentRefIdPrefix

String

см. хидеры → CreateEcosHistoryDocumentMirrorDocumentRefIdPrefix

Хидеры

Name

Тип

По умолчанию

Описание

CreateEcosHistoryDocumentMirrorConfig

Объект:

documentMirrorRefIdPrefix: String = "",
documentRefIdPrefix: String = "",
documentMirrorSourceId: String = "",
documentRef: String = "",
documentMirrorRef: String = ""

{}

Общий объект конфигурации для всех настроек, которые описаны ниже.
Имеет меньший приоритет по сравнению с соответствующими хидерами ниже.

CreateEcosHistoryDocumentMirrorDocumentRef

String

Берется атрибут «id» из value и к нему добавляется префикс, который задан в
documentRefIdPrefix (CreateEcosHistoryDocumentMirrorDocumentRefIdPrefix)

Документ, из которого мы хотим передавать историю

CreateEcosHistoryDocumentMirrorDocumentRefIdPrefix

String

«»

Используется для формирования полного рефа в documentRef на базе атрибута «id» в обрабатываемом значении.

CreateEcosHistoryDocumentMirrorDocumentMirrorRef

String

Берется атрибут «id» из value и к нему добавляется префикс, который задан в
documentMirrorRefIdPrefix (CreateEcosHistoryDocumentMirrorDocumentMirrorRefIdPrefix)
Если префикс не задан или атрибут id отсутствует, то берется documentRef и у него меняется sourceId на
documentMirrorSourceId (CreateEcosHistoryDocumentMirrorMirrorSourceId)

Документ, которому мы хотим передавать историю

CreateEcosHistoryDocumentMirrorDocumentMirrorRefIdPrefix

String

«»

Используется для формирования полного рефа в documentMirrorRef на базе атрибута «id» в обрабатываемом значении.

CreateEcosHistoryDocumentMirrorMirrorSourceId

String

«»

Используется для формирования полного рефа в documentMirrorRef на базе значения documentRef с заменой sourceId на указанное здесь значение.

Пример Camel YAML DSL конфига

---
- beans:
    - name: createHistoryDocumentMirror
      type: ru.citeck.ecos.camel.processor.data.CreateEcosHistoryDocumentMirrorProcessor
- route:
    from:
      uri: ecos-records-sync-consumer:alf-route-template-code
      parameters:
        sourceId: alfresco/
        predicate:
          t: eq
          a: _type
          v: route-template-code
        addAuditAttributes: true
        attributes:
          id: ?localId
      steps:
        - setHeader:
            name: CreateEcosHistoryDocumentMirrorConfig
            constant:
              documentRefIdPrefix: 'alfresco/@workspace://SpacesStore/'
              documentMirrorRefIdPrefix: 'emodel/route-template-code@'
        - process:
            ref: createHistoryDocumentMirror