@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.
Files changed (2010) hide show
  1. package/LICENSE +132 -0
  2. package/README.md +105 -0
  3. package/bundles/netgrif-components-core.umd.js +32298 -0
  4. package/bundles/netgrif-components-core.umd.js.map +1 -0
  5. package/bundles/netgrif-components-core.umd.min.js +17 -0
  6. package/bundles/netgrif-components-core.umd.min.js.map +1 -0
  7. package/commons/angular-cli-devkit-core-strings.d.ts +93 -0
  8. package/commons/import-to-add.d.ts +5 -0
  9. package/commons/schema.d.ts +277 -0
  10. package/commons/view-class-info.d.ts +22 -0
  11. package/esm2015/assets/i18n/de.json +419 -0
  12. package/esm2015/assets/i18n/en.json +419 -0
  13. package/esm2015/assets/i18n/sk.json +419 -0
  14. package/esm2015/commons/angular-cli-devkit-core-strings.js +157 -0
  15. package/esm2015/commons/import-to-add.js +7 -0
  16. package/esm2015/commons/schema.js +7 -0
  17. package/esm2015/commons/view-class-info.js +52 -0
  18. package/esm2015/lib/admin/public-api.js +9 -0
  19. package/esm2015/lib/admin/role-assignment/abstract-role-assignment.js +77 -0
  20. package/esm2015/lib/admin/role-assignment/services/ProcessList.js +155 -0
  21. package/esm2015/lib/admin/role-assignment/services/role-assignment.service.js +40 -0
  22. package/esm2015/lib/admin/user-invite/abstract-user-invite.component.js +77 -0
  23. package/esm2015/lib/admin/user-invite/services/organization-list.service.js +63 -0
  24. package/esm2015/lib/admin/user-invite/services/user-invite.service.js +31 -0
  25. package/esm2015/lib/allowed-nets/public-api.js +4 -0
  26. package/esm2015/lib/allowed-nets/services/allowed-nets.service.js +74 -0
  27. package/esm2015/lib/allowed-nets/services/base-allowed-nets.service.js +54 -0
  28. package/esm2015/lib/allowed-nets/services/factory/allowed-nets-service-factory.js +129 -0
  29. package/esm2015/lib/authentication/anonymous/anonymous.service.js +63 -0
  30. package/esm2015/lib/authentication/authentication.factory.js +16 -0
  31. package/esm2015/lib/authentication/authentication.module.js +32 -0
  32. package/esm2015/lib/authentication/components/abstract-authentication-overlay.js +50 -0
  33. package/esm2015/lib/authentication/models/credentials.js +2 -0
  34. package/esm2015/lib/authentication/models/public-api.js +5 -0
  35. package/esm2015/lib/authentication/models/transformer.js +2 -0
  36. package/esm2015/lib/authentication/models/user.transformer.js +19 -0
  37. package/esm2015/lib/authentication/public-api.js +14 -0
  38. package/esm2015/lib/authentication/services/anonymous-authentication-interceptor.js +44 -0
  39. package/esm2015/lib/authentication/services/authentication/authentication.service.js +71 -0
  40. package/esm2015/lib/authentication/services/authentication-interceptor.js +52 -0
  41. package/esm2015/lib/authentication/services/authentication-method.service.js +5 -0
  42. package/esm2015/lib/authentication/services/guard/authentication-guard.service.js +39 -0
  43. package/esm2015/lib/authentication/services/methods/basic-authentication/basic-authentication.service.js +48 -0
  44. package/esm2015/lib/authentication/services/methods/null-authentication/null-authentication.service.js +19 -0
  45. package/esm2015/lib/authentication/services/public-api.js +7 -0
  46. package/esm2015/lib/authentication/session/null-storage.js +15 -0
  47. package/esm2015/lib/authentication/session/public-api.js +3 -0
  48. package/esm2015/lib/authentication/session/services/session.service.js +156 -0
  49. package/esm2015/lib/authentication/sign-up/models/user-invitation-request.js +2 -0
  50. package/esm2015/lib/authentication/sign-up/models/user-registration-request.js +2 -0
  51. package/esm2015/lib/authentication/sign-up/public-api.js +8 -0
  52. package/esm2015/lib/authentication/sign-up/services/sign-up.service.js +105 -0
  53. package/esm2015/lib/authentication/sign-up/sign-up.module.js +13 -0
  54. package/esm2015/lib/authorization/authority/authority-guard.service.js +50 -0
  55. package/esm2015/lib/authorization/group/group-guard.service.js +67 -0
  56. package/esm2015/lib/authorization/permission/permission.service.js +116 -0
  57. package/esm2015/lib/authorization/public-api.js +10 -0
  58. package/esm2015/lib/authorization/role/role-guard.service.js +105 -0
  59. package/esm2015/lib/changed-fields/public-api.js +2 -0
  60. package/esm2015/lib/changed-fields/services/changed-fields.service.js +32 -0
  61. package/esm2015/lib/configuration/configuration.service.js +190 -0
  62. package/esm2015/lib/configuration/public-api.js +3 -0
  63. package/esm2015/lib/covalent/covalent.module.js +22 -0
  64. package/esm2015/lib/currency/currency.module.js +23 -0
  65. package/esm2015/lib/dashboard/cards/count-card/abstract-count-card.js +39 -0
  66. package/esm2015/lib/dashboard/cards/custom-card/abstract-custom-card.js +47 -0
  67. package/esm2015/lib/dashboard/cards/iframe-card/abstract-iframe-card.js +14 -0
  68. package/esm2015/lib/dashboard/cards/model/card-grid-element.js +2 -0
  69. package/esm2015/lib/dashboard/cards/model/count-card.js +2 -0
  70. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.js +2 -0
  71. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.js +2 -0
  72. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/custom-card.js +2 -0
  73. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.js +2 -0
  74. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.js +7 -0
  75. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.js +7 -0
  76. package/esm2015/lib/dashboard/cards/model/dashboard-card-types.js +13 -0
  77. package/esm2015/lib/dashboard/cards/model/dashboard-card.js +2 -0
  78. package/esm2015/lib/dashboard/cards/model/graph-card.js +2 -0
  79. package/esm2015/lib/dashboard/cards/model/iframe-card.js +2 -0
  80. package/esm2015/lib/dashboard/dashboard-content/abstract-dashboard-content.js +19 -0
  81. package/esm2015/lib/dashboard/dashboard-content/dashboard-params.js +2 -0
  82. package/esm2015/lib/dashboard/public-api.js +20 -0
  83. package/esm2015/lib/data-fields/boolean-field/abstract-boolean-field.component.js +40 -0
  84. package/esm2015/lib/data-fields/boolean-field/models/boolean-field.js +24 -0
  85. package/esm2015/lib/data-fields/button-field/abstract-button-field.component.js +62 -0
  86. package/esm2015/lib/data-fields/button-field/models/button-field.js +27 -0
  87. package/esm2015/lib/data-fields/data-field-template/abstract-data-field-template.component.js +101 -0
  88. package/esm2015/lib/data-fields/data-field-template/models/wrapped-boolean.js +6 -0
  89. package/esm2015/lib/data-fields/data-fields.module.js +35 -0
  90. package/esm2015/lib/data-fields/date-field/abstract-date-field.component.js +21 -0
  91. package/esm2015/lib/data-fields/date-field/models/custom-date-adapter.js +11 -0
  92. package/esm2015/lib/data-fields/date-field/models/date-field.js +10 -0
  93. package/esm2015/lib/data-fields/date-time-field/abstract-date-time-field.component.js +21 -0
  94. package/esm2015/lib/data-fields/date-time-field/models/date-time-field.js +10 -0
  95. package/esm2015/lib/data-fields/enumeration-field/abstract-enumeration-field.component.js +17 -0
  96. package/esm2015/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.js +43 -0
  97. package/esm2015/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.js +53 -0
  98. package/esm2015/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.js +37 -0
  99. package/esm2015/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.js +11 -0
  100. package/esm2015/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.js +11 -0
  101. package/esm2015/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.js +40 -0
  102. package/esm2015/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.js +44 -0
  103. package/esm2015/lib/data-fields/enumeration-field/models/enumeration-field.js +59 -0
  104. package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +390 -0
  105. package/esm2015/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.js +2 -0
  106. package/esm2015/lib/data-fields/file-field/models/file-field-value.js +2 -0
  107. package/esm2015/lib/data-fields/file-field/models/file-field.js +106 -0
  108. package/esm2015/lib/data-fields/file-list-field/abstract-file-list-field.component.js +261 -0
  109. package/esm2015/lib/data-fields/file-list-field/models/file-list-field-value.js +2 -0
  110. package/esm2015/lib/data-fields/file-list-field/models/file-list-field.js +83 -0
  111. package/esm2015/lib/data-fields/filter-field/abstract-filter-field-content.component.js +29 -0
  112. package/esm2015/lib/data-fields/filter-field/abstract-filter-field.component.js +28 -0
  113. package/esm2015/lib/data-fields/filter-field/models/filter-field-injection-token.js +7 -0
  114. package/esm2015/lib/data-fields/filter-field/models/filter-field.js +15 -0
  115. package/esm2015/lib/data-fields/i18n-field/abstract-i18n-field.component.js +19 -0
  116. package/esm2015/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.js +26 -0
  117. package/esm2015/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.js +40 -0
  118. package/esm2015/lib/data-fields/i18n-field/models/i18n-field-value.js +2 -0
  119. package/esm2015/lib/data-fields/i18n-field/models/i18n-field.js +10 -0
  120. package/esm2015/lib/data-fields/models/abstract-data-field-component.js +39 -0
  121. package/esm2015/lib/data-fields/models/abstract-data-field.js +391 -0
  122. package/esm2015/lib/data-fields/models/behavior.js +2 -0
  123. package/esm2015/lib/data-fields/models/boolean-label-enabled-token.js +3 -0
  124. package/esm2015/lib/data-fields/models/changed-fields.js +2 -0
  125. package/esm2015/lib/data-fields/models/component.js +2 -0
  126. package/esm2015/lib/data-fields/models/format-filter.js +2 -0
  127. package/esm2015/lib/data-fields/models/icon.js +6 -0
  128. package/esm2015/lib/data-fields/models/invalid-data-policy-token.js +11 -0
  129. package/esm2015/lib/data-fields/models/layout.js +2 -0
  130. package/esm2015/lib/data-fields/models/material-appearance.js +14 -0
  131. package/esm2015/lib/data-fields/models/properties.js +2 -0
  132. package/esm2015/lib/data-fields/models/template-appearance.js +15 -0
  133. package/esm2015/lib/data-fields/models/validation.js +2 -0
  134. package/esm2015/lib/data-fields/multichoice-field/abstract-multichoice-field.component.js +17 -0
  135. package/esm2015/lib/data-fields/multichoice-field/models/multichoice-field.js +41 -0
  136. package/esm2015/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.js +9 -0
  137. package/esm2015/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.js +9 -0
  138. package/esm2015/lib/data-fields/number-field/abstract-number-errors.component.js +45 -0
  139. package/esm2015/lib/data-fields/number-field/abstract-number-field.component.js +18 -0
  140. package/esm2015/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.js +48 -0
  141. package/esm2015/lib/data-fields/number-field/models/number-field.js +131 -0
  142. package/esm2015/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.js +7 -0
  143. package/esm2015/lib/data-fields/public-api.js +73 -0
  144. package/esm2015/lib/data-fields/task-ref-field/model/task-ref-field.js +7 -0
  145. package/esm2015/lib/data-fields/text-field/abstract-text-errors.component.js +35 -0
  146. package/esm2015/lib/data-fields/text-field/abstract-text-field.component.js +15 -0
  147. package/esm2015/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.js +39 -0
  148. package/esm2015/lib/data-fields/text-field/models/text-area-field.js +13 -0
  149. package/esm2015/lib/data-fields/text-field/models/text-field.js +85 -0
  150. package/esm2015/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.js +17 -0
  151. package/esm2015/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.js +30 -0
  152. package/esm2015/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.js +17 -0
  153. package/esm2015/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.js +40 -0
  154. package/esm2015/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.js +45 -0
  155. package/esm2015/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.js +105 -0
  156. package/esm2015/lib/data-fields/user-field/abstract-user-field.component.js +59 -0
  157. package/esm2015/lib/data-fields/user-field/models/user-field.js +14 -0
  158. package/esm2015/lib/data-fields/user-field/models/user-value.js +36 -0
  159. package/esm2015/lib/dialog/components/alert-dialog/alert-dialog.component.js +38 -0
  160. package/esm2015/lib/dialog/components/alert-dialog/alert-dialog.module.js +28 -0
  161. package/esm2015/lib/dialog/components/confirm-dialog/confirm-dialog.component.js +52 -0
  162. package/esm2015/lib/dialog/components/confirm-dialog/confirm-dialog.module.js +28 -0
  163. package/esm2015/lib/dialog/components/prompt-dialog/prompt-dialog.component.js +42 -0
  164. package/esm2015/lib/dialog/components/prompt-dialog/prompt-dialog.module.js +30 -0
  165. package/esm2015/lib/dialog/dialog.module.js +29 -0
  166. package/esm2015/lib/dialog/models/DialogData.js +2 -0
  167. package/esm2015/lib/dialog/models/DialogResult.js +2 -0
  168. package/esm2015/lib/dialog/models/abstract-dialog.js +21 -0
  169. package/esm2015/lib/dialog/public-api.js +9 -0
  170. package/esm2015/lib/dialog/services/dialog.service.js +82 -0
  171. package/esm2015/lib/event/model/event-constants.js +8 -0
  172. package/esm2015/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.js +2 -0
  173. package/esm2015/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.js +2 -0
  174. package/esm2015/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.js +2 -0
  175. package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.js +2 -0
  176. package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.js +2 -0
  177. package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.js +2 -0
  178. package/esm2015/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.js +2 -0
  179. package/esm2015/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.js +2 -0
  180. package/esm2015/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.js +2 -0
  181. package/esm2015/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.js +2 -0
  182. package/esm2015/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.js +2 -0
  183. package/esm2015/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.js +2 -0
  184. package/esm2015/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.js +2 -0
  185. package/esm2015/lib/event/public-api.js +19 -0
  186. package/esm2015/lib/event/services/event.service.js +57 -0
  187. package/esm2015/lib/event/services/interfaces/changed-fields-map.js +2 -0
  188. package/esm2015/lib/event-queue/model/queued-event.js +31 -0
  189. package/esm2015/lib/event-queue/public-api.js +5 -0
  190. package/esm2015/lib/event-queue/services/event-queue.service.js +63 -0
  191. package/esm2015/lib/filter/filter.repository.js +141 -0
  192. package/esm2015/lib/filter/models/case-search-request-body.js +2 -0
  193. package/esm2015/lib/filter/models/filter-type.js +11 -0
  194. package/esm2015/lib/filter/models/filter.js +56 -0
  195. package/esm2015/lib/filter/models/filters-filter-injection-token.js +9 -0
  196. package/esm2015/lib/filter/models/merge-operator.js +11 -0
  197. package/esm2015/lib/filter/models/merged-filter-params.js +2 -0
  198. package/esm2015/lib/filter/models/merged-filter.js +111 -0
  199. package/esm2015/lib/filter/models/simple-filter.js +91 -0
  200. package/esm2015/lib/filter/models/task-search-request-body.js +2 -0
  201. package/esm2015/lib/filter/models/user-filter-constants.js +39 -0
  202. package/esm2015/lib/filter/public-api.js +18 -0
  203. package/esm2015/lib/filter/user-filters.service.js +337 -0
  204. package/esm2015/lib/forms/email-submission/abstract-email-submission-form.component.js +31 -0
  205. package/esm2015/lib/forms/forgotten-password/abstract-forgotten-password.component.js +32 -0
  206. package/esm2015/lib/forms/has-form.js +2 -0
  207. package/esm2015/lib/forms/login/abstract-login-form.component.js +58 -0
  208. package/esm2015/lib/forms/models/abstract-registration.component.js +94 -0
  209. package/esm2015/lib/forms/models/password.validator.js +21 -0
  210. package/esm2015/lib/forms/public-api.js +7 -0
  211. package/esm2015/lib/forms/registration/abstract-registration-form.component.js +37 -0
  212. package/esm2015/lib/groups/public-api.js +3 -0
  213. package/esm2015/lib/groups/services/active-group.service.js +88 -0
  214. package/esm2015/lib/groups/services/next-group.service.js +104 -0
  215. package/esm2015/lib/header/abstract-header-service.js +394 -0
  216. package/esm2015/lib/header/abstract-header.component.js +159 -0
  217. package/esm2015/lib/header/case-header/case-header.service.js +81 -0
  218. package/esm2015/lib/header/case-header/case-menta-enum.js +9 -0
  219. package/esm2015/lib/header/header-modes/abstract-header-mode.component.js +12 -0
  220. package/esm2015/lib/header/header-modes/edit-mode/abstract-edit-mode.component.js +73 -0
  221. package/esm2015/lib/header/header-modes/loading-mode/abstract-loading-mode.component.js +13 -0
  222. package/esm2015/lib/header/header-modes/search-mode/abstract-search-mode.component.js +86 -0
  223. package/esm2015/lib/header/header-modes/sort-mode/abstract-sort-mode.component.js +15 -0
  224. package/esm2015/lib/header/header-state.js +43 -0
  225. package/esm2015/lib/header/models/default-headers-token.js +3 -0
  226. package/esm2015/lib/header/models/fields-group.js +2 -0
  227. package/esm2015/lib/header/models/header-column.js +22 -0
  228. package/esm2015/lib/header/models/header-mode.js +7 -0
  229. package/esm2015/lib/header/models/header-type.js +7 -0
  230. package/esm2015/lib/header/models/public-api.js +12 -0
  231. package/esm2015/lib/header/models/user-changes/column-header-change.js +2 -0
  232. package/esm2015/lib/header/models/user-changes/edit-change-description.js +2 -0
  233. package/esm2015/lib/header/models/user-changes/header-change-description.js +2 -0
  234. package/esm2015/lib/header/models/user-changes/header-change-type.js +20 -0
  235. package/esm2015/lib/header/models/user-changes/header-change.js +2 -0
  236. package/esm2015/lib/header/models/user-changes/mode-change-description.js +2 -0
  237. package/esm2015/lib/header/models/user-changes/search-change-description.js +2 -0
  238. package/esm2015/lib/header/models/user-changes/sort-change-description.js +2 -0
  239. package/esm2015/lib/header/public-api.js +21 -0
  240. package/esm2015/lib/header/services/overflow.service.js +94 -0
  241. package/esm2015/lib/header/task-header/task-header.service.js +66 -0
  242. package/esm2015/lib/header/task-header/task-meta-enum.js +11 -0
  243. package/esm2015/lib/header/workflow-header/workflow-header.service.js +48 -0
  244. package/esm2015/lib/header/workflow-header/workflow-meta-enum.js +10 -0
  245. package/esm2015/lib/legal/legal-notice/abstract-legal-notice.component.js +16 -0
  246. package/esm2015/lib/legal/public-api.js +2 -0
  247. package/esm2015/lib/logger/models/log-entry.js +61 -0
  248. package/esm2015/lib/logger/public-api.js +10 -0
  249. package/esm2015/lib/logger/publishers/console-log-publisher.js +32 -0
  250. package/esm2015/lib/logger/publishers/local-storage-log-publisher.js +40 -0
  251. package/esm2015/lib/logger/publishers/log-publisher.js +12 -0
  252. package/esm2015/lib/logger/services/log-level.js +10 -0
  253. package/esm2015/lib/logger/services/log-publisher.service.js +59 -0
  254. package/esm2015/lib/logger/services/logger.service.js +77 -0
  255. package/esm2015/lib/material/material.module.js +108 -0
  256. package/esm2015/lib/moment/public-api.js +2 -0
  257. package/esm2015/lib/moment/time-formats.js +26 -0
  258. package/esm2015/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.js +36 -0
  259. package/esm2015/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.js +34 -0
  260. package/esm2015/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.js +5 -0
  261. package/esm2015/lib/navigation/model/filter-case-injection-token.js +6 -0
  262. package/esm2015/lib/navigation/model/group-navigation-component-resolver-component-injection-token.js +6 -0
  263. package/esm2015/lib/navigation/model/group-navigation-constants.js +59 -0
  264. package/esm2015/lib/navigation/model/group-navigation-item-label.js +2 -0
  265. package/esm2015/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.js +131 -0
  266. package/esm2015/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.js +14 -0
  267. package/esm2015/lib/navigation/navigation-rail/abstract-navigation-rail.component.js +32 -0
  268. package/esm2015/lib/navigation/navigation-tree/abstract-navigation-tree.component.js +371 -0
  269. package/esm2015/lib/navigation/public-api.js +19 -0
  270. package/esm2015/lib/navigation/quick-panel/components/abstract-quick-panel.component.js +25 -0
  271. package/esm2015/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.js +12 -0
  272. package/esm2015/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.js +52 -0
  273. package/esm2015/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.js +21 -0
  274. package/esm2015/lib/navigation/quick-panel/components/paper-view.service.js +38 -0
  275. package/esm2015/lib/navigation/quick-panel/public-api.js +8 -0
  276. package/esm2015/lib/navigation/utility/filter-extraction.service.js +87 -0
  277. package/esm2015/lib/navigation/utility/navigation-item-task-utility-methods.js +78 -0
  278. package/esm2015/lib/panel/abstract/featured-value.js +2 -0
  279. package/esm2015/lib/panel/abstract/panel-with-header-binding.js +47 -0
  280. package/esm2015/lib/panel/abstract/panel-with-immediate-data.js +62 -0
  281. package/esm2015/lib/panel/abstract/tabbed-virtual-scroll.component.js +28 -0
  282. package/esm2015/lib/panel/abstract-panel.component.js +44 -0
  283. package/esm2015/lib/panel/case-panel/abstract-case-panel.component.js +88 -0
  284. package/esm2015/lib/panel/immediate/abstract-immediate-filter-text-content.component.js +38 -0
  285. package/esm2015/lib/panel/immediate/abstract-immediate-filter-text.component.js +21 -0
  286. package/esm2015/lib/panel/immediate/model/filter-text-injection-token.js +6 -0
  287. package/esm2015/lib/panel/public-api.js +15 -0
  288. package/esm2015/lib/panel/task-panel/abstract-task-panel.component.js +281 -0
  289. package/esm2015/lib/panel/task-panel/models/disable-functions.js +3 -0
  290. package/esm2015/lib/panel/task-panel-list/abstract-task-list.component.js +89 -0
  291. package/esm2015/lib/panel/task-panel-list/task-panel-data/task-panel-data.js +2 -0
  292. package/esm2015/lib/panel/workflow-panel/abstract-workflow-panel.component.js +103 -0
  293. package/esm2015/lib/process/net.js +101 -0
  294. package/esm2015/lib/process/netRole.js +2 -0
  295. package/esm2015/lib/process/permissions.js +12 -0
  296. package/esm2015/lib/process/petri-net-reference-with-permissions.js +2 -0
  297. package/esm2015/lib/process/process.service.js +301 -0
  298. package/esm2015/lib/process/public-api.js +8 -0
  299. package/esm2015/lib/process/public-process.service.js +29 -0
  300. package/esm2015/lib/process/rolesAndPermissions.js +2 -0
  301. package/esm2015/lib/process/transaction.js +2 -0
  302. package/esm2015/lib/process/transition.js +2 -0
  303. package/esm2015/lib/public/factories/get-net-and-create-case.js +22 -0
  304. package/esm2015/lib/public/factories/public-factory-resolver.js +13 -0
  305. package/esm2015/lib/public/factories/public-search-factory.js +17 -0
  306. package/esm2015/lib/public/public-api.js +5 -0
  307. package/esm2015/lib/public/services/public-url-resolver.service.js +20 -0
  308. package/esm2015/lib/resources/abstract-endpoint/abstract-resource.service.js +79 -0
  309. package/esm2015/lib/resources/abstract-endpoint/count-service.js +2 -0
  310. package/esm2015/lib/resources/engine-endpoint/case-resource.service.js +133 -0
  311. package/esm2015/lib/resources/engine-endpoint/dashboard-resource.service.js +33 -0
  312. package/esm2015/lib/resources/engine-endpoint/petri-net-resource.service.js +161 -0
  313. package/esm2015/lib/resources/engine-endpoint/public/public-case-resource.service.js +46 -0
  314. package/esm2015/lib/resources/engine-endpoint/public/public-petri-net-resource.service.js +108 -0
  315. package/esm2015/lib/resources/engine-endpoint/public/public-task-resource.service.js +224 -0
  316. package/esm2015/lib/resources/engine-endpoint/task-resource.service.js +306 -0
  317. package/esm2015/lib/resources/engine-endpoint/user-resource.service.js +191 -0
  318. package/esm2015/lib/resources/interface/assigned-user-policy.js +2 -0
  319. package/esm2015/lib/resources/interface/author.js +2 -0
  320. package/esm2015/lib/resources/interface/authority.js +2 -0
  321. package/esm2015/lib/resources/interface/case-get-request-body.js +2 -0
  322. package/esm2015/lib/resources/interface/case.js +2 -0
  323. package/esm2015/lib/resources/interface/changed-field-container.js +2 -0
  324. package/esm2015/lib/resources/interface/count.js +2 -0
  325. package/esm2015/lib/resources/interface/create-case-request-body.js +2 -0
  326. package/esm2015/lib/resources/interface/data-group-layout.js +59 -0
  327. package/esm2015/lib/resources/interface/data-groups.js +19 -0
  328. package/esm2015/lib/resources/interface/event-outcome.js +2 -0
  329. package/esm2015/lib/resources/interface/field-alignment.js +10 -0
  330. package/esm2015/lib/resources/interface/fields.js +2 -0
  331. package/esm2015/lib/resources/interface/file-resource.js +2 -0
  332. package/esm2015/lib/resources/interface/group.js +2 -0
  333. package/esm2015/lib/resources/interface/immediate-data.js +2 -0
  334. package/esm2015/lib/resources/interface/link.js +2 -0
  335. package/esm2015/lib/resources/interface/message-resource.js +2 -0
  336. package/esm2015/lib/resources/interface/page.js +2 -0
  337. package/esm2015/lib/resources/interface/pagination.js +2 -0
  338. package/esm2015/lib/resources/interface/petri-net-object-id.js +2 -0
  339. package/esm2015/lib/resources/interface/petri-net-reference.js +2 -0
  340. package/esm2015/lib/resources/interface/petri-net-request-body.js +2 -0
  341. package/esm2015/lib/resources/interface/petri-net.js +2 -0
  342. package/esm2015/lib/resources/interface/preferences.js +2 -0
  343. package/esm2015/lib/resources/interface/process-role.js +2 -0
  344. package/esm2015/lib/resources/interface/response-data.js +2 -0
  345. package/esm2015/lib/resources/interface/task-layout.js +2 -0
  346. package/esm2015/lib/resources/interface/task-reference.js +2 -0
  347. package/esm2015/lib/resources/interface/task-set-data-request-body.js +2 -0
  348. package/esm2015/lib/resources/interface/task.js +2 -0
  349. package/esm2015/lib/resources/interface/user-process-role.js +2 -0
  350. package/esm2015/lib/resources/interface/user-resource-small.js +2 -0
  351. package/esm2015/lib/resources/interface/user-resource.js +2 -0
  352. package/esm2015/lib/resources/public-api.js +46 -0
  353. package/esm2015/lib/resources/resource-provider.service.js +168 -0
  354. package/esm2015/lib/resources/types/nae-date-type.js +5 -0
  355. package/esm2015/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.js +36 -0
  356. package/esm2015/lib/routing/public-api.js +7 -0
  357. package/esm2015/lib/routing/redirect-service/redirect.service.js +103 -0
  358. package/esm2015/lib/routing/routing-builder/routing-builder.service.js +190 -0
  359. package/esm2015/lib/routing/view-service/model/view-entry.js +2 -0
  360. package/esm2015/lib/routing/view-service/view.service.js +35 -0
  361. package/esm2015/lib/search/advanced-search-component/abstract-advanced-search.component.js +49 -0
  362. package/esm2015/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.js +34 -0
  363. package/esm2015/lib/search/category-factory/category-factory.js +94 -0
  364. package/esm2015/lib/search/category-factory/category-resolver.service.js +149 -0
  365. package/esm2015/lib/search/category-factory/category-serialisation-pair.js +2 -0
  366. package/esm2015/lib/search/category-factory/default-categories-factories.js +67 -0
  367. package/esm2015/lib/search/category-factory/default-search-categories.module.js +50 -0
  368. package/esm2015/lib/search/category-factory/optional-dependencies.js +2 -0
  369. package/esm2015/lib/search/category-factory/search-categories-injection-token.js +24 -0
  370. package/esm2015/lib/search/fulltext-search-component/abstract-fulltext-search.component.js +17 -0
  371. package/esm2015/lib/search/header-search-service/header-search.service.js +226 -0
  372. package/esm2015/lib/search/models/base-filter-injection-token.js +6 -0
  373. package/esm2015/lib/search/models/base-filter.js +2 -0
  374. package/esm2015/lib/search/models/boolean-operator.js +10 -0
  375. package/esm2015/lib/search/models/category/autocomplete-category.js +129 -0
  376. package/esm2015/lib/search/models/category/autocomplete-options.js +2 -0
  377. package/esm2015/lib/search/models/category/case/case-author.js +21 -0
  378. package/esm2015/lib/search/models/category/case/case-creation-date-time.js +43 -0
  379. package/esm2015/lib/search/models/category/case/case-creation-date.js +43 -0
  380. package/esm2015/lib/search/models/category/case/case-dataset.js +397 -0
  381. package/esm2015/lib/search/models/category/case/case-net-attribute-autocomplete-category.js +23 -0
  382. package/esm2015/lib/search/models/category/case/case-process.js +73 -0
  383. package/esm2015/lib/search/models/category/case/case-role.js +24 -0
  384. package/esm2015/lib/search/models/category/case/case-search.enum.js +15 -0
  385. package/esm2015/lib/search/models/category/case/case-simple-dataset.js +135 -0
  386. package/esm2015/lib/search/models/category/case/case-string-id.js +27 -0
  387. package/esm2015/lib/search/models/category/case/case-task.js +24 -0
  388. package/esm2015/lib/search/models/category/case/case-title.js +29 -0
  389. package/esm2015/lib/search/models/category/case/case-visual-id.js +23 -0
  390. package/esm2015/lib/search/models/category/categories.js +24 -0
  391. package/esm2015/lib/search/models/category/category.js +524 -0
  392. package/esm2015/lib/search/models/category/name-id-pair.js +2 -0
  393. package/esm2015/lib/search/models/category/net-attribute-autocomplete-category.js +59 -0
  394. package/esm2015/lib/search/models/category/net-attribute-pair.js +2 -0
  395. package/esm2015/lib/search/models/category/no-configuration-autocomplete-category.js +36 -0
  396. package/esm2015/lib/search/models/category/no-configuration-category.js +39 -0
  397. package/esm2015/lib/search/models/category/no-configuration-user-autocomplete-category.js +28 -0
  398. package/esm2015/lib/search/models/category/search-autocomplete-option.js +2 -0
  399. package/esm2015/lib/search/models/category/search-input-type.js +14 -0
  400. package/esm2015/lib/search/models/category/task/task-assignee.js +21 -0
  401. package/esm2015/lib/search/models/category/task/task-net-attribute-autocomplete-category.js +23 -0
  402. package/esm2015/lib/search/models/category/task/task-process.js +50 -0
  403. package/esm2015/lib/search/models/category/task/task-role.js +23 -0
  404. package/esm2015/lib/search/models/category/task/task-task.js +23 -0
  405. package/esm2015/lib/search/models/category/user-autocomplete.js +59 -0
  406. package/esm2015/lib/search/models/component-configuration/search-component-configuration-injection-token.js +8 -0
  407. package/esm2015/lib/search/models/component-configuration/search-component-configuration.js +2 -0
  408. package/esm2015/lib/search/models/component-configuration/search-mode.js +9 -0
  409. package/esm2015/lib/search/models/configuration-input.js +52 -0
  410. package/esm2015/lib/search/models/datafield-map-key.js +69 -0
  411. package/esm2015/lib/search/models/escape-result.js +2 -0
  412. package/esm2015/lib/search/models/operator/equals-date-time.js +26 -0
  413. package/esm2015/lib/search/models/operator/equals-date.js +26 -0
  414. package/esm2015/lib/search/models/operator/equals.js +21 -0
  415. package/esm2015/lib/search/models/operator/in-range-date-time.js +43 -0
  416. package/esm2015/lib/search/models/operator/in-range-date.js +42 -0
  417. package/esm2015/lib/search/models/operator/in-range.js +22 -0
  418. package/esm2015/lib/search/models/operator/is-null.js +69 -0
  419. package/esm2015/lib/search/models/operator/less-than-date-time.js +27 -0
  420. package/esm2015/lib/search/models/operator/less-than-date.js +27 -0
  421. package/esm2015/lib/search/models/operator/less-than-equal-date-time.js +27 -0
  422. package/esm2015/lib/search/models/operator/less-than-equal-date.js +26 -0
  423. package/esm2015/lib/search/models/operator/less-than-equal.js +17 -0
  424. package/esm2015/lib/search/models/operator/less-than.js +17 -0
  425. package/esm2015/lib/search/models/operator/like.js +29 -0
  426. package/esm2015/lib/search/models/operator/more-than-date-time.js +29 -0
  427. package/esm2015/lib/search/models/operator/more-than-date.js +29 -0
  428. package/esm2015/lib/search/models/operator/more-than-equal-date-time.js +27 -0
  429. package/esm2015/lib/search/models/operator/more-than-equal-date.js +27 -0
  430. package/esm2015/lib/search/models/operator/more-than-equal.js +17 -0
  431. package/esm2015/lib/search/models/operator/more-than.js +17 -0
  432. package/esm2015/lib/search/models/operator/not-equals-date-time.js +24 -0
  433. package/esm2015/lib/search/models/operator/not-equals-date.js +27 -0
  434. package/esm2015/lib/search/models/operator/not-equals.js +30 -0
  435. package/esm2015/lib/search/models/operator/operator.js +124 -0
  436. package/esm2015/lib/search/models/operator/operators.js +31 -0
  437. package/esm2015/lib/search/models/operator/substring.js +27 -0
  438. package/esm2015/lib/search/models/operator-template-part-type.js +15 -0
  439. package/esm2015/lib/search/models/operator-template-part.js +31 -0
  440. package/esm2015/lib/search/models/persistance/filter-metadata-allowed-nets.js +2 -0
  441. package/esm2015/lib/search/models/persistance/filter-metadata.js +2 -0
  442. package/esm2015/lib/search/models/persistance/filter-text-segment.js +2 -0
  443. package/esm2015/lib/search/models/persistance/generator-metadata.js +2 -0
  444. package/esm2015/lib/search/models/persistance/saved-filter-metadata.js +2 -0
  445. package/esm2015/lib/search/models/predicate/clause-predicate.js +78 -0
  446. package/esm2015/lib/search/models/predicate/editable-clause-predicate-with-generators.js +47 -0
  447. package/esm2015/lib/search/models/predicate/editable-clause-predicate.js +116 -0
  448. package/esm2015/lib/search/models/predicate/editable-elementary-predicate.js +20 -0
  449. package/esm2015/lib/search/models/predicate/editable-predicate-with-generator.js +37 -0
  450. package/esm2015/lib/search/models/predicate/editable-predicate.js +22 -0
  451. package/esm2015/lib/search/models/predicate/elementary-predicate.js +14 -0
  452. package/esm2015/lib/search/models/predicate/predicate-with-generator.js +95 -0
  453. package/esm2015/lib/search/models/predicate/predicate.js +90 -0
  454. package/esm2015/lib/search/models/predicate-removal-event.js +2 -0
  455. package/esm2015/lib/search/models/query/query.js +72 -0
  456. package/esm2015/lib/search/models/search-index.js +76 -0
  457. package/esm2015/lib/search/models/wrap-result.js +2 -0
  458. package/esm2015/lib/search/operator-service/operator-resolver.service.js +109 -0
  459. package/esm2015/lib/search/operator-service/operator.service.js +39 -0
  460. package/esm2015/lib/search/public-api.js +107 -0
  461. package/esm2015/lib/search/search-clause-component/abstract-search-clause.component.js +52 -0
  462. package/esm2015/lib/search/search-component/abstract-search.component.js +171 -0
  463. package/esm2015/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.js +75 -0
  464. package/esm2015/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +36 -0
  465. package/esm2015/lib/search/search-operand-input-component/abstract-search-operand-input.component.js +97 -0
  466. package/esm2015/lib/search/search-predicate-component/abstract-search-predicate.component.js +144 -0
  467. package/esm2015/lib/search/search-service/search.service.js +306 -0
  468. package/esm2015/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.js +163 -0
  469. package/esm2015/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.js +22 -0
  470. package/esm2015/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.js +2 -0
  471. package/esm2015/lib/side-menu/content-components/filter-selector/model/filtered-array.js +32 -0
  472. package/esm2015/lib/side-menu/content-components/import-net/abstract-import-net.component.js +123 -0
  473. package/esm2015/lib/side-menu/content-components/injection-tokens.js +8 -0
  474. package/esm2015/lib/side-menu/content-components/load-filter/abstract-load-filter.component.js +42 -0
  475. package/esm2015/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.js +2 -0
  476. package/esm2015/lib/side-menu/content-components/new-case/abstract-new-case.component.js +230 -0
  477. package/esm2015/lib/side-menu/content-components/new-case/model/new-case-injection-data.js +2 -0
  478. package/esm2015/lib/side-menu/content-components/option-selector/abstract-option-selector.component.js +28 -0
  479. package/esm2015/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.js +2 -0
  480. package/esm2015/lib/side-menu/content-components/public-api.js +20 -0
  481. package/esm2015/lib/side-menu/content-components/save-filter/abstract-save-filter.component.js +38 -0
  482. package/esm2015/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.js +2 -0
  483. package/esm2015/lib/side-menu/content-components/user-assign/abstract-user-assign.component.js +60 -0
  484. package/esm2015/lib/side-menu/content-components/user-assign/model/user-list-injected-data.js +2 -0
  485. package/esm2015/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.js +102 -0
  486. package/esm2015/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.js +13 -0
  487. package/esm2015/lib/side-menu/models/portal-wrapper.js +13 -0
  488. package/esm2015/lib/side-menu/models/side-menu-control.js +36 -0
  489. package/esm2015/lib/side-menu/models/side-menu-event.js +2 -0
  490. package/esm2015/lib/side-menu/models/side-menu-injection-data.js +2 -0
  491. package/esm2015/lib/side-menu/models/side-menu-ref.js +16 -0
  492. package/esm2015/lib/side-menu/models/side-menu-size.js +7 -0
  493. package/esm2015/lib/side-menu/net-version-visible-injection-token.js +4 -0
  494. package/esm2015/lib/side-menu/public-api.js +15 -0
  495. package/esm2015/lib/side-menu/services/side-menu.service.js +86 -0
  496. package/esm2015/lib/side-menu/side-menu-container/abstract-side-menu-container.component.js +34 -0
  497. package/esm2015/lib/side-menu/side-menu-injection-token.js +3 -0
  498. package/esm2015/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.js +26 -0
  499. package/esm2015/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.js +26 -0
  500. package/esm2015/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.js +26 -0
  501. package/esm2015/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.js +26 -0
  502. package/esm2015/lib/snack-bar/models/abstract-snack-bar.js +18 -0
  503. package/esm2015/lib/snack-bar/models/injection-token-snackbar.js +4 -0
  504. package/esm2015/lib/snack-bar/models/snack-bar-enums.js +12 -0
  505. package/esm2015/lib/snack-bar/models/snack-bar-injection-data.js +2 -0
  506. package/esm2015/lib/snack-bar/public-api.js +15 -0
  507. package/esm2015/lib/snack-bar/services/snack-bar.service.js +92 -0
  508. package/esm2015/lib/snack-bar/snack-bar.module.js +33 -0
  509. package/esm2015/lib/tabs/classes/opened-tab.js +48 -0
  510. package/esm2015/lib/tabs/classes/tab-view.js +262 -0
  511. package/esm2015/lib/tabs/interfaces.js +2 -0
  512. package/esm2015/lib/tabs/public-api.js +6 -0
  513. package/esm2015/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.js +17 -0
  514. package/esm2015/lib/tabs/tab-data-injection-token/tab-data-injection-token.js +8 -0
  515. package/esm2015/lib/tabs/tab-view/abstract-tab-view.component.js +67 -0
  516. package/esm2015/lib/task/interfaces/task-operations.js +2 -0
  517. package/esm2015/lib/task/models/null-task-operations.js +26 -0
  518. package/esm2015/lib/task/models/subject-task-operations.js +58 -0
  519. package/esm2015/lib/task/models/task-operations-injection-token.js +3 -0
  520. package/esm2015/lib/task/models/task-set-data-request-context.js +2 -0
  521. package/esm2015/lib/task/public-api.js +19 -0
  522. package/esm2015/lib/task/services/assign-policy.service.js +175 -0
  523. package/esm2015/lib/task/services/assign-task.service.js +191 -0
  524. package/esm2015/lib/task/services/cancel-task.service.js +189 -0
  525. package/esm2015/lib/task/services/data-focus-policy.service.js +36 -0
  526. package/esm2015/lib/task/services/delegate-task.service.js +185 -0
  527. package/esm2015/lib/task/services/finish-policy.service.js +79 -0
  528. package/esm2015/lib/task/services/finish-task.service.js +207 -0
  529. package/esm2015/lib/task/services/selected-case.service.js +38 -0
  530. package/esm2015/lib/task/services/task-data.service.js +538 -0
  531. package/esm2015/lib/task/services/task-handling-service.js +57 -0
  532. package/esm2015/lib/task/services/task-request-state.service.js +113 -0
  533. package/esm2015/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.js +39 -0
  534. package/esm2015/lib/task-content/model/async-rendering-configuration-injection-token.js +8 -0
  535. package/esm2015/lib/task-content/model/async-rendering-configuration.js +2 -0
  536. package/esm2015/lib/task-content/model/datafield-grid-layout-element.js +2 -0
  537. package/esm2015/lib/task-content/model/field-type-resource.js +23 -0
  538. package/esm2015/lib/task-content/model/policy.js +31 -0
  539. package/esm2015/lib/task-content/model/resource-interface.js +2 -0
  540. package/esm2015/lib/task-content/model/split-data-group.js +2 -0
  541. package/esm2015/lib/task-content/model/subgrid.js +235 -0
  542. package/esm2015/lib/task-content/model/task-content-element-type.js +19 -0
  543. package/esm2015/lib/task-content/model/task-event-notification.js +15 -0
  544. package/esm2015/lib/task-content/model/task-event.js +10 -0
  545. package/esm2015/lib/task-content/public-api.js +21 -0
  546. package/esm2015/lib/task-content/services/field-converter.service.js +348 -0
  547. package/esm2015/lib/task-content/services/single-task-content.service.js +72 -0
  548. package/esm2015/lib/task-content/services/task-content.service.js +266 -0
  549. package/esm2015/lib/task-content/services/task-event.service.js +45 -0
  550. package/esm2015/lib/task-content/services/unlimited-task-content.service.js +64 -0
  551. package/esm2015/lib/task-content/task-content/abstract-task-content.component.js +656 -0
  552. package/esm2015/lib/toolbar/abstract-toolbar.component.js +22 -0
  553. package/esm2015/lib/toolbar/public-api.js +2 -0
  554. package/esm2015/lib/translate/language.service.js +85 -0
  555. package/esm2015/lib/translate/public-api.js +3 -0
  556. package/esm2015/lib/translate/translate-interceptor.js +23 -0
  557. package/esm2015/lib/translate/translate-lib.module.js +38 -0
  558. package/esm2015/lib/user/components/user-card/abstract-user-card.component.js +44 -0
  559. package/esm2015/lib/user/models/iuser.js +2 -0
  560. package/esm2015/lib/user/models/public-api.js +6 -0
  561. package/esm2015/lib/user/models/user.js +37 -0
  562. package/esm2015/lib/user/models/view-id-injection-tokens.js +4 -0
  563. package/esm2015/lib/user/profile/abstract-profile.component.js +29 -0
  564. package/esm2015/lib/user/public-api.js +12 -0
  565. package/esm2015/lib/user/services/user-comparator.service.js +26 -0
  566. package/esm2015/lib/user/services/user-list.service.js +186 -0
  567. package/esm2015/lib/user/services/user-preference.service.js +152 -0
  568. package/esm2015/lib/user/services/user.service.js +203 -0
  569. package/esm2015/lib/user/services/view-id.service.js +30 -0
  570. package/esm2015/lib/utility/array-to-observable.js +10 -0
  571. package/esm2015/lib/utility/call-chain/after-action.js +12 -0
  572. package/esm2015/lib/utility/call-chain/call-chain.service.js +34 -0
  573. package/esm2015/lib/utility/clear-time-information.js +11 -0
  574. package/esm2015/lib/utility/destroy-subscription.js +10 -0
  575. package/esm2015/lib/utility/get-field.js +48 -0
  576. package/esm2015/lib/utility/get-immediate-data.js +9 -0
  577. package/esm2015/lib/utility/grid-layout/grid-layout-helper.js +76 -0
  578. package/esm2015/lib/utility/grid-layout/model/grid-element-with-item.js +2 -0
  579. package/esm2015/lib/utility/grid-layout/model/grid-element.js +2 -0
  580. package/esm2015/lib/utility/grid-layout/model/grid-filler.js +50 -0
  581. package/esm2015/lib/utility/incrementing-counter.js +21 -0
  582. package/esm2015/lib/utility/loading-emitter.js +19 -0
  583. package/esm2015/lib/utility/loading-with-filter-emitter.js +30 -0
  584. package/esm2015/lib/utility/navigation-item-task-filter-factory.js +11 -0
  585. package/esm2015/lib/utility/navigation-item-task-search-categories-factory.js +35 -0
  586. package/esm2015/lib/utility/of-void.js +12 -0
  587. package/esm2015/lib/utility/pagination/load-all-pages.js +46 -0
  588. package/esm2015/lib/utility/pagination/page-has-content.js +8 -0
  589. package/esm2015/lib/utility/process-message-response.js +17 -0
  590. package/esm2015/lib/utility/public-api.js +47 -0
  591. package/esm2015/lib/utility/refresh-tree.js +9 -0
  592. package/esm2015/lib/utility/result-with-after-actions.js +27 -0
  593. package/esm2015/lib/utility/service/case-list-font-color.service.js +45 -0
  594. package/esm2015/lib/utility/service/spinner-overlay.service.js +48 -0
  595. package/esm2015/lib/utility/stop-propagation.js +5 -0
  596. package/esm2015/lib/utility/tests/mocks/mock-authentication-method-service.js +12 -0
  597. package/esm2015/lib/utility/tests/mocks/mock-authentication.service.js +18 -0
  598. package/esm2015/lib/utility/tests/mocks/mock-endpoint.js +44 -0
  599. package/esm2015/lib/utility/tests/mocks/mock-sign-up.service.js +29 -0
  600. package/esm2015/lib/utility/tests/mocks/mock-user-autocomplete-value.js +14 -0
  601. package/esm2015/lib/utility/tests/mocks/mock-user-preference.service.js +42 -0
  602. package/esm2015/lib/utility/tests/mocks/mock-user-resource.service.js +48 -0
  603. package/esm2015/lib/utility/tests/search-category-mock-dependencies.js +19 -0
  604. package/esm2015/lib/utility/tests/test-config.js +424 -0
  605. package/esm2015/lib/utility/tests/test-factory-methods.js +21 -0
  606. package/esm2015/lib/utility/tests/test-mock-dependencies.module.js +31 -0
  607. package/esm2015/lib/utility/tests/test-view-service.js +24 -0
  608. package/esm2015/lib/utility/tests/utility/configure-category.js +14 -0
  609. package/esm2015/lib/utility/tests/utility/create-mock-case-outcome.js +16 -0
  610. package/esm2015/lib/utility/tests/utility/create-mock-case.js +36 -0
  611. package/esm2015/lib/utility/tests/utility/create-mock-datagroup.js +35 -0
  612. package/esm2015/lib/utility/tests/utility/create-mock-field.js +41 -0
  613. package/esm2015/lib/utility/tests/utility/create-mock-get-data-outcome.js +15 -0
  614. package/esm2015/lib/utility/tests/utility/create-mock-immediate-data.js +15 -0
  615. package/esm2015/lib/utility/tests/utility/create-mock-net.js +27 -0
  616. package/esm2015/lib/utility/tests/utility/create-mock-page.js +23 -0
  617. package/esm2015/lib/utility/tests/utility/create-mock-petri-net-outcome.js +14 -0
  618. package/esm2015/lib/utility/tests/utility/create-mock-set-data-outcome.js +19 -0
  619. package/esm2015/lib/utility/tests/utility/create-mock-task-outcome.js +18 -0
  620. package/esm2015/lib/utility/tests/utility/create-mock-task.js +34 -0
  621. package/esm2015/lib/view/abstract/page-load-request-context.js +25 -0
  622. package/esm2015/lib/view/abstract/sortable-view.js +62 -0
  623. package/esm2015/lib/view/abstract/view-with-headers.js +20 -0
  624. package/esm2015/lib/view/case-view/abstract-case-view.js +40 -0
  625. package/esm2015/lib/view/case-view/components/case-list/abstract-case-list.component.js +82 -0
  626. package/esm2015/lib/view/case-view/models/case-page-load-request-result.js +2 -0
  627. package/esm2015/lib/view/case-view/models/case-view-params.js +2 -0
  628. package/esm2015/lib/view/case-view/models/new-case-configuration-injection-token.js +7 -0
  629. package/esm2015/lib/view/case-view/models/new-case-configuration.js +2 -0
  630. package/esm2015/lib/view/case-view/service/case-view-service.js +273 -0
  631. package/esm2015/lib/view/case-view/tabbed-case-view.js +66 -0
  632. package/esm2015/lib/view/public-api.js +42 -0
  633. package/esm2015/lib/view/task-view/abstract-task-view.js +13 -0
  634. package/esm2015/lib/view/task-view/models/injected-tabbed-task-view-data.js +2 -0
  635. package/esm2015/lib/view/task-view/models/injection-token-task-endpoint.js +6 -0
  636. package/esm2015/lib/view/task-view/models/task-endpoint.js +9 -0
  637. package/esm2015/lib/view/task-view/models/task-page-load-request-result.js +2 -0
  638. package/esm2015/lib/view/task-view/models/task-view-configuration-injection-token.js +20 -0
  639. package/esm2015/lib/view/task-view/models/task-view-configuration.js +2 -0
  640. package/esm2015/lib/view/task-view/models/task-view-params.js +2 -0
  641. package/esm2015/lib/view/task-view/service/task-view.service.js +292 -0
  642. package/esm2015/lib/view/task-view/tabbed-task-view.js +22 -0
  643. package/esm2015/lib/view/tree-case-view/model/tree-petriflow-identifiers.js +43 -0
  644. package/esm2015/lib/view/tree-case-view/tree-case-view.service.js +17 -0
  645. package/esm2015/lib/view/tree-case-view/tree-component/abstract-tree.component.js +141 -0
  646. package/esm2015/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.js +14 -0
  647. package/esm2015/lib/view/tree-case-view/tree-component/case-tree.service.js +843 -0
  648. package/esm2015/lib/view/tree-case-view/tree-component/model/case-tree-node.js +104 -0
  649. package/esm2015/lib/view/tree-case-view/tree-component/model/case-tree-path.js +2 -0
  650. package/esm2015/lib/view/tree-case-view/tree-component/model/expansion-tree.js +2 -0
  651. package/esm2015/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.js +14 -0
  652. package/esm2015/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.js +55 -0
  653. package/esm2015/lib/view/tree-case-view/tree-task-content/tree-task-content.service.js +288 -0
  654. package/esm2015/lib/view/workflow-view/abstract-workflow-view.component.js +68 -0
  655. package/esm2015/lib/view/workflow-view/models/injection-token-workflow-service.js +10 -0
  656. package/esm2015/lib/view/workflow-view/workflow-view.service.js +211 -0
  657. package/esm2015/netgrif-components-core.js +20 -0
  658. package/esm2015/public-api.js +45 -0
  659. package/esm5/assets/i18n/de.json +419 -0
  660. package/esm5/assets/i18n/en.json +419 -0
  661. package/esm5/assets/i18n/sk.json +419 -0
  662. package/esm5/commons/angular-cli-devkit-core-strings.js +157 -0
  663. package/esm5/commons/import-to-add.js +9 -0
  664. package/esm5/commons/schema.js +7 -0
  665. package/esm5/commons/view-class-info.js +57 -0
  666. package/esm5/lib/admin/public-api.js +9 -0
  667. package/esm5/lib/admin/role-assignment/abstract-role-assignment.js +84 -0
  668. package/esm5/lib/admin/role-assignment/services/ProcessList.js +179 -0
  669. package/esm5/lib/admin/role-assignment/services/role-assignment.service.js +50 -0
  670. package/esm5/lib/admin/user-invite/abstract-user-invite.component.js +84 -0
  671. package/esm5/lib/admin/user-invite/services/organization-list.service.js +82 -0
  672. package/esm5/lib/admin/user-invite/services/user-invite.service.js +37 -0
  673. package/esm5/lib/allowed-nets/public-api.js +4 -0
  674. package/esm5/lib/allowed-nets/services/allowed-nets.service.js +94 -0
  675. package/esm5/lib/allowed-nets/services/base-allowed-nets.service.js +65 -0
  676. package/esm5/lib/allowed-nets/services/factory/allowed-nets-service-factory.js +132 -0
  677. package/esm5/lib/authentication/anonymous/anonymous.service.js +73 -0
  678. package/esm5/lib/authentication/authentication.factory.js +16 -0
  679. package/esm5/lib/authentication/authentication.module.js +36 -0
  680. package/esm5/lib/authentication/components/abstract-authentication-overlay.js +53 -0
  681. package/esm5/lib/authentication/models/credentials.js +2 -0
  682. package/esm5/lib/authentication/models/public-api.js +5 -0
  683. package/esm5/lib/authentication/models/transformer.js +2 -0
  684. package/esm5/lib/authentication/models/user.transformer.js +23 -0
  685. package/esm5/lib/authentication/public-api.js +14 -0
  686. package/esm5/lib/authentication/services/anonymous-authentication-interceptor.js +47 -0
  687. package/esm5/lib/authentication/services/authentication/authentication.service.js +84 -0
  688. package/esm5/lib/authentication/services/authentication-interceptor.js +55 -0
  689. package/esm5/lib/authentication/services/authentication-method.service.js +7 -0
  690. package/esm5/lib/authentication/services/guard/authentication-guard.service.js +41 -0
  691. package/esm5/lib/authentication/services/methods/basic-authentication/basic-authentication.service.js +54 -0
  692. package/esm5/lib/authentication/services/methods/null-authentication/null-authentication.service.js +23 -0
  693. package/esm5/lib/authentication/services/public-api.js +7 -0
  694. package/esm5/lib/authentication/session/null-storage.js +19 -0
  695. package/esm5/lib/authentication/session/public-api.js +3 -0
  696. package/esm5/lib/authentication/session/services/session.service.js +193 -0
  697. package/esm5/lib/authentication/sign-up/models/user-invitation-request.js +2 -0
  698. package/esm5/lib/authentication/sign-up/models/user-registration-request.js +2 -0
  699. package/esm5/lib/authentication/sign-up/public-api.js +8 -0
  700. package/esm5/lib/authentication/sign-up/services/sign-up.service.js +107 -0
  701. package/esm5/lib/authentication/sign-up/sign-up.module.js +17 -0
  702. package/esm5/lib/authorization/authority/authority-guard.service.js +52 -0
  703. package/esm5/lib/authorization/group/group-guard.service.js +69 -0
  704. package/esm5/lib/authorization/permission/permission.service.js +126 -0
  705. package/esm5/lib/authorization/public-api.js +10 -0
  706. package/esm5/lib/authorization/role/role-guard.service.js +108 -0
  707. package/esm5/lib/changed-fields/public-api.js +2 -0
  708. package/esm5/lib/changed-fields/services/changed-fields.service.js +38 -0
  709. package/esm5/lib/configuration/configuration.service.js +208 -0
  710. package/esm5/lib/configuration/public-api.js +3 -0
  711. package/esm5/lib/covalent/covalent.module.js +26 -0
  712. package/esm5/lib/currency/currency.module.js +25 -0
  713. package/esm5/lib/dashboard/cards/count-card/abstract-count-card.js +42 -0
  714. package/esm5/lib/dashboard/cards/custom-card/abstract-custom-card.js +50 -0
  715. package/esm5/lib/dashboard/cards/iframe-card/abstract-iframe-card.js +16 -0
  716. package/esm5/lib/dashboard/cards/model/card-grid-element.js +2 -0
  717. package/esm5/lib/dashboard/cards/model/count-card.js +2 -0
  718. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.js +2 -0
  719. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.js +2 -0
  720. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/custom-card.js +2 -0
  721. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.js +2 -0
  722. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.js +9 -0
  723. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.js +9 -0
  724. package/esm5/lib/dashboard/cards/model/dashboard-card-types.js +13 -0
  725. package/esm5/lib/dashboard/cards/model/dashboard-card.js +2 -0
  726. package/esm5/lib/dashboard/cards/model/graph-card.js +2 -0
  727. package/esm5/lib/dashboard/cards/model/iframe-card.js +2 -0
  728. package/esm5/lib/dashboard/dashboard-content/abstract-dashboard-content.js +21 -0
  729. package/esm5/lib/dashboard/dashboard-content/dashboard-params.js +2 -0
  730. package/esm5/lib/dashboard/public-api.js +20 -0
  731. package/esm5/lib/data-fields/boolean-field/abstract-boolean-field.component.js +45 -0
  732. package/esm5/lib/data-fields/boolean-field/models/boolean-field.js +29 -0
  733. package/esm5/lib/data-fields/button-field/abstract-button-field.component.js +68 -0
  734. package/esm5/lib/data-fields/button-field/models/button-field.js +37 -0
  735. package/esm5/lib/data-fields/data-field-template/abstract-data-field-template.component.js +111 -0
  736. package/esm5/lib/data-fields/data-field-template/models/wrapped-boolean.js +10 -0
  737. package/esm5/lib/data-fields/data-fields.module.js +39 -0
  738. package/esm5/lib/data-fields/date-field/abstract-date-field.component.js +26 -0
  739. package/esm5/lib/data-fields/date-field/models/custom-date-adapter.js +18 -0
  740. package/esm5/lib/data-fields/date-field/models/date-field.js +14 -0
  741. package/esm5/lib/data-fields/date-time-field/abstract-date-time-field.component.js +26 -0
  742. package/esm5/lib/data-fields/date-time-field/models/date-time-field.js +14 -0
  743. package/esm5/lib/data-fields/enumeration-field/abstract-enumeration-field.component.js +22 -0
  744. package/esm5/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.js +47 -0
  745. package/esm5/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.js +57 -0
  746. package/esm5/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.js +39 -0
  747. package/esm5/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.js +15 -0
  748. package/esm5/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.js +15 -0
  749. package/esm5/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.js +43 -0
  750. package/esm5/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.js +63 -0
  751. package/esm5/lib/data-fields/enumeration-field/models/enumeration-field.js +79 -0
  752. package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +405 -0
  753. package/esm5/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.js +2 -0
  754. package/esm5/lib/data-fields/file-field/models/file-field-value.js +2 -0
  755. package/esm5/lib/data-fields/file-field/models/file-field.js +128 -0
  756. package/esm5/lib/data-fields/file-list-field/abstract-file-list-field.component.js +278 -0
  757. package/esm5/lib/data-fields/file-list-field/models/file-list-field-value.js +2 -0
  758. package/esm5/lib/data-fields/file-list-field/models/file-list-field.js +105 -0
  759. package/esm5/lib/data-fields/filter-field/abstract-filter-field-content.component.js +36 -0
  760. package/esm5/lib/data-fields/filter-field/abstract-filter-field.component.js +33 -0
  761. package/esm5/lib/data-fields/filter-field/models/filter-field-injection-token.js +7 -0
  762. package/esm5/lib/data-fields/filter-field/models/filter-field.js +28 -0
  763. package/esm5/lib/data-fields/i18n-field/abstract-i18n-field.component.js +23 -0
  764. package/esm5/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.js +30 -0
  765. package/esm5/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.js +42 -0
  766. package/esm5/lib/data-fields/i18n-field/models/i18n-field-value.js +2 -0
  767. package/esm5/lib/data-fields/i18n-field/models/i18n-field.js +16 -0
  768. package/esm5/lib/data-fields/models/abstract-data-field-component.js +45 -0
  769. package/esm5/lib/data-fields/models/abstract-data-field.js +501 -0
  770. package/esm5/lib/data-fields/models/behavior.js +2 -0
  771. package/esm5/lib/data-fields/models/boolean-label-enabled-token.js +3 -0
  772. package/esm5/lib/data-fields/models/changed-fields.js +2 -0
  773. package/esm5/lib/data-fields/models/component.js +2 -0
  774. package/esm5/lib/data-fields/models/format-filter.js +2 -0
  775. package/esm5/lib/data-fields/models/icon.js +6 -0
  776. package/esm5/lib/data-fields/models/invalid-data-policy-token.js +11 -0
  777. package/esm5/lib/data-fields/models/layout.js +2 -0
  778. package/esm5/lib/data-fields/models/material-appearance.js +14 -0
  779. package/esm5/lib/data-fields/models/properties.js +2 -0
  780. package/esm5/lib/data-fields/models/template-appearance.js +15 -0
  781. package/esm5/lib/data-fields/models/validation.js +2 -0
  782. package/esm5/lib/data-fields/multichoice-field/abstract-multichoice-field.component.js +22 -0
  783. package/esm5/lib/data-fields/multichoice-field/models/multichoice-field.js +60 -0
  784. package/esm5/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.js +13 -0
  785. package/esm5/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.js +13 -0
  786. package/esm5/lib/data-fields/number-field/abstract-number-errors.component.js +49 -0
  787. package/esm5/lib/data-fields/number-field/abstract-number-field.component.js +23 -0
  788. package/esm5/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.js +54 -0
  789. package/esm5/lib/data-fields/number-field/models/number-field.js +137 -0
  790. package/esm5/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.js +11 -0
  791. package/esm5/lib/data-fields/public-api.js +73 -0
  792. package/esm5/lib/data-fields/task-ref-field/model/task-ref-field.js +11 -0
  793. package/esm5/lib/data-fields/text-field/abstract-text-errors.component.js +37 -0
  794. package/esm5/lib/data-fields/text-field/abstract-text-field.component.js +19 -0
  795. package/esm5/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.js +45 -0
  796. package/esm5/lib/data-fields/text-field/models/text-area-field.js +19 -0
  797. package/esm5/lib/data-fields/text-field/models/text-field.js +96 -0
  798. package/esm5/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.js +22 -0
  799. package/esm5/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.js +35 -0
  800. package/esm5/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.js +22 -0
  801. package/esm5/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.js +46 -0
  802. package/esm5/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.js +52 -0
  803. package/esm5/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.js +110 -0
  804. package/esm5/lib/data-fields/user-field/abstract-user-field.component.js +65 -0
  805. package/esm5/lib/data-fields/user-field/models/user-field.js +23 -0
  806. package/esm5/lib/data-fields/user-field/models/user-value.js +58 -0
  807. package/esm5/lib/dialog/components/alert-dialog/alert-dialog.component.js +43 -0
  808. package/esm5/lib/dialog/components/alert-dialog/alert-dialog.module.js +32 -0
  809. package/esm5/lib/dialog/components/confirm-dialog/confirm-dialog.component.js +57 -0
  810. package/esm5/lib/dialog/components/confirm-dialog/confirm-dialog.module.js +32 -0
  811. package/esm5/lib/dialog/components/prompt-dialog/prompt-dialog.component.js +47 -0
  812. package/esm5/lib/dialog/components/prompt-dialog/prompt-dialog.module.js +34 -0
  813. package/esm5/lib/dialog/dialog.module.js +33 -0
  814. package/esm5/lib/dialog/models/DialogData.js +2 -0
  815. package/esm5/lib/dialog/models/DialogResult.js +2 -0
  816. package/esm5/lib/dialog/models/abstract-dialog.js +23 -0
  817. package/esm5/lib/dialog/public-api.js +9 -0
  818. package/esm5/lib/dialog/services/dialog.service.js +84 -0
  819. package/esm5/lib/event/model/event-constants.js +8 -0
  820. package/esm5/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.js +2 -0
  821. package/esm5/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.js +2 -0
  822. package/esm5/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.js +2 -0
  823. package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.js +2 -0
  824. package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.js +2 -0
  825. package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.js +2 -0
  826. package/esm5/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.js +2 -0
  827. package/esm5/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.js +2 -0
  828. package/esm5/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.js +2 -0
  829. package/esm5/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.js +2 -0
  830. package/esm5/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.js +2 -0
  831. package/esm5/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.js +2 -0
  832. package/esm5/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.js +2 -0
  833. package/esm5/lib/event/public-api.js +19 -0
  834. package/esm5/lib/event/services/event.service.js +60 -0
  835. package/esm5/lib/event/services/interfaces/changed-fields-map.js +2 -0
  836. package/esm5/lib/event-queue/model/queued-event.js +34 -0
  837. package/esm5/lib/event-queue/public-api.js +5 -0
  838. package/esm5/lib/event-queue/services/event-queue.service.js +66 -0
  839. package/esm5/lib/filter/filter.repository.js +145 -0
  840. package/esm5/lib/filter/models/case-search-request-body.js +2 -0
  841. package/esm5/lib/filter/models/filter-type.js +11 -0
  842. package/esm5/lib/filter/models/filter.js +71 -0
  843. package/esm5/lib/filter/models/filters-filter-injection-token.js +9 -0
  844. package/esm5/lib/filter/models/merge-operator.js +11 -0
  845. package/esm5/lib/filter/models/merged-filter-params.js +2 -0
  846. package/esm5/lib/filter/models/merged-filter.js +120 -0
  847. package/esm5/lib/filter/models/simple-filter.js +96 -0
  848. package/esm5/lib/filter/models/task-search-request-body.js +2 -0
  849. package/esm5/lib/filter/models/user-filter-constants.js +39 -0
  850. package/esm5/lib/filter/public-api.js +18 -0
  851. package/esm5/lib/filter/user-filters.service.js +357 -0
  852. package/esm5/lib/forms/email-submission/abstract-email-submission-form.component.js +33 -0
  853. package/esm5/lib/forms/forgotten-password/abstract-forgotten-password.component.js +37 -0
  854. package/esm5/lib/forms/has-form.js +2 -0
  855. package/esm5/lib/forms/login/abstract-login-form.component.js +61 -0
  856. package/esm5/lib/forms/models/abstract-registration.component.js +106 -0
  857. package/esm5/lib/forms/models/password.validator.js +21 -0
  858. package/esm5/lib/forms/public-api.js +7 -0
  859. package/esm5/lib/forms/registration/abstract-registration-form.component.js +42 -0
  860. package/esm5/lib/groups/public-api.js +3 -0
  861. package/esm5/lib/groups/services/active-group.service.js +107 -0
  862. package/esm5/lib/groups/services/next-group.service.js +135 -0
  863. package/esm5/lib/header/abstract-header-service.js +485 -0
  864. package/esm5/lib/header/abstract-header.component.js +171 -0
  865. package/esm5/lib/header/case-header/case-header.service.js +86 -0
  866. package/esm5/lib/header/case-header/case-menta-enum.js +9 -0
  867. package/esm5/lib/header/header-modes/abstract-header-mode.component.js +14 -0
  868. package/esm5/lib/header/header-modes/edit-mode/abstract-edit-mode.component.js +81 -0
  869. package/esm5/lib/header/header-modes/loading-mode/abstract-loading-mode.component.js +17 -0
  870. package/esm5/lib/header/header-modes/search-mode/abstract-search-mode.component.js +94 -0
  871. package/esm5/lib/header/header-modes/sort-mode/abstract-sort-mode.component.js +19 -0
  872. package/esm5/lib/header/header-state.js +53 -0
  873. package/esm5/lib/header/models/default-headers-token.js +3 -0
  874. package/esm5/lib/header/models/fields-group.js +2 -0
  875. package/esm5/lib/header/models/header-column.js +29 -0
  876. package/esm5/lib/header/models/header-mode.js +7 -0
  877. package/esm5/lib/header/models/header-type.js +7 -0
  878. package/esm5/lib/header/models/public-api.js +12 -0
  879. package/esm5/lib/header/models/user-changes/column-header-change.js +2 -0
  880. package/esm5/lib/header/models/user-changes/edit-change-description.js +2 -0
  881. package/esm5/lib/header/models/user-changes/header-change-description.js +2 -0
  882. package/esm5/lib/header/models/user-changes/header-change-type.js +20 -0
  883. package/esm5/lib/header/models/user-changes/header-change.js +2 -0
  884. package/esm5/lib/header/models/user-changes/mode-change-description.js +2 -0
  885. package/esm5/lib/header/models/user-changes/search-change-description.js +2 -0
  886. package/esm5/lib/header/models/user-changes/sort-change-description.js +2 -0
  887. package/esm5/lib/header/public-api.js +21 -0
  888. package/esm5/lib/header/services/overflow.service.js +112 -0
  889. package/esm5/lib/header/task-header/task-header.service.js +71 -0
  890. package/esm5/lib/header/task-header/task-meta-enum.js +11 -0
  891. package/esm5/lib/header/workflow-header/workflow-header.service.js +53 -0
  892. package/esm5/lib/header/workflow-header/workflow-meta-enum.js +10 -0
  893. package/esm5/lib/legal/legal-notice/abstract-legal-notice.component.js +26 -0
  894. package/esm5/lib/legal/public-api.js +2 -0
  895. package/esm5/lib/logger/models/log-entry.js +68 -0
  896. package/esm5/lib/logger/public-api.js +10 -0
  897. package/esm5/lib/logger/publishers/console-log-publisher.js +36 -0
  898. package/esm5/lib/logger/publishers/local-storage-log-publisher.js +45 -0
  899. package/esm5/lib/logger/publishers/log-publisher.js +15 -0
  900. package/esm5/lib/logger/services/log-level.js +10 -0
  901. package/esm5/lib/logger/services/log-publisher.service.js +66 -0
  902. package/esm5/lib/logger/services/logger.service.js +107 -0
  903. package/esm5/lib/material/material.module.js +112 -0
  904. package/esm5/lib/moment/public-api.js +2 -0
  905. package/esm5/lib/moment/time-formats.js +26 -0
  906. package/esm5/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.js +40 -0
  907. package/esm5/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.js +37 -0
  908. package/esm5/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.js +5 -0
  909. package/esm5/lib/navigation/model/filter-case-injection-token.js +6 -0
  910. package/esm5/lib/navigation/model/group-navigation-component-resolver-component-injection-token.js +6 -0
  911. package/esm5/lib/navigation/model/group-navigation-constants.js +59 -0
  912. package/esm5/lib/navigation/model/group-navigation-item-label.js +2 -0
  913. package/esm5/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.js +142 -0
  914. package/esm5/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.js +17 -0
  915. package/esm5/lib/navigation/navigation-rail/abstract-navigation-rail.component.js +38 -0
  916. package/esm5/lib/navigation/navigation-tree/abstract-navigation-tree.component.js +415 -0
  917. package/esm5/lib/navigation/public-api.js +19 -0
  918. package/esm5/lib/navigation/quick-panel/components/abstract-quick-panel.component.js +30 -0
  919. package/esm5/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.js +14 -0
  920. package/esm5/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.js +59 -0
  921. package/esm5/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.js +24 -0
  922. package/esm5/lib/navigation/quick-panel/components/paper-view.service.js +44 -0
  923. package/esm5/lib/navigation/quick-panel/public-api.js +8 -0
  924. package/esm5/lib/navigation/utility/filter-extraction.service.js +89 -0
  925. package/esm5/lib/navigation/utility/navigation-item-task-utility-methods.js +78 -0
  926. package/esm5/lib/panel/abstract/featured-value.js +2 -0
  927. package/esm5/lib/panel/abstract/panel-with-header-binding.js +50 -0
  928. package/esm5/lib/panel/abstract/panel-with-immediate-data.js +67 -0
  929. package/esm5/lib/panel/abstract/tabbed-virtual-scroll.component.js +35 -0
  930. package/esm5/lib/panel/abstract-panel.component.js +46 -0
  931. package/esm5/lib/panel/case-panel/abstract-case-panel.component.js +94 -0
  932. package/esm5/lib/panel/immediate/abstract-immediate-filter-text-content.component.js +45 -0
  933. package/esm5/lib/panel/immediate/abstract-immediate-filter-text.component.js +23 -0
  934. package/esm5/lib/panel/immediate/model/filter-text-injection-token.js +6 -0
  935. package/esm5/lib/panel/public-api.js +15 -0
  936. package/esm5/lib/panel/task-panel/abstract-task-panel.component.js +302 -0
  937. package/esm5/lib/panel/task-panel/models/disable-functions.js +3 -0
  938. package/esm5/lib/panel/task-panel-list/abstract-task-list.component.js +99 -0
  939. package/esm5/lib/panel/task-panel-list/task-panel-data/task-panel-data.js +2 -0
  940. package/esm5/lib/panel/workflow-panel/abstract-workflow-panel.component.js +109 -0
  941. package/esm5/lib/process/net.js +155 -0
  942. package/esm5/lib/process/netRole.js +2 -0
  943. package/esm5/lib/process/permissions.js +12 -0
  944. package/esm5/lib/process/petri-net-reference-with-permissions.js +2 -0
  945. package/esm5/lib/process/process.service.js +325 -0
  946. package/esm5/lib/process/public-api.js +8 -0
  947. package/esm5/lib/process/public-process.service.js +34 -0
  948. package/esm5/lib/process/rolesAndPermissions.js +2 -0
  949. package/esm5/lib/process/transaction.js +2 -0
  950. package/esm5/lib/process/transition.js +2 -0
  951. package/esm5/lib/public/factories/get-net-and-create-case.js +22 -0
  952. package/esm5/lib/public/factories/public-factory-resolver.js +13 -0
  953. package/esm5/lib/public/factories/public-search-factory.js +17 -0
  954. package/esm5/lib/public/public-api.js +5 -0
  955. package/esm5/lib/public/services/public-url-resolver.service.js +26 -0
  956. package/esm5/lib/resources/abstract-endpoint/abstract-resource.service.js +85 -0
  957. package/esm5/lib/resources/abstract-endpoint/count-service.js +2 -0
  958. package/esm5/lib/resources/engine-endpoint/case-resource.service.js +149 -0
  959. package/esm5/lib/resources/engine-endpoint/dashboard-resource.service.js +37 -0
  960. package/esm5/lib/resources/engine-endpoint/petri-net-resource.service.js +174 -0
  961. package/esm5/lib/resources/engine-endpoint/public/public-case-resource.service.js +52 -0
  962. package/esm5/lib/resources/engine-endpoint/public/public-petri-net-resource.service.js +120 -0
  963. package/esm5/lib/resources/engine-endpoint/public/public-task-resource.service.js +238 -0
  964. package/esm5/lib/resources/engine-endpoint/task-resource.service.js +327 -0
  965. package/esm5/lib/resources/engine-endpoint/user-resource.service.js +210 -0
  966. package/esm5/lib/resources/interface/assigned-user-policy.js +2 -0
  967. package/esm5/lib/resources/interface/author.js +2 -0
  968. package/esm5/lib/resources/interface/authority.js +2 -0
  969. package/esm5/lib/resources/interface/case-get-request-body.js +2 -0
  970. package/esm5/lib/resources/interface/case.js +2 -0
  971. package/esm5/lib/resources/interface/changed-field-container.js +2 -0
  972. package/esm5/lib/resources/interface/count.js +2 -0
  973. package/esm5/lib/resources/interface/create-case-request-body.js +2 -0
  974. package/esm5/lib/resources/interface/data-group-layout.js +59 -0
  975. package/esm5/lib/resources/interface/data-groups.js +19 -0
  976. package/esm5/lib/resources/interface/event-outcome.js +2 -0
  977. package/esm5/lib/resources/interface/field-alignment.js +10 -0
  978. package/esm5/lib/resources/interface/fields.js +2 -0
  979. package/esm5/lib/resources/interface/file-resource.js +2 -0
  980. package/esm5/lib/resources/interface/group.js +2 -0
  981. package/esm5/lib/resources/interface/immediate-data.js +2 -0
  982. package/esm5/lib/resources/interface/link.js +2 -0
  983. package/esm5/lib/resources/interface/message-resource.js +2 -0
  984. package/esm5/lib/resources/interface/page.js +2 -0
  985. package/esm5/lib/resources/interface/pagination.js +2 -0
  986. package/esm5/lib/resources/interface/petri-net-object-id.js +2 -0
  987. package/esm5/lib/resources/interface/petri-net-reference.js +2 -0
  988. package/esm5/lib/resources/interface/petri-net-request-body.js +2 -0
  989. package/esm5/lib/resources/interface/petri-net.js +2 -0
  990. package/esm5/lib/resources/interface/preferences.js +2 -0
  991. package/esm5/lib/resources/interface/process-role.js +2 -0
  992. package/esm5/lib/resources/interface/response-data.js +2 -0
  993. package/esm5/lib/resources/interface/task-layout.js +2 -0
  994. package/esm5/lib/resources/interface/task-reference.js +2 -0
  995. package/esm5/lib/resources/interface/task-set-data-request-body.js +2 -0
  996. package/esm5/lib/resources/interface/task.js +2 -0
  997. package/esm5/lib/resources/interface/user-process-role.js +2 -0
  998. package/esm5/lib/resources/interface/user-resource-small.js +2 -0
  999. package/esm5/lib/resources/interface/user-resource.js +2 -0
  1000. package/esm5/lib/resources/public-api.js +46 -0
  1001. package/esm5/lib/resources/resource-provider.service.js +174 -0
  1002. package/esm5/lib/resources/types/nae-date-type.js +5 -0
  1003. package/esm5/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.js +42 -0
  1004. package/esm5/lib/routing/public-api.js +7 -0
  1005. package/esm5/lib/routing/redirect-service/redirect.service.js +130 -0
  1006. package/esm5/lib/routing/routing-builder/routing-builder.service.js +207 -0
  1007. package/esm5/lib/routing/view-service/model/view-entry.js +2 -0
  1008. package/esm5/lib/routing/view-service/view.service.js +38 -0
  1009. package/esm5/lib/search/advanced-search-component/abstract-advanced-search.component.js +64 -0
  1010. package/esm5/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.js +40 -0
  1011. package/esm5/lib/search/category-factory/category-factory.js +96 -0
  1012. package/esm5/lib/search/category-factory/category-resolver.service.js +152 -0
  1013. package/esm5/lib/search/category-factory/category-serialisation-pair.js +2 -0
  1014. package/esm5/lib/search/category-factory/default-categories-factories.js +67 -0
  1015. package/esm5/lib/search/category-factory/default-search-categories.module.js +54 -0
  1016. package/esm5/lib/search/category-factory/optional-dependencies.js +2 -0
  1017. package/esm5/lib/search/category-factory/search-categories-injection-token.js +24 -0
  1018. package/esm5/lib/search/fulltext-search-component/abstract-fulltext-search.component.js +20 -0
  1019. package/esm5/lib/search/header-search-service/header-search.service.js +250 -0
  1020. package/esm5/lib/search/models/base-filter-injection-token.js +6 -0
  1021. package/esm5/lib/search/models/base-filter.js +2 -0
  1022. package/esm5/lib/search/models/boolean-operator.js +10 -0
  1023. package/esm5/lib/search/models/category/autocomplete-category.js +155 -0
  1024. package/esm5/lib/search/models/category/autocomplete-options.js +2 -0
  1025. package/esm5/lib/search/models/category/case/case-author.js +29 -0
  1026. package/esm5/lib/search/models/category/case/case-creation-date-time.js +51 -0
  1027. package/esm5/lib/search/models/category/case/case-creation-date.js +51 -0
  1028. package/esm5/lib/search/models/category/case/case-dataset.js +444 -0
  1029. package/esm5/lib/search/models/category/case/case-net-attribute-autocomplete-category.js +28 -0
  1030. package/esm5/lib/search/models/category/case/case-process.js +84 -0
  1031. package/esm5/lib/search/models/category/case/case-role.js +32 -0
  1032. package/esm5/lib/search/models/category/case/case-search.enum.js +15 -0
  1033. package/esm5/lib/search/models/category/case/case-simple-dataset.js +153 -0
  1034. package/esm5/lib/search/models/category/case/case-string-id.js +35 -0
  1035. package/esm5/lib/search/models/category/case/case-task.js +32 -0
  1036. package/esm5/lib/search/models/category/case/case-title.js +37 -0
  1037. package/esm5/lib/search/models/category/case/case-visual-id.js +31 -0
  1038. package/esm5/lib/search/models/category/categories.js +24 -0
  1039. package/esm5/lib/search/models/category/category.js +585 -0
  1040. package/esm5/lib/search/models/category/name-id-pair.js +2 -0
  1041. package/esm5/lib/search/models/category/net-attribute-autocomplete-category.js +66 -0
  1042. package/esm5/lib/search/models/category/net-attribute-pair.js +2 -0
  1043. package/esm5/lib/search/models/category/no-configuration-autocomplete-category.js +48 -0
  1044. package/esm5/lib/search/models/category/no-configuration-category.js +51 -0
  1045. package/esm5/lib/search/models/category/no-configuration-user-autocomplete-category.js +33 -0
  1046. package/esm5/lib/search/models/category/search-autocomplete-option.js +2 -0
  1047. package/esm5/lib/search/models/category/search-input-type.js +14 -0
  1048. package/esm5/lib/search/models/category/task/task-assignee.js +29 -0
  1049. package/esm5/lib/search/models/category/task/task-net-attribute-autocomplete-category.js +28 -0
  1050. package/esm5/lib/search/models/category/task/task-process.js +61 -0
  1051. package/esm5/lib/search/models/category/task/task-role.js +31 -0
  1052. package/esm5/lib/search/models/category/task/task-task.js +31 -0
  1053. package/esm5/lib/search/models/category/user-autocomplete.js +64 -0
  1054. package/esm5/lib/search/models/component-configuration/search-component-configuration-injection-token.js +8 -0
  1055. package/esm5/lib/search/models/component-configuration/search-component-configuration.js +2 -0
  1056. package/esm5/lib/search/models/component-configuration/search-mode.js +9 -0
  1057. package/esm5/lib/search/models/configuration-input.js +71 -0
  1058. package/esm5/lib/search/models/datafield-map-key.js +91 -0
  1059. package/esm5/lib/search/models/escape-result.js +2 -0
  1060. package/esm5/lib/search/models/operator/equals-date-time.js +31 -0
  1061. package/esm5/lib/search/models/operator/equals-date.js +31 -0
  1062. package/esm5/lib/search/models/operator/equals.js +25 -0
  1063. package/esm5/lib/search/models/operator/in-range-date-time.js +47 -0
  1064. package/esm5/lib/search/models/operator/in-range-date.js +46 -0
  1065. package/esm5/lib/search/models/operator/in-range.js +26 -0
  1066. package/esm5/lib/search/models/operator/is-null.js +75 -0
  1067. package/esm5/lib/search/models/operator/less-than-date-time.js +32 -0
  1068. package/esm5/lib/search/models/operator/less-than-date.js +32 -0
  1069. package/esm5/lib/search/models/operator/less-than-equal-date-time.js +32 -0
  1070. package/esm5/lib/search/models/operator/less-than-equal-date.js +31 -0
  1071. package/esm5/lib/search/models/operator/less-than-equal.js +21 -0
  1072. package/esm5/lib/search/models/operator/less-than.js +21 -0
  1073. package/esm5/lib/search/models/operator/like.js +33 -0
  1074. package/esm5/lib/search/models/operator/more-than-date-time.js +34 -0
  1075. package/esm5/lib/search/models/operator/more-than-date.js +34 -0
  1076. package/esm5/lib/search/models/operator/more-than-equal-date-time.js +32 -0
  1077. package/esm5/lib/search/models/operator/more-than-equal-date.js +32 -0
  1078. package/esm5/lib/search/models/operator/more-than-equal.js +21 -0
  1079. package/esm5/lib/search/models/operator/more-than.js +21 -0
  1080. package/esm5/lib/search/models/operator/not-equals-date-time.js +29 -0
  1081. package/esm5/lib/search/models/operator/not-equals-date.js +32 -0
  1082. package/esm5/lib/search/models/operator/not-equals.js +35 -0
  1083. package/esm5/lib/search/models/operator/operator.js +134 -0
  1084. package/esm5/lib/search/models/operator/operators.js +31 -0
  1085. package/esm5/lib/search/models/operator/substring.js +31 -0
  1086. package/esm5/lib/search/models/operator-template-part-type.js +15 -0
  1087. package/esm5/lib/search/models/operator-template-part.js +42 -0
  1088. package/esm5/lib/search/models/persistance/filter-metadata-allowed-nets.js +2 -0
  1089. package/esm5/lib/search/models/persistance/filter-metadata.js +2 -0
  1090. package/esm5/lib/search/models/persistance/filter-text-segment.js +2 -0
  1091. package/esm5/lib/search/models/persistance/generator-metadata.js +2 -0
  1092. package/esm5/lib/search/models/persistance/saved-filter-metadata.js +2 -0
  1093. package/esm5/lib/search/models/predicate/clause-predicate.js +95 -0
  1094. package/esm5/lib/search/models/predicate/editable-clause-predicate-with-generators.js +79 -0
  1095. package/esm5/lib/search/models/predicate/editable-clause-predicate.js +146 -0
  1096. package/esm5/lib/search/models/predicate/editable-elementary-predicate.js +30 -0
  1097. package/esm5/lib/search/models/predicate/editable-predicate-with-generator.js +47 -0
  1098. package/esm5/lib/search/models/predicate/editable-predicate.js +32 -0
  1099. package/esm5/lib/search/models/predicate/elementary-predicate.js +24 -0
  1100. package/esm5/lib/search/models/predicate/predicate-with-generator.js +114 -0
  1101. package/esm5/lib/search/models/predicate/predicate.js +110 -0
  1102. package/esm5/lib/search/models/predicate-removal-event.js +2 -0
  1103. package/esm5/lib/search/models/query/query.js +83 -0
  1104. package/esm5/lib/search/models/search-index.js +76 -0
  1105. package/esm5/lib/search/models/wrap-result.js +2 -0
  1106. package/esm5/lib/search/operator-service/operator-resolver.service.js +113 -0
  1107. package/esm5/lib/search/operator-service/operator.service.js +41 -0
  1108. package/esm5/lib/search/public-api.js +107 -0
  1109. package/esm5/lib/search/search-clause-component/abstract-search-clause.component.js +67 -0
  1110. package/esm5/lib/search/search-component/abstract-search.component.js +201 -0
  1111. package/esm5/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.js +82 -0
  1112. package/esm5/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +40 -0
  1113. package/esm5/lib/search/search-operand-input-component/abstract-search-operand-input.component.js +113 -0
  1114. package/esm5/lib/search/search-predicate-component/abstract-search-predicate.component.js +162 -0
  1115. package/esm5/lib/search/search-service/search.service.js +405 -0
  1116. package/esm5/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.js +166 -0
  1117. package/esm5/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.js +26 -0
  1118. package/esm5/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.js +2 -0
  1119. package/esm5/lib/side-menu/content-components/filter-selector/model/filtered-array.js +37 -0
  1120. package/esm5/lib/side-menu/content-components/import-net/abstract-import-net.component.js +152 -0
  1121. package/esm5/lib/side-menu/content-components/injection-tokens.js +8 -0
  1122. package/esm5/lib/side-menu/content-components/load-filter/abstract-load-filter.component.js +47 -0
  1123. package/esm5/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.js +2 -0
  1124. package/esm5/lib/side-menu/content-components/new-case/abstract-new-case.component.js +264 -0
  1125. package/esm5/lib/side-menu/content-components/new-case/model/new-case-injection-data.js +2 -0
  1126. package/esm5/lib/side-menu/content-components/option-selector/abstract-option-selector.component.js +31 -0
  1127. package/esm5/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.js +2 -0
  1128. package/esm5/lib/side-menu/content-components/public-api.js +20 -0
  1129. package/esm5/lib/side-menu/content-components/save-filter/abstract-save-filter.component.js +43 -0
  1130. package/esm5/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.js +2 -0
  1131. package/esm5/lib/side-menu/content-components/user-assign/abstract-user-assign.component.js +74 -0
  1132. package/esm5/lib/side-menu/content-components/user-assign/model/user-list-injected-data.js +2 -0
  1133. package/esm5/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.js +113 -0
  1134. package/esm5/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.js +15 -0
  1135. package/esm5/lib/side-menu/models/portal-wrapper.js +23 -0
  1136. package/esm5/lib/side-menu/models/side-menu-control.js +47 -0
  1137. package/esm5/lib/side-menu/models/side-menu-event.js +2 -0
  1138. package/esm5/lib/side-menu/models/side-menu-injection-data.js +2 -0
  1139. package/esm5/lib/side-menu/models/side-menu-ref.js +26 -0
  1140. package/esm5/lib/side-menu/models/side-menu-size.js +7 -0
  1141. package/esm5/lib/side-menu/net-version-visible-injection-token.js +4 -0
  1142. package/esm5/lib/side-menu/public-api.js +15 -0
  1143. package/esm5/lib/side-menu/services/side-menu.service.js +90 -0
  1144. package/esm5/lib/side-menu/side-menu-container/abstract-side-menu-container.component.js +36 -0
  1145. package/esm5/lib/side-menu/side-menu-injection-token.js +3 -0
  1146. package/esm5/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.js +31 -0
  1147. package/esm5/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.js +31 -0
  1148. package/esm5/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.js +31 -0
  1149. package/esm5/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.js +31 -0
  1150. package/esm5/lib/snack-bar/models/abstract-snack-bar.js +20 -0
  1151. package/esm5/lib/snack-bar/models/injection-token-snackbar.js +4 -0
  1152. package/esm5/lib/snack-bar/models/snack-bar-enums.js +12 -0
  1153. package/esm5/lib/snack-bar/models/snack-bar-injection-data.js +2 -0
  1154. package/esm5/lib/snack-bar/public-api.js +15 -0
  1155. package/esm5/lib/snack-bar/services/snack-bar.service.js +105 -0
  1156. package/esm5/lib/snack-bar/snack-bar.module.js +37 -0
  1157. package/esm5/lib/tabs/classes/opened-tab.js +50 -0
  1158. package/esm5/lib/tabs/classes/tab-view.js +283 -0
  1159. package/esm5/lib/tabs/interfaces.js +2 -0
  1160. package/esm5/lib/tabs/public-api.js +6 -0
  1161. package/esm5/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.js +21 -0
  1162. package/esm5/lib/tabs/tab-data-injection-token/tab-data-injection-token.js +8 -0
  1163. package/esm5/lib/tabs/tab-view/abstract-tab-view.component.js +71 -0
  1164. package/esm5/lib/task/interfaces/task-operations.js +2 -0
  1165. package/esm5/lib/task/models/null-task-operations.js +30 -0
  1166. package/esm5/lib/task/models/subject-task-operations.js +76 -0
  1167. package/esm5/lib/task/models/task-operations-injection-token.js +3 -0
  1168. package/esm5/lib/task/models/task-set-data-request-context.js +2 -0
  1169. package/esm5/lib/task/public-api.js +19 -0
  1170. package/esm5/lib/task/services/assign-policy.service.js +189 -0
  1171. package/esm5/lib/task/services/assign-task.service.js +200 -0
  1172. package/esm5/lib/task/services/cancel-task.service.js +198 -0
  1173. package/esm5/lib/task/services/data-focus-policy.service.js +40 -0
  1174. package/esm5/lib/task/services/delegate-task.service.js +196 -0
  1175. package/esm5/lib/task/services/finish-policy.service.js +85 -0
  1176. package/esm5/lib/task/services/finish-task.service.js +215 -0
  1177. package/esm5/lib/task/services/selected-case.service.js +48 -0
  1178. package/esm5/lib/task/services/task-data.service.js +597 -0
  1179. package/esm5/lib/task/services/task-handling-service.js +68 -0
  1180. package/esm5/lib/task/services/task-request-state.service.js +118 -0
  1181. package/esm5/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.js +41 -0
  1182. package/esm5/lib/task-content/model/async-rendering-configuration-injection-token.js +8 -0
  1183. package/esm5/lib/task-content/model/async-rendering-configuration.js +2 -0
  1184. package/esm5/lib/task-content/model/datafield-grid-layout-element.js +2 -0
  1185. package/esm5/lib/task-content/model/field-type-resource.js +23 -0
  1186. package/esm5/lib/task-content/model/policy.js +31 -0
  1187. package/esm5/lib/task-content/model/resource-interface.js +2 -0
  1188. package/esm5/lib/task-content/model/split-data-group.js +2 -0
  1189. package/esm5/lib/task-content/model/subgrid.js +247 -0
  1190. package/esm5/lib/task-content/model/task-content-element-type.js +19 -0
  1191. package/esm5/lib/task-content/model/task-event-notification.js +15 -0
  1192. package/esm5/lib/task-content/model/task-event.js +10 -0
  1193. package/esm5/lib/task-content/public-api.js +21 -0
  1194. package/esm5/lib/task-content/services/field-converter.service.js +350 -0
  1195. package/esm5/lib/task-content/services/single-task-content.service.js +85 -0
  1196. package/esm5/lib/task-content/services/task-content.service.js +314 -0
  1197. package/esm5/lib/task-content/services/task-event.service.js +54 -0
  1198. package/esm5/lib/task-content/services/unlimited-task-content.service.js +77 -0
  1199. package/esm5/lib/task-content/task-content/abstract-task-content.component.js +687 -0
  1200. package/esm5/lib/toolbar/abstract-toolbar.component.js +24 -0
  1201. package/esm5/lib/toolbar/public-api.js +2 -0
  1202. package/esm5/lib/translate/language.service.js +89 -0
  1203. package/esm5/lib/translate/public-api.js +3 -0
  1204. package/esm5/lib/translate/translate-interceptor.js +25 -0
  1205. package/esm5/lib/translate/translate-lib.module.js +42 -0
  1206. package/esm5/lib/user/components/user-card/abstract-user-card.component.js +58 -0
  1207. package/esm5/lib/user/models/iuser.js +2 -0
  1208. package/esm5/lib/user/models/public-api.js +6 -0
  1209. package/esm5/lib/user/models/user.js +51 -0
  1210. package/esm5/lib/user/models/view-id-injection-tokens.js +4 -0
  1211. package/esm5/lib/user/profile/abstract-profile.component.js +40 -0
  1212. package/esm5/lib/user/public-api.js +12 -0
  1213. package/esm5/lib/user/services/user-comparator.service.js +28 -0
  1214. package/esm5/lib/user/services/user-list.service.js +220 -0
  1215. package/esm5/lib/user/services/user-preference.service.js +164 -0
  1216. package/esm5/lib/user/services/user.service.js +224 -0
  1217. package/esm5/lib/user/services/view-id.service.js +36 -0
  1218. package/esm5/lib/utility/array-to-observable.js +10 -0
  1219. package/esm5/lib/utility/call-chain/after-action.js +19 -0
  1220. package/esm5/lib/utility/call-chain/call-chain.service.js +36 -0
  1221. package/esm5/lib/utility/clear-time-information.js +11 -0
  1222. package/esm5/lib/utility/destroy-subscription.js +10 -0
  1223. package/esm5/lib/utility/get-field.js +48 -0
  1224. package/esm5/lib/utility/get-immediate-data.js +9 -0
  1225. package/esm5/lib/utility/grid-layout/grid-layout-helper.js +105 -0
  1226. package/esm5/lib/utility/grid-layout/model/grid-element-with-item.js +2 -0
  1227. package/esm5/lib/utility/grid-layout/model/grid-element.js +2 -0
  1228. package/esm5/lib/utility/grid-layout/model/grid-filler.js +52 -0
  1229. package/esm5/lib/utility/incrementing-counter.js +23 -0
  1230. package/esm5/lib/utility/loading-emitter.js +28 -0
  1231. package/esm5/lib/utility/loading-with-filter-emitter.js +41 -0
  1232. package/esm5/lib/utility/navigation-item-task-filter-factory.js +11 -0
  1233. package/esm5/lib/utility/navigation-item-task-search-categories-factory.js +35 -0
  1234. package/esm5/lib/utility/of-void.js +12 -0
  1235. package/esm5/lib/utility/pagination/load-all-pages.js +47 -0
  1236. package/esm5/lib/utility/pagination/page-has-content.js +8 -0
  1237. package/esm5/lib/utility/process-message-response.js +17 -0
  1238. package/esm5/lib/utility/public-api.js +47 -0
  1239. package/esm5/lib/utility/refresh-tree.js +9 -0
  1240. package/esm5/lib/utility/result-with-after-actions.js +34 -0
  1241. package/esm5/lib/utility/service/case-list-font-color.service.js +47 -0
  1242. package/esm5/lib/utility/service/spinner-overlay.service.js +51 -0
  1243. package/esm5/lib/utility/stop-propagation.js +5 -0
  1244. package/esm5/lib/utility/tests/mocks/mock-authentication-method-service.js +19 -0
  1245. package/esm5/lib/utility/tests/mocks/mock-authentication.service.js +33 -0
  1246. package/esm5/lib/utility/tests/mocks/mock-endpoint.js +46 -0
  1247. package/esm5/lib/utility/tests/mocks/mock-sign-up.service.js +31 -0
  1248. package/esm5/lib/utility/tests/mocks/mock-user-autocomplete-value.js +15 -0
  1249. package/esm5/lib/utility/tests/mocks/mock-user-preference.service.js +53 -0
  1250. package/esm5/lib/utility/tests/mocks/mock-user-resource.service.js +52 -0
  1251. package/esm5/lib/utility/tests/search-category-mock-dependencies.js +21 -0
  1252. package/esm5/lib/utility/tests/test-config.js +428 -0
  1253. package/esm5/lib/utility/tests/test-factory-methods.js +21 -0
  1254. package/esm5/lib/utility/tests/test-mock-dependencies.module.js +35 -0
  1255. package/esm5/lib/utility/tests/test-view-service.js +28 -0
  1256. package/esm5/lib/utility/tests/utility/configure-category.js +14 -0
  1257. package/esm5/lib/utility/tests/utility/create-mock-case-outcome.js +19 -0
  1258. package/esm5/lib/utility/tests/utility/create-mock-case.js +40 -0
  1259. package/esm5/lib/utility/tests/utility/create-mock-datagroup.js +39 -0
  1260. package/esm5/lib/utility/tests/utility/create-mock-field.js +47 -0
  1261. package/esm5/lib/utility/tests/utility/create-mock-get-data-outcome.js +20 -0
  1262. package/esm5/lib/utility/tests/utility/create-mock-immediate-data.js +17 -0
  1263. package/esm5/lib/utility/tests/utility/create-mock-net.js +34 -0
  1264. package/esm5/lib/utility/tests/utility/create-mock-page.js +24 -0
  1265. package/esm5/lib/utility/tests/utility/create-mock-petri-net-outcome.js +16 -0
  1266. package/esm5/lib/utility/tests/utility/create-mock-set-data-outcome.js +24 -0
  1267. package/esm5/lib/utility/tests/utility/create-mock-task-outcome.js +22 -0
  1268. package/esm5/lib/utility/tests/utility/create-mock-task.js +38 -0
  1269. package/esm5/lib/view/abstract/page-load-request-context.js +34 -0
  1270. package/esm5/lib/view/abstract/sortable-view.js +65 -0
  1271. package/esm5/lib/view/abstract/view-with-headers.js +27 -0
  1272. package/esm5/lib/view/case-view/abstract-case-view.js +47 -0
  1273. package/esm5/lib/view/case-view/components/case-list/abstract-case-list.component.js +92 -0
  1274. package/esm5/lib/view/case-view/models/case-page-load-request-result.js +2 -0
  1275. package/esm5/lib/view/case-view/models/case-view-params.js +2 -0
  1276. package/esm5/lib/view/case-view/models/new-case-configuration-injection-token.js +7 -0
  1277. package/esm5/lib/view/case-view/models/new-case-configuration.js +2 -0
  1278. package/esm5/lib/view/case-view/service/case-view-service.js +300 -0
  1279. package/esm5/lib/view/case-view/tabbed-case-view.js +75 -0
  1280. package/esm5/lib/view/public-api.js +42 -0
  1281. package/esm5/lib/view/task-view/abstract-task-view.js +18 -0
  1282. package/esm5/lib/view/task-view/models/injected-tabbed-task-view-data.js +2 -0
  1283. package/esm5/lib/view/task-view/models/injection-token-task-endpoint.js +6 -0
  1284. package/esm5/lib/view/task-view/models/task-endpoint.js +9 -0
  1285. package/esm5/lib/view/task-view/models/task-page-load-request-result.js +2 -0
  1286. package/esm5/lib/view/task-view/models/task-view-configuration-injection-token.js +20 -0
  1287. package/esm5/lib/view/task-view/models/task-view-configuration.js +2 -0
  1288. package/esm5/lib/view/task-view/models/task-view-params.js +2 -0
  1289. package/esm5/lib/view/task-view/service/task-view.service.js +333 -0
  1290. package/esm5/lib/view/task-view/tabbed-task-view.js +27 -0
  1291. package/esm5/lib/view/tree-case-view/model/tree-petriflow-identifiers.js +43 -0
  1292. package/esm5/lib/view/tree-case-view/tree-case-view.service.js +19 -0
  1293. package/esm5/lib/view/tree-case-view/tree-component/abstract-tree.component.js +165 -0
  1294. package/esm5/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.js +16 -0
  1295. package/esm5/lib/view/tree-case-view/tree-component/case-tree.service.js +899 -0
  1296. package/esm5/lib/view/tree-case-view/tree-component/model/case-tree-node.js +106 -0
  1297. package/esm5/lib/view/tree-case-view/tree-component/model/case-tree-path.js +2 -0
  1298. package/esm5/lib/view/tree-case-view/tree-component/model/expansion-tree.js +2 -0
  1299. package/esm5/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.js +16 -0
  1300. package/esm5/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.js +66 -0
  1301. package/esm5/lib/view/tree-case-view/tree-task-content/tree-task-content.service.js +308 -0
  1302. package/esm5/lib/view/workflow-view/abstract-workflow-view.component.js +74 -0
  1303. package/esm5/lib/view/workflow-view/models/injection-token-workflow-service.js +10 -0
  1304. package/esm5/lib/view/workflow-view/workflow-view.service.js +232 -0
  1305. package/esm5/netgrif-components-core.js +20 -0
  1306. package/esm5/public-api.js +45 -0
  1307. package/fesm2015/netgrif-components-core.js +28627 -0
  1308. package/fesm2015/netgrif-components-core.js.map +1 -0
  1309. package/fesm5/netgrif-components-core.js +31716 -0
  1310. package/fesm5/netgrif-components-core.js.map +1 -0
  1311. package/lib/admin/public-api.d.ts +6 -0
  1312. package/lib/admin/role-assignment/abstract-role-assignment.d.ts +31 -0
  1313. package/lib/admin/role-assignment/services/ProcessList.d.ts +43 -0
  1314. package/lib/admin/role-assignment/services/role-assignment.service.d.ts +16 -0
  1315. package/lib/admin/user-invite/abstract-user-invite.component.d.ts +30 -0
  1316. package/lib/admin/user-invite/services/organization-list.service.d.ts +16 -0
  1317. package/lib/admin/user-invite/services/user-invite.service.d.ts +9 -0
  1318. package/lib/allowed-nets/public-api.d.ts +3 -0
  1319. package/lib/allowed-nets/services/allowed-nets.service.d.ts +45 -0
  1320. package/lib/allowed-nets/services/base-allowed-nets.service.d.ts +27 -0
  1321. package/lib/allowed-nets/services/factory/allowed-nets-service-factory.d.ts +59 -0
  1322. package/lib/authentication/anonymous/anonymous.service.d.ts +18 -0
  1323. package/lib/authentication/authentication.factory.d.ts +5 -0
  1324. package/lib/authentication/authentication.module.d.ts +2 -0
  1325. package/lib/authentication/components/abstract-authentication-overlay.d.ts +21 -0
  1326. package/lib/authentication/models/credentials.d.ts +4 -0
  1327. package/lib/authentication/models/public-api.d.ts +3 -0
  1328. package/lib/authentication/models/transformer.d.ts +3 -0
  1329. package/lib/authentication/models/user.transformer.d.ts +8 -0
  1330. package/lib/authentication/public-api.d.ts +8 -0
  1331. package/lib/authentication/services/anonymous-authentication-interceptor.d.ts +8 -0
  1332. package/lib/authentication/services/authentication/authentication.service.d.ts +23 -0
  1333. package/lib/authentication/services/authentication-interceptor.d.ts +12 -0
  1334. package/lib/authentication/services/authentication-method.service.d.ts +8 -0
  1335. package/lib/authentication/services/guard/authentication-guard.service.d.ts +11 -0
  1336. package/lib/authentication/services/methods/basic-authentication/basic-authentication.service.d.ts +13 -0
  1337. package/lib/authentication/services/methods/null-authentication/null-authentication.service.d.ts +9 -0
  1338. package/lib/authentication/services/public-api.d.ts +5 -0
  1339. package/lib/authentication/session/null-storage.d.ts +9 -0
  1340. package/lib/authentication/session/public-api.d.ts +1 -0
  1341. package/lib/authentication/session/services/session.service.d.ts +35 -0
  1342. package/lib/authentication/sign-up/models/user-invitation-request.d.ts +5 -0
  1343. package/lib/authentication/sign-up/models/user-registration-request.d.ts +6 -0
  1344. package/lib/authentication/sign-up/public-api.d.ts +4 -0
  1345. package/lib/authentication/sign-up/services/sign-up.service.d.ts +29 -0
  1346. package/lib/authentication/sign-up/sign-up.module.d.ts +2 -0
  1347. package/lib/authorization/authority/authority-guard.service.d.ts +16 -0
  1348. package/lib/authorization/group/group-guard.service.d.ts +19 -0
  1349. package/lib/authorization/permission/permission.service.d.ts +22 -0
  1350. package/lib/authorization/public-api.d.ts +4 -0
  1351. package/lib/authorization/role/role-guard.service.d.ts +29 -0
  1352. package/lib/changed-fields/public-api.d.ts +1 -0
  1353. package/lib/changed-fields/services/changed-fields.service.d.ts +12 -0
  1354. package/lib/configuration/configuration.service.d.ts +69 -0
  1355. package/lib/configuration/public-api.d.ts +1 -0
  1356. package/lib/covalent/covalent.module.d.ts +2 -0
  1357. package/lib/currency/currency.module.d.ts +3 -0
  1358. package/lib/dashboard/cards/count-card/abstract-count-card.d.ts +19 -0
  1359. package/lib/dashboard/cards/custom-card/abstract-custom-card.d.ts +39 -0
  1360. package/lib/dashboard/cards/iframe-card/abstract-iframe-card.d.ts +10 -0
  1361. package/lib/dashboard/cards/model/card-grid-element.d.ts +4 -0
  1362. package/lib/dashboard/cards/model/count-card.d.ts +11 -0
  1363. package/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.d.ts +9 -0
  1364. package/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.d.ts +18 -0
  1365. package/lib/dashboard/cards/model/custom-dashboard-model/custom-card.d.ts +14 -0
  1366. package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.d.ts +5 -0
  1367. package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.d.ts +6 -0
  1368. package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.d.ts +5 -0
  1369. package/lib/dashboard/cards/model/dashboard-card-types.d.ts +11 -0
  1370. package/lib/dashboard/cards/model/dashboard-card.d.ts +7 -0
  1371. package/lib/dashboard/cards/model/graph-card.d.ts +5 -0
  1372. package/lib/dashboard/cards/model/iframe-card.d.ts +6 -0
  1373. package/lib/dashboard/dashboard-content/abstract-dashboard-content.d.ts +15 -0
  1374. package/lib/dashboard/dashboard-content/dashboard-params.d.ts +8 -0
  1375. package/lib/dashboard/public-api.d.ts +16 -0
  1376. package/lib/data-fields/boolean-field/abstract-boolean-field.component.d.ts +11 -0
  1377. package/lib/data-fields/boolean-field/models/boolean-field.d.ts +15 -0
  1378. package/lib/data-fields/button-field/abstract-button-field.component.d.ts +25 -0
  1379. package/lib/data-fields/button-field/models/button-field.d.ts +22 -0
  1380. package/lib/data-fields/data-field-template/abstract-data-field-template.component.d.ts +65 -0
  1381. package/lib/data-fields/data-field-template/models/wrapped-boolean.d.ts +6 -0
  1382. package/lib/data-fields/data-fields.module.d.ts +2 -0
  1383. package/lib/data-fields/date-field/abstract-date-field.component.d.ts +9 -0
  1384. package/lib/data-fields/date-field/models/custom-date-adapter.d.ts +4 -0
  1385. package/lib/data-fields/date-field/models/date-field.d.ts +10 -0
  1386. package/lib/data-fields/date-time-field/abstract-date-time-field.component.d.ts +9 -0
  1387. package/lib/data-fields/date-time-field/models/date-time-field.d.ts +10 -0
  1388. package/lib/data-fields/enumeration-field/abstract-enumeration-field.component.d.ts +6 -0
  1389. package/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.d.ts +21 -0
  1390. package/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.d.ts +26 -0
  1391. package/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.d.ts +17 -0
  1392. package/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.d.ts +10 -0
  1393. package/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.d.ts +10 -0
  1394. package/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.d.ts +18 -0
  1395. package/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.d.ts +25 -0
  1396. package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +35 -0
  1397. package/lib/data-fields/file-field/abstract-file-field.component.d.ts +147 -0
  1398. package/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.d.ts +9 -0
  1399. package/lib/data-fields/file-field/models/file-field-value.d.ts +4 -0
  1400. package/lib/data-fields/file-field/models/file-field.d.ts +73 -0
  1401. package/lib/data-fields/file-list-field/abstract-file-list-field.component.d.ts +73 -0
  1402. package/lib/data-fields/file-list-field/models/file-list-field-value.d.ts +4 -0
  1403. package/lib/data-fields/file-list-field/models/file-list-field.d.ts +41 -0
  1404. package/lib/data-fields/filter-field/abstract-filter-field-content.component.d.ts +12 -0
  1405. package/lib/data-fields/filter-field/abstract-filter-field.component.d.ts +14 -0
  1406. package/lib/data-fields/filter-field/models/filter-field-injection-token.d.ts +7 -0
  1407. package/lib/data-fields/filter-field/models/filter-field.d.ts +13 -0
  1408. package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +7 -0
  1409. package/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.d.ts +13 -0
  1410. package/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.d.ts +18 -0
  1411. package/lib/data-fields/i18n-field/models/i18n-field-value.d.ts +5 -0
  1412. package/lib/data-fields/i18n-field/models/i18n-field.d.ts +9 -0
  1413. package/lib/data-fields/models/abstract-data-field-component.d.ts +32 -0
  1414. package/lib/data-fields/models/abstract-data-field.d.ts +220 -0
  1415. package/lib/data-fields/models/behavior.d.ts +40 -0
  1416. package/lib/data-fields/models/boolean-label-enabled-token.d.ts +2 -0
  1417. package/lib/data-fields/models/changed-fields.d.ts +44 -0
  1418. package/lib/data-fields/models/component.d.ts +7 -0
  1419. package/lib/data-fields/models/format-filter.d.ts +5 -0
  1420. package/lib/data-fields/models/icon.d.ts +9 -0
  1421. package/lib/data-fields/models/invalid-data-policy-token.d.ts +10 -0
  1422. package/lib/data-fields/models/layout.d.ts +22 -0
  1423. package/lib/data-fields/models/material-appearance.d.ts +12 -0
  1424. package/lib/data-fields/models/properties.d.ts +3 -0
  1425. package/lib/data-fields/models/template-appearance.d.ts +13 -0
  1426. package/lib/data-fields/models/validation.d.ts +15 -0
  1427. package/lib/data-fields/multichoice-field/abstract-multichoice-field.component.d.ts +6 -0
  1428. package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +26 -0
  1429. package/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.d.ts +10 -0
  1430. package/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.d.ts +8 -0
  1431. package/lib/data-fields/number-field/abstract-number-errors.component.d.ts +13 -0
  1432. package/lib/data-fields/number-field/abstract-number-field.component.d.ts +8 -0
  1433. package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +15 -0
  1434. package/lib/data-fields/number-field/models/number-field.d.ts +36 -0
  1435. package/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.d.ts +5 -0
  1436. package/lib/data-fields/public-api.d.ts +67 -0
  1437. package/lib/data-fields/task-ref-field/model/task-ref-field.d.ts +8 -0
  1438. package/lib/data-fields/text-field/abstract-text-errors.component.d.ts +10 -0
  1439. package/lib/data-fields/text-field/abstract-text-field.component.d.ts +6 -0
  1440. package/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.d.ts +39 -0
  1441. package/lib/data-fields/text-field/models/text-area-field.d.ts +12 -0
  1442. package/lib/data-fields/text-field/models/text-field.d.ts +36 -0
  1443. package/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.d.ts +13 -0
  1444. package/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.d.ts +16 -0
  1445. package/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.d.ts +13 -0
  1446. package/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.d.ts +22 -0
  1447. package/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.d.ts +9 -0
  1448. package/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.d.ts +41 -0
  1449. package/lib/data-fields/user-field/abstract-user-field.component.d.ts +36 -0
  1450. package/lib/data-fields/user-field/models/user-field.d.ts +13 -0
  1451. package/lib/data-fields/user-field/models/user-value.d.ts +24 -0
  1452. package/lib/dialog/components/alert-dialog/alert-dialog.component.d.ts +19 -0
  1453. package/lib/dialog/components/alert-dialog/alert-dialog.module.d.ts +2 -0
  1454. package/lib/dialog/components/confirm-dialog/confirm-dialog.component.d.ts +24 -0
  1455. package/lib/dialog/components/confirm-dialog/confirm-dialog.module.d.ts +2 -0
  1456. package/lib/dialog/components/prompt-dialog/prompt-dialog.component.d.ts +23 -0
  1457. package/lib/dialog/components/prompt-dialog/prompt-dialog.module.d.ts +2 -0
  1458. package/lib/dialog/dialog.module.d.ts +2 -0
  1459. package/lib/dialog/models/DialogData.d.ts +8 -0
  1460. package/lib/dialog/models/DialogResult.d.ts +5 -0
  1461. package/lib/dialog/models/abstract-dialog.d.ts +18 -0
  1462. package/lib/dialog/public-api.d.ts +5 -0
  1463. package/lib/dialog/services/dialog.service.d.ts +43 -0
  1464. package/lib/event/model/event-constants.d.ts +6 -0
  1465. package/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.d.ts +5 -0
  1466. package/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.d.ts +3 -0
  1467. package/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.d.ts +3 -0
  1468. package/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.d.ts +5 -0
  1469. package/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.d.ts +5 -0
  1470. package/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.d.ts +5 -0
  1471. package/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.d.ts +5 -0
  1472. package/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.d.ts +5 -0
  1473. package/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.d.ts +3 -0
  1474. package/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.d.ts +3 -0
  1475. package/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.d.ts +3 -0
  1476. package/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.d.ts +3 -0
  1477. package/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.d.ts +5 -0
  1478. package/lib/event/public-api.d.ts +15 -0
  1479. package/lib/event/services/event.service.d.ts +7 -0
  1480. package/lib/event/services/interfaces/changed-fields-map.d.ts +6 -0
  1481. package/lib/event-queue/model/queued-event.d.ts +21 -0
  1482. package/lib/event-queue/public-api.d.ts +2 -0
  1483. package/lib/event-queue/services/event-queue.service.d.ts +21 -0
  1484. package/lib/filter/filter.repository.d.ts +59 -0
  1485. package/lib/filter/models/case-search-request-body.d.ts +88 -0
  1486. package/lib/filter/models/filter-type.d.ts +9 -0
  1487. package/lib/filter/models/filter.d.ts +68 -0
  1488. package/lib/filter/models/filters-filter-injection-token.d.ts +9 -0
  1489. package/lib/filter/models/merge-operator.d.ts +9 -0
  1490. package/lib/filter/models/merged-filter-params.d.ts +13 -0
  1491. package/lib/filter/models/merged-filter.d.ts +75 -0
  1492. package/lib/filter/models/simple-filter.d.ts +74 -0
  1493. package/lib/filter/models/task-search-request-body.d.ts +83 -0
  1494. package/lib/filter/models/user-filter-constants.d.ts +37 -0
  1495. package/lib/filter/public-api.d.ts +12 -0
  1496. package/lib/filter/user-filters.service.d.ts +116 -0
  1497. package/lib/forms/email-submission/abstract-email-submission-form.component.d.ts +13 -0
  1498. package/lib/forms/forgotten-password/abstract-forgotten-password.component.d.ts +16 -0
  1499. package/lib/forms/has-form.d.ts +10 -0
  1500. package/lib/forms/login/abstract-login-form.component.d.ts +24 -0
  1501. package/lib/forms/models/abstract-registration.component.d.ts +42 -0
  1502. package/lib/forms/models/password.validator.d.ts +7 -0
  1503. package/lib/forms/public-api.d.ts +6 -0
  1504. package/lib/forms/registration/abstract-registration-form.component.d.ts +19 -0
  1505. package/lib/groups/public-api.d.ts +2 -0
  1506. package/lib/groups/services/active-group.service.d.ts +49 -0
  1507. package/lib/groups/services/next-group.service.d.ts +52 -0
  1508. package/lib/header/abstract-header-service.d.ts +133 -0
  1509. package/lib/header/abstract-header.component.d.ts +52 -0
  1510. package/lib/header/case-header/case-header.service.d.ts +21 -0
  1511. package/lib/header/case-header/case-menta-enum.d.ts +7 -0
  1512. package/lib/header/header-modes/abstract-header-mode.component.d.ts +5 -0
  1513. package/lib/header/header-modes/edit-mode/abstract-edit-mode.component.d.ts +28 -0
  1514. package/lib/header/header-modes/loading-mode/abstract-loading-mode.component.d.ts +8 -0
  1515. package/lib/header/header-modes/search-mode/abstract-search-mode.component.d.ts +48 -0
  1516. package/lib/header/header-modes/sort-mode/abstract-sort-mode.component.d.ts +8 -0
  1517. package/lib/header/header-state.d.ts +28 -0
  1518. package/lib/header/models/default-headers-token.d.ts +2 -0
  1519. package/lib/header/models/fields-group.d.ts +9 -0
  1520. package/lib/header/models/header-column.d.ts +17 -0
  1521. package/lib/header/models/header-mode.d.ts +5 -0
  1522. package/lib/header/models/header-type.d.ts +5 -0
  1523. package/lib/header/models/public-api.d.ts +11 -0
  1524. package/lib/header/models/user-changes/column-header-change.d.ts +6 -0
  1525. package/lib/header/models/user-changes/edit-change-description.d.ts +7 -0
  1526. package/lib/header/models/user-changes/header-change-description.d.ts +5 -0
  1527. package/lib/header/models/user-changes/header-change-type.d.ts +18 -0
  1528. package/lib/header/models/user-changes/header-change.d.ts +17 -0
  1529. package/lib/header/models/user-changes/mode-change-description.d.ts +5 -0
  1530. package/lib/header/models/user-changes/search-change-description.d.ts +13 -0
  1531. package/lib/header/models/user-changes/sort-change-description.d.ts +13 -0
  1532. package/lib/header/public-api.d.ts +14 -0
  1533. package/lib/header/services/overflow.service.d.ts +28 -0
  1534. package/lib/header/task-header/task-header.service.d.ts +18 -0
  1535. package/lib/header/task-header/task-meta-enum.d.ts +9 -0
  1536. package/lib/header/workflow-header/workflow-header.service.d.ts +14 -0
  1537. package/lib/header/workflow-header/workflow-meta-enum.d.ts +8 -0
  1538. package/lib/legal/legal-notice/abstract-legal-notice.component.d.ts +13 -0
  1539. package/lib/legal/public-api.d.ts +1 -0
  1540. package/lib/logger/models/log-entry.d.ts +38 -0
  1541. package/lib/logger/public-api.d.ts +7 -0
  1542. package/lib/logger/publishers/console-log-publisher.d.ts +8 -0
  1543. package/lib/logger/publishers/local-storage-log-publisher.d.ts +9 -0
  1544. package/lib/logger/publishers/log-publisher.d.ts +8 -0
  1545. package/lib/logger/services/log-level.d.ts +8 -0
  1546. package/lib/logger/services/log-publisher.service.d.ts +22 -0
  1547. package/lib/logger/services/logger.service.d.ts +25 -0
  1548. package/lib/material/material.module.d.ts +2 -0
  1549. package/lib/moment/public-api.d.ts +1 -0
  1550. package/lib/moment/time-formats.d.ts +24 -0
  1551. package/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.d.ts +21 -0
  1552. package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +14 -0
  1553. package/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.d.ts +2 -0
  1554. package/lib/navigation/model/filter-case-injection-token.d.ts +6 -0
  1555. package/lib/navigation/model/group-navigation-component-resolver-component-injection-token.d.ts +6 -0
  1556. package/lib/navigation/model/group-navigation-constants.d.ts +57 -0
  1557. package/lib/navigation/model/group-navigation-item-label.d.ts +4 -0
  1558. package/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.d.ts +49 -0
  1559. package/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.d.ts +8 -0
  1560. package/lib/navigation/navigation-rail/abstract-navigation-rail.component.d.ts +14 -0
  1561. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +131 -0
  1562. package/lib/navigation/public-api.d.ts +13 -0
  1563. package/lib/navigation/quick-panel/components/abstract-quick-panel.component.d.ts +15 -0
  1564. package/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.d.ts +7 -0
  1565. package/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.d.ts +24 -0
  1566. package/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.d.ts +14 -0
  1567. package/lib/navigation/quick-panel/components/paper-view.service.d.ts +6 -0
  1568. package/lib/navigation/quick-panel/public-api.d.ts +5 -0
  1569. package/lib/navigation/utility/filter-extraction.service.d.ts +18 -0
  1570. package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +33 -0
  1571. package/lib/panel/abstract/featured-value.d.ts +13 -0
  1572. package/lib/panel/abstract/panel-with-header-binding.d.ts +23 -0
  1573. package/lib/panel/abstract/panel-with-immediate-data.d.ts +18 -0
  1574. package/lib/panel/abstract/tabbed-virtual-scroll.component.d.ts +10 -0
  1575. package/lib/panel/abstract-panel.component.d.ts +23 -0
  1576. package/lib/panel/case-panel/abstract-case-panel.component.d.ts +41 -0
  1577. package/lib/panel/immediate/abstract-immediate-filter-text-content.component.d.ts +16 -0
  1578. package/lib/panel/immediate/abstract-immediate-filter-text.component.d.ts +14 -0
  1579. package/lib/panel/immediate/model/filter-text-injection-token.d.ts +10 -0
  1580. package/lib/panel/public-api.d.ts +12 -0
  1581. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +109 -0
  1582. package/lib/panel/task-panel/models/disable-functions.d.ts +10 -0
  1583. package/lib/panel/task-panel-list/abstract-task-list.component.d.ts +46 -0
  1584. package/lib/panel/task-panel-list/task-panel-data/task-panel-data.d.ts +8 -0
  1585. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +57 -0
  1586. package/lib/process/net.d.ts +95 -0
  1587. package/lib/process/netRole.d.ts +4 -0
  1588. package/lib/process/permissions.d.ts +30 -0
  1589. package/lib/process/petri-net-reference-with-permissions.d.ts +7 -0
  1590. package/lib/process/process.service.d.ts +94 -0
  1591. package/lib/process/public-api.d.ts +7 -0
  1592. package/lib/process/public-process.service.d.ts +8 -0
  1593. package/lib/process/rolesAndPermissions.d.ts +6 -0
  1594. package/lib/process/transaction.d.ts +5 -0
  1595. package/lib/process/transition.d.ts +7 -0
  1596. package/lib/public/factories/get-net-and-create-case.d.ts +6 -0
  1597. package/lib/public/factories/public-factory-resolver.d.ts +6 -0
  1598. package/lib/public/factories/public-search-factory.d.ts +9 -0
  1599. package/lib/public/public-api.d.ts +4 -0
  1600. package/lib/public/services/public-url-resolver.service.d.ts +6 -0
  1601. package/lib/resources/abstract-endpoint/abstract-resource.service.d.ts +38 -0
  1602. package/lib/resources/abstract-endpoint/count-service.d.ts +6 -0
  1603. package/lib/resources/engine-endpoint/case-resource.service.d.ts +86 -0
  1604. package/lib/resources/engine-endpoint/dashboard-resource.service.d.ts +10 -0
  1605. package/lib/resources/engine-endpoint/petri-net-resource.service.d.ts +105 -0
  1606. package/lib/resources/engine-endpoint/public/public-case-resource.service.d.ts +20 -0
  1607. package/lib/resources/engine-endpoint/public/public-petri-net-resource.service.d.ts +72 -0
  1608. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +95 -0
  1609. package/lib/resources/engine-endpoint/task-resource.service.d.ts +134 -0
  1610. package/lib/resources/engine-endpoint/user-resource.service.d.ts +133 -0
  1611. package/lib/resources/interface/assigned-user-policy.d.ts +4 -0
  1612. package/lib/resources/interface/author.d.ts +15 -0
  1613. package/lib/resources/interface/authority.d.ts +13 -0
  1614. package/lib/resources/interface/case-get-request-body.d.ts +79 -0
  1615. package/lib/resources/interface/case.d.ts +124 -0
  1616. package/lib/resources/interface/changed-field-container.d.ts +4 -0
  1617. package/lib/resources/interface/count.d.ts +15 -0
  1618. package/lib/resources/interface/create-case-request-body.d.ts +11 -0
  1619. package/lib/resources/interface/data-group-layout.d.ts +62 -0
  1620. package/lib/resources/interface/data-groups.d.ts +60 -0
  1621. package/lib/resources/interface/event-outcome.d.ts +10 -0
  1622. package/lib/resources/interface/field-alignment.d.ts +8 -0
  1623. package/lib/resources/interface/fields.d.ts +218 -0
  1624. package/lib/resources/interface/file-resource.d.ts +22 -0
  1625. package/lib/resources/interface/group.d.ts +18 -0
  1626. package/lib/resources/interface/immediate-data.d.ts +44 -0
  1627. package/lib/resources/interface/link.d.ts +18 -0
  1628. package/lib/resources/interface/message-resource.d.ts +24 -0
  1629. package/lib/resources/interface/page.d.ts +14 -0
  1630. package/lib/resources/interface/pagination.d.ts +21 -0
  1631. package/lib/resources/interface/petri-net-object-id.d.ts +12 -0
  1632. package/lib/resources/interface/petri-net-reference.d.ts +46 -0
  1633. package/lib/resources/interface/petri-net-request-body.d.ts +14 -0
  1634. package/lib/resources/interface/petri-net.d.ts +10 -0
  1635. package/lib/resources/interface/preferences.d.ts +16 -0
  1636. package/lib/resources/interface/process-role.d.ts +9 -0
  1637. package/lib/resources/interface/response-data.d.ts +19 -0
  1638. package/lib/resources/interface/task-layout.d.ts +11 -0
  1639. package/lib/resources/interface/task-reference.d.ts +17 -0
  1640. package/lib/resources/interface/task-set-data-request-body.d.ts +35 -0
  1641. package/lib/resources/interface/task.d.ts +72 -0
  1642. package/lib/resources/interface/user-process-role.d.ts +13 -0
  1643. package/lib/resources/interface/user-resource-small.d.ts +11 -0
  1644. package/lib/resources/interface/user-resource.d.ts +16 -0
  1645. package/lib/resources/public-api.d.ts +42 -0
  1646. package/lib/resources/resource-provider.service.d.ts +53 -0
  1647. package/lib/resources/types/nae-date-type.d.ts +7 -0
  1648. package/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.d.ts +12 -0
  1649. package/lib/routing/public-api.d.ts +5 -0
  1650. package/lib/routing/redirect-service/redirect.service.d.ts +22 -0
  1651. package/lib/routing/routing-builder/routing-builder.service.d.ts +23 -0
  1652. package/lib/routing/view-service/model/view-entry.d.ts +14 -0
  1653. package/lib/routing/view-service/view.service.d.ts +29 -0
  1654. package/lib/search/advanced-search-component/abstract-advanced-search.component.d.ts +25 -0
  1655. package/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.d.ts +22 -0
  1656. package/lib/search/category-factory/category-factory.d.ts +55 -0
  1657. package/lib/search/category-factory/category-resolver.service.d.ts +48 -0
  1658. package/lib/search/category-factory/category-serialisation-pair.d.ts +10 -0
  1659. package/lib/search/category-factory/default-categories-factories.d.ts +32 -0
  1660. package/lib/search/category-factory/default-search-categories.module.d.ts +2 -0
  1661. package/lib/search/category-factory/optional-dependencies.d.ts +22 -0
  1662. package/lib/search/category-factory/search-categories-injection-token.d.ts +24 -0
  1663. package/lib/search/fulltext-search-component/abstract-fulltext-search.component.d.ts +7 -0
  1664. package/lib/search/header-search-service/header-search.service.d.ts +112 -0
  1665. package/lib/search/models/base-filter-injection-token.d.ts +6 -0
  1666. package/lib/search/models/base-filter.d.ts +18 -0
  1667. package/lib/search/models/boolean-operator.d.ts +7 -0
  1668. package/lib/search/models/category/autocomplete-category.d.ts +94 -0
  1669. package/lib/search/models/category/autocomplete-options.d.ts +17 -0
  1670. package/lib/search/models/category/case/case-author.d.ts +12 -0
  1671. package/lib/search/models/category/case/case-creation-date-time.d.ts +16 -0
  1672. package/lib/search/models/category/case/case-creation-date.d.ts +16 -0
  1673. package/lib/search/models/category/case/case-dataset.d.ts +94 -0
  1674. package/lib/search/models/category/case/case-net-attribute-autocomplete-category.d.ts +18 -0
  1675. package/lib/search/models/category/case/case-process.d.ts +27 -0
  1676. package/lib/search/models/category/case/case-role.d.ts +15 -0
  1677. package/lib/search/models/category/case/case-search.enum.d.ts +13 -0
  1678. package/lib/search/models/category/case/case-simple-dataset.d.ts +58 -0
  1679. package/lib/search/models/category/case/case-string-id.d.ts +11 -0
  1680. package/lib/search/models/category/case/case-task.d.ts +15 -0
  1681. package/lib/search/models/category/case/case-title.d.ts +11 -0
  1682. package/lib/search/models/category/case/case-visual-id.d.ts +11 -0
  1683. package/lib/search/models/category/categories.d.ts +20 -0
  1684. package/lib/search/models/category/category.d.ts +363 -0
  1685. package/lib/search/models/category/name-id-pair.d.ts +13 -0
  1686. package/lib/search/models/category/net-attribute-autocomplete-category.d.ts +55 -0
  1687. package/lib/search/models/category/net-attribute-pair.d.ts +17 -0
  1688. package/lib/search/models/category/no-configuration-autocomplete-category.d.ts +28 -0
  1689. package/lib/search/models/category/no-configuration-category.d.ts +30 -0
  1690. package/lib/search/models/category/no-configuration-user-autocomplete-category.d.ts +20 -0
  1691. package/lib/search/models/category/search-autocomplete-option.d.ts +21 -0
  1692. package/lib/search/models/category/search-input-type.d.ts +12 -0
  1693. package/lib/search/models/category/task/task-assignee.d.ts +12 -0
  1694. package/lib/search/models/category/task/task-net-attribute-autocomplete-category.d.ts +18 -0
  1695. package/lib/search/models/category/task/task-process.d.ts +19 -0
  1696. package/lib/search/models/category/task/task-role.d.ts +15 -0
  1697. package/lib/search/models/category/task/task-task.d.ts +15 -0
  1698. package/lib/search/models/category/user-autocomplete.d.ts +28 -0
  1699. package/lib/search/models/component-configuration/search-component-configuration-injection-token.d.ts +8 -0
  1700. package/lib/search/models/component-configuration/search-component-configuration.d.ts +21 -0
  1701. package/lib/search/models/component-configuration/search-mode.d.ts +7 -0
  1702. package/lib/search/models/configuration-input.d.ts +38 -0
  1703. package/lib/search/models/datafield-map-key.d.ts +28 -0
  1704. package/lib/search/models/escape-result.d.ts +13 -0
  1705. package/lib/search/models/operator/equals-date-time.d.ts +19 -0
  1706. package/lib/search/models/operator/equals-date.d.ts +19 -0
  1707. package/lib/search/models/operator/equals.d.ts +13 -0
  1708. package/lib/search/models/operator/in-range-date-time.d.ts +24 -0
  1709. package/lib/search/models/operator/in-range-date.d.ts +24 -0
  1710. package/lib/search/models/operator/in-range.d.ts +12 -0
  1711. package/lib/search/models/operator/is-null.d.ts +51 -0
  1712. package/lib/search/models/operator/less-than-date-time.d.ts +16 -0
  1713. package/lib/search/models/operator/less-than-date.d.ts +16 -0
  1714. package/lib/search/models/operator/less-than-equal-date-time.d.ts +16 -0
  1715. package/lib/search/models/operator/less-than-equal-date.d.ts +16 -0
  1716. package/lib/search/models/operator/less-than-equal.d.ts +10 -0
  1717. package/lib/search/models/operator/less-than.d.ts +10 -0
  1718. package/lib/search/models/operator/like.d.ts +18 -0
  1719. package/lib/search/models/operator/more-than-date-time.d.ts +16 -0
  1720. package/lib/search/models/operator/more-than-date.d.ts +16 -0
  1721. package/lib/search/models/operator/more-than-equal-date-time.d.ts +16 -0
  1722. package/lib/search/models/operator/more-than-equal-date.d.ts +16 -0
  1723. package/lib/search/models/operator/more-than-equal.d.ts +10 -0
  1724. package/lib/search/models/operator/more-than.d.ts +10 -0
  1725. package/lib/search/models/operator/not-equals-date-time.d.ts +13 -0
  1726. package/lib/search/models/operator/not-equals-date.d.ts +16 -0
  1727. package/lib/search/models/operator/not-equals.d.ts +18 -0
  1728. package/lib/search/models/operator/operator.d.ts +98 -0
  1729. package/lib/search/models/operator/operators.d.ts +29 -0
  1730. package/lib/search/models/operator/substring.d.ts +13 -0
  1731. package/lib/search/models/operator-template-part-type.d.ts +13 -0
  1732. package/lib/search/models/operator-template-part.d.ts +26 -0
  1733. package/lib/search/models/persistance/filter-metadata-allowed-nets.d.ts +14 -0
  1734. package/lib/search/models/persistance/filter-metadata.d.ts +29 -0
  1735. package/lib/search/models/persistance/filter-text-segment.d.ts +19 -0
  1736. package/lib/search/models/persistance/generator-metadata.d.ts +44 -0
  1737. package/lib/search/models/persistance/saved-filter-metadata.d.ts +26 -0
  1738. package/lib/search/models/predicate/clause-predicate.d.ts +56 -0
  1739. package/lib/search/models/predicate/editable-clause-predicate-with-generators.d.ts +24 -0
  1740. package/lib/search/models/predicate/editable-clause-predicate.d.ts +67 -0
  1741. package/lib/search/models/predicate/editable-elementary-predicate.d.ts +13 -0
  1742. package/lib/search/models/predicate/editable-predicate-with-generator.d.ts +28 -0
  1743. package/lib/search/models/predicate/editable-predicate.d.ts +14 -0
  1744. package/lib/search/models/predicate/elementary-predicate.d.ts +10 -0
  1745. package/lib/search/models/predicate/predicate-with-generator.d.ts +45 -0
  1746. package/lib/search/models/predicate/predicate.d.ts +52 -0
  1747. package/lib/search/models/predicate-removal-event.d.ts +13 -0
  1748. package/lib/search/models/query/query.d.ts +44 -0
  1749. package/lib/search/models/search-index.d.ts +74 -0
  1750. package/lib/search/models/wrap-result.d.ts +13 -0
  1751. package/lib/search/operator-service/operator-resolver.service.d.ts +23 -0
  1752. package/lib/search/operator-service/operator.service.d.ts +16 -0
  1753. package/lib/search/public-api.d.ts +98 -0
  1754. package/lib/search/search-clause-component/abstract-search-clause.component.d.ts +28 -0
  1755. package/lib/search/search-component/abstract-search.component.d.ts +86 -0
  1756. package/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.d.ts +42 -0
  1757. package/lib/search/search-keyword-resolver-service/search-index-resolver.service.d.ts +25 -0
  1758. package/lib/search/search-operand-input-component/abstract-search-operand-input.component.d.ts +38 -0
  1759. package/lib/search/search-predicate-component/abstract-search-predicate.component.d.ts +64 -0
  1760. package/lib/search/search-service/search.service.d.ts +182 -0
  1761. package/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.d.ts +105 -0
  1762. package/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.d.ts +20 -0
  1763. package/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.d.ts +20 -0
  1764. package/lib/side-menu/content-components/filter-selector/model/filtered-array.d.ts +25 -0
  1765. package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +50 -0
  1766. package/lib/side-menu/content-components/injection-tokens.d.ts +8 -0
  1767. package/lib/side-menu/content-components/load-filter/abstract-load-filter.component.d.ts +13 -0
  1768. package/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.d.ts +8 -0
  1769. package/lib/side-menu/content-components/new-case/abstract-new-case.component.d.ts +62 -0
  1770. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +13 -0
  1771. package/lib/side-menu/content-components/option-selector/abstract-option-selector.component.d.ts +14 -0
  1772. package/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.d.ts +24 -0
  1773. package/lib/side-menu/content-components/public-api.d.ts +17 -0
  1774. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +15 -0
  1775. package/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.d.ts +4 -0
  1776. package/lib/side-menu/content-components/user-assign/abstract-user-assign.component.d.ts +46 -0
  1777. package/lib/side-menu/content-components/user-assign/model/user-list-injected-data.d.ts +11 -0
  1778. package/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.d.ts +83 -0
  1779. package/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.d.ts +16 -0
  1780. package/lib/side-menu/models/portal-wrapper.d.ts +9 -0
  1781. package/lib/side-menu/models/side-menu-control.d.ts +15 -0
  1782. package/lib/side-menu/models/side-menu-event.d.ts +6 -0
  1783. package/lib/side-menu/models/side-menu-injection-data.d.ts +3 -0
  1784. package/lib/side-menu/models/side-menu-ref.d.ts +8 -0
  1785. package/lib/side-menu/models/side-menu-size.d.ts +5 -0
  1786. package/lib/side-menu/net-version-visible-injection-token.d.ts +3 -0
  1787. package/lib/side-menu/public-api.d.ts +10 -0
  1788. package/lib/side-menu/services/side-menu.service.d.ts +35 -0
  1789. package/lib/side-menu/side-menu-container/abstract-side-menu-container.component.d.ts +16 -0
  1790. package/lib/side-menu/side-menu-injection-token.d.ts +3 -0
  1791. package/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.d.ts +8 -0
  1792. package/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.d.ts +8 -0
  1793. package/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.d.ts +8 -0
  1794. package/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.d.ts +8 -0
  1795. package/lib/snack-bar/models/abstract-snack-bar.d.ts +10 -0
  1796. package/lib/snack-bar/models/injection-token-snackbar.d.ts +4 -0
  1797. package/lib/snack-bar/models/snack-bar-enums.d.ts +9 -0
  1798. package/lib/snack-bar/models/snack-bar-injection-data.d.ts +5 -0
  1799. package/lib/snack-bar/public-api.d.ts +10 -0
  1800. package/lib/snack-bar/services/snack-bar.service.d.ts +18 -0
  1801. package/lib/snack-bar/snack-bar.module.d.ts +2 -0
  1802. package/lib/tabs/classes/opened-tab.d.ts +67 -0
  1803. package/lib/tabs/classes/tab-view.d.ts +123 -0
  1804. package/lib/tabs/interfaces.d.ts +135 -0
  1805. package/lib/tabs/public-api.d.ts +5 -0
  1806. package/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.d.ts +18 -0
  1807. package/lib/tabs/tab-data-injection-token/tab-data-injection-token.d.ts +8 -0
  1808. package/lib/tabs/tab-view/abstract-tab-view.component.d.ts +38 -0
  1809. package/lib/task/interfaces/task-operations.d.ts +35 -0
  1810. package/lib/task/models/null-task-operations.d.ts +22 -0
  1811. package/lib/task/models/subject-task-operations.d.ts +37 -0
  1812. package/lib/task/models/task-operations-injection-token.d.ts +3 -0
  1813. package/lib/task/models/task-set-data-request-context.d.ts +11 -0
  1814. package/lib/task/public-api.d.ts +15 -0
  1815. package/lib/task/services/assign-policy.service.d.ts +81 -0
  1816. package/lib/task/services/assign-task.service.d.ts +78 -0
  1817. package/lib/task/services/cancel-task.service.d.ts +79 -0
  1818. package/lib/task/services/data-focus-policy.service.d.ts +16 -0
  1819. package/lib/task/services/delegate-task.service.d.ts +70 -0
  1820. package/lib/task/services/finish-policy.service.d.ts +38 -0
  1821. package/lib/task/services/finish-task.service.d.ts +76 -0
  1822. package/lib/task/services/selected-case.service.d.ts +35 -0
  1823. package/lib/task/services/task-data.service.d.ts +177 -0
  1824. package/lib/task/services/task-handling-service.d.ts +41 -0
  1825. package/lib/task/services/task-request-state.service.d.ts +64 -0
  1826. package/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.d.ts +22 -0
  1827. package/lib/task-content/model/async-rendering-configuration-injection-token.d.ts +8 -0
  1828. package/lib/task-content/model/async-rendering-configuration.d.ts +22 -0
  1829. package/lib/task-content/model/datafield-grid-layout-element.d.ts +9 -0
  1830. package/lib/task-content/model/field-type-resource.d.ts +21 -0
  1831. package/lib/task-content/model/policy.d.ts +27 -0
  1832. package/lib/task-content/model/resource-interface.d.ts +37 -0
  1833. package/lib/task-content/model/split-data-group.d.ts +7 -0
  1834. package/lib/task-content/model/subgrid.d.ts +145 -0
  1835. package/lib/task-content/model/task-content-element-type.d.ts +19 -0
  1836. package/lib/task-content/model/task-event-notification.d.ts +32 -0
  1837. package/lib/task-content/model/task-event.d.ts +8 -0
  1838. package/lib/task-content/public-api.d.ts +17 -0
  1839. package/lib/task-content/services/field-converter.service.d.ts +58 -0
  1840. package/lib/task-content/services/single-task-content.service.d.ts +42 -0
  1841. package/lib/task-content/services/task-content.service.d.ts +125 -0
  1842. package/lib/task-content/services/task-event.service.d.ts +28 -0
  1843. package/lib/task-content/services/unlimited-task-content.service.d.ts +42 -0
  1844. package/lib/task-content/task-content/abstract-task-content.component.d.ts +263 -0
  1845. package/lib/toolbar/abstract-toolbar.component.d.ts +15 -0
  1846. package/lib/toolbar/public-api.d.ts +1 -0
  1847. package/lib/translate/language.service.d.ts +20 -0
  1848. package/lib/translate/public-api.d.ts +2 -0
  1849. package/lib/translate/translate-interceptor.d.ts +8 -0
  1850. package/lib/translate/translate-lib.module.d.ts +5 -0
  1851. package/lib/user/components/user-card/abstract-user-card.component.d.ts +22 -0
  1852. package/lib/user/models/iuser.d.ts +19 -0
  1853. package/lib/user/models/public-api.d.ts +3 -0
  1854. package/lib/user/models/user.d.ts +29 -0
  1855. package/lib/user/models/view-id-injection-tokens.d.ts +3 -0
  1856. package/lib/user/profile/abstract-profile.component.d.ts +14 -0
  1857. package/lib/user/public-api.d.ts +8 -0
  1858. package/lib/user/services/user-comparator.service.d.ts +7 -0
  1859. package/lib/user/services/user-list.service.d.ts +111 -0
  1860. package/lib/user/services/user-preference.service.d.ts +37 -0
  1861. package/lib/user/services/user.service.d.ts +65 -0
  1862. package/lib/user/services/view-id.service.d.ts +7 -0
  1863. package/lib/utility/array-to-observable.d.ts +6 -0
  1864. package/lib/utility/call-chain/after-action.d.ts +8 -0
  1865. package/lib/utility/call-chain/call-chain.service.d.ts +16 -0
  1866. package/lib/utility/clear-time-information.d.ts +6 -0
  1867. package/lib/utility/destroy-subscription.d.ts +6 -0
  1868. package/lib/utility/get-field.d.ts +34 -0
  1869. package/lib/utility/get-immediate-data.d.ts +8 -0
  1870. package/lib/utility/grid-layout/grid-layout-helper.d.ts +10 -0
  1871. package/lib/utility/grid-layout/model/grid-element-with-item.d.ts +4 -0
  1872. package/lib/utility/grid-layout/model/grid-element.d.ts +12 -0
  1873. package/lib/utility/grid-layout/model/grid-filler.d.ts +10 -0
  1874. package/lib/utility/incrementing-counter.d.ts +14 -0
  1875. package/lib/utility/loading-emitter.d.ts +8 -0
  1876. package/lib/utility/loading-with-filter-emitter.d.ts +12 -0
  1877. package/lib/utility/navigation-item-task-filter-factory.d.ts +9 -0
  1878. package/lib/utility/navigation-item-task-search-categories-factory.d.ts +15 -0
  1879. package/lib/utility/of-void.d.ts +6 -0
  1880. package/lib/utility/pagination/load-all-pages.d.ts +13 -0
  1881. package/lib/utility/pagination/page-has-content.d.ts +6 -0
  1882. package/lib/utility/process-message-response.d.ts +10 -0
  1883. package/lib/utility/public-api.d.ts +45 -0
  1884. package/lib/utility/refresh-tree.d.ts +5 -0
  1885. package/lib/utility/result-with-after-actions.d.ts +21 -0
  1886. package/lib/utility/service/case-list-font-color.service.d.ts +15 -0
  1887. package/lib/utility/service/spinner-overlay.service.d.ts +13 -0
  1888. package/lib/utility/stop-propagation.d.ts +1 -0
  1889. package/lib/utility/tests/mocks/mock-authentication-method-service.d.ts +8 -0
  1890. package/lib/utility/tests/mocks/mock-authentication.service.d.ts +10 -0
  1891. package/lib/utility/tests/mocks/mock-endpoint.d.ts +25 -0
  1892. package/lib/utility/tests/mocks/mock-sign-up.service.d.ts +20 -0
  1893. package/lib/utility/tests/mocks/mock-user-autocomplete-value.d.ts +7 -0
  1894. package/lib/utility/tests/mocks/mock-user-preference.service.d.ts +15 -0
  1895. package/lib/utility/tests/mocks/mock-user-resource.service.d.ts +17 -0
  1896. package/lib/utility/tests/search-category-mock-dependencies.d.ts +6 -0
  1897. package/lib/utility/tests/test-config.d.ts +4 -0
  1898. package/lib/utility/tests/test-factory-methods.d.ts +7 -0
  1899. package/lib/utility/tests/test-mock-dependencies.module.d.ts +12 -0
  1900. package/lib/utility/tests/test-view-service.d.ts +7 -0
  1901. package/lib/utility/tests/utility/configure-category.d.ts +13 -0
  1902. package/lib/utility/tests/utility/create-mock-case-outcome.d.ts +10 -0
  1903. package/lib/utility/tests/utility/create-mock-case.d.ts +8 -0
  1904. package/lib/utility/tests/utility/create-mock-datagroup.d.ts +18 -0
  1905. package/lib/utility/tests/utility/create-mock-field.d.ts +19 -0
  1906. package/lib/utility/tests/utility/create-mock-get-data-outcome.d.ts +7 -0
  1907. package/lib/utility/tests/utility/create-mock-immediate-data.d.ts +8 -0
  1908. package/lib/utility/tests/utility/create-mock-net.d.ts +17 -0
  1909. package/lib/utility/tests/utility/create-mock-page.d.ts +7 -0
  1910. package/lib/utility/tests/utility/create-mock-petri-net-outcome.d.ts +9 -0
  1911. package/lib/utility/tests/utility/create-mock-set-data-outcome.d.ts +12 -0
  1912. package/lib/utility/tests/utility/create-mock-task-outcome.d.ts +11 -0
  1913. package/lib/utility/tests/utility/create-mock-task.d.ts +8 -0
  1914. package/lib/view/abstract/page-load-request-context.d.ts +40 -0
  1915. package/lib/view/abstract/sortable-view.d.ts +19 -0
  1916. package/lib/view/abstract/view-with-headers.d.ts +13 -0
  1917. package/lib/view/case-view/abstract-case-view.d.ts +25 -0
  1918. package/lib/view/case-view/components/case-list/abstract-case-list.component.d.ts +35 -0
  1919. package/lib/view/case-view/models/case-page-load-request-result.d.ts +14 -0
  1920. package/lib/view/case-view/models/case-view-params.d.ts +3 -0
  1921. package/lib/view/case-view/models/new-case-configuration-injection-token.d.ts +7 -0
  1922. package/lib/view/case-view/models/new-case-configuration.d.ts +9 -0
  1923. package/lib/view/case-view/service/case-view-service.d.ts +73 -0
  1924. package/lib/view/case-view/tabbed-case-view.d.ts +26 -0
  1925. package/lib/view/public-api.d.ts +35 -0
  1926. package/lib/view/task-view/abstract-task-view.d.ts +12 -0
  1927. package/lib/view/task-view/models/injected-tabbed-task-view-data.d.ts +12 -0
  1928. package/lib/view/task-view/models/injection-token-task-endpoint.d.ts +6 -0
  1929. package/lib/view/task-view/models/task-endpoint.d.ts +7 -0
  1930. package/lib/view/task-view/models/task-page-load-request-result.d.ts +14 -0
  1931. package/lib/view/task-view/models/task-view-configuration-injection-token.d.ts +13 -0
  1932. package/lib/view/task-view/models/task-view-configuration.d.ts +19 -0
  1933. package/lib/view/task-view/models/task-view-params.d.ts +3 -0
  1934. package/lib/view/task-view/service/task-view.service.d.ts +68 -0
  1935. package/lib/view/task-view/tabbed-task-view.d.ts +11 -0
  1936. package/lib/view/tree-case-view/model/tree-petriflow-identifiers.d.ts +41 -0
  1937. package/lib/view/tree-case-view/tree-case-view.service.d.ts +9 -0
  1938. package/lib/view/tree-case-view/tree-component/abstract-tree.component.d.ts +99 -0
  1939. package/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.d.ts +8 -0
  1940. package/lib/view/tree-case-view/tree-component/case-tree.service.d.ts +300 -0
  1941. package/lib/view/tree-case-view/tree-component/model/case-tree-node.d.ts +57 -0
  1942. package/lib/view/tree-case-view/tree-component/model/case-tree-path.d.ts +8 -0
  1943. package/lib/view/tree-case-view/tree-component/model/expansion-tree.d.ts +6 -0
  1944. package/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.d.ts +8 -0
  1945. package/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.d.ts +32 -0
  1946. package/lib/view/tree-case-view/tree-task-content/tree-task-content.service.d.ts +112 -0
  1947. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +30 -0
  1948. package/lib/view/workflow-view/models/injection-token-workflow-service.d.ts +10 -0
  1949. package/lib/view/workflow-view/workflow-view.service.d.ts +52 -0
  1950. package/netgrif-components-core.d.ts +25 -0
  1951. package/netgrif-components-core.metadata.json +1 -0
  1952. package/package.json +79 -0
  1953. package/public-api.d.ts +39 -0
  1954. package/schematics/_commons/angular-cli-devkit-core-strings.d.ts +93 -0
  1955. package/schematics/_commons/angular-cli-devkit-core-strings.js +167 -0
  1956. package/schematics/_commons/angular-cli-devkit-core-strings.js.map +1 -0
  1957. package/schematics/_commons/import-to-add.d.ts +5 -0
  1958. package/schematics/_commons/import-to-add.js +11 -0
  1959. package/schematics/_commons/import-to-add.js.map +1 -0
  1960. package/schematics/_commons/view-class-info.d.ts +22 -0
  1961. package/schematics/_commons/view-class-info.js +58 -0
  1962. package/schematics/_commons/view-class-info.js.map +1 -0
  1963. package/schematics/_utility/models/file-data.d.ts +6 -0
  1964. package/schematics/_utility/models/file-data.js +3 -0
  1965. package/schematics/_utility/models/file-data.js.map +1 -0
  1966. package/schematics/_utility/models/file-system-node.d.ts +6 -0
  1967. package/schematics/_utility/models/file-system-node.js +12 -0
  1968. package/schematics/_utility/models/file-system-node.js.map +1 -0
  1969. package/schematics/_utility/models/project-info.d.ts +13 -0
  1970. package/schematics/_utility/models/project-info.js +20 -0
  1971. package/schematics/_utility/models/project-info.js.map +1 -0
  1972. package/schematics/_utility/modified-library-functions.d.ts +24 -0
  1973. package/schematics/_utility/modified-library-functions.js +150 -0
  1974. package/schematics/_utility/modified-library-functions.js.map +1 -0
  1975. package/schematics/_utility/utility-functions.d.ts +60 -0
  1976. package/schematics/_utility/utility-functions.js +221 -0
  1977. package/schematics/_utility/utility-functions.js.map +1 -0
  1978. package/schematics/add/add/index.d.ts +2 -0
  1979. package/schematics/add/add/index.js +27 -0
  1980. package/schematics/add/add/index.js.map +1 -0
  1981. package/schematics/add/create-nae-files/files/app-routing.module.ts.template +13 -0
  1982. package/schematics/add/create-nae-files/index.d.ts +2 -0
  1983. package/schematics/add/create-nae-files/index.js +154 -0
  1984. package/schematics/add/create-nae-files/index.js.map +1 -0
  1985. package/schematics/add/create-nae-files/schema.json +7 -0
  1986. package/schematics/collection.json +30 -0
  1987. package/schematics/configuration-service/files/__project@dasherize__-configuration.service.ts.template +13 -0
  1988. package/schematics/configuration-service/schema.json +7 -0
  1989. package/schematics/configuration-service/schematic-create-configuration-service.d.ts +2 -0
  1990. package/schematics/configuration-service/schematic-create-configuration-service.js +41 -0
  1991. package/schematics/configuration-service/schematic-create-configuration-service.js.map +1 -0
  1992. package/schematics/migrations/4.1/migration-4.1.d.ts +5 -0
  1993. package/schematics/migrations/4.1/migration-4.1.js +37 -0
  1994. package/schematics/migrations/4.1/migration-4.1.js.map +1 -0
  1995. package/schematics/migrations.json +10 -0
  1996. package/schematics/view/_utility/view-service-functions.d.ts +9 -0
  1997. package/schematics/view/_utility/view-service-functions.js +59 -0
  1998. package/schematics/view/_utility/view-service-functions.js.map +1 -0
  1999. package/schematics/view/_utility/view-utility-functions.d.ts +7 -0
  2000. package/schematics/view/_utility/view-utility-functions.js +53 -0
  2001. package/schematics/view/_utility/view-utility-functions.js.map +1 -0
  2002. package/schematics/view-service/files/__project@dasherize__-view.service.ts.template +14 -0
  2003. package/schematics/view-service/schema.json +7 -0
  2004. package/schematics/view-service/schematic-create-view-service.d.ts +2 -0
  2005. package/schematics/view-service/schematic-create-view-service.js +25 -0
  2006. package/schematics/view-service/schematic-create-view-service.js.map +1 -0
  2007. package/src/assets/i18n/de.json +419 -0
  2008. package/src/assets/i18n/en.json +419 -0
  2009. package/src/assets/i18n/sk.json +419 -0
  2010. package/src/schema/nae-schema.json +770 -0
