@netgrif/components-core 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +132 -0
- package/README.md +105 -0
- package/bundles/netgrif-components-core.umd.js +32298 -0
- package/bundles/netgrif-components-core.umd.js.map +1 -0
- package/bundles/netgrif-components-core.umd.min.js +17 -0
- package/bundles/netgrif-components-core.umd.min.js.map +1 -0
- package/commons/angular-cli-devkit-core-strings.d.ts +93 -0
- package/commons/import-to-add.d.ts +5 -0
- package/commons/schema.d.ts +277 -0
- package/commons/view-class-info.d.ts +22 -0
- package/esm2015/assets/i18n/de.json +419 -0
- package/esm2015/assets/i18n/en.json +419 -0
- package/esm2015/assets/i18n/sk.json +419 -0
- package/esm2015/commons/angular-cli-devkit-core-strings.js +157 -0
- package/esm2015/commons/import-to-add.js +7 -0
- package/esm2015/commons/schema.js +7 -0
- package/esm2015/commons/view-class-info.js +52 -0
- package/esm2015/lib/admin/public-api.js +9 -0
- package/esm2015/lib/admin/role-assignment/abstract-role-assignment.js +77 -0
- package/esm2015/lib/admin/role-assignment/services/ProcessList.js +155 -0
- package/esm2015/lib/admin/role-assignment/services/role-assignment.service.js +40 -0
- package/esm2015/lib/admin/user-invite/abstract-user-invite.component.js +77 -0
- package/esm2015/lib/admin/user-invite/services/organization-list.service.js +63 -0
- package/esm2015/lib/admin/user-invite/services/user-invite.service.js +31 -0
- package/esm2015/lib/allowed-nets/public-api.js +4 -0
- package/esm2015/lib/allowed-nets/services/allowed-nets.service.js +74 -0
- package/esm2015/lib/allowed-nets/services/base-allowed-nets.service.js +54 -0
- package/esm2015/lib/allowed-nets/services/factory/allowed-nets-service-factory.js +129 -0
- package/esm2015/lib/authentication/anonymous/anonymous.service.js +63 -0
- package/esm2015/lib/authentication/authentication.factory.js +16 -0
- package/esm2015/lib/authentication/authentication.module.js +32 -0
- package/esm2015/lib/authentication/components/abstract-authentication-overlay.js +50 -0
- package/esm2015/lib/authentication/models/credentials.js +2 -0
- package/esm2015/lib/authentication/models/public-api.js +5 -0
- package/esm2015/lib/authentication/models/transformer.js +2 -0
- package/esm2015/lib/authentication/models/user.transformer.js +19 -0
- package/esm2015/lib/authentication/public-api.js +14 -0
- package/esm2015/lib/authentication/services/anonymous-authentication-interceptor.js +44 -0
- package/esm2015/lib/authentication/services/authentication/authentication.service.js +71 -0
- package/esm2015/lib/authentication/services/authentication-interceptor.js +52 -0
- package/esm2015/lib/authentication/services/authentication-method.service.js +5 -0
- package/esm2015/lib/authentication/services/guard/authentication-guard.service.js +39 -0
- package/esm2015/lib/authentication/services/methods/basic-authentication/basic-authentication.service.js +48 -0
- package/esm2015/lib/authentication/services/methods/null-authentication/null-authentication.service.js +19 -0
- package/esm2015/lib/authentication/services/public-api.js +7 -0
- package/esm2015/lib/authentication/session/null-storage.js +15 -0
- package/esm2015/lib/authentication/session/public-api.js +3 -0
- package/esm2015/lib/authentication/session/services/session.service.js +156 -0
- package/esm2015/lib/authentication/sign-up/models/user-invitation-request.js +2 -0
- package/esm2015/lib/authentication/sign-up/models/user-registration-request.js +2 -0
- package/esm2015/lib/authentication/sign-up/public-api.js +8 -0
- package/esm2015/lib/authentication/sign-up/services/sign-up.service.js +105 -0
- package/esm2015/lib/authentication/sign-up/sign-up.module.js +13 -0
- package/esm2015/lib/authorization/authority/authority-guard.service.js +50 -0
- package/esm2015/lib/authorization/group/group-guard.service.js +67 -0
- package/esm2015/lib/authorization/permission/permission.service.js +116 -0
- package/esm2015/lib/authorization/public-api.js +10 -0
- package/esm2015/lib/authorization/role/role-guard.service.js +105 -0
- package/esm2015/lib/changed-fields/public-api.js +2 -0
- package/esm2015/lib/changed-fields/services/changed-fields.service.js +32 -0
- package/esm2015/lib/configuration/configuration.service.js +190 -0
- package/esm2015/lib/configuration/public-api.js +3 -0
- package/esm2015/lib/covalent/covalent.module.js +22 -0
- package/esm2015/lib/currency/currency.module.js +23 -0
- package/esm2015/lib/dashboard/cards/count-card/abstract-count-card.js +39 -0
- package/esm2015/lib/dashboard/cards/custom-card/abstract-custom-card.js +47 -0
- package/esm2015/lib/dashboard/cards/iframe-card/abstract-iframe-card.js +14 -0
- package/esm2015/lib/dashboard/cards/model/card-grid-element.js +2 -0
- package/esm2015/lib/dashboard/cards/model/count-card.js +2 -0
- package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.js +2 -0
- package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.js +2 -0
- package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/custom-card.js +2 -0
- package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.js +2 -0
- package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.js +7 -0
- package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.js +7 -0
- package/esm2015/lib/dashboard/cards/model/dashboard-card-types.js +13 -0
- package/esm2015/lib/dashboard/cards/model/dashboard-card.js +2 -0
- package/esm2015/lib/dashboard/cards/model/graph-card.js +2 -0
- package/esm2015/lib/dashboard/cards/model/iframe-card.js +2 -0
- package/esm2015/lib/dashboard/dashboard-content/abstract-dashboard-content.js +19 -0
- package/esm2015/lib/dashboard/dashboard-content/dashboard-params.js +2 -0
- package/esm2015/lib/dashboard/public-api.js +20 -0
- package/esm2015/lib/data-fields/boolean-field/abstract-boolean-field.component.js +40 -0
- package/esm2015/lib/data-fields/boolean-field/models/boolean-field.js +24 -0
- package/esm2015/lib/data-fields/button-field/abstract-button-field.component.js +62 -0
- package/esm2015/lib/data-fields/button-field/models/button-field.js +27 -0
- package/esm2015/lib/data-fields/data-field-template/abstract-data-field-template.component.js +101 -0
- package/esm2015/lib/data-fields/data-field-template/models/wrapped-boolean.js +6 -0
- package/esm2015/lib/data-fields/data-fields.module.js +35 -0
- package/esm2015/lib/data-fields/date-field/abstract-date-field.component.js +21 -0
- package/esm2015/lib/data-fields/date-field/models/custom-date-adapter.js +11 -0
- package/esm2015/lib/data-fields/date-field/models/date-field.js +10 -0
- package/esm2015/lib/data-fields/date-time-field/abstract-date-time-field.component.js +21 -0
- package/esm2015/lib/data-fields/date-time-field/models/date-time-field.js +10 -0
- package/esm2015/lib/data-fields/enumeration-field/abstract-enumeration-field.component.js +17 -0
- package/esm2015/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.js +43 -0
- package/esm2015/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.js +53 -0
- package/esm2015/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.js +37 -0
- package/esm2015/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.js +11 -0
- package/esm2015/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.js +11 -0
- package/esm2015/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.js +40 -0
- package/esm2015/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.js +44 -0
- package/esm2015/lib/data-fields/enumeration-field/models/enumeration-field.js +59 -0
- package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +390 -0
- package/esm2015/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.js +2 -0
- package/esm2015/lib/data-fields/file-field/models/file-field-value.js +2 -0
- package/esm2015/lib/data-fields/file-field/models/file-field.js +106 -0
- package/esm2015/lib/data-fields/file-list-field/abstract-file-list-field.component.js +261 -0
- package/esm2015/lib/data-fields/file-list-field/models/file-list-field-value.js +2 -0
- package/esm2015/lib/data-fields/file-list-field/models/file-list-field.js +83 -0
- package/esm2015/lib/data-fields/filter-field/abstract-filter-field-content.component.js +29 -0
- package/esm2015/lib/data-fields/filter-field/abstract-filter-field.component.js +28 -0
- package/esm2015/lib/data-fields/filter-field/models/filter-field-injection-token.js +7 -0
- package/esm2015/lib/data-fields/filter-field/models/filter-field.js +15 -0
- package/esm2015/lib/data-fields/i18n-field/abstract-i18n-field.component.js +19 -0
- package/esm2015/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.js +26 -0
- package/esm2015/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.js +40 -0
- package/esm2015/lib/data-fields/i18n-field/models/i18n-field-value.js +2 -0
- package/esm2015/lib/data-fields/i18n-field/models/i18n-field.js +10 -0
- package/esm2015/lib/data-fields/models/abstract-data-field-component.js +39 -0
- package/esm2015/lib/data-fields/models/abstract-data-field.js +391 -0
- package/esm2015/lib/data-fields/models/behavior.js +2 -0
- package/esm2015/lib/data-fields/models/boolean-label-enabled-token.js +3 -0
- package/esm2015/lib/data-fields/models/changed-fields.js +2 -0
- package/esm2015/lib/data-fields/models/component.js +2 -0
- package/esm2015/lib/data-fields/models/format-filter.js +2 -0
- package/esm2015/lib/data-fields/models/icon.js +6 -0
- package/esm2015/lib/data-fields/models/invalid-data-policy-token.js +11 -0
- package/esm2015/lib/data-fields/models/layout.js +2 -0
- package/esm2015/lib/data-fields/models/material-appearance.js +14 -0
- package/esm2015/lib/data-fields/models/properties.js +2 -0
- package/esm2015/lib/data-fields/models/template-appearance.js +15 -0
- package/esm2015/lib/data-fields/models/validation.js +2 -0
- package/esm2015/lib/data-fields/multichoice-field/abstract-multichoice-field.component.js +17 -0
- package/esm2015/lib/data-fields/multichoice-field/models/multichoice-field.js +41 -0
- package/esm2015/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.js +9 -0
- package/esm2015/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.js +9 -0
- package/esm2015/lib/data-fields/number-field/abstract-number-errors.component.js +45 -0
- package/esm2015/lib/data-fields/number-field/abstract-number-field.component.js +18 -0
- package/esm2015/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.js +48 -0
- package/esm2015/lib/data-fields/number-field/models/number-field.js +131 -0
- package/esm2015/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.js +7 -0
- package/esm2015/lib/data-fields/public-api.js +73 -0
- package/esm2015/lib/data-fields/task-ref-field/model/task-ref-field.js +7 -0
- package/esm2015/lib/data-fields/text-field/abstract-text-errors.component.js +35 -0
- package/esm2015/lib/data-fields/text-field/abstract-text-field.component.js +15 -0
- package/esm2015/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.js +39 -0
- package/esm2015/lib/data-fields/text-field/models/text-area-field.js +13 -0
- package/esm2015/lib/data-fields/text-field/models/text-field.js +85 -0
- package/esm2015/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.js +17 -0
- package/esm2015/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.js +30 -0
- package/esm2015/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.js +17 -0
- package/esm2015/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.js +40 -0
- package/esm2015/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.js +45 -0
- package/esm2015/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.js +105 -0
- package/esm2015/lib/data-fields/user-field/abstract-user-field.component.js +59 -0
- package/esm2015/lib/data-fields/user-field/models/user-field.js +14 -0
- package/esm2015/lib/data-fields/user-field/models/user-value.js +36 -0
- package/esm2015/lib/dialog/components/alert-dialog/alert-dialog.component.js +38 -0
- package/esm2015/lib/dialog/components/alert-dialog/alert-dialog.module.js +28 -0
- package/esm2015/lib/dialog/components/confirm-dialog/confirm-dialog.component.js +52 -0
- package/esm2015/lib/dialog/components/confirm-dialog/confirm-dialog.module.js +28 -0
- package/esm2015/lib/dialog/components/prompt-dialog/prompt-dialog.component.js +42 -0
- package/esm2015/lib/dialog/components/prompt-dialog/prompt-dialog.module.js +30 -0
- package/esm2015/lib/dialog/dialog.module.js +29 -0
- package/esm2015/lib/dialog/models/DialogData.js +2 -0
- package/esm2015/lib/dialog/models/DialogResult.js +2 -0
- package/esm2015/lib/dialog/models/abstract-dialog.js +21 -0
- package/esm2015/lib/dialog/public-api.js +9 -0
- package/esm2015/lib/dialog/services/dialog.service.js +82 -0
- package/esm2015/lib/event/model/event-constants.js +8 -0
- package/esm2015/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.js +2 -0
- package/esm2015/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.js +2 -0
- package/esm2015/lib/event/public-api.js +19 -0
- package/esm2015/lib/event/services/event.service.js +57 -0
- package/esm2015/lib/event/services/interfaces/changed-fields-map.js +2 -0
- package/esm2015/lib/event-queue/model/queued-event.js +31 -0
- package/esm2015/lib/event-queue/public-api.js +5 -0
- package/esm2015/lib/event-queue/services/event-queue.service.js +63 -0
- package/esm2015/lib/filter/filter.repository.js +141 -0
- package/esm2015/lib/filter/models/case-search-request-body.js +2 -0
- package/esm2015/lib/filter/models/filter-type.js +11 -0
- package/esm2015/lib/filter/models/filter.js +56 -0
- package/esm2015/lib/filter/models/filters-filter-injection-token.js +9 -0
- package/esm2015/lib/filter/models/merge-operator.js +11 -0
- package/esm2015/lib/filter/models/merged-filter-params.js +2 -0
- package/esm2015/lib/filter/models/merged-filter.js +111 -0
- package/esm2015/lib/filter/models/simple-filter.js +91 -0
- package/esm2015/lib/filter/models/task-search-request-body.js +2 -0
- package/esm2015/lib/filter/models/user-filter-constants.js +39 -0
- package/esm2015/lib/filter/public-api.js +18 -0
- package/esm2015/lib/filter/user-filters.service.js +337 -0
- package/esm2015/lib/forms/email-submission/abstract-email-submission-form.component.js +31 -0
- package/esm2015/lib/forms/forgotten-password/abstract-forgotten-password.component.js +32 -0
- package/esm2015/lib/forms/has-form.js +2 -0
- package/esm2015/lib/forms/login/abstract-login-form.component.js +58 -0
- package/esm2015/lib/forms/models/abstract-registration.component.js +94 -0
- package/esm2015/lib/forms/models/password.validator.js +21 -0
- package/esm2015/lib/forms/public-api.js +7 -0
- package/esm2015/lib/forms/registration/abstract-registration-form.component.js +37 -0
- package/esm2015/lib/groups/public-api.js +3 -0
- package/esm2015/lib/groups/services/active-group.service.js +88 -0
- package/esm2015/lib/groups/services/next-group.service.js +104 -0
- package/esm2015/lib/header/abstract-header-service.js +394 -0
- package/esm2015/lib/header/abstract-header.component.js +159 -0
- package/esm2015/lib/header/case-header/case-header.service.js +81 -0
- package/esm2015/lib/header/case-header/case-menta-enum.js +9 -0
- package/esm2015/lib/header/header-modes/abstract-header-mode.component.js +12 -0
- package/esm2015/lib/header/header-modes/edit-mode/abstract-edit-mode.component.js +73 -0
- package/esm2015/lib/header/header-modes/loading-mode/abstract-loading-mode.component.js +13 -0
- package/esm2015/lib/header/header-modes/search-mode/abstract-search-mode.component.js +86 -0
- package/esm2015/lib/header/header-modes/sort-mode/abstract-sort-mode.component.js +15 -0
- package/esm2015/lib/header/header-state.js +43 -0
- package/esm2015/lib/header/models/default-headers-token.js +3 -0
- package/esm2015/lib/header/models/fields-group.js +2 -0
- package/esm2015/lib/header/models/header-column.js +22 -0
- package/esm2015/lib/header/models/header-mode.js +7 -0
- package/esm2015/lib/header/models/header-type.js +7 -0
- package/esm2015/lib/header/models/public-api.js +12 -0
- package/esm2015/lib/header/models/user-changes/column-header-change.js +2 -0
- package/esm2015/lib/header/models/user-changes/edit-change-description.js +2 -0
- package/esm2015/lib/header/models/user-changes/header-change-description.js +2 -0
- package/esm2015/lib/header/models/user-changes/header-change-type.js +20 -0
- package/esm2015/lib/header/models/user-changes/header-change.js +2 -0
- package/esm2015/lib/header/models/user-changes/mode-change-description.js +2 -0
- package/esm2015/lib/header/models/user-changes/search-change-description.js +2 -0
- package/esm2015/lib/header/models/user-changes/sort-change-description.js +2 -0
- package/esm2015/lib/header/public-api.js +21 -0
- package/esm2015/lib/header/services/overflow.service.js +94 -0
- package/esm2015/lib/header/task-header/task-header.service.js +66 -0
- package/esm2015/lib/header/task-header/task-meta-enum.js +11 -0
- package/esm2015/lib/header/workflow-header/workflow-header.service.js +48 -0
- package/esm2015/lib/header/workflow-header/workflow-meta-enum.js +10 -0
- package/esm2015/lib/legal/legal-notice/abstract-legal-notice.component.js +16 -0
- package/esm2015/lib/legal/public-api.js +2 -0
- package/esm2015/lib/logger/models/log-entry.js +61 -0
- package/esm2015/lib/logger/public-api.js +10 -0
- package/esm2015/lib/logger/publishers/console-log-publisher.js +32 -0
- package/esm2015/lib/logger/publishers/local-storage-log-publisher.js +40 -0
- package/esm2015/lib/logger/publishers/log-publisher.js +12 -0
- package/esm2015/lib/logger/services/log-level.js +10 -0
- package/esm2015/lib/logger/services/log-publisher.service.js +59 -0
- package/esm2015/lib/logger/services/logger.service.js +77 -0
- package/esm2015/lib/material/material.module.js +108 -0
- package/esm2015/lib/moment/public-api.js +2 -0
- package/esm2015/lib/moment/time-formats.js +26 -0
- package/esm2015/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.js +36 -0
- package/esm2015/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.js +34 -0
- package/esm2015/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.js +5 -0
- package/esm2015/lib/navigation/model/filter-case-injection-token.js +6 -0
- package/esm2015/lib/navigation/model/group-navigation-component-resolver-component-injection-token.js +6 -0
- package/esm2015/lib/navigation/model/group-navigation-constants.js +59 -0
- package/esm2015/lib/navigation/model/group-navigation-item-label.js +2 -0
- package/esm2015/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.js +131 -0
- package/esm2015/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.js +14 -0
- package/esm2015/lib/navigation/navigation-rail/abstract-navigation-rail.component.js +32 -0
- package/esm2015/lib/navigation/navigation-tree/abstract-navigation-tree.component.js +371 -0
- package/esm2015/lib/navigation/public-api.js +19 -0
- package/esm2015/lib/navigation/quick-panel/components/abstract-quick-panel.component.js +25 -0
- package/esm2015/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.js +12 -0
- package/esm2015/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.js +52 -0
- package/esm2015/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.js +21 -0
- package/esm2015/lib/navigation/quick-panel/components/paper-view.service.js +38 -0
- package/esm2015/lib/navigation/quick-panel/public-api.js +8 -0
- package/esm2015/lib/navigation/utility/filter-extraction.service.js +87 -0
- package/esm2015/lib/navigation/utility/navigation-item-task-utility-methods.js +78 -0
- package/esm2015/lib/panel/abstract/featured-value.js +2 -0
- package/esm2015/lib/panel/abstract/panel-with-header-binding.js +47 -0
- package/esm2015/lib/panel/abstract/panel-with-immediate-data.js +62 -0
- package/esm2015/lib/panel/abstract/tabbed-virtual-scroll.component.js +28 -0
- package/esm2015/lib/panel/abstract-panel.component.js +44 -0
- package/esm2015/lib/panel/case-panel/abstract-case-panel.component.js +88 -0
- package/esm2015/lib/panel/immediate/abstract-immediate-filter-text-content.component.js +38 -0
- package/esm2015/lib/panel/immediate/abstract-immediate-filter-text.component.js +21 -0
- package/esm2015/lib/panel/immediate/model/filter-text-injection-token.js +6 -0
- package/esm2015/lib/panel/public-api.js +15 -0
- package/esm2015/lib/panel/task-panel/abstract-task-panel.component.js +281 -0
- package/esm2015/lib/panel/task-panel/models/disable-functions.js +3 -0
- package/esm2015/lib/panel/task-panel-list/abstract-task-list.component.js +89 -0
- package/esm2015/lib/panel/task-panel-list/task-panel-data/task-panel-data.js +2 -0
- package/esm2015/lib/panel/workflow-panel/abstract-workflow-panel.component.js +103 -0
- package/esm2015/lib/process/net.js +101 -0
- package/esm2015/lib/process/netRole.js +2 -0
- package/esm2015/lib/process/permissions.js +12 -0
- package/esm2015/lib/process/petri-net-reference-with-permissions.js +2 -0
- package/esm2015/lib/process/process.service.js +301 -0
- package/esm2015/lib/process/public-api.js +8 -0
- package/esm2015/lib/process/public-process.service.js +29 -0
- package/esm2015/lib/process/rolesAndPermissions.js +2 -0
- package/esm2015/lib/process/transaction.js +2 -0
- package/esm2015/lib/process/transition.js +2 -0
- package/esm2015/lib/public/factories/get-net-and-create-case.js +22 -0
- package/esm2015/lib/public/factories/public-factory-resolver.js +13 -0
- package/esm2015/lib/public/factories/public-search-factory.js +17 -0
- package/esm2015/lib/public/public-api.js +5 -0
- package/esm2015/lib/public/services/public-url-resolver.service.js +20 -0
- package/esm2015/lib/resources/abstract-endpoint/abstract-resource.service.js +79 -0
- package/esm2015/lib/resources/abstract-endpoint/count-service.js +2 -0
- package/esm2015/lib/resources/engine-endpoint/case-resource.service.js +133 -0
- package/esm2015/lib/resources/engine-endpoint/dashboard-resource.service.js +33 -0
- package/esm2015/lib/resources/engine-endpoint/petri-net-resource.service.js +161 -0
- package/esm2015/lib/resources/engine-endpoint/public/public-case-resource.service.js +46 -0
- package/esm2015/lib/resources/engine-endpoint/public/public-petri-net-resource.service.js +108 -0
- package/esm2015/lib/resources/engine-endpoint/public/public-task-resource.service.js +224 -0
- package/esm2015/lib/resources/engine-endpoint/task-resource.service.js +306 -0
- package/esm2015/lib/resources/engine-endpoint/user-resource.service.js +191 -0
- package/esm2015/lib/resources/interface/assigned-user-policy.js +2 -0
- package/esm2015/lib/resources/interface/author.js +2 -0
- package/esm2015/lib/resources/interface/authority.js +2 -0
- package/esm2015/lib/resources/interface/case-get-request-body.js +2 -0
- package/esm2015/lib/resources/interface/case.js +2 -0
- package/esm2015/lib/resources/interface/changed-field-container.js +2 -0
- package/esm2015/lib/resources/interface/count.js +2 -0
- package/esm2015/lib/resources/interface/create-case-request-body.js +2 -0
- package/esm2015/lib/resources/interface/data-group-layout.js +59 -0
- package/esm2015/lib/resources/interface/data-groups.js +19 -0
- package/esm2015/lib/resources/interface/event-outcome.js +2 -0
- package/esm2015/lib/resources/interface/field-alignment.js +10 -0
- package/esm2015/lib/resources/interface/fields.js +2 -0
- package/esm2015/lib/resources/interface/file-resource.js +2 -0
- package/esm2015/lib/resources/interface/group.js +2 -0
- package/esm2015/lib/resources/interface/immediate-data.js +2 -0
- package/esm2015/lib/resources/interface/link.js +2 -0
- package/esm2015/lib/resources/interface/message-resource.js +2 -0
- package/esm2015/lib/resources/interface/page.js +2 -0
- package/esm2015/lib/resources/interface/pagination.js +2 -0
- package/esm2015/lib/resources/interface/petri-net-object-id.js +2 -0
- package/esm2015/lib/resources/interface/petri-net-reference.js +2 -0
- package/esm2015/lib/resources/interface/petri-net-request-body.js +2 -0
- package/esm2015/lib/resources/interface/petri-net.js +2 -0
- package/esm2015/lib/resources/interface/preferences.js +2 -0
- package/esm2015/lib/resources/interface/process-role.js +2 -0
- package/esm2015/lib/resources/interface/response-data.js +2 -0
- package/esm2015/lib/resources/interface/task-layout.js +2 -0
- package/esm2015/lib/resources/interface/task-reference.js +2 -0
- package/esm2015/lib/resources/interface/task-set-data-request-body.js +2 -0
- package/esm2015/lib/resources/interface/task.js +2 -0
- package/esm2015/lib/resources/interface/user-process-role.js +2 -0
- package/esm2015/lib/resources/interface/user-resource-small.js +2 -0
- package/esm2015/lib/resources/interface/user-resource.js +2 -0
- package/esm2015/lib/resources/public-api.js +46 -0
- package/esm2015/lib/resources/resource-provider.service.js +168 -0
- package/esm2015/lib/resources/types/nae-date-type.js +5 -0
- package/esm2015/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.js +36 -0
- package/esm2015/lib/routing/public-api.js +7 -0
- package/esm2015/lib/routing/redirect-service/redirect.service.js +103 -0
- package/esm2015/lib/routing/routing-builder/routing-builder.service.js +190 -0
- package/esm2015/lib/routing/view-service/model/view-entry.js +2 -0
- package/esm2015/lib/routing/view-service/view.service.js +35 -0
- package/esm2015/lib/search/advanced-search-component/abstract-advanced-search.component.js +49 -0
- package/esm2015/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.js +34 -0
- package/esm2015/lib/search/category-factory/category-factory.js +94 -0
- package/esm2015/lib/search/category-factory/category-resolver.service.js +149 -0
- package/esm2015/lib/search/category-factory/category-serialisation-pair.js +2 -0
- package/esm2015/lib/search/category-factory/default-categories-factories.js +67 -0
- package/esm2015/lib/search/category-factory/default-search-categories.module.js +50 -0
- package/esm2015/lib/search/category-factory/optional-dependencies.js +2 -0
- package/esm2015/lib/search/category-factory/search-categories-injection-token.js +24 -0
- package/esm2015/lib/search/fulltext-search-component/abstract-fulltext-search.component.js +17 -0
- package/esm2015/lib/search/header-search-service/header-search.service.js +226 -0
- package/esm2015/lib/search/models/base-filter-injection-token.js +6 -0
- package/esm2015/lib/search/models/base-filter.js +2 -0
- package/esm2015/lib/search/models/boolean-operator.js +10 -0
- package/esm2015/lib/search/models/category/autocomplete-category.js +129 -0
- package/esm2015/lib/search/models/category/autocomplete-options.js +2 -0
- package/esm2015/lib/search/models/category/case/case-author.js +21 -0
- package/esm2015/lib/search/models/category/case/case-creation-date-time.js +43 -0
- package/esm2015/lib/search/models/category/case/case-creation-date.js +43 -0
- package/esm2015/lib/search/models/category/case/case-dataset.js +397 -0
- package/esm2015/lib/search/models/category/case/case-net-attribute-autocomplete-category.js +23 -0
- package/esm2015/lib/search/models/category/case/case-process.js +73 -0
- package/esm2015/lib/search/models/category/case/case-role.js +24 -0
- package/esm2015/lib/search/models/category/case/case-search.enum.js +15 -0
- package/esm2015/lib/search/models/category/case/case-simple-dataset.js +135 -0
- package/esm2015/lib/search/models/category/case/case-string-id.js +27 -0
- package/esm2015/lib/search/models/category/case/case-task.js +24 -0
- package/esm2015/lib/search/models/category/case/case-title.js +29 -0
- package/esm2015/lib/search/models/category/case/case-visual-id.js +23 -0
- package/esm2015/lib/search/models/category/categories.js +24 -0
- package/esm2015/lib/search/models/category/category.js +524 -0
- package/esm2015/lib/search/models/category/name-id-pair.js +2 -0
- package/esm2015/lib/search/models/category/net-attribute-autocomplete-category.js +59 -0
- package/esm2015/lib/search/models/category/net-attribute-pair.js +2 -0
- package/esm2015/lib/search/models/category/no-configuration-autocomplete-category.js +36 -0
- package/esm2015/lib/search/models/category/no-configuration-category.js +39 -0
- package/esm2015/lib/search/models/category/no-configuration-user-autocomplete-category.js +28 -0
- package/esm2015/lib/search/models/category/search-autocomplete-option.js +2 -0
- package/esm2015/lib/search/models/category/search-input-type.js +14 -0
- package/esm2015/lib/search/models/category/task/task-assignee.js +21 -0
- package/esm2015/lib/search/models/category/task/task-net-attribute-autocomplete-category.js +23 -0
- package/esm2015/lib/search/models/category/task/task-process.js +50 -0
- package/esm2015/lib/search/models/category/task/task-role.js +23 -0
- package/esm2015/lib/search/models/category/task/task-task.js +23 -0
- package/esm2015/lib/search/models/category/user-autocomplete.js +59 -0
- package/esm2015/lib/search/models/component-configuration/search-component-configuration-injection-token.js +8 -0
- package/esm2015/lib/search/models/component-configuration/search-component-configuration.js +2 -0
- package/esm2015/lib/search/models/component-configuration/search-mode.js +9 -0
- package/esm2015/lib/search/models/configuration-input.js +52 -0
- package/esm2015/lib/search/models/datafield-map-key.js +69 -0
- package/esm2015/lib/search/models/escape-result.js +2 -0
- package/esm2015/lib/search/models/operator/equals-date-time.js +26 -0
- package/esm2015/lib/search/models/operator/equals-date.js +26 -0
- package/esm2015/lib/search/models/operator/equals.js +21 -0
- package/esm2015/lib/search/models/operator/in-range-date-time.js +43 -0
- package/esm2015/lib/search/models/operator/in-range-date.js +42 -0
- package/esm2015/lib/search/models/operator/in-range.js +22 -0
- package/esm2015/lib/search/models/operator/is-null.js +69 -0
- package/esm2015/lib/search/models/operator/less-than-date-time.js +27 -0
- package/esm2015/lib/search/models/operator/less-than-date.js +27 -0
- package/esm2015/lib/search/models/operator/less-than-equal-date-time.js +27 -0
- package/esm2015/lib/search/models/operator/less-than-equal-date.js +26 -0
- package/esm2015/lib/search/models/operator/less-than-equal.js +17 -0
- package/esm2015/lib/search/models/operator/less-than.js +17 -0
- package/esm2015/lib/search/models/operator/like.js +29 -0
- package/esm2015/lib/search/models/operator/more-than-date-time.js +29 -0
- package/esm2015/lib/search/models/operator/more-than-date.js +29 -0
- package/esm2015/lib/search/models/operator/more-than-equal-date-time.js +27 -0
- package/esm2015/lib/search/models/operator/more-than-equal-date.js +27 -0
- package/esm2015/lib/search/models/operator/more-than-equal.js +17 -0
- package/esm2015/lib/search/models/operator/more-than.js +17 -0
- package/esm2015/lib/search/models/operator/not-equals-date-time.js +24 -0
- package/esm2015/lib/search/models/operator/not-equals-date.js +27 -0
- package/esm2015/lib/search/models/operator/not-equals.js +30 -0
- package/esm2015/lib/search/models/operator/operator.js +124 -0
- package/esm2015/lib/search/models/operator/operators.js +31 -0
- package/esm2015/lib/search/models/operator/substring.js +27 -0
- package/esm2015/lib/search/models/operator-template-part-type.js +15 -0
- package/esm2015/lib/search/models/operator-template-part.js +31 -0
- package/esm2015/lib/search/models/persistance/filter-metadata-allowed-nets.js +2 -0
- package/esm2015/lib/search/models/persistance/filter-metadata.js +2 -0
- package/esm2015/lib/search/models/persistance/filter-text-segment.js +2 -0
- package/esm2015/lib/search/models/persistance/generator-metadata.js +2 -0
- package/esm2015/lib/search/models/persistance/saved-filter-metadata.js +2 -0
- package/esm2015/lib/search/models/predicate/clause-predicate.js +78 -0
- package/esm2015/lib/search/models/predicate/editable-clause-predicate-with-generators.js +47 -0
- package/esm2015/lib/search/models/predicate/editable-clause-predicate.js +116 -0
- package/esm2015/lib/search/models/predicate/editable-elementary-predicate.js +20 -0
- package/esm2015/lib/search/models/predicate/editable-predicate-with-generator.js +37 -0
- package/esm2015/lib/search/models/predicate/editable-predicate.js +22 -0
- package/esm2015/lib/search/models/predicate/elementary-predicate.js +14 -0
- package/esm2015/lib/search/models/predicate/predicate-with-generator.js +95 -0
- package/esm2015/lib/search/models/predicate/predicate.js +90 -0
- package/esm2015/lib/search/models/predicate-removal-event.js +2 -0
- package/esm2015/lib/search/models/query/query.js +72 -0
- package/esm2015/lib/search/models/search-index.js +76 -0
- package/esm2015/lib/search/models/wrap-result.js +2 -0
- package/esm2015/lib/search/operator-service/operator-resolver.service.js +109 -0
- package/esm2015/lib/search/operator-service/operator.service.js +39 -0
- package/esm2015/lib/search/public-api.js +107 -0
- package/esm2015/lib/search/search-clause-component/abstract-search-clause.component.js +52 -0
- package/esm2015/lib/search/search-component/abstract-search.component.js +171 -0
- package/esm2015/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.js +75 -0
- package/esm2015/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +36 -0
- package/esm2015/lib/search/search-operand-input-component/abstract-search-operand-input.component.js +97 -0
- package/esm2015/lib/search/search-predicate-component/abstract-search-predicate.component.js +144 -0
- package/esm2015/lib/search/search-service/search.service.js +306 -0
- package/esm2015/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.js +163 -0
- package/esm2015/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.js +22 -0
- package/esm2015/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.js +2 -0
- package/esm2015/lib/side-menu/content-components/filter-selector/model/filtered-array.js +32 -0
- package/esm2015/lib/side-menu/content-components/import-net/abstract-import-net.component.js +123 -0
- package/esm2015/lib/side-menu/content-components/injection-tokens.js +8 -0
- package/esm2015/lib/side-menu/content-components/load-filter/abstract-load-filter.component.js +42 -0
- package/esm2015/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.js +2 -0
- package/esm2015/lib/side-menu/content-components/new-case/abstract-new-case.component.js +230 -0
- package/esm2015/lib/side-menu/content-components/new-case/model/new-case-injection-data.js +2 -0
- package/esm2015/lib/side-menu/content-components/option-selector/abstract-option-selector.component.js +28 -0
- package/esm2015/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.js +2 -0
- package/esm2015/lib/side-menu/content-components/public-api.js +20 -0
- package/esm2015/lib/side-menu/content-components/save-filter/abstract-save-filter.component.js +38 -0
- package/esm2015/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.js +2 -0
- package/esm2015/lib/side-menu/content-components/user-assign/abstract-user-assign.component.js +60 -0
- package/esm2015/lib/side-menu/content-components/user-assign/model/user-list-injected-data.js +2 -0
- package/esm2015/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.js +102 -0
- package/esm2015/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.js +13 -0
- package/esm2015/lib/side-menu/models/portal-wrapper.js +13 -0
- package/esm2015/lib/side-menu/models/side-menu-control.js +36 -0
- package/esm2015/lib/side-menu/models/side-menu-event.js +2 -0
- package/esm2015/lib/side-menu/models/side-menu-injection-data.js +2 -0
- package/esm2015/lib/side-menu/models/side-menu-ref.js +16 -0
- package/esm2015/lib/side-menu/models/side-menu-size.js +7 -0
- package/esm2015/lib/side-menu/net-version-visible-injection-token.js +4 -0
- package/esm2015/lib/side-menu/public-api.js +15 -0
- package/esm2015/lib/side-menu/services/side-menu.service.js +86 -0
- package/esm2015/lib/side-menu/side-menu-container/abstract-side-menu-container.component.js +34 -0
- package/esm2015/lib/side-menu/side-menu-injection-token.js +3 -0
- package/esm2015/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.js +26 -0
- package/esm2015/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.js +26 -0
- package/esm2015/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.js +26 -0
- package/esm2015/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.js +26 -0
- package/esm2015/lib/snack-bar/models/abstract-snack-bar.js +18 -0
- package/esm2015/lib/snack-bar/models/injection-token-snackbar.js +4 -0
- package/esm2015/lib/snack-bar/models/snack-bar-enums.js +12 -0
- package/esm2015/lib/snack-bar/models/snack-bar-injection-data.js +2 -0
- package/esm2015/lib/snack-bar/public-api.js +15 -0
- package/esm2015/lib/snack-bar/services/snack-bar.service.js +92 -0
- package/esm2015/lib/snack-bar/snack-bar.module.js +33 -0
- package/esm2015/lib/tabs/classes/opened-tab.js +48 -0
- package/esm2015/lib/tabs/classes/tab-view.js +262 -0
- package/esm2015/lib/tabs/interfaces.js +2 -0
- package/esm2015/lib/tabs/public-api.js +6 -0
- package/esm2015/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.js +17 -0
- package/esm2015/lib/tabs/tab-data-injection-token/tab-data-injection-token.js +8 -0
- package/esm2015/lib/tabs/tab-view/abstract-tab-view.component.js +67 -0
- package/esm2015/lib/task/interfaces/task-operations.js +2 -0
- package/esm2015/lib/task/models/null-task-operations.js +26 -0
- package/esm2015/lib/task/models/subject-task-operations.js +58 -0
- package/esm2015/lib/task/models/task-operations-injection-token.js +3 -0
- package/esm2015/lib/task/models/task-set-data-request-context.js +2 -0
- package/esm2015/lib/task/public-api.js +19 -0
- package/esm2015/lib/task/services/assign-policy.service.js +175 -0
- package/esm2015/lib/task/services/assign-task.service.js +191 -0
- package/esm2015/lib/task/services/cancel-task.service.js +189 -0
- package/esm2015/lib/task/services/data-focus-policy.service.js +36 -0
- package/esm2015/lib/task/services/delegate-task.service.js +185 -0
- package/esm2015/lib/task/services/finish-policy.service.js +79 -0
- package/esm2015/lib/task/services/finish-task.service.js +207 -0
- package/esm2015/lib/task/services/selected-case.service.js +38 -0
- package/esm2015/lib/task/services/task-data.service.js +538 -0
- package/esm2015/lib/task/services/task-handling-service.js +57 -0
- package/esm2015/lib/task/services/task-request-state.service.js +113 -0
- package/esm2015/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.js +39 -0
- package/esm2015/lib/task-content/model/async-rendering-configuration-injection-token.js +8 -0
- package/esm2015/lib/task-content/model/async-rendering-configuration.js +2 -0
- package/esm2015/lib/task-content/model/datafield-grid-layout-element.js +2 -0
- package/esm2015/lib/task-content/model/field-type-resource.js +23 -0
- package/esm2015/lib/task-content/model/policy.js +31 -0
- package/esm2015/lib/task-content/model/resource-interface.js +2 -0
- package/esm2015/lib/task-content/model/split-data-group.js +2 -0
- package/esm2015/lib/task-content/model/subgrid.js +235 -0
- package/esm2015/lib/task-content/model/task-content-element-type.js +19 -0
- package/esm2015/lib/task-content/model/task-event-notification.js +15 -0
- package/esm2015/lib/task-content/model/task-event.js +10 -0
- package/esm2015/lib/task-content/public-api.js +21 -0
- package/esm2015/lib/task-content/services/field-converter.service.js +348 -0
- package/esm2015/lib/task-content/services/single-task-content.service.js +72 -0
- package/esm2015/lib/task-content/services/task-content.service.js +266 -0
- package/esm2015/lib/task-content/services/task-event.service.js +45 -0
- package/esm2015/lib/task-content/services/unlimited-task-content.service.js +64 -0
- package/esm2015/lib/task-content/task-content/abstract-task-content.component.js +656 -0
- package/esm2015/lib/toolbar/abstract-toolbar.component.js +22 -0
- package/esm2015/lib/toolbar/public-api.js +2 -0
- package/esm2015/lib/translate/language.service.js +85 -0
- package/esm2015/lib/translate/public-api.js +3 -0
- package/esm2015/lib/translate/translate-interceptor.js +23 -0
- package/esm2015/lib/translate/translate-lib.module.js +38 -0
- package/esm2015/lib/user/components/user-card/abstract-user-card.component.js +44 -0
- package/esm2015/lib/user/models/iuser.js +2 -0
- package/esm2015/lib/user/models/public-api.js +6 -0
- package/esm2015/lib/user/models/user.js +37 -0
- package/esm2015/lib/user/models/view-id-injection-tokens.js +4 -0
- package/esm2015/lib/user/profile/abstract-profile.component.js +29 -0
- package/esm2015/lib/user/public-api.js +12 -0
- package/esm2015/lib/user/services/user-comparator.service.js +26 -0
- package/esm2015/lib/user/services/user-list.service.js +186 -0
- package/esm2015/lib/user/services/user-preference.service.js +152 -0
- package/esm2015/lib/user/services/user.service.js +203 -0
- package/esm2015/lib/user/services/view-id.service.js +30 -0
- package/esm2015/lib/utility/array-to-observable.js +10 -0
- package/esm2015/lib/utility/call-chain/after-action.js +12 -0
- package/esm2015/lib/utility/call-chain/call-chain.service.js +34 -0
- package/esm2015/lib/utility/clear-time-information.js +11 -0
- package/esm2015/lib/utility/destroy-subscription.js +10 -0
- package/esm2015/lib/utility/get-field.js +48 -0
- package/esm2015/lib/utility/get-immediate-data.js +9 -0
- package/esm2015/lib/utility/grid-layout/grid-layout-helper.js +76 -0
- package/esm2015/lib/utility/grid-layout/model/grid-element-with-item.js +2 -0
- package/esm2015/lib/utility/grid-layout/model/grid-element.js +2 -0
- package/esm2015/lib/utility/grid-layout/model/grid-filler.js +50 -0
- package/esm2015/lib/utility/incrementing-counter.js +21 -0
- package/esm2015/lib/utility/loading-emitter.js +19 -0
- package/esm2015/lib/utility/loading-with-filter-emitter.js +30 -0
- package/esm2015/lib/utility/navigation-item-task-filter-factory.js +11 -0
- package/esm2015/lib/utility/navigation-item-task-search-categories-factory.js +35 -0
- package/esm2015/lib/utility/of-void.js +12 -0
- package/esm2015/lib/utility/pagination/load-all-pages.js +46 -0
- package/esm2015/lib/utility/pagination/page-has-content.js +8 -0
- package/esm2015/lib/utility/process-message-response.js +17 -0
- package/esm2015/lib/utility/public-api.js +47 -0
- package/esm2015/lib/utility/refresh-tree.js +9 -0
- package/esm2015/lib/utility/result-with-after-actions.js +27 -0
- package/esm2015/lib/utility/service/case-list-font-color.service.js +45 -0
- package/esm2015/lib/utility/service/spinner-overlay.service.js +48 -0
- package/esm2015/lib/utility/stop-propagation.js +5 -0
- package/esm2015/lib/utility/tests/mocks/mock-authentication-method-service.js +12 -0
- package/esm2015/lib/utility/tests/mocks/mock-authentication.service.js +18 -0
- package/esm2015/lib/utility/tests/mocks/mock-endpoint.js +44 -0
- package/esm2015/lib/utility/tests/mocks/mock-sign-up.service.js +29 -0
- package/esm2015/lib/utility/tests/mocks/mock-user-autocomplete-value.js +14 -0
- package/esm2015/lib/utility/tests/mocks/mock-user-preference.service.js +42 -0
- package/esm2015/lib/utility/tests/mocks/mock-user-resource.service.js +48 -0
- package/esm2015/lib/utility/tests/search-category-mock-dependencies.js +19 -0
- package/esm2015/lib/utility/tests/test-config.js +424 -0
- package/esm2015/lib/utility/tests/test-factory-methods.js +21 -0
- package/esm2015/lib/utility/tests/test-mock-dependencies.module.js +31 -0
- package/esm2015/lib/utility/tests/test-view-service.js +24 -0
- package/esm2015/lib/utility/tests/utility/configure-category.js +14 -0
- package/esm2015/lib/utility/tests/utility/create-mock-case-outcome.js +16 -0
- package/esm2015/lib/utility/tests/utility/create-mock-case.js +36 -0
- package/esm2015/lib/utility/tests/utility/create-mock-datagroup.js +35 -0
- package/esm2015/lib/utility/tests/utility/create-mock-field.js +41 -0
- package/esm2015/lib/utility/tests/utility/create-mock-get-data-outcome.js +15 -0
- package/esm2015/lib/utility/tests/utility/create-mock-immediate-data.js +15 -0
- package/esm2015/lib/utility/tests/utility/create-mock-net.js +27 -0
- package/esm2015/lib/utility/tests/utility/create-mock-page.js +23 -0
- package/esm2015/lib/utility/tests/utility/create-mock-petri-net-outcome.js +14 -0
- package/esm2015/lib/utility/tests/utility/create-mock-set-data-outcome.js +19 -0
- package/esm2015/lib/utility/tests/utility/create-mock-task-outcome.js +18 -0
- package/esm2015/lib/utility/tests/utility/create-mock-task.js +34 -0
- package/esm2015/lib/view/abstract/page-load-request-context.js +25 -0
- package/esm2015/lib/view/abstract/sortable-view.js +62 -0
- package/esm2015/lib/view/abstract/view-with-headers.js +20 -0
- package/esm2015/lib/view/case-view/abstract-case-view.js +40 -0
- package/esm2015/lib/view/case-view/components/case-list/abstract-case-list.component.js +82 -0
- package/esm2015/lib/view/case-view/models/case-page-load-request-result.js +2 -0
- package/esm2015/lib/view/case-view/models/case-view-params.js +2 -0
- package/esm2015/lib/view/case-view/models/new-case-configuration-injection-token.js +7 -0
- package/esm2015/lib/view/case-view/models/new-case-configuration.js +2 -0
- package/esm2015/lib/view/case-view/service/case-view-service.js +273 -0
- package/esm2015/lib/view/case-view/tabbed-case-view.js +66 -0
- package/esm2015/lib/view/public-api.js +42 -0
- package/esm2015/lib/view/task-view/abstract-task-view.js +13 -0
- package/esm2015/lib/view/task-view/models/injected-tabbed-task-view-data.js +2 -0
- package/esm2015/lib/view/task-view/models/injection-token-task-endpoint.js +6 -0
- package/esm2015/lib/view/task-view/models/task-endpoint.js +9 -0
- package/esm2015/lib/view/task-view/models/task-page-load-request-result.js +2 -0
- package/esm2015/lib/view/task-view/models/task-view-configuration-injection-token.js +20 -0
- package/esm2015/lib/view/task-view/models/task-view-configuration.js +2 -0
- package/esm2015/lib/view/task-view/models/task-view-params.js +2 -0
- package/esm2015/lib/view/task-view/service/task-view.service.js +292 -0
- package/esm2015/lib/view/task-view/tabbed-task-view.js +22 -0
- package/esm2015/lib/view/tree-case-view/model/tree-petriflow-identifiers.js +43 -0
- package/esm2015/lib/view/tree-case-view/tree-case-view.service.js +17 -0
- package/esm2015/lib/view/tree-case-view/tree-component/abstract-tree.component.js +141 -0
- package/esm2015/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.js +14 -0
- package/esm2015/lib/view/tree-case-view/tree-component/case-tree.service.js +843 -0
- package/esm2015/lib/view/tree-case-view/tree-component/model/case-tree-node.js +104 -0
- package/esm2015/lib/view/tree-case-view/tree-component/model/case-tree-path.js +2 -0
- package/esm2015/lib/view/tree-case-view/tree-component/model/expansion-tree.js +2 -0
- package/esm2015/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.js +14 -0
- package/esm2015/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.js +55 -0
- package/esm2015/lib/view/tree-case-view/tree-task-content/tree-task-content.service.js +288 -0
- package/esm2015/lib/view/workflow-view/abstract-workflow-view.component.js +68 -0
- package/esm2015/lib/view/workflow-view/models/injection-token-workflow-service.js +10 -0
- package/esm2015/lib/view/workflow-view/workflow-view.service.js +211 -0
- package/esm2015/netgrif-components-core.js +20 -0
- package/esm2015/public-api.js +45 -0
- package/esm5/assets/i18n/de.json +419 -0
- package/esm5/assets/i18n/en.json +419 -0
- package/esm5/assets/i18n/sk.json +419 -0
- package/esm5/commons/angular-cli-devkit-core-strings.js +157 -0
- package/esm5/commons/import-to-add.js +9 -0
- package/esm5/commons/schema.js +7 -0
- package/esm5/commons/view-class-info.js +57 -0
- package/esm5/lib/admin/public-api.js +9 -0
- package/esm5/lib/admin/role-assignment/abstract-role-assignment.js +84 -0
- package/esm5/lib/admin/role-assignment/services/ProcessList.js +179 -0
- package/esm5/lib/admin/role-assignment/services/role-assignment.service.js +50 -0
- package/esm5/lib/admin/user-invite/abstract-user-invite.component.js +84 -0
- package/esm5/lib/admin/user-invite/services/organization-list.service.js +82 -0
- package/esm5/lib/admin/user-invite/services/user-invite.service.js +37 -0
- package/esm5/lib/allowed-nets/public-api.js +4 -0
- package/esm5/lib/allowed-nets/services/allowed-nets.service.js +94 -0
- package/esm5/lib/allowed-nets/services/base-allowed-nets.service.js +65 -0
- package/esm5/lib/allowed-nets/services/factory/allowed-nets-service-factory.js +132 -0
- package/esm5/lib/authentication/anonymous/anonymous.service.js +73 -0
- package/esm5/lib/authentication/authentication.factory.js +16 -0
- package/esm5/lib/authentication/authentication.module.js +36 -0
- package/esm5/lib/authentication/components/abstract-authentication-overlay.js +53 -0
- package/esm5/lib/authentication/models/credentials.js +2 -0
- package/esm5/lib/authentication/models/public-api.js +5 -0
- package/esm5/lib/authentication/models/transformer.js +2 -0
- package/esm5/lib/authentication/models/user.transformer.js +23 -0
- package/esm5/lib/authentication/public-api.js +14 -0
- package/esm5/lib/authentication/services/anonymous-authentication-interceptor.js +47 -0
- package/esm5/lib/authentication/services/authentication/authentication.service.js +84 -0
- package/esm5/lib/authentication/services/authentication-interceptor.js +55 -0
- package/esm5/lib/authentication/services/authentication-method.service.js +7 -0
- package/esm5/lib/authentication/services/guard/authentication-guard.service.js +41 -0
- package/esm5/lib/authentication/services/methods/basic-authentication/basic-authentication.service.js +54 -0
- package/esm5/lib/authentication/services/methods/null-authentication/null-authentication.service.js +23 -0
- package/esm5/lib/authentication/services/public-api.js +7 -0
- package/esm5/lib/authentication/session/null-storage.js +19 -0
- package/esm5/lib/authentication/session/public-api.js +3 -0
- package/esm5/lib/authentication/session/services/session.service.js +193 -0
- package/esm5/lib/authentication/sign-up/models/user-invitation-request.js +2 -0
- package/esm5/lib/authentication/sign-up/models/user-registration-request.js +2 -0
- package/esm5/lib/authentication/sign-up/public-api.js +8 -0
- package/esm5/lib/authentication/sign-up/services/sign-up.service.js +107 -0
- package/esm5/lib/authentication/sign-up/sign-up.module.js +17 -0
- package/esm5/lib/authorization/authority/authority-guard.service.js +52 -0
- package/esm5/lib/authorization/group/group-guard.service.js +69 -0
- package/esm5/lib/authorization/permission/permission.service.js +126 -0
- package/esm5/lib/authorization/public-api.js +10 -0
- package/esm5/lib/authorization/role/role-guard.service.js +108 -0
- package/esm5/lib/changed-fields/public-api.js +2 -0
- package/esm5/lib/changed-fields/services/changed-fields.service.js +38 -0
- package/esm5/lib/configuration/configuration.service.js +208 -0
- package/esm5/lib/configuration/public-api.js +3 -0
- package/esm5/lib/covalent/covalent.module.js +26 -0
- package/esm5/lib/currency/currency.module.js +25 -0
- package/esm5/lib/dashboard/cards/count-card/abstract-count-card.js +42 -0
- package/esm5/lib/dashboard/cards/custom-card/abstract-custom-card.js +50 -0
- package/esm5/lib/dashboard/cards/iframe-card/abstract-iframe-card.js +16 -0
- package/esm5/lib/dashboard/cards/model/card-grid-element.js +2 -0
- package/esm5/lib/dashboard/cards/model/count-card.js +2 -0
- package/esm5/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.js +2 -0
- package/esm5/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.js +2 -0
- package/esm5/lib/dashboard/cards/model/custom-dashboard-model/custom-card.js +2 -0
- package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.js +2 -0
- package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.js +9 -0
- package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.js +9 -0
- package/esm5/lib/dashboard/cards/model/dashboard-card-types.js +13 -0
- package/esm5/lib/dashboard/cards/model/dashboard-card.js +2 -0
- package/esm5/lib/dashboard/cards/model/graph-card.js +2 -0
- package/esm5/lib/dashboard/cards/model/iframe-card.js +2 -0
- package/esm5/lib/dashboard/dashboard-content/abstract-dashboard-content.js +21 -0
- package/esm5/lib/dashboard/dashboard-content/dashboard-params.js +2 -0
- package/esm5/lib/dashboard/public-api.js +20 -0
- package/esm5/lib/data-fields/boolean-field/abstract-boolean-field.component.js +45 -0
- package/esm5/lib/data-fields/boolean-field/models/boolean-field.js +29 -0
- package/esm5/lib/data-fields/button-field/abstract-button-field.component.js +68 -0
- package/esm5/lib/data-fields/button-field/models/button-field.js +37 -0
- package/esm5/lib/data-fields/data-field-template/abstract-data-field-template.component.js +111 -0
- package/esm5/lib/data-fields/data-field-template/models/wrapped-boolean.js +10 -0
- package/esm5/lib/data-fields/data-fields.module.js +39 -0
- package/esm5/lib/data-fields/date-field/abstract-date-field.component.js +26 -0
- package/esm5/lib/data-fields/date-field/models/custom-date-adapter.js +18 -0
- package/esm5/lib/data-fields/date-field/models/date-field.js +14 -0
- package/esm5/lib/data-fields/date-time-field/abstract-date-time-field.component.js +26 -0
- package/esm5/lib/data-fields/date-time-field/models/date-time-field.js +14 -0
- package/esm5/lib/data-fields/enumeration-field/abstract-enumeration-field.component.js +22 -0
- package/esm5/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.js +47 -0
- package/esm5/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.js +57 -0
- package/esm5/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.js +39 -0
- package/esm5/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.js +15 -0
- package/esm5/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.js +15 -0
- package/esm5/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.js +43 -0
- package/esm5/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.js +63 -0
- package/esm5/lib/data-fields/enumeration-field/models/enumeration-field.js +79 -0
- package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +405 -0
- package/esm5/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.js +2 -0
- package/esm5/lib/data-fields/file-field/models/file-field-value.js +2 -0
- package/esm5/lib/data-fields/file-field/models/file-field.js +128 -0
- package/esm5/lib/data-fields/file-list-field/abstract-file-list-field.component.js +278 -0
- package/esm5/lib/data-fields/file-list-field/models/file-list-field-value.js +2 -0
- package/esm5/lib/data-fields/file-list-field/models/file-list-field.js +105 -0
- package/esm5/lib/data-fields/filter-field/abstract-filter-field-content.component.js +36 -0
- package/esm5/lib/data-fields/filter-field/abstract-filter-field.component.js +33 -0
- package/esm5/lib/data-fields/filter-field/models/filter-field-injection-token.js +7 -0
- package/esm5/lib/data-fields/filter-field/models/filter-field.js +28 -0
- package/esm5/lib/data-fields/i18n-field/abstract-i18n-field.component.js +23 -0
- package/esm5/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.js +30 -0
- package/esm5/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.js +42 -0
- package/esm5/lib/data-fields/i18n-field/models/i18n-field-value.js +2 -0
- package/esm5/lib/data-fields/i18n-field/models/i18n-field.js +16 -0
- package/esm5/lib/data-fields/models/abstract-data-field-component.js +45 -0
- package/esm5/lib/data-fields/models/abstract-data-field.js +501 -0
- package/esm5/lib/data-fields/models/behavior.js +2 -0
- package/esm5/lib/data-fields/models/boolean-label-enabled-token.js +3 -0
- package/esm5/lib/data-fields/models/changed-fields.js +2 -0
- package/esm5/lib/data-fields/models/component.js +2 -0
- package/esm5/lib/data-fields/models/format-filter.js +2 -0
- package/esm5/lib/data-fields/models/icon.js +6 -0
- package/esm5/lib/data-fields/models/invalid-data-policy-token.js +11 -0
- package/esm5/lib/data-fields/models/layout.js +2 -0
- package/esm5/lib/data-fields/models/material-appearance.js +14 -0
- package/esm5/lib/data-fields/models/properties.js +2 -0
- package/esm5/lib/data-fields/models/template-appearance.js +15 -0
- package/esm5/lib/data-fields/models/validation.js +2 -0
- package/esm5/lib/data-fields/multichoice-field/abstract-multichoice-field.component.js +22 -0
- package/esm5/lib/data-fields/multichoice-field/models/multichoice-field.js +60 -0
- package/esm5/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.js +13 -0
- package/esm5/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.js +13 -0
- package/esm5/lib/data-fields/number-field/abstract-number-errors.component.js +49 -0
- package/esm5/lib/data-fields/number-field/abstract-number-field.component.js +23 -0
- package/esm5/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.js +54 -0
- package/esm5/lib/data-fields/number-field/models/number-field.js +137 -0
- package/esm5/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.js +11 -0
- package/esm5/lib/data-fields/public-api.js +73 -0
- package/esm5/lib/data-fields/task-ref-field/model/task-ref-field.js +11 -0
- package/esm5/lib/data-fields/text-field/abstract-text-errors.component.js +37 -0
- package/esm5/lib/data-fields/text-field/abstract-text-field.component.js +19 -0
- package/esm5/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.js +45 -0
- package/esm5/lib/data-fields/text-field/models/text-area-field.js +19 -0
- package/esm5/lib/data-fields/text-field/models/text-field.js +96 -0
- package/esm5/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.js +22 -0
- package/esm5/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.js +35 -0
- package/esm5/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.js +22 -0
- package/esm5/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.js +46 -0
- package/esm5/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.js +52 -0
- package/esm5/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.js +110 -0
- package/esm5/lib/data-fields/user-field/abstract-user-field.component.js +65 -0
- package/esm5/lib/data-fields/user-field/models/user-field.js +23 -0
- package/esm5/lib/data-fields/user-field/models/user-value.js +58 -0
- package/esm5/lib/dialog/components/alert-dialog/alert-dialog.component.js +43 -0
- package/esm5/lib/dialog/components/alert-dialog/alert-dialog.module.js +32 -0
- package/esm5/lib/dialog/components/confirm-dialog/confirm-dialog.component.js +57 -0
- package/esm5/lib/dialog/components/confirm-dialog/confirm-dialog.module.js +32 -0
- package/esm5/lib/dialog/components/prompt-dialog/prompt-dialog.component.js +47 -0
- package/esm5/lib/dialog/components/prompt-dialog/prompt-dialog.module.js +34 -0
- package/esm5/lib/dialog/dialog.module.js +33 -0
- package/esm5/lib/dialog/models/DialogData.js +2 -0
- package/esm5/lib/dialog/models/DialogResult.js +2 -0
- package/esm5/lib/dialog/models/abstract-dialog.js +23 -0
- package/esm5/lib/dialog/public-api.js +9 -0
- package/esm5/lib/dialog/services/dialog.service.js +84 -0
- package/esm5/lib/event/model/event-constants.js +8 -0
- package/esm5/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.js +2 -0
- package/esm5/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.js +2 -0
- package/esm5/lib/event/public-api.js +19 -0
- package/esm5/lib/event/services/event.service.js +60 -0
- package/esm5/lib/event/services/interfaces/changed-fields-map.js +2 -0
- package/esm5/lib/event-queue/model/queued-event.js +34 -0
- package/esm5/lib/event-queue/public-api.js +5 -0
- package/esm5/lib/event-queue/services/event-queue.service.js +66 -0
- package/esm5/lib/filter/filter.repository.js +145 -0
- package/esm5/lib/filter/models/case-search-request-body.js +2 -0
- package/esm5/lib/filter/models/filter-type.js +11 -0
- package/esm5/lib/filter/models/filter.js +71 -0
- package/esm5/lib/filter/models/filters-filter-injection-token.js +9 -0
- package/esm5/lib/filter/models/merge-operator.js +11 -0
- package/esm5/lib/filter/models/merged-filter-params.js +2 -0
- package/esm5/lib/filter/models/merged-filter.js +120 -0
- package/esm5/lib/filter/models/simple-filter.js +96 -0
- package/esm5/lib/filter/models/task-search-request-body.js +2 -0
- package/esm5/lib/filter/models/user-filter-constants.js +39 -0
- package/esm5/lib/filter/public-api.js +18 -0
- package/esm5/lib/filter/user-filters.service.js +357 -0
- package/esm5/lib/forms/email-submission/abstract-email-submission-form.component.js +33 -0
- package/esm5/lib/forms/forgotten-password/abstract-forgotten-password.component.js +37 -0
- package/esm5/lib/forms/has-form.js +2 -0
- package/esm5/lib/forms/login/abstract-login-form.component.js +61 -0
- package/esm5/lib/forms/models/abstract-registration.component.js +106 -0
- package/esm5/lib/forms/models/password.validator.js +21 -0
- package/esm5/lib/forms/public-api.js +7 -0
- package/esm5/lib/forms/registration/abstract-registration-form.component.js +42 -0
- package/esm5/lib/groups/public-api.js +3 -0
- package/esm5/lib/groups/services/active-group.service.js +107 -0
- package/esm5/lib/groups/services/next-group.service.js +135 -0
- package/esm5/lib/header/abstract-header-service.js +485 -0
- package/esm5/lib/header/abstract-header.component.js +171 -0
- package/esm5/lib/header/case-header/case-header.service.js +86 -0
- package/esm5/lib/header/case-header/case-menta-enum.js +9 -0
- package/esm5/lib/header/header-modes/abstract-header-mode.component.js +14 -0
- package/esm5/lib/header/header-modes/edit-mode/abstract-edit-mode.component.js +81 -0
- package/esm5/lib/header/header-modes/loading-mode/abstract-loading-mode.component.js +17 -0
- package/esm5/lib/header/header-modes/search-mode/abstract-search-mode.component.js +94 -0
- package/esm5/lib/header/header-modes/sort-mode/abstract-sort-mode.component.js +19 -0
- package/esm5/lib/header/header-state.js +53 -0
- package/esm5/lib/header/models/default-headers-token.js +3 -0
- package/esm5/lib/header/models/fields-group.js +2 -0
- package/esm5/lib/header/models/header-column.js +29 -0
- package/esm5/lib/header/models/header-mode.js +7 -0
- package/esm5/lib/header/models/header-type.js +7 -0
- package/esm5/lib/header/models/public-api.js +12 -0
- package/esm5/lib/header/models/user-changes/column-header-change.js +2 -0
- package/esm5/lib/header/models/user-changes/edit-change-description.js +2 -0
- package/esm5/lib/header/models/user-changes/header-change-description.js +2 -0
- package/esm5/lib/header/models/user-changes/header-change-type.js +20 -0
- package/esm5/lib/header/models/user-changes/header-change.js +2 -0
- package/esm5/lib/header/models/user-changes/mode-change-description.js +2 -0
- package/esm5/lib/header/models/user-changes/search-change-description.js +2 -0
- package/esm5/lib/header/models/user-changes/sort-change-description.js +2 -0
- package/esm5/lib/header/public-api.js +21 -0
- package/esm5/lib/header/services/overflow.service.js +112 -0
- package/esm5/lib/header/task-header/task-header.service.js +71 -0
- package/esm5/lib/header/task-header/task-meta-enum.js +11 -0
- package/esm5/lib/header/workflow-header/workflow-header.service.js +53 -0
- package/esm5/lib/header/workflow-header/workflow-meta-enum.js +10 -0
- package/esm5/lib/legal/legal-notice/abstract-legal-notice.component.js +26 -0
- package/esm5/lib/legal/public-api.js +2 -0
- package/esm5/lib/logger/models/log-entry.js +68 -0
- package/esm5/lib/logger/public-api.js +10 -0
- package/esm5/lib/logger/publishers/console-log-publisher.js +36 -0
- package/esm5/lib/logger/publishers/local-storage-log-publisher.js +45 -0
- package/esm5/lib/logger/publishers/log-publisher.js +15 -0
- package/esm5/lib/logger/services/log-level.js +10 -0
- package/esm5/lib/logger/services/log-publisher.service.js +66 -0
- package/esm5/lib/logger/services/logger.service.js +107 -0
- package/esm5/lib/material/material.module.js +112 -0
- package/esm5/lib/moment/public-api.js +2 -0
- package/esm5/lib/moment/time-formats.js +26 -0
- package/esm5/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.js +40 -0
- package/esm5/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.js +37 -0
- package/esm5/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.js +5 -0
- package/esm5/lib/navigation/model/filter-case-injection-token.js +6 -0
- package/esm5/lib/navigation/model/group-navigation-component-resolver-component-injection-token.js +6 -0
- package/esm5/lib/navigation/model/group-navigation-constants.js +59 -0
- package/esm5/lib/navigation/model/group-navigation-item-label.js +2 -0
- package/esm5/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.js +142 -0
- package/esm5/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.js +17 -0
- package/esm5/lib/navigation/navigation-rail/abstract-navigation-rail.component.js +38 -0
- package/esm5/lib/navigation/navigation-tree/abstract-navigation-tree.component.js +415 -0
- package/esm5/lib/navigation/public-api.js +19 -0
- package/esm5/lib/navigation/quick-panel/components/abstract-quick-panel.component.js +30 -0
- package/esm5/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.js +14 -0
- package/esm5/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.js +59 -0
- package/esm5/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.js +24 -0
- package/esm5/lib/navigation/quick-panel/components/paper-view.service.js +44 -0
- package/esm5/lib/navigation/quick-panel/public-api.js +8 -0
- package/esm5/lib/navigation/utility/filter-extraction.service.js +89 -0
- package/esm5/lib/navigation/utility/navigation-item-task-utility-methods.js +78 -0
- package/esm5/lib/panel/abstract/featured-value.js +2 -0
- package/esm5/lib/panel/abstract/panel-with-header-binding.js +50 -0
- package/esm5/lib/panel/abstract/panel-with-immediate-data.js +67 -0
- package/esm5/lib/panel/abstract/tabbed-virtual-scroll.component.js +35 -0
- package/esm5/lib/panel/abstract-panel.component.js +46 -0
- package/esm5/lib/panel/case-panel/abstract-case-panel.component.js +94 -0
- package/esm5/lib/panel/immediate/abstract-immediate-filter-text-content.component.js +45 -0
- package/esm5/lib/panel/immediate/abstract-immediate-filter-text.component.js +23 -0
- package/esm5/lib/panel/immediate/model/filter-text-injection-token.js +6 -0
- package/esm5/lib/panel/public-api.js +15 -0
- package/esm5/lib/panel/task-panel/abstract-task-panel.component.js +302 -0
- package/esm5/lib/panel/task-panel/models/disable-functions.js +3 -0
- package/esm5/lib/panel/task-panel-list/abstract-task-list.component.js +99 -0
- package/esm5/lib/panel/task-panel-list/task-panel-data/task-panel-data.js +2 -0
- package/esm5/lib/panel/workflow-panel/abstract-workflow-panel.component.js +109 -0
- package/esm5/lib/process/net.js +155 -0
- package/esm5/lib/process/netRole.js +2 -0
- package/esm5/lib/process/permissions.js +12 -0
- package/esm5/lib/process/petri-net-reference-with-permissions.js +2 -0
- package/esm5/lib/process/process.service.js +325 -0
- package/esm5/lib/process/public-api.js +8 -0
- package/esm5/lib/process/public-process.service.js +34 -0
- package/esm5/lib/process/rolesAndPermissions.js +2 -0
- package/esm5/lib/process/transaction.js +2 -0
- package/esm5/lib/process/transition.js +2 -0
- package/esm5/lib/public/factories/get-net-and-create-case.js +22 -0
- package/esm5/lib/public/factories/public-factory-resolver.js +13 -0
- package/esm5/lib/public/factories/public-search-factory.js +17 -0
- package/esm5/lib/public/public-api.js +5 -0
- package/esm5/lib/public/services/public-url-resolver.service.js +26 -0
- package/esm5/lib/resources/abstract-endpoint/abstract-resource.service.js +85 -0
- package/esm5/lib/resources/abstract-endpoint/count-service.js +2 -0
- package/esm5/lib/resources/engine-endpoint/case-resource.service.js +149 -0
- package/esm5/lib/resources/engine-endpoint/dashboard-resource.service.js +37 -0
- package/esm5/lib/resources/engine-endpoint/petri-net-resource.service.js +174 -0
- package/esm5/lib/resources/engine-endpoint/public/public-case-resource.service.js +52 -0
- package/esm5/lib/resources/engine-endpoint/public/public-petri-net-resource.service.js +120 -0
- package/esm5/lib/resources/engine-endpoint/public/public-task-resource.service.js +238 -0
- package/esm5/lib/resources/engine-endpoint/task-resource.service.js +327 -0
- package/esm5/lib/resources/engine-endpoint/user-resource.service.js +210 -0
- package/esm5/lib/resources/interface/assigned-user-policy.js +2 -0
- package/esm5/lib/resources/interface/author.js +2 -0
- package/esm5/lib/resources/interface/authority.js +2 -0
- package/esm5/lib/resources/interface/case-get-request-body.js +2 -0
- package/esm5/lib/resources/interface/case.js +2 -0
- package/esm5/lib/resources/interface/changed-field-container.js +2 -0
- package/esm5/lib/resources/interface/count.js +2 -0
- package/esm5/lib/resources/interface/create-case-request-body.js +2 -0
- package/esm5/lib/resources/interface/data-group-layout.js +59 -0
- package/esm5/lib/resources/interface/data-groups.js +19 -0
- package/esm5/lib/resources/interface/event-outcome.js +2 -0
- package/esm5/lib/resources/interface/field-alignment.js +10 -0
- package/esm5/lib/resources/interface/fields.js +2 -0
- package/esm5/lib/resources/interface/file-resource.js +2 -0
- package/esm5/lib/resources/interface/group.js +2 -0
- package/esm5/lib/resources/interface/immediate-data.js +2 -0
- package/esm5/lib/resources/interface/link.js +2 -0
- package/esm5/lib/resources/interface/message-resource.js +2 -0
- package/esm5/lib/resources/interface/page.js +2 -0
- package/esm5/lib/resources/interface/pagination.js +2 -0
- package/esm5/lib/resources/interface/petri-net-object-id.js +2 -0
- package/esm5/lib/resources/interface/petri-net-reference.js +2 -0
- package/esm5/lib/resources/interface/petri-net-request-body.js +2 -0
- package/esm5/lib/resources/interface/petri-net.js +2 -0
- package/esm5/lib/resources/interface/preferences.js +2 -0
- package/esm5/lib/resources/interface/process-role.js +2 -0
- package/esm5/lib/resources/interface/response-data.js +2 -0
- package/esm5/lib/resources/interface/task-layout.js +2 -0
- package/esm5/lib/resources/interface/task-reference.js +2 -0
- package/esm5/lib/resources/interface/task-set-data-request-body.js +2 -0
- package/esm5/lib/resources/interface/task.js +2 -0
- package/esm5/lib/resources/interface/user-process-role.js +2 -0
- package/esm5/lib/resources/interface/user-resource-small.js +2 -0
- package/esm5/lib/resources/interface/user-resource.js +2 -0
- package/esm5/lib/resources/public-api.js +46 -0
- package/esm5/lib/resources/resource-provider.service.js +174 -0
- package/esm5/lib/resources/types/nae-date-type.js +5 -0
- package/esm5/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.js +42 -0
- package/esm5/lib/routing/public-api.js +7 -0
- package/esm5/lib/routing/redirect-service/redirect.service.js +130 -0
- package/esm5/lib/routing/routing-builder/routing-builder.service.js +207 -0
- package/esm5/lib/routing/view-service/model/view-entry.js +2 -0
- package/esm5/lib/routing/view-service/view.service.js +38 -0
- package/esm5/lib/search/advanced-search-component/abstract-advanced-search.component.js +64 -0
- package/esm5/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.js +40 -0
- package/esm5/lib/search/category-factory/category-factory.js +96 -0
- package/esm5/lib/search/category-factory/category-resolver.service.js +152 -0
- package/esm5/lib/search/category-factory/category-serialisation-pair.js +2 -0
- package/esm5/lib/search/category-factory/default-categories-factories.js +67 -0
- package/esm5/lib/search/category-factory/default-search-categories.module.js +54 -0
- package/esm5/lib/search/category-factory/optional-dependencies.js +2 -0
- package/esm5/lib/search/category-factory/search-categories-injection-token.js +24 -0
- package/esm5/lib/search/fulltext-search-component/abstract-fulltext-search.component.js +20 -0
- package/esm5/lib/search/header-search-service/header-search.service.js +250 -0
- package/esm5/lib/search/models/base-filter-injection-token.js +6 -0
- package/esm5/lib/search/models/base-filter.js +2 -0
- package/esm5/lib/search/models/boolean-operator.js +10 -0
- package/esm5/lib/search/models/category/autocomplete-category.js +155 -0
- package/esm5/lib/search/models/category/autocomplete-options.js +2 -0
- package/esm5/lib/search/models/category/case/case-author.js +29 -0
- package/esm5/lib/search/models/category/case/case-creation-date-time.js +51 -0
- package/esm5/lib/search/models/category/case/case-creation-date.js +51 -0
- package/esm5/lib/search/models/category/case/case-dataset.js +444 -0
- package/esm5/lib/search/models/category/case/case-net-attribute-autocomplete-category.js +28 -0
- package/esm5/lib/search/models/category/case/case-process.js +84 -0
- package/esm5/lib/search/models/category/case/case-role.js +32 -0
- package/esm5/lib/search/models/category/case/case-search.enum.js +15 -0
- package/esm5/lib/search/models/category/case/case-simple-dataset.js +153 -0
- package/esm5/lib/search/models/category/case/case-string-id.js +35 -0
- package/esm5/lib/search/models/category/case/case-task.js +32 -0
- package/esm5/lib/search/models/category/case/case-title.js +37 -0
- package/esm5/lib/search/models/category/case/case-visual-id.js +31 -0
- package/esm5/lib/search/models/category/categories.js +24 -0
- package/esm5/lib/search/models/category/category.js +585 -0
- package/esm5/lib/search/models/category/name-id-pair.js +2 -0
- package/esm5/lib/search/models/category/net-attribute-autocomplete-category.js +66 -0
- package/esm5/lib/search/models/category/net-attribute-pair.js +2 -0
- package/esm5/lib/search/models/category/no-configuration-autocomplete-category.js +48 -0
- package/esm5/lib/search/models/category/no-configuration-category.js +51 -0
- package/esm5/lib/search/models/category/no-configuration-user-autocomplete-category.js +33 -0
- package/esm5/lib/search/models/category/search-autocomplete-option.js +2 -0
- package/esm5/lib/search/models/category/search-input-type.js +14 -0
- package/esm5/lib/search/models/category/task/task-assignee.js +29 -0
- package/esm5/lib/search/models/category/task/task-net-attribute-autocomplete-category.js +28 -0
- package/esm5/lib/search/models/category/task/task-process.js +61 -0
- package/esm5/lib/search/models/category/task/task-role.js +31 -0
- package/esm5/lib/search/models/category/task/task-task.js +31 -0
- package/esm5/lib/search/models/category/user-autocomplete.js +64 -0
- package/esm5/lib/search/models/component-configuration/search-component-configuration-injection-token.js +8 -0
- package/esm5/lib/search/models/component-configuration/search-component-configuration.js +2 -0
- package/esm5/lib/search/models/component-configuration/search-mode.js +9 -0
- package/esm5/lib/search/models/configuration-input.js +71 -0
- package/esm5/lib/search/models/datafield-map-key.js +91 -0
- package/esm5/lib/search/models/escape-result.js +2 -0
- package/esm5/lib/search/models/operator/equals-date-time.js +31 -0
- package/esm5/lib/search/models/operator/equals-date.js +31 -0
- package/esm5/lib/search/models/operator/equals.js +25 -0
- package/esm5/lib/search/models/operator/in-range-date-time.js +47 -0
- package/esm5/lib/search/models/operator/in-range-date.js +46 -0
- package/esm5/lib/search/models/operator/in-range.js +26 -0
- package/esm5/lib/search/models/operator/is-null.js +75 -0
- package/esm5/lib/search/models/operator/less-than-date-time.js +32 -0
- package/esm5/lib/search/models/operator/less-than-date.js +32 -0
- package/esm5/lib/search/models/operator/less-than-equal-date-time.js +32 -0
- package/esm5/lib/search/models/operator/less-than-equal-date.js +31 -0
- package/esm5/lib/search/models/operator/less-than-equal.js +21 -0
- package/esm5/lib/search/models/operator/less-than.js +21 -0
- package/esm5/lib/search/models/operator/like.js +33 -0
- package/esm5/lib/search/models/operator/more-than-date-time.js +34 -0
- package/esm5/lib/search/models/operator/more-than-date.js +34 -0
- package/esm5/lib/search/models/operator/more-than-equal-date-time.js +32 -0
- package/esm5/lib/search/models/operator/more-than-equal-date.js +32 -0
- package/esm5/lib/search/models/operator/more-than-equal.js +21 -0
- package/esm5/lib/search/models/operator/more-than.js +21 -0
- package/esm5/lib/search/models/operator/not-equals-date-time.js +29 -0
- package/esm5/lib/search/models/operator/not-equals-date.js +32 -0
- package/esm5/lib/search/models/operator/not-equals.js +35 -0
- package/esm5/lib/search/models/operator/operator.js +134 -0
- package/esm5/lib/search/models/operator/operators.js +31 -0
- package/esm5/lib/search/models/operator/substring.js +31 -0
- package/esm5/lib/search/models/operator-template-part-type.js +15 -0
- package/esm5/lib/search/models/operator-template-part.js +42 -0
- package/esm5/lib/search/models/persistance/filter-metadata-allowed-nets.js +2 -0
- package/esm5/lib/search/models/persistance/filter-metadata.js +2 -0
- package/esm5/lib/search/models/persistance/filter-text-segment.js +2 -0
- package/esm5/lib/search/models/persistance/generator-metadata.js +2 -0
- package/esm5/lib/search/models/persistance/saved-filter-metadata.js +2 -0
- package/esm5/lib/search/models/predicate/clause-predicate.js +95 -0
- package/esm5/lib/search/models/predicate/editable-clause-predicate-with-generators.js +79 -0
- package/esm5/lib/search/models/predicate/editable-clause-predicate.js +146 -0
- package/esm5/lib/search/models/predicate/editable-elementary-predicate.js +30 -0
- package/esm5/lib/search/models/predicate/editable-predicate-with-generator.js +47 -0
- package/esm5/lib/search/models/predicate/editable-predicate.js +32 -0
- package/esm5/lib/search/models/predicate/elementary-predicate.js +24 -0
- package/esm5/lib/search/models/predicate/predicate-with-generator.js +114 -0
- package/esm5/lib/search/models/predicate/predicate.js +110 -0
- package/esm5/lib/search/models/predicate-removal-event.js +2 -0
- package/esm5/lib/search/models/query/query.js +83 -0
- package/esm5/lib/search/models/search-index.js +76 -0
- package/esm5/lib/search/models/wrap-result.js +2 -0
- package/esm5/lib/search/operator-service/operator-resolver.service.js +113 -0
- package/esm5/lib/search/operator-service/operator.service.js +41 -0
- package/esm5/lib/search/public-api.js +107 -0
- package/esm5/lib/search/search-clause-component/abstract-search-clause.component.js +67 -0
- package/esm5/lib/search/search-component/abstract-search.component.js +201 -0
- package/esm5/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.js +82 -0
- package/esm5/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +40 -0
- package/esm5/lib/search/search-operand-input-component/abstract-search-operand-input.component.js +113 -0
- package/esm5/lib/search/search-predicate-component/abstract-search-predicate.component.js +162 -0
- package/esm5/lib/search/search-service/search.service.js +405 -0
- package/esm5/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.js +166 -0
- package/esm5/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.js +26 -0
- package/esm5/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.js +2 -0
- package/esm5/lib/side-menu/content-components/filter-selector/model/filtered-array.js +37 -0
- package/esm5/lib/side-menu/content-components/import-net/abstract-import-net.component.js +152 -0
- package/esm5/lib/side-menu/content-components/injection-tokens.js +8 -0
- package/esm5/lib/side-menu/content-components/load-filter/abstract-load-filter.component.js +47 -0
- package/esm5/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.js +2 -0
- package/esm5/lib/side-menu/content-components/new-case/abstract-new-case.component.js +264 -0
- package/esm5/lib/side-menu/content-components/new-case/model/new-case-injection-data.js +2 -0
- package/esm5/lib/side-menu/content-components/option-selector/abstract-option-selector.component.js +31 -0
- package/esm5/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.js +2 -0
- package/esm5/lib/side-menu/content-components/public-api.js +20 -0
- package/esm5/lib/side-menu/content-components/save-filter/abstract-save-filter.component.js +43 -0
- package/esm5/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.js +2 -0
- package/esm5/lib/side-menu/content-components/user-assign/abstract-user-assign.component.js +74 -0
- package/esm5/lib/side-menu/content-components/user-assign/model/user-list-injected-data.js +2 -0
- package/esm5/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.js +113 -0
- package/esm5/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.js +15 -0
- package/esm5/lib/side-menu/models/portal-wrapper.js +23 -0
- package/esm5/lib/side-menu/models/side-menu-control.js +47 -0
- package/esm5/lib/side-menu/models/side-menu-event.js +2 -0
- package/esm5/lib/side-menu/models/side-menu-injection-data.js +2 -0
- package/esm5/lib/side-menu/models/side-menu-ref.js +26 -0
- package/esm5/lib/side-menu/models/side-menu-size.js +7 -0
- package/esm5/lib/side-menu/net-version-visible-injection-token.js +4 -0
- package/esm5/lib/side-menu/public-api.js +15 -0
- package/esm5/lib/side-menu/services/side-menu.service.js +90 -0
- package/esm5/lib/side-menu/side-menu-container/abstract-side-menu-container.component.js +36 -0
- package/esm5/lib/side-menu/side-menu-injection-token.js +3 -0
- package/esm5/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.js +31 -0
- package/esm5/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.js +31 -0
- package/esm5/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.js +31 -0
- package/esm5/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.js +31 -0
- package/esm5/lib/snack-bar/models/abstract-snack-bar.js +20 -0
- package/esm5/lib/snack-bar/models/injection-token-snackbar.js +4 -0
- package/esm5/lib/snack-bar/models/snack-bar-enums.js +12 -0
- package/esm5/lib/snack-bar/models/snack-bar-injection-data.js +2 -0
- package/esm5/lib/snack-bar/public-api.js +15 -0
- package/esm5/lib/snack-bar/services/snack-bar.service.js +105 -0
- package/esm5/lib/snack-bar/snack-bar.module.js +37 -0
- package/esm5/lib/tabs/classes/opened-tab.js +50 -0
- package/esm5/lib/tabs/classes/tab-view.js +283 -0
- package/esm5/lib/tabs/interfaces.js +2 -0
- package/esm5/lib/tabs/public-api.js +6 -0
- package/esm5/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.js +21 -0
- package/esm5/lib/tabs/tab-data-injection-token/tab-data-injection-token.js +8 -0
- package/esm5/lib/tabs/tab-view/abstract-tab-view.component.js +71 -0
- package/esm5/lib/task/interfaces/task-operations.js +2 -0
- package/esm5/lib/task/models/null-task-operations.js +30 -0
- package/esm5/lib/task/models/subject-task-operations.js +76 -0
- package/esm5/lib/task/models/task-operations-injection-token.js +3 -0
- package/esm5/lib/task/models/task-set-data-request-context.js +2 -0
- package/esm5/lib/task/public-api.js +19 -0
- package/esm5/lib/task/services/assign-policy.service.js +189 -0
- package/esm5/lib/task/services/assign-task.service.js +200 -0
- package/esm5/lib/task/services/cancel-task.service.js +198 -0
- package/esm5/lib/task/services/data-focus-policy.service.js +40 -0
- package/esm5/lib/task/services/delegate-task.service.js +196 -0
- package/esm5/lib/task/services/finish-policy.service.js +85 -0
- package/esm5/lib/task/services/finish-task.service.js +215 -0
- package/esm5/lib/task/services/selected-case.service.js +48 -0
- package/esm5/lib/task/services/task-data.service.js +597 -0
- package/esm5/lib/task/services/task-handling-service.js +68 -0
- package/esm5/lib/task/services/task-request-state.service.js +118 -0
- package/esm5/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.js +41 -0
- package/esm5/lib/task-content/model/async-rendering-configuration-injection-token.js +8 -0
- package/esm5/lib/task-content/model/async-rendering-configuration.js +2 -0
- package/esm5/lib/task-content/model/datafield-grid-layout-element.js +2 -0
- package/esm5/lib/task-content/model/field-type-resource.js +23 -0
- package/esm5/lib/task-content/model/policy.js +31 -0
- package/esm5/lib/task-content/model/resource-interface.js +2 -0
- package/esm5/lib/task-content/model/split-data-group.js +2 -0
- package/esm5/lib/task-content/model/subgrid.js +247 -0
- package/esm5/lib/task-content/model/task-content-element-type.js +19 -0
- package/esm5/lib/task-content/model/task-event-notification.js +15 -0
- package/esm5/lib/task-content/model/task-event.js +10 -0
- package/esm5/lib/task-content/public-api.js +21 -0
- package/esm5/lib/task-content/services/field-converter.service.js +350 -0
- package/esm5/lib/task-content/services/single-task-content.service.js +85 -0
- package/esm5/lib/task-content/services/task-content.service.js +314 -0
- package/esm5/lib/task-content/services/task-event.service.js +54 -0
- package/esm5/lib/task-content/services/unlimited-task-content.service.js +77 -0
- package/esm5/lib/task-content/task-content/abstract-task-content.component.js +687 -0
- package/esm5/lib/toolbar/abstract-toolbar.component.js +24 -0
- package/esm5/lib/toolbar/public-api.js +2 -0
- package/esm5/lib/translate/language.service.js +89 -0
- package/esm5/lib/translate/public-api.js +3 -0
- package/esm5/lib/translate/translate-interceptor.js +25 -0
- package/esm5/lib/translate/translate-lib.module.js +42 -0
- package/esm5/lib/user/components/user-card/abstract-user-card.component.js +58 -0
- package/esm5/lib/user/models/iuser.js +2 -0
- package/esm5/lib/user/models/public-api.js +6 -0
- package/esm5/lib/user/models/user.js +51 -0
- package/esm5/lib/user/models/view-id-injection-tokens.js +4 -0
- package/esm5/lib/user/profile/abstract-profile.component.js +40 -0
- package/esm5/lib/user/public-api.js +12 -0
- package/esm5/lib/user/services/user-comparator.service.js +28 -0
- package/esm5/lib/user/services/user-list.service.js +220 -0
- package/esm5/lib/user/services/user-preference.service.js +164 -0
- package/esm5/lib/user/services/user.service.js +224 -0
- package/esm5/lib/user/services/view-id.service.js +36 -0
- package/esm5/lib/utility/array-to-observable.js +10 -0
- package/esm5/lib/utility/call-chain/after-action.js +19 -0
- package/esm5/lib/utility/call-chain/call-chain.service.js +36 -0
- package/esm5/lib/utility/clear-time-information.js +11 -0
- package/esm5/lib/utility/destroy-subscription.js +10 -0
- package/esm5/lib/utility/get-field.js +48 -0
- package/esm5/lib/utility/get-immediate-data.js +9 -0
- package/esm5/lib/utility/grid-layout/grid-layout-helper.js +105 -0
- package/esm5/lib/utility/grid-layout/model/grid-element-with-item.js +2 -0
- package/esm5/lib/utility/grid-layout/model/grid-element.js +2 -0
- package/esm5/lib/utility/grid-layout/model/grid-filler.js +52 -0
- package/esm5/lib/utility/incrementing-counter.js +23 -0
- package/esm5/lib/utility/loading-emitter.js +28 -0
- package/esm5/lib/utility/loading-with-filter-emitter.js +41 -0
- package/esm5/lib/utility/navigation-item-task-filter-factory.js +11 -0
- package/esm5/lib/utility/navigation-item-task-search-categories-factory.js +35 -0
- package/esm5/lib/utility/of-void.js +12 -0
- package/esm5/lib/utility/pagination/load-all-pages.js +47 -0
- package/esm5/lib/utility/pagination/page-has-content.js +8 -0
- package/esm5/lib/utility/process-message-response.js +17 -0
- package/esm5/lib/utility/public-api.js +47 -0
- package/esm5/lib/utility/refresh-tree.js +9 -0
- package/esm5/lib/utility/result-with-after-actions.js +34 -0
- package/esm5/lib/utility/service/case-list-font-color.service.js +47 -0
- package/esm5/lib/utility/service/spinner-overlay.service.js +51 -0
- package/esm5/lib/utility/stop-propagation.js +5 -0
- package/esm5/lib/utility/tests/mocks/mock-authentication-method-service.js +19 -0
- package/esm5/lib/utility/tests/mocks/mock-authentication.service.js +33 -0
- package/esm5/lib/utility/tests/mocks/mock-endpoint.js +46 -0
- package/esm5/lib/utility/tests/mocks/mock-sign-up.service.js +31 -0
- package/esm5/lib/utility/tests/mocks/mock-user-autocomplete-value.js +15 -0
- package/esm5/lib/utility/tests/mocks/mock-user-preference.service.js +53 -0
- package/esm5/lib/utility/tests/mocks/mock-user-resource.service.js +52 -0
- package/esm5/lib/utility/tests/search-category-mock-dependencies.js +21 -0
- package/esm5/lib/utility/tests/test-config.js +428 -0
- package/esm5/lib/utility/tests/test-factory-methods.js +21 -0
- package/esm5/lib/utility/tests/test-mock-dependencies.module.js +35 -0
- package/esm5/lib/utility/tests/test-view-service.js +28 -0
- package/esm5/lib/utility/tests/utility/configure-category.js +14 -0
- package/esm5/lib/utility/tests/utility/create-mock-case-outcome.js +19 -0
- package/esm5/lib/utility/tests/utility/create-mock-case.js +40 -0
- package/esm5/lib/utility/tests/utility/create-mock-datagroup.js +39 -0
- package/esm5/lib/utility/tests/utility/create-mock-field.js +47 -0
- package/esm5/lib/utility/tests/utility/create-mock-get-data-outcome.js +20 -0
- package/esm5/lib/utility/tests/utility/create-mock-immediate-data.js +17 -0
- package/esm5/lib/utility/tests/utility/create-mock-net.js +34 -0
- package/esm5/lib/utility/tests/utility/create-mock-page.js +24 -0
- package/esm5/lib/utility/tests/utility/create-mock-petri-net-outcome.js +16 -0
- package/esm5/lib/utility/tests/utility/create-mock-set-data-outcome.js +24 -0
- package/esm5/lib/utility/tests/utility/create-mock-task-outcome.js +22 -0
- package/esm5/lib/utility/tests/utility/create-mock-task.js +38 -0
- package/esm5/lib/view/abstract/page-load-request-context.js +34 -0
- package/esm5/lib/view/abstract/sortable-view.js +65 -0
- package/esm5/lib/view/abstract/view-with-headers.js +27 -0
- package/esm5/lib/view/case-view/abstract-case-view.js +47 -0
- package/esm5/lib/view/case-view/components/case-list/abstract-case-list.component.js +92 -0
- package/esm5/lib/view/case-view/models/case-page-load-request-result.js +2 -0
- package/esm5/lib/view/case-view/models/case-view-params.js +2 -0
- package/esm5/lib/view/case-view/models/new-case-configuration-injection-token.js +7 -0
- package/esm5/lib/view/case-view/models/new-case-configuration.js +2 -0
- package/esm5/lib/view/case-view/service/case-view-service.js +300 -0
- package/esm5/lib/view/case-view/tabbed-case-view.js +75 -0
- package/esm5/lib/view/public-api.js +42 -0
- package/esm5/lib/view/task-view/abstract-task-view.js +18 -0
- package/esm5/lib/view/task-view/models/injected-tabbed-task-view-data.js +2 -0
- package/esm5/lib/view/task-view/models/injection-token-task-endpoint.js +6 -0
- package/esm5/lib/view/task-view/models/task-endpoint.js +9 -0
- package/esm5/lib/view/task-view/models/task-page-load-request-result.js +2 -0
- package/esm5/lib/view/task-view/models/task-view-configuration-injection-token.js +20 -0
- package/esm5/lib/view/task-view/models/task-view-configuration.js +2 -0
- package/esm5/lib/view/task-view/models/task-view-params.js +2 -0
- package/esm5/lib/view/task-view/service/task-view.service.js +333 -0
- package/esm5/lib/view/task-view/tabbed-task-view.js +27 -0
- package/esm5/lib/view/tree-case-view/model/tree-petriflow-identifiers.js +43 -0
- package/esm5/lib/view/tree-case-view/tree-case-view.service.js +19 -0
- package/esm5/lib/view/tree-case-view/tree-component/abstract-tree.component.js +165 -0
- package/esm5/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.js +16 -0
- package/esm5/lib/view/tree-case-view/tree-component/case-tree.service.js +899 -0
- package/esm5/lib/view/tree-case-view/tree-component/model/case-tree-node.js +106 -0
- package/esm5/lib/view/tree-case-view/tree-component/model/case-tree-path.js +2 -0
- package/esm5/lib/view/tree-case-view/tree-component/model/expansion-tree.js +2 -0
- package/esm5/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.js +16 -0
- package/esm5/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.js +66 -0
- package/esm5/lib/view/tree-case-view/tree-task-content/tree-task-content.service.js +308 -0
- package/esm5/lib/view/workflow-view/abstract-workflow-view.component.js +74 -0
- package/esm5/lib/view/workflow-view/models/injection-token-workflow-service.js +10 -0
- package/esm5/lib/view/workflow-view/workflow-view.service.js +232 -0
- package/esm5/netgrif-components-core.js +20 -0
- package/esm5/public-api.js +45 -0
- package/fesm2015/netgrif-components-core.js +28627 -0
- package/fesm2015/netgrif-components-core.js.map +1 -0
- package/fesm5/netgrif-components-core.js +31716 -0
- package/fesm5/netgrif-components-core.js.map +1 -0
- package/lib/admin/public-api.d.ts +6 -0
- package/lib/admin/role-assignment/abstract-role-assignment.d.ts +31 -0
- package/lib/admin/role-assignment/services/ProcessList.d.ts +43 -0
- package/lib/admin/role-assignment/services/role-assignment.service.d.ts +16 -0
- package/lib/admin/user-invite/abstract-user-invite.component.d.ts +30 -0
- package/lib/admin/user-invite/services/organization-list.service.d.ts +16 -0
- package/lib/admin/user-invite/services/user-invite.service.d.ts +9 -0
- package/lib/allowed-nets/public-api.d.ts +3 -0
- package/lib/allowed-nets/services/allowed-nets.service.d.ts +45 -0
- package/lib/allowed-nets/services/base-allowed-nets.service.d.ts +27 -0
- package/lib/allowed-nets/services/factory/allowed-nets-service-factory.d.ts +59 -0
- package/lib/authentication/anonymous/anonymous.service.d.ts +18 -0
- package/lib/authentication/authentication.factory.d.ts +5 -0
- package/lib/authentication/authentication.module.d.ts +2 -0
- package/lib/authentication/components/abstract-authentication-overlay.d.ts +21 -0
- package/lib/authentication/models/credentials.d.ts +4 -0
- package/lib/authentication/models/public-api.d.ts +3 -0
- package/lib/authentication/models/transformer.d.ts +3 -0
- package/lib/authentication/models/user.transformer.d.ts +8 -0
- package/lib/authentication/public-api.d.ts +8 -0
- package/lib/authentication/services/anonymous-authentication-interceptor.d.ts +8 -0
- package/lib/authentication/services/authentication/authentication.service.d.ts +23 -0
- package/lib/authentication/services/authentication-interceptor.d.ts +12 -0
- package/lib/authentication/services/authentication-method.service.d.ts +8 -0
- package/lib/authentication/services/guard/authentication-guard.service.d.ts +11 -0
- package/lib/authentication/services/methods/basic-authentication/basic-authentication.service.d.ts +13 -0
- package/lib/authentication/services/methods/null-authentication/null-authentication.service.d.ts +9 -0
- package/lib/authentication/services/public-api.d.ts +5 -0
- package/lib/authentication/session/null-storage.d.ts +9 -0
- package/lib/authentication/session/public-api.d.ts +1 -0
- package/lib/authentication/session/services/session.service.d.ts +35 -0
- package/lib/authentication/sign-up/models/user-invitation-request.d.ts +5 -0
- package/lib/authentication/sign-up/models/user-registration-request.d.ts +6 -0
- package/lib/authentication/sign-up/public-api.d.ts +4 -0
- package/lib/authentication/sign-up/services/sign-up.service.d.ts +29 -0
- package/lib/authentication/sign-up/sign-up.module.d.ts +2 -0
- package/lib/authorization/authority/authority-guard.service.d.ts +16 -0
- package/lib/authorization/group/group-guard.service.d.ts +19 -0
- package/lib/authorization/permission/permission.service.d.ts +22 -0
- package/lib/authorization/public-api.d.ts +4 -0
- package/lib/authorization/role/role-guard.service.d.ts +29 -0
- package/lib/changed-fields/public-api.d.ts +1 -0
- package/lib/changed-fields/services/changed-fields.service.d.ts +12 -0
- package/lib/configuration/configuration.service.d.ts +69 -0
- package/lib/configuration/public-api.d.ts +1 -0
- package/lib/covalent/covalent.module.d.ts +2 -0
- package/lib/currency/currency.module.d.ts +3 -0
- package/lib/dashboard/cards/count-card/abstract-count-card.d.ts +19 -0
- package/lib/dashboard/cards/custom-card/abstract-custom-card.d.ts +39 -0
- package/lib/dashboard/cards/iframe-card/abstract-iframe-card.d.ts +10 -0
- package/lib/dashboard/cards/model/card-grid-element.d.ts +4 -0
- package/lib/dashboard/cards/model/count-card.d.ts +11 -0
- package/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.d.ts +9 -0
- package/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.d.ts +18 -0
- package/lib/dashboard/cards/model/custom-dashboard-model/custom-card.d.ts +14 -0
- package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.d.ts +5 -0
- package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.d.ts +6 -0
- package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.d.ts +5 -0
- package/lib/dashboard/cards/model/dashboard-card-types.d.ts +11 -0
- package/lib/dashboard/cards/model/dashboard-card.d.ts +7 -0
- package/lib/dashboard/cards/model/graph-card.d.ts +5 -0
- package/lib/dashboard/cards/model/iframe-card.d.ts +6 -0
- package/lib/dashboard/dashboard-content/abstract-dashboard-content.d.ts +15 -0
- package/lib/dashboard/dashboard-content/dashboard-params.d.ts +8 -0
- package/lib/dashboard/public-api.d.ts +16 -0
- package/lib/data-fields/boolean-field/abstract-boolean-field.component.d.ts +11 -0
- package/lib/data-fields/boolean-field/models/boolean-field.d.ts +15 -0
- package/lib/data-fields/button-field/abstract-button-field.component.d.ts +25 -0
- package/lib/data-fields/button-field/models/button-field.d.ts +22 -0
- package/lib/data-fields/data-field-template/abstract-data-field-template.component.d.ts +65 -0
- package/lib/data-fields/data-field-template/models/wrapped-boolean.d.ts +6 -0
- package/lib/data-fields/data-fields.module.d.ts +2 -0
- package/lib/data-fields/date-field/abstract-date-field.component.d.ts +9 -0
- package/lib/data-fields/date-field/models/custom-date-adapter.d.ts +4 -0
- package/lib/data-fields/date-field/models/date-field.d.ts +10 -0
- package/lib/data-fields/date-time-field/abstract-date-time-field.component.d.ts +9 -0
- package/lib/data-fields/date-time-field/models/date-time-field.d.ts +10 -0
- package/lib/data-fields/enumeration-field/abstract-enumeration-field.component.d.ts +6 -0
- package/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.d.ts +21 -0
- package/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.d.ts +26 -0
- package/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.d.ts +17 -0
- package/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.d.ts +10 -0
- package/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.d.ts +10 -0
- package/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.d.ts +18 -0
- package/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.d.ts +25 -0
- package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +35 -0
- package/lib/data-fields/file-field/abstract-file-field.component.d.ts +147 -0
- package/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.d.ts +9 -0
- package/lib/data-fields/file-field/models/file-field-value.d.ts +4 -0
- package/lib/data-fields/file-field/models/file-field.d.ts +73 -0
- package/lib/data-fields/file-list-field/abstract-file-list-field.component.d.ts +73 -0
- package/lib/data-fields/file-list-field/models/file-list-field-value.d.ts +4 -0
- package/lib/data-fields/file-list-field/models/file-list-field.d.ts +41 -0
- package/lib/data-fields/filter-field/abstract-filter-field-content.component.d.ts +12 -0
- package/lib/data-fields/filter-field/abstract-filter-field.component.d.ts +14 -0
- package/lib/data-fields/filter-field/models/filter-field-injection-token.d.ts +7 -0
- package/lib/data-fields/filter-field/models/filter-field.d.ts +13 -0
- package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +7 -0
- package/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.d.ts +13 -0
- package/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.d.ts +18 -0
- package/lib/data-fields/i18n-field/models/i18n-field-value.d.ts +5 -0
- package/lib/data-fields/i18n-field/models/i18n-field.d.ts +9 -0
- package/lib/data-fields/models/abstract-data-field-component.d.ts +32 -0
- package/lib/data-fields/models/abstract-data-field.d.ts +220 -0
- package/lib/data-fields/models/behavior.d.ts +40 -0
- package/lib/data-fields/models/boolean-label-enabled-token.d.ts +2 -0
- package/lib/data-fields/models/changed-fields.d.ts +44 -0
- package/lib/data-fields/models/component.d.ts +7 -0
- package/lib/data-fields/models/format-filter.d.ts +5 -0
- package/lib/data-fields/models/icon.d.ts +9 -0
- package/lib/data-fields/models/invalid-data-policy-token.d.ts +10 -0
- package/lib/data-fields/models/layout.d.ts +22 -0
- package/lib/data-fields/models/material-appearance.d.ts +12 -0
- package/lib/data-fields/models/properties.d.ts +3 -0
- package/lib/data-fields/models/template-appearance.d.ts +13 -0
- package/lib/data-fields/models/validation.d.ts +15 -0
- package/lib/data-fields/multichoice-field/abstract-multichoice-field.component.d.ts +6 -0
- package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +26 -0
- package/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.d.ts +10 -0
- package/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.d.ts +8 -0
- package/lib/data-fields/number-field/abstract-number-errors.component.d.ts +13 -0
- package/lib/data-fields/number-field/abstract-number-field.component.d.ts +8 -0
- package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +15 -0
- package/lib/data-fields/number-field/models/number-field.d.ts +36 -0
- package/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.d.ts +5 -0
- package/lib/data-fields/public-api.d.ts +67 -0
- package/lib/data-fields/task-ref-field/model/task-ref-field.d.ts +8 -0
- package/lib/data-fields/text-field/abstract-text-errors.component.d.ts +10 -0
- package/lib/data-fields/text-field/abstract-text-field.component.d.ts +6 -0
- package/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.d.ts +39 -0
- package/lib/data-fields/text-field/models/text-area-field.d.ts +12 -0
- package/lib/data-fields/text-field/models/text-field.d.ts +36 -0
- package/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.d.ts +13 -0
- package/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.d.ts +16 -0
- package/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.d.ts +13 -0
- package/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.d.ts +22 -0
- package/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.d.ts +9 -0
- package/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.d.ts +41 -0
- package/lib/data-fields/user-field/abstract-user-field.component.d.ts +36 -0
- package/lib/data-fields/user-field/models/user-field.d.ts +13 -0
- package/lib/data-fields/user-field/models/user-value.d.ts +24 -0
- package/lib/dialog/components/alert-dialog/alert-dialog.component.d.ts +19 -0
- package/lib/dialog/components/alert-dialog/alert-dialog.module.d.ts +2 -0
- package/lib/dialog/components/confirm-dialog/confirm-dialog.component.d.ts +24 -0
- package/lib/dialog/components/confirm-dialog/confirm-dialog.module.d.ts +2 -0
- package/lib/dialog/components/prompt-dialog/prompt-dialog.component.d.ts +23 -0
- package/lib/dialog/components/prompt-dialog/prompt-dialog.module.d.ts +2 -0
- package/lib/dialog/dialog.module.d.ts +2 -0
- package/lib/dialog/models/DialogData.d.ts +8 -0
- package/lib/dialog/models/DialogResult.d.ts +5 -0
- package/lib/dialog/models/abstract-dialog.d.ts +18 -0
- package/lib/dialog/public-api.d.ts +5 -0
- package/lib/dialog/services/dialog.service.d.ts +43 -0
- package/lib/event/model/event-constants.d.ts +6 -0
- package/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.d.ts +5 -0
- package/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.d.ts +3 -0
- package/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.d.ts +3 -0
- package/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.d.ts +5 -0
- package/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.d.ts +5 -0
- package/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.d.ts +5 -0
- package/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.d.ts +5 -0
- package/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.d.ts +5 -0
- package/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.d.ts +3 -0
- package/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.d.ts +3 -0
- package/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.d.ts +3 -0
- package/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.d.ts +3 -0
- package/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.d.ts +5 -0
- package/lib/event/public-api.d.ts +15 -0
- package/lib/event/services/event.service.d.ts +7 -0
- package/lib/event/services/interfaces/changed-fields-map.d.ts +6 -0
- package/lib/event-queue/model/queued-event.d.ts +21 -0
- package/lib/event-queue/public-api.d.ts +2 -0
- package/lib/event-queue/services/event-queue.service.d.ts +21 -0
- package/lib/filter/filter.repository.d.ts +59 -0
- package/lib/filter/models/case-search-request-body.d.ts +88 -0
- package/lib/filter/models/filter-type.d.ts +9 -0
- package/lib/filter/models/filter.d.ts +68 -0
- package/lib/filter/models/filters-filter-injection-token.d.ts +9 -0
- package/lib/filter/models/merge-operator.d.ts +9 -0
- package/lib/filter/models/merged-filter-params.d.ts +13 -0
- package/lib/filter/models/merged-filter.d.ts +75 -0
- package/lib/filter/models/simple-filter.d.ts +74 -0
- package/lib/filter/models/task-search-request-body.d.ts +83 -0
- package/lib/filter/models/user-filter-constants.d.ts +37 -0
- package/lib/filter/public-api.d.ts +12 -0
- package/lib/filter/user-filters.service.d.ts +116 -0
- package/lib/forms/email-submission/abstract-email-submission-form.component.d.ts +13 -0
- package/lib/forms/forgotten-password/abstract-forgotten-password.component.d.ts +16 -0
- package/lib/forms/has-form.d.ts +10 -0
- package/lib/forms/login/abstract-login-form.component.d.ts +24 -0
- package/lib/forms/models/abstract-registration.component.d.ts +42 -0
- package/lib/forms/models/password.validator.d.ts +7 -0
- package/lib/forms/public-api.d.ts +6 -0
- package/lib/forms/registration/abstract-registration-form.component.d.ts +19 -0
- package/lib/groups/public-api.d.ts +2 -0
- package/lib/groups/services/active-group.service.d.ts +49 -0
- package/lib/groups/services/next-group.service.d.ts +52 -0
- package/lib/header/abstract-header-service.d.ts +133 -0
- package/lib/header/abstract-header.component.d.ts +52 -0
- package/lib/header/case-header/case-header.service.d.ts +21 -0
- package/lib/header/case-header/case-menta-enum.d.ts +7 -0
- package/lib/header/header-modes/abstract-header-mode.component.d.ts +5 -0
- package/lib/header/header-modes/edit-mode/abstract-edit-mode.component.d.ts +28 -0
- package/lib/header/header-modes/loading-mode/abstract-loading-mode.component.d.ts +8 -0
- package/lib/header/header-modes/search-mode/abstract-search-mode.component.d.ts +48 -0
- package/lib/header/header-modes/sort-mode/abstract-sort-mode.component.d.ts +8 -0
- package/lib/header/header-state.d.ts +28 -0
- package/lib/header/models/default-headers-token.d.ts +2 -0
- package/lib/header/models/fields-group.d.ts +9 -0
- package/lib/header/models/header-column.d.ts +17 -0
- package/lib/header/models/header-mode.d.ts +5 -0
- package/lib/header/models/header-type.d.ts +5 -0
- package/lib/header/models/public-api.d.ts +11 -0
- package/lib/header/models/user-changes/column-header-change.d.ts +6 -0
- package/lib/header/models/user-changes/edit-change-description.d.ts +7 -0
- package/lib/header/models/user-changes/header-change-description.d.ts +5 -0
- package/lib/header/models/user-changes/header-change-type.d.ts +18 -0
- package/lib/header/models/user-changes/header-change.d.ts +17 -0
- package/lib/header/models/user-changes/mode-change-description.d.ts +5 -0
- package/lib/header/models/user-changes/search-change-description.d.ts +13 -0
- package/lib/header/models/user-changes/sort-change-description.d.ts +13 -0
- package/lib/header/public-api.d.ts +14 -0
- package/lib/header/services/overflow.service.d.ts +28 -0
- package/lib/header/task-header/task-header.service.d.ts +18 -0
- package/lib/header/task-header/task-meta-enum.d.ts +9 -0
- package/lib/header/workflow-header/workflow-header.service.d.ts +14 -0
- package/lib/header/workflow-header/workflow-meta-enum.d.ts +8 -0
- package/lib/legal/legal-notice/abstract-legal-notice.component.d.ts +13 -0
- package/lib/legal/public-api.d.ts +1 -0
- package/lib/logger/models/log-entry.d.ts +38 -0
- package/lib/logger/public-api.d.ts +7 -0
- package/lib/logger/publishers/console-log-publisher.d.ts +8 -0
- package/lib/logger/publishers/local-storage-log-publisher.d.ts +9 -0
- package/lib/logger/publishers/log-publisher.d.ts +8 -0
- package/lib/logger/services/log-level.d.ts +8 -0
- package/lib/logger/services/log-publisher.service.d.ts +22 -0
- package/lib/logger/services/logger.service.d.ts +25 -0
- package/lib/material/material.module.d.ts +2 -0
- package/lib/moment/public-api.d.ts +1 -0
- package/lib/moment/time-formats.d.ts +24 -0
- package/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.d.ts +21 -0
- package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +14 -0
- package/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.d.ts +2 -0
- package/lib/navigation/model/filter-case-injection-token.d.ts +6 -0
- package/lib/navigation/model/group-navigation-component-resolver-component-injection-token.d.ts +6 -0
- package/lib/navigation/model/group-navigation-constants.d.ts +57 -0
- package/lib/navigation/model/group-navigation-item-label.d.ts +4 -0
- package/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.d.ts +49 -0
- package/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.d.ts +8 -0
- package/lib/navigation/navigation-rail/abstract-navigation-rail.component.d.ts +14 -0
- package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +131 -0
- package/lib/navigation/public-api.d.ts +13 -0
- package/lib/navigation/quick-panel/components/abstract-quick-panel.component.d.ts +15 -0
- package/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.d.ts +7 -0
- package/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.d.ts +24 -0
- package/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.d.ts +14 -0
- package/lib/navigation/quick-panel/components/paper-view.service.d.ts +6 -0
- package/lib/navigation/quick-panel/public-api.d.ts +5 -0
- package/lib/navigation/utility/filter-extraction.service.d.ts +18 -0
- package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +33 -0
- package/lib/panel/abstract/featured-value.d.ts +13 -0
- package/lib/panel/abstract/panel-with-header-binding.d.ts +23 -0
- package/lib/panel/abstract/panel-with-immediate-data.d.ts +18 -0
- package/lib/panel/abstract/tabbed-virtual-scroll.component.d.ts +10 -0
- package/lib/panel/abstract-panel.component.d.ts +23 -0
- package/lib/panel/case-panel/abstract-case-panel.component.d.ts +41 -0
- package/lib/panel/immediate/abstract-immediate-filter-text-content.component.d.ts +16 -0
- package/lib/panel/immediate/abstract-immediate-filter-text.component.d.ts +14 -0
- package/lib/panel/immediate/model/filter-text-injection-token.d.ts +10 -0
- package/lib/panel/public-api.d.ts +12 -0
- package/lib/panel/task-panel/abstract-task-panel.component.d.ts +109 -0
- package/lib/panel/task-panel/models/disable-functions.d.ts +10 -0
- package/lib/panel/task-panel-list/abstract-task-list.component.d.ts +46 -0
- package/lib/panel/task-panel-list/task-panel-data/task-panel-data.d.ts +8 -0
- package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +57 -0
- package/lib/process/net.d.ts +95 -0
- package/lib/process/netRole.d.ts +4 -0
- package/lib/process/permissions.d.ts +30 -0
- package/lib/process/petri-net-reference-with-permissions.d.ts +7 -0
- package/lib/process/process.service.d.ts +94 -0
- package/lib/process/public-api.d.ts +7 -0
- package/lib/process/public-process.service.d.ts +8 -0
- package/lib/process/rolesAndPermissions.d.ts +6 -0
- package/lib/process/transaction.d.ts +5 -0
- package/lib/process/transition.d.ts +7 -0
- package/lib/public/factories/get-net-and-create-case.d.ts +6 -0
- package/lib/public/factories/public-factory-resolver.d.ts +6 -0
- package/lib/public/factories/public-search-factory.d.ts +9 -0
- package/lib/public/public-api.d.ts +4 -0
- package/lib/public/services/public-url-resolver.service.d.ts +6 -0
- package/lib/resources/abstract-endpoint/abstract-resource.service.d.ts +38 -0
- package/lib/resources/abstract-endpoint/count-service.d.ts +6 -0
- package/lib/resources/engine-endpoint/case-resource.service.d.ts +86 -0
- package/lib/resources/engine-endpoint/dashboard-resource.service.d.ts +10 -0
- package/lib/resources/engine-endpoint/petri-net-resource.service.d.ts +105 -0
- package/lib/resources/engine-endpoint/public/public-case-resource.service.d.ts +20 -0
- package/lib/resources/engine-endpoint/public/public-petri-net-resource.service.d.ts +72 -0
- package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +95 -0
- package/lib/resources/engine-endpoint/task-resource.service.d.ts +134 -0
- package/lib/resources/engine-endpoint/user-resource.service.d.ts +133 -0
- package/lib/resources/interface/assigned-user-policy.d.ts +4 -0
- package/lib/resources/interface/author.d.ts +15 -0
- package/lib/resources/interface/authority.d.ts +13 -0
- package/lib/resources/interface/case-get-request-body.d.ts +79 -0
- package/lib/resources/interface/case.d.ts +124 -0
- package/lib/resources/interface/changed-field-container.d.ts +4 -0
- package/lib/resources/interface/count.d.ts +15 -0
- package/lib/resources/interface/create-case-request-body.d.ts +11 -0
- package/lib/resources/interface/data-group-layout.d.ts +62 -0
- package/lib/resources/interface/data-groups.d.ts +60 -0
- package/lib/resources/interface/event-outcome.d.ts +10 -0
- package/lib/resources/interface/field-alignment.d.ts +8 -0
- package/lib/resources/interface/fields.d.ts +218 -0
- package/lib/resources/interface/file-resource.d.ts +22 -0
- package/lib/resources/interface/group.d.ts +18 -0
- package/lib/resources/interface/immediate-data.d.ts +44 -0
- package/lib/resources/interface/link.d.ts +18 -0
- package/lib/resources/interface/message-resource.d.ts +24 -0
- package/lib/resources/interface/page.d.ts +14 -0
- package/lib/resources/interface/pagination.d.ts +21 -0
- package/lib/resources/interface/petri-net-object-id.d.ts +12 -0
- package/lib/resources/interface/petri-net-reference.d.ts +46 -0
- package/lib/resources/interface/petri-net-request-body.d.ts +14 -0
- package/lib/resources/interface/petri-net.d.ts +10 -0
- package/lib/resources/interface/preferences.d.ts +16 -0
- package/lib/resources/interface/process-role.d.ts +9 -0
- package/lib/resources/interface/response-data.d.ts +19 -0
- package/lib/resources/interface/task-layout.d.ts +11 -0
- package/lib/resources/interface/task-reference.d.ts +17 -0
- package/lib/resources/interface/task-set-data-request-body.d.ts +35 -0
- package/lib/resources/interface/task.d.ts +72 -0
- package/lib/resources/interface/user-process-role.d.ts +13 -0
- package/lib/resources/interface/user-resource-small.d.ts +11 -0
- package/lib/resources/interface/user-resource.d.ts +16 -0
- package/lib/resources/public-api.d.ts +42 -0
- package/lib/resources/resource-provider.service.d.ts +53 -0
- package/lib/resources/types/nae-date-type.d.ts +7 -0
- package/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.d.ts +12 -0
- package/lib/routing/public-api.d.ts +5 -0
- package/lib/routing/redirect-service/redirect.service.d.ts +22 -0
- package/lib/routing/routing-builder/routing-builder.service.d.ts +23 -0
- package/lib/routing/view-service/model/view-entry.d.ts +14 -0
- package/lib/routing/view-service/view.service.d.ts +29 -0
- package/lib/search/advanced-search-component/abstract-advanced-search.component.d.ts +25 -0
- package/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.d.ts +22 -0
- package/lib/search/category-factory/category-factory.d.ts +55 -0
- package/lib/search/category-factory/category-resolver.service.d.ts +48 -0
- package/lib/search/category-factory/category-serialisation-pair.d.ts +10 -0
- package/lib/search/category-factory/default-categories-factories.d.ts +32 -0
- package/lib/search/category-factory/default-search-categories.module.d.ts +2 -0
- package/lib/search/category-factory/optional-dependencies.d.ts +22 -0
- package/lib/search/category-factory/search-categories-injection-token.d.ts +24 -0
- package/lib/search/fulltext-search-component/abstract-fulltext-search.component.d.ts +7 -0
- package/lib/search/header-search-service/header-search.service.d.ts +112 -0
- package/lib/search/models/base-filter-injection-token.d.ts +6 -0
- package/lib/search/models/base-filter.d.ts +18 -0
- package/lib/search/models/boolean-operator.d.ts +7 -0
- package/lib/search/models/category/autocomplete-category.d.ts +94 -0
- package/lib/search/models/category/autocomplete-options.d.ts +17 -0
- package/lib/search/models/category/case/case-author.d.ts +12 -0
- package/lib/search/models/category/case/case-creation-date-time.d.ts +16 -0
- package/lib/search/models/category/case/case-creation-date.d.ts +16 -0
- package/lib/search/models/category/case/case-dataset.d.ts +94 -0
- package/lib/search/models/category/case/case-net-attribute-autocomplete-category.d.ts +18 -0
- package/lib/search/models/category/case/case-process.d.ts +27 -0
- package/lib/search/models/category/case/case-role.d.ts +15 -0
- package/lib/search/models/category/case/case-search.enum.d.ts +13 -0
- package/lib/search/models/category/case/case-simple-dataset.d.ts +58 -0
- package/lib/search/models/category/case/case-string-id.d.ts +11 -0
- package/lib/search/models/category/case/case-task.d.ts +15 -0
- package/lib/search/models/category/case/case-title.d.ts +11 -0
- package/lib/search/models/category/case/case-visual-id.d.ts +11 -0
- package/lib/search/models/category/categories.d.ts +20 -0
- package/lib/search/models/category/category.d.ts +363 -0
- package/lib/search/models/category/name-id-pair.d.ts +13 -0
- package/lib/search/models/category/net-attribute-autocomplete-category.d.ts +55 -0
- package/lib/search/models/category/net-attribute-pair.d.ts +17 -0
- package/lib/search/models/category/no-configuration-autocomplete-category.d.ts +28 -0
- package/lib/search/models/category/no-configuration-category.d.ts +30 -0
- package/lib/search/models/category/no-configuration-user-autocomplete-category.d.ts +20 -0
- package/lib/search/models/category/search-autocomplete-option.d.ts +21 -0
- package/lib/search/models/category/search-input-type.d.ts +12 -0
- package/lib/search/models/category/task/task-assignee.d.ts +12 -0
- package/lib/search/models/category/task/task-net-attribute-autocomplete-category.d.ts +18 -0
- package/lib/search/models/category/task/task-process.d.ts +19 -0
- package/lib/search/models/category/task/task-role.d.ts +15 -0
- package/lib/search/models/category/task/task-task.d.ts +15 -0
- package/lib/search/models/category/user-autocomplete.d.ts +28 -0
- package/lib/search/models/component-configuration/search-component-configuration-injection-token.d.ts +8 -0
- package/lib/search/models/component-configuration/search-component-configuration.d.ts +21 -0
- package/lib/search/models/component-configuration/search-mode.d.ts +7 -0
- package/lib/search/models/configuration-input.d.ts +38 -0
- package/lib/search/models/datafield-map-key.d.ts +28 -0
- package/lib/search/models/escape-result.d.ts +13 -0
- package/lib/search/models/operator/equals-date-time.d.ts +19 -0
- package/lib/search/models/operator/equals-date.d.ts +19 -0
- package/lib/search/models/operator/equals.d.ts +13 -0
- package/lib/search/models/operator/in-range-date-time.d.ts +24 -0
- package/lib/search/models/operator/in-range-date.d.ts +24 -0
- package/lib/search/models/operator/in-range.d.ts +12 -0
- package/lib/search/models/operator/is-null.d.ts +51 -0
- package/lib/search/models/operator/less-than-date-time.d.ts +16 -0
- package/lib/search/models/operator/less-than-date.d.ts +16 -0
- package/lib/search/models/operator/less-than-equal-date-time.d.ts +16 -0
- package/lib/search/models/operator/less-than-equal-date.d.ts +16 -0
- package/lib/search/models/operator/less-than-equal.d.ts +10 -0
- package/lib/search/models/operator/less-than.d.ts +10 -0
- package/lib/search/models/operator/like.d.ts +18 -0
- package/lib/search/models/operator/more-than-date-time.d.ts +16 -0
- package/lib/search/models/operator/more-than-date.d.ts +16 -0
- package/lib/search/models/operator/more-than-equal-date-time.d.ts +16 -0
- package/lib/search/models/operator/more-than-equal-date.d.ts +16 -0
- package/lib/search/models/operator/more-than-equal.d.ts +10 -0
- package/lib/search/models/operator/more-than.d.ts +10 -0
- package/lib/search/models/operator/not-equals-date-time.d.ts +13 -0
- package/lib/search/models/operator/not-equals-date.d.ts +16 -0
- package/lib/search/models/operator/not-equals.d.ts +18 -0
- package/lib/search/models/operator/operator.d.ts +98 -0
- package/lib/search/models/operator/operators.d.ts +29 -0
- package/lib/search/models/operator/substring.d.ts +13 -0
- package/lib/search/models/operator-template-part-type.d.ts +13 -0
- package/lib/search/models/operator-template-part.d.ts +26 -0
- package/lib/search/models/persistance/filter-metadata-allowed-nets.d.ts +14 -0
- package/lib/search/models/persistance/filter-metadata.d.ts +29 -0
- package/lib/search/models/persistance/filter-text-segment.d.ts +19 -0
- package/lib/search/models/persistance/generator-metadata.d.ts +44 -0
- package/lib/search/models/persistance/saved-filter-metadata.d.ts +26 -0
- package/lib/search/models/predicate/clause-predicate.d.ts +56 -0
- package/lib/search/models/predicate/editable-clause-predicate-with-generators.d.ts +24 -0
- package/lib/search/models/predicate/editable-clause-predicate.d.ts +67 -0
- package/lib/search/models/predicate/editable-elementary-predicate.d.ts +13 -0
- package/lib/search/models/predicate/editable-predicate-with-generator.d.ts +28 -0
- package/lib/search/models/predicate/editable-predicate.d.ts +14 -0
- package/lib/search/models/predicate/elementary-predicate.d.ts +10 -0
- package/lib/search/models/predicate/predicate-with-generator.d.ts +45 -0
- package/lib/search/models/predicate/predicate.d.ts +52 -0
- package/lib/search/models/predicate-removal-event.d.ts +13 -0
- package/lib/search/models/query/query.d.ts +44 -0
- package/lib/search/models/search-index.d.ts +74 -0
- package/lib/search/models/wrap-result.d.ts +13 -0
- package/lib/search/operator-service/operator-resolver.service.d.ts +23 -0
- package/lib/search/operator-service/operator.service.d.ts +16 -0
- package/lib/search/public-api.d.ts +98 -0
- package/lib/search/search-clause-component/abstract-search-clause.component.d.ts +28 -0
- package/lib/search/search-component/abstract-search.component.d.ts +86 -0
- package/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.d.ts +42 -0
- package/lib/search/search-keyword-resolver-service/search-index-resolver.service.d.ts +25 -0
- package/lib/search/search-operand-input-component/abstract-search-operand-input.component.d.ts +38 -0
- package/lib/search/search-predicate-component/abstract-search-predicate.component.d.ts +64 -0
- package/lib/search/search-service/search.service.d.ts +182 -0
- package/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.d.ts +105 -0
- package/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.d.ts +20 -0
- package/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.d.ts +20 -0
- package/lib/side-menu/content-components/filter-selector/model/filtered-array.d.ts +25 -0
- package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +50 -0
- package/lib/side-menu/content-components/injection-tokens.d.ts +8 -0
- package/lib/side-menu/content-components/load-filter/abstract-load-filter.component.d.ts +13 -0
- package/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.d.ts +8 -0
- package/lib/side-menu/content-components/new-case/abstract-new-case.component.d.ts +62 -0
- package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +13 -0
- package/lib/side-menu/content-components/option-selector/abstract-option-selector.component.d.ts +14 -0
- package/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.d.ts +24 -0
- package/lib/side-menu/content-components/public-api.d.ts +17 -0
- package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +15 -0
- package/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.d.ts +4 -0
- package/lib/side-menu/content-components/user-assign/abstract-user-assign.component.d.ts +46 -0
- package/lib/side-menu/content-components/user-assign/model/user-list-injected-data.d.ts +11 -0
- package/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.d.ts +83 -0
- package/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.d.ts +16 -0
- package/lib/side-menu/models/portal-wrapper.d.ts +9 -0
- package/lib/side-menu/models/side-menu-control.d.ts +15 -0
- package/lib/side-menu/models/side-menu-event.d.ts +6 -0
- package/lib/side-menu/models/side-menu-injection-data.d.ts +3 -0
- package/lib/side-menu/models/side-menu-ref.d.ts +8 -0
- package/lib/side-menu/models/side-menu-size.d.ts +5 -0
- package/lib/side-menu/net-version-visible-injection-token.d.ts +3 -0
- package/lib/side-menu/public-api.d.ts +10 -0
- package/lib/side-menu/services/side-menu.service.d.ts +35 -0
- package/lib/side-menu/side-menu-container/abstract-side-menu-container.component.d.ts +16 -0
- package/lib/side-menu/side-menu-injection-token.d.ts +3 -0
- package/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.d.ts +8 -0
- package/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.d.ts +8 -0
- package/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.d.ts +8 -0
- package/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.d.ts +8 -0
- package/lib/snack-bar/models/abstract-snack-bar.d.ts +10 -0
- package/lib/snack-bar/models/injection-token-snackbar.d.ts +4 -0
- package/lib/snack-bar/models/snack-bar-enums.d.ts +9 -0
- package/lib/snack-bar/models/snack-bar-injection-data.d.ts +5 -0
- package/lib/snack-bar/public-api.d.ts +10 -0
- package/lib/snack-bar/services/snack-bar.service.d.ts +18 -0
- package/lib/snack-bar/snack-bar.module.d.ts +2 -0
- package/lib/tabs/classes/opened-tab.d.ts +67 -0
- package/lib/tabs/classes/tab-view.d.ts +123 -0
- package/lib/tabs/interfaces.d.ts +135 -0
- package/lib/tabs/public-api.d.ts +5 -0
- package/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.d.ts +18 -0
- package/lib/tabs/tab-data-injection-token/tab-data-injection-token.d.ts +8 -0
- package/lib/tabs/tab-view/abstract-tab-view.component.d.ts +38 -0
- package/lib/task/interfaces/task-operations.d.ts +35 -0
- package/lib/task/models/null-task-operations.d.ts +22 -0
- package/lib/task/models/subject-task-operations.d.ts +37 -0
- package/lib/task/models/task-operations-injection-token.d.ts +3 -0
- package/lib/task/models/task-set-data-request-context.d.ts +11 -0
- package/lib/task/public-api.d.ts +15 -0
- package/lib/task/services/assign-policy.service.d.ts +81 -0
- package/lib/task/services/assign-task.service.d.ts +78 -0
- package/lib/task/services/cancel-task.service.d.ts +79 -0
- package/lib/task/services/data-focus-policy.service.d.ts +16 -0
- package/lib/task/services/delegate-task.service.d.ts +70 -0
- package/lib/task/services/finish-policy.service.d.ts +38 -0
- package/lib/task/services/finish-task.service.d.ts +76 -0
- package/lib/task/services/selected-case.service.d.ts +35 -0
- package/lib/task/services/task-data.service.d.ts +177 -0
- package/lib/task/services/task-handling-service.d.ts +41 -0
- package/lib/task/services/task-request-state.service.d.ts +64 -0
- package/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.d.ts +22 -0
- package/lib/task-content/model/async-rendering-configuration-injection-token.d.ts +8 -0
- package/lib/task-content/model/async-rendering-configuration.d.ts +22 -0
- package/lib/task-content/model/datafield-grid-layout-element.d.ts +9 -0
- package/lib/task-content/model/field-type-resource.d.ts +21 -0
- package/lib/task-content/model/policy.d.ts +27 -0
- package/lib/task-content/model/resource-interface.d.ts +37 -0
- package/lib/task-content/model/split-data-group.d.ts +7 -0
- package/lib/task-content/model/subgrid.d.ts +145 -0
- package/lib/task-content/model/task-content-element-type.d.ts +19 -0
- package/lib/task-content/model/task-event-notification.d.ts +32 -0
- package/lib/task-content/model/task-event.d.ts +8 -0
- package/lib/task-content/public-api.d.ts +17 -0
- package/lib/task-content/services/field-converter.service.d.ts +58 -0
- package/lib/task-content/services/single-task-content.service.d.ts +42 -0
- package/lib/task-content/services/task-content.service.d.ts +125 -0
- package/lib/task-content/services/task-event.service.d.ts +28 -0
- package/lib/task-content/services/unlimited-task-content.service.d.ts +42 -0
- package/lib/task-content/task-content/abstract-task-content.component.d.ts +263 -0
- package/lib/toolbar/abstract-toolbar.component.d.ts +15 -0
- package/lib/toolbar/public-api.d.ts +1 -0
- package/lib/translate/language.service.d.ts +20 -0
- package/lib/translate/public-api.d.ts +2 -0
- package/lib/translate/translate-interceptor.d.ts +8 -0
- package/lib/translate/translate-lib.module.d.ts +5 -0
- package/lib/user/components/user-card/abstract-user-card.component.d.ts +22 -0
- package/lib/user/models/iuser.d.ts +19 -0
- package/lib/user/models/public-api.d.ts +3 -0
- package/lib/user/models/user.d.ts +29 -0
- package/lib/user/models/view-id-injection-tokens.d.ts +3 -0
- package/lib/user/profile/abstract-profile.component.d.ts +14 -0
- package/lib/user/public-api.d.ts +8 -0
- package/lib/user/services/user-comparator.service.d.ts +7 -0
- package/lib/user/services/user-list.service.d.ts +111 -0
- package/lib/user/services/user-preference.service.d.ts +37 -0
- package/lib/user/services/user.service.d.ts +65 -0
- package/lib/user/services/view-id.service.d.ts +7 -0
- package/lib/utility/array-to-observable.d.ts +6 -0
- package/lib/utility/call-chain/after-action.d.ts +8 -0
- package/lib/utility/call-chain/call-chain.service.d.ts +16 -0
- package/lib/utility/clear-time-information.d.ts +6 -0
- package/lib/utility/destroy-subscription.d.ts +6 -0
- package/lib/utility/get-field.d.ts +34 -0
- package/lib/utility/get-immediate-data.d.ts +8 -0
- package/lib/utility/grid-layout/grid-layout-helper.d.ts +10 -0
- package/lib/utility/grid-layout/model/grid-element-with-item.d.ts +4 -0
- package/lib/utility/grid-layout/model/grid-element.d.ts +12 -0
- package/lib/utility/grid-layout/model/grid-filler.d.ts +10 -0
- package/lib/utility/incrementing-counter.d.ts +14 -0
- package/lib/utility/loading-emitter.d.ts +8 -0
- package/lib/utility/loading-with-filter-emitter.d.ts +12 -0
- package/lib/utility/navigation-item-task-filter-factory.d.ts +9 -0
- package/lib/utility/navigation-item-task-search-categories-factory.d.ts +15 -0
- package/lib/utility/of-void.d.ts +6 -0
- package/lib/utility/pagination/load-all-pages.d.ts +13 -0
- package/lib/utility/pagination/page-has-content.d.ts +6 -0
- package/lib/utility/process-message-response.d.ts +10 -0
- package/lib/utility/public-api.d.ts +45 -0
- package/lib/utility/refresh-tree.d.ts +5 -0
- package/lib/utility/result-with-after-actions.d.ts +21 -0
- package/lib/utility/service/case-list-font-color.service.d.ts +15 -0
- package/lib/utility/service/spinner-overlay.service.d.ts +13 -0
- package/lib/utility/stop-propagation.d.ts +1 -0
- package/lib/utility/tests/mocks/mock-authentication-method-service.d.ts +8 -0
- package/lib/utility/tests/mocks/mock-authentication.service.d.ts +10 -0
- package/lib/utility/tests/mocks/mock-endpoint.d.ts +25 -0
- package/lib/utility/tests/mocks/mock-sign-up.service.d.ts +20 -0
- package/lib/utility/tests/mocks/mock-user-autocomplete-value.d.ts +7 -0
- package/lib/utility/tests/mocks/mock-user-preference.service.d.ts +15 -0
- package/lib/utility/tests/mocks/mock-user-resource.service.d.ts +17 -0
- package/lib/utility/tests/search-category-mock-dependencies.d.ts +6 -0
- package/lib/utility/tests/test-config.d.ts +4 -0
- package/lib/utility/tests/test-factory-methods.d.ts +7 -0
- package/lib/utility/tests/test-mock-dependencies.module.d.ts +12 -0
- package/lib/utility/tests/test-view-service.d.ts +7 -0
- package/lib/utility/tests/utility/configure-category.d.ts +13 -0
- package/lib/utility/tests/utility/create-mock-case-outcome.d.ts +10 -0
- package/lib/utility/tests/utility/create-mock-case.d.ts +8 -0
- package/lib/utility/tests/utility/create-mock-datagroup.d.ts +18 -0
- package/lib/utility/tests/utility/create-mock-field.d.ts +19 -0
- package/lib/utility/tests/utility/create-mock-get-data-outcome.d.ts +7 -0
- package/lib/utility/tests/utility/create-mock-immediate-data.d.ts +8 -0
- package/lib/utility/tests/utility/create-mock-net.d.ts +17 -0
- package/lib/utility/tests/utility/create-mock-page.d.ts +7 -0
- package/lib/utility/tests/utility/create-mock-petri-net-outcome.d.ts +9 -0
- package/lib/utility/tests/utility/create-mock-set-data-outcome.d.ts +12 -0
- package/lib/utility/tests/utility/create-mock-task-outcome.d.ts +11 -0
- package/lib/utility/tests/utility/create-mock-task.d.ts +8 -0
- package/lib/view/abstract/page-load-request-context.d.ts +40 -0
- package/lib/view/abstract/sortable-view.d.ts +19 -0
- package/lib/view/abstract/view-with-headers.d.ts +13 -0
- package/lib/view/case-view/abstract-case-view.d.ts +25 -0
- package/lib/view/case-view/components/case-list/abstract-case-list.component.d.ts +35 -0
- package/lib/view/case-view/models/case-page-load-request-result.d.ts +14 -0
- package/lib/view/case-view/models/case-view-params.d.ts +3 -0
- package/lib/view/case-view/models/new-case-configuration-injection-token.d.ts +7 -0
- package/lib/view/case-view/models/new-case-configuration.d.ts +9 -0
- package/lib/view/case-view/service/case-view-service.d.ts +73 -0
- package/lib/view/case-view/tabbed-case-view.d.ts +26 -0
- package/lib/view/public-api.d.ts +35 -0
- package/lib/view/task-view/abstract-task-view.d.ts +12 -0
- package/lib/view/task-view/models/injected-tabbed-task-view-data.d.ts +12 -0
- package/lib/view/task-view/models/injection-token-task-endpoint.d.ts +6 -0
- package/lib/view/task-view/models/task-endpoint.d.ts +7 -0
- package/lib/view/task-view/models/task-page-load-request-result.d.ts +14 -0
- package/lib/view/task-view/models/task-view-configuration-injection-token.d.ts +13 -0
- package/lib/view/task-view/models/task-view-configuration.d.ts +19 -0
- package/lib/view/task-view/models/task-view-params.d.ts +3 -0
- package/lib/view/task-view/service/task-view.service.d.ts +68 -0
- package/lib/view/task-view/tabbed-task-view.d.ts +11 -0
- package/lib/view/tree-case-view/model/tree-petriflow-identifiers.d.ts +41 -0
- package/lib/view/tree-case-view/tree-case-view.service.d.ts +9 -0
- package/lib/view/tree-case-view/tree-component/abstract-tree.component.d.ts +99 -0
- package/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.d.ts +8 -0
- package/lib/view/tree-case-view/tree-component/case-tree.service.d.ts +300 -0
- package/lib/view/tree-case-view/tree-component/model/case-tree-node.d.ts +57 -0
- package/lib/view/tree-case-view/tree-component/model/case-tree-path.d.ts +8 -0
- package/lib/view/tree-case-view/tree-component/model/expansion-tree.d.ts +6 -0
- package/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.d.ts +8 -0
- package/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.d.ts +32 -0
- package/lib/view/tree-case-view/tree-task-content/tree-task-content.service.d.ts +112 -0
- package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +30 -0
- package/lib/view/workflow-view/models/injection-token-workflow-service.d.ts +10 -0
- package/lib/view/workflow-view/workflow-view.service.d.ts +52 -0
- package/netgrif-components-core.d.ts +25 -0
- package/netgrif-components-core.metadata.json +1 -0
- package/package.json +79 -0
- package/public-api.d.ts +39 -0
- package/schematics/_commons/angular-cli-devkit-core-strings.d.ts +93 -0
- package/schematics/_commons/angular-cli-devkit-core-strings.js +167 -0
- package/schematics/_commons/angular-cli-devkit-core-strings.js.map +1 -0
- package/schematics/_commons/import-to-add.d.ts +5 -0
- package/schematics/_commons/import-to-add.js +11 -0
- package/schematics/_commons/import-to-add.js.map +1 -0
- package/schematics/_commons/view-class-info.d.ts +22 -0
- package/schematics/_commons/view-class-info.js +58 -0
- package/schematics/_commons/view-class-info.js.map +1 -0
- package/schematics/_utility/models/file-data.d.ts +6 -0
- package/schematics/_utility/models/file-data.js +3 -0
- package/schematics/_utility/models/file-data.js.map +1 -0
- package/schematics/_utility/models/file-system-node.d.ts +6 -0
- package/schematics/_utility/models/file-system-node.js +12 -0
- package/schematics/_utility/models/file-system-node.js.map +1 -0
- package/schematics/_utility/models/project-info.d.ts +13 -0
- package/schematics/_utility/models/project-info.js +20 -0
- package/schematics/_utility/models/project-info.js.map +1 -0
- package/schematics/_utility/modified-library-functions.d.ts +24 -0
- package/schematics/_utility/modified-library-functions.js +150 -0
- package/schematics/_utility/modified-library-functions.js.map +1 -0
- package/schematics/_utility/utility-functions.d.ts +60 -0
- package/schematics/_utility/utility-functions.js +221 -0
- package/schematics/_utility/utility-functions.js.map +1 -0
- package/schematics/add/add/index.d.ts +2 -0
- package/schematics/add/add/index.js +27 -0
- package/schematics/add/add/index.js.map +1 -0
- package/schematics/add/create-nae-files/files/app-routing.module.ts.template +13 -0
- package/schematics/add/create-nae-files/index.d.ts +2 -0
- package/schematics/add/create-nae-files/index.js +154 -0
- package/schematics/add/create-nae-files/index.js.map +1 -0
- package/schematics/add/create-nae-files/schema.json +7 -0
- package/schematics/collection.json +30 -0
- package/schematics/configuration-service/files/__project@dasherize__-configuration.service.ts.template +13 -0
- package/schematics/configuration-service/schema.json +7 -0
- package/schematics/configuration-service/schematic-create-configuration-service.d.ts +2 -0
- package/schematics/configuration-service/schematic-create-configuration-service.js +41 -0
- package/schematics/configuration-service/schematic-create-configuration-service.js.map +1 -0
- package/schematics/migrations/4.1/migration-4.1.d.ts +5 -0
- package/schematics/migrations/4.1/migration-4.1.js +37 -0
- package/schematics/migrations/4.1/migration-4.1.js.map +1 -0
- package/schematics/migrations.json +10 -0
- package/schematics/view/_utility/view-service-functions.d.ts +9 -0
- package/schematics/view/_utility/view-service-functions.js +59 -0
- package/schematics/view/_utility/view-service-functions.js.map +1 -0
- package/schematics/view/_utility/view-utility-functions.d.ts +7 -0
- package/schematics/view/_utility/view-utility-functions.js +53 -0
- package/schematics/view/_utility/view-utility-functions.js.map +1 -0
- package/schematics/view-service/files/__project@dasherize__-view.service.ts.template +14 -0
- package/schematics/view-service/schema.json +7 -0
- package/schematics/view-service/schematic-create-view-service.d.ts +2 -0
- package/schematics/view-service/schematic-create-view-service.js +25 -0
- package/schematics/view-service/schematic-create-view-service.js.map +1 -0
- package/src/assets/i18n/de.json +419 -0
- package/src/assets/i18n/en.json +419 -0
- package/src/assets/i18n/sk.json +419 -0
- package/src/schema/nae-schema.json +770 -0
|
@@ -0,0 +1,899 @@
|
|
|
1
|
+
import { __read, __spread } from "tslib";
|
|
2
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
3
|
+
import { HttpParams } from '@angular/common/http';
|
|
4
|
+
import { CaseResourceService } from '../../../resources/engine-endpoint/case-resource.service';
|
|
5
|
+
import { CaseTreeNode } from './model/case-tree-node';
|
|
6
|
+
import { TreeCaseViewService } from '../tree-case-view.service';
|
|
7
|
+
import { TaskResourceService } from '../../../resources/engine-endpoint/task-resource.service';
|
|
8
|
+
import { LoggerService } from '../../../logger/services/logger.service';
|
|
9
|
+
import { ProcessService } from '../../../process/process.service';
|
|
10
|
+
import { SideMenuService } from '../../../side-menu/services/side-menu.service';
|
|
11
|
+
import { SideMenuSize } from '../../../side-menu/models/side-menu-size';
|
|
12
|
+
import { forkJoin, of, ReplaySubject, throwError } from 'rxjs';
|
|
13
|
+
import { TreePetriflowIdentifiers } from '../model/tree-petriflow-identifiers';
|
|
14
|
+
import { tap } from 'rxjs/operators';
|
|
15
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
16
|
+
import { hasContent } from '../../../utility/pagination/page-has-content';
|
|
17
|
+
import { NestedTreeControl } from '@angular/cdk/tree';
|
|
18
|
+
import { MatTreeNestedDataSource } from '@angular/material/tree';
|
|
19
|
+
import { ofVoid } from '../../../utility/of-void';
|
|
20
|
+
import { getImmediateData } from '../../../utility/get-immediate-data';
|
|
21
|
+
import { NAE_OPTION_SELECTOR_COMPONENT } from '../../../side-menu/content-components/injection-tokens';
|
|
22
|
+
import { SimpleFilter } from '../../../filter/models/simple-filter';
|
|
23
|
+
import { ResultWithAfterActions } from '../../../utility/result-with-after-actions';
|
|
24
|
+
import { refreshTree } from '../../../utility/refresh-tree';
|
|
25
|
+
var CaseTreeService = /** @class */ (function () {
|
|
26
|
+
function CaseTreeService(_caseResourceService, _treeCaseViewService, _taskResourceService, _logger, _processService, _sideMenuService, _translateService, _optionSelectorComponent) {
|
|
27
|
+
var _this = this;
|
|
28
|
+
this._caseResourceService = _caseResourceService;
|
|
29
|
+
this._treeCaseViewService = _treeCaseViewService;
|
|
30
|
+
this._taskResourceService = _taskResourceService;
|
|
31
|
+
this._logger = _logger;
|
|
32
|
+
this._processService = _processService;
|
|
33
|
+
this._sideMenuService = _sideMenuService;
|
|
34
|
+
this._translateService = _translateService;
|
|
35
|
+
this._optionSelectorComponent = _optionSelectorComponent;
|
|
36
|
+
/**
|
|
37
|
+
* Weather the tree is eager loaded or not.
|
|
38
|
+
*
|
|
39
|
+
* Defaults to `false`.
|
|
40
|
+
*
|
|
41
|
+
* It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
|
|
42
|
+
*/
|
|
43
|
+
this._isEagerLoaded = false;
|
|
44
|
+
this._treeDataSource = new MatTreeNestedDataSource();
|
|
45
|
+
this._treeControl = new NestedTreeControl(function (node) { return node.children; });
|
|
46
|
+
_treeCaseViewService.reloadCase$.asObservable().subscribe(function () {
|
|
47
|
+
_this.reloadCurrentCase();
|
|
48
|
+
});
|
|
49
|
+
this._treeRootLoaded$ = new ReplaySubject(1);
|
|
50
|
+
}
|
|
51
|
+
CaseTreeService.prototype.ngOnDestroy = function () {
|
|
52
|
+
this._treeRootLoaded$.complete();
|
|
53
|
+
};
|
|
54
|
+
Object.defineProperty(CaseTreeService.prototype, "rootFilter", {
|
|
55
|
+
set: function (filter) {
|
|
56
|
+
this._rootNodesFilter = filter;
|
|
57
|
+
this.dataSource.data = [];
|
|
58
|
+
this.loadTreeRoot();
|
|
59
|
+
},
|
|
60
|
+
enumerable: false,
|
|
61
|
+
configurable: true
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(CaseTreeService.prototype, "dataSource", {
|
|
64
|
+
get: function () {
|
|
65
|
+
return this._treeDataSource;
|
|
66
|
+
},
|
|
67
|
+
enumerable: false,
|
|
68
|
+
configurable: true
|
|
69
|
+
});
|
|
70
|
+
Object.defineProperty(CaseTreeService.prototype, "treeControl", {
|
|
71
|
+
get: function () {
|
|
72
|
+
return this._treeControl;
|
|
73
|
+
},
|
|
74
|
+
enumerable: false,
|
|
75
|
+
configurable: true
|
|
76
|
+
});
|
|
77
|
+
Object.defineProperty(CaseTreeService.prototype, "currentNode", {
|
|
78
|
+
get: function () {
|
|
79
|
+
return this._currentNode;
|
|
80
|
+
},
|
|
81
|
+
enumerable: false,
|
|
82
|
+
configurable: true
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperty(CaseTreeService.prototype, "treeRootLoaded$", {
|
|
85
|
+
/**
|
|
86
|
+
* Emits a value whenever a new root node Filter is set.
|
|
87
|
+
*
|
|
88
|
+
* `true` is emitted if the root node was successfully loaded. `false` otherwise.
|
|
89
|
+
*
|
|
90
|
+
* On subscription emits the last emitted value (if any) to the subscriber.
|
|
91
|
+
*/
|
|
92
|
+
get: function () {
|
|
93
|
+
return this._treeRootLoaded$.asObservable();
|
|
94
|
+
},
|
|
95
|
+
enumerable: false,
|
|
96
|
+
configurable: true
|
|
97
|
+
});
|
|
98
|
+
Object.defineProperty(CaseTreeService.prototype, "_currentCase", {
|
|
99
|
+
get: function () {
|
|
100
|
+
return this._currentNode ? this._currentNode.case : undefined;
|
|
101
|
+
},
|
|
102
|
+
enumerable: false,
|
|
103
|
+
configurable: true
|
|
104
|
+
});
|
|
105
|
+
Object.defineProperty(CaseTreeService.prototype, "rootNodeLoading$", {
|
|
106
|
+
/**
|
|
107
|
+
* @returns an `Observable` of the {@link LoadingEmitter} representing the loading state of the root node.
|
|
108
|
+
* Returns `undefined` if the tree has not yet been initialized.
|
|
109
|
+
*
|
|
110
|
+
* Wait for an emission on the [treeRootLoaded$]{@link CaseTreeService#treeRootLoaded$} stream before getting this Observable.
|
|
111
|
+
*
|
|
112
|
+
* The first value emitted by the Observable is `false`, when the tree finishes initializing.
|
|
113
|
+
*/
|
|
114
|
+
get: function () {
|
|
115
|
+
return !!this._rootNode ? this._rootNode.loadingChildren.asObservable() : undefined;
|
|
116
|
+
},
|
|
117
|
+
enumerable: false,
|
|
118
|
+
configurable: true
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(CaseTreeService.prototype, "rootNodeAddingChild$", {
|
|
121
|
+
/**
|
|
122
|
+
* @returns an `Observable` of the {@link LoadingEmitter} representing whether the root node is currently
|
|
123
|
+
* in the process of adding a new child node or not.
|
|
124
|
+
* Returns `undefined` if the tree has not yet been initialized.
|
|
125
|
+
*
|
|
126
|
+
* Wait for an emission on the [treeRootLoaded$]{@link CaseTreeService#treeRootLoaded$} stream before getting this Observable.
|
|
127
|
+
*
|
|
128
|
+
* The first value emitted by the Observable is `false`, when the tree finishes initializing.
|
|
129
|
+
*/
|
|
130
|
+
get: function () {
|
|
131
|
+
return !!this._rootNode ? this._rootNode.addingNode.asObservable() : undefined;
|
|
132
|
+
},
|
|
133
|
+
enumerable: false,
|
|
134
|
+
configurable: true
|
|
135
|
+
});
|
|
136
|
+
Object.defineProperty(CaseTreeService.prototype, "isEagerLoaded", {
|
|
137
|
+
/**
|
|
138
|
+
* Weather the tree is eager loaded or not.
|
|
139
|
+
*
|
|
140
|
+
* Defaults to `false`.
|
|
141
|
+
*
|
|
142
|
+
* It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
|
|
143
|
+
*/
|
|
144
|
+
get: function () {
|
|
145
|
+
return this._isEagerLoaded;
|
|
146
|
+
},
|
|
147
|
+
/**
|
|
148
|
+
* Weather the tree is eager loaded or not.
|
|
149
|
+
*
|
|
150
|
+
* Defaults to `false`.
|
|
151
|
+
*
|
|
152
|
+
* It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
|
|
153
|
+
*
|
|
154
|
+
* @param eager the new setting for eager loading
|
|
155
|
+
*/
|
|
156
|
+
set: function (eager) {
|
|
157
|
+
this._isEagerLoaded = eager;
|
|
158
|
+
},
|
|
159
|
+
enumerable: false,
|
|
160
|
+
configurable: true
|
|
161
|
+
});
|
|
162
|
+
/**
|
|
163
|
+
* Loads and populates the topmost level of the tree.
|
|
164
|
+
*
|
|
165
|
+
* The displayed cases are determined by this object's [rootFilter]{@link CaseTreeService#rootFilter}.
|
|
166
|
+
*
|
|
167
|
+
* Cases are loaded one page at a time and the tree is refreshed after each page.
|
|
168
|
+
* [finishedLoadingFirstLevel$]{@link CaseTreeService#treeRootLoaded$}
|
|
169
|
+
* will emit `true` once the last page loads successfully.
|
|
170
|
+
* `false` will be emitted if any of the requests fail.
|
|
171
|
+
*/
|
|
172
|
+
CaseTreeService.prototype.loadTreeRoot = function () {
|
|
173
|
+
var _this = this;
|
|
174
|
+
if (this._rootNodesFilter) {
|
|
175
|
+
this._caseResourceService.searchCases(this._rootNodesFilter).subscribe(function (page) {
|
|
176
|
+
if (hasContent(page)) {
|
|
177
|
+
_this._rootNode = new CaseTreeNode(page.content[0], undefined);
|
|
178
|
+
if (page.content.length !== 1) {
|
|
179
|
+
_this._logger.warn('Filter for tree root returned more than one case. Using the first value as tree root...');
|
|
180
|
+
}
|
|
181
|
+
_this._treeRootLoaded$.next(true);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
_this._logger.error('Tree root cannot be generated from the provided filter', page);
|
|
185
|
+
}
|
|
186
|
+
}, function (error) {
|
|
187
|
+
_this._logger.error('Root node of the case tree could not be loaded', error);
|
|
188
|
+
_this._treeRootLoaded$.next(false);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Adds the loaded tree root to the display based on the setting.
|
|
194
|
+
* @param showRoot whether the root of the tree should be displayed in the tree or not.
|
|
195
|
+
* If the root is not displayed it's children will be displayed on the first level.
|
|
196
|
+
* @returns an Observable that emits when the tree finishes initialization.
|
|
197
|
+
*/
|
|
198
|
+
CaseTreeService.prototype.initializeTree = function (showRoot) {
|
|
199
|
+
var _this = this;
|
|
200
|
+
if (!this._rootNode) {
|
|
201
|
+
this._logger.error('Set a Filter before initializing the case tree');
|
|
202
|
+
return throwError(new Error('Set a Filter before initializing the case tree'));
|
|
203
|
+
}
|
|
204
|
+
this._showRoot = showRoot;
|
|
205
|
+
if (showRoot) {
|
|
206
|
+
this.dataSource.data = [this._rootNode];
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this.dataSource.data = this._rootNode.children;
|
|
210
|
+
}
|
|
211
|
+
var ret;
|
|
212
|
+
if (!showRoot || this._isEagerLoaded) {
|
|
213
|
+
var result_1 = new ReplaySubject(1);
|
|
214
|
+
ret = result_1.asObservable();
|
|
215
|
+
this.expandNode(this._rootNode).subscribe(function () {
|
|
216
|
+
_this.refreshTree();
|
|
217
|
+
result_1.next();
|
|
218
|
+
result_1.complete();
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
this.refreshTree();
|
|
223
|
+
ret = ofVoid();
|
|
224
|
+
}
|
|
225
|
+
return ret;
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Notifies the parent TreeCaseView that a case was clicked in the tree and it's Task should be displayed
|
|
229
|
+
*/
|
|
230
|
+
CaseTreeService.prototype.changeActiveNode = function (node) {
|
|
231
|
+
this._currentNode = node;
|
|
232
|
+
this._treeCaseViewService.loadTask$.next(node ? node.case : undefined);
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Toggles the expansion state of a node
|
|
236
|
+
* @param node the {@link CaseTreeNode} who's content should be toggled
|
|
237
|
+
*/
|
|
238
|
+
CaseTreeService.prototype.toggleNode = function (node) {
|
|
239
|
+
if (this._treeControl.isExpanded(node)) {
|
|
240
|
+
this._treeControl.collapse(node);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this.expandNode(node);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Expands the target node in the tree and reloads it's children if they are marked as dirty
|
|
248
|
+
* @param node the {@link CaseTreeNode} that should be expanded
|
|
249
|
+
* @returns emits `true` if the node is expanded and `false` if not. If the expansion causes more node expansions
|
|
250
|
+
* (e.g. eager loaded tree) then, the Observable emits after all the subtree expansions complete.
|
|
251
|
+
*/
|
|
252
|
+
CaseTreeService.prototype.expandNode = function (node) {
|
|
253
|
+
var _this = this;
|
|
254
|
+
this._logger.debug('Requesting expansion of tree node', node.toLoggableForm());
|
|
255
|
+
if (node.loadingChildren.isActive) {
|
|
256
|
+
this._logger.debug('Node requested for expansion is loading. Expansion canceled.');
|
|
257
|
+
return of(false);
|
|
258
|
+
}
|
|
259
|
+
if (!node.dirtyChildren) {
|
|
260
|
+
this._logger.debug('Node requested for expansion has clean children. Simple expansion.');
|
|
261
|
+
this.treeControl.expand(node);
|
|
262
|
+
return of(true);
|
|
263
|
+
}
|
|
264
|
+
var ret = new ReplaySubject(1);
|
|
265
|
+
this.updateNodeChildren(node).subscribe(function () {
|
|
266
|
+
_this._logger.debug('Node requested for expansion with dirty children had its children reloaded.');
|
|
267
|
+
if (node.children.length > 0) {
|
|
268
|
+
_this._logger.debug('Node expanded.', node.toLoggableForm());
|
|
269
|
+
_this.treeControl.expand(node);
|
|
270
|
+
if (_this._isEagerLoaded) {
|
|
271
|
+
_this._logger.debug("Eager loading children of tree node with case id '" + node.case.stringId + "'");
|
|
272
|
+
var innerObservables = node.children.map(function (childNode) { return _this.expandNode(childNode); });
|
|
273
|
+
// forkJoin doesn't emit with 0 input observables
|
|
274
|
+
innerObservables.push(of(true));
|
|
275
|
+
forkJoin(innerObservables).subscribe(function () {
|
|
276
|
+
ret.next(true);
|
|
277
|
+
ret.complete();
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
ret.next(true);
|
|
282
|
+
ret.complete();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
ret.next(false);
|
|
287
|
+
ret.complete();
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
return ret.asObservable();
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Checks whether dirty children need to be reloaded and reloads them if needed.
|
|
294
|
+
* @param node the {@link CaseTreeNode} who's children are updated
|
|
295
|
+
* @returns emits when loading finishes
|
|
296
|
+
*/
|
|
297
|
+
CaseTreeService.prototype.updateNodeChildren = function (node) {
|
|
298
|
+
var _this = this;
|
|
299
|
+
node.loadingChildren.on();
|
|
300
|
+
var childrenCaseRef = getImmediateData(node.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
301
|
+
if (!childrenCaseRef || childrenCaseRef.value.length === 0) {
|
|
302
|
+
node.children = [];
|
|
303
|
+
this.refreshTree();
|
|
304
|
+
node.dirtyChildren = false;
|
|
305
|
+
node.loadingChildren.off();
|
|
306
|
+
return ofVoid();
|
|
307
|
+
}
|
|
308
|
+
if (node.children.length === childrenCaseRef.value.length) {
|
|
309
|
+
var existingChildren_1 = new Set();
|
|
310
|
+
node.children.forEach(function (childNode) { return existingChildren_1.add(childNode.case.stringId); });
|
|
311
|
+
if (childrenCaseRef.value.every(function (caseId) { return existingChildren_1.has(caseId); })) {
|
|
312
|
+
node.dirtyChildren = false;
|
|
313
|
+
node.loadingChildren.off();
|
|
314
|
+
return ofVoid();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return this.updatePageOfChildren(node, 0).pipe(tap(function () {
|
|
318
|
+
_this.refreshTree();
|
|
319
|
+
node.dirtyChildren = false;
|
|
320
|
+
node.loadingChildren.off();
|
|
321
|
+
}));
|
|
322
|
+
};
|
|
323
|
+
/**
|
|
324
|
+
* Loads every page of children from the given number and updates the existing children.
|
|
325
|
+
*
|
|
326
|
+
* Missing nodes are removed. Existing nodes are marked as dirty. New nodes are added.
|
|
327
|
+
*
|
|
328
|
+
* Nodes are returned in their insertion order.
|
|
329
|
+
* @param node the {@link CaseTreeNode} who's children are updated
|
|
330
|
+
* @param pageNumber the number of the first page that should be loaded. All following pages are loaded as well
|
|
331
|
+
* @returns next is emitted when loading of all pages completes (regardless of the outcome)
|
|
332
|
+
*/
|
|
333
|
+
CaseTreeService.prototype.updatePageOfChildren = function (node, pageNumber) {
|
|
334
|
+
var _this = this;
|
|
335
|
+
var requestBody = this.createChildRequestBody(node);
|
|
336
|
+
if (!requestBody) {
|
|
337
|
+
this._logger.error('Cannot create filter to find children of the given node', node.case);
|
|
338
|
+
return throwError(new Error('Cannot create filter to find children of the given node'));
|
|
339
|
+
}
|
|
340
|
+
var done = new ReplaySubject(1);
|
|
341
|
+
var params = new HttpParams();
|
|
342
|
+
params = params.set('page', "" + pageNumber).set('sort', 'creationDate,asc');
|
|
343
|
+
this._caseResourceService.getCases(requestBody, params).subscribe(function (page) {
|
|
344
|
+
if (!hasContent(page)) {
|
|
345
|
+
_this._logger.error('Child cases invalid page content', page);
|
|
346
|
+
done.next();
|
|
347
|
+
done.complete();
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
_this.updateCurrentChildrenWithNewPage(node, page);
|
|
351
|
+
if (pageNumber + 1 < page.pagination.totalPages) {
|
|
352
|
+
_this.updatePageOfChildren(node, pageNumber + 1).subscribe(function () {
|
|
353
|
+
done.next();
|
|
354
|
+
done.complete();
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
done.next();
|
|
359
|
+
done.complete();
|
|
360
|
+
}
|
|
361
|
+
}, function (error) {
|
|
362
|
+
_this._logger.error('Child cases could not be loaded', error);
|
|
363
|
+
done.next();
|
|
364
|
+
done.complete();
|
|
365
|
+
});
|
|
366
|
+
return done.asObservable();
|
|
367
|
+
};
|
|
368
|
+
/**
|
|
369
|
+
* Updates the children of the given {@link CaseTreeNode} with [Cases]{@link Case} from the provided {@link Page}.
|
|
370
|
+
* @param node the {@link CaseTreeNode} who's children are updated
|
|
371
|
+
* @param page the {@link Page} that contains the updated children
|
|
372
|
+
*/
|
|
373
|
+
CaseTreeService.prototype.updateCurrentChildrenWithNewPage = function (node, page) {
|
|
374
|
+
var _this = this;
|
|
375
|
+
page.content.forEach(function (newCase, index) {
|
|
376
|
+
var position = page.pagination.size * page.pagination.number + index;
|
|
377
|
+
while (position < node.children.length && node.children[position].case.stringId !== newCase.stringId) {
|
|
378
|
+
node.children.splice(position, 1);
|
|
379
|
+
}
|
|
380
|
+
if (node.children.length === position) {
|
|
381
|
+
node.children.push(new CaseTreeNode(newCase, node));
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
node.children[position].case = newCase;
|
|
385
|
+
node.dirtyChildren = true;
|
|
386
|
+
_this.treeControl.collapseDescendants(node.children[position]);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
};
|
|
390
|
+
/**
|
|
391
|
+
* @param node the {@link CaseTreeNode} who's children the {@link Filter} should return
|
|
392
|
+
* @returns a request body that finds all child cases of the given `node`.
|
|
393
|
+
* Returns `undefined` if the provided `node` doesn't contain enough information to create the request body.
|
|
394
|
+
*/
|
|
395
|
+
CaseTreeService.prototype.createChildRequestBody = function (node) {
|
|
396
|
+
var childCaseRef = getImmediateData(node.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
397
|
+
if (!childCaseRef) {
|
|
398
|
+
return undefined;
|
|
399
|
+
}
|
|
400
|
+
return { stringId: childCaseRef.value };
|
|
401
|
+
};
|
|
402
|
+
/**
|
|
403
|
+
* Adds a child to the root node.
|
|
404
|
+
*
|
|
405
|
+
* Useful if you are using the layout where the root node is hidden.
|
|
406
|
+
* @returns emits `true` if the child was successfully added, `false` if not
|
|
407
|
+
*/
|
|
408
|
+
CaseTreeService.prototype.addRootChildNode = function () {
|
|
409
|
+
var _this = this;
|
|
410
|
+
var ret = new ReplaySubject(1);
|
|
411
|
+
this.addChildNode(this._rootNode).subscribe(function (added) {
|
|
412
|
+
if (added) {
|
|
413
|
+
if (!_this._showRoot && _this._treeDataSource.data.length === 0) {
|
|
414
|
+
_this._treeDataSource.data = _this._rootNode.children;
|
|
415
|
+
_this.refreshTree();
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
ret.next(added);
|
|
419
|
+
ret.complete();
|
|
420
|
+
});
|
|
421
|
+
return ret;
|
|
422
|
+
};
|
|
423
|
+
/**
|
|
424
|
+
* Adds a new child node to the given node based on the properties of the node's case
|
|
425
|
+
* @returns emits `true` if the child was successfully added, `false` if not
|
|
426
|
+
*/
|
|
427
|
+
CaseTreeService.prototype.addChildNode = function (clickedNode) {
|
|
428
|
+
var _this = this;
|
|
429
|
+
clickedNode.addingNode.on();
|
|
430
|
+
var caseRefField = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
431
|
+
if (caseRefField.allowedNets.length === 0) {
|
|
432
|
+
this._logger.error("Case " + clickedNode.case.stringId + " can add new tree nodes but has no allowed nets");
|
|
433
|
+
clickedNode.addingNode.off();
|
|
434
|
+
return of(false);
|
|
435
|
+
}
|
|
436
|
+
var ret = new ReplaySubject(1);
|
|
437
|
+
if (caseRefField.allowedNets.length === 1) {
|
|
438
|
+
this.createAndAddChildCase(caseRefField.allowedNets[0], clickedNode, ret);
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
this._processService.getNets(caseRefField.allowedNets).subscribe(function (nets) {
|
|
442
|
+
var sideMeuRef = _this._sideMenuService.open(_this._optionSelectorComponent, SideMenuSize.MEDIUM, {
|
|
443
|
+
title: clickedNode.case.title,
|
|
444
|
+
options: nets.map(function (net) { return ({ text: net.title, value: net.identifier }); })
|
|
445
|
+
});
|
|
446
|
+
var sideMenuSubscription;
|
|
447
|
+
sideMenuSubscription = sideMeuRef.onClose.subscribe(function (event) {
|
|
448
|
+
if (!!event.data) {
|
|
449
|
+
_this.createAndAddChildCase(event.data.value, clickedNode, ret);
|
|
450
|
+
sideMenuSubscription.unsubscribe();
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
clickedNode.addingNode.off();
|
|
454
|
+
ret.next(false);
|
|
455
|
+
ret.complete();
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return ret.asObservable();
|
|
461
|
+
};
|
|
462
|
+
/**
|
|
463
|
+
* Creates a new case and adds it to the children of the specified node
|
|
464
|
+
* @param processIdentifier identifier of the process that should be created
|
|
465
|
+
* @param clickedNode the node that is the parent of the new case
|
|
466
|
+
* @param operationResult the result of the operation will be emitted into this stream when the operation completes
|
|
467
|
+
*/
|
|
468
|
+
CaseTreeService.prototype.createAndAddChildCase = function (processIdentifier, clickedNode, operationResult) {
|
|
469
|
+
var _this = this;
|
|
470
|
+
this._processService.getNet(processIdentifier).subscribe(function (net) {
|
|
471
|
+
var childTitleImmediate = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILD_NODE_TITLE);
|
|
472
|
+
var childTitle = _this._translateService.instant('caseTree.newNodeDefaultName');
|
|
473
|
+
if (!!childTitleImmediate) {
|
|
474
|
+
childTitle = childTitleImmediate.value;
|
|
475
|
+
}
|
|
476
|
+
else if (!!net.defaultCaseName) {
|
|
477
|
+
childTitle = net.defaultCaseName;
|
|
478
|
+
}
|
|
479
|
+
_this._caseResourceService.createCase({
|
|
480
|
+
title: childTitle,
|
|
481
|
+
netId: net.stringId
|
|
482
|
+
}).subscribe(function (outcomeResource) {
|
|
483
|
+
var caseRefField = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
484
|
+
var setCaseRefValue = __spread(caseRefField.value, [outcomeResource.outcome.aCase.stringId]);
|
|
485
|
+
_this.performCaseRefCall(clickedNode.case.stringId, setCaseRefValue).subscribe(function (valueChange) { return _this.updateTreeAfterChildAdd(clickedNode, valueChange ? valueChange : setCaseRefValue, operationResult); });
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
};
|
|
489
|
+
/**
|
|
490
|
+
* Updates the tree after adding a new child
|
|
491
|
+
* @param clickedNode the parent node
|
|
492
|
+
* @param newCaseRefValue the new value of the parent node's case ref
|
|
493
|
+
* @param operationResult the result of the operation will be emitted into this stream when the operation completes
|
|
494
|
+
*/
|
|
495
|
+
CaseTreeService.prototype.updateTreeAfterChildAdd = function (clickedNode, newCaseRefValue, operationResult) {
|
|
496
|
+
var _this = this;
|
|
497
|
+
this.updateNodeChildrenFromChangedFields(clickedNode, newCaseRefValue).subscribe(function (result) {
|
|
498
|
+
clickedNode.addingNode.off();
|
|
499
|
+
_this.expandNode(clickedNode).subscribe(function (expandSuccess) {
|
|
500
|
+
if (expandSuccess) {
|
|
501
|
+
_this.changeActiveNode(clickedNode.children[clickedNode.children.length - 1]);
|
|
502
|
+
result.executeAfterActions();
|
|
503
|
+
}
|
|
504
|
+
operationResult.next(true);
|
|
505
|
+
operationResult.complete();
|
|
506
|
+
});
|
|
507
|
+
});
|
|
508
|
+
};
|
|
509
|
+
/**
|
|
510
|
+
* removes the provided non-root node if the underlying case allows it.
|
|
511
|
+
*
|
|
512
|
+
* The underlying case is removed from the case ref of it's parent element with the help from the `remove`
|
|
513
|
+
* operation provided by case ref itself.
|
|
514
|
+
* @param node the node that should be removed from the tree
|
|
515
|
+
*/
|
|
516
|
+
CaseTreeService.prototype.removeNode = function (node) {
|
|
517
|
+
var _this = this;
|
|
518
|
+
if (!node.parent) {
|
|
519
|
+
this._logger.error('Case tree doesn\'t support removal of the root node, as it has no parent case ref.');
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
node.removingNode.on();
|
|
523
|
+
var caseRefImmediate = getImmediateData(node.parent.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
524
|
+
var setCaseRefValue = caseRefImmediate.value.filter(function (id) { return id !== node.case.stringId; });
|
|
525
|
+
this.performCaseRefCall(node.parent.case.stringId, setCaseRefValue).subscribe(function (caseRefChange) {
|
|
526
|
+
var newCaseRefValue = caseRefChange ? caseRefChange : setCaseRefValue;
|
|
527
|
+
_this.deleteRemovedNodes(node.parent, newCaseRefValue);
|
|
528
|
+
_this.updateNodeChildrenFromChangedFields(node.parent, newCaseRefValue);
|
|
529
|
+
node.removingNode.off();
|
|
530
|
+
});
|
|
531
|
+
this.deselectNodeIfDescendantOf(node);
|
|
532
|
+
};
|
|
533
|
+
/**
|
|
534
|
+
* Expands all nodes in the tree dictated by the argument.
|
|
535
|
+
*
|
|
536
|
+
* @param path nodes that should be expanded along with their path from the root node
|
|
537
|
+
*/
|
|
538
|
+
CaseTreeService.prototype.expandPath = function (path) {
|
|
539
|
+
if (this.dataSource.data.length === 0) {
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
var rootNode = this.dataSource.data[0];
|
|
543
|
+
while (rootNode.parent !== undefined) {
|
|
544
|
+
rootNode = rootNode.parent;
|
|
545
|
+
}
|
|
546
|
+
this.expandLevel([rootNode], this.convertPathToExpansionTree(path));
|
|
547
|
+
};
|
|
548
|
+
/**
|
|
549
|
+
* Transforms a {@Link CaseTreePath} object into an {@link ExpansionTree} object.
|
|
550
|
+
* The result has all the common paths merged into single branches of the resulting tree structure.
|
|
551
|
+
*
|
|
552
|
+
* @param paths nodes that should be expanded along with their path from the root node
|
|
553
|
+
* @returns an {@link ExpansionTree} equivalent to the provided {@link CaseTreePath}
|
|
554
|
+
*/
|
|
555
|
+
CaseTreeService.prototype.convertPathToExpansionTree = function (paths) {
|
|
556
|
+
var result = {};
|
|
557
|
+
Object.values(paths).forEach(function (path) {
|
|
558
|
+
var currentNode = result;
|
|
559
|
+
path.forEach(function (nodeId) {
|
|
560
|
+
if (currentNode[nodeId] === undefined) {
|
|
561
|
+
currentNode[nodeId] = {};
|
|
562
|
+
}
|
|
563
|
+
currentNode = currentNode[nodeId];
|
|
564
|
+
});
|
|
565
|
+
});
|
|
566
|
+
return result;
|
|
567
|
+
};
|
|
568
|
+
/**
|
|
569
|
+
* Recursively expands all nodes from the provided array of nodes, that appear in the top level of the {@link ExpansionTree} object.
|
|
570
|
+
*
|
|
571
|
+
* @param levelNodes nodes from which the expansion should start
|
|
572
|
+
* @param targets a tree structure representing the nodes that are to be expanded recursively.
|
|
573
|
+
* The top level nodes are expanded first, from the provided `levelNodes`.
|
|
574
|
+
*/
|
|
575
|
+
CaseTreeService.prototype.expandLevel = function (levelNodes, targets) {
|
|
576
|
+
var _this = this;
|
|
577
|
+
var desiredIds = new Set(Object.keys(targets));
|
|
578
|
+
if (desiredIds.size === 0) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
levelNodes.forEach(function (n) {
|
|
582
|
+
var node = n;
|
|
583
|
+
if (!desiredIds.has(node.case.stringId)) {
|
|
584
|
+
return; // continue
|
|
585
|
+
}
|
|
586
|
+
_this.expandNode(node).subscribe(function (success) {
|
|
587
|
+
if (!success) {
|
|
588
|
+
_this._logger.debug('Could not expand tree node with ID: ' + node.case.stringId);
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
_this.expandLevel(node.children, targets[node.case.stringId]);
|
|
592
|
+
});
|
|
593
|
+
});
|
|
594
|
+
};
|
|
595
|
+
/**
|
|
596
|
+
* Deletes the subtrees rooted at the nodes that are present in the parent node's child case ref values,
|
|
597
|
+
* but are no longer present in the new value
|
|
598
|
+
* @param parentNode an inner node of the tree that had some of it's children removed
|
|
599
|
+
* @param newCaseRefValue the new value of the parent node's case ref
|
|
600
|
+
*/
|
|
601
|
+
CaseTreeService.prototype.deleteRemovedNodes = function (parentNode, newCaseRefValue) {
|
|
602
|
+
var _this = this;
|
|
603
|
+
var removedChildren = new Set();
|
|
604
|
+
getImmediateData(parentNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF).value.forEach(function (id) { return removedChildren.add(id); });
|
|
605
|
+
newCaseRefValue.forEach(function (id) { return removedChildren.delete(id); });
|
|
606
|
+
removedChildren.forEach(function (removedId) { return _this._caseResourceService.deleteCase(removedId, true)
|
|
607
|
+
.subscribe(function (responseMessage) {
|
|
608
|
+
if (responseMessage.error) {
|
|
609
|
+
_this._logger.error('Removal of child case unsuccessful', responseMessage.error);
|
|
610
|
+
}
|
|
611
|
+
}); });
|
|
612
|
+
};
|
|
613
|
+
/**
|
|
614
|
+
* Deselects the currently selected node if it is a descendant of the provided node
|
|
615
|
+
* @param node the node who's descendants should be deselected
|
|
616
|
+
*/
|
|
617
|
+
CaseTreeService.prototype.deselectNodeIfDescendantOf = function (node) {
|
|
618
|
+
var bubblingNode = this.currentNode;
|
|
619
|
+
while (bubblingNode && bubblingNode !== this._rootNode) {
|
|
620
|
+
if (bubblingNode === node) {
|
|
621
|
+
this.changeActiveNode(undefined);
|
|
622
|
+
break;
|
|
623
|
+
}
|
|
624
|
+
bubblingNode = bubblingNode.parent;
|
|
625
|
+
}
|
|
626
|
+
};
|
|
627
|
+
/**
|
|
628
|
+
* Performs a backend call on the given case, and sets the value of the case ref field in the transition defined by
|
|
629
|
+
* [CASE_REF_TRANSITION]{@link TreePetriflowIdentifiers#CASE_REF_TRANSITION}.
|
|
630
|
+
* @param caseId string ID of the case that should have it's tree case ref set
|
|
631
|
+
* @param newCaseRefValue the new value of the case ref field
|
|
632
|
+
*/
|
|
633
|
+
CaseTreeService.prototype.performCaseRefCall = function (caseId, newCaseRefValue) {
|
|
634
|
+
var _this = this;
|
|
635
|
+
var result$ = new ReplaySubject(1);
|
|
636
|
+
this._taskResourceService.getTasks(SimpleFilter.fromTaskQuery({
|
|
637
|
+
case: { id: caseId },
|
|
638
|
+
transitionId: TreePetriflowIdentifiers.CASE_REF_TRANSITION
|
|
639
|
+
})).subscribe(function (page) {
|
|
640
|
+
if (!hasContent(page)) {
|
|
641
|
+
_this._logger.error('Case ref accessor task doesn\'t exist!');
|
|
642
|
+
result$.complete();
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
var task = page.content[0];
|
|
646
|
+
_this._taskResourceService.assignTask(task.stringId).subscribe(function (assignResponse) {
|
|
647
|
+
if (!assignResponse.success) {
|
|
648
|
+
_this._logger.error('Case ref accessor task could not be assigned', assignResponse.error);
|
|
649
|
+
}
|
|
650
|
+
var body = {};
|
|
651
|
+
body[TreePetriflowIdentifiers.CHILDREN_CASE_REF] = {
|
|
652
|
+
type: 'caseRef',
|
|
653
|
+
value: newCaseRefValue
|
|
654
|
+
};
|
|
655
|
+
_this._taskResourceService.setData(task.stringId, body).subscribe(function (outcomeResource) {
|
|
656
|
+
var changedFields = outcomeResource.outcome.changedFields.changedFields;
|
|
657
|
+
var caseRefChanges = changedFields[TreePetriflowIdentifiers.CHILDREN_CASE_REF];
|
|
658
|
+
result$.next(caseRefChanges ? caseRefChanges.value : undefined);
|
|
659
|
+
result$.complete();
|
|
660
|
+
_this._taskResourceService.finishTask(task.stringId).subscribe(function (finishResponse) {
|
|
661
|
+
if (finishResponse.success) {
|
|
662
|
+
_this._logger.debug('Case ref accessor task finished', finishResponse.success);
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
_this._logger.error('Case ref accessor task finish failed', finishResponse.error);
|
|
666
|
+
}
|
|
667
|
+
});
|
|
668
|
+
}, function (error) {
|
|
669
|
+
_this._logger.error('Could not set data to tree case ref', error);
|
|
670
|
+
result$.complete();
|
|
671
|
+
});
|
|
672
|
+
}, function (error) {
|
|
673
|
+
_this._logger.error('Case ref accessor task could not be assigned', error);
|
|
674
|
+
result$.complete();
|
|
675
|
+
});
|
|
676
|
+
}, function (error) {
|
|
677
|
+
_this._logger.error('Case ref accessor task could not be found', error);
|
|
678
|
+
result$.complete();
|
|
679
|
+
});
|
|
680
|
+
return result$.asObservable();
|
|
681
|
+
};
|
|
682
|
+
/**
|
|
683
|
+
* Performs an update after adding or removing a node from the tree.
|
|
684
|
+
*
|
|
685
|
+
* If only one node was added adds it into the tree
|
|
686
|
+
*
|
|
687
|
+
* If only one node was removed removes it from the tree
|
|
688
|
+
*
|
|
689
|
+
* Otherwise collapses the affected node and marks it's children as dirty
|
|
690
|
+
*
|
|
691
|
+
* @param affectedNode node that had it's children changed
|
|
692
|
+
* @param newCaseRefValue new value of the caseRef field returned by backend
|
|
693
|
+
* @returns an `Observable` that emits an object with the [result]{@link ResultWithAfterActions#result} attribute set to `true` if
|
|
694
|
+
* the update completes successfully and `false` otherwise.
|
|
695
|
+
*/
|
|
696
|
+
CaseTreeService.prototype.updateNodeChildrenFromChangedFields = function (affectedNode, newCaseRefValue) {
|
|
697
|
+
var caseRefField = getImmediateData(affectedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
698
|
+
var newChildren = new Set();
|
|
699
|
+
newCaseRefValue.forEach(function (id) { return newChildren.add(id); });
|
|
700
|
+
var numberOfMissingChildren = 0;
|
|
701
|
+
for (var i = 0; i < caseRefField.value.length && numberOfMissingChildren < 2; i++) {
|
|
702
|
+
if (!newChildren.has(caseRefField.value[i])) {
|
|
703
|
+
numberOfMissingChildren++;
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
var exactlyOneChildAdded = caseRefField.value.length + 1 === newCaseRefValue.length
|
|
707
|
+
&& caseRefField.value.every(function (it) { return newChildren.has(it); });
|
|
708
|
+
var exactlyOneChildRemoved = caseRefField.value.length - 1 === newCaseRefValue.length
|
|
709
|
+
&& numberOfMissingChildren === 1;
|
|
710
|
+
if (!exactlyOneChildAdded && !exactlyOneChildRemoved) {
|
|
711
|
+
caseRefField.value = newCaseRefValue;
|
|
712
|
+
this._treeControl.collapseDescendants(affectedNode);
|
|
713
|
+
affectedNode.dirtyChildren = true;
|
|
714
|
+
return of(new ResultWithAfterActions(true));
|
|
715
|
+
}
|
|
716
|
+
if (exactlyOneChildAdded) {
|
|
717
|
+
return this.processChildNodeAdd(affectedNode, caseRefField, newCaseRefValue);
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
return this.processChildNodeRemove(affectedNode, caseRefField, newChildren);
|
|
721
|
+
}
|
|
722
|
+
};
|
|
723
|
+
/**
|
|
724
|
+
* Adds a new child node to the `affectedNode` by adding the last Case from the `newCaseRefValue`
|
|
725
|
+
* @param affectedNode the node in the tree that had a child added - the parent node
|
|
726
|
+
* @param caseRefField the case ref field of the affected node
|
|
727
|
+
* @param newCaseRefValue the new value of the case ref field in the node
|
|
728
|
+
* @returns an `Observable` that emits `true` if a node was successfully added, `false` otherwise.
|
|
729
|
+
*/
|
|
730
|
+
CaseTreeService.prototype.processChildNodeAdd = function (affectedNode, caseRefField, newCaseRefValue) {
|
|
731
|
+
var _this = this;
|
|
732
|
+
var result$ = new ReplaySubject(1);
|
|
733
|
+
caseRefField.value = newCaseRefValue;
|
|
734
|
+
this._caseResourceService.getOneCase(newCaseRefValue[newCaseRefValue.length - 1]).subscribe(function (childCase) {
|
|
735
|
+
if (childCase) {
|
|
736
|
+
_this._logger.debug('Pushing child node to tree', { childCase: childCase, affectedNode: affectedNode.toLoggableForm() });
|
|
737
|
+
var childNode_1 = _this.pushChildToTree(affectedNode, childCase);
|
|
738
|
+
result$.next(new ResultWithAfterActions(true, [function () {
|
|
739
|
+
if (_this._isEagerLoaded) {
|
|
740
|
+
_this._logger.debug('Eagerly expanding a newly added node.', childNode_1.toLoggableForm());
|
|
741
|
+
_this.expandNode(childNode_1);
|
|
742
|
+
}
|
|
743
|
+
}]));
|
|
744
|
+
}
|
|
745
|
+
else {
|
|
746
|
+
_this._logger.error('New child case was not found, illegal state', childCase);
|
|
747
|
+
result$.next(new ResultWithAfterActions(false));
|
|
748
|
+
}
|
|
749
|
+
result$.complete();
|
|
750
|
+
}, function (error) {
|
|
751
|
+
_this._logger.error('New child node case could not be found', error);
|
|
752
|
+
result$.next(new ResultWithAfterActions(false));
|
|
753
|
+
result$.complete();
|
|
754
|
+
});
|
|
755
|
+
return result$.asObservable();
|
|
756
|
+
};
|
|
757
|
+
/**
|
|
758
|
+
* Adds a new child node to the target parent node.
|
|
759
|
+
* @param parentNode the nodes whose child should be added
|
|
760
|
+
* @param childCase the child case
|
|
761
|
+
* @returns the newly added node
|
|
762
|
+
*/
|
|
763
|
+
CaseTreeService.prototype.pushChildToTree = function (parentNode, childCase) {
|
|
764
|
+
var childNode = new CaseTreeNode(childCase, parentNode);
|
|
765
|
+
parentNode.children.push(childNode);
|
|
766
|
+
this.refreshTree();
|
|
767
|
+
return childNode;
|
|
768
|
+
};
|
|
769
|
+
/**
|
|
770
|
+
* Removes the deleted node from the children of the `affectedNode`
|
|
771
|
+
* @param affectedNode the node in the tree that had it's child removed
|
|
772
|
+
* @param caseRefField the case ref field of the affected node
|
|
773
|
+
* @param newCaseRefValues the new value of the case ref field in the node
|
|
774
|
+
* @returns an `Observable` that emits `true` when the remove operation completes.
|
|
775
|
+
*/
|
|
776
|
+
CaseTreeService.prototype.processChildNodeRemove = function (affectedNode, caseRefField, newCaseRefValues) {
|
|
777
|
+
var index = caseRefField.value.findIndex(function (it) { return !newCaseRefValues.has(it); });
|
|
778
|
+
caseRefField.value.splice(index, 1);
|
|
779
|
+
affectedNode.children.splice(index, 1);
|
|
780
|
+
this.refreshTree();
|
|
781
|
+
return of(new ResultWithAfterActions(true));
|
|
782
|
+
};
|
|
783
|
+
/**
|
|
784
|
+
* @ignore
|
|
785
|
+
* Forces a rerender of the tree content
|
|
786
|
+
*/
|
|
787
|
+
CaseTreeService.prototype.refreshTree = function () {
|
|
788
|
+
refreshTree(this._treeDataSource);
|
|
789
|
+
};
|
|
790
|
+
/**
|
|
791
|
+
* Reloads the currently selected case node. The {@link Case} object held in the {@link CaseTreeNode} instance is not replaced,
|
|
792
|
+
* but the new Case is `Object.assign`-ed into it. This means that the reference to the Case instance is unchanged but references
|
|
793
|
+
* to all it's non-primitive attributes are changed.
|
|
794
|
+
*
|
|
795
|
+
* If a reload of the current node is initiated before the previous one completed, the new one is ignored.
|
|
796
|
+
*
|
|
797
|
+
* If the currently selected case changed before a response from backend was received the response is ignored.
|
|
798
|
+
*
|
|
799
|
+
* Note that the parent node, nor the child nodes are reloaded.
|
|
800
|
+
*/
|
|
801
|
+
CaseTreeService.prototype.reloadCurrentCase = function () {
|
|
802
|
+
var _this = this;
|
|
803
|
+
if (!this._currentNode) {
|
|
804
|
+
this._logger.debug('No Tree Case Node selected, nothing to reload');
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
if (this._reloadedCaseId && this._currentNode.case.stringId !== this._reloadedCaseId) {
|
|
808
|
+
this._logger.debug('Reload of the current case already in progress');
|
|
809
|
+
return;
|
|
810
|
+
}
|
|
811
|
+
this._reloadedCaseId = this._currentNode.case.stringId;
|
|
812
|
+
this._caseResourceService.getOneCase(this._currentCase.stringId).subscribe(function (reloadedCurrentCase) {
|
|
813
|
+
if (!reloadedCurrentCase) {
|
|
814
|
+
_this._logger.error('Current Case Tree Node could not be reloaded. Invalid server response', reloadedCurrentCase);
|
|
815
|
+
return;
|
|
816
|
+
}
|
|
817
|
+
if (_this._currentNode && reloadedCurrentCase.stringId === _this._currentNode.case.stringId) {
|
|
818
|
+
_this._reloadedCaseId = undefined;
|
|
819
|
+
var change = _this.determineCaseUpdate(_this._currentCase, reloadedCurrentCase);
|
|
820
|
+
Object.assign(_this._currentCase, reloadedCurrentCase);
|
|
821
|
+
_this._treeCaseViewService.loadTask$.next(_this._currentCase);
|
|
822
|
+
if (change.visibleTreePropertiesChanged) {
|
|
823
|
+
_this.refreshTree();
|
|
824
|
+
}
|
|
825
|
+
if (change.childrenChanged) {
|
|
826
|
+
_this._currentNode.dirtyChildren = true;
|
|
827
|
+
_this.expandNode(_this._currentNode);
|
|
828
|
+
}
|
|
829
|
+
_this._logger.debug('Current Case Tree Node reloaded');
|
|
830
|
+
}
|
|
831
|
+
else {
|
|
832
|
+
_this._logger.debug('Discarding case reload response, since the current node has changed before its case was received');
|
|
833
|
+
}
|
|
834
|
+
}, function (error) {
|
|
835
|
+
_this._logger.error('Current Case Tree Node reload request failed', error);
|
|
836
|
+
});
|
|
837
|
+
};
|
|
838
|
+
/**
|
|
839
|
+
* Determines if anny of the case attributes that are visible on the tree changed.
|
|
840
|
+
* @param oldCase the previous version of the Case object, that is currently displayed on the tree
|
|
841
|
+
* @param newCase the new version of the Case object, that should replace the old one
|
|
842
|
+
*/
|
|
843
|
+
CaseTreeService.prototype.determineCaseUpdate = function (oldCase, newCase) {
|
|
844
|
+
var visibleAttributes = [
|
|
845
|
+
TreePetriflowIdentifiers.CAN_ADD_CHILDREN,
|
|
846
|
+
TreePetriflowIdentifiers.CAN_REMOVE_NODE,
|
|
847
|
+
TreePetriflowIdentifiers.BEFORE_TEXT_ICON,
|
|
848
|
+
TreePetriflowIdentifiers.TREE_ADD_ICON
|
|
849
|
+
];
|
|
850
|
+
var result = {
|
|
851
|
+
visibleTreePropertiesChanged: true,
|
|
852
|
+
childrenChanged: false
|
|
853
|
+
};
|
|
854
|
+
var oldChildCaseRef = getImmediateData(oldCase, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
|
|
855
|
+
if (oldChildCaseRef !== undefined) {
|
|
856
|
+
var oldChildren = new Set(oldChildCaseRef.value);
|
|
857
|
+
var newChildren_1 = new Set(getImmediateData(newCase, TreePetriflowIdentifiers.CHILDREN_CASE_REF).value);
|
|
858
|
+
result.childrenChanged = oldChildren.size !== newChildren_1.size;
|
|
859
|
+
if (!result.childrenChanged) {
|
|
860
|
+
result.childrenChanged = Array.from(oldChildren).some(function (childId) { return !newChildren_1.has(childId); });
|
|
861
|
+
}
|
|
862
|
+
// short-circuit
|
|
863
|
+
if (result.childrenChanged) {
|
|
864
|
+
return result;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
result.visibleTreePropertiesChanged = visibleAttributes.some(function (attribute) {
|
|
868
|
+
return getImmediateData(oldCase, attribute)
|
|
869
|
+
&& getImmediateData(oldCase, attribute).value !== getImmediateData(newCase, attribute).value;
|
|
870
|
+
});
|
|
871
|
+
return result;
|
|
872
|
+
};
|
|
873
|
+
CaseTreeService.ctorParameters = function () { return [
|
|
874
|
+
{ type: CaseResourceService },
|
|
875
|
+
{ type: TreeCaseViewService },
|
|
876
|
+
{ type: TaskResourceService },
|
|
877
|
+
{ type: LoggerService },
|
|
878
|
+
{ type: ProcessService },
|
|
879
|
+
{ type: SideMenuService },
|
|
880
|
+
{ type: TranslateService },
|
|
881
|
+
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_OPTION_SELECTOR_COMPONENT,] }] }
|
|
882
|
+
]; };
|
|
883
|
+
CaseTreeService.decorators = [
|
|
884
|
+
{ type: Injectable }
|
|
885
|
+
];
|
|
886
|
+
CaseTreeService.ctorParameters = function () { return [
|
|
887
|
+
{ type: CaseResourceService },
|
|
888
|
+
{ type: TreeCaseViewService },
|
|
889
|
+
{ type: TaskResourceService },
|
|
890
|
+
{ type: LoggerService },
|
|
891
|
+
{ type: ProcessService },
|
|
892
|
+
{ type: SideMenuService },
|
|
893
|
+
{ type: TranslateService },
|
|
894
|
+
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_OPTION_SELECTOR_COMPONENT,] }] }
|
|
895
|
+
]; };
|
|
896
|
+
return CaseTreeService;
|
|
897
|
+
}());
|
|
898
|
+
export { CaseTreeService };
|
|
899
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmVlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdmlldy90cmVlLWNhc2Utdmlldy90cmVlLWNvbXBvbmVudC9jYXNlLXRyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUM3RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDN0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBR3RFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDOUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBeUIsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhHLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxF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QUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckcsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztnQkEzMUIyQyxtQkFBbUI7Z0JBQ25CLG1CQUFtQjtnQkFDbkIsbUJBQW1CO2dCQUNoQyxhQUFhO2dCQUNMLGNBQWM7Z0JBQ2IsZUFBZTtnQkFDZCxnQkFBZ0I7Z0RBQzVDLFFBQVEsWUFBSSxNQUFNLFNBQUMsNkJBQTZCOzs7Z0JBOUJoRSxVQUFVOzs7Z0JBN0NILG1CQUFtQjtnQkFFbkIsbUJBQW1CO2dCQUNuQixtQkFBbUI7Z0JBQ25CLGFBQWE7Z0JBR2IsY0FBYztnQkFDZCxlQUFlO2dCQU1mLGdCQUFnQjtnREE2RFAsUUFBUSxZQUFJLE1BQU0sU0FBQyw2QkFBNkI7O0lBcTFCakUsc0JBQUM7Q0FBQSxBQW4zQkQsSUFtM0JDO1NBbDNCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmVlTm9kZX0gZnJvbSAnLi9tb2RlbC9jYXNlLXRyZWUtbm9kZSc7XG5pbXBvcnQge1RyZWVDYXNlVmlld1NlcnZpY2V9IGZyb20gJy4uL3RyZWUtY2FzZS12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0ltbWVkaWF0ZURhdGF9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvaW1tZWRpYXRlLWRhdGEnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtQcm9jZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vcHJvY2Vzcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHtTaWRlTWVudVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NpZGUtbWVudS9zZXJ2aWNlcy9zaWRlLW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1NpZGVNZW51U2l6ZX0gZnJvbSAnLi4vLi4vLi4vc2lkZS1tZW51L21vZGVscy9zaWRlLW1lbnUtc2l6ZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7VHJlZVBldHJpZmxvd0lkZW50aWZpZXJzfSBmcm9tICcuLi9tb2RlbC90cmVlLXBldHJpZmxvdy1pZGVudGlmaWVycyc7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7aGFzQ29udGVudH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2UtaGFzLWNvbnRlbnQnO1xuaW1wb3J0IHtOZXN0ZWRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge29mVm9pZH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9vZi12b2lkJztcbmltcG9ydCB7Q2FzZUdldFJlcXVlc3RCb2R5fSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UtZ2V0LXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge2dldEltbWVkaWF0ZURhdGF9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvZ2V0LWltbWVkaWF0ZS1kYXRhJztcbmltcG9ydCB7TkFFX09QVElPTl9TRUxFQ1RPUl9DT01QT05FTlR9IGZyb20gJy4uLy4uLy4uL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7Q2FzZVRyZWVQYXRofSBmcm9tICcuL21vZGVsL2Nhc2UtdHJlZS1wYXRoJztcbmltcG9ydCB7RXhwYW5zaW9uVHJlZX0gZnJvbSAnLi9tb2RlbC9leHBhbnNpb24tdHJlZSc7XG5pbXBvcnQge1Jlc3VsdFdpdGhBZnRlckFjdGlvbnN9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcmVzdWx0LXdpdGgtYWZ0ZXItYWN0aW9ucyc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7U2V0RGF0YUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvZGF0YS1vdXRjb21lcy9zZXQtZGF0YS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7Q3JlYXRlQ2FzZUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvY2FzZS1vdXRjb21lcy9jcmVhdGUtY2FzZS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7cmVmcmVzaFRyZWV9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcmVmcmVzaC10cmVlJztcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCBoZWxwZXIgb2JqZWN0LCB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuIHR3byB2YWx1ZXMgZnJvbSBhIGZ1bmN0aW9uLlxuICovXG5pbnRlcmZhY2UgQ2FzZVVwZGF0ZVJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgYXR0cmlidXRlcyB0aGF0IGFyZSB2aXNpYmxlIG9uIHRoZSB0cmVlIGNoYW5nZWRcbiAgICAgKi9cbiAgICB2aXNpYmxlVHJlZVByb3BlcnRpZXNDaGFuZ2VkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG5vZGVzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlVHJlZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF9jdXJyZW50Tm9kZTogQ2FzZVRyZWVOb2RlO1xuICAgIHByaXZhdGUgX3Jvb3ROb2Rlc0ZpbHRlcjogRmlsdGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVEYXRhU291cmNlOiBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxDYXNlVHJlZU5vZGU+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxDYXNlVHJlZU5vZGU+O1xuICAgIHByaXZhdGUgX3RyZWVSb290TG9hZGVkJDogUmVwbGF5U3ViamVjdDxib29sZWFuPjtcbiAgICBwcml2YXRlIF9yb290Tm9kZTogQ2FzZVRyZWVOb2RlO1xuICAgIHByaXZhdGUgX3Nob3dSb290OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0VhZ2VyTG9hZGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogc3RyaW5nIGlkIG9mIHRoZSBjYXNlLCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyByZWxvYWRlZCwgYHVuZGVmaW5lZGAgaWYgbm8gY2FzZSBpcyBjdXJyZW50bHkgYmVpbmcgcmVsb2FkZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZWxvYWRlZENhc2VJZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJlZUNhc2VWaWV3U2VydmljZTogVHJlZUNhc2VWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9wcm9jZXNzU2VydmljZTogUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zaWRlTWVudVNlcnZpY2U6IFNpZGVNZW51U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfT1BUSU9OX1NFTEVDVE9SX0NPTVBPTkVOVCkgcHJvdGVjdGVkIF9vcHRpb25TZWxlY3RvckNvbXBvbmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuX3RyZWVEYXRhU291cmNlID0gbmV3IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPENhc2VUcmVlTm9kZT4oKTtcbiAgICAgICAgdGhpcy5fdHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8Q2FzZVRyZWVOb2RlPihub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICBfdHJlZUNhc2VWaWV3U2VydmljZS5yZWxvYWRDYXNlJC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWRDdXJyZW50Q2FzZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdHJlZVJvb3RMb2FkZWQkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyZWVSb290TG9hZGVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcm9vdEZpbHRlcihmaWx0ZXI6IEZpbHRlcikge1xuICAgICAgICB0aGlzLl9yb290Tm9kZXNGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW107XG4gICAgICAgIHRoaXMubG9hZFRyZWVSb290KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPENhc2VUcmVlTm9kZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZURhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0cmVlQ29udHJvbCgpOiBOZXN0ZWRUcmVlQ29udHJvbDxDYXNlVHJlZU5vZGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVDb250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudE5vZGUoKTogQ2FzZVRyZWVOb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnROb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGEgdmFsdWUgd2hlbmV2ZXIgYSBuZXcgcm9vdCBub2RlIEZpbHRlciBpcyBzZXQuXG4gICAgICpcbiAgICAgKiBgdHJ1ZWAgaXMgZW1pdHRlZCBpZiB0aGUgcm9vdCBub2RlIHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLiBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE9uIHN1YnNjcmlwdGlvbiBlbWl0cyB0aGUgbGFzdCBlbWl0dGVkIHZhbHVlIChpZiBhbnkpIHRvIHRoZSBzdWJzY3JpYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdHJlZVJvb3RMb2FkZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZVJvb3RMb2FkZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgX2N1cnJlbnRDYXNlKCk6IENhc2UgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vZGUgPyB0aGlzLl9jdXJyZW50Tm9kZS5jYXNlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIGBPYnNlcnZhYmxlYCBvZiB0aGUge0BsaW5rIExvYWRpbmdFbWl0dGVyfSByZXByZXNlbnRpbmcgdGhlIGxvYWRpbmcgc3RhdGUgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSB0cmVlIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgICpcbiAgICAgKiBXYWl0IGZvciBhbiBlbWlzc2lvbiBvbiB0aGUgW3RyZWVSb290TG9hZGVkJF17QGxpbmsgQ2FzZVRyZWVTZXJ2aWNlI3RyZWVSb290TG9hZGVkJH0gc3RyZWFtIGJlZm9yZSBnZXR0aW5nIHRoaXMgT2JzZXJ2YWJsZS5cbiAgICAgKlxuICAgICAqIFRoZSBmaXJzdCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBPYnNlcnZhYmxlIGlzIGBmYWxzZWAsIHdoZW4gdGhlIHRyZWUgZmluaXNoZXMgaW5pdGlhbGl6aW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm9vdE5vZGVMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcm9vdE5vZGUgPyB0aGlzLl9yb290Tm9kZS5sb2FkaW5nQ2hpbGRyZW4uYXNPYnNlcnZhYmxlKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIG9mIHRoZSB7QGxpbmsgTG9hZGluZ0VtaXR0ZXJ9IHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSByb290IG5vZGUgaXMgY3VycmVudGx5XG4gICAgICogaW4gdGhlIHByb2Nlc3Mgb2YgYWRkaW5nIGEgbmV3IGNoaWxkIG5vZGUgb3Igbm90LlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHRyZWUgaGFzIG5vdCB5ZXQgYmVlbiBpbml0aWFsaXplZC5cbiAgICAgKlxuICAgICAqIFdhaXQgZm9yIGFuIGVtaXNzaW9uIG9uIHRoZSBbdHJlZVJvb3RMb2FkZWQkXXtAbGluayBDYXNlVHJlZVNlcnZpY2UjdHJlZVJvb3RMb2FkZWQkfSBzdHJlYW0gYmVmb3JlIGdldHRpbmcgdGhpcyBPYnNlcnZhYmxlLlxuICAgICAqXG4gICAgICogVGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIE9ic2VydmFibGUgaXMgYGZhbHNlYCwgd2hlbiB0aGUgdHJlZSBmaW5pc2hlcyBpbml0aWFsaXppbmcuXG4gICAgICovXG4gICAgcHVibGljIGdldCByb290Tm9kZUFkZGluZ0NoaWxkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcm9vdE5vZGUgPyB0aGlzLl9yb290Tm9kZS5hZGRpbmdOb2RlLmFzT2JzZXJ2YWJsZSgpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRWFnZXJMb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VhZ2VyTG9hZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlYWdlciB0aGUgbmV3IHNldHRpbmcgZm9yIGVhZ2VyIGxvYWRpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlzRWFnZXJMb2FkZWQoZWFnZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNFYWdlckxvYWRlZCA9IGVhZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGFuZCBwb3B1bGF0ZXMgdGhlIHRvcG1vc3QgbGV2ZWwgb2YgdGhlIHRyZWUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheWVkIGNhc2VzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoaXMgb2JqZWN0J3MgW3Jvb3RGaWx0ZXJde0BsaW5rIENhc2VUcmVlU2VydmljZSNyb290RmlsdGVyfS5cbiAgICAgKlxuICAgICAqIENhc2VzIGFyZSBsb2FkZWQgb25lIHBhZ2UgYXQgYSB0aW1lIGFuZCB0aGUgdHJlZSBpcyByZWZyZXNoZWQgYWZ0ZXIgZWFjaCBwYWdlLlxuICAgICAqIFtmaW5pc2hlZExvYWRpbmdGaXJzdExldmVsJF17QGxpbmsgQ2FzZVRyZWVTZXJ2aWNlI3RyZWVSb290TG9hZGVkJH1cbiAgICAgKiB3aWxsIGVtaXQgYHRydWVgIG9uY2UgdGhlIGxhc3QgcGFnZSBsb2FkcyBzdWNjZXNzZnVsbHkuXG4gICAgICogYGZhbHNlYCB3aWxsIGJlIGVtaXR0ZWQgaWYgYW55IG9mIHRoZSByZXF1ZXN0cyBmYWlsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsb2FkVHJlZVJvb3QoKSB7XG4gICAgICAgIGlmICh0aGlzLl9yb290Tm9kZXNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2Uuc2VhcmNoQ2FzZXModGhpcy5fcm9vdE5vZGVzRmlsdGVyKS5zdWJzY3JpYmUocGFnZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NvbnRlbnQocGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdE5vZGUgPSBuZXcgQ2FzZVRyZWVOb2RlKHBhZ2UuY29udGVudFswXSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2UuY29udGVudC5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGaWx0ZXIgZm9yIHRyZWUgcm9vdCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGNhc2UuIFVzaW5nIHRoZSBmaXJzdCB2YWx1ZSBhcyB0cmVlIHJvb3QuLi4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmVlUm9vdExvYWRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RyZWUgcm9vdCBjYW5ub3QgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIHByb3ZpZGVkIGZpbHRlcicsIHBhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1Jvb3Qgbm9kZSBvZiB0aGUgY2FzZSB0cmVlIGNvdWxkIG5vdCBiZSBsb2FkZWQnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZVJvb3RMb2FkZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBsb2FkZWQgdHJlZSByb290IHRvIHRoZSBkaXNwbGF5IGJhc2VkIG9uIHRoZSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSBzaG93Um9vdCB3aGV0aGVyIHRoZSByb290IG9mIHRoZSB0cmVlIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRyZWUgb3Igbm90LlxuICAgICAqIElmIHRoZSByb290IGlzIG5vdCBkaXNwbGF5ZWQgaXQncyBjaGlsZHJlbiB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgZmlyc3QgbGV2ZWwuXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gdGhlIHRyZWUgZmluaXNoZXMgaW5pdGlhbGl6YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxpemVUcmVlKHNob3dSb290OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5fcm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignU2V0IGEgRmlsdGVyIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlIGNhc2UgdHJlZScpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdTZXQgYSBGaWx0ZXIgYmVmb3JlIGluaXRpYWxpemluZyB0aGUgY2FzZSB0cmVlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd1Jvb3QgPSBzaG93Um9vdDtcblxuICAgICAgICBpZiAoc2hvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW3RoaXMuX3Jvb3ROb2RlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5fcm9vdE5vZGUuY2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0OiBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgICAgICBpZiAoIXNob3dSb290IHx8IHRoaXMuX2lzRWFnZXJMb2FkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICAgICAgICAgICAgcmV0ID0gcmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmROb2RlKHRoaXMuX3Jvb3ROb2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgICAgICByZXN1bHQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgICAgICByZXQgPSBvZlZvaWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIHRoZSBwYXJlbnQgVHJlZUNhc2VWaWV3IHRoYXQgYSBjYXNlIHdhcyBjbGlja2VkIGluIHRoZSB0cmVlIGFuZCBpdCdzIFRhc2sgc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGFuZ2VBY3RpdmVOb2RlKG5vZGU6IENhc2VUcmVlTm9kZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMuX3RyZWVDYXNlVmlld1NlcnZpY2UubG9hZFRhc2skLm5leHQobm9kZSA/IG5vZGUuY2FzZSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZXhwYW5zaW9uIHN0YXRlIG9mIGEgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIHRoZSB7QGxpbmsgQ2FzZVRyZWVOb2RlfSB3aG8ncyBjb250ZW50IHNob3VsZCBiZSB0b2dnbGVkXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU5vZGUobm9kZTogQ2FzZVRyZWVOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl90cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlQ29udHJvbC5jb2xsYXBzZShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHRhcmdldCBub2RlIGluIHRoZSB0cmVlIGFuZCByZWxvYWRzIGl0J3MgY2hpbGRyZW4gaWYgdGhleSBhcmUgbWFya2VkIGFzIGRpcnR5XG4gICAgICogQHBhcmFtIG5vZGUgdGhlIHtAbGluayBDYXNlVHJlZU5vZGV9IHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkXG4gICAgICogQHJldHVybnMgZW1pdHMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGV4cGFuZGVkIGFuZCBgZmFsc2VgIGlmIG5vdC4gSWYgdGhlIGV4cGFuc2lvbiBjYXVzZXMgbW9yZSBub2RlIGV4cGFuc2lvbnNcbiAgICAgKiAoZS5nLiBlYWdlciBsb2FkZWQgdHJlZSkgdGhlbiwgdGhlIE9ic2VydmFibGUgZW1pdHMgYWZ0ZXIgYWxsIHRoZSBzdWJ0cmVlIGV4cGFuc2lvbnMgY29tcGxldGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGV4cGFuZE5vZGUobm9kZTogQ2FzZVRyZWVOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnUmVxdWVzdGluZyBleHBhbnNpb24gb2YgdHJlZSBub2RlJywgbm9kZS50b0xvZ2dhYmxlRm9ybSgpKTtcblxuICAgICAgICBpZiAobm9kZS5sb2FkaW5nQ2hpbGRyZW4uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnTm9kZSByZXF1ZXN0ZWQgZm9yIGV4cGFuc2lvbiBpcyBsb2FkaW5nLiBFeHBhbnNpb24gY2FuY2VsZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLmRpcnR5Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnTm9kZSByZXF1ZXN0ZWQgZm9yIGV4cGFuc2lvbiBoYXMgY2xlYW4gY2hpbGRyZW4uIFNpbXBsZSBleHBhbnNpb24uJyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vZGVDaGlsZHJlbihub2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdOb2RlIHJlcXVlc3RlZCBmb3IgZXhwYW5zaW9uIHdpdGggZGlydHkgY2hpbGRyZW4gaGFkIGl0cyBjaGlsZHJlbiByZWxvYWRlZC4nKTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ05vZGUgZXhwYW5kZWQuJywgbm9kZS50b0xvZ2dhYmxlRm9ybSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNFYWdlckxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoYEVhZ2VyIGxvYWRpbmcgY2hpbGRyZW4gb2YgdHJlZSBub2RlIHdpdGggY2FzZSBpZCAnJHtub2RlLmNhc2Uuc3RyaW5nSWR9J2ApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lck9ic2VydmFibGVzID0gbm9kZS5jaGlsZHJlbi5tYXAoY2hpbGROb2RlID0+IHRoaXMuZXhwYW5kTm9kZShjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ya0pvaW4gZG9lc24ndCBlbWl0IHdpdGggMCBpbnB1dCBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgICAgICAgICBpbm5lck9ic2VydmFibGVzLnB1c2gob2YodHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3JrSm9pbihpbm5lck9ic2VydmFibGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciBkaXJ0eSBjaGlsZHJlbiBuZWVkIHRvIGJlIHJlbG9hZGVkIGFuZCByZWxvYWRzIHRoZW0gaWYgbmVlZGVkLlxuICAgICAqIEBwYXJhbSBub2RlIHRoZSB7QGxpbmsgQ2FzZVRyZWVOb2RlfSB3aG8ncyBjaGlsZHJlbiBhcmUgdXBkYXRlZFxuICAgICAqIEByZXR1cm5zIGVtaXRzIHdoZW4gbG9hZGluZyBmaW5pc2hlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVOb2RlQ2hpbGRyZW4obm9kZTogQ2FzZVRyZWVOb2RlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIG5vZGUubG9hZGluZ0NoaWxkcmVuLm9uKCk7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW5DYXNlUmVmID0gZ2V0SW1tZWRpYXRlRGF0YShub2RlLmNhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRik7XG4gICAgICAgIGlmICghY2hpbGRyZW5DYXNlUmVmIHx8IGNoaWxkcmVuQ2FzZVJlZi52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgIG5vZGUuZGlydHlDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5sb2FkaW5nQ2hpbGRyZW4ub2ZmKCk7XG4gICAgICAgICAgICByZXR1cm4gb2ZWb2lkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IGNoaWxkcmVuQ2FzZVJlZi52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZE5vZGUgPT4gZXhpc3RpbmdDaGlsZHJlbi5hZGQoY2hpbGROb2RlLmNhc2Uuc3RyaW5nSWQpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbkNhc2VSZWYudmFsdWUuZXZlcnkoY2FzZUlkID0+IGV4aXN0aW5nQ2hpbGRyZW4uaGFzKGNhc2VJZCkpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kaXJ0eUNoaWxkcmVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbm9kZS5sb2FkaW5nQ2hpbGRyZW4ub2ZmKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mVm9pZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUGFnZU9mQ2hpbGRyZW4obm9kZSwgMCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5kaXJ0eUNoaWxkcmVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubG9hZGluZ0NoaWxkcmVuLm9mZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBldmVyeSBwYWdlIG9mIGNoaWxkcmVuIGZyb20gdGhlIGdpdmVuIG51bWJlciBhbmQgdXBkYXRlcyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBNaXNzaW5nIG5vZGVzIGFyZSByZW1vdmVkLiBFeGlzdGluZyBub2RlcyBhcmUgbWFya2VkIGFzIGRpcnR5LiBOZXcgbm9kZXMgYXJlIGFkZGVkLlxuICAgICAqXG4gICAgICogTm9kZXMgYXJlIHJldHVybmVkIGluIHRoZWlyIGluc2VydGlvbiBvcmRlci5cbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUge0BsaW5rIENhc2VUcmVlTm9kZX0gd2hvJ3MgY2hpbGRyZW4gYXJlIHVwZGF0ZWRcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBwYWdlIHRoYXQgc2hvdWxkIGJlIGxvYWRlZC4gQWxsIGZvbGxvd2luZyBwYWdlcyBhcmUgbG9hZGVkIGFzIHdlbGxcbiAgICAgKiBAcmV0dXJucyBuZXh0IGlzIGVtaXR0ZWQgd2hlbiBsb2FkaW5nIG9mIGFsbCBwYWdlcyBjb21wbGV0ZXMgKHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUpXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVBhZ2VPZkNoaWxkcmVuKG5vZGU6IENhc2VUcmVlTm9kZSwgcGFnZU51bWJlcjogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gdGhpcy5jcmVhdGVDaGlsZFJlcXVlc3RCb2R5KG5vZGUpO1xuICAgICAgICBpZiAoIXJlcXVlc3RCb2R5KSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBjcmVhdGUgZmlsdGVyIHRvIGZpbmQgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIG5vZGUnLCBub2RlLmNhc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGZpbHRlciB0byBmaW5kIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBub2RlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9uZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXG4gICAgICAgIGxldCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgYCR7cGFnZU51bWJlcn1gKS5zZXQoJ3NvcnQnLCAnY3JlYXRpb25EYXRlLGFzYycpO1xuICAgICAgICB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmdldENhc2VzKHJlcXVlc3RCb2R5LCBwYXJhbXMpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGlmICghaGFzQ29udGVudChwYWdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2hpbGQgY2FzZXMgaW52YWxpZCBwYWdlIGNvbnRlbnQnLCBwYWdlKTtcbiAgICAgICAgICAgICAgICBkb25lLm5leHQoKTtcbiAgICAgICAgICAgICAgICBkb25lLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRDaGlsZHJlbldpdGhOZXdQYWdlKG5vZGUsIHBhZ2UpO1xuXG4gICAgICAgICAgICBpZiAocGFnZU51bWJlciArIDEgPCBwYWdlLnBhZ2luYXRpb24udG90YWxQYWdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnZU9mQ2hpbGRyZW4obm9kZSwgcGFnZU51bWJlciArIDEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBkb25lLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvbmUubmV4dCgpO1xuICAgICAgICAgICAgICAgIGRvbmUuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NoaWxkIGNhc2VzIGNvdWxkIG5vdCBiZSBsb2FkZWQnLCBlcnJvcik7XG4gICAgICAgICAgICBkb25lLm5leHQoKTtcbiAgICAgICAgICAgIGRvbmUuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRvbmUuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIHtAbGluayBDYXNlVHJlZU5vZGV9IHdpdGggW0Nhc2VzXXtAbGluayBDYXNlfSBmcm9tIHRoZSBwcm92aWRlZCB7QGxpbmsgUGFnZX0uXG4gICAgICogQHBhcmFtIG5vZGUgdGhlIHtAbGluayBDYXNlVHJlZU5vZGV9IHdobydzIGNoaWxkcmVuIGFyZSB1cGRhdGVkXG4gICAgICogQHBhcmFtIHBhZ2UgdGhlIHtAbGluayBQYWdlfSB0aGF0IGNvbnRhaW5zIHRoZSB1cGRhdGVkIGNoaWxkcmVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUN1cnJlbnRDaGlsZHJlbldpdGhOZXdQYWdlKG5vZGU6IENhc2VUcmVlTm9kZSwgcGFnZTogUGFnZTxDYXNlPik6IHZvaWQge1xuICAgICAgICBwYWdlLmNvbnRlbnQuZm9yRWFjaCgobmV3Q2FzZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcGFnZS5wYWdpbmF0aW9uLnNpemUgKiBwYWdlLnBhZ2luYXRpb24ubnVtYmVyICsgaW5kZXg7XG4gICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJiBub2RlLmNoaWxkcmVuW3Bvc2l0aW9uXS5jYXNlLnN0cmluZ0lkICE9PSBuZXdDYXNlLnN0cmluZ0lkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChuZXcgQ2FzZVRyZWVOb2RlKG5ld0Nhc2UsIG5vZGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbltwb3NpdGlvbl0uY2FzZSA9IG5ld0Nhc2U7XG4gICAgICAgICAgICAgICAgbm9kZS5kaXJ0eUNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlRGVzY2VuZGFudHMobm9kZS5jaGlsZHJlbltwb3NpdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUge0BsaW5rIENhc2VUcmVlTm9kZX0gd2hvJ3MgY2hpbGRyZW4gdGhlIHtAbGluayBGaWx0ZXJ9IHNob3VsZCByZXR1cm5cbiAgICAgKiBAcmV0dXJucyBhIHJlcXVlc3QgYm9keSB0aGF0IGZpbmRzIGFsbCBjaGlsZCBjYXNlcyBvZiB0aGUgZ2l2ZW4gYG5vZGVgLlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHByb3ZpZGVkIGBub2RlYCBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGUgcmVxdWVzdCBib2R5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVDaGlsZFJlcXVlc3RCb2R5KG5vZGU6IENhc2VUcmVlTm9kZSk6IENhc2VHZXRSZXF1ZXN0Qm9keSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ2FzZVJlZiA9IGdldEltbWVkaWF0ZURhdGEobm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuICAgICAgICBpZiAoIWNoaWxkQ2FzZVJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7c3RyaW5nSWQ6IChjaGlsZENhc2VSZWYudmFsdWUgYXMgQXJyYXk8c3RyaW5nPil9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjaGlsZCB0byB0aGUgcm9vdCBub2RlLlxuICAgICAqXG4gICAgICogVXNlZnVsIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGxheW91dCB3aGVyZSB0aGUgcm9vdCBub2RlIGlzIGhpZGRlbi5cbiAgICAgKiBAcmV0dXJucyBlbWl0cyBgdHJ1ZWAgaWYgdGhlIGNoaWxkIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGBmYWxzZWAgaWYgbm90XG4gICAgICovXG4gICAgcHVibGljIGFkZFJvb3RDaGlsZE5vZGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgICAgICB0aGlzLmFkZENoaWxkTm9kZSh0aGlzLl9yb290Tm9kZSkuc3Vic2NyaWJlKGFkZGVkID0+IHtcbiAgICAgICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc2hvd1Jvb3QgJiYgdGhpcy5fdHJlZURhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJlZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuX3Jvb3ROb2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0Lm5leHQoYWRkZWQpO1xuICAgICAgICAgICAgcmV0LmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgbm9kZSB0byB0aGUgZ2l2ZW4gbm9kZSBiYXNlZCBvbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgbm9kZSdzIGNhc2VcbiAgICAgKiBAcmV0dXJucyBlbWl0cyBgdHJ1ZWAgaWYgdGhlIGNoaWxkIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGBmYWxzZWAgaWYgbm90XG4gICAgICovXG4gICAgcHVibGljIGFkZENoaWxkTm9kZShjbGlja2VkTm9kZTogQ2FzZVRyZWVOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNsaWNrZWROb2RlLmFkZGluZ05vZGUub24oKTtcbiAgICAgICAgY29uc3QgY2FzZVJlZkZpZWxkID0gZ2V0SW1tZWRpYXRlRGF0YShjbGlja2VkTm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuXG4gICAgICAgIGlmIChjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENhc2UgJHtjbGlja2VkTm9kZS5jYXNlLnN0cmluZ0lkfSBjYW4gYWRkIG5ldyB0cmVlIG5vZGVzIGJ1dCBoYXMgbm8gYWxsb3dlZCBuZXRzYCk7XG4gICAgICAgICAgICBjbGlja2VkTm9kZS5hZGRpbmdOb2RlLm9mZigpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuXG4gICAgICAgIGlmIChjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFuZEFkZENoaWxkQ2FzZShjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHNbMF0sIGNsaWNrZWROb2RlLCByZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1NlcnZpY2UuZ2V0TmV0cyhjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHMpLnN1YnNjcmliZShuZXRzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlTWV1UmVmID0gdGhpcy5fc2lkZU1lbnVTZXJ2aWNlLm9wZW4odGhpcy5fb3B0aW9uU2VsZWN0b3JDb21wb25lbnQsIFNpZGVNZW51U2l6ZS5NRURJVU0sIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGNsaWNrZWROb2RlLmNhc2UudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG5ldHMubWFwKG5ldCA9PiAoe3RleHQ6IG5ldC50aXRsZSwgdmFsdWU6IG5ldC5pZGVudGlmaWVyfSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGV0IHNpZGVNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgc2lkZU1lbnVTdWJzY3JpcHRpb24gPSBzaWRlTWV1UmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhZXZlbnQuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbmRBZGRDaGlsZENhc2UoZXZlbnQuZGF0YS52YWx1ZSwgY2xpY2tlZE5vZGUsIHJldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRlTWVudVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tlZE5vZGUuYWRkaW5nTm9kZS5vZmYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY2FzZSBhbmQgYWRkcyBpdCB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIHNwZWNpZmllZCBub2RlXG4gICAgICogQHBhcmFtIHByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MgdGhhdCBzaG91bGQgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBjbGlja2VkTm9kZSB0aGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBjYXNlXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblJlc3VsdCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBlbWl0dGVkIGludG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVBbmRBZGRDaGlsZENhc2UocHJvY2Vzc0lkZW50aWZpZXI6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrZWROb2RlOiBDYXNlVHJlZU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQ6IFN1YmplY3Q8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1NlcnZpY2UuZ2V0TmV0KHByb2Nlc3NJZGVudGlmaWVyKS5zdWJzY3JpYmUobmV0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkVGl0bGVJbW1lZGlhdGUgPSBnZXRJbW1lZGlhdGVEYXRhKGNsaWNrZWROb2RlLmNhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRF9OT0RFX1RJVExFKTtcbiAgICAgICAgICAgIGxldCBjaGlsZFRpdGxlID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjYXNlVHJlZS5uZXdOb2RlRGVmYXVsdE5hbWUnKTtcbiAgICAgICAgICAgIGlmICghIWNoaWxkVGl0bGVJbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFRpdGxlID0gY2hpbGRUaXRsZUltbWVkaWF0ZS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISFuZXQuZGVmYXVsdENhc2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRUaXRsZSA9IG5ldC5kZWZhdWx0Q2FzZU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmNyZWF0ZUNhc2Uoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBjaGlsZFRpdGxlLFxuICAgICAgICAgICAgICAgIG5ldElkOiBuZXQuc3RyaW5nSWRcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgob3V0Y29tZVJlc291cmNlOiBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXNlUmVmRmllbGQgPSBnZXRJbW1lZGlhdGVEYXRhKGNsaWNrZWROb2RlLmNhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0Q2FzZVJlZlZhbHVlID0gWy4uLmNhc2VSZWZGaWVsZC52YWx1ZSwgKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lIGFzIENyZWF0ZUNhc2VFdmVudE91dGNvbWUpLmFDYXNlLnN0cmluZ0lkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1DYXNlUmVmQ2FsbChjbGlja2VkTm9kZS5jYXNlLnN0cmluZ0lkLCBzZXRDYXNlUmVmVmFsdWUpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2UgPT4gdGhpcy51cGRhdGVUcmVlQWZ0ZXJDaGlsZEFkZChjbGlja2VkTm9kZSwgdmFsdWVDaGFuZ2UgPyB2YWx1ZUNoYW5nZSA6IHNldENhc2VSZWZWYWx1ZSwgb3BlcmF0aW9uUmVzdWx0KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgdHJlZSBhZnRlciBhZGRpbmcgYSBuZXcgY2hpbGRcbiAgICAgKiBAcGFyYW0gY2xpY2tlZE5vZGUgdGhlIHBhcmVudCBub2RlXG4gICAgICogQHBhcmFtIG5ld0Nhc2VSZWZWYWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBwYXJlbnQgbm9kZSdzIGNhc2UgcmVmXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblJlc3VsdCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBlbWl0dGVkIGludG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVUcmVlQWZ0ZXJDaGlsZEFkZChjbGlja2VkTm9kZTogQ2FzZVRyZWVOb2RlLCBuZXdDYXNlUmVmVmFsdWU6IEFycmF5PHN0cmluZz4sIG9wZXJhdGlvblJlc3VsdDogU3ViamVjdDxib29sZWFuPik6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZU5vZGVDaGlsZHJlbkZyb21DaGFuZ2VkRmllbGRzKGNsaWNrZWROb2RlLCBuZXdDYXNlUmVmVmFsdWUpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgY2xpY2tlZE5vZGUuYWRkaW5nTm9kZS5vZmYoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShjbGlja2VkTm9kZSkuc3Vic2NyaWJlKGV4cGFuZFN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlTm9kZShjbGlja2VkTm9kZS5jaGlsZHJlbltjbGlja2VkTm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5leGVjdXRlQWZ0ZXJBY3Rpb25zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZXMgdGhlIHByb3ZpZGVkIG5vbi1yb290IG5vZGUgaWYgdGhlIHVuZGVybHlpbmcgY2FzZSBhbGxvd3MgaXQuXG4gICAgICpcbiAgICAgKiBUaGUgdW5kZXJseWluZyBjYXNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FzZSByZWYgb2YgaXQncyBwYXJlbnQgZWxlbWVudCB3aXRoIHRoZSBoZWxwIGZyb20gdGhlIGByZW1vdmVgXG4gICAgICogb3BlcmF0aW9uIHByb3ZpZGVkIGJ5IGNhc2UgcmVmIGl0c2VsZi5cbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIHRyZWVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlTm9kZShub2RlOiBDYXNlVHJlZU5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2RlLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYXNlIHRyZWUgZG9lc25cXCd0IHN1cHBvcnQgcmVtb3ZhbCBvZiB0aGUgcm9vdCBub2RlLCBhcyBpdCBoYXMgbm8gcGFyZW50IGNhc2UgcmVmLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5yZW1vdmluZ05vZGUub24oKTtcbiAgICAgICAgY29uc3QgY2FzZVJlZkltbWVkaWF0ZSA9IGdldEltbWVkaWF0ZURhdGEobm9kZS5wYXJlbnQuY2FzZSwgVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzLkNISUxEUkVOX0NBU0VfUkVGKTtcbiAgICAgICAgY29uc3Qgc2V0Q2FzZVJlZlZhbHVlID0gKGNhc2VSZWZJbW1lZGlhdGUudmFsdWUgYXMgQXJyYXk8c3RyaW5nPikuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlLmNhc2Uuc3RyaW5nSWQpO1xuICAgICAgICB0aGlzLnBlcmZvcm1DYXNlUmVmQ2FsbChub2RlLnBhcmVudC5jYXNlLnN0cmluZ0lkLCBzZXRDYXNlUmVmVmFsdWUpLnN1YnNjcmliZShjYXNlUmVmQ2hhbmdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Nhc2VSZWZWYWx1ZSA9IGNhc2VSZWZDaGFuZ2UgPyBjYXNlUmVmQ2hhbmdlIDogc2V0Q2FzZVJlZlZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSZW1vdmVkTm9kZXMobm9kZS5wYXJlbnQsIG5ld0Nhc2VSZWZWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVDaGlsZHJlbkZyb21DaGFuZ2VkRmllbGRzKG5vZGUucGFyZW50LCBuZXdDYXNlUmVmVmFsdWUpO1xuXG4gICAgICAgICAgICBub2RlLnJlbW92aW5nTm9kZS5vZmYoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kZXNlbGVjdE5vZGVJZkRlc2NlbmRhbnRPZihub2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIGFsbCBub2RlcyBpbiB0aGUgdHJlZSBkaWN0YXRlZCBieSB0aGUgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGF0aCBub2RlcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZCBhbG9uZyB3aXRoIHRoZWlyIHBhdGggZnJvbSB0aGUgcm9vdCBub2RlXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZFBhdGgocGF0aDogQ2FzZVRyZWVQYXRoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm9vdE5vZGUgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVswXTtcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlLnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb290Tm9kZSA9IHJvb3ROb2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cGFuZExldmVsKFtyb290Tm9kZV0sIHRoaXMuY29udmVydFBhdGhUb0V4cGFuc2lvblRyZWUocGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSB7QExpbmsgQ2FzZVRyZWVQYXRofSBvYmplY3QgaW50byBhbiB7QGxpbmsgRXhwYW5zaW9uVHJlZX0gb2JqZWN0LlxuICAgICAqIFRoZSByZXN1bHQgaGFzIGFsbCB0aGUgY29tbW9uIHBhdGhzIG1lcmdlZCBpbnRvIHNpbmdsZSBicmFuY2hlcyBvZiB0aGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhdGhzIG5vZGVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkIGFsb25nIHdpdGggdGhlaXIgcGF0aCBmcm9tIHRoZSByb290IG5vZGVcbiAgICAgKiBAcmV0dXJucyBhbiB7QGxpbmsgRXhwYW5zaW9uVHJlZX0gZXF1aXZhbGVudCB0byB0aGUgcHJvdmlkZWQge0BsaW5rIENhc2VUcmVlUGF0aH1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29udmVydFBhdGhUb0V4cGFuc2lvblRyZWUocGF0aHM6IENhc2VUcmVlUGF0aCk6IEV4cGFuc2lvblRyZWUge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhwYXRocykuZm9yRWFjaChwYXRoID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHBhdGguZm9yRWFjaChub2RlSWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZVtub2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGVbbm9kZUlkXSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlW25vZGVJZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZXhwYW5kcyBhbGwgbm9kZXMgZnJvbSB0aGUgcHJvdmlkZWQgYXJyYXkgb2Ygbm9kZXMsIHRoYXQgYXBwZWFyIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHtAbGluayBFeHBhbnNpb25UcmVlfSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGV2ZWxOb2RlcyBub2RlcyBmcm9tIHdoaWNoIHRoZSBleHBhbnNpb24gc2hvdWxkIHN0YXJ0XG4gICAgICogQHBhcmFtIHRhcmdldHMgYSB0cmVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIG5vZGVzIHRoYXQgYXJlIHRvIGJlIGV4cGFuZGVkIHJlY3Vyc2l2ZWx5LlxuICAgICAqIFRoZSB0b3AgbGV2ZWwgbm9kZXMgYXJlIGV4cGFuZGVkIGZpcnN0LCBmcm9tIHRoZSBwcm92aWRlZCBgbGV2ZWxOb2Rlc2AuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGV4cGFuZExldmVsKGxldmVsTm9kZXM6IEFycmF5PENhc2VUcmVlTm9kZT4sIHRhcmdldHM6IEV4cGFuc2lvblRyZWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVzaXJlZElkcyA9IG5ldyBTZXQoT2JqZWN0LmtleXModGFyZ2V0cykpO1xuICAgICAgICBpZiAoZGVzaXJlZElkcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXZlbE5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbjtcbiAgICAgICAgICAgIGlmICghZGVzaXJlZElkcy5oYXMobm9kZS5jYXNlLnN0cmluZ0lkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShub2RlKS5zdWJzY3JpYmUoc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnQ291bGQgbm90IGV4cGFuZCB0cmVlIG5vZGUgd2l0aCBJRDogJyArIG5vZGUuY2FzZS5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRMZXZlbChub2RlLmNoaWxkcmVuLCB0YXJnZXRzW25vZGUuY2FzZS5zdHJpbmdJZF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgdGhlIHN1YnRyZWVzIHJvb3RlZCBhdCB0aGUgbm9kZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcGFyZW50IG5vZGUncyBjaGlsZCBjYXNlIHJlZiB2YWx1ZXMsXG4gICAgICogYnV0IGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiB0aGUgbmV3IHZhbHVlXG4gICAgICogQHBhcmFtIHBhcmVudE5vZGUgYW4gaW5uZXIgbm9kZSBvZiB0aGUgdHJlZSB0aGF0IGhhZCBzb21lIG9mIGl0J3MgY2hpbGRyZW4gcmVtb3ZlZFxuICAgICAqIEBwYXJhbSBuZXdDYXNlUmVmVmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcGFyZW50IG5vZGUncyBjYXNlIHJlZlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWxldGVSZW1vdmVkTm9kZXMocGFyZW50Tm9kZTogQ2FzZVRyZWVOb2RlLCBuZXdDYXNlUmVmVmFsdWU6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZENoaWxkcmVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGdldEltbWVkaWF0ZURhdGEocGFyZW50Tm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpLnZhbHVlLmZvckVhY2goaWQgPT4gcmVtb3ZlZENoaWxkcmVuLmFkZChpZCkpO1xuICAgICAgICBuZXdDYXNlUmVmVmFsdWUuZm9yRWFjaChpZCA9PiByZW1vdmVkQ2hpbGRyZW4uZGVsZXRlKGlkKSk7XG4gICAgICAgIHJlbW92ZWRDaGlsZHJlbi5mb3JFYWNoKHJlbW92ZWRJZCA9PiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmRlbGV0ZUNhc2UocmVtb3ZlZElkLCB0cnVlKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZU1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdSZW1vdmFsIG9mIGNoaWxkIGNhc2UgdW5zdWNjZXNzZnVsJywgcmVzcG9uc2VNZXNzYWdlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZWxlY3RzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpZiBpdCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIHByb3ZpZGVkIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB3aG8ncyBkZXNjZW5kYW50cyBzaG91bGQgYmUgZGVzZWxlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZXNlbGVjdE5vZGVJZkRlc2NlbmRhbnRPZihub2RlOiBDYXNlVHJlZU5vZGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJ1YmJsaW5nTm9kZSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgICAgIHdoaWxlIChidWJibGluZ05vZGUgJiYgYnViYmxpbmdOb2RlICE9PSB0aGlzLl9yb290Tm9kZSkge1xuICAgICAgICAgICAgaWYgKGJ1YmJsaW5nTm9kZSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlTm9kZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnViYmxpbmdOb2RlID0gYnViYmxpbmdOb2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYmFja2VuZCBjYWxsIG9uIHRoZSBnaXZlbiBjYXNlLCBhbmQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGNhc2UgcmVmIGZpZWxkIGluIHRoZSB0cmFuc2l0aW9uIGRlZmluZWQgYnlcbiAgICAgKiBbQ0FTRV9SRUZfVFJBTlNJVElPTl17QGxpbmsgVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzI0NBU0VfUkVGX1RSQU5TSVRJT059LlxuICAgICAqIEBwYXJhbSBjYXNlSWQgc3RyaW5nIElEIG9mIHRoZSBjYXNlIHRoYXQgc2hvdWxkIGhhdmUgaXQncyB0cmVlIGNhc2UgcmVmIHNldFxuICAgICAqIEBwYXJhbSBuZXdDYXNlUmVmVmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZSByZWYgZmllbGRcbiAgICAgKi9cbiAgICBwcml2YXRlIHBlcmZvcm1DYXNlUmVmQ2FsbChjYXNlSWQ6IHN0cmluZywgbmV3Q2FzZVJlZlZhbHVlOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCQgPSBuZXcgUmVwbGF5U3ViamVjdDxBcnJheTxzdHJpbmc+PigxKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldFRhc2tzKFNpbXBsZUZpbHRlci5mcm9tVGFza1F1ZXJ5KHtcbiAgICAgICAgICAgIGNhc2U6IHtpZDogY2FzZUlkfSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25JZDogVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzLkNBU0VfUkVGX1RSQU5TSVRJT05cbiAgICAgICAgfSkpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGlmICghaGFzQ29udGVudChwYWdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2FzZSByZWYgYWNjZXNzb3IgdGFzayBkb2VzblxcJ3QgZXhpc3QhJyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFzayA9IHBhZ2UuY29udGVudFswXTtcblxuICAgICAgICAgICAgdGhpcy5fdGFza1Jlc291cmNlU2VydmljZS5hc3NpZ25UYXNrKHRhc2suc3RyaW5nSWQpLnN1YnNjcmliZShhc3NpZ25SZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhc3NpZ25SZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2FzZSByZWYgYWNjZXNzb3IgdGFzayBjb3VsZCBub3QgYmUgYXNzaWduZWQnLCBhc3NpZ25SZXNwb25zZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHt9O1xuICAgICAgICAgICAgICAgIGJvZHlbVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzLkNISUxEUkVOX0NBU0VfUkVGXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Nhc2VSZWYnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3Q2FzZVJlZlZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnNldERhdGEodGFzay5zdHJpbmdJZCwgYm9keSkuc3Vic2NyaWJlKChvdXRjb21lUmVzb3VyY2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lIGFzIFNldERhdGFFdmVudE91dGNvbWUpLmNoYW5nZWRGaWVsZHMuY2hhbmdlZEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FzZVJlZkNoYW5nZXMgPSBjaGFuZ2VkRmllbGRzW1RyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRl07XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dChjYXNlUmVmQ2hhbmdlcyA/IGNhc2VSZWZDaGFuZ2VzLnZhbHVlIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmZpbmlzaFRhc2sodGFzay5zdHJpbmdJZCkuc3Vic2NyaWJlKGZpbmlzaFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5pc2hSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdDYXNlIHJlZiBhY2Nlc3NvciB0YXNrIGZpbmlzaGVkJywgZmluaXNoUmVzcG9uc2Uuc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2FzZSByZWYgYWNjZXNzb3IgdGFzayBmaW5pc2ggZmFpbGVkJywgZmluaXNoUmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ291bGQgbm90IHNldCBkYXRhIHRvIHRyZWUgY2FzZSByZWYnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhc2UgcmVmIGFjY2Vzc29yIHRhc2sgY291bGQgbm90IGJlIGFzc2lnbmVkJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhc2UgcmVmIGFjY2Vzc29yIHRhc2sgY291bGQgbm90IGJlIGZvdW5kJywgZXJyb3IpO1xuICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYW4gdXBkYXRlIGFmdGVyIGFkZGluZyBvciByZW1vdmluZyBhIG5vZGUgZnJvbSB0aGUgdHJlZS5cbiAgICAgKlxuICAgICAqIElmIG9ubHkgb25lIG5vZGUgd2FzIGFkZGVkIGFkZHMgaXQgaW50byB0aGUgdHJlZVxuICAgICAqXG4gICAgICogSWYgb25seSBvbmUgbm9kZSB3YXMgcmVtb3ZlZCByZW1vdmVzIGl0IGZyb20gdGhlIHRyZWVcbiAgICAgKlxuICAgICAqIE90aGVyd2lzZSBjb2xsYXBzZXMgdGhlIGFmZmVjdGVkIG5vZGUgYW5kIG1hcmtzIGl0J3MgY2hpbGRyZW4gYXMgZGlydHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZmZlY3RlZE5vZGUgbm9kZSB0aGF0IGhhZCBpdCdzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgKiBAcGFyYW0gbmV3Q2FzZVJlZlZhbHVlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZVJlZiBmaWVsZCByZXR1cm5lZCBieSBiYWNrZW5kXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIHRoYXQgZW1pdHMgYW4gb2JqZWN0IHdpdGggdGhlIFtyZXN1bHRde0BsaW5rIFJlc3VsdFdpdGhBZnRlckFjdGlvbnMjcmVzdWx0fSBhdHRyaWJ1dGUgc2V0IHRvIGB0cnVlYCBpZlxuICAgICAqIHRoZSB1cGRhdGUgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVOb2RlQ2hpbGRyZW5Gcm9tQ2hhbmdlZEZpZWxkcyhhZmZlY3RlZE5vZGU6IENhc2VUcmVlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2VSZWZWYWx1ZTogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8UmVzdWx0V2l0aEFmdGVyQWN0aW9uczxib29sZWFuPj4ge1xuICAgICAgICBjb25zdCBjYXNlUmVmRmllbGQgPSBnZXRJbW1lZGlhdGVEYXRhKGFmZmVjdGVkTm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBuZXdDYXNlUmVmVmFsdWUuZm9yRWFjaChpZCA9PiBuZXdDaGlsZHJlbi5hZGQoaWQpKTtcblxuICAgICAgICBsZXQgbnVtYmVyT2ZNaXNzaW5nQ2hpbGRyZW4gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhc2VSZWZGaWVsZC52YWx1ZS5sZW5ndGggJiYgbnVtYmVyT2ZNaXNzaW5nQ2hpbGRyZW4gPCAyOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbmV3Q2hpbGRyZW4uaGFzKGNhc2VSZWZGaWVsZC52YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJPZk1pc3NpbmdDaGlsZHJlbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhhY3RseU9uZUNoaWxkQWRkZWQgPSBjYXNlUmVmRmllbGQudmFsdWUubGVuZ3RoICsgMSA9PT0gbmV3Q2FzZVJlZlZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgJiYgY2FzZVJlZkZpZWxkLnZhbHVlLmV2ZXJ5KGl0ID0+IG5ld0NoaWxkcmVuLmhhcyhpdCkpO1xuXG4gICAgICAgIGNvbnN0IGV4YWN0bHlPbmVDaGlsZFJlbW92ZWQgPSBjYXNlUmVmRmllbGQudmFsdWUubGVuZ3RoIC0gMSA9PT0gbmV3Q2FzZVJlZlZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgJiYgbnVtYmVyT2ZNaXNzaW5nQ2hpbGRyZW4gPT09IDE7XG5cbiAgICAgICAgaWYgKCFleGFjdGx5T25lQ2hpbGRBZGRlZCAmJiAhZXhhY3RseU9uZUNoaWxkUmVtb3ZlZCkge1xuICAgICAgICAgICAgY2FzZVJlZkZpZWxkLnZhbHVlID0gbmV3Q2FzZVJlZlZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fdHJlZUNvbnRyb2wuY29sbGFwc2VEZXNjZW5kYW50cyhhZmZlY3RlZE5vZGUpO1xuICAgICAgICAgICAgYWZmZWN0ZWROb2RlLmRpcnR5Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG5ldyBSZXN1bHRXaXRoQWZ0ZXJBY3Rpb25zKHRydWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGFjdGx5T25lQ2hpbGRBZGRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0NoaWxkTm9kZUFkZChhZmZlY3RlZE5vZGUsIGNhc2VSZWZGaWVsZCwgbmV3Q2FzZVJlZlZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDaGlsZE5vZGVSZW1vdmUoYWZmZWN0ZWROb2RlLCBjYXNlUmVmRmllbGQsIG5ld0NoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgbm9kZSB0byB0aGUgYGFmZmVjdGVkTm9kZWAgYnkgYWRkaW5nIHRoZSBsYXN0IENhc2UgZnJvbSB0aGUgYG5ld0Nhc2VSZWZWYWx1ZWBcbiAgICAgKiBAcGFyYW0gYWZmZWN0ZWROb2RlIHRoZSBub2RlIGluIHRoZSB0cmVlIHRoYXQgaGFkIGEgY2hpbGQgYWRkZWQgLSB0aGUgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gY2FzZVJlZkZpZWxkIHRoZSBjYXNlIHJlZiBmaWVsZCBvZiB0aGUgYWZmZWN0ZWQgbm9kZVxuICAgICAqIEBwYXJhbSBuZXdDYXNlUmVmVmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZSByZWYgZmllbGQgaW4gdGhlIG5vZGVcbiAgICAgKiBAcmV0dXJucyBhbiBgT2JzZXJ2YWJsZWAgdGhhdCBlbWl0cyBgdHJ1ZWAgaWYgYSBub2RlIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzQ2hpbGROb2RlQWRkKGFmZmVjdGVkTm9kZTogQ2FzZVRyZWVOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VSZWZGaWVsZDogSW1tZWRpYXRlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDYXNlUmVmVmFsdWU6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPFJlc3VsdFdpdGhBZnRlckFjdGlvbnM8Ym9vbGVhbj4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PFJlc3VsdFdpdGhBZnRlckFjdGlvbnM8Ym9vbGVhbj4+KDEpO1xuXG4gICAgICAgIGNhc2VSZWZGaWVsZC52YWx1ZSA9IG5ld0Nhc2VSZWZWYWx1ZTtcbiAgICAgICAgdGhpcy5fY2FzZVJlc291cmNlU2VydmljZS5nZXRPbmVDYXNlKG5ld0Nhc2VSZWZWYWx1ZVtuZXdDYXNlUmVmVmFsdWUubGVuZ3RoIC0gMV0pLnN1YnNjcmliZShjaGlsZENhc2UgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkQ2FzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnUHVzaGluZyBjaGlsZCBub2RlIHRvIHRyZWUnLCB7Y2hpbGRDYXNlLCBhZmZlY3RlZE5vZGU6IGFmZmVjdGVkTm9kZS50b0xvZ2dhYmxlRm9ybSgpfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5wdXNoQ2hpbGRUb1RyZWUoYWZmZWN0ZWROb2RlLCBjaGlsZENhc2UpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dChuZXcgUmVzdWx0V2l0aEFmdGVyQWN0aW9ucyh0cnVlLCBbKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNFYWdlckxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdFYWdlcmx5IGV4cGFuZGluZyBhIG5ld2x5IGFkZGVkIG5vZGUuJywgY2hpbGROb2RlLnRvTG9nZ2FibGVGb3JtKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmROb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ05ldyBjaGlsZCBjYXNlIHdhcyBub3QgZm91bmQsIGlsbGVnYWwgc3RhdGUnLCBjaGlsZENhc2UpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dChuZXcgUmVzdWx0V2l0aEFmdGVyQWN0aW9ucyhmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ05ldyBjaGlsZCBub2RlIGNhc2UgY291bGQgbm90IGJlIGZvdW5kJywgZXJyb3IpO1xuICAgICAgICAgICAgcmVzdWx0JC5uZXh0KG5ldyBSZXN1bHRXaXRoQWZ0ZXJBY3Rpb25zKGZhbHNlKSk7XG4gICAgICAgICAgICByZXN1bHQkLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgbm9kZSB0byB0aGUgdGFyZ2V0IHBhcmVudCBub2RlLlxuICAgICAqIEBwYXJhbSBwYXJlbnROb2RlIHRoZSBub2RlcyB3aG9zZSBjaGlsZCBzaG91bGQgYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gY2hpbGRDYXNlIHRoZSBjaGlsZCBjYXNlXG4gICAgICogQHJldHVybnMgdGhlIG5ld2x5IGFkZGVkIG5vZGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHVzaENoaWxkVG9UcmVlKHBhcmVudE5vZGU6IENhc2VUcmVlTm9kZSwgY2hpbGRDYXNlOiBDYXNlKTogQ2FzZVRyZWVOb2RlIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IENhc2VUcmVlTm9kZShjaGlsZENhc2UsIHBhcmVudE5vZGUpO1xuICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2goY2hpbGROb2RlKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgpO1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGRlbGV0ZWQgbm9kZSBmcm9tIHRoZSBjaGlsZHJlbiBvZiB0aGUgYGFmZmVjdGVkTm9kZWBcbiAgICAgKiBAcGFyYW0gYWZmZWN0ZWROb2RlIHRoZSBub2RlIGluIHRoZSB0cmVlIHRoYXQgaGFkIGl0J3MgY2hpbGQgcmVtb3ZlZFxuICAgICAqIEBwYXJhbSBjYXNlUmVmRmllbGQgdGhlIGNhc2UgcmVmIGZpZWxkIG9mIHRoZSBhZmZlY3RlZCBub2RlXG4gICAgICogQHBhcmFtIG5ld0Nhc2VSZWZWYWx1ZXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZSByZWYgZmllbGQgaW4gdGhlIG5vZGVcbiAgICAgKiBAcmV0dXJucyBhbiBgT2JzZXJ2YWJsZWAgdGhhdCBlbWl0cyBgdHJ1ZWAgd2hlbiB0aGUgcmVtb3ZlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NDaGlsZE5vZGVSZW1vdmUoYWZmZWN0ZWROb2RlOiBDYXNlVHJlZU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlZkZpZWxkOiBJbW1lZGlhdGVEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2VSZWZWYWx1ZXM6IFNldDxzdHJpbmc+KTogT2JzZXJ2YWJsZTxSZXN1bHRXaXRoQWZ0ZXJBY3Rpb25zPGJvb2xlYW4+PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2FzZVJlZkZpZWxkLnZhbHVlLmZpbmRJbmRleChpdCA9PiAhbmV3Q2FzZVJlZlZhbHVlcy5oYXMoaXQpKTtcbiAgICAgICAgY2FzZVJlZkZpZWxkLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGFmZmVjdGVkTm9kZS5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgIHJldHVybiBvZihuZXcgUmVzdWx0V2l0aEFmdGVyQWN0aW9ucyh0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEZvcmNlcyBhIHJlcmVuZGVyIG9mIHRoZSB0cmVlIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZnJlc2hUcmVlKCk6IHZvaWQge1xuICAgICAgICByZWZyZXNoVHJlZSh0aGlzLl90cmVlRGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsb2FkcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhc2Ugbm9kZS4gVGhlIHtAbGluayBDYXNlfSBvYmplY3QgaGVsZCBpbiB0aGUge0BsaW5rIENhc2VUcmVlTm9kZX0gaW5zdGFuY2UgaXMgbm90IHJlcGxhY2VkLFxuICAgICAqIGJ1dCB0aGUgbmV3IENhc2UgaXMgYE9iamVjdC5hc3NpZ25gLWVkIGludG8gaXQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBDYXNlIGluc3RhbmNlIGlzIHVuY2hhbmdlZCBidXQgcmVmZXJlbmNlc1xuICAgICAqIHRvIGFsbCBpdCdzIG5vbi1wcmltaXRpdmUgYXR0cmlidXRlcyBhcmUgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIElmIGEgcmVsb2FkIG9mIHRoZSBjdXJyZW50IG5vZGUgaXMgaW5pdGlhdGVkIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lIGNvbXBsZXRlZCwgdGhlIG5ldyBvbmUgaXMgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2FzZSBjaGFuZ2VkIGJlZm9yZSBhIHJlc3BvbnNlIGZyb20gYmFja2VuZCB3YXMgcmVjZWl2ZWQgdGhlIHJlc3BvbnNlIGlzIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhlIHBhcmVudCBub2RlLCBub3IgdGhlIGNoaWxkIG5vZGVzIGFyZSByZWxvYWRlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVsb2FkQ3VycmVudENhc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnTm8gVHJlZSBDYXNlIE5vZGUgc2VsZWN0ZWQsIG5vdGhpbmcgdG8gcmVsb2FkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JlbG9hZGVkQ2FzZUlkICYmIHRoaXMuX2N1cnJlbnROb2RlLmNhc2Uuc3RyaW5nSWQgIT09IHRoaXMuX3JlbG9hZGVkQ2FzZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ1JlbG9hZCBvZiB0aGUgY3VycmVudCBjYXNlIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWxvYWRlZENhc2VJZCA9IHRoaXMuX2N1cnJlbnROb2RlLmNhc2Uuc3RyaW5nSWQ7XG4gICAgICAgIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2UuZ2V0T25lQ2FzZSh0aGlzLl9jdXJyZW50Q2FzZS5zdHJpbmdJZCkuc3Vic2NyaWJlKHJlbG9hZGVkQ3VycmVudENhc2UgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWxvYWRlZEN1cnJlbnRDYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDdXJyZW50IENhc2UgVHJlZSBOb2RlIGNvdWxkIG5vdCBiZSByZWxvYWRlZC4gSW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2UnLCByZWxvYWRlZEN1cnJlbnRDYXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudE5vZGUgJiYgcmVsb2FkZWRDdXJyZW50Q2FzZS5zdHJpbmdJZCA9PT0gdGhpcy5fY3VycmVudE5vZGUuY2FzZS5zdHJpbmdJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZGVkQ2FzZUlkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuZGV0ZXJtaW5lQ2FzZVVwZGF0ZSh0aGlzLl9jdXJyZW50Q2FzZSwgcmVsb2FkZWRDdXJyZW50Q2FzZSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jdXJyZW50Q2FzZSwgcmVsb2FkZWRDdXJyZW50Q2FzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZUNhc2VWaWV3U2VydmljZS5sb2FkVGFzayQubmV4dCh0aGlzLl9jdXJyZW50Q2FzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZS52aXNpYmxlVHJlZVByb3BlcnRpZXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZS5jaGlsZHJlbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudE5vZGUuZGlydHlDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZSh0aGlzLl9jdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnQ3VycmVudCBDYXNlIFRyZWUgTm9kZSByZWxvYWRlZCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0Rpc2NhcmRpbmcgY2FzZSByZWxvYWQgcmVzcG9uc2UsIHNpbmNlIHRoZSBjdXJyZW50IG5vZGUgaGFzIGNoYW5nZWQgYmVmb3JlIGl0cyBjYXNlIHdhcyByZWNlaXZlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0N1cnJlbnQgQ2FzZSBUcmVlIE5vZGUgcmVsb2FkIHJlcXVlc3QgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIGFubnkgb2YgdGhlIGNhc2UgYXR0cmlidXRlcyB0aGF0IGFyZSB2aXNpYmxlIG9uIHRoZSB0cmVlIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIG9sZENhc2UgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIENhc2Ugb2JqZWN0LCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgb24gdGhlIHRyZWVcbiAgICAgKiBAcGFyYW0gbmV3Q2FzZSB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIENhc2Ugb2JqZWN0LCB0aGF0IHNob3VsZCByZXBsYWNlIHRoZSBvbGQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXRlcm1pbmVDYXNlVXBkYXRlKG9sZENhc2U6IENhc2UsIG5ld0Nhc2U6IENhc2UpOiBDYXNlVXBkYXRlUmVzdWx0IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUF0dHJpYnV0ZXMgPSBbXG4gICAgICAgICAgICBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0FOX0FERF9DSElMRFJFTixcbiAgICAgICAgICAgIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DQU5fUkVNT1ZFX05PREUsXG4gICAgICAgICAgICBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQkVGT1JFX1RFWFRfSUNPTixcbiAgICAgICAgICAgIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5UUkVFX0FERF9JQ09OXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBDYXNlVXBkYXRlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdmlzaWJsZVRyZWVQcm9wZXJ0aWVzQ2hhbmdlZDogdHJ1ZSwgLy8gZm9yIHNob3J0LWNpcmN1aXRpbmcgdGhlIGV2YWx1YXRpb24sIGlmIG5vZGVzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbGRDaGlsZENhc2VSZWYgPSBnZXRJbW1lZGlhdGVEYXRhKG9sZENhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRik7XG4gICAgICAgIGlmIChvbGRDaGlsZENhc2VSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkQ2hpbGRyZW4gPSBuZXcgU2V0KG9sZENoaWxkQ2FzZVJlZi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IG5ldyBTZXQoZ2V0SW1tZWRpYXRlRGF0YShuZXdDYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpLnZhbHVlKTtcblxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuQ2hhbmdlZCA9IG9sZENoaWxkcmVuLnNpemUgIT09IG5ld0NoaWxkcmVuLnNpemU7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5jaGlsZHJlbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW5DaGFuZ2VkID0gQXJyYXkuZnJvbShvbGRDaGlsZHJlbikuc29tZShjaGlsZElkID0+ICFuZXdDaGlsZHJlbi5oYXMoY2hpbGRJZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzaG9ydC1jaXJjdWl0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNoaWxkcmVuQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQudmlzaWJsZVRyZWVQcm9wZXJ0aWVzQ2hhbmdlZCA9IHZpc2libGVBdHRyaWJ1dGVzLnNvbWUoYXR0cmlidXRlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRJbW1lZGlhdGVEYXRhKG9sZENhc2UsIGF0dHJpYnV0ZSlcbiAgICAgICAgICAgICAgICAmJiBnZXRJbW1lZGlhdGVEYXRhKG9sZENhc2UsIGF0dHJpYnV0ZSkudmFsdWUgIT09IGdldEltbWVkaWF0ZURhdGEobmV3Q2FzZSwgYXR0cmlidXRlKS52YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=
|