@sap/open.fe 1.99.0 → 1.100.0

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 (969) hide show
  1. package/package.json +1 -1
  2. package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
  3. package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
  4. package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1748 -1813
  5. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +2 -3
  6. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.ts +1801 -0
  7. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +77 -32
  8. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +2 -3
  9. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.ts +26 -0
  10. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +43 -53
  11. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +2 -3
  12. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.ts +39 -0
  13. package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +31 -38
  14. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +8 -9
  15. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +3 -3
  16. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +23 -71
  17. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +4 -4
  18. package/packages/sap.fe.common/src/sap/fe/common/library.js +4 -5
  19. package/packages/sap.fe.common/src/sap/fe/common/library.ts +35 -0
  20. package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
  21. package/packages/sap.fe.common/src/sap/fe/common/resources.json +54 -32
  22. package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
  23. package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
  24. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -1
  25. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
  26. package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
  27. package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
  28. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +1 -69
  29. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
  30. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.ts +0 -70
  31. package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +388 -399
  32. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +2 -3
  33. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.ts +403 -0
  34. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +127 -158
  35. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +1 -1
  36. package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +82 -58
  37. package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +2 -3
  38. package/packages/sap.fe.core/src/sap/fe/core/BaseController.ts +68 -0
  39. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +111 -20
  40. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
  41. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.ts +131 -32
  42. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +278 -274
  43. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +2 -3
  44. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.ts +250 -0
  45. package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +157 -29
  46. package/packages/sap.fe.core/src/sap/fe/core/PageController.js +1 -1
  47. package/packages/sap.fe.core/src/sap/fe/core/PageController.ts +60 -32
  48. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +694 -756
  49. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
  50. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.ts +11 -9
  51. package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +21 -31
  52. package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +1 -1
  53. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  54. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.ts +10 -3
  55. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +20 -38
  56. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +1 -1
  57. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.ts +1 -1
  58. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1354 -1370
  59. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
  60. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.ts +33 -22
  61. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync-dbg.js +392 -0
  62. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.js +5 -0
  63. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  64. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon-dbg.js +136 -0
  65. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +5 -0
  66. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  67. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage-dbg.js +262 -0
  68. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.js +5 -0
  69. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  70. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  71. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  72. package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +30 -68
  73. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +1 -1
  74. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.ts +44 -71
  75. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +55 -36
  76. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
  77. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.ts +66 -46
  78. package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +34 -15
  79. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
  80. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.ts +48 -18
  81. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +17 -4
  82. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +1 -1
  83. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.ts +21 -4
  84. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +69 -66
  85. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +2 -3
  86. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  87. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1593 -1669
  88. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +2 -3
  89. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  90. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +79 -54
  91. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -3
  92. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  93. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +718 -779
  94. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +2 -3
  95. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  96. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +796 -816
  97. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -3
  98. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  99. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +1004 -1005
  100. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -3
  101. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  102. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +487 -521
  103. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  104. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  105. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +141 -169
  106. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.js +2 -3
  107. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  108. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +233 -244
  109. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -3
  110. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  111. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +301 -336
  112. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  113. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  114. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +188 -175
  115. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +2 -3
  116. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  117. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +157 -149
  118. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +2 -3
  119. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  120. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +144 -125
  121. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +2 -3
  122. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  123. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +7 -6
  124. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +2 -3
  125. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  126. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +230 -268
  127. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +2 -3
  128. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  129. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +592 -633
  130. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  131. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  132. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +788 -806
  133. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +2 -3
  134. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  135. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  136. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  137. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +67 -66
  138. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +2 -3
  139. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  140. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +90 -75
  141. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +2 -3
  142. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  143. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +130 -125
  144. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -3
  145. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  146. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +103 -112
  147. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +2 -3
  148. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  149. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +122 -135
  150. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +2 -3
  151. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  152. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -159
  153. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +2 -3
  154. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.ts +143 -0
  155. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +45 -39
  156. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +2 -3
  157. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  158. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -42
  159. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -2
  160. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  161. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +126 -116
  162. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -3
  163. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  164. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +241 -255
  165. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -3
  166. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  167. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -141
  168. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -3
  169. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  170. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +335 -322
  171. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -3
  172. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  173. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +74 -74
  174. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -3
  175. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  176. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +348 -379
  177. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +1 -1
  178. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  179. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +12 -1
  180. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  181. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  182. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +354 -378
  183. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  184. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  185. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +6 -4
  186. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  187. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  188. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +1 -1
  189. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  190. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +26 -12
  191. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  192. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  193. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +2 -2
  194. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  195. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  196. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +1 -1
  197. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  198. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -23
  199. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  200. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  201. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +118 -53
  202. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  203. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  204. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +161 -207
  205. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  206. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  207. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +115 -133
  208. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  209. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +20 -6
  210. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  211. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  212. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +12 -1
  213. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  214. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +42 -57
  215. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +1 -1
  216. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  217. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +25 -4
  218. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  219. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  220. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +10 -4
  221. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  222. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  223. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +7 -5
  224. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  225. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  226. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +92 -98
  227. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -3
  228. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  229. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +2 -3
  230. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +3 -3
  231. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +104 -0
  232. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.js +5 -0
  233. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  234. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +53 -2
  235. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  236. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  237. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +50 -54
  238. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +2 -3
  239. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.ts +48 -0
  240. package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
  241. package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +7 -3
  242. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +323 -309
  243. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  244. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  245. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +7 -7
  246. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +1 -1
  247. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  248. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +186 -62
  249. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  250. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  251. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +5 -4
  252. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  253. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  254. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +1 -1
  255. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  256. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper-dbg.js +601 -684
  257. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.js +2 -3
  258. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  259. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +25 -1
  260. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  261. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  262. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +5 -1
  263. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  264. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  265. package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +426 -451
  266. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +36 -32
  267. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +3 -3
  268. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +644 -738
  269. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
  270. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +24 -35
  271. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +2 -2
  272. package/packages/sap.fe.core/src/sap/fe/core/library.js +2 -3
  273. package/packages/sap.fe.core/src/sap/fe/core/library.support.js +22 -33
  274. package/packages/sap.fe.core/src/sap/fe/core/library.support.ts +23 -0
  275. package/packages/sap.fe.core/src/sap/fe/core/library.ts +420 -0
  276. package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
  277. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +5 -3
  278. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  279. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  280. package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +22 -5
  281. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +27 -7
  282. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +27 -7
  283. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +27 -7
  284. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +27 -7
  285. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +27 -7
  286. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +27 -7
  287. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +27 -7
  288. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +27 -7
  289. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +27 -7
  290. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  291. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  292. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  293. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  294. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +27 -7
  295. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  296. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +27 -7
  297. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +28 -8
  298. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +28 -8
  299. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  300. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +27 -7
  301. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +27 -7
  302. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +27 -7
  303. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +27 -7
  304. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +27 -7
  305. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +27 -7
  306. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +26 -6
  307. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +27 -7
  308. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +27 -7
  309. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +27 -7
  310. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +28 -8
  311. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +27 -7
  312. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +27 -7
  313. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +27 -7
  314. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +27 -7
  315. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +28 -8
  316. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  317. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +27 -7
  318. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +27 -7
  319. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +27 -7
  320. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +27 -7
  321. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +27 -7
  322. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +27 -7
  323. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +26 -6
  324. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +30 -10
  325. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +27 -7
  326. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +27 -7
  327. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  328. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  329. package/packages/sap.fe.core/src/sap/fe/core/resources.json +745 -384
  330. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +45 -71
  331. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  332. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +154 -192
  333. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  334. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  335. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +66 -92
  336. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  337. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  338. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +284 -339
  339. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  340. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  341. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +67 -102
  342. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  343. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  344. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +754 -814
  345. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  346. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  347. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +649 -736
  348. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  349. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  350. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +567 -592
  351. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  352. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  353. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +354 -386
  354. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  355. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  356. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +1 -1
  357. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  358. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +1 -1
  359. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +1 -1
  360. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +36 -48
  361. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +1 -1
  362. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +93 -85
  363. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  364. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  365. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +25 -32
  366. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +1 -1
  367. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  368. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +2 -2
  369. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  370. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  371. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  372. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +1 -1
  373. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +37 -24
  374. package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1664 -1
  375. package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
  376. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -1
  377. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -1
  378. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
  379. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +59 -0
  380. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +1 -1
  381. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/Component.js +33 -0
  382. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.controller.js +34 -0
  383. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.view.xml +18 -0
  384. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/Entities.json +6 -0
  385. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/service.cds +6 -0
  386. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/manifest.json +68 -0
  387. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldMessages.html +37 -0
  388. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarSVandAnnotationDefaults/FilterBarSVandAnnotationDefaults.controller.js +1 -0
  389. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +7 -2
  390. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +9 -3
  391. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.js +23 -0
  392. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.ts +11 -0
  393. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +11 -23
  394. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/Component.js +40 -0
  395. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.controller.js +35 -0
  396. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.view.xml +21 -0
  397. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/RootEntity.json +82 -0
  398. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/service.cds +82 -0
  399. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/manifest.json +78 -0
  400. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableMessages.html +37 -0
  401. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/ChildEntity.json +5 -4
  402. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +3 -0
  403. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +1 -1
  404. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.js +1 -169
  405. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.ts +0 -212
  406. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +2305 -119
  407. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.ts +2206 -67
  408. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.js +40 -0
  409. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.ts +34 -0
  410. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.js +114 -0
  411. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.ts +114 -0
  412. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.js +113 -0
  413. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.ts +78 -0
  414. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.js +599 -1
  415. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.ts +614 -0
  416. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +23 -5
  417. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +26 -14
  418. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.js +87 -1
  419. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.ts +82 -1
  420. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.js +124 -0
  421. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.ts +141 -0
  422. package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +34768 -67
  423. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.js +170 -0
  424. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.ts +155 -0
  425. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.js +101 -0
  426. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.ts +94 -0
  427. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.js +82 -0
  428. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.ts +77 -0
  429. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.js +2 -2
  430. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.ts +1 -1
  431. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.js +7 -2
  432. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.ts +7 -0
  433. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.js +104 -2
  434. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.ts +96 -1
  435. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.js +83 -0
  436. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.ts +79 -0
  437. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.js +72 -0
  438. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.ts +64 -0
  439. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.js +619 -3
  440. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.ts +668 -5
  441. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.js +297 -1
  442. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.ts +276 -6
  443. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.js +149 -0
  444. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.ts +142 -0
  445. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.js +776 -182
  446. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.ts +181 -3
  447. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +19 -43
  448. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.js +2 -18
  449. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.ts +8 -6
  450. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +5 -27
  451. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +1 -1
  452. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.js +1 -1
  453. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.ts +1 -1
  454. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.js +86 -0
  455. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.ts +80 -0
  456. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +1 -1
  457. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +1 -1
  458. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +2 -18
  459. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +1 -1
  460. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.js +45 -0
  461. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.ts +29 -0
  462. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.js +51 -1
  463. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.ts +47 -1
  464. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/__snapshots__/FilterBar.spec.ts.snap +3 -0
  465. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +2 -2
  466. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +1 -1
  467. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.js +25 -36
  468. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.ts +26 -36
  469. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +3 -3
  470. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +2 -2
  471. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +1 -1
  472. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +6 -5
  473. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +133 -9
  474. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +171 -8
  475. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.js +174 -210
  476. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.ts +294 -230
  477. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Filter.spec.ts.snap +3 -1
  478. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.js +237 -0
  479. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.ts +246 -0
  480. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.js +9993 -0
  481. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.ts +11352 -0
  482. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.js +460 -0
  483. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.ts +543 -0
  484. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.js +616 -0
  485. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.ts +711 -0
  486. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/manifest.json +887 -0
  487. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.js +393 -0
  488. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.ts +434 -0
  489. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.js +31 -0
  490. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.ts +12 -0
  491. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Filter.cds +27 -0
  492. package/packages/sap.fe.core/test/sap/fe/core/jest/data/MassEditHelper.cds +12 -0
  493. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/manifest.json +150 -0
  494. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata.xml +365 -0
  495. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_groupable_options.xml +96 -0
  496. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_textArrangement.xml +102 -0
  497. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_withPV.xml +359 -0
  498. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +89 -27
  499. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.js +421 -0
  500. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.ts +413 -0
  501. package/packages/sap.fe.core/test/sap/fe/core/jest/data/aggregatedSD/metadata.xml +3767 -0
  502. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/manifest.json +185 -0
  503. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/metadata.xml +1534 -0
  504. package/packages/sap.fe.core/test/sap/fe/core/jest/data/manifest.json +887 -0
  505. package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata_qunit.xml +4995 -0
  506. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.js +48 -0
  507. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.ts +48 -0
  508. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +131 -51
  509. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +81 -31
  510. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.js +13 -7
  511. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.ts +12 -6
  512. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.js +17 -3
  513. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.ts +24 -7
  514. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +61 -1
  515. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.ts +59 -0
  516. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.js +3 -3
  517. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.ts +1 -2
  518. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.js +4 -4
  519. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.ts +6 -3
  520. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.js +1 -1
  521. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.ts +1 -1
  522. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/AppStartupHelper.spec.ts.snap +19 -0
  523. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/MassEditHelper.spec.ts.snap +0 -73
  524. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.js +11 -1
  525. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.ts +15 -0
  526. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/__snapshots__/ChangePageConfiguration.spec.ts.snap +30 -0
  527. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +49 -5
  528. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +60 -5
  529. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.js +384 -0
  530. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.ts +427 -0
  531. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +132 -2
  532. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +156 -2
  533. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.js +273 -0
  534. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.ts +402 -0
  535. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.js +45 -0
  536. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.ts +40 -0
  537. package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +2 -1
  538. package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +0 -102
  539. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.100.json +326 -0
  540. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.99.json +0 -22
  541. package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
  542. package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
  543. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +2 -2
  544. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +1 -1
  545. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI-dbg.js +22 -43
  546. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.js +1 -1
  547. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.ts +3 -3
  548. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +14 -24
  549. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
  550. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1 -1
  551. package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +3 -2
  552. package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +16 -18
  553. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +162 -100
  554. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
  555. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +93 -16
  556. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +2 -1
  557. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +16 -8
  558. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +1 -1
  559. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +58 -83
  560. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +1 -1
  561. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +16 -2
  562. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +112 -192
  563. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
  564. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +1 -1
  565. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +1 -1
  566. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI-dbg.js +4 -20
  567. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI.js +1 -1
  568. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +1 -1
  569. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI-dbg.js +10 -31
  570. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI.js +1 -1
  571. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +147 -162
  572. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +1 -1
  573. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +32 -8
  574. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +5 -0
  575. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +1 -1
  576. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +56 -74
  577. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
  578. package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +1 -1
  579. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +90 -39
  580. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
  581. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +284 -251
  582. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
  583. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +126 -14
  584. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +38 -101
  585. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
  586. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +68 -6
  587. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  588. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +72 -12
  589. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  590. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +67 -10
  591. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -12
  592. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
  593. package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +1 -1
  594. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +1 -3
  595. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
  596. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +62 -39
  597. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  598. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +104 -50
  599. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +2 -3
  600. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.ts +68 -0
  601. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +83 -35
  602. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +2 -3
  603. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.ts +66 -0
  604. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +327 -216
  605. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +2 -3
  606. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.ts +303 -0
  607. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollaborationAvatar.fragment.xml +15 -0
  608. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +14 -2
  609. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
  610. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +18 -2
  611. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +12 -29
  612. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +9 -0
  613. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +1 -1
  614. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +1 -0
  615. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +529 -533
  616. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +2 -3
  617. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.ts +568 -0
  618. package/packages/sap.fe.macros/src/sap/fe/macros/internal/FilterField.fragment.xml +0 -1
  619. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator-dbg.js +3 -3
  620. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.js +1 -1
  621. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.ts +3 -2
  622. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +3 -1
  623. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +13 -3
  624. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +4 -1
  625. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
  626. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +1 -0
  627. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +38 -4
  628. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +2 -2
  629. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -3
  630. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +1 -2
  631. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +55 -11
  632. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  633. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +3 -3
  634. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +9 -2
  635. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +9 -2
  636. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +12 -3
  637. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +26 -5
  638. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +10 -2
  639. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +9 -2
  640. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +9 -2
  641. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -0
  642. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +31 -2
  643. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  644. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +20 -0
  645. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime-dbg.js +2 -2
  646. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.js +1 -1
  647. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.ts +7 -9
  648. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +90 -118
  649. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  650. package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
  651. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +13 -12
  652. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +2 -2
  653. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +185 -214
  654. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
  655. package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
  656. package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
  657. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +4 -1
  658. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +3 -1
  659. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +3 -1
  660. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +3 -1
  661. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +3 -1
  662. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +3 -1
  663. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +3 -1
  664. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +4 -2
  665. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +3 -1
  666. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +3 -1
  667. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +3 -1
  668. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -1
  669. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +3 -1
  670. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -1
  671. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +3 -1
  672. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +3 -1
  673. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +3 -1
  674. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +3 -1
  675. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +3 -1
  676. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +3 -1
  677. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +3 -1
  678. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +3 -1
  679. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  680. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +4 -2
  681. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +3 -1
  682. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +3 -1
  683. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -1
  684. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +3 -1
  685. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +3 -1
  686. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +3 -1
  687. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +3 -1
  688. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +3 -1
  689. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +3 -1
  690. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +3 -1
  691. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +3 -1
  692. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +3 -1
  693. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +3 -1
  694. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +3 -1
  695. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +3 -1
  696. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +3 -1
  697. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +3 -1
  698. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +3 -1
  699. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +3 -1
  700. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +3 -1
  701. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +3 -1
  702. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +3 -1
  703. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +3 -1
  704. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +3 -1
  705. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +3 -1
  706. package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +273 -199
  707. package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +1 -1
  708. package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +1 -1
  709. package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +2 -0
  710. package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +13 -20
  711. package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +1 -0
  712. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +5 -110
  713. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
  714. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +98 -78
  715. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  716. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +1 -1
  717. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +1 -1
  718. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +211 -10
  719. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
  720. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -1
  721. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
  722. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +1 -45
  723. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +0 -60
  724. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.js +78 -0
  725. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.ts +71 -0
  726. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +35 -1
  727. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +44 -0
  728. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarDelegate.spec.js +0 -76
  729. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.js +27 -1
  730. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.ts +28 -0
  731. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.js +10 -12
  732. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.ts +10 -10
  733. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterUtils.spec.js +129 -15
  734. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.js +13 -39
  735. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.ts +2 -2
  736. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.js +119 -0
  737. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.ts +113 -0
  738. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.js +166 -2
  739. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.ts +190 -3
  740. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +457 -389
  741. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +504 -425
  742. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.js +104 -2
  743. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.ts +158 -1
  744. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +0 -6
  745. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +5 -5
  746. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +114 -25
  747. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithSemanticKey.spec.ts.snap +40 -40
  748. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithValueHelp.spec.ts.snap +4 -8
  749. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterBarMacro.spec.ts.snap +19 -19
  750. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +3 -5
  751. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +12 -0
  752. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +89 -90
  753. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/Table.spec.ts.snap +1314 -58
  754. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableMacro.spec.ts.snap +459 -0
  755. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +18 -2
  756. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +6 -1
  757. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +107 -106
  758. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableAPI.cds +197 -0
  759. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +33 -4
  760. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +30 -4
  761. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +72 -29
  762. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +86 -18
  763. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/__snapshots__/columnWidth.spec.ts.snap +51 -27
  764. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.js +55 -9
  765. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.ts +46 -6
  766. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/data/columnWidth.cds +28 -1
  767. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +170 -43
  768. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +131 -15
  769. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +90 -53
  770. package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +2 -1
  771. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
  772. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +1 -99
  773. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
  774. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +4 -4
  775. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +4 -4
  776. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +15 -0
  777. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +265 -106
  778. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +38 -0
  779. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.100.json +372 -0
  780. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.99.json +0 -11
  781. package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
  782. package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
  783. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
  784. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
  785. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +2 -2
  786. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
  787. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +2 -2
  788. package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
  789. package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
  790. package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +8 -8
  791. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
  792. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
  793. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
  794. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
  795. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
  796. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
  797. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
  798. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +2 -2
  799. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +2 -2
  800. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +2 -2
  801. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
  802. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
  803. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +27 -27
  804. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +316 -15
  805. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +1 -1
  806. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +315 -14
  807. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +315 -14
  808. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +2 -2
  809. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +316 -15
  810. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +316 -15
  811. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +2 -2
  812. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +316 -15
  813. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +316 -15
  814. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +2 -2
  815. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +315 -14
  816. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +315 -14
  817. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +2 -2
  818. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +317 -16
  819. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +317 -16
  820. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +2 -2
  821. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +317 -16
  822. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +317 -16
  823. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +2 -2
  824. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +316 -15
  825. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +316 -15
  826. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +2 -2
  827. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +316 -15
  828. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +316 -15
  829. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +2 -2
  830. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.less +400 -99
  831. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.source.less +400 -99
  832. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/resources.json +2 -2
  833. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
  834. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
  835. package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
  836. package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
  837. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  838. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +1 -1
  839. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
  840. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
  841. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +7 -1
  842. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +1 -1
  843. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +22 -21
  844. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +13 -18
  845. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
  846. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
  847. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +7 -7
  848. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +3 -3
  849. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +50 -9
  850. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
  851. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +1 -12
  852. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
  853. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
  854. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +50 -17
  855. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
  856. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +7 -1
  857. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
  858. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +3 -0
  859. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  860. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  861. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +19 -15
  862. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +36 -0
  863. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
  864. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
  865. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
  866. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +3 -1
  867. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
  868. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +3 -1
  869. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
  870. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +1 -1
  871. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +2 -2
  872. package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
  873. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +4 -3
  874. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +2 -2
  875. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +22 -21
  876. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
  877. package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
  878. package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +14 -14
  879. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +0 -15
  880. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +0 -15
  881. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +0 -15
  882. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +0 -15
  883. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +0 -15
  884. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +0 -15
  885. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +0 -15
  886. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +0 -15
  887. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +0 -15
  888. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +0 -15
  889. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +0 -15
  890. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +0 -15
  891. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +0 -15
  892. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +0 -15
  893. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +0 -15
  894. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +0 -15
  895. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +0 -15
  896. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +0 -15
  897. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +0 -15
  898. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +0 -15
  899. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +0 -15
  900. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +0 -15
  901. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +0 -15
  902. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +0 -15
  903. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +0 -15
  904. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +0 -15
  905. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +0 -15
  906. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +0 -15
  907. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +0 -15
  908. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +0 -15
  909. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +0 -15
  910. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +0 -15
  911. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +0 -15
  912. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +0 -15
  913. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +0 -15
  914. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +0 -15
  915. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +0 -15
  916. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +0 -15
  917. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +0 -15
  918. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +0 -15
  919. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +0 -15
  920. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +0 -15
  921. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +0 -15
  922. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +0 -15
  923. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +0 -15
  924. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +0 -15
  925. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -15
  926. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +0 -15
  927. package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +115 -89
  928. package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
  929. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +353 -1
  930. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
  931. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -1
  932. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
  933. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.js +1 -1
  934. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.ts +3 -3
  935. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.js +1 -1
  936. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.ts +4 -4
  937. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.js +1 -1
  938. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.ts +2 -2
  939. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +2 -1
  940. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +2 -1
  941. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +7 -7
  942. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.js +30 -61
  943. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.ts +1 -1
  944. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.100.json +192 -0
  945. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.99.json +0 -11
  946. package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
  947. package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
  948. package/packages/sap.fe.test/src/sap/fe/test/FeMocks-dbg.js +1 -1
  949. package/packages/sap.fe.test/src/sap/fe/test/FeMocks.ts +8 -8
  950. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +6 -4
  951. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
  952. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +10 -6
  953. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +126 -203
  954. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
  955. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +17 -2
  956. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +9 -1
  957. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +1 -1
  958. package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
  959. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +2 -2
  960. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +2 -2
  961. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +9 -18
  962. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
  963. package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
  964. package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
  965. package/packages/sap.fe.test/src/sap/fe/test/resources.json +18 -18
  966. package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
  967. package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
  968. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
  969. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +0 -271