@@ -0,0 +1,843 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { HttpParams } from '@angular/common/http';
3
+ import { CaseResourceService } from '../../../resources/engine-endpoint/case-resource.service';
4
+ import { CaseTreeNode } from './model/case-tree-node';
5
+ import { TreeCaseViewService } from '../tree-case-view.service';
6
+ import { TaskResourceService } from '../../../resources/engine-endpoint/task-resource.service';
7
+ import { LoggerService } from '../../../logger/services/logger.service';
8
+ import { ProcessService } from '../../../process/process.service';
9
+ import { SideMenuService } from '../../../side-menu/services/side-menu.service';
10
+ import { SideMenuSize } from '../../../side-menu/models/side-menu-size';
11
+ import { forkJoin, of, ReplaySubject, throwError } from 'rxjs';
12
+ import { TreePetriflowIdentifiers } from '../model/tree-petriflow-identifiers';
13
+ import { tap } from 'rxjs/operators';
14
+ import { TranslateService } from '@ngx-translate/core';
15
+ import { hasContent } from '../../../utility/pagination/page-has-content';
16
+ import { NestedTreeControl } from '@angular/cdk/tree';
17
+ import { MatTreeNestedDataSource } from '@angular/material/tree';
18
+ import { ofVoid } from '../../../utility/of-void';
19
+ import { getImmediateData } from '../../../utility/get-immediate-data';
20
+ import { NAE_OPTION_SELECTOR_COMPONENT } from '../../../side-menu/content-components/injection-tokens';
21
+ import { SimpleFilter } from '../../../filter/models/simple-filter';
22
+ import { ResultWithAfterActions } from '../../../utility/result-with-after-actions';
23
+ import { refreshTree } from '../../../utility/refresh-tree';
24
+ export class CaseTreeService {
25
+ constructor(_caseResourceService, _treeCaseViewService, _taskResourceService, _logger, _processService, _sideMenuService, _translateService, _optionSelectorComponent) {
26
+ this._caseResourceService = _caseResourceService;
27
+ this._treeCaseViewService = _treeCaseViewService;
28
+ this._taskResourceService = _taskResourceService;
29
+ this._logger = _logger;
30
+ this._processService = _processService;
31
+ this._sideMenuService = _sideMenuService;
32
+ this._translateService = _translateService;
33
+ this._optionSelectorComponent = _optionSelectorComponent;
34
+ /**
35
+ * Weather the tree is eager loaded or not.
36
+ *
37
+ * Defaults to `false`.
38
+ *
39
+ * It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
40
+ */
41
+ this._isEagerLoaded = false;
42
+ this._treeDataSource = new MatTreeNestedDataSource();
43
+ this._treeControl = new NestedTreeControl(node => node.children);
44
+ _treeCaseViewService.reloadCase$.asObservable().subscribe(() => {
45
+ this.reloadCurrentCase();
46
+ });
47
+ this._treeRootLoaded$ = new ReplaySubject(1);
48
+ }
49
+ ngOnDestroy() {
50
+ this._treeRootLoaded$.complete();
51
+ }
52
+ set rootFilter(filter) {
53
+ this._rootNodesFilter = filter;
54
+ this.dataSource.data = [];
55
+ this.loadTreeRoot();
56
+ }
57
+ get dataSource() {
58
+ return this._treeDataSource;
59
+ }
60
+ get treeControl() {
61
+ return this._treeControl;
62
+ }
63
+ get currentNode() {
64
+ return this._currentNode;
65
+ }
66
+ /**
67
+ * Emits a value whenever a new root node Filter is set.
68
+ *
69
+ * `true` is emitted if the root node was successfully loaded. `false` otherwise.
70
+ *
71
+ * On subscription emits the last emitted value (if any) to the subscriber.
72
+ */
73
+ get treeRootLoaded$() {
74
+ return this._treeRootLoaded$.asObservable();
75
+ }
76
+ get _currentCase() {
77
+ return this._currentNode ? this._currentNode.case : undefined;
78
+ }
79
+ /**
80
+ * @returns an `Observable` of the {@link LoadingEmitter} representing the loading state of the root node.
81
+ * Returns `undefined` if the tree has not yet been initialized.
82
+ *
83
+ * Wait for an emission on the [treeRootLoaded$]{@link CaseTreeService#treeRootLoaded$} stream before getting this Observable.
84
+ *
85
+ * The first value emitted by the Observable is `false`, when the tree finishes initializing.
86
+ */
87
+ get rootNodeLoading$() {
88
+ return !!this._rootNode ? this._rootNode.loadingChildren.asObservable() : undefined;
89
+ }
90
+ /**
91
+ * @returns an `Observable` of the {@link LoadingEmitter} representing whether the root node is currently
92
+ * in the process of adding a new child node or not.
93
+ * Returns `undefined` if the tree has not yet been initialized.
94
+ *
95
+ * Wait for an emission on the [treeRootLoaded$]{@link CaseTreeService#treeRootLoaded$} stream before getting this Observable.
96
+ *
97
+ * The first value emitted by the Observable is `false`, when the tree finishes initializing.
98
+ */
99
+ get rootNodeAddingChild$() {
100
+ return !!this._rootNode ? this._rootNode.addingNode.asObservable() : undefined;
101
+ }
102
+ /**
103
+ * Weather the tree is eager loaded or not.
104
+ *
105
+ * Defaults to `false`.
106
+ *
107
+ * It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
108
+ */
109
+ get isEagerLoaded() {
110
+ return this._isEagerLoaded;
111
+ }
112
+ /**
113
+ * Weather the tree is eager loaded or not.
114
+ *
115
+ * Defaults to `false`.
116
+ *
117
+ * It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
118
+ *
119
+ * @param eager the new setting for eager loading
120
+ */
121
+ set isEagerLoaded(eager) {
122
+ this._isEagerLoaded = eager;
123
+ }
124
+ /**
125
+ * Loads and populates the topmost level of the tree.
126
+ *
127
+ * The displayed cases are determined by this object's [rootFilter]{@link CaseTreeService#rootFilter}.
128
+ *
129
+ * Cases are loaded one page at a time and the tree is refreshed after each page.
130
+ * [finishedLoadingFirstLevel$]{@link CaseTreeService#treeRootLoaded$}
131
+ * will emit `true` once the last page loads successfully.
132
+ * `false` will be emitted if any of the requests fail.
133
+ */
134
+ loadTreeRoot() {
135
+ if (this._rootNodesFilter) {
136
+ this._caseResourceService.searchCases(this._rootNodesFilter).subscribe(page => {
137
+ if (hasContent(page)) {
138
+ this._rootNode = new CaseTreeNode(page.content[0], undefined);
139
+ if (page.content.length !== 1) {
140
+ this._logger.warn('Filter for tree root returned more than one case. Using the first value as tree root...');
141
+ }
142
+ this._treeRootLoaded$.next(true);
143
+ }
144
+ else {
145
+ this._logger.error('Tree root cannot be generated from the provided filter', page);
146
+ }
147
+ }, error => {
148
+ this._logger.error('Root node of the case tree could not be loaded', error);
149
+ this._treeRootLoaded$.next(false);
150
+ });
151
+ }
152
+ }
153
+ /**
154
+ * Adds the loaded tree root to the display based on the setting.
155
+ * @param showRoot whether the root of the tree should be displayed in the tree or not.
156
+ * If the root is not displayed it's children will be displayed on the first level.
157
+ * @returns an Observable that emits when the tree finishes initialization.
158
+ */
159
+ initializeTree(showRoot) {
160
+ if (!this._rootNode) {
161
+ this._logger.error('Set a Filter before initializing the case tree');
162
+ return throwError(new Error('Set a Filter before initializing the case tree'));
163
+ }
164
+ this._showRoot = showRoot;
165
+ if (showRoot) {
166
+ this.dataSource.data = [this._rootNode];
167
+ }
168
+ else {
169
+ this.dataSource.data = this._rootNode.children;
170
+ }
171
+ let ret;
172
+ if (!showRoot || this._isEagerLoaded) {
173
+ const result = new ReplaySubject(1);
174
+ ret = result.asObservable();
175
+ this.expandNode(this._rootNode).subscribe(() => {
176
+ this.refreshTree();
177
+ result.next();
178
+ result.complete();
179
+ });
180
+ }
181
+ else {
182
+ this.refreshTree();
183
+ ret = ofVoid();
184
+ }
185
+ return ret;
186
+ }
187
+ /**
188
+ * Notifies the parent TreeCaseView that a case was clicked in the tree and it's Task should be displayed
189
+ */
190
+ changeActiveNode(node) {
191
+ this._currentNode = node;
192
+ this._treeCaseViewService.loadTask$.next(node ? node.case : undefined);
193
+ }
194
+ /**
195
+ * Toggles the expansion state of a node
196
+ * @param node the {@link CaseTreeNode} who's content should be toggled
197
+ */
198
+ toggleNode(node) {
199
+ if (this._treeControl.isExpanded(node)) {
200
+ this._treeControl.collapse(node);
201
+ }
202
+ else {
203
+ this.expandNode(node);
204
+ }
205
+ }
206
+ /**
207
+ * Expands the target node in the tree and reloads it's children if they are marked as dirty
208
+ * @param node the {@link CaseTreeNode} that should be expanded
209
+ * @returns emits `true` if the node is expanded and `false` if not. If the expansion causes more node expansions
210
+ * (e.g. eager loaded tree) then, the Observable emits after all the subtree expansions complete.
211
+ */
212
+ expandNode(node) {
213
+ this._logger.debug('Requesting expansion of tree node', node.toLoggableForm());
214
+ if (node.loadingChildren.isActive) {
215
+ this._logger.debug('Node requested for expansion is loading. Expansion canceled.');
216
+ return of(false);
217
+ }
218
+ if (!node.dirtyChildren) {
219
+ this._logger.debug('Node requested for expansion has clean children. Simple expansion.');
220
+ this.treeControl.expand(node);
221
+ return of(true);
222
+ }
223
+ const ret = new ReplaySubject(1);
224
+ this.updateNodeChildren(node).subscribe(() => {
225
+ this._logger.debug('Node requested for expansion with dirty children had its children reloaded.');
226
+ if (node.children.length > 0) {
227
+ this._logger.debug('Node expanded.', node.toLoggableForm());
228
+ this.treeControl.expand(node);
229
+ if (this._isEagerLoaded) {
230
+ this._logger.debug(`Eager loading children of tree node with case id '${node.case.stringId}'`);
231
+ const innerObservables = node.children.map(childNode => this.expandNode(childNode));
232
+ // forkJoin doesn't emit with 0 input observables
233
+ innerObservables.push(of(true));
234
+ forkJoin(innerObservables).subscribe(() => {
235
+ ret.next(true);
236
+ ret.complete();
237
+ });
238
+ }
239
+ else {
240
+ ret.next(true);
241
+ ret.complete();
242
+ }
243
+ }
244
+ else {
245
+ ret.next(false);
246
+ ret.complete();
247
+ }
248
+ });
249
+ return ret.asObservable();
250
+ }
251
+ /**
252
+ * Checks whether dirty children need to be reloaded and reloads them if needed.
253
+ * @param node the {@link CaseTreeNode} who's children are updated
254
+ * @returns emits when loading finishes
255
+ */
256
+ updateNodeChildren(node) {
257
+ node.loadingChildren.on();
258
+ const childrenCaseRef = getImmediateData(node.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
259
+ if (!childrenCaseRef || childrenCaseRef.value.length === 0) {
260
+ node.children = [];
261
+ this.refreshTree();
262
+ node.dirtyChildren = false;
263
+ node.loadingChildren.off();
264
+ return ofVoid();
265
+ }
266
+ if (node.children.length === childrenCaseRef.value.length) {
267
+ const existingChildren = new Set();
268
+ node.children.forEach(childNode => existingChildren.add(childNode.case.stringId));
269
+ if (childrenCaseRef.value.every(caseId => existingChildren.has(caseId))) {
270
+ node.dirtyChildren = false;
271
+ node.loadingChildren.off();
272
+ return ofVoid();
273
+ }
274
+ }
275
+ return this.updatePageOfChildren(node, 0).pipe(tap(() => {
276
+ this.refreshTree();
277
+ node.dirtyChildren = false;
278
+ node.loadingChildren.off();
279
+ }));
280
+ }
281
+ /**
282
+ * Loads every page of children from the given number and updates the existing children.
283
+ *
284
+ * Missing nodes are removed. Existing nodes are marked as dirty. New nodes are added.
285
+ *
286
+ * Nodes are returned in their insertion order.
287
+ * @param node the {@link CaseTreeNode} who's children are updated
288
+ * @param pageNumber the number of the first page that should be loaded. All following pages are loaded as well
289
+ * @returns next is emitted when loading of all pages completes (regardless of the outcome)
290
+ */
291
+ updatePageOfChildren(node, pageNumber) {
292
+ const requestBody = this.createChildRequestBody(node);
293
+ if (!requestBody) {
294
+ this._logger.error('Cannot create filter to find children of the given node', node.case);
295
+ return throwError(new Error('Cannot create filter to find children of the given node'));
296
+ }
297
+ const done = new ReplaySubject(1);
298
+ let params = new HttpParams();
299
+ params = params.set('page', `${pageNumber}`).set('sort', 'creationDate,asc');
300
+ this._caseResourceService.getCases(requestBody, params).subscribe(page => {
301
+ if (!hasContent(page)) {
302
+ this._logger.error('Child cases invalid page content', page);
303
+ done.next();
304
+ done.complete();
305
+ return;
306
+ }
307
+ this.updateCurrentChildrenWithNewPage(node, page);
308
+ if (pageNumber + 1 < page.pagination.totalPages) {
309
+ this.updatePageOfChildren(node, pageNumber + 1).subscribe(() => {
310
+ done.next();
311
+ done.complete();
312
+ });
313
+ }
314
+ else {
315
+ done.next();
316
+ done.complete();
317
+ }
318
+ }, error => {
319
+ this._logger.error('Child cases could not be loaded', error);
320
+ done.next();
321
+ done.complete();
322
+ });
323
+ return done.asObservable();
324
+ }
325
+ /**
326
+ * Updates the children of the given {@link CaseTreeNode} with [Cases]{@link Case} from the provided {@link Page}.
327
+ * @param node the {@link CaseTreeNode} who's children are updated
328
+ * @param page the {@link Page} that contains the updated children
329
+ */
330
+ updateCurrentChildrenWithNewPage(node, page) {
331
+ page.content.forEach((newCase, index) => {
332
+ const position = page.pagination.size * page.pagination.number + index;
333
+ while (position < node.children.length && node.children[position].case.stringId !== newCase.stringId) {
334
+ node.children.splice(position, 1);
335
+ }
336
+ if (node.children.length === position) {
337
+ node.children.push(new CaseTreeNode(newCase, node));
338
+ }
339
+ else {
340
+ node.children[position].case = newCase;
341
+ node.dirtyChildren = true;
342
+ this.treeControl.collapseDescendants(node.children[position]);
343
+ }
344
+ });
345
+ }
346
+ /**
347
+ * @param node the {@link CaseTreeNode} who's children the {@link Filter} should return
348
+ * @returns a request body that finds all child cases of the given `node`.
349
+ * Returns `undefined` if the provided `node` doesn't contain enough information to create the request body.
350
+ */
351
+ createChildRequestBody(node) {
352
+ const childCaseRef = getImmediateData(node.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
353
+ if (!childCaseRef) {
354
+ return undefined;
355
+ }
356
+ return { stringId: childCaseRef.value };
357
+ }
358
+ /**
359
+ * Adds a child to the root node.
360
+ *
361
+ * Useful if you are using the layout where the root node is hidden.
362
+ * @returns emits `true` if the child was successfully added, `false` if not
363
+ */
364
+ addRootChildNode() {
365
+ const ret = new ReplaySubject(1);
366
+ this.addChildNode(this._rootNode).subscribe(added => {
367
+ if (added) {
368
+ if (!this._showRoot && this._treeDataSource.data.length === 0) {
369
+ this._treeDataSource.data = this._rootNode.children;
370
+ this.refreshTree();
371
+ }
372
+ }
373
+ ret.next(added);
374
+ ret.complete();
375
+ });
376
+ return ret;
377
+ }
378
+ /**
379
+ * Adds a new child node to the given node based on the properties of the node's case
380
+ * @returns emits `true` if the child was successfully added, `false` if not
381
+ */
382
+ addChildNode(clickedNode) {
383
+ clickedNode.addingNode.on();
384
+ const caseRefField = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
385
+ if (caseRefField.allowedNets.length === 0) {
386
+ this._logger.error(`Case ${clickedNode.case.stringId} can add new tree nodes but has no allowed nets`);
387
+ clickedNode.addingNode.off();
388
+ return of(false);
389
+ }
390
+ const ret = new ReplaySubject(1);
391
+ if (caseRefField.allowedNets.length === 1) {
392
+ this.createAndAddChildCase(caseRefField.allowedNets[0], clickedNode, ret);
393
+ }
394
+ else {
395
+ this._processService.getNets(caseRefField.allowedNets).subscribe(nets => {
396
+ const sideMeuRef = this._sideMenuService.open(this._optionSelectorComponent, SideMenuSize.MEDIUM, {
397
+ title: clickedNode.case.title,
398
+ options: nets.map(net => ({ text: net.title, value: net.identifier }))
399
+ });
400
+ let sideMenuSubscription;
401
+ sideMenuSubscription = sideMeuRef.onClose.subscribe(event => {
402
+ if (!!event.data) {
403
+ this.createAndAddChildCase(event.data.value, clickedNode, ret);
404
+ sideMenuSubscription.unsubscribe();
405
+ }
406
+ else {
407
+ clickedNode.addingNode.off();
408
+ ret.next(false);
409
+ ret.complete();
410
+ }
411
+ });
412
+ });
413
+ }
414
+ return ret.asObservable();
415
+ }
416
+ /**
417
+ * Creates a new case and adds it to the children of the specified node
418
+ * @param processIdentifier identifier of the process that should be created
419
+ * @param clickedNode the node that is the parent of the new case
420
+ * @param operationResult the result of the operation will be emitted into this stream when the operation completes
421
+ */
422
+ createAndAddChildCase(processIdentifier, clickedNode, operationResult) {
423
+ this._processService.getNet(processIdentifier).subscribe(net => {
424
+ const childTitleImmediate = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILD_NODE_TITLE);
425
+ let childTitle = this._translateService.instant('caseTree.newNodeDefaultName');
426
+ if (!!childTitleImmediate) {
427
+ childTitle = childTitleImmediate.value;
428
+ }
429
+ else if (!!net.defaultCaseName) {
430
+ childTitle = net.defaultCaseName;
431
+ }
432
+ this._caseResourceService.createCase({
433
+ title: childTitle,
434
+ netId: net.stringId
435
+ }).subscribe((outcomeResource) => {
436
+ const caseRefField = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
437
+ const setCaseRefValue = [...caseRefField.value, outcomeResource.outcome.aCase.stringId];
438
+ this.performCaseRefCall(clickedNode.case.stringId, setCaseRefValue).subscribe(valueChange => this.updateTreeAfterChildAdd(clickedNode, valueChange ? valueChange : setCaseRefValue, operationResult));
439
+ });
440
+ });
441
+ }
442
+ /**
443
+ * Updates the tree after adding a new child
444
+ * @param clickedNode the parent node
445
+ * @param newCaseRefValue the new value of the parent node's case ref
446
+ * @param operationResult the result of the operation will be emitted into this stream when the operation completes
447
+ */
448
+ updateTreeAfterChildAdd(clickedNode, newCaseRefValue, operationResult) {
449
+ this.updateNodeChildrenFromChangedFields(clickedNode, newCaseRefValue).subscribe(result => {
450
+ clickedNode.addingNode.off();
451
+ this.expandNode(clickedNode).subscribe(expandSuccess => {
452
+ if (expandSuccess) {
453
+ this.changeActiveNode(clickedNode.children[clickedNode.children.length - 1]);
454
+ result.executeAfterActions();
455
+ }
456
+ operationResult.next(true);
457
+ operationResult.complete();
458
+ });
459
+ });
460
+ }
461
+ /**
462
+ * removes the provided non-root node if the underlying case allows it.
463
+ *
464
+ * The underlying case is removed from the case ref of it's parent element with the help from the `remove`
465
+ * operation provided by case ref itself.
466
+ * @param node the node that should be removed from the tree
467
+ */
468
+ removeNode(node) {
469
+ if (!node.parent) {
470
+ this._logger.error('Case tree doesn\'t support removal of the root node, as it has no parent case ref.');
471
+ return;
472
+ }
473
+ node.removingNode.on();
474
+ const caseRefImmediate = getImmediateData(node.parent.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
475
+ const setCaseRefValue = caseRefImmediate.value.filter(id => id !== node.case.stringId);
476
+ this.performCaseRefCall(node.parent.case.stringId, setCaseRefValue).subscribe(caseRefChange => {
477
+ const newCaseRefValue = caseRefChange ? caseRefChange : setCaseRefValue;
478
+ this.deleteRemovedNodes(node.parent, newCaseRefValue);
479
+ this.updateNodeChildrenFromChangedFields(node.parent, newCaseRefValue);
480
+ node.removingNode.off();
481
+ });
482
+ this.deselectNodeIfDescendantOf(node);
483
+ }
484
+ /**
485
+ * Expands all nodes in the tree dictated by the argument.
486
+ *
487
+ * @param path nodes that should be expanded along with their path from the root node
488
+ */
489
+ expandPath(path) {
490
+ if (this.dataSource.data.length === 0) {
491
+ return;
492
+ }
493
+ let rootNode = this.dataSource.data[0];
494
+ while (rootNode.parent !== undefined) {
495
+ rootNode = rootNode.parent;
496
+ }
497
+ this.expandLevel([rootNode], this.convertPathToExpansionTree(path));
498
+ }
499
+ /**
500
+ * Transforms a {@Link CaseTreePath} object into an {@link ExpansionTree} object.
501
+ * The result has all the common paths merged into single branches of the resulting tree structure.
502
+ *
503
+ * @param paths nodes that should be expanded along with their path from the root node
504
+ * @returns an {@link ExpansionTree} equivalent to the provided {@link CaseTreePath}
505
+ */
506
+ convertPathToExpansionTree(paths) {
507
+ const result = {};
508
+ Object.values(paths).forEach(path => {
509
+ let currentNode = result;
510
+ path.forEach(nodeId => {
511
+ if (currentNode[nodeId] === undefined) {
512
+ currentNode[nodeId] = {};
513
+ }
514
+ currentNode = currentNode[nodeId];
515
+ });
516
+ });
517
+ return result;
518
+ }
519
+ /**
520
+ * Recursively expands all nodes from the provided array of nodes, that appear in the top level of the {@link ExpansionTree} object.
521
+ *
522
+ * @param levelNodes nodes from which the expansion should start
523
+ * @param targets a tree structure representing the nodes that are to be expanded recursively.
524
+ * The top level nodes are expanded first, from the provided `levelNodes`.
525
+ */
526
+ expandLevel(levelNodes, targets) {
527
+ const desiredIds = new Set(Object.keys(targets));
528
+ if (desiredIds.size === 0) {
529
+ return;
530
+ }
531
+ levelNodes.forEach(n => {
532
+ const node = n;
533
+ if (!desiredIds.has(node.case.stringId)) {
534
+ return; // continue
535
+ }
536
+ this.expandNode(node).subscribe(success => {
537
+ if (!success) {
538
+ this._logger.debug('Could not expand tree node with ID: ' + node.case.stringId);
539
+ return;
540
+ }
541
+ this.expandLevel(node.children, targets[node.case.stringId]);
542
+ });
543
+ });
544
+ }
545
+ /**
546
+ * Deletes the subtrees rooted at the nodes that are present in the parent node's child case ref values,
547
+ * but are no longer present in the new value
548
+ * @param parentNode an inner node of the tree that had some of it's children removed
549
+ * @param newCaseRefValue the new value of the parent node's case ref
550
+ */
551
+ deleteRemovedNodes(parentNode, newCaseRefValue) {
552
+ const removedChildren = new Set();
553
+ getImmediateData(parentNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF).value.forEach(id => removedChildren.add(id));
554
+ newCaseRefValue.forEach(id => removedChildren.delete(id));
555
+ removedChildren.forEach(removedId => this._caseResourceService.deleteCase(removedId, true)
556
+ .subscribe(responseMessage => {
557
+ if (responseMessage.error) {
558
+ this._logger.error('Removal of child case unsuccessful', responseMessage.error);
559
+ }
560
+ }));
561
+ }
562
+ /**
563
+ * Deselects the currently selected node if it is a descendant of the provided node
564
+ * @param node the node who's descendants should be deselected
565
+ */
566
+ deselectNodeIfDescendantOf(node) {
567
+ let bubblingNode = this.currentNode;
568
+ while (bubblingNode && bubblingNode !== this._rootNode) {
569
+ if (bubblingNode === node) {
570
+ this.changeActiveNode(undefined);
571
+ break;
572
+ }
573
+ bubblingNode = bubblingNode.parent;
574
+ }
575
+ }
576
+ /**
577
+ * Performs a backend call on the given case, and sets the value of the case ref field in the transition defined by
578
+ * [CASE_REF_TRANSITION]{@link TreePetriflowIdentifiers#CASE_REF_TRANSITION}.
579
+ * @param caseId string ID of the case that should have it's tree case ref set
580
+ * @param newCaseRefValue the new value of the case ref field
581
+ */
582
+ performCaseRefCall(caseId, newCaseRefValue) {
583
+ const result$ = new ReplaySubject(1);
584
+ this._taskResourceService.getTasks(SimpleFilter.fromTaskQuery({
585
+ case: { id: caseId },
586
+ transitionId: TreePetriflowIdentifiers.CASE_REF_TRANSITION
587
+ })).subscribe(page => {
588
+ if (!hasContent(page)) {
589
+ this._logger.error('Case ref accessor task doesn\'t exist!');
590
+ result$.complete();
591
+ return;
592
+ }
593
+ const task = page.content[0];
594
+ this._taskResourceService.assignTask(task.stringId).subscribe(assignResponse => {
595
+ if (!assignResponse.success) {
596
+ this._logger.error('Case ref accessor task could not be assigned', assignResponse.error);
597
+ }
598
+ const body = {};
599
+ body[TreePetriflowIdentifiers.CHILDREN_CASE_REF] = {
600
+ type: 'caseRef',
601
+ value: newCaseRefValue
602
+ };
603
+ this._taskResourceService.setData(task.stringId, body).subscribe((outcomeResource) => {
604
+ const changedFields = outcomeResource.outcome.changedFields.changedFields;
605
+ const caseRefChanges = changedFields[TreePetriflowIdentifiers.CHILDREN_CASE_REF];
606
+ result$.next(caseRefChanges ? caseRefChanges.value : undefined);
607
+ result$.complete();
608
+ this._taskResourceService.finishTask(task.stringId).subscribe(finishResponse => {
609
+ if (finishResponse.success) {
610
+ this._logger.debug('Case ref accessor task finished', finishResponse.success);
611
+ }
612
+ else {
613
+ this._logger.error('Case ref accessor task finish failed', finishResponse.error);
614
+ }
615
+ });
616
+ }, error => {
617
+ this._logger.error('Could not set data to tree case ref', error);
618
+ result$.complete();
619
+ });
620
+ }, error => {
621
+ this._logger.error('Case ref accessor task could not be assigned', error);
622
+ result$.complete();
623
+ });
624
+ }, error => {
625
+ this._logger.error('Case ref accessor task could not be found', error);
626
+ result$.complete();
627
+ });
628
+ return result$.asObservable();
629
+ }
630
+ /**
631
+ * Performs an update after adding or removing a node from the tree.
632
+ *
633
+ * If only one node was added adds it into the tree
634
+ *
635
+ * If only one node was removed removes it from the tree
636
+ *
637
+ * Otherwise collapses the affected node and marks it's children as dirty
638
+ *
639
+ * @param affectedNode node that had it's children changed
640
+ * @param newCaseRefValue new value of the caseRef field returned by backend
641
+ * @returns an `Observable` that emits an object with the [result]{@link ResultWithAfterActions#result} attribute set to `true` if
642
+ * the update completes successfully and `false` otherwise.
643
+ */
644
+ updateNodeChildrenFromChangedFields(affectedNode, newCaseRefValue) {
645
+ const caseRefField = getImmediateData(affectedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
646
+ const newChildren = new Set();
647
+ newCaseRefValue.forEach(id => newChildren.add(id));
648
+ let numberOfMissingChildren = 0;
649
+ for (let i = 0; i < caseRefField.value.length && numberOfMissingChildren < 2; i++) {
650
+ if (!newChildren.has(caseRefField.value[i])) {
651
+ numberOfMissingChildren++;
652
+ }
653
+ }
654
+ const exactlyOneChildAdded = caseRefField.value.length + 1 === newCaseRefValue.length
655
+ && caseRefField.value.every(it => newChildren.has(it));
656
+ const exactlyOneChildRemoved = caseRefField.value.length - 1 === newCaseRefValue.length
657
+ && numberOfMissingChildren === 1;
658
+ if (!exactlyOneChildAdded && !exactlyOneChildRemoved) {
659
+ caseRefField.value = newCaseRefValue;
660
+ this._treeControl.collapseDescendants(affectedNode);
661
+ affectedNode.dirtyChildren = true;
662
+ return of(new ResultWithAfterActions(true));
663
+ }
664
+ if (exactlyOneChildAdded) {
665
+ return this.processChildNodeAdd(affectedNode, caseRefField, newCaseRefValue);
666
+ }
667
+ else {
668
+ return this.processChildNodeRemove(affectedNode, caseRefField, newChildren);
669
+ }
670
+ }
671
+ /**
672
+ * Adds a new child node to the `affectedNode` by adding the last Case from the `newCaseRefValue`
673
+ * @param affectedNode the node in the tree that had a child added - the parent node
674
+ * @param caseRefField the case ref field of the affected node
675
+ * @param newCaseRefValue the new value of the case ref field in the node
676
+ * @returns an `Observable` that emits `true` if a node was successfully added, `false` otherwise.
677
+ */
678
+ processChildNodeAdd(affectedNode, caseRefField, newCaseRefValue) {
679
+ const result$ = new ReplaySubject(1);
680
+ caseRefField.value = newCaseRefValue;
681
+ this._caseResourceService.getOneCase(newCaseRefValue[newCaseRefValue.length - 1]).subscribe(childCase => {
682
+ if (childCase) {
683
+ this._logger.debug('Pushing child node to tree', { childCase, affectedNode: affectedNode.toLoggableForm() });
684
+ const childNode = this.pushChildToTree(affectedNode, childCase);
685
+ result$.next(new ResultWithAfterActions(true, [() => {
686
+ if (this._isEagerLoaded) {
687
+ this._logger.debug('Eagerly expanding a newly added node.', childNode.toLoggableForm());
688
+ this.expandNode(childNode);
689
+ }
690
+ }]));
691
+ }
692
+ else {
693
+ this._logger.error('New child case was not found, illegal state', childCase);
694
+ result$.next(new ResultWithAfterActions(false));
695
+ }
696
+ result$.complete();
697
+ }, error => {
698
+ this._logger.error('New child node case could not be found', error);
699
+ result$.next(new ResultWithAfterActions(false));
700
+ result$.complete();
701
+ });
702
+ return result$.asObservable();
703
+ }
704
+ /**
705
+ * Adds a new child node to the target parent node.
706
+ * @param parentNode the nodes whose child should be added
707
+ * @param childCase the child case
708
+ * @returns the newly added node
709
+ */
710
+ pushChildToTree(parentNode, childCase) {
711
+ const childNode = new CaseTreeNode(childCase, parentNode);
712
+ parentNode.children.push(childNode);
713
+ this.refreshTree();
714
+ return childNode;
715
+ }
716
+ /**
717
+ * Removes the deleted node from the children of the `affectedNode`
718
+ * @param affectedNode the node in the tree that had it's child removed
719
+ * @param caseRefField the case ref field of the affected node
720
+ * @param newCaseRefValues the new value of the case ref field in the node
721
+ * @returns an `Observable` that emits `true` when the remove operation completes.
722
+ */
723
+ processChildNodeRemove(affectedNode, caseRefField, newCaseRefValues) {
724
+ const index = caseRefField.value.findIndex(it => !newCaseRefValues.has(it));
725
+ caseRefField.value.splice(index, 1);
726
+ affectedNode.children.splice(index, 1);
727
+ this.refreshTree();
728
+ return of(new ResultWithAfterActions(true));
729
+ }
730
+ /**
731
+ * @ignore
732
+ * Forces a rerender of the tree content
733
+ */
734
+ refreshTree() {
735
+ refreshTree(this._treeDataSource);
736
+ }
737
+ /**
738
+ * Reloads the currently selected case node. The {@link Case} object held in the {@link CaseTreeNode} instance is not replaced,
739
+ * but the new Case is `Object.assign`-ed into it. This means that the reference to the Case instance is unchanged but references
740
+ * to all it's non-primitive attributes are changed.
741
+ *
742
+ * If a reload of the current node is initiated before the previous one completed, the new one is ignored.
743
+ *
744
+ * If the currently selected case changed before a response from backend was received the response is ignored.
745
+ *
746
+ * Note that the parent node, nor the child nodes are reloaded.
747
+ */
748
+ reloadCurrentCase() {
749
+ if (!this._currentNode) {
750
+ this._logger.debug('No Tree Case Node selected, nothing to reload');
751
+ return;
752
+ }
753
+ if (this._reloadedCaseId && this._currentNode.case.stringId !== this._reloadedCaseId) {
754
+ this._logger.debug('Reload of the current case already in progress');
755
+ return;
756
+ }
757
+ this._reloadedCaseId = this._currentNode.case.stringId;
758
+ this._caseResourceService.getOneCase(this._currentCase.stringId).subscribe(reloadedCurrentCase => {
759
+ if (!reloadedCurrentCase) {
760
+ this._logger.error('Current Case Tree Node could not be reloaded. Invalid server response', reloadedCurrentCase);
761
+ return;
762
+ }
763
+ if (this._currentNode && reloadedCurrentCase.stringId === this._currentNode.case.stringId) {
764
+ this._reloadedCaseId = undefined;
765
+ const change = this.determineCaseUpdate(this._currentCase, reloadedCurrentCase);
766
+ Object.assign(this._currentCase, reloadedCurrentCase);
767
+ this._treeCaseViewService.loadTask$.next(this._currentCase);
768
+ if (change.visibleTreePropertiesChanged) {
769
+ this.refreshTree();
770
+ }
771
+ if (change.childrenChanged) {
772
+ this._currentNode.dirtyChildren = true;
773
+ this.expandNode(this._currentNode);
774
+ }
775
+ this._logger.debug('Current Case Tree Node reloaded');
776
+ }
777
+ else {
778
+ this._logger.debug('Discarding case reload response, since the current node has changed before its case was received');
779
+ }
780
+ }, error => {
781
+ this._logger.error('Current Case Tree Node reload request failed', error);
782
+ });
783
+ }
784
+ /**
785
+ * Determines if anny of the case attributes that are visible on the tree changed.
786
+ * @param oldCase the previous version of the Case object, that is currently displayed on the tree
787
+ * @param newCase the new version of the Case object, that should replace the old one
788
+ */
789
+ determineCaseUpdate(oldCase, newCase) {
790
+ const visibleAttributes = [
791
+ TreePetriflowIdentifiers.CAN_ADD_CHILDREN,
792
+ TreePetriflowIdentifiers.CAN_REMOVE_NODE,
793
+ TreePetriflowIdentifiers.BEFORE_TEXT_ICON,
794
+ TreePetriflowIdentifiers.TREE_ADD_ICON
795
+ ];
796
+ const result = {
797
+ visibleTreePropertiesChanged: true,
798
+ childrenChanged: false
799
+ };
800
+ const oldChildCaseRef = getImmediateData(oldCase, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
801
+ if (oldChildCaseRef !== undefined) {
802
+ const oldChildren = new Set(oldChildCaseRef.value);
803
+ const newChildren = new Set(getImmediateData(newCase, TreePetriflowIdentifiers.CHILDREN_CASE_REF).value);
804
+ result.childrenChanged = oldChildren.size !== newChildren.size;
805
+ if (!result.childrenChanged) {
806
+ result.childrenChanged = Array.from(oldChildren).some(childId => !newChildren.has(childId));
807
+ }
808
+ // short-circuit
809
+ if (result.childrenChanged) {
810
+ return result;
811
+ }
812
+ }
813
+ result.visibleTreePropertiesChanged = visibleAttributes.some(attribute => {
814
+ return getImmediateData(oldCase, attribute)
815
+ && getImmediateData(oldCase, attribute).value !== getImmediateData(newCase, attribute).value;
816
+ });
817
+ return result;
818
+ }
819
+ }
820
+ CaseTreeService.ctorParameters = () => [
821
+ { type: CaseResourceService },
822
+ { type: TreeCaseViewService },
823
+ { type: TaskResourceService },
824
+ { type: LoggerService },
825
+ { type: ProcessService },
826
+ { type: SideMenuService },
827
+ { type: TranslateService },
828
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_OPTION_SELECTOR_COMPONENT,] }] }
829
+ ];
830
+ CaseTreeService.decorators = [
831
+ { type: Injectable }
832
+ ];
833
+ CaseTreeService.ctorParameters = () => [
834
+ { type: CaseResourceService },
835
+ { type: TreeCaseViewService },
836
+ { type: TaskResourceService },
837
+ { type: LoggerService },
838
+ { type: ProcessService },
839
+ { type: SideMenuService },
840
+ { type: TranslateService },
841
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_OPTION_SELECTOR_COMPONENT,] }] }
842
+ ];
843
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmVlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdmlldy90cmVlLWNhc2Utdmlldy90cmVlLWNvbXBvbmVudC9jYXNlLXRyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBYSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUM3RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFHdEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFDLFFBQVEsRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUF5QixVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEcsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN4RSxPQUFPLEVB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IE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmVlTm9kZX0gZnJvbSAnLi9tb2RlbC9jYXNlLXRyZWUtbm9kZSc7XG5pbXBvcnQge1RyZWVDYXNlVmlld1NlcnZpY2V9IGZyb20gJy4uL3RyZWUtY2FzZS12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0ltbWVkaWF0ZURhdGF9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvaW1tZWRpYXRlLWRhdGEnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtQcm9jZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vcHJvY2Vzcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHtTaWRlTWVudVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NpZGUtbWVudS9zZXJ2aWNlcy9zaWRlLW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1NpZGVNZW51U2l6ZX0gZnJvbSAnLi4vLi4vLi4vc2lkZS1tZW51L21vZGVscy9zaWRlLW1lbnUtc2l6ZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7VHJlZVBldHJpZmxvd0lkZW50aWZpZXJzfSBmcm9tICcuLi9tb2RlbC90cmVlLXBldHJpZmxvdy1pZGVudGlmaWVycyc7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7aGFzQ29udGVudH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2UtaGFzLWNvbnRlbnQnO1xuaW1wb3J0IHtOZXN0ZWRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge29mVm9pZH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9vZi12b2lkJztcbmltcG9ydCB7Q2FzZUdldFJlcXVlc3RCb2R5fSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UtZ2V0LXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge2dldEltbWVkaWF0ZURhdGF9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvZ2V0LWltbWVkaWF0ZS1kYXRhJztcbmltcG9ydCB7TkFFX09QVElPTl9TRUxFQ1RPUl9DT01QT05FTlR9IGZyb20gJy4uLy4uLy4uL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7Q2FzZVRyZWVQYXRofSBmcm9tICcuL21vZGVsL2Nhc2UtdHJlZS1wYXRoJztcbmltcG9ydCB7RXhwYW5zaW9uVHJlZX0gZnJvbSAnLi9tb2RlbC9leHBhbnNpb24tdHJlZSc7XG5pbXBvcnQge1Jlc3VsdFdpdGhBZnRlckFjdGlvbnN9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcmVzdWx0LXdpdGgtYWZ0ZXItYWN0aW9ucyc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7U2V0RGF0YUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvZGF0YS1vdXRjb21lcy9zZXQtZGF0YS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7Q3JlYXRlQ2FzZUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvY2FzZS1vdXRjb21lcy9jcmVhdGUtY2FzZS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7cmVmcmVzaFRyZWV9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcmVmcmVzaC10cmVlJztcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCBoZWxwZXIgb2JqZWN0LCB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuIHR3byB2YWx1ZXMgZnJvbSBhIGZ1bmN0aW9uLlxuICovXG5pbnRlcmZhY2UgQ2FzZVVwZGF0ZVJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgYXR0cmlidXRlcyB0aGF0IGFyZSB2aXNpYmxlIG9uIHRoZSB0cmVlIGNoYW5nZWRcbiAgICAgKi9cbiAgICB2aXNpYmxlVHJlZVByb3BlcnRpZXNDaGFuZ2VkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG5vZGVzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlVHJlZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF9jdXJyZW50Tm9kZTogQ2FzZVRyZWVOb2RlO1xuICAgIHByaXZhdGUgX3Jvb3ROb2Rlc0ZpbHRlcjogRmlsdGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVEYXRhU291cmNlOiBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxDYXNlVHJlZU5vZGU+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=