@@ -1,782 +1,721 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
5
4
  */
6
- sap.ui.define(
7
- [
8
- "sap/ui/core/mvc/ControllerExtension",
9
- "sap/ui/core/mvc/OverrideExecution",
10
- "sap/fe/core/actions/messageHandling",
11
- "sap/fe/core/TransactionHelper",
12
- "sap/base/Log",
13
- "sap/fe/core/CommonUtils",
14
- "sap/fe/core/BusyLocker",
15
- "sap/fe/core/library",
16
- "sap/fe/core/helpers/EditState",
17
- "sap/m/Button",
18
- "sap/m/Dialog",
19
- "sap/fe/core/actions/sticky"
20
- ],
21
- function(
22
- ControllerExtension,
23
- OverrideExecution,
24
- messageHandling,
25
- TransactionHelper,
26
- Log,
27
- CommonUtils,
28
- BusyLocker,
29
- FELibrary,
30
- EditState,
31
- Button,
32
- Dialog,
33
- sticky
34
- ) {
35
- "use strict";
36
-
37
- var ProgrammingModel = FELibrary.ProgrammingModel,
38
- DraftStatus = FELibrary.DraftStatus,
39
- EditMode = FELibrary.EditMode,
40
- CreationMode = FELibrary.CreationMode;
41
-
42
- function _registerDirtyStateProvider(oContext, oAppComponent, oInternalModel, sHashTracker) {
43
- function fnDirtyStateProvider(oNavigationContext) {
44
- var sTargetHash = oNavigationContext.innerAppRoute,
45
- oRouterProxy = oAppComponent.getRouterProxy(),
46
- bDirty,
47
- bSessionON = oInternalModel.getProperty("/sessionOn");
48
-
49
- if (!bSessionON) {
50
- // If the sticky session was terminated before hand.
51
- // Eexample in case of navigating away from application using IBN.
52
- return undefined;
53
- }
54
-
55
- if (!oRouterProxy.isNavigationFinalized()) {
56
- // If navigation is currently happening in RouterProxy, it's a transient state
57
- // (not dirty)
58
- bDirty = false;
59
- sHashTracker = sTargetHash;
60
- } else if (sHashTracker === sTargetHash) {
61
- // the hash didn't change so either the user attempts to refresh or to leave the app
62
- bDirty = true;
63
- } else if (oRouterProxy.checkHashWithGuard(sTargetHash) || oRouterProxy.isGuardCrossAllowedByUser()) {
64
- // the user attempts to navigate within the root object
65
- // or crossing the guard has already been allowed by the RouterProxy
66
- sHashTracker = sTargetHash;
67
- bDirty = false;
68
- } else {
69
- // the user attempts to navigate within the app, for example back to the list report
70
- bDirty = true;
71
- }
72
-
73
- if (bDirty) {
74
- // the FLP doesn't call the dirty state provider anymore once it's dirty, as they can't
75
- // change this due to compatibility reasons we set it back to not-dirty
76
- setTimeout(function() {
77
- oAppComponent.getShellServices().setDirtyFlag(false);
78
- }, 0);
79
- }
80
-
81
- return bDirty;
82
- }
83
-
84
- oContext.fnDirtyStateProvider = fnDirtyStateProvider;
85
- oAppComponent.getShellServices().registerDirtyStateProvider(oContext.fnDirtyStateProvider);
86
- }
87
-
88
- function _attachSessionTimeout(oContext, i18nModel) {
89
- var that = oContext;
90
-
91
- function fnHandleSessionTimeout() {
92
- // remove transient messages since we will showing our own message
93
- that.getMessageHandler().removeTransitionMessages();
94
-
95
- var oDialog = new Dialog({
96
- title: "{sap.fe.i18n>C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_TITLE}",
97
- state: "Warning",
98
- content: new Text({ text: "{sap.fe.i18n>C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_MESSAGE}" }),
99
- beginButton: new Button({
100
- text: "{sap.fe.i18n>C_COMMON_DIALOG_OK}",
101
- type: "Emphasized",
102
- press: function() {
103
- // remove sticky handling after navigation since session has already been terminated
104
- that.handleStickyOff();
105
- that.getRoutingListener().navigateBackFromContext(oContext);
106
- }
107
- }),
108
- afterClose: function() {
109
- oDialog.destroy();
110
- }
111
- });
112
- oDialog.addStyleClass("sapUiContentPadding");
113
- oDialog.setModel(i18nModel, "sap.fe.i18n");
114
- that.getView().addDependent(oDialog);
115
- oDialog.open();
116
- }
117
-
118
- // handle session timeout
119
- that.fnHandleSessionTimeout = fnHandleSessionTimeout;
120
- that.getView()
121
- .getModel()
122
- .attachSessionTimeout(that.fnHandleSessionTimeout);
123
- }
124
-
125
- function _attachRouteMatched(oFnContext, oContext, oAppComponent) {
126
- var that = oFnContext;
127
-
128
- function fnStickyDiscardAfterNavigation() {
129
- var sCurrentHash = oAppComponent.getRouterProxy().getHash();
130
- // either current hash is empty so the user left the app or he navigated away from the object
131
- if (!sCurrentHash || !oAppComponent.getRouterProxy().checkHashWithGuard(sCurrentHash)) {
132
- that.discardStickySession(oContext);
133
- }
134
- }
135
-
136
- that.fnStickyDiscardAfterNavigation = fnStickyDiscardAfterNavigation;
137
- oAppComponent.getRoutingService().attachRouteMatched(that.fnStickyDiscardAfterNavigation);
138
- }
139
-
140
- return ControllerExtension.extend("sap.fe.core.controllerextensions.InternalEditFlow", {
141
- metadata: {
142
- methods: {
143
- createMultipleDocuments: { "public": true, "final": true },
144
- deleteMultipleDocuments: { "public": true, "final": true },
145
- computeEditMode: { "public": true, "final": true },
146
- setEditMode: { "public": true, "final": true },
147
- setDraftStatus: { "public": true, "final": true },
148
- getRoutingListener: { "public": true, "final": true },
149
- getGlobalUIModel: { "public": true, "final": true },
150
- syncTask: { "public": true, "final": true },
151
- getProgrammingModel: { "public": true, "final": true },
152
- deleteDocumentTransaction: { "public": true, "final": true },
153
- handleCreateEvents: { "public": true, "final": true },
154
- getTransactionHelper: { "public": true, "final": true },
155
- getInternalModel: { "public": true, "final": true },
156
- createActionPromise: { "public": true, "final": true },
157
- getCurrentActionPromise: { "public": true, "final": true },
158
- deleteCurrentActionPromise: { "public": true, "final": true },
159
- getActionResponseDataAndKeys: { "public": true, "final": true },
160
- setCreationMode: { "public": false, "final": false, "overrideExecution": OverrideExecution.After },
161
- getMessageHandler: { "public": true, "final": true },
162
- handleStickyOn: { "public": true, "final": true },
163
- handleStickyOff: { "public": true, "final": true }
164
- }
165
- },
166
-
167
- /**
168
- * Override to set the creation mode.
169
- *
170
- * @memberof sap.fe.core.controllerextensions.InternalEditFlow
171
- * @alias sap.fe.core.controllerextensions.InternalEditFlow#setCreationMode
172
- * @since 1.90.0
173
- */
174
- setCreationMode: function() {
175
- // to be overridden
176
- },
177
-
178
- createMultipleDocuments: function(oListBinding, aData, bCreateAtEnd, bFromCopyPaste, beforeCreateCallBack) {
179
- var that = this,
180
- transactionHelper = this.getTransactionHelper(),
181
- oLockObject = this.getGlobalUIModel(),
182
- oResourceBundle = that.getView().getController().oResourceBundle;
183
-
184
- BusyLocker.lock(oLockObject);
185
- return this.syncTask()
186
- .then(function() {
187
- var onBeforeCreatePromise = beforeCreateCallBack
188
- ? beforeCreateCallBack({ contextPath: oListBinding && oListBinding.getPath() })
189
- : Promise.resolve();
190
- return onBeforeCreatePromise;
191
- })
192
- .then(function() {
193
- var oModel = oListBinding.getModel(),
194
- oMetaModel = oModel.getMetaModel(),
195
- sMetaPath;
196
-
197
- if (oListBinding.getContext()) {
198
- sMetaPath = oMetaModel.getMetaPath(oListBinding.getContext().getPath() + "/" + oListBinding.getPath());
199
- } else {
200
- sMetaPath = oMetaModel.getMetaPath(oListBinding.getPath());
201
- }
202
-
203
- that.handleCreateEvents(oListBinding);
204
-
205
- // Iterate on all items and store the corresponding creation promise
206
- var aCreationPromises = aData.map(function(mPropertyValues) {
207
- var mParameters = { data: {} };
208
-
209
- mParameters.keepTransientContextOnFailed = false; // currently not fully supported
210
- mParameters.busyMode = "None";
211
- mParameters.creationMode = CreationMode.CreationRow;
212
- mParameters.parentControl = that.getView();
213
- mParameters.createAtEnd = bCreateAtEnd;
214
-
215
- // Remove navigation properties as we don't support deep create
216
- for (var sPropertyPath in mPropertyValues) {
217
- var oProperty = oMetaModel.getObject(sMetaPath + "/" + sPropertyPath);
218
- if (oProperty && oProperty.$kind !== "NavigationProperty" && mPropertyValues[sPropertyPath]) {
219
- mParameters.data[sPropertyPath] = mPropertyValues[sPropertyPath];
220
- }
221
- }
222
-
223
- return transactionHelper.createDocument(
224
- oListBinding,
225
- mParameters,
226
- oResourceBundle,
227
- that.getMessageHandler(),
228
- bFromCopyPaste,
229
- that.getView()
230
- );
231
- });
232
-
233
- return Promise.all(aCreationPromises);
234
- })
235
- .then(function(aContexts) {
236
- // transient contexts are reliably removed once oNewContext.created() is resolved
237
- return Promise.all(
238
- aContexts.map(function(oNewContext) {
239
- return oNewContext.created();
240
- })
241
- );
242
- })
243
- .then(function() {
244
- var oBindingContext = that.getView().getBindingContext();
245
-
246
- // if there are transient contexts, we must avoid requesting side effects
247
- // this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
248
- // if list binding is refreshed, transient contexts might be lost
249
- if (!CommonUtils.hasTransientContext(oListBinding)) {
250
- that._oAppComponent
251
- .getSideEffectsService()
252
- .requestSideEffectsForNavigationProperty(oListBinding.getPath(), oBindingContext);
253
- }
254
- })
255
- .catch(function(err) {
256
- Log.error("Error while creating multiple documents.");
257
- return Promise.reject(err);
258
- })
259
- .finally(function() {
260
- BusyLocker.unlock(oLockObject);
261
- });
262
- },
263
-
264
- deleteMultipleDocuments: function(aContexts, mParameters) {
265
- var that = this,
266
- oRoutingListener = this.getRoutingListener(),
267
- oLockObject = this.getGlobalUIModel();
268
- var oTable = that.getView().byId(mParameters.controlId);
269
- if (!oTable || !oTable.isA("sap.ui.mdc.Table")) {
270
- throw new Error("parameter controlId missing or incorrect");
271
- }
272
- var oListBinding = oTable.getRowBinding();
273
- mParameters.bFindActiveContexts = true;
274
- BusyLocker.lock(oLockObject);
275
- return this.deleteDocumentTransaction(aContexts, mParameters)
276
- .then(function() {
277
- var oResult;
278
-
279
- // Multiple object deletion is triggered from a list
280
- // First clear the selection in the table as it's not valid any more
281
- oTable.clearSelection();
282
-
283
- // Then refresh the list-binding (LR), or require side-effects (OP)
284
- var oBindingContext = that.getView().getBindingContext();
285
- if (oListBinding.isRoot()) {
286
- // keep promise chain pending until refresh of listbinding is completed
287
- oResult = new Promise(function(resolve) {
288
- oListBinding.attachEventOnce("dataReceived", function() {
289
- resolve();
290
- });
291
- });
292
- oListBinding.refresh();
293
- } else if (oBindingContext) {
294
- // if there are transient contexts, we must avoid requesting side effects
295
- // this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
296
- // if list binding is refreshed, transient contexts might be lost
297
- if (!CommonUtils.hasTransientContext(oListBinding)) {
298
- that._oAppComponent
299
- .getSideEffectsService()
300
- .requestSideEffectsForNavigationProperty(oListBinding.getPath(), oBindingContext);
301
- }
302
- }
303
-
304
- // deleting at least one object should also set the UI to dirty
305
- EditState.setEditStateDirty();
306
-
307
- // Finally, check if the current state can be impacted by the deletion, i.e. if there's
308
- // an OP displaying a deleted object. If yes navigate back to dismiss the OP
309
- for (var index = 0; index < aContexts.length; index++) {
310
- if (oRoutingListener.isCurrentStateImpactedBy(aContexts[index])) {
311
- oRoutingListener.navigateBackFromContext(aContexts[index]);
312
- break;
313
- }
314
- }
315
-
316
- return oResult;
317
- })
318
- .catch(function(oError) {
319
- Log.error("Error while deleting the document(s)", oError);
320
- })
321
- .finally(function() {
322
- BusyLocker.unlock(oLockObject);
323
- });
324
- },
325
-
326
- /**
327
- * Decides if a document is to be shown in display or edit mode.
328
- *
329
- * @function
330
- * @name _computeEditMode
331
- * @memberof sap.fe.core.controllerextensions.InternalEditFlow
332
- * @param {sap.ui.model.odata.v4.Context} oContext The context to be displayed or edited
333
- * @returns {Promise} Promise resolves once the edit mode is computed
334
- */
335
-
336
- computeEditMode: function(oContext) {
337
- var that = this,
338
- sCustomAction = that.getInternalModel().getProperty("/sCustomAction");
339
-
340
- return Promise.resolve(
341
- (function() {
342
- var sProgrammingModel = that.getProgrammingModel(oContext);
343
-
344
- if (sProgrammingModel === ProgrammingModel.Draft) {
345
- that.setDraftStatus(DraftStatus.Clear);
346
-
347
- return oContext
348
- .requestObject("IsActiveEntity")
349
- .then(function(bIsActiveEntity) {
350
- if (bIsActiveEntity === false) {
351
- // in case the document is draft set it in edit mode
352
- that.setEditMode(EditMode.Editable);
353
- return oContext.requestObject("HasActiveEntity").then(function(bHasActiveEntity) {
354
- that.setEditMode(undefined, !bHasActiveEntity);
355
- });
356
- } else {
357
- // active document, stay on display mode
358
- that.setEditMode(EditMode.Display, false);
359
- }
360
- })
361
- .catch(function(oError) {
362
- Log.error("Error while determining the editMode for draft", oError);
363
- throw oError;
364
- });
365
- } else if (sProgrammingModel === ProgrammingModel.Sticky) {
366
- if (
367
- sCustomAction &&
368
- sCustomAction !== "" &&
369
- that._hasNewActionForSticky(oContext, that.getView(), sCustomAction)
370
- ) {
371
- that.getTransactionHelper()._bCreateMode = true;
372
- that.getTransactionHelper().handleDocumentModifications();
373
- that.setEditMode(EditMode.Editable, true);
374
- EditState.setEditStateDirty();
375
- that.handleStickyOn(oContext);
376
- that.getInternalModel().setProperty("/sCustomAction", "");
377
- }
378
- }
379
- })()
380
- );
381
- },
382
-
383
- /**
384
- * Sets the edit mode.
385
- *
386
- * @param {string} sEditMode
387
- * @param {boolean} bCreationMode CreateMode flag to identify the creation mode
388
- */
389
- setEditMode: function(sEditMode, bCreationMode) {
390
- // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
391
- // rely on the global UI model to exist
392
- var oGlobalModel = this.getGlobalUIModel();
393
-
394
- if (sEditMode) {
395
- oGlobalModel.setProperty("/editMode", sEditMode, undefined, true);
396
- oGlobalModel.setProperty("/isEditable", sEditMode === "Editable", undefined, true);
397
- }
398
-
399
- if (bCreationMode !== undefined) {
400
- // Since setCreationMode is public in EditFlow and can be overriden, make sure to call it via the controller
401
- // to ensure any overrides are taken into account
402
- this.setCreationMode(bCreationMode);
403
- }
404
- },
405
-
406
- setDraftStatus: function(sDraftState) {
407
- // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
408
- // rely on the global UI model to exist
409
- this.base
410
- .getView()
411
- .getModel("ui")
412
- .setProperty("/draftStatus", sDraftState, undefined, true);
413
- },
414
-
415
- getRoutingListener: function() {
416
- // at this point of time it's not meant to release the edit flow for FPM custom pages and the routing
417
- // listener is not yet public therefore keep the logic here for now
418
-
419
- if (this.base._routing) {
420
- return this.base._routing;
421
- } else {
422
- throw new Error("Edit Flow works only with a given routing listener");
423
- }
424
- },
425
-
426
- getGlobalUIModel: function() {
427
- // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
428
- // rely on the global UI model to exist
429
- return this.base.getView().getModel("ui");
430
- },
431
-
432
- /**
433
- * Performs a task in sync with other tasks created via this function.
434
- * Returns the promise chain of the task.
435
- *
436
- * @function
437
- * @name sap.fe.core.controllerextensions.EditFlow#syncTask
438
- * @memberof sap.fe.core.controllerextensions.EditFlow
439
- * @static
440
- * @param {Promise|Function} [vTask] Optional, a promise or function to be executed synchronously
441
- * @returns {Promise} Promise resolves once the task is completed
442
- *
443
- * @ui5-restricted
444
- * @final
445
- */
446
- syncTask: function(vTask) {
447
- var fnNewTask;
448
- if (vTask instanceof Promise) {
449
- fnNewTask = function() {
450
- return vTask;
451
- };
452
- } else if (typeof vTask === "function") {
453
- fnNewTask = vTask;
454
- }
455
-
456
- this._pTasks = this._pTasks || Promise.resolve();
457
- if (!!fnNewTask) {
458
- this._pTasks = this._pTasks.then(fnNewTask).catch(function() {
459
- return Promise.resolve();
460
- });
461
- }
462
-
463
- return this._pTasks;
464
- },
465
-
466
- getProgrammingModel: function(oContext) {
467
- return this.getTransactionHelper().getProgrammingModel(oContext);
468
- },
469
-
470
- deleteDocumentTransaction: function(oContext, mParameters) {
471
- var that = this,
472
- oResourceBundle = this.getView().getController().oResourceBundle,
473
- transactionHelper = this.getTransactionHelper();
474
-
475
- mParameters = mParameters || {};
476
-
477
- // TODO: this setting and removing of contexts shouldn't be in the transaction helper at all
478
- // for the time being I kept it and provide the internal model context to not break something
479
- mParameters.internalModelContext = mParameters.controlId
480
- ? sap.ui
481
- .getCore()
482
- .byId(mParameters.controlId)
483
- .getBindingContext("internal")
484
- : null;
485
-
486
- return this.syncTask()
487
- .then(
488
- transactionHelper.deleteDocument.bind(
489
- transactionHelper,
490
- oContext,
491
- mParameters,
492
- oResourceBundle,
493
- that.getMessageHandler()
494
- )
495
- )
496
- .then(function() {
497
- that.getInternalModel().setProperty("/sessionOn", false);
498
- })
499
- .catch(function(oError) {
500
- return Promise.reject(oError);
501
- });
502
- },
503
-
504
- /**
505
- * Handles the create event: shows messages and in case of a draft, updates the draft indicator.
506
- *
507
- * @memberof sap.fe.core.controllerextensions.EditFlow
508
- * @param {object} oBinding OData list binding object
509
- */
510
- handleCreateEvents: function(oBinding) {
511
- var that = this,
512
- sProgrammingModel,
513
- transactionHelper = that.getTransactionHelper();
514
-
515
- that.setDraftStatus(DraftStatus.Clear);
516
-
517
- oBinding = (oBinding.getBinding && oBinding.getBinding()) || oBinding;
518
- sProgrammingModel = that.getProgrammingModel(oBinding);
519
-
520
- oBinding.attachEvent("createSent", function() {
521
- transactionHelper.handleDocumentModifications();
522
- if (sProgrammingModel === ProgrammingModel.Draft) {
523
- that.setDraftStatus(DraftStatus.Saving);
524
- }
525
- });
526
- oBinding.attachEvent("createCompleted", function(oEvent) {
527
- var bSuccess = oEvent.getParameter("success");
528
- if (sProgrammingModel === ProgrammingModel.Draft) {
529
- that.setDraftStatus(bSuccess ? DraftStatus.Saved : DraftStatus.Clear);
530
- }
531
- that.getMessageHandler().showMessageDialog();
532
- });
533
- },
534
-
535
- getTransactionHelper: function() {
536
- if (!this._oTransactionHelper) {
537
- // currently also the transaction helper is locking therefore passing lock object
538
- this._oTransactionHelper = new TransactionHelper(this._oAppComponent, this.getGlobalUIModel());
539
- }
540
-
541
- return this._oTransactionHelper;
542
- },
543
-
544
- getInternalModel: function() {
545
- return this.base.getView().getModel("internal");
546
- },
547
-
548
- /**
549
- * Creates a new promise to wait for an action to be executed
550
- * @function
551
- * @name _createActionPromise
552
- * @memberof sap.fe.core.controllerextensions.EditFlow
553
- *
554
- * @returns {Function} The resolver function which can be used to externally resolve the promise
555
- */
556
-
557
- createActionPromise: function(sActionName, sControlId) {
558
- var that = this,
559
- fResolver,
560
- fRejector;
561
- this.oActionPromise = new Promise(function(resolve, reject) {
562
- fResolver = resolve;
563
- fRejector = reject;
564
- }).then(function(oResponse) {
565
- return Object.assign({ controlId: sControlId }, that.getActionResponseDataAndKeys(sActionName, oResponse));
566
- });
567
- return { fResolver: fResolver, fRejector: fRejector };
568
- },
569
-
570
- /**
571
- * Gets the getCurrentActionPromise object.
572
- *
573
- * @function
574
- * @name _getCurrentActionPromise
575
- * @memberof sap.fe.core.controllerextensions.EditFlow
576
- *
577
- * @returns {Promise} Returns the promise
578
- */
579
- getCurrentActionPromise: function() {
580
- return this.oActionPromise;
581
- },
582
-
583
- deleteCurrentActionPromise: function() {
584
- this.oActionPromise = null;
585
- },
586
-
587
- /**
588
- * @function
589
- * @name getActionResponseDataAndKeys
590
- * @memberof sap.fe.core.controllerextensions.EditFlow
591
- * @param {string} sActionName The name of the action that is executed
592
- * @param {object} oResponse The bound action's response data or response context
593
- * @returns {object} Object with data and names of the key fields of the response
594
- */
595
- getActionResponseDataAndKeys: function(sActionName, oResponse) {
596
- if (Array.isArray(oResponse)) {
597
- if (oResponse.length === 1) {
598
- oResponse = oResponse[0];
599
- } else {
600
- return null;
601
- }
602
- }
603
- if (!oResponse) {
604
- return null;
605
- }
606
- var oView = this.getView(),
607
- oMetaModel = oView
608
- .getModel()
609
- .getMetaModel()
610
- .getData(),
611
- sActionReturnType =
612
- oMetaModel && oMetaModel[sActionName] && oMetaModel[sActionName][0] && oMetaModel[sActionName][0].$ReturnType
613
- ? oMetaModel[sActionName][0].$ReturnType.$Type
614
- : null,
615
- aKey = sActionReturnType && oMetaModel[sActionReturnType] ? oMetaModel[sActionReturnType].$Key : null;
616
-
617
- return {
618
- oData: oResponse.getObject(),
619
- keys: aKey
620
- };
621
- },
622
-
623
- getMessageHandler: function() {
624
- // at this point of time it's not meant to release the edit flow for FPM custom pages therefore keep
625
- // the logic here for now
626
-
627
- if (this.base.messageHandler) {
628
- return this.base.messageHandler;
629
- } else {
630
- throw new Error("Edit Flow works only with a given message handler");
631
- }
632
- },
633
- override: {
634
- onInit: function() {
635
- this._oAppComponent = this.base.getAppComponent();
636
- }
637
- },
638
-
639
- handleStickyOn: function(oContext) {
640
- var that = this,
641
- oAppComponent = CommonUtils.getAppComponent(this.getView());
642
-
643
- try {
644
- if (oAppComponent === undefined || oContext === undefined) {
645
- throw new Error("undefined AppComponent or Context for function handleStickyOn");
646
- }
647
-
648
- if (!oAppComponent.getRouterProxy().hasNavigationGuard()) {
649
- var sHashTracker = oAppComponent.getRouterProxy().getHash(),
650
- oInternalModel = this.getInternalModel();
651
-
652
- // Set a guard in the RouterProxy
653
- // A timeout is necessary, as with deferred creation the hashChanger is not updated yet with
654
- // the new hash, and the guard cannot be found in the managed history of the router proxy
655
- setTimeout(function() {
656
- oAppComponent.getRouterProxy().setNavigationGuard();
657
- }, 0);
658
-
659
- // Setting back navigation on shell service, to get the dicard message box in case of sticky
660
- oAppComponent.getShellServices().setBackNavigation(that.onBackNavigationInSession.bind(that));
661
-
662
- _registerDirtyStateProvider(that, oAppComponent, oInternalModel, sHashTracker);
663
-
664
- var i18nModel = this.getView().getModel("sap.fe.i18n");
665
- _attachSessionTimeout(that, i18nModel);
666
-
667
- _attachRouteMatched(that, oContext, oAppComponent);
668
- }
669
- } catch (error) {
670
- Log.info(error);
671
- return undefined;
672
- }
673
- return true;
674
- },
675
-
676
- handleStickyOff: function() {
677
- var oAppComponent = CommonUtils.getAppComponent(this.getView());
678
- try {
679
- if (oAppComponent === undefined) {
680
- throw new Error("undefined AppComponent for function handleStickyOff");
681
- }
682
-
683
- if (oAppComponent && oAppComponent.getRouterProxy) {
684
- // If we have exited from the app, CommonUtils.getAppComponent doesn't return a
685
- // sap.fe.core.AppComponent, hence the 'if' above
686
- oAppComponent.getRouterProxy().discardNavigationGuard();
687
- }
688
-
689
- if (this.fnDirtyStateProvider) {
690
- oAppComponent.getShellServices().deregisterDirtyStateProvider(this.fnDirtyStateProvider);
691
- this.fnDirtyStateProvider = null;
692
- }
693
-
694
- if (this.getView().getModel() && this.fnHandleSessionTimeout) {
695
- this.getView()
696
- .getModel()
697
- .detachSessionTimeout(this.fnHandleSessionTimeout);
698
- }
699
-
700
- oAppComponent.getRoutingService().detachRouteMatched(this.fnStickyDiscardAfterNavigation);
701
- this.fnStickyDiscardAfterNavigation = null;
702
-
703
- this.getTransactionHelper()._bCreateMode = false;
704
- this.setEditMode(EditMode.Display, false);
705
-
706
- if (oAppComponent) {
707
- // If we have exited from the app, CommonUtils.getAppComponent doesn't return a
708
- // sap.fe.core.AppComponent, hence the 'if' above
709
- oAppComponent.getShellServices().setBackNavigation();
710
- }
711
- } catch (error) {
712
- Log.info(error);
713
- return undefined;
714
- }
715
- return true;
716
- },
717
-
718
- /**
719
- * @description Method to display a 'discard' popover when exiting a sticky session.
720
- *
721
- * @function
722
- * @name onBackNavigationInSession
723
- * @memberof sap.fe.core.controllerextensions.InternalEditFlow
724
- */
725
- onBackNavigationInSession: function() {
726
- var that = this,
727
- oView = that.getView(),
728
- oAppComponent = CommonUtils.getAppComponent(oView),
729
- oRouterProxy = oAppComponent.getRouterProxy();
730
-
731
- if (oRouterProxy.checkIfBackIsOutOfGuard()) {
732
- var oBindingContext = oView && oView.getBindingContext();
733
-
734
- CommonUtils.processDataLossConfirmation(
735
- function() {
736
- that.discardStickySession(oBindingContext);
737
- history.back();
738
- },
739
- oView,
740
- that.getProgrammingModel(oBindingContext)
741
- );
742
-
743
- return;
744
- }
745
- history.back();
746
- },
747
-
748
- discardStickySession: function(oContext) {
749
- sticky.discardDocument(oContext);
750
- this.handleStickyOff();
751
- },
752
-
753
- _hasNewActionForSticky: function(oContext, oView, sCustomAction) {
754
- try {
755
- if (oContext === undefined || oView === undefined) {
756
- throw new Error("Invalid input parameters for function _hasNewActionForSticky");
757
- }
758
-
759
- var oMetaModel = oView.getModel().getMetaModel(),
760
- sMetaPath = oContext.getPath().substring(0, oContext.getPath().indexOf("(")),
761
- oStickySession = oMetaModel.getObject(sMetaPath + "@com.sap.vocabularies.Session.v1.StickySessionSupported");
762
-
763
- if (oStickySession && oStickySession.NewAction && oStickySession.NewAction === sCustomAction) {
764
- return true;
765
- } else if (oStickySession && oStickySession.AdditionalNewActions) {
766
- return sCustomAction ===
767
- oStickySession.AdditionalNewActions.find(function(sAdditionalAction) {
768
- return sAdditionalAction === sCustomAction;
769
- })
770
- ? true
771
- : false;
772
- } else {
773
- return false;
774
- }
775
- } catch (error) {
776
- Log.info(error);
777
- return undefined;
778
- }
779
- }
780
- });
781
- }
782
- );
5
+ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/fe/core/TransactionHelper", "sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/BusyLocker", "sap/fe/core/library", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/m/Dialog", "sap/m/Button", "sap/m/Text", "sap/fe/core/actions/sticky", "sap/fe/core/actions/collaboration/ActivitySync", "sap/fe/core/actions/collaboration/CollaborationCommon"], function (ControllerExtension, OverrideExecution, TransactionHelper, Log, CommonUtils, BusyLocker, FELibrary, EditState, ClassSupport, ControllerExtensionMetadata, Dialog, Button, Text, sticky, ActivitySync, CollaborationCommon) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _class, _class2;
9
+
10
+ var Activity = CollaborationCommon.Activity;
11
+ var send = ActivitySync.send;
12
+ var UI5Class = ClassSupport.UI5Class;
13
+ var Public = ClassSupport.Public;
14
+ var Private = ClassSupport.Private;
15
+ var Override = ClassSupport.Override;
16
+ var Final = ClassSupport.Final;
17
+ var Extensible = ClassSupport.Extensible;
18
+
19
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
20
+
21
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
22
+
23
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
24
+
25
+ var ProgrammingModel = FELibrary.ProgrammingModel,
26
+ DraftStatus = FELibrary.DraftStatus,
27
+ EditMode = FELibrary.EditMode,
28
+ CreationMode = FELibrary.CreationMode;
29
+ var InternalEditFlow = (_dec = UI5Class("sap.fe.core.controllerextensions.InternalEditFlow", ControllerExtensionMetadata), _dec2 = Override(), _dec3 = Extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
30
+ _inherits(InternalEditFlow, _ControllerExtension);
31
+
32
+ function InternalEditFlow() {
33
+ return _ControllerExtension.apply(this, arguments) || this;
34
+ }
35
+
36
+ var _proto = InternalEditFlow.prototype;
37
+
38
+ _proto.onInit = function onInit() {
39
+ this._oAppComponent = this.base.getAppComponent();
40
+ }
41
+ /**
42
+ * Override to set the creation mode.
43
+ *
44
+ * @param bCreationMode
45
+ * @memberof sap.fe.core.controllerextensions.InternalEditFlow
46
+ * @alias sap.fe.core.controllerextensions.InternalEditFlow#setCreationMode
47
+ * @since 1.90.0
48
+ */
49
+ ;
50
+
51
+ _proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
+ setCreationMode = function setCreationMode(bCreationMode) {// to be overridden
53
+ };
54
+
55
+ _proto.createMultipleDocuments = function createMultipleDocuments(oListBinding, aData, bCreateAtEnd, bFromCopyPaste, beforeCreateCallBack) {
56
+ var _this = this;
57
+
58
+ var transactionHelper = this.getTransactionHelper(),
59
+ oLockObject = this.getGlobalUIModel(),
60
+ oResourceBundle = this.getView().getController().oResourceBundle;
61
+ BusyLocker.lock(oLockObject);
62
+ return this.syncTask().then(function () {
63
+ var onBeforeCreatePromise = beforeCreateCallBack ? beforeCreateCallBack({
64
+ contextPath: oListBinding && oListBinding.getPath()
65
+ }) : Promise.resolve();
66
+ return onBeforeCreatePromise;
67
+ }).then(function () {
68
+ var oModel = oListBinding.getModel(),
69
+ oMetaModel = oModel.getMetaModel();
70
+ var sMetaPath;
71
+
72
+ if (oListBinding.getContext()) {
73
+ sMetaPath = oMetaModel.getMetaPath(oListBinding.getContext().getPath() + "/" + oListBinding.getPath());
74
+ } else {
75
+ sMetaPath = oMetaModel.getMetaPath(oListBinding.getPath());
76
+ }
77
+
78
+ _this.handleCreateEvents(oListBinding); // Iterate on all items and store the corresponding creation promise
79
+
80
+
81
+ var aCreationPromises = aData.map(function (mPropertyValues) {
82
+ var mParameters = {
83
+ data: {}
84
+ };
85
+ mParameters.keepTransientContextOnFailed = false; // currently not fully supported
86
+
87
+ mParameters.busyMode = "None";
88
+ mParameters.creationMode = CreationMode.CreationRow;
89
+ mParameters.parentControl = _this.getView();
90
+ mParameters.createAtEnd = bCreateAtEnd; // Remove navigation properties as we don't support deep create
91
+
92
+ for (var sPropertyPath in mPropertyValues) {
93
+ var oProperty = oMetaModel.getObject(sMetaPath + "/" + sPropertyPath);
94
+
95
+ if (oProperty && oProperty.$kind !== "NavigationProperty" && mPropertyValues[sPropertyPath]) {
96
+ mParameters.data[sPropertyPath] = mPropertyValues[sPropertyPath];
97
+ }
98
+ }
99
+
100
+ return transactionHelper.createDocument(oListBinding, mParameters, oResourceBundle, _this.getMessageHandler(), bFromCopyPaste, _this.getView());
101
+ });
102
+ return Promise.all(aCreationPromises);
103
+ }).then(function (aContexts) {
104
+ // transient contexts are reliably removed once oNewContext.created() is resolved
105
+ return Promise.all(aContexts.map(function (oNewContext) {
106
+ return oNewContext.created();
107
+ }));
108
+ }).then(function () {
109
+ var oBindingContext = _this.getView().getBindingContext(); // if there are transient contexts, we must avoid requesting side effects
110
+ // this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
111
+ // if list binding is refreshed, transient contexts might be lost
112
+
113
+
114
+ if (!CommonUtils.hasTransientContext(oListBinding)) {
115
+ _this._oAppComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(oListBinding.getPath(), oBindingContext);
116
+ }
117
+ }).catch(function (err) {
118
+ Log.error("Error while creating multiple documents.");
119
+ return Promise.reject(err);
120
+ }).finally(function () {
121
+ BusyLocker.unlock(oLockObject);
122
+ });
123
+ };
124
+
125
+ _proto.deleteMultipleDocuments = function deleteMultipleDocuments(aContexts, mParameters) {
126
+ var _this2 = this;
127
+
128
+ var oRoutingListener = this.getRoutingListener(),
129
+ oLockObject = this.getGlobalUIModel();
130
+ var oTable = this.getView().byId(mParameters.controlId);
131
+
132
+ if (!oTable || !oTable.isA("sap.ui.mdc.Table")) {
133
+ throw new Error("parameter controlId missing or incorrect");
134
+ }
135
+
136
+ var oListBinding = oTable.getRowBinding();
137
+ mParameters.bFindActiveContexts = true;
138
+ BusyLocker.lock(oLockObject);
139
+ return this.deleteDocumentTransaction(aContexts, mParameters).then(function () {
140
+ var oResult; // Multiple object deletion is triggered from a list
141
+ // First clear the selection in the table as it's not valid any more
142
+
143
+ oTable.clearSelection(); // Then refresh the list-binding (LR), or require side-effects (OP)
144
+
145
+ var oBindingContext = _this2.getView().getBindingContext();
146
+
147
+ if (oListBinding.isRoot()) {
148
+ // keep promise chain pending until refresh of listbinding is completed
149
+ oResult = new Promise(function (resolve) {
150
+ oListBinding.attachEventOnce("dataReceived", function () {
151
+ resolve();
152
+ });
153
+ });
154
+ oListBinding.refresh();
155
+ } else if (oBindingContext) {
156
+ // if there are transient contexts, we must avoid requesting side effects
157
+ // this is avoid a potential list refresh, there could be a side effect that refreshes the list binding
158
+ // if list binding is refreshed, transient contexts might be lost
159
+ if (!CommonUtils.hasTransientContext(oListBinding)) {
160
+ _this2._oAppComponent.getSideEffectsService().requestSideEffectsForNavigationProperty(oListBinding.getPath(), oBindingContext);
161
+ }
162
+ } // deleting at least one object should also set the UI to dirty
163
+
164
+
165
+ EditState.setEditStateDirty();
166
+ send(_this2.getView(), Activity.Delete, aContexts); // Finally, check if the current state can be impacted by the deletion, i.e. if there's
167
+ // an OP displaying a deleted object. If yes navigate back to dismiss the OP
168
+
169
+ for (var index = 0; index < aContexts.length; index++) {
170
+ if (oRoutingListener.isCurrentStateImpactedBy(aContexts[index])) {
171
+ oRoutingListener.navigateBackFromContext(aContexts[index]);
172
+ break;
173
+ }
174
+ }
175
+
176
+ return oResult;
177
+ }).catch(function (oError) {
178
+ Log.error("Error while deleting the document(s)", oError);
179
+ }).finally(function () {
180
+ BusyLocker.unlock(oLockObject);
181
+ });
182
+ }
183
+ /**
184
+ * Decides if a document is to be shown in display or edit mode.
185
+ *
186
+ * @function
187
+ * @name _computeEditMode
188
+ * @memberof sap.fe.core.controllerextensions.InternalEditFlow
189
+ * @param {sap.ui.model.odata.v4.Context} oContext The context to be displayed or edited
190
+ * @returns {Promise} Promise resolves once the edit mode is computed
191
+ */
192
+ ;
193
+
194
+ _proto.computeEditMode = function computeEditMode(oContext) {
195
+ var _this3 = this;
196
+
197
+ var sCustomAction = this.getInternalModel().getProperty("/sCustomAction");
198
+ return Promise.resolve(function () {
199
+ var sProgrammingModel = _this3.getProgrammingModel(oContext);
200
+
201
+ if (sProgrammingModel === ProgrammingModel.Draft) {
202
+ _this3.setDraftStatus(DraftStatus.Clear);
203
+
204
+ return oContext.requestObject("IsActiveEntity").then(function (bIsActiveEntity) {
205
+ if (bIsActiveEntity === false) {
206
+ // in case the document is draft set it in edit mode
207
+ _this3.setEditMode(EditMode.Editable);
208
+
209
+ return oContext.requestObject("HasActiveEntity").then(function (bHasActiveEntity) {
210
+ _this3.setEditMode(undefined, !bHasActiveEntity);
211
+ });
212
+ } else {
213
+ // active document, stay on display mode
214
+ _this3.setEditMode(EditMode.Display, false);
215
+ }
216
+ }).catch(function (oError) {
217
+ Log.error("Error while determining the editMode for draft", oError);
218
+ throw oError;
219
+ });
220
+ } else if (sProgrammingModel === ProgrammingModel.Sticky) {
221
+ if (sCustomAction && sCustomAction !== "" && _this3._hasNewActionForSticky(oContext, _this3.getView(), sCustomAction)) {
222
+ _this3.getTransactionHelper()._bCreateMode = true;
223
+
224
+ _this3.getTransactionHelper().handleDocumentModifications();
225
+
226
+ _this3.setEditMode(EditMode.Editable, true);
227
+
228
+ EditState.setEditStateDirty();
229
+
230
+ _this3.handleStickyOn(oContext);
231
+
232
+ _this3.getInternalModel().setProperty("/sCustomAction", "");
233
+ }
234
+ }
235
+ }());
236
+ }
237
+ /**
238
+ * Sets the edit mode.
239
+ *
240
+ * @param {string} sEditMode
241
+ * @param {boolean} bCreationMode CreateMode flag to identify the creation mode
242
+ */
243
+ ;
244
+
245
+ _proto.setEditMode = function setEditMode(sEditMode) {
246
+ var bCreationMode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
247
+ // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
248
+ // rely on the global UI model to exist
249
+ var oGlobalModel = this.getGlobalUIModel();
250
+
251
+ if (sEditMode) {
252
+ oGlobalModel.setProperty("/editMode", sEditMode, undefined, true);
253
+ oGlobalModel.setProperty("/isEditable", sEditMode === "Editable", undefined, true);
254
+ }
255
+
256
+ if (bCreationMode !== undefined) {
257
+ // Since setCreationMode is public in EditFlow and can be overriden, make sure to call it via the controller
258
+ // to ensure any overrides are taken into account
259
+ this.setCreationMode(bCreationMode);
260
+ }
261
+ };
262
+
263
+ _proto.setDraftStatus = function setDraftStatus(sDraftState) {
264
+ // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
265
+ // rely on the global UI model to exist
266
+ this.base.getView().getModel("ui").setProperty("/draftStatus", sDraftState, undefined, true);
267
+ };
268
+
269
+ _proto.getRoutingListener = function getRoutingListener() {
270
+ // at this point of time it's not meant to release the edit flow for FPM custom pages and the routing
271
+ // listener is not yet public therefore keep the logic here for now
272
+ if (this.base._routing) {
273
+ return this.base._routing;
274
+ } else {
275
+ throw new Error("Edit Flow works only with a given routing listener");
276
+ }
277
+ };
278
+
279
+ _proto.getGlobalUIModel = function getGlobalUIModel() {
280
+ // at this point of time it's not meant to release the edit flow for freestyle usage therefore we can
281
+ // rely on the global UI model to exist
282
+ return this.base.getView().getModel("ui");
283
+ }
284
+ /**
285
+ * Performs a task in sync with other tasks created via this function.
286
+ * Returns the promise chain of the task.
287
+ *
288
+ * @function
289
+ * @name sap.fe.core.controllerextensions.EditFlow#syncTask
290
+ * @memberof sap.fe.core.controllerextensions.EditFlow
291
+ * @static
292
+ * @param {Promise|Function} [vTask] Optional, a promise or function to be executed synchronously
293
+ * @returns {Promise} Promise resolves once the task is completed
294
+ *
295
+ * @ui5-restricted
296
+ * @final
297
+ */
298
+ ;
299
+
300
+ _proto.syncTask = function syncTask(vTask) {
301
+ var fnNewTask;
302
+
303
+ if (vTask instanceof Promise) {
304
+ fnNewTask = function () {
305
+ return vTask;
306
+ };
307
+ } else if (typeof vTask === "function") {
308
+ fnNewTask = vTask;
309
+ }
310
+
311
+ this._pTasks = this._pTasks || Promise.resolve();
312
+
313
+ if (!!fnNewTask) {
314
+ this._pTasks = this._pTasks.then(fnNewTask).catch(function () {
315
+ return Promise.resolve();
316
+ });
317
+ }
318
+
319
+ return this._pTasks;
320
+ };
321
+
322
+ _proto.getProgrammingModel = function getProgrammingModel(oContext) {
323
+ return this.getTransactionHelper().getProgrammingModel(oContext);
324
+ };
325
+
326
+ _proto.deleteDocumentTransaction = function deleteDocumentTransaction(oContext, mParameters) {
327
+ var _sap$ui$getCore$byId,
328
+ _this4 = this;
329
+
330
+ var oResourceBundle = this.getView().getController().oResourceBundle,
331
+ transactionHelper = this.getTransactionHelper();
332
+ mParameters = mParameters || {}; // TODO: this setting and removing of contexts shouldn't be in the transaction helper at all
333
+ // for the time being I kept it and provide the internal model context to not break something
334
+
335
+ mParameters.internalModelContext = mParameters.controlId ? (_sap$ui$getCore$byId = sap.ui.getCore().byId(mParameters.controlId)) === null || _sap$ui$getCore$byId === void 0 ? void 0 : _sap$ui$getCore$byId.getBindingContext("internal") : null;
336
+ return this.syncTask().then(transactionHelper.deleteDocument.bind(transactionHelper, oContext, mParameters, oResourceBundle, this.getMessageHandler())).then(function () {
337
+ _this4.getInternalModel().setProperty("/sessionOn", false);
338
+ }).catch(function (oError) {
339
+ return Promise.reject(oError);
340
+ });
341
+ }
342
+ /**
343
+ * Handles the create event: shows messages and in case of a draft, updates the draft indicator.
344
+ *
345
+ * @memberof sap.fe.core.controllerextensions.EditFlow
346
+ * @param {object} oBinding OData list binding object
347
+ */
348
+ ;
349
+
350
+ _proto.handleCreateEvents = function handleCreateEvents(oBinding) {
351
+ var _this5 = this;
352
+
353
+ var transactionHelper = this.getTransactionHelper();
354
+ this.setDraftStatus(DraftStatus.Clear);
355
+ oBinding = oBinding.getBinding && oBinding.getBinding() || oBinding;
356
+ var sProgrammingModel = this.getProgrammingModel(oBinding);
357
+ oBinding.attachEvent("createSent", function () {
358
+ transactionHelper.handleDocumentModifications();
359
+
360
+ if (sProgrammingModel === ProgrammingModel.Draft) {
361
+ _this5.setDraftStatus(DraftStatus.Saving);
362
+ }
363
+ });
364
+ oBinding.attachEvent("createCompleted", function (oEvent) {
365
+ var bSuccess = oEvent.getParameter("success");
366
+
367
+ if (sProgrammingModel === ProgrammingModel.Draft) {
368
+ _this5.setDraftStatus(bSuccess ? DraftStatus.Saved : DraftStatus.Clear);
369
+ }
370
+
371
+ _this5.getMessageHandler().showMessageDialog();
372
+ });
373
+ };
374
+
375
+ _proto.getTransactionHelper = function getTransactionHelper() {
376
+ if (!this._oTransactionHelper) {
377
+ // currently also the transaction helper is locking therefore passing lock object
378
+ this._oTransactionHelper = new TransactionHelper(this._oAppComponent, this.getGlobalUIModel());
379
+ }
380
+
381
+ return this._oTransactionHelper;
382
+ };
383
+
384
+ _proto.getInternalModel = function getInternalModel() {
385
+ return this.base.getView().getModel("internal");
386
+ }
387
+ /**
388
+ * Creates a new promise to wait for an action to be executed
389
+ * @function
390
+ * @name _createActionPromise
391
+ * @memberof sap.fe.core.controllerextensions.EditFlow
392
+ *
393
+ * @returns {Function} The resolver function which can be used to externally resolve the promise
394
+ */
395
+ ;
396
+
397
+ _proto.createActionPromise = function createActionPromise(sActionName, sControlId) {
398
+ var _this6 = this;
399
+
400
+ var fResolver, fRejector;
401
+ this.oActionPromise = new Promise(function (resolve, reject) {
402
+ fResolver = resolve;
403
+ fRejector = reject;
404
+ }).then(function (oResponse) {
405
+ return Object.assign({
406
+ controlId: sControlId
407
+ }, _this6.getActionResponseDataAndKeys(sActionName, oResponse));
408
+ });
409
+ return {
410
+ fResolver: fResolver,
411
+ fRejector: fRejector
412
+ };
413
+ }
414
+ /**
415
+ * Gets the getCurrentActionPromise object.
416
+ *
417
+ * @function
418
+ * @name _getCurrentActionPromise
419
+ * @memberof sap.fe.core.controllerextensions.EditFlow
420
+ *
421
+ * @returns {Promise} Returns the promise
422
+ */
423
+ ;
424
+
425
+ _proto.getCurrentActionPromise = function getCurrentActionPromise() {
426
+ return this.oActionPromise;
427
+ };
428
+
429
+ _proto.deleteCurrentActionPromise = function deleteCurrentActionPromise() {
430
+ this.oActionPromise = undefined;
431
+ }
432
+ /**
433
+ * @function
434
+ * @name getActionResponseDataAndKeys
435
+ * @memberof sap.fe.core.controllerextensions.EditFlow
436
+ * @param {string} sActionName The name of the action that is executed
437
+ * @param {object} oResponse The bound action's response data or response context
438
+ * @returns {object} Object with data and names of the key fields of the response
439
+ */
440
+ ;
441
+
442
+ _proto.getActionResponseDataAndKeys = function getActionResponseDataAndKeys(sActionName, oResponse) {
443
+ if (Array.isArray(oResponse)) {
444
+ if (oResponse.length === 1) {
445
+ oResponse = oResponse[0];
446
+ } else {
447
+ return null;
448
+ }
449
+ }
450
+
451
+ if (!oResponse) {
452
+ return null;
453
+ }
454
+
455
+ var oView = this.getView(),
456
+ oMetaModel = oView.getModel().getMetaModel().getData(),
457
+ sActionReturnType = oMetaModel && oMetaModel[sActionName] && oMetaModel[sActionName][0] && oMetaModel[sActionName][0].$ReturnType ? oMetaModel[sActionName][0].$ReturnType.$Type : null,
458
+ aKey = sActionReturnType && oMetaModel[sActionReturnType] ? oMetaModel[sActionReturnType].$Key : null;
459
+ return {
460
+ oData: oResponse.getObject(),
461
+ keys: aKey
462
+ };
463
+ };
464
+
465
+ _proto.getMessageHandler = function getMessageHandler() {
466
+ // at this point of time it's not meant to release the edit flow for FPM custom pages therefore keep
467
+ // the logic here for now
468
+ if (this.base.messageHandler) {
469
+ return this.base.messageHandler;
470
+ } else {
471
+ throw new Error("Edit Flow works only with a given message handler");
472
+ }
473
+ };
474
+
475
+ _proto.handleStickyOn = function handleStickyOn(oContext) {
476
+ var oAppComponent = CommonUtils.getAppComponent(this.getView());
477
+
478
+ try {
479
+ if (oAppComponent === undefined || oContext === undefined) {
480
+ throw new Error("undefined AppComponent or Context for function handleStickyOn");
481
+ }
482
+
483
+ if (!oAppComponent.getRouterProxy().hasNavigationGuard()) {
484
+ var sHashTracker = oAppComponent.getRouterProxy().getHash(),
485
+ oInternalModel = this.getInternalModel(); // Set a guard in the RouterProxy
486
+ // A timeout is necessary, as with deferred creation the hashChanger is not updated yet with
487
+ // the new hash, and the guard cannot be found in the managed history of the router proxy
488
+
489
+ setTimeout(function () {
490
+ oAppComponent.getRouterProxy().setNavigationGuard();
491
+ }, 0); // Setting back navigation on shell service, to get the dicard message box in case of sticky
492
+
493
+ oAppComponent.getShellServices().setBackNavigation(this.onBackNavigationInSession.bind(this));
494
+ this.fnDirtyStateProvider = this._registerDirtyStateProvider(oAppComponent, oInternalModel, sHashTracker);
495
+ oAppComponent.getShellServices().registerDirtyStateProvider(this.fnDirtyStateProvider); // handle session timeout
496
+
497
+ var i18nModel = this.getView().getModel("sap.fe.i18n");
498
+ this.fnHandleSessionTimeout = this._attachSessionTimeout(this, i18nModel);
499
+ this.getView().getModel().attachSessionTimeout(this.fnHandleSessionTimeout);
500
+ this.fnStickyDiscardAfterNavigation = this._attachRouteMatched(this, oContext, oAppComponent);
501
+ oAppComponent.getRoutingService().attachRouteMatched(this.fnStickyDiscardAfterNavigation);
502
+ }
503
+ } catch (error) {
504
+ Log.info(error);
505
+ return undefined;
506
+ }
507
+
508
+ return true;
509
+ };
510
+
511
+ _proto.handleStickyOff = function handleStickyOff() {
512
+ var oAppComponent = CommonUtils.getAppComponent(this.getView());
513
+
514
+ try {
515
+ if (oAppComponent === undefined) {
516
+ throw new Error("undefined AppComponent for function handleStickyOff");
517
+ }
518
+
519
+ if (oAppComponent && oAppComponent.getRouterProxy) {
520
+ // If we have exited from the app, CommonUtils.getAppComponent doesn't return a
521
+ // sap.fe.core.AppComponent, hence the 'if' above
522
+ oAppComponent.getRouterProxy().discardNavigationGuard();
523
+ }
524
+
525
+ if (this.fnDirtyStateProvider) {
526
+ oAppComponent.getShellServices().deregisterDirtyStateProvider(this.fnDirtyStateProvider);
527
+ this.fnDirtyStateProvider = undefined;
528
+ }
529
+
530
+ if (this.getView().getModel() && this.fnHandleSessionTimeout) {
531
+ this.getView().getModel().detachSessionTimeout(this.fnHandleSessionTimeout);
532
+ }
533
+
534
+ oAppComponent.getRoutingService().detachRouteMatched(this.fnStickyDiscardAfterNavigation);
535
+ this.fnStickyDiscardAfterNavigation = undefined;
536
+ this.getTransactionHelper()._bCreateMode = false;
537
+ this.setEditMode(EditMode.Display, false);
538
+
539
+ if (oAppComponent) {
540
+ // If we have exited from the app, CommonUtils.getAppComponent doesn't return a
541
+ // sap.fe.core.AppComponent, hence the 'if' above
542
+ oAppComponent.getShellServices().setBackNavigation();
543
+ }
544
+ } catch (error) {
545
+ Log.info(error);
546
+ return undefined;
547
+ }
548
+
549
+ return true;
550
+ }
551
+ /**
552
+ * @description Method to display a 'discard' popover when exiting a sticky session.
553
+ *
554
+ * @function
555
+ * @name onBackNavigationInSession
556
+ * @memberof sap.fe.core.controllerextensions.InternalEditFlow
557
+ */
558
+ ;
559
+
560
+ _proto.onBackNavigationInSession = function onBackNavigationInSession() {
561
+ var _this7 = this;
562
+
563
+ var oView = this.getView(),
564
+ oAppComponent = CommonUtils.getAppComponent(oView),
565
+ oRouterProxy = oAppComponent.getRouterProxy();
566
+
567
+ if (oRouterProxy.checkIfBackIsOutOfGuard()) {
568
+ var oBindingContext = oView && oView.getBindingContext();
569
+ CommonUtils.processDataLossConfirmation(function () {
570
+ _this7.discardStickySession(oBindingContext);
571
+
572
+ history.back();
573
+ }, oView, this.getProgrammingModel(oBindingContext));
574
+ return;
575
+ }
576
+
577
+ history.back();
578
+ };
579
+
580
+ _proto.discardStickySession = function discardStickySession(oContext) {
581
+ sticky.discardDocument(oContext);
582
+ this.handleStickyOff();
583
+ };
584
+
585
+ _proto._hasNewActionForSticky = function _hasNewActionForSticky(oContext, oView, sCustomAction) {
586
+ try {
587
+ if (oContext === undefined || oView === undefined) {
588
+ throw new Error("Invalid input parameters for function _hasNewActionForSticky");
589
+ }
590
+
591
+ var oMetaModel = oView.getModel().getMetaModel(),
592
+ sMetaPath = oContext.getPath().substring(0, oContext.getPath().indexOf("(")),
593
+ oStickySession = oMetaModel.getObject(sMetaPath + "@com.sap.vocabularies.Session.v1.StickySessionSupported");
594
+
595
+ if (oStickySession && oStickySession.NewAction && oStickySession.NewAction === sCustomAction) {
596
+ return true;
597
+ } else if (oStickySession && oStickySession.AdditionalNewActions) {
598
+ return sCustomAction === oStickySession.AdditionalNewActions.find(function (sAdditionalAction) {
599
+ return sAdditionalAction === sCustomAction;
600
+ }) ? true : false;
601
+ } else {
602
+ return false;
603
+ }
604
+ } catch (error) {
605
+ Log.info(error);
606
+ return undefined;
607
+ }
608
+ };
609
+
610
+ _proto._registerDirtyStateProvider = function _registerDirtyStateProvider(oAppComponent, oInternalModel, sHashTracker) {
611
+ return function fnDirtyStateProvider(oNavigationContext) {
612
+ try {
613
+ if (oNavigationContext === undefined) {
614
+ throw new Error("Invalid input parameters for function fnDirtyStateProvider");
615
+ }
616
+
617
+ var sTargetHash = oNavigationContext.innerAppRoute,
618
+ oRouterProxy = oAppComponent.getRouterProxy();
619
+ var sLclHashTracker = "";
620
+ var bDirty;
621
+ var bSessionON = oInternalModel.getProperty("/sessionOn");
622
+
623
+ if (!bSessionON) {
624
+ // If the sticky session was terminated before hand.
625
+ // Eexample in case of navigating away from application using IBN.
626
+ return undefined;
627
+ }
628
+
629
+ if (!oRouterProxy.isNavigationFinalized()) {
630
+ // If navigation is currently happening in RouterProxy, it's a transient state
631
+ // (not dirty)
632
+ bDirty = false;
633
+ sLclHashTracker = sTargetHash;
634
+ } else if (sHashTracker === sTargetHash) {
635
+ // the hash didn't change so either the user attempts to refresh or to leave the app
636
+ bDirty = true;
637
+ } else if (oRouterProxy.checkHashWithGuard(sTargetHash) || oRouterProxy.isGuardCrossAllowedByUser()) {
638
+ // the user attempts to navigate within the root object
639
+ // or crossing the guard has already been allowed by the RouterProxy
640
+ sLclHashTracker = sTargetHash;
641
+ bDirty = false;
642
+ } else {
643
+ // the user attempts to navigate within the app, for example back to the list report
644
+ bDirty = true;
645
+ }
646
+
647
+ if (bDirty) {
648
+ // the FLP doesn't call the dirty state provider anymore once it's dirty, as they can't
649
+ // change this due to compatibility reasons we set it back to not-dirty
650
+ setTimeout(function () {
651
+ oAppComponent.getShellServices().setDirtyFlag(false);
652
+ }, 0);
653
+ } else {
654
+ sHashTracker = sLclHashTracker;
655
+ }
656
+
657
+ return bDirty;
658
+ } catch (error) {
659
+ Log.info(error);
660
+ return undefined;
661
+ }
662
+ };
663
+ };
664
+
665
+ _proto._attachSessionTimeout = function _attachSessionTimeout(oContext, i18nModel) {
666
+ var that = oContext;
667
+ return function fnHandleSessionTimeout() {
668
+ try {
669
+ if (oContext === undefined) {
670
+ throw new Error("Context missing for function fnHandleSessionTimeout");
671
+ } // remove transient messages since we will showing our own message
672
+
673
+
674
+ that.getMessageHandler().removeTransitionMessages();
675
+ var oDialog = new Dialog({
676
+ title: "{sap.fe.i18n>C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_TITLE}",
677
+ state: "Warning",
678
+ content: new Text({
679
+ text: "{sap.fe.i18n>C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_MESSAGE}"
680
+ }),
681
+ beginButton: new Button({
682
+ text: "{sap.fe.i18n>C_COMMON_DIALOG_OK}",
683
+ type: "Emphasized",
684
+ press: function () {
685
+ // remove sticky handling after navigation since session has already been terminated
686
+ that.handleStickyOff();
687
+ that.getRoutingListener().navigateBackFromContext(oContext);
688
+ }
689
+ }),
690
+ afterClose: function () {
691
+ oDialog.destroy();
692
+ }
693
+ });
694
+ oDialog.addStyleClass("sapUiContentPadding");
695
+ oDialog.setModel(i18nModel, "sap.fe.i18n");
696
+ that.getView().addDependent(oDialog);
697
+ oDialog.open();
698
+ } catch (error) {
699
+ Log.info(error);
700
+ return undefined;
701
+ }
702
+
703
+ return true;
704
+ };
705
+ };
706
+
707
+ _proto._attachRouteMatched = function _attachRouteMatched(oFnContext, oContext, oAppComponent) {
708
+ return function fnStickyDiscardAfterNavigation() {
709
+ var sCurrentHash = oAppComponent.getRouterProxy().getHash(); // either current hash is empty so the user left the app or he navigated away from the object
710
+
711
+ if (!sCurrentHash || !oAppComponent.getRouterProxy().checkHashWithGuard(sCurrentHash)) {
712
+ oFnContext.discardStickySession(oContext);
713
+ }
714
+ };
715
+ };
716
+
717
+ return InternalEditFlow;
718
+ }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setCreationMode", [Private, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "setCreationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createMultipleDocuments", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "createMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteMultipleDocuments", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteMultipleDocuments"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "computeEditMode", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "computeEditMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setEditMode", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "setEditMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "setDraftStatus", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "setDraftStatus"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRoutingListener", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getRoutingListener"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getGlobalUIModel", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getGlobalUIModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "syncTask", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "syncTask"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getProgrammingModel", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getProgrammingModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteDocumentTransaction", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteDocumentTransaction"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleCreateEvents", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleCreateEvents"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getTransactionHelper", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getTransactionHelper"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getInternalModel", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getInternalModel"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "createActionPromise", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "createActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getCurrentActionPromise", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getCurrentActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "deleteCurrentActionPromise", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "deleteCurrentActionPromise"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getActionResponseDataAndKeys", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getActionResponseDataAndKeys"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getMessageHandler", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getMessageHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleStickyOn", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleStickyOn"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleStickyOff", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleStickyOff"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBackNavigationInSession", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "onBackNavigationInSession"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "discardStickySession", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "discardStickySession"), _class2.prototype)), _class2)) || _class);
719
+ return InternalEditFlow;
720
+ }, false);
721
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVybmFsRWRpdEZsb3cudHMiXSwibmFtZXMiOlsiUHJvZ3JhbW1pbmdNb2RlbCIsIkZFTGlicmFyeSIsIkRyYWZ0U3RhdHVzIiwiRWRpdE1vZGUiLCJDcmVhdGlvbk1vZGUiLCJJbnRlcm5hbEVkaXRGbG93IiwiVUk1Q2xhc3MiLCJDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEiLCJPdmVycmlkZSIsIkV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwib25Jbml0IiwiX29BcHBDb21wb25lbnQiLCJiYXNlIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2V0Q3JlYXRpb25Nb2RlIiwiYkNyZWF0aW9uTW9kZSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwib0xpc3RCaW5kaW5nIiwiYURhdGEiLCJiQ3JlYXRlQXRFbmQiLCJiRnJvbUNvcHlQYXN0ZSIsImJlZm9yZUNyZWF0ZUNhbGxCYWNrIiwidHJhbnNhY3Rpb25IZWxwZXIiLCJnZXRUcmFuc2FjdGlvbkhlbHBlciIsIm9Mb2NrT2JqZWN0IiwiZ2V0R2xvYmFsVUlNb2RlbCIsIm9SZXNvdXJjZUJ1bmRsZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiQnVzeUxvY2tlciIsImxvY2siLCJzeW5jVGFzayIsInRoZW4iLCJvbkJlZm9yZUNyZWF0ZVByb21pc2UiLCJjb250ZXh0UGF0aCIsImdldFBhdGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldENvbnRleHQiLCJnZXRNZXRhUGF0aCIsImhhbmRsZUNyZWF0ZUV2ZW50cyIsImFDcmVhdGlvblByb21pc2VzIiwibWFwIiwibVByb3BlcnR5VmFsdWVzIiwibVBhcmFtZXRlcnMiLCJkYXRhIiwia2VlcFRyYW5zaWVudENvbnRleHRPbkZhaWxlZCIsImJ1c3lNb2RlIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJwYXJlbnRDb250cm9sIiwiY3JlYXRlQXRFbmQiLCJzUHJvcGVydHlQYXRoIiwib1Byb3BlcnR5IiwiZ2V0T2JqZWN0IiwiJGtpbmQiLCJjcmVhdGVEb2N1bWVudCIsImdldE1lc3NhZ2VIYW5kbGVyIiwiYWxsIiwiYUNvbnRleHRzIiwib05ld0NvbnRleHQiLCJjcmVhdGVkIiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJDb21tb25VdGlscyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwicmVqZWN0IiwiZmluYWxseSIsInVubG9jayIsImRlbGV0ZU11bHRpcGxlRG9jdW1lbnRzIiwib1JvdXRpbmdMaXN0ZW5lciIsImdldFJvdXRpbmdMaXN0ZW5lciIsIm9UYWJsZSIsImJ5SWQiLCJjb250cm9sSWQiLCJpc0EiLCJFcnJvciIsImdldFJvd0JpbmRpbmciLCJiRmluZEFjdGl2ZUNvbnRleHRzIiwiZGVsZXRlRG9jdW1lbnRUcmFuc2FjdGlvbiIsIm9SZXN1bHQiLCJjbGVhclNlbGVjdGlvbiIsImlzUm9vdCIsImF0dGFjaEV2ZW50T25jZSIsInJlZnJlc2giLCJFZGl0U3RhdGUiLCJzZXRFZGl0U3RhdGVEaXJ0eSIsInNlbmQiLCJBY3Rpdml0eSIsIkRlbGV0ZSIsImluZGV4IiwibGVuZ3RoIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5IiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJvRXJyb3IiLCJjb21wdXRlRWRpdE1vZGUiLCJvQ29udGV4dCIsInNDdXN0b21BY3Rpb24iLCJnZXRJbnRlcm5hbE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJzUHJvZ3JhbW1pbmdNb2RlbCIsImdldFByb2dyYW1taW5nTW9kZWwiLCJEcmFmdCIsInNldERyYWZ0U3RhdHVzIiwiQ2xlYXIiLCJyZXF1ZXN0T2JqZWN0IiwiYklzQWN0aXZlRW50aXR5Iiwic2V0RWRpdE1vZGUiLCJFZGl0YWJsZSIsImJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJEaXNwbGF5IiwiU3RpY2t5IiwiX2hhc05ld0FjdGlvbkZvclN0aWNreSIsIl9iQ3JlYXRlTW9kZSIsImhhbmRsZURvY3VtZW50TW9kaWZpY2F0aW9ucyIsImhhbmRsZVN0aWNreU9uIiwic2V0UHJvcGVydHkiLCJzRWRpdE1vZGUiLCJvR2xvYmFsTW9kZWwiLCJzRHJhZnRTdGF0ZSIsIl9yb3V0aW5nIiwidlRhc2siLCJmbk5ld1Rhc2siLCJfcFRhc2tzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJkZWxldGVEb2N1bWVudCIsImJpbmQiLCJvQmluZGluZyIsImdldEJpbmRpbmciLCJhdHRhY2hFdmVudCIsIlNhdmluZyIsIm9FdmVudCIsImJTdWNjZXNzIiwiZ2V0UGFyYW1ldGVyIiwiU2F2ZWQiLCJzaG93TWVzc2FnZURpYWxvZyIsIl9vVHJhbnNhY3Rpb25IZWxwZXIiLCJUcmFuc2FjdGlvbkhlbHBlciIsImNyZWF0ZUFjdGlvblByb21pc2UiLCJzQWN0aW9uTmFtZSIsInNDb250cm9sSWQiLCJmUmVzb2x2ZXIiLCJmUmVqZWN0b3IiLCJvQWN0aW9uUHJvbWlzZSIsIm9SZXNwb25zZSIsIk9iamVjdCIsImFzc2lnbiIsImdldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMiLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiQXJyYXkiLCJpc0FycmF5Iiwib1ZpZXciLCJnZXREYXRhIiwic0FjdGlvblJldHVyblR5cGUiLCIkUmV0dXJuVHlwZSIsIiRUeXBlIiwiYUtleSIsIiRLZXkiLCJvRGF0YSIsImtleXMiLCJtZXNzYWdlSGFuZGxlciIsIm9BcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsImhhc05hdmlnYXRpb25HdWFyZCIsInNIYXNoVHJhY2tlciIsImdldEhhc2giLCJvSW50ZXJuYWxNb2RlbCIsInNldFRpbWVvdXQiLCJzZXROYXZpZ2F0aW9uR3VhcmQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJvbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uIiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJfcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImkxOG5Nb2RlbCIsImZuSGFuZGxlU2Vzc2lvblRpbWVvdXQiLCJfYXR0YWNoU2Vzc2lvblRpbWVvdXQiLCJhdHRhY2hTZXNzaW9uVGltZW91dCIsImZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiIsIl9hdHRhY2hSb3V0ZU1hdGNoZWQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsImluZm8iLCJoYW5kbGVTdGlja3lPZmYiLCJkaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRldGFjaFNlc3Npb25UaW1lb3V0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwib1JvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tJc091dE9mR3VhcmQiLCJwcm9jZXNzRGF0YUxvc3NDb25maXJtYXRpb24iLCJkaXNjYXJkU3RpY2t5U2Vzc2lvbiIsImhpc3RvcnkiLCJiYWNrIiwic3RpY2t5IiwiZGlzY2FyZERvY3VtZW50Iiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsIm9TdGlja3lTZXNzaW9uIiwiTmV3QWN0aW9uIiwiQWRkaXRpb25hbE5ld0FjdGlvbnMiLCJmaW5kIiwic0FkZGl0aW9uYWxBY3Rpb24iLCJvTmF2aWdhdGlvbkNvbnRleHQiLCJzVGFyZ2V0SGFzaCIsImlubmVyQXBwUm91dGUiLCJzTGNsSGFzaFRyYWNrZXIiLCJiRGlydHkiLCJiU2Vzc2lvbk9OIiwiaXNOYXZpZ2F0aW9uRmluYWxpemVkIiwiY2hlY2tIYXNoV2l0aEd1YXJkIiwiaXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlciIsInNldERpcnR5RmxhZyIsInRoYXQiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJvRGlhbG9nIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsImNvbnRlbnQiLCJUZXh0IiwidGV4dCIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwidHlwZSIsInByZXNzIiwiYWZ0ZXJDbG9zZSIsImRlc3Ryb3kiLCJhZGRTdHlsZUNsYXNzIiwic2V0TW9kZWwiLCJhZGREZXBlbmRlbnQiLCJvcGVuIiwib0ZuQ29udGV4dCIsInNDdXJyZW50SGFzaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJQcml2YXRlIiwiUHVibGljIiwiRmluYWwiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBbkM7QUFBQSxNQUNDRSxXQUFXLEdBQUdELFNBQVMsQ0FBQ0MsV0FEekI7QUFBQSxNQUVDQyxRQUFRLEdBQUdGLFNBQVMsQ0FBQ0UsUUFGdEI7QUFBQSxNQUdDQyxZQUFZLEdBQUdILFNBQVMsQ0FBQ0csWUFIMUI7TUFNTUMsZ0IsV0FETEMsUUFBUSxDQUFDLG1EQUFELEVBQXNEQywyQkFBdEQsQyxVQVVQQyxRQUFRLEUsVUFjUkMsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQzs7Ozs7Ozs7O1dBYlhDLE0sR0FEQSxrQkFDUztBQUNSLFdBQUtDLGNBQUwsR0FBc0IsS0FBS0MsSUFBTCxDQUFVQyxlQUFWLEVBQXRCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7WUFHQztBQUNBQyxJQUFBQSxlLEdBSEEseUJBR2dCQyxhQUhoQixFQUd3QyxDQUN2QztBQUNBLEs7O1dBR0RDLHVCLEdBRkEsaUNBRXdCQyxZQUZ4QixFQUUyQ0MsS0FGM0MsRUFFdURDLFlBRnZELEVBRTBFQyxjQUYxRSxFQUUrRkMsb0JBRi9GLEVBRTBIO0FBQUE7O0FBQ3pILFVBQU1DLGlC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TSxFQUNBQyxLLDBKQWtCQUQsTSxFQUNBQyxLLGlLQU9BRCxNLEVBQ0FDLEssbUtBWUFELE0sRUFDQUMsSyx5SkFxQkFELE0sRUFDQUMsSyw0SkFxQkFELE0sRUFDQUMsSyw2S0FLQUQsTSxFQUNBQyxLLDRLQWtDQUQsTSxFQUNBQyxLLHVLQXdCQUQsTSxFQUNBQyxLLHFLQVVBRCxNLEVBQ0FDLEssb0tBY0FELE0sRUFDQUMsSywyS0FxQkFELE0sRUFDQUMsSyxrTEFLQUQsTSxFQUNBQyxLLHVMQWFBRCxNLEVBQ0FDLEssOEtBMEJBRCxNLEVBQ0FDLEssZ0tBWUFELE0sRUFDQUMsSyw4SkF5Q0FELE0sRUFDQUMsSyx5S0FnREFELE0sRUFDQUMsSyw4S0F1QkFELE0sRUFDQUMsSztTQTRJYTNQLGdCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgVHJhbnNhY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL1RyYW5zYWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IHsgRXh0ZW5zaWJsZSwgRmluYWwsIE92ZXJyaWRlLCBQcml2YXRlLCBQdWJsaWMsIFVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGFcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBzdGlja3kgZnJvbSBcInNhcC9mZS9jb3JlL2FjdGlvbnMvc3RpY2t5XCI7XG5pbXBvcnQgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB7IHNlbmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYWN0aW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWwsXG5cdERyYWZ0U3RhdHVzID0gRkVMaWJyYXJ5LkRyYWZ0U3RhdHVzLFxuXHRFZGl0TW9kZSA9IEZFTGlicmFyeS5FZGl0TW9kZSxcblx0Q3JlYXRpb25Nb2RlID0gRkVMaWJyYXJ5LkNyZWF0aW9uTW9kZTtcblxuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxFZGl0Rmxvd1wiLCBDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEpXG5jbGFzcyBJbnRlcm5hbEVkaXRGbG93IGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXHRwcml2YXRlIF9wVGFza3M6IGFueTtcblx0cHJpdmF0ZSBvQWN0aW9uUHJvbWlzZT86IFByb21pc2U8YW55Pjtcblx0cHJpdmF0ZSBfb1RyYW5zYWN0aW9uSGVscGVyPzogVHJhbnNhY3Rpb25IZWxwZXI7XG5cdHByaXZhdGUgZm5EaXJ0eVN0YXRlUHJvdmlkZXI/OiBGdW5jdGlvbjtcblx0cHJpdmF0ZSBmbkhhbmRsZVNlc3Npb25UaW1lb3V0PzogRnVuY3Rpb247XG5cdHByaXZhdGUgZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uPzogRnVuY3Rpb247XG5cdEBPdmVycmlkZSgpXG5cdG9uSW5pdCgpIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRvIHNldCB0aGUgY3JlYXRpb24gbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIGJDcmVhdGlvbk1vZGVcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsRWRpdEZsb3dcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkludGVybmFsRWRpdEZsb3cjc2V0Q3JlYXRpb25Nb2RlXG5cdCAqIEBzaW5jZSAxLjkwLjBcblx0ICovXG5cdEBQcml2YXRlXG5cdEBFeHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHNldENyZWF0aW9uTW9kZShiQ3JlYXRpb25Nb2RlOiBib29sZWFuKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlblxuXHR9XG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKG9MaXN0QmluZGluZzogYW55LCBhRGF0YTogYW55LCBiQ3JlYXRlQXRFbmQ6IGFueSwgYkZyb21Db3B5UGFzdGU6IGFueSwgYmVmb3JlQ3JlYXRlQ2FsbEJhY2s6IGFueSkge1xuXHRcdGNvbnN0IHRyYW5zYWN0aW9uSGVscGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkhlbHBlcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLmdldEdsb2JhbFVJTW9kZWwoKSxcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9ICh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5vUmVzb3VyY2VCdW5kbGU7XG5cblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzLnN5bmNUYXNrKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjb25zdCBvbkJlZm9yZUNyZWF0ZVByb21pc2UgPSBiZWZvcmVDcmVhdGVDYWxsQmFja1xuXHRcdFx0XHRcdD8gYmVmb3JlQ3JlYXRlQ2FsbEJhY2soeyBjb250ZXh0UGF0aDogb0xpc3RCaW5kaW5nICYmIG9MaXN0QmluZGluZy5nZXRQYXRoKCkgfSlcblx0XHRcdFx0XHQ6IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRyZXR1cm4gb25CZWZvcmVDcmVhdGVQcm9taXNlO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0xpc3RCaW5kaW5nLmdldE1vZGVsKCksXG5cdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0bGV0IHNNZXRhUGF0aDogc3RyaW5nO1xuXG5cdFx0XHRcdGlmIChvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvTGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLmdldFBhdGgoKSArIFwiL1wiICsgb0xpc3RCaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuaGFuZGxlQ3JlYXRlRXZlbnRzKG9MaXN0QmluZGluZyk7XG5cblx0XHRcdFx0Ly8gSXRlcmF0ZSBvbiBhbGwgaXRlbXMgYW5kIHN0b3JlIHRoZSBjb3JyZXNwb25kaW5nIGNyZWF0aW9uIHByb21pc2Vcblx0XHRcdFx0Y29uc3QgYUNyZWF0aW9uUHJvbWlzZXMgPSBhRGF0YS5tYXAoKG1Qcm9wZXJ0eVZhbHVlczogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHsgZGF0YToge30gfTtcblxuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmtlZXBUcmFuc2llbnRDb250ZXh0T25GYWlsZWQgPSBmYWxzZTsgLy8gY3VycmVudGx5IG5vdCBmdWxseSBzdXBwb3J0ZWRcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5idXN5TW9kZSA9IFwiTm9uZVwiO1xuXHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdztcblx0XHRcdFx0XHRtUGFyYW1ldGVycy5wYXJlbnRDb250cm9sID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRcdFx0bVBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPSBiQ3JlYXRlQXRFbmQ7XG5cblx0XHRcdFx0XHQvLyBSZW1vdmUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFzIHdlIGRvbid0IHN1cHBvcnQgZGVlcCBjcmVhdGVcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNQcm9wZXJ0eVBhdGggaW4gbVByb3BlcnR5VmFsdWVzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHkgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzTWV0YVBhdGggKyBcIi9cIiArIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0eSAmJiBvUHJvcGVydHkuJGtpbmQgIT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgbVByb3BlcnR5VmFsdWVzW3NQcm9wZXJ0eVBhdGhdKSB7XG5cdFx0XHRcdFx0XHRcdG1QYXJhbWV0ZXJzLmRhdGFbc1Byb3BlcnR5UGF0aF0gPSBtUHJvcGVydHlWYWx1ZXNbc1Byb3BlcnR5UGF0aF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRyYW5zYWN0aW9uSGVscGVyLmNyZWF0ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0b0xpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdFx0bVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHR0aGlzLmdldE1lc3NhZ2VIYW5kbGVyKCksXG5cdFx0XHRcdFx0XHRiRnJvbUNvcHlQYXN0ZSxcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VmlldygpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFDcmVhdGlvblByb21pc2VzKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihhQ29udGV4dHM6IGFueSkge1xuXHRcdFx0XHQvLyB0cmFuc2llbnQgY29udGV4dHMgYXJlIHJlbGlhYmx5IHJlbW92ZWQgb25jZSBvTmV3Q29udGV4dC5jcmVhdGVkKCkgaXMgcmVzb2x2ZWRcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGFDb250ZXh0cy5tYXAoZnVuY3Rpb24ob05ld0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9OZXdDb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdFx0XHQvLyBpZiB0aGVyZSBhcmUgdHJhbnNpZW50IGNvbnRleHRzLCB3ZSBtdXN0IGF2b2lkIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzXG5cdFx0XHRcdC8vIHRoaXMgaXMgYXZvaWQgYSBwb3RlbnRpYWwgbGlzdCByZWZyZXNoLCB0aGVyZSBjb3VsZCBiZSBhIHNpZGUgZWZmZWN0IHRoYXQgcmVmcmVzaGVzIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0Ly8gaWYgbGlzdCBiaW5kaW5nIGlzIHJlZnJlc2hlZCwgdHJhbnNpZW50IGNvbnRleHRzIG1pZ2h0IGJlIGxvc3Rcblx0XHRcdFx0aWYgKCFDb21tb25VdGlscy5oYXNUcmFuc2llbnRDb250ZXh0KG9MaXN0QmluZGluZykpIHtcblx0XHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkob0xpc3RCaW5kaW5nLmdldFBhdGgoKSwgb0JpbmRpbmdDb250ZXh0IGFzIENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nIG11bHRpcGxlIGRvY3VtZW50cy5cIik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTG9ja09iamVjdCk7XG5cdFx0XHR9KTtcblx0fVxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRkZWxldGVNdWx0aXBsZURvY3VtZW50cyhhQ29udGV4dHM6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9Sb3V0aW5nTGlzdGVuZXIgPSB0aGlzLmdldFJvdXRpbmdMaXN0ZW5lcigpLFxuXHRcdFx0b0xvY2tPYmplY3QgPSB0aGlzLmdldEdsb2JhbFVJTW9kZWwoKTtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNvbnRyb2xJZCkgYXMgVGFibGU7XG5cdFx0aWYgKCFvVGFibGUgfHwgIW9UYWJsZS5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXIgY29udHJvbElkIG1pc3Npbmcgb3IgaW5jb3JyZWN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpIGFzIGFueTtcblx0XHRtUGFyYW1ldGVycy5iRmluZEFjdGl2ZUNvbnRleHRzID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob0xvY2tPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzLmRlbGV0ZURvY3VtZW50VHJhbnNhY3Rpb24oYUNvbnRleHRzLCBtUGFyYW1ldGVycylcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0bGV0IG9SZXN1bHQ7XG5cblx0XHRcdFx0Ly8gTXVsdGlwbGUgb2JqZWN0IGRlbGV0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIGEgbGlzdFxuXHRcdFx0XHQvLyBGaXJzdCBjbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhcyBpdCdzIG5vdCB2YWxpZCBhbnkgbW9yZVxuXHRcdFx0XHQob1RhYmxlIGFzIGFueSkuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdFx0XHQvLyBUaGVuIHJlZnJlc2ggdGhlIGxpc3QtYmluZGluZyAoTFIpLCBvciByZXF1aXJlIHNpZGUtZWZmZWN0cyAoT1ApXG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGlmIChvTGlzdEJpbmRpbmcuaXNSb290KCkpIHtcblx0XHRcdFx0XHQvLyBrZWVwIHByb21pc2UgY2hhaW4gcGVuZGluZyB1bnRpbCByZWZyZXNoIG9mIGxpc3RiaW5kaW5nIGlzIGNvbXBsZXRlZFxuXHRcdFx0XHRcdG9SZXN1bHQgPSBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcblx0XHRcdFx0XHRcdG9MaXN0QmluZGluZy5hdHRhY2hFdmVudE9uY2UoXCJkYXRhUmVjZWl2ZWRcIiwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9MaXN0QmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlcmUgYXJlIHRyYW5zaWVudCBjb250ZXh0cywgd2UgbXVzdCBhdm9pZCByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1xuXHRcdFx0XHRcdC8vIHRoaXMgaXMgYXZvaWQgYSBwb3RlbnRpYWwgbGlzdCByZWZyZXNoLCB0aGVyZSBjb3VsZCBiZSBhIHNpZGUgZWZmZWN0IHRoYXQgcmVmcmVzaGVzIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdFx0XHQvLyBpZiBsaXN0IGJpbmRpbmcgaXMgcmVmcmVzaGVkLCB0cmFuc2llbnQgY29udGV4dHMgbWlnaHQgYmUgbG9zdFxuXHRcdFx0XHRcdGlmICghQ29tbW9uVXRpbHMuaGFzVHJhbnNpZW50Q29udGV4dChvTGlzdEJpbmRpbmcpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0XHRcdC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKVxuXHRcdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9CaW5kaW5nQ29udGV4dCBhcyBDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBkZWxldGluZyBhdCBsZWFzdCBvbmUgb2JqZWN0IHNob3VsZCBhbHNvIHNldCB0aGUgVUkgdG8gZGlydHlcblx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cblx0XHRcdFx0c2VuZCh0aGlzLmdldFZpZXcoKSwgQWN0aXZpdHkuRGVsZXRlLCBhQ29udGV4dHMpO1xuXG5cdFx0XHRcdC8vIEZpbmFsbHksIGNoZWNrIGlmIHRoZSBjdXJyZW50IHN0YXRlIGNhbiBiZSBpbXBhY3RlZCBieSB0aGUgZGVsZXRpb24sIGkuZS4gaWYgdGhlcmUnc1xuXHRcdFx0XHQvLyBhbiBPUCBkaXNwbGF5aW5nIGEgZGVsZXRlZCBvYmplY3QuIElmIHllcyBuYXZpZ2F0ZSBiYWNrIHRvIGRpc21pc3MgdGhlIE9QXG5cdFx0XHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhQ29udGV4dHMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRcdFx0aWYgKG9Sb3V0aW5nTGlzdGVuZXIuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KGFDb250ZXh0c1tpbmRleF0pKSB7XG5cdFx0XHRcdFx0XHRvUm91dGluZ0xpc3RlbmVyLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGFDb250ZXh0c1tpbmRleF0pO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG9SZXN1bHQ7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRlbGV0aW5nIHRoZSBkb2N1bWVudChzKVwiLCBvRXJyb3IpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTG9ja09iamVjdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWNpZGVzIGlmIGEgZG9jdW1lbnQgaXMgdG8gYmUgc2hvd24gaW4gZGlzcGxheSBvciBlZGl0IG1vZGUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfY29tcHV0ZUVkaXRNb2RlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlcm5hbEVkaXRGbG93XG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIGRpc3BsYXllZCBvciBlZGl0ZWRcblx0ICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgcmVzb2x2ZXMgb25jZSB0aGUgZWRpdCBtb2RlIGlzIGNvbXB1dGVkXG5cdCAqL1xuXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGNvbXB1dGVFZGl0TW9kZShvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgc0N1c3RvbUFjdGlvbiA9IHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLmdldFByb3BlcnR5KFwiL3NDdXN0b21BY3Rpb25cIik7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRcdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9Db250ZXh0KTtcblxuXHRcdFx0XHRpZiAoc1Byb2dyYW1taW5nTW9kZWwgPT09IFByb2dyYW1taW5nTW9kZWwuRHJhZnQpIHtcblx0XHRcdFx0XHR0aGlzLnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblxuXHRcdFx0XHRcdHJldHVybiBvQ29udGV4dFxuXHRcdFx0XHRcdFx0LnJlcXVlc3RPYmplY3QoXCJJc0FjdGl2ZUVudGl0eVwiKVxuXHRcdFx0XHRcdFx0LnRoZW4oKGJJc0FjdGl2ZUVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChiSXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaW4gY2FzZSB0aGUgZG9jdW1lbnQgaXMgZHJhZnQgc2V0IGl0IGluIGVkaXQgbW9kZVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dC5yZXF1ZXN0T2JqZWN0KFwiSGFzQWN0aXZlRW50aXR5XCIpLnRoZW4oKGJIYXNBY3RpdmVFbnRpdHk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRFZGl0TW9kZSh1bmRlZmluZWQsICFiSGFzQWN0aXZlRW50aXR5KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBhY3RpdmUgZG9jdW1lbnQsIHN0YXkgb24gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZXRFZGl0TW9kZShFZGl0TW9kZS5EaXNwbGF5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGV0ZXJtaW5pbmcgdGhlIGVkaXRNb2RlIGZvciBkcmFmdFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5TdGlja3kpIHtcblx0XHRcdFx0XHRpZiAoc0N1c3RvbUFjdGlvbiAmJiBzQ3VzdG9tQWN0aW9uICE9PSBcIlwiICYmIHRoaXMuX2hhc05ld0FjdGlvbkZvclN0aWNreShvQ29udGV4dCwgdGhpcy5nZXRWaWV3KCksIHNDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuX2JDcmVhdGVNb2RlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKS5oYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMoKTtcblx0XHRcdFx0XHRcdHRoaXMuc2V0RWRpdE1vZGUoRWRpdE1vZGUuRWRpdGFibGUsIHRydWUpO1xuXHRcdFx0XHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZURpcnR5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZVN0aWNreU9uKG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLnNldFByb3BlcnR5KFwiL3NDdXN0b21BY3Rpb25cIiwgXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KSgpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlZGl0IG1vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRWRpdE1vZGVcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ3JlYXRpb25Nb2RlIENyZWF0ZU1vZGUgZmxhZyB0byBpZGVudGlmeSB0aGUgY3JlYXRpb24gbW9kZVxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0c2V0RWRpdE1vZGUoc0VkaXRNb2RlPzogc3RyaW5nLCBiQ3JlYXRpb25Nb2RlOiBib29sZWFuID0gZmFsc2UpIHtcblx0XHQvLyBhdCB0aGlzIHBvaW50IG9mIHRpbWUgaXQncyBub3QgbWVhbnQgdG8gcmVsZWFzZSB0aGUgZWRpdCBmbG93IGZvciBmcmVlc3R5bGUgdXNhZ2UgdGhlcmVmb3JlIHdlIGNhblxuXHRcdC8vIHJlbHkgb24gdGhlIGdsb2JhbCBVSSBtb2RlbCB0byBleGlzdFxuXHRcdGNvbnN0IG9HbG9iYWxNb2RlbCA9IHRoaXMuZ2V0R2xvYmFsVUlNb2RlbCgpO1xuXG5cdFx0aWYgKHNFZGl0TW9kZSkge1xuXHRcdFx0b0dsb2JhbE1vZGVsLnNldFByb3BlcnR5KFwiL2VkaXRNb2RlXCIsIHNFZGl0TW9kZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRcdG9HbG9iYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIsIHNFZGl0TW9kZSA9PT0gXCJFZGl0YWJsZVwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdH1cblxuXHRcdGlmIChiQ3JlYXRpb25Nb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNpbmNlIHNldENyZWF0aW9uTW9kZSBpcyBwdWJsaWMgaW4gRWRpdEZsb3cgYW5kIGNhbiBiZSBvdmVycmlkZW4sIG1ha2Ugc3VyZSB0byBjYWxsIGl0IHZpYSB0aGUgY29udHJvbGxlclxuXHRcdFx0Ly8gdG8gZW5zdXJlIGFueSBvdmVycmlkZXMgYXJlIHRha2VuIGludG8gYWNjb3VudFxuXHRcdFx0dGhpcy5zZXRDcmVhdGlvbk1vZGUoYkNyZWF0aW9uTW9kZSk7XG5cdFx0fVxuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0c2V0RHJhZnRTdGF0dXMoc0RyYWZ0U3RhdGU6IGFueSkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIGZyZWVzdHlsZSB1c2FnZSB0aGVyZWZvcmUgd2UgY2FuXG5cdFx0Ly8gcmVseSBvbiB0aGUgZ2xvYmFsIFVJIG1vZGVsIHRvIGV4aXN0XG5cdFx0KHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL2RyYWZ0U3RhdHVzXCIsIHNEcmFmdFN0YXRlLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0Um91dGluZ0xpc3RlbmVyKCkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIEZQTSBjdXN0b20gcGFnZXMgYW5kIHRoZSByb3V0aW5nXG5cdFx0Ly8gbGlzdGVuZXIgaXMgbm90IHlldCBwdWJsaWMgdGhlcmVmb3JlIGtlZXAgdGhlIGxvZ2ljIGhlcmUgZm9yIG5vd1xuXG5cdFx0aWYgKHRoaXMuYmFzZS5fcm91dGluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuYmFzZS5fcm91dGluZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRWRpdCBGbG93IHdvcmtzIG9ubHkgd2l0aCBhIGdpdmVuIHJvdXRpbmcgbGlzdGVuZXJcIik7XG5cdFx0fVxuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0R2xvYmFsVUlNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIGZyZWVzdHlsZSB1c2FnZSB0aGVyZWZvcmUgd2UgY2FuXG5cdFx0Ly8gcmVseSBvbiB0aGUgZ2xvYmFsIFVJIG1vZGVsIHRvIGV4aXN0XG5cdFx0cmV0dXJuIHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgYSB0YXNrIGluIHN5bmMgd2l0aCBvdGhlciB0YXNrcyBjcmVhdGVkIHZpYSB0aGlzIGZ1bmN0aW9uLlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9taXNlIGNoYWluIG9mIHRoZSB0YXNrLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3cjc3luY1Rhc2tcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtQcm9taXNlfEZ1bmN0aW9ufSBbdlRhc2tdIE9wdGlvbmFsLCBhIHByb21pc2Ugb3IgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgc3luY2hyb25vdXNseVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSByZXNvbHZlcyBvbmNlIHRoZSB0YXNrIGlzIGNvbXBsZXRlZFxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRzeW5jVGFzayh2VGFzaz86IEZ1bmN0aW9uIHwgUHJvbWlzZTxhbnk+KSB7XG5cdFx0bGV0IGZuTmV3VGFzaztcblx0XHRpZiAodlRhc2sgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRmbk5ld1Rhc2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHZUYXNrO1xuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2VGFzayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRmbk5ld1Rhc2sgPSB2VGFzaztcblx0XHR9XG5cblx0XHR0aGlzLl9wVGFza3MgPSB0aGlzLl9wVGFza3MgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0aWYgKCEhZm5OZXdUYXNrKSB7XG5cdFx0XHR0aGlzLl9wVGFza3MgPSB0aGlzLl9wVGFza3MudGhlbihmbk5ld1Rhc2spLmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fcFRhc2tzO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dDogYW55KTogdHlwZW9mIFByb2dyYW1taW5nTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQ29udGV4dCk7XG5cdH1cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRkZWxldGVEb2N1bWVudFRyYW5zYWN0aW9uKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIGFueSkub1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0dHJhbnNhY3Rpb25IZWxwZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCk7XG5cblx0XHRtUGFyYW1ldGVycyA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBzZXR0aW5nIGFuZCByZW1vdmluZyBvZiBjb250ZXh0cyBzaG91bGRuJ3QgYmUgaW4gdGhlIHRyYW5zYWN0aW9uIGhlbHBlciBhdCBhbGxcblx0XHQvLyBmb3IgdGhlIHRpbWUgYmVpbmcgSSBrZXB0IGl0IGFuZCBwcm92aWRlIHRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IHRvIG5vdCBicmVhayBzb21ldGhpbmdcblx0XHRtUGFyYW1ldGVycy5pbnRlcm5hbE1vZGVsQ29udGV4dCA9IG1QYXJhbWV0ZXJzLmNvbnRyb2xJZFxuXHRcdFx0PyBzYXAudWlcblx0XHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdFx0LmJ5SWQobVBhcmFtZXRlcnMuY29udHJvbElkKVxuXHRcdFx0XHRcdD8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKVxuXHRcdFx0OiBudWxsO1xuXG5cdFx0cmV0dXJuIHRoaXMuc3luY1Rhc2soKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHRyYW5zYWN0aW9uSGVscGVyLmRlbGV0ZURvY3VtZW50LmJpbmQodHJhbnNhY3Rpb25IZWxwZXIsIG9Db250ZXh0LCBtUGFyYW1ldGVycywgb1Jlc291cmNlQnVuZGxlLCB0aGlzLmdldE1lc3NhZ2VIYW5kbGVyKCkpXG5cdFx0XHQpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpLnNldFByb3BlcnR5KFwiL3Nlc3Npb25PblwiLCBmYWxzZSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgY3JlYXRlIGV2ZW50OiBzaG93cyBtZXNzYWdlcyBhbmQgaW4gY2FzZSBvZiBhIGRyYWZ0LCB1cGRhdGVzIHRoZSBkcmFmdCBpbmRpY2F0b3IuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0JpbmRpbmcgT0RhdGEgbGlzdCBiaW5kaW5nIG9iamVjdFxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0aGFuZGxlQ3JlYXRlRXZlbnRzKG9CaW5kaW5nOiBhbnkpIHtcblx0XHRjb25zdCB0cmFuc2FjdGlvbkhlbHBlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKTtcblxuXHRcdHRoaXMuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuQ2xlYXIpO1xuXG5cdFx0b0JpbmRpbmcgPSAob0JpbmRpbmcuZ2V0QmluZGluZyAmJiBvQmluZGluZy5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nO1xuXHRcdGNvbnN0IHNQcm9ncmFtbWluZ01vZGVsID0gdGhpcy5nZXRQcm9ncmFtbWluZ01vZGVsKG9CaW5kaW5nKTtcblxuXHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY3JlYXRlU2VudFwiLCAoKSA9PiB7XG5cdFx0XHR0cmFuc2FjdGlvbkhlbHBlci5oYW5kbGVEb2N1bWVudE1vZGlmaWNhdGlvbnMoKTtcblx0XHRcdGlmIChzUHJvZ3JhbW1pbmdNb2RlbCA9PT0gUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCkge1xuXHRcdFx0XHR0aGlzLnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmluZyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJjcmVhdGVDb21wbGV0ZWRcIiwgKG9FdmVudDogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBiU3VjY2VzcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWNjZXNzXCIpO1xuXHRcdFx0aWYgKHNQcm9ncmFtbWluZ01vZGVsID09PSBQcm9ncmFtbWluZ01vZGVsLkRyYWZ0KSB7XG5cdFx0XHRcdHRoaXMuc2V0RHJhZnRTdGF0dXMoYlN1Y2Nlc3MgPyBEcmFmdFN0YXR1cy5TYXZlZCA6IERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0TWVzc2FnZUhhbmRsZXIoKS5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdH0pO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0VHJhbnNhY3Rpb25IZWxwZXIoKSB7XG5cdFx0aWYgKCF0aGlzLl9vVHJhbnNhY3Rpb25IZWxwZXIpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBhbHNvIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIgaXMgbG9ja2luZyB0aGVyZWZvcmUgcGFzc2luZyBsb2NrIG9iamVjdFxuXHRcdFx0dGhpcy5fb1RyYW5zYWN0aW9uSGVscGVyID0gbmV3IFRyYW5zYWN0aW9uSGVscGVyKHRoaXMuX29BcHBDb21wb25lbnQsIHRoaXMuZ2V0R2xvYmFsVUlNb2RlbCgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fb1RyYW5zYWN0aW9uSGVscGVyO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0SW50ZXJuYWxNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgcHJvbWlzZSB0byB3YWl0IGZvciBhbiBhY3Rpb24gdG8gYmUgZXhlY3V0ZWRcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9jcmVhdGVBY3Rpb25Qcm9taXNlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSByZXNvbHZlciBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBleHRlcm5hbGx5IHJlc29sdmUgdGhlIHByb21pc2Vcblx0ICovXG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Y3JlYXRlQWN0aW9uUHJvbWlzZShzQWN0aW9uTmFtZTogYW55LCBzQ29udHJvbElkOiBhbnkpIHtcblx0XHRsZXQgZlJlc29sdmVyLCBmUmVqZWN0b3I7XG5cdFx0dGhpcy5vQWN0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGZSZXNvbHZlciA9IHJlc29sdmU7XG5cdFx0XHRmUmVqZWN0b3IgPSByZWplY3Q7XG5cdFx0fSkudGhlbigob1Jlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKHsgY29udHJvbElkOiBzQ29udHJvbElkIH0sIHRoaXMuZ2V0QWN0aW9uUmVzcG9uc2VEYXRhQW5kS2V5cyhzQWN0aW9uTmFtZSwgb1Jlc3BvbnNlKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHsgZlJlc29sdmVyOiBmUmVzb2x2ZXIsIGZSZWplY3RvcjogZlJlamVjdG9yIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZ2V0Q3VycmVudEFjdGlvblByb21pc2Ugb2JqZWN0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEN1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyB0aGUgcHJvbWlzZVxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0Q3VycmVudEFjdGlvblByb21pc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0FjdGlvblByb21pc2U7XG5cdH1cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSgpIHtcblx0XHR0aGlzLm9BY3Rpb25Qcm9taXNlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRBY3Rpb25SZXNwb25zZURhdGFBbmRLZXlzXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5FZGl0Rmxvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvUmVzcG9uc2UgVGhlIGJvdW5kIGFjdGlvbidzIHJlc3BvbnNlIGRhdGEgb3IgcmVzcG9uc2UgY29udGV4dFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3Qgd2l0aCBkYXRhIGFuZCBuYW1lcyBvZiB0aGUga2V5IGZpZWxkcyBvZiB0aGUgcmVzcG9uc2Vcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGdldEFjdGlvblJlc3BvbnNlRGF0YUFuZEtleXMoc0FjdGlvbk5hbWU6IHN0cmluZywgb1Jlc3BvbnNlOiBhbnkpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvUmVzcG9uc2UpKSB7XG5cdFx0XHRpZiAob1Jlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRvUmVzcG9uc2UgPSBvUmVzcG9uc2VbMF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFvUmVzcG9uc2UpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b01ldGFNb2RlbCA9IChvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSkuZ2V0RGF0YSgpLFxuXHRcdFx0c0FjdGlvblJldHVyblR5cGUgPVxuXHRcdFx0XHRvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdICYmIG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdWzBdICYmIG9NZXRhTW9kZWxbc0FjdGlvbk5hbWVdWzBdLiRSZXR1cm5UeXBlXG5cdFx0XHRcdFx0PyBvTWV0YU1vZGVsW3NBY3Rpb25OYW1lXVswXS4kUmV0dXJuVHlwZS4kVHlwZVxuXHRcdFx0XHRcdDogbnVsbCxcblx0XHRcdGFLZXkgPSBzQWN0aW9uUmV0dXJuVHlwZSAmJiBvTWV0YU1vZGVsW3NBY3Rpb25SZXR1cm5UeXBlXSA/IG9NZXRhTW9kZWxbc0FjdGlvblJldHVyblR5cGVdLiRLZXkgOiBudWxsO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG9EYXRhOiBvUmVzcG9uc2UuZ2V0T2JqZWN0KCksXG5cdFx0XHRrZXlzOiBhS2V5XG5cdFx0fTtcblx0fVxuXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGdldE1lc3NhZ2VIYW5kbGVyKCkge1xuXHRcdC8vIGF0IHRoaXMgcG9pbnQgb2YgdGltZSBpdCdzIG5vdCBtZWFudCB0byByZWxlYXNlIHRoZSBlZGl0IGZsb3cgZm9yIEZQTSBjdXN0b20gcGFnZXMgdGhlcmVmb3JlIGtlZXBcblx0XHQvLyB0aGUgbG9naWMgaGVyZSBmb3Igbm93XG5cblx0XHRpZiAodGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5iYXNlLm1lc3NhZ2VIYW5kbGVyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFZGl0IEZsb3cgd29ya3Mgb25seSB3aXRoIGEgZ2l2ZW4gbWVzc2FnZSBoYW5kbGVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdGhhbmRsZVN0aWNreU9uKG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRpZiAob0FwcENvbXBvbmVudCA9PT0gdW5kZWZpbmVkIHx8IG9Db250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIEFwcENvbXBvbmVudCBvciBDb250ZXh0IGZvciBmdW5jdGlvbiBoYW5kbGVTdGlja3lPblwiKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuaGFzTmF2aWdhdGlvbkd1YXJkKCkpIHtcblx0XHRcdFx0Y29uc3Qgc0hhc2hUcmFja2VyID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKSxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0SW50ZXJuYWxNb2RlbCgpO1xuXG5cdFx0XHRcdC8vIFNldCBhIGd1YXJkIGluIHRoZSBSb3V0ZXJQcm94eVxuXHRcdFx0XHQvLyBBIHRpbWVvdXQgaXMgbmVjZXNzYXJ5LCBhcyB3aXRoIGRlZmVycmVkIGNyZWF0aW9uIHRoZSBoYXNoQ2hhbmdlciBpcyBub3QgdXBkYXRlZCB5ZXQgd2l0aFxuXHRcdFx0XHQvLyB0aGUgbmV3IGhhc2gsIGFuZCB0aGUgZ3VhcmQgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnkgb2YgdGhlIHJvdXRlciBwcm94eVxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5zZXROYXZpZ2F0aW9uR3VhcmQoKTtcblx0XHRcdFx0fSwgMCk7XG5cblx0XHRcdFx0Ly8gU2V0dGluZyBiYWNrIG5hdmlnYXRpb24gb24gc2hlbGwgc2VydmljZSwgdG8gZ2V0IHRoZSBkaWNhcmQgbWVzc2FnZSBib3ggaW4gY2FzZSBvZiBzdGlja3lcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odGhpcy5vbkJhY2tOYXZpZ2F0aW9uSW5TZXNzaW9uLmJpbmQodGhpcykpO1xuXG5cdFx0XHRcdHRoaXMuZm5EaXJ0eVN0YXRlUHJvdmlkZXIgPSB0aGlzLl9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihvQXBwQ29tcG9uZW50LCBvSW50ZXJuYWxNb2RlbCwgc0hhc2hUcmFja2VyKTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIodGhpcy5mbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cblx0XHRcdFx0Ly8gaGFuZGxlIHNlc3Npb24gdGltZW91dFxuXHRcdFx0XHRjb25zdCBpMThuTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpO1xuXHRcdFx0XHR0aGlzLmZuSGFuZGxlU2Vzc2lvblRpbWVvdXQgPSB0aGlzLl9hdHRhY2hTZXNzaW9uVGltZW91dCh0aGlzLCBpMThuTW9kZWwpO1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSBhcyBhbnkpLmF0dGFjaFNlc3Npb25UaW1lb3V0KHRoaXMuZm5IYW5kbGVTZXNzaW9uVGltZW91dCk7XG5cblx0XHRcdFx0dGhpcy5mblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24gPSB0aGlzLl9hdHRhY2hSb3V0ZU1hdGNoZWQodGhpcywgb0NvbnRleHQsIG9BcHBDb21wb25lbnQpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmluZm8oZXJyb3IpO1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRoYW5kbGVTdGlja3lPZmYoKSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChvQXBwQ29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5kZWZpbmVkIEFwcENvbXBvbmVudCBmb3IgZnVuY3Rpb24gaGFuZGxlU3RpY2t5T2ZmXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KSB7XG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZXhpdGVkIGZyb20gdGhlIGFwcCwgQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50IGRvZXNuJ3QgcmV0dXJuIGFcblx0XHRcdFx0Ly8gc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50LCBoZW5jZSB0aGUgJ2lmJyBhYm92ZVxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuZGlzY2FyZE5hdmlnYXRpb25HdWFyZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5mbkRpcnR5U3RhdGVQcm92aWRlcikge1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKHRoaXMuZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHRcdFx0XHR0aGlzLmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSAmJiB0aGlzLmZuSGFuZGxlU2Vzc2lvblRpbWVvdXQpIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkgYXMgYW55KS5kZXRhY2hTZXNzaW9uVGltZW91dCh0aGlzLmZuSGFuZGxlU2Vzc2lvblRpbWVvdXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKTtcblx0XHRcdHRoaXMuZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uID0gdW5kZWZpbmVkO1xuXG5cdFx0XHR0aGlzLmdldFRyYW5zYWN0aW9uSGVscGVyKCkuX2JDcmVhdGVNb2RlID0gZmFsc2U7XG5cdFx0XHR0aGlzLnNldEVkaXRNb2RlKEVkaXRNb2RlLkRpc3BsYXksIGZhbHNlKTtcblxuXHRcdFx0aWYgKG9BcHBDb21wb25lbnQpIHtcblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBleGl0ZWQgZnJvbSB0aGUgYXBwLCBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQgZG9lc24ndCByZXR1cm4gYVxuXHRcdFx0XHQvLyBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQsIGhlbmNlIHRoZSAnaWYnIGFib3ZlXG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5pbmZvKGVycm9yKTtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXNjcmlwdGlvbiBNZXRob2QgdG8gZGlzcGxheSBhICdkaXNjYXJkJyBwb3BvdmVyIHdoZW4gZXhpdGluZyBhIHN0aWNreSBzZXNzaW9uLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgb25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxFZGl0Rmxvd1xuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0b25CYWNrTmF2aWdhdGlvbkluU2Vzc2lvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyksXG5cdFx0XHRvUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cblx0XHRpZiAob1JvdXRlclByb3h5LmNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkKCkpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRcdENvbW1vblV0aWxzLnByb2Nlc3NEYXRhTG9zc0NvbmZpcm1hdGlvbihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZGlzY2FyZFN0aWNreVNlc3Npb24ob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b1ZpZXcsXG5cdFx0XHRcdHRoaXMuZ2V0UHJvZ3JhbW1pbmdNb2RlbChvQmluZGluZ0NvbnRleHQpXG5cdFx0XHQpO1xuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGhpc3RvcnkuYmFjaygpO1xuXHR9XG5cblx0QFB1YmxpY1xuXHRARmluYWxcblx0ZGlzY2FyZFN0aWNreVNlc3Npb24ob0NvbnRleHQ6IGFueSkge1xuXHRcdHN0aWNreS5kaXNjYXJkRG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdHRoaXMuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdH1cblxuXHRfaGFzTmV3QWN0aW9uRm9yU3RpY2t5KG9Db250ZXh0OiBhbnksIG9WaWV3OiBWaWV3LCBzQ3VzdG9tQWN0aW9uOiBzdHJpbmcpIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG9Db250ZXh0ID09PSB1bmRlZmluZWQgfHwgb1ZpZXcgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uIF9oYXNOZXdBY3Rpb25Gb3JTdGlja3lcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCkuc3Vic3RyaW5nKDAsIG9Db250ZXh0LmdldFBhdGgoKS5pbmRleE9mKFwiKFwiKSksXG5cdFx0XHRcdG9TdGlja3lTZXNzaW9uID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCIpO1xuXG5cdFx0XHRpZiAob1N0aWNreVNlc3Npb24gJiYgb1N0aWNreVNlc3Npb24uTmV3QWN0aW9uICYmIG9TdGlja3lTZXNzaW9uLk5ld0FjdGlvbiA9PT0gc0N1c3RvbUFjdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAob1N0aWNreVNlc3Npb24gJiYgb1N0aWNreVNlc3Npb24uQWRkaXRpb25hbE5ld0FjdGlvbnMpIHtcblx0XHRcdFx0cmV0dXJuIHNDdXN0b21BY3Rpb24gPT09XG5cdFx0XHRcdFx0b1N0aWNreVNlc3Npb24uQWRkaXRpb25hbE5ld0FjdGlvbnMuZmluZChmdW5jdGlvbihzQWRkaXRpb25hbEFjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc0FkZGl0aW9uYWxBY3Rpb24gPT09IHNDdXN0b21BY3Rpb247XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuaW5mbyhlcnJvcik7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdF9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIG9JbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIHNIYXNoVHJhY2tlcjogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGZuRGlydHlTdGF0ZVByb3ZpZGVyKG9OYXZpZ2F0aW9uQ29udGV4dDogYW55KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAob05hdmlnYXRpb25Db250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9uIGZuRGlydHlTdGF0ZVByb3ZpZGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc1RhcmdldEhhc2ggPSBvTmF2aWdhdGlvbkNvbnRleHQuaW5uZXJBcHBSb3V0ZSxcblx0XHRcdFx0XHRvUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cdFx0XHRcdGxldCBzTGNsSGFzaFRyYWNrZXIgPSBcIlwiO1xuXHRcdFx0XHRsZXQgYkRpcnR5OiBib29sZWFuO1xuXHRcdFx0XHRjb25zdCBiU2Vzc2lvbk9OID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2Vzc2lvbk9uXCIpO1xuXG5cdFx0XHRcdGlmICghYlNlc3Npb25PTikge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBzdGlja3kgc2Vzc2lvbiB3YXMgdGVybWluYXRlZCBiZWZvcmUgaGFuZC5cblx0XHRcdFx0XHQvLyBFZXhhbXBsZSBpbiBjYXNlIG9mIG5hdmlnYXRpbmcgYXdheSBmcm9tIGFwcGxpY2F0aW9uIHVzaW5nIElCTi5cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFvUm91dGVyUHJveHkuaXNOYXZpZ2F0aW9uRmluYWxpemVkKCkpIHtcblx0XHRcdFx0XHQvLyBJZiBuYXZpZ2F0aW9uIGlzIGN1cnJlbnRseSBoYXBwZW5pbmcgaW4gUm91dGVyUHJveHksIGl0J3MgYSB0cmFuc2llbnQgc3RhdGVcblx0XHRcdFx0XHQvLyAobm90IGRpcnR5KVxuXHRcdFx0XHRcdGJEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0XHRcdHNMY2xIYXNoVHJhY2tlciA9IHNUYXJnZXRIYXNoO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNIYXNoVHJhY2tlciA9PT0gc1RhcmdldEhhc2gpIHtcblx0XHRcdFx0XHQvLyB0aGUgaGFzaCBkaWRuJ3QgY2hhbmdlIHNvIGVpdGhlciB0aGUgdXNlciBhdHRlbXB0cyB0byByZWZyZXNoIG9yIHRvIGxlYXZlIHRoZSBhcHBcblx0XHRcdFx0XHRiRGlydHkgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Sb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQoc1RhcmdldEhhc2gpIHx8IG9Sb3V0ZXJQcm94eS5pc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyKCkpIHtcblx0XHRcdFx0XHQvLyB0aGUgdXNlciBhdHRlbXB0cyB0byBuYXZpZ2F0ZSB3aXRoaW4gdGhlIHJvb3Qgb2JqZWN0XG5cdFx0XHRcdFx0Ly8gb3IgY3Jvc3NpbmcgdGhlIGd1YXJkIGhhcyBhbHJlYWR5IGJlZW4gYWxsb3dlZCBieSB0aGUgUm91dGVyUHJveHlcblx0XHRcdFx0XHRzTGNsSGFzaFRyYWNrZXIgPSBzVGFyZ2V0SGFzaDtcblx0XHRcdFx0XHRiRGlydHkgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB0aGUgdXNlciBhdHRlbXB0cyB0byBuYXZpZ2F0ZSB3aXRoaW4gdGhlIGFwcCwgZm9yIGV4YW1wbGUgYmFjayB0byB0aGUgbGlzdCByZXBvcnRcblx0XHRcdFx0XHRiRGlydHkgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGJEaXJ0eSkge1xuXHRcdFx0XHRcdC8vIHRoZSBGTFAgZG9lc24ndCBjYWxsIHRoZSBkaXJ0eSBzdGF0ZSBwcm92aWRlciBhbnltb3JlIG9uY2UgaXQncyBkaXJ0eSwgYXMgdGhleSBjYW4ndFxuXHRcdFx0XHRcdC8vIGNoYW5nZSB0aGlzIGR1ZSB0byBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2Ugc2V0IGl0IGJhY2sgdG8gbm90LWRpcnR5XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldERpcnR5RmxhZyhmYWxzZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c0hhc2hUcmFja2VyID0gc0xjbEhhc2hUcmFja2VyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGJEaXJ0eTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKGVycm9yKTtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0X2F0dGFjaFNlc3Npb25UaW1lb3V0KG9Db250ZXh0OiBhbnksIGkxOG5Nb2RlbDogTW9kZWwpIHtcblx0XHRjb25zdCB0aGF0ID0gb0NvbnRleHQ7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gZm5IYW5kbGVTZXNzaW9uVGltZW91dCgpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChvQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ29udGV4dCBtaXNzaW5nIGZvciBmdW5jdGlvbiBmbkhhbmRsZVNlc3Npb25UaW1lb3V0XCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHJlbW92ZSB0cmFuc2llbnQgbWVzc2FnZXMgc2luY2Ugd2Ugd2lsbCBzaG93aW5nIG91ciBvd24gbWVzc2FnZVxuXHRcdFx0XHR0aGF0LmdldE1lc3NhZ2VIYW5kbGVyKCkucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cblx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0XHRcdHRpdGxlOiBcIntzYXAuZmUuaTE4bj5DX0VESVRGTE9XX09CSkVDVF9QQUdFX1NFU1NJT05fRVhQSVJFRF9ESUFMT0dfVElUTEV9XCIsXG5cdFx0XHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IG5ldyBUZXh0KHsgdGV4dDogXCJ7c2FwLmZlLmkxOG4+Q19FRElURkxPV19PQkpFQ1RfUEFHRV9TRVNTSU9OX0VYUElSRURfRElBTE9HX01FU1NBR0V9XCIgfSksXG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fRElBTE9HX09LfVwiLFxuXHRcdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdC8vIHJlbW92ZSBzdGlja3kgaGFuZGxpbmcgYWZ0ZXIgbmF2aWdhdGlvbiBzaW5jZSBzZXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gdGVybWluYXRlZFxuXHRcdFx0XHRcdFx0XHR0aGF0LmhhbmRsZVN0aWNreU9mZigpO1xuXHRcdFx0XHRcdFx0XHR0aGF0LmdldFJvdXRpbmdMaXN0ZW5lcigpLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdG9EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0XHRcdG9EaWFsb2cuc2V0TW9kZWwoaTE4bk1vZGVsLCBcInNhcC5mZS5pMThuXCIpO1xuXHRcdFx0XHR0aGF0LmdldFZpZXcoKS5hZGREZXBlbmRlbnQob0RpYWxvZyk7XG5cdFx0XHRcdG9EaWFsb2cub3BlbigpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmluZm8oZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0fVxuXG5cdF9hdHRhY2hSb3V0ZU1hdGNoZWQob0ZuQ29udGV4dDogYW55LCBvQ29udGV4dDogYW55LCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKCkge1xuXHRcdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmdldEhhc2goKTtcblx0XHRcdC8vIGVpdGhlciBjdXJyZW50IGhhc2ggaXMgZW1wdHkgc28gdGhlIHVzZXIgbGVmdCB0aGUgYXBwIG9yIGhlIG5hdmlnYXRlZCBhd2F5IGZyb20gdGhlIG9iamVjdFxuXHRcdFx0aWYgKCFzQ3VycmVudEhhc2ggfHwgIW9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5jaGVja0hhc2hXaXRoR3VhcmQoc0N1cnJlbnRIYXNoKSkge1xuXHRcdFx0XHRvRm5Db250ZXh0LmRpc2NhcmRTdGlja3lTZXNzaW9uKG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVybmFsRWRpdEZsb3c7XG4iXX0=