@openui5/sap.ui.core 1.105.1 → 1.107.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 (351) hide show
  1. package/.reuse/dep5 +20 -17
  2. package/THIRDPARTY.txt +31 -21
  3. package/package.json +1 -1
  4. package/src/jquery.sap.dom.js +10 -10
  5. package/src/jquery.sap.global.js +24 -216
  6. package/src/jquery.sap.history.js +1 -1
  7. package/src/jquery.sap.properties.js +2 -2
  8. package/src/jquery.sap.resources.js +1 -1
  9. package/src/jquery.sap.script.js +1 -1
  10. package/src/jquery.sap.storage.js +4 -4
  11. package/src/jquery.sap.ui.js +5 -7
  12. package/src/sap/base/i18n/ResourceBundle.js +7 -11
  13. package/src/sap/base/util/LoaderExtensions.js +6 -6
  14. package/src/sap/base/util/ObjectPath.js +1 -1
  15. package/src/sap/base/util/Properties.js +1 -1
  16. package/src/sap/base/util/fetch.js +8 -10
  17. package/src/sap/base/util/mixedFetch.js +1 -1
  18. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  19. package/src/sap/base/util/restricted/_castArray.js +1 -1
  20. package/src/sap/base/util/restricted/_compact.js +1 -1
  21. package/src/sap/base/util/restricted/_curry.js +1 -1
  22. package/src/sap/base/util/restricted/_debounce.js +1 -1
  23. package/src/sap/base/util/restricted/_difference.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  25. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  28. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  29. package/src/sap/base/util/restricted/_flatten.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  31. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  32. package/src/sap/base/util/restricted/_intersection.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  34. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  36. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  37. package/src/sap/base/util/restricted/_isNil.js +1 -1
  38. package/src/sap/base/util/restricted/_max.js +1 -1
  39. package/src/sap/base/util/restricted/_merge.js +1 -1
  40. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  41. package/src/sap/base/util/restricted/_min.js +1 -1
  42. package/src/sap/base/util/restricted/_omit.js +1 -1
  43. package/src/sap/base/util/restricted/_pick.js +1 -1
  44. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  45. package/src/sap/base/util/restricted/_throttle.js +1 -1
  46. package/src/sap/base/util/restricted/_toArray.js +1 -1
  47. package/src/sap/base/util/restricted/_union.js +1 -1
  48. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  49. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  50. package/src/sap/base/util/restricted/_uniq.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  52. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  53. package/src/sap/base/util/restricted/_without.js +1 -1
  54. package/src/sap/base/util/restricted/_xor.js +1 -1
  55. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  56. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  58. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  59. package/src/sap/base/util/syncFetch.js +9 -16
  60. package/src/sap/ui/Device.js +3 -3
  61. package/src/sap/ui/Global.js +7 -14
  62. package/src/sap/ui/VersionInfo.js +57 -54
  63. package/src/sap/ui/base/BindingInfo.js +198 -0
  64. package/src/sap/ui/base/DataType.js +5 -5
  65. package/src/sap/ui/base/Event.js +2 -2
  66. package/src/sap/ui/base/EventProvider.js +2 -2
  67. package/src/sap/ui/base/Interface.js +1 -1
  68. package/src/sap/ui/base/ManagedObject.js +209 -979
  69. package/src/sap/ui/base/ManagedObjectMetadata.js +6 -6
  70. package/src/sap/ui/base/ManagedObjectRegistry.js +4 -3
  71. package/src/sap/ui/base/Metadata.js +1 -1
  72. package/src/sap/ui/base/Object.js +1 -1
  73. package/src/sap/ui/base/ObjectPool.js +1 -1
  74. package/src/sap/ui/core/.library +13 -9
  75. package/src/sap/ui/core/AppCacheBuster.js +3 -4
  76. package/src/sap/ui/core/BusyIndicator.js +1 -1
  77. package/src/sap/ui/core/BusyIndicatorUtils.js +5 -6
  78. package/src/sap/ui/core/CalendarType.js +0 -1
  79. package/src/sap/ui/core/Component.js +16 -14
  80. package/src/sap/ui/core/ComponentContainer.js +6 -5
  81. package/src/sap/ui/core/ComponentMetadata.js +5 -12
  82. package/src/sap/ui/core/ComponentSupport.js +1 -1
  83. package/src/sap/ui/core/Configuration.js +525 -336
  84. package/src/sap/ui/core/Control.js +7 -7
  85. package/src/sap/ui/core/Core.js +102 -422
  86. package/src/sap/ui/core/CustomData.js +1 -1
  87. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  88. package/src/sap/ui/core/Element.js +65 -9
  89. package/src/sap/ui/core/ElementMetadata.js +1 -1
  90. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  91. package/src/sap/ui/core/EventBus.js +1 -1
  92. package/src/sap/ui/core/FocusHandler.js +79 -9
  93. package/src/sap/ui/core/Fragment.js +1 -1
  94. package/src/sap/ui/core/HTML.js +1 -2
  95. package/src/sap/ui/core/History.js +1 -1
  96. package/src/sap/ui/core/Icon.js +1 -2
  97. package/src/sap/ui/core/IconPool.js +8 -8
  98. package/src/sap/ui/core/IndicationColorSupport.js +2 -2
  99. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  100. package/src/sap/ui/core/InvisibleMessage.js +1 -2
  101. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  102. package/src/sap/ui/core/InvisibleText.js +5 -5
  103. package/src/sap/ui/core/Item.js +1 -2
  104. package/src/sap/ui/core/LabelEnablement.js +1 -1
  105. package/src/sap/ui/core/LayoutData.js +1 -2
  106. package/src/sap/ui/core/ListItem.js +1 -2
  107. package/src/sap/ui/core/LocalBusyIndicator.js +1 -2
  108. package/src/sap/ui/core/Locale.js +1 -1
  109. package/src/sap/ui/core/LocaleData.js +15 -13
  110. package/src/sap/ui/core/Manifest.js +8 -6
  111. package/src/sap/ui/core/Message.js +4 -6
  112. package/src/sap/ui/core/Popup.js +63 -6
  113. package/src/sap/ui/core/RenderManager.js +13 -5
  114. package/src/sap/ui/core/Renderer.js +5 -4
  115. package/src/sap/ui/core/Rendering.js +251 -0
  116. package/src/sap/ui/core/ResizeHandler.js +7 -7
  117. package/src/sap/ui/core/ScrollBar.js +6 -9
  118. package/src/sap/ui/core/ScrollBarRenderer.js +3 -3
  119. package/src/sap/ui/core/SeparatorItem.js +1 -2
  120. package/src/sap/ui/core/Title.js +1 -2
  121. package/src/sap/ui/core/TooltipBase.js +12 -14
  122. package/src/sap/ui/core/UIArea.js +396 -129
  123. package/src/sap/ui/core/UIComponent.js +3 -4
  124. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  125. package/src/sap/ui/core/ValueStateSupport.js +2 -2
  126. package/src/sap/ui/core/VariantLayoutData.js +1 -2
  127. package/src/sap/ui/core/XMLComposite.js +2 -2
  128. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  129. package/src/sap/ui/core/XMLTemplateProcessor.js +12 -10
  130. package/src/sap/ui/core/_ConfigurationProvider.js +187 -0
  131. package/src/sap/ui/core/cache/CacheManager.js +9 -8
  132. package/src/sap/ui/core/cache/LRUPersistentCache.js +4 -4
  133. package/src/sap/ui/core/cldr/es_BO.json +3 -3
  134. package/src/sap/ui/core/cldr/es_CL.json +3 -3
  135. package/src/sap/ui/core/cldr/es_MX.json +3 -3
  136. package/src/sap/ui/core/cldr/es_PE.json +3 -3
  137. package/src/sap/ui/core/cldr/es_UY.json +3 -3
  138. package/src/sap/ui/core/cldr/es_VE.json +2 -2
  139. package/src/sap/ui/core/date/Islamic.js +4 -4
  140. package/src/sap/ui/core/date/UniversalDate.js +8 -8
  141. package/src/sap/ui/core/date/UniversalDateUtils.js +3 -3
  142. package/src/sap/ui/core/delegate/ItemNavigation.js +5 -5
  143. package/src/sap/ui/core/delegate/ScrollEnablement.js +7 -6
  144. package/src/sap/ui/core/dnd/DragAndDrop.js +14 -9
  145. package/src/sap/ui/core/dnd/DragDropBase.js +1 -2
  146. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -2
  147. package/src/sap/ui/core/dnd/DragInfo.js +1 -2
  148. package/src/sap/ui/core/dnd/DropInfo.js +1 -2
  149. package/src/sap/ui/core/format/DateFormat.js +14 -7
  150. package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +0 -1
  151. package/src/sap/ui/core/format/FileSizeFormat.js +4 -3
  152. package/src/sap/ui/core/format/ListFormat.js +4 -3
  153. package/src/sap/ui/core/format/NumberFormat.js +7 -6
  154. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  155. package/src/sap/ui/core/hyphenation/Hyphenation.js +7 -6
  156. package/src/sap/ui/core/library.js +3 -55
  157. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  158. package/src/sap/ui/core/message/Message.js +1 -1
  159. package/src/sap/ui/core/message/MessageManager.js +13 -23
  160. package/src/sap/ui/core/message/MessageParser.js +1 -1
  161. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  162. package/src/sap/ui/core/messagebundle_fr.properties +1 -1
  163. package/src/sap/ui/core/mvc/Controller.js +8 -3
  164. package/src/sap/ui/core/mvc/EventHandlerResolver.js +5 -3
  165. package/src/sap/ui/core/mvc/HTMLView.js +1 -2
  166. package/src/sap/ui/core/mvc/JSONView.js +1 -2
  167. package/src/sap/ui/core/mvc/JSView.js +2 -3
  168. package/src/sap/ui/core/mvc/TemplateView.js +1 -2
  169. package/src/sap/ui/core/mvc/View.js +21 -20
  170. package/src/sap/ui/core/mvc/ViewType.js +0 -1
  171. package/src/sap/ui/core/mvc/XMLView.js +18 -18
  172. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  173. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  174. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  175. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  176. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  177. package/src/sap/ui/core/routing/Router.js +1 -1
  178. package/src/sap/ui/core/routing/async/Target.js +4 -3
  179. package/src/sap/ui/core/rules/App.support.js +11 -13
  180. package/src/sap/ui/core/rules/Config.support.js +19 -17
  181. package/src/sap/ui/core/rules/CoreHelper.support.js +4 -4
  182. package/src/sap/ui/core/rules/Model.support.js +8 -8
  183. package/src/sap/ui/core/rules/Rendering.support.js +1 -1
  184. package/src/sap/ui/core/rules/Theming.support.js +8 -8
  185. package/src/sap/ui/core/rules/View.support.js +9 -9
  186. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -2
  187. package/src/sap/ui/core/search/SearchProvider.js +1 -3
  188. package/src/sap/ui/core/service/Service.js +1 -1
  189. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  190. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  191. package/src/sap/ui/core/support/Hotkeys.js +2 -3
  192. package/src/sap/ui/core/support/Plugin.js +1 -1
  193. package/src/sap/ui/core/support/Support.js +1 -1
  194. package/src/sap/ui/core/support/ToolsAPI.js +11 -13
  195. package/src/sap/ui/core/support/plugins/ControlTree.js +4 -4
  196. package/src/sap/ui/core/support/plugins/Debugging.js +3 -3
  197. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  198. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  199. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  200. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  201. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  202. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  203. package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -2
  204. package/src/sap/ui/core/support/support.html +1 -1
  205. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +10 -8
  206. package/src/sap/ui/core/theming/Parameters.js +8 -15
  207. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -2
  208. package/src/sap/ui/core/tmpl/DOMElement.js +1 -4
  209. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  210. package/src/sap/ui/core/tmpl/Template.js +6 -5
  211. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -2
  212. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  213. package/src/sap/ui/core/util/Export.js +1 -1
  214. package/src/sap/ui/core/util/ExportCell.js +1 -1
  215. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  216. package/src/sap/ui/core/util/ExportRow.js +1 -1
  217. package/src/sap/ui/core/util/ExportType.js +1 -1
  218. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  219. package/src/sap/ui/core/util/File.js +1 -1
  220. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  221. package/src/sap/ui/core/util/MockServer.js +48 -72
  222. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  223. package/src/sap/ui/core/util/ResponsivePaddingsEnablement.js +4 -3
  224. package/src/sap/ui/core/util/XMLPreprocessor.js +2 -2
  225. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +1 -1
  226. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  227. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  228. package/src/sap/ui/core/util/serializer/ViewSerializer.js +4 -4
  229. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  230. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  231. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  232. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  233. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  234. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  235. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  236. package/src/sap/ui/debug/ControlTree.js +3 -3
  237. package/src/sap/ui/debug/DebugEnv.js +4 -4
  238. package/src/sap/ui/debug/PropertyList.css +1 -31
  239. package/src/sap/ui/debug/PropertyList.js +6 -250
  240. package/src/sap/ui/dom/getScrollbarSize.js +1 -1
  241. package/src/sap/ui/dom/jquery/control.js +1 -0
  242. package/src/sap/ui/events/jquery/EventSimulation.js +4 -4
  243. package/src/sap/ui/model/ClientModel.js +1 -1
  244. package/src/sap/ui/model/ClientTreeBinding.js +3 -1
  245. package/src/sap/ui/model/CompositeDataState.js +1 -1
  246. package/src/sap/ui/model/CompositeType.js +1 -1
  247. package/src/sap/ui/model/Context.js +3 -0
  248. package/src/sap/ui/model/ContextBinding.js +1 -1
  249. package/src/sap/ui/model/DataState.js +2 -2
  250. package/src/sap/ui/model/ListBinding.js +2 -2
  251. package/src/sap/ui/model/ManagedObjectBindingSupport.js +871 -0
  252. package/src/sap/ui/model/MetaModel.js +1 -1
  253. package/src/sap/ui/model/Model.js +16 -5
  254. package/src/sap/ui/model/SelectionModel.js +1 -1
  255. package/src/sap/ui/model/SimpleType.js +2 -2
  256. package/src/sap/ui/model/Sorter.js +24 -19
  257. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  258. package/src/sap/ui/model/TreeBindingAdapter.js +3 -7
  259. package/src/sap/ui/model/Type.js +1 -1
  260. package/src/sap/ui/model/analytics/AnalyticalBinding.js +2 -0
  261. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +5 -7
  262. package/src/sap/ui/model/json/JSONModel.js +9 -7
  263. package/src/sap/ui/model/message/MessageModel.js +1 -1
  264. package/src/sap/ui/model/odata/AnnotationHelper.js +4 -4
  265. package/src/sap/ui/model/odata/ODataAnnotations.js +5 -3
  266. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  267. package/src/sap/ui/model/odata/ODataMetaModel.js +10 -10
  268. package/src/sap/ui/model/odata/ODataMetadata.js +5 -4
  269. package/src/sap/ui/model/odata/ODataModel.js +6 -5
  270. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +0 -1
  271. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  272. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  273. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  274. package/src/sap/ui/model/odata/type/Date.js +1 -1
  275. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  276. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  277. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  278. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  279. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  280. package/src/sap/ui/model/odata/type/Double.js +1 -1
  281. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  282. package/src/sap/ui/model/odata/type/Int.js +1 -1
  283. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  284. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  285. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  286. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  287. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  288. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  289. package/src/sap/ui/model/odata/type/Single.js +1 -1
  290. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  291. package/src/sap/ui/model/odata/type/String.js +1 -1
  292. package/src/sap/ui/model/odata/type/Time.js +1 -1
  293. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  294. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  295. package/src/sap/ui/model/odata/v2/Context.js +5 -5
  296. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +4 -3
  297. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +25 -16
  298. package/src/sap/ui/model/odata/v2/ODataListBinding.js +46 -28
  299. package/src/sap/ui/model/odata/v2/ODataModel.js +97 -39
  300. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +5 -5
  301. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +3 -3
  302. package/src/sap/ui/model/odata/v4/Context.js +109 -71
  303. package/src/sap/ui/model/odata/v4/ODataBinding.js +50 -7
  304. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +88 -68
  305. package/src/sap/ui/model/odata/v4/ODataListBinding.js +116 -81
  306. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +23 -20
  307. package/src/sap/ui/model/odata/v4/ODataModel.js +350 -88
  308. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +35 -9
  309. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +15 -9
  310. package/src/sap/ui/model/odata/v4/ODataUtils.js +8 -5
  311. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +45 -33
  312. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +40 -6
  313. package/src/sap/ui/model/odata/v4/lib/_Cache.js +135 -81
  314. package/src/sap/ui/model/odata/v4/lib/_ConcatHelper.js +2 -3
  315. package/src/sap/ui/model/odata/v4/lib/_Helper.js +179 -36
  316. package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +2 -3
  317. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +26 -7
  318. package/src/sap/ui/model/resource/ResourceModel.js +8 -7
  319. package/src/sap/ui/model/type/Boolean.js +1 -1
  320. package/src/sap/ui/model/type/Currency.js +2 -2
  321. package/src/sap/ui/model/type/Date.js +1 -1
  322. package/src/sap/ui/model/type/DateInterval.js +1 -1
  323. package/src/sap/ui/model/type/DateTime.js +1 -1
  324. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  325. package/src/sap/ui/model/type/FileSize.js +1 -1
  326. package/src/sap/ui/model/type/Float.js +1 -1
  327. package/src/sap/ui/model/type/Integer.js +1 -1
  328. package/src/sap/ui/model/type/String.js +2 -2
  329. package/src/sap/ui/model/type/Time.js +1 -1
  330. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  331. package/src/sap/ui/model/type/Unit.js +5 -4
  332. package/src/sap/ui/model/xml/XMLModel.js +8 -6
  333. package/src/sap/ui/performance/trace/Interaction.js +1 -1
  334. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  335. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  336. package/src/sap/ui/test/Opa.js +7 -5
  337. package/src/sap/ui/test/Opa5.js +9 -15
  338. package/src/sap/ui/test/OpaBuilder.js +1 -1
  339. package/src/sap/ui/test/RecorderHotkeyListener.js +1 -1
  340. package/src/sap/ui/test/TestUtils.js +83 -1
  341. package/src/sap/ui/test/autowaiter/_autoWaiter.js +9 -0
  342. package/src/sap/ui/test/autowaiter/_cssAnimationWaiter.js +114 -0
  343. package/src/sap/ui/test/autowaiter/_cssTransitionWaiter.js +99 -0
  344. package/src/sap/ui/test/autowaiter/_jsAnimationWaiter.js +70 -0
  345. package/src/sap/ui/test/autowaiter/_resourceWaiter.js +3 -12
  346. package/src/sap/ui/test/autowaiter/_utils.js +13 -1
  347. package/src/sap/ui/test/generic/TestBase.js +1 -1
  348. package/src/sap/ui/test/matchers/Ancestor.js +1 -0
  349. package/src/sap/ui/test/matchers/Descendant.js +1 -0
  350. package/src/sap/ui/test/matchers/Sibling.js +1 -0
  351. package/src/sap/ui/util/Storage.js +1 -1
@@ -94,7 +94,7 @@ sap.ui.define([
94
94
  * @extends sap.ui.model.TreeBinding
95
95
  * @hideconstructor
96
96
  * @public
97
- * @version 1.105.1
97
+ * @version 1.107.0
98
98
  */
99
99
  var ODataTreeBinding = TreeBinding.extend("sap.ui.model.odata.v2.ODataTreeBinding", /** @lends sap.ui.model.odata.v2.ODataTreeBinding.prototype */ {
100
100
 
@@ -2559,7 +2559,7 @@ sap.ui.define([
2559
2559
  *
2560
2560
  * See the API documentation for the function {@link sap.ui.model.odata.v2.ODataTreeBinding#createEntry createEntry}.
2561
2561
  *
2562
- * This feature is only available when the underlying OData service exposes the "hierarchy-descendant-count-for" annotation.
2562
+ * This feature is only available when the underlying OData service exposes the "hierarchy-node-descendant-count-for" annotation.
2563
2563
  * See the constructor documentation for more details.
2564
2564
  *
2565
2565
  * @function
@@ -2575,7 +2575,7 @@ sap.ui.define([
2575
2575
  *
2576
2576
  * Calling <code>removeContext</code> for a given context implicitly removes the complete subtree underneath it.
2577
2577
  *
2578
- * This feature is only available when the underlying OData service exposes the "hierarchy-descendant-count-for" annotation.
2578
+ * This feature is only available when the underlying OData service exposes the "hierarchy-node-descendant-count-for" annotation.
2579
2579
  * See the constructor documentation for more details.
2580
2580
  *
2581
2581
  * @function
@@ -2592,7 +2592,7 @@ sap.ui.define([
2592
2592
  * The available API is the same as for the v2.ODataModel.
2593
2593
  * See the API documentation here: {@link sap.ui.model.odata.v2.ODataModel#createEntry createEntry}.
2594
2594
  *
2595
- * This feature is only available when the underlying OData service exposes the "hierarchy-descendant-count-for" annotation.
2595
+ * This feature is only available when the underlying OData service exposes the "hierarchy-node-descendant-count-for" annotation.
2596
2596
  * See the constructor documentation for more details.
2597
2597
  *
2598
2598
  * @function
@@ -2608,7 +2608,7 @@ sap.ui.define([
2608
2608
  * The available API is the same as for the v2.ODataModel.
2609
2609
  * See the API documentation here: {@link sap.ui.model.odata.v2.ODataModel#submitChanges submitChanges}.
2610
2610
  *
2611
- * This feature is only available when the underlying OData service exposes the "hierarchy-descendant-count-for" annotation.
2611
+ * This feature is only available when the underlying OData service exposes the "hierarchy-node-descendant-count-for" annotation.
2612
2612
  * See the Constructor documentation for more details.
2613
2613
  *
2614
2614
  * @function
@@ -17,9 +17,9 @@ sap.ui.define([
17
17
  rUnsupportedPathSegments = /\$(?:Navigation)?PropertyPath/,
18
18
  /**
19
19
  * @classdesc
20
- * A collection of methods which help to consume
21
- * <a href="http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part3-csdl.html">
22
- * OData V4 annotations</a> in XML template views. Every context argument must belong to a
20
+ * A collection of methods which help to consume <a href=
21
+ * "https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part3-csdl.html#_Vocabulary_and_Annotation"
22
+ * >OData V4 annotations</a> in XML template views. Every context argument must belong to a
23
23
  * {@link sap.ui.model.odata.v4.ODataMetaModel} instance.
24
24
  *
25
25
  * @alias sap.ui.model.odata.v4.AnnotationHelper
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @hideconstructor
43
43
  * @public
44
44
  * @since 1.39.0
45
- * @version 1.105.1
45
+ * @version 1.107.0
46
46
  */
47
47
  Context = BaseContext.extend("sap.ui.model.odata.v4.Context", {
48
48
  constructor : constructor
@@ -258,7 +258,7 @@ sap.ui.define([
258
258
  * Once the promise is resolved, {@link #getPath} returns a path including the key predicate
259
259
  * of the new entity. This requires that all key properties are available.
260
260
  *
261
- * @returns {Promise}
261
+ * @returns {Promise<void>|undefined}
262
262
  * A promise that is resolved without data when the entity represented by this context has
263
263
  * been created in the back end. It is rejected with an <code>Error</code> instance where
264
264
  * <code>oError.canceled === true</code> if the transient entity is deleted before it is
@@ -281,7 +281,8 @@ sap.ui.define([
281
281
  * immediately, even if {@link sap.ui.model.odata.v4.SubmitMode.API} is used, and the request is
282
282
  * only sent later when {@link sap.ui.model.odata.v4.ODataModel#submitBatch} is called. As long
283
283
  * as the context is deleted on the client, but not yet on the server, {@link #isDeleted}
284
- * returns <code>true</code>.
284
+ * returns <code>true</code>. The context must not be used, e.g. as a binding context, while
285
+ * {@link #isDeleted} returns <code>true</code>.
285
286
  *
286
287
  * Since 1.105 such a pending deletion is a pending change. It causes
287
288
  * <code>hasPendingChanges</code> to return <code>true</code> for the context, the binding
@@ -322,24 +323,24 @@ sap.ui.define([
322
323
  * <ul>
323
324
  * <li> the given group ID is invalid,
324
325
  * <li> this context's root binding is suspended,
325
- * <li> a <code>null</code> group ID is used with a context which is not kept-alive
326
- * (see {@link #isKeepAlive}),
326
+ * <li> a <code>null</code> group ID is used with a context which is not
327
+ * {@link #isKeepAlive kept alive},
327
328
  * <li> the context is already being deleted,
328
329
  * <li> the resulting group ID has {@link sap.ui.model.odata.v4.SubmitMode.API}, and the
329
- * context is kept alive (see {@link #isKeepAlive}), but not in the current collection,
330
+ * context is {@link #isKeepAlive kept alive}, but not in the current collection,
330
331
  * <li> (only before 1.105) the resulting group ID has
331
332
  * {@link sap.ui.model.odata.v4.SubmitMode.API}
332
333
  * </ul>
333
334
  *
334
335
  * @function
335
336
  * @public
336
- * @see {#hasPendingChanges}
337
- * @see {sap.ui.model.odata.v4.ODataContextBinding#hasPendingChanges}
338
- * @see {sap.ui.model.odata.v4.ODataListBinding#hasPendingChanges}
339
- * @see {sap.ui.model.odata.v4.ODataModel#hasPendingChanges}
340
- * @see {sap.ui.model.odata.v4.ODataContextBinding#resetChanges}
341
- * @see {sap.ui.model.odata.v4.ODataListBinding#resetChanges}
342
- * @see {sap.ui.model.odata.v4.ODataModel#resetChanges}
337
+ * @see #hasPendingChanges
338
+ * @see sap.ui.model.odata.v4.ODataContextBinding#hasPendingChanges
339
+ * @see sap.ui.model.odata.v4.ODataListBinding#hasPendingChanges
340
+ * @see sap.ui.model.odata.v4.ODataModel#hasPendingChanges
341
+ * @see sap.ui.model.odata.v4.ODataContextBinding#resetChanges
342
+ * @see sap.ui.model.odata.v4.ODataListBinding#resetChanges
343
+ * @see sap.ui.model.odata.v4.ODataModel#resetChanges
343
344
  * @since 1.41.0
344
345
  */
345
346
  Context.prototype.delete = function (sGroupId, bDoNotRequestCount/*, bRejectIfNotFound*/) {
@@ -361,7 +362,7 @@ sap.ui.define([
361
362
  if (sGroupId === null) {
362
363
  bDoNotRequestCount = true;
363
364
  } else {
364
- oModel.checkGroupId(sGroupId);
365
+ _Helper.checkGroupId(sGroupId);
365
366
  oGroupLock = this.oBinding.lockGroup(sGroupId, true, true);
366
367
  }
367
368
 
@@ -432,6 +433,8 @@ sap.ui.define([
432
433
  * @param {boolean} [bSkipRetry]
433
434
  * Whether to skip retries of failed PATCH requests and instead fail accordingly, but still
434
435
  * fire "patchSent" and "patchCompleted" events
436
+ * @param {boolean} [bUpdating]
437
+ * Whether the given property will not be overwritten by a creation POST(+GET) response
435
438
  * @returns {sap.ui.base.SyncPromise}
436
439
  * A promise which is resolved without a result in case of success, or rejected with an
437
440
  * instance of <code>Error</code> in case of failure, for example if the annotation belongs to
@@ -440,8 +443,9 @@ sap.ui.define([
440
443
  *
441
444
  * @private
442
445
  */
443
- Context.prototype.doSetProperty = function (sPath, vValue, oGroupLock, bSkipRetry) {
444
- var oMetaModel = this.oModel.getMetaModel(),
446
+ Context.prototype.doSetProperty = function (sPath, vValue, oGroupLock, bSkipRetry, bUpdating) {
447
+ var oModel = this.oModel,
448
+ oMetaModel = oModel.getMetaModel(),
445
449
  oPromise,
446
450
  oValue,
447
451
  that = this;
@@ -458,7 +462,7 @@ sap.ui.define([
458
462
  if (oPromise instanceof Promise) {
459
463
  oGroupLock.unlock();
460
464
  oGroupLock = oGroupLock.getUnlockedCopy();
461
- this.doSetProperty(sPath, vValue, null, true) // early UI update
465
+ this.doSetProperty(sPath, vValue, null, true, true) // early UI update
462
466
  .catch(this.oModel.getReporter());
463
467
 
464
468
  return oPromise.then(function (bSuccess) {
@@ -493,8 +497,7 @@ sap.ui.define([
493
497
  * @param {Error} oError
494
498
  */
495
499
  function errorCallback(oError) {
496
- that.oModel.reportError(
497
- "Failed to update path " + that.oModel.resolve(sPath, that),
500
+ oModel.reportError("Failed to update path " + oModel.resolve(sPath, that),
498
501
  sClassName, oError);
499
502
  firePatchCompleted(false);
500
503
  }
@@ -520,7 +523,8 @@ sap.ui.define([
520
523
  }
521
524
 
522
525
  if (!oGroupLock) {
523
- return oCache.setProperty(oResult.propertyPath, vValue, sEntityPath);
526
+ return oCache.setProperty(oResult.propertyPath, vValue, sEntityPath,
527
+ bUpdating);
524
528
  }
525
529
 
526
530
  if (that.isInactive()) {
@@ -643,12 +647,13 @@ sap.ui.define([
643
647
  };
644
648
 
645
649
  /**
646
- * Returns the "canonical path" of the entity for this context.
647
- * According to "4.3.1 Canonical URL" of the specification "OData Version 4.0 Part 2: URL
648
- * Conventions", this is the "name of the entity set associated with the entity followed by the
649
- * key predicate identifying the entity within the collection".
650
- * Use the canonical path in {@link sap.ui.core.Element#bindElement} to create an element
651
- * binding.
650
+ * Returns the "canonical path" of the entity for this context. According to <a href=
651
+ * "https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html#canonical-urlurl4.1.1"
652
+ * >"4.3.1 Canonical URL"</a> of the specification "OData Version 4.0 Part 2: URL Conventions",
653
+ * this is the "name of the entity set associated with the entity followed by the key predicate
654
+ * identifying the entity within the collection". Use the canonical path in
655
+ * {@link sap.ui.core.Element#bindElement} to create an element binding.
656
+ *
652
657
  * Note: For a transient context (see {@link #isTransient}) a wrong path is returned unless all
653
658
  * key properties are available within the initial data.
654
659
  *
@@ -708,7 +713,7 @@ sap.ui.define([
708
713
  * The context's index within the binding's collection. It is <code>undefined</code> if
709
714
  * <ul>
710
715
  * <li> it does not belong to a list binding,
711
- * <li> it is kept alive (see {@link #isKeepAlive}), but not in the collection currently.
716
+ * <li> it is {@link #isKeepAlive kept alive}, but not in the collection currently.
712
717
  * </ul>
713
718
  *
714
719
  * @public
@@ -740,7 +745,7 @@ sap.ui.define([
740
745
  * The context's index within the binding's collection. It is <code>undefined</code> if
741
746
  * <ul>
742
747
  * <li> it does not belong to a list binding,
743
- * <li> it is kept alive (see {@link #isKeepAlive}), but not in the collection currently.
748
+ * <li> it is {@link #isKeepAlive kept alive}, but not in the collection currently.
744
749
  * </ul>
745
750
  *
746
751
  * @private
@@ -755,10 +760,9 @@ sap.ui.define([
755
760
  /**
756
761
  * Returns the value for the given path relative to this context. The function allows access to
757
762
  * the complete data the context points to (if <code>sPath</code> is "") or any part thereof.
758
- * The data is a JSON structure as described in
759
- * <a
760
- * href="http://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html">
761
- * "OData JSON Format Version 4.0"</a>.
763
+ * The data is a JSON structure as described in <a href=
764
+ * "https://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html"
765
+ * >"OData JSON Format Version 4.0"</a>.
762
766
  * Note that the function clones the result. Modify values via
763
767
  * {@link sap.ui.model.odata.v4.ODataPropertyBinding#setValue}.
764
768
  *
@@ -863,10 +867,9 @@ sap.ui.define([
863
867
  /**
864
868
  * Returns the value for the given path relative to this context. The function allows access to
865
869
  * the complete data the context points to (if <code>sPath</code> is "") or any part thereof.
866
- * The data is a JSON structure as described in
867
- * <a
868
- * href="http://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html">
869
- * "OData JSON Format Version 4.0"</a>.
870
+ * The data is a JSON structure as described in <a href=
871
+ * "https://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html"
872
+ * >"OData JSON Format Version 4.0"</a>.
870
873
  * Note that the function returns the cache instance. Do not modify the result, use
871
874
  * {@link sap.ui.model.odata.v4.ODataPropertyBinding#setValue} instead.
872
875
  *
@@ -902,8 +905,8 @@ sap.ui.define([
902
905
  * Returns whether there are pending changes for bindings dependent on this context, or for
903
906
  * unresolved bindings (see {@link sap.ui.model.Binding#isResolved}) which were dependent on
904
907
  * this context at the time the pending change was created. This includes the context itself
905
- * being {@link #isTransient transient}. Since 1.98.0, {@link #isInactive inactive} contexts are
906
- * ignored.
908
+ * being {@link #isTransient transient} or {@link #isDeleted deleted}. Since 1.98.0,
909
+ * {@link #isInactive inactive} contexts are ignored.
907
910
  *
908
911
  * @returns {boolean}
909
912
  * Whether there are pending changes
@@ -914,8 +917,11 @@ sap.ui.define([
914
917
  Context.prototype.hasPendingChanges = function () {
915
918
  return this.isTransient()
916
919
  || this.isDeleted()
920
+ || this.getBinding().hasPendingChangesForPath(this.sPath)
917
921
  || this.oModel.getDependentBindings(this).some(function (oDependentBinding) {
918
- return oDependentBinding.hasPendingChanges();
922
+ return oDependentBinding.oCache
923
+ ? oDependentBinding.hasPendingChanges()
924
+ : oDependentBinding.hasPendingChangesInDependents();
919
925
  })
920
926
  || this.oModel.withUnresolvedBindings("hasPendingChangesInCaches", this.sPath.slice(1));
921
927
  };
@@ -929,7 +935,7 @@ sap.ui.define([
929
935
  *
930
936
  * @public
931
937
  * @see #delete
932
- * @since 1.105
938
+ * @since 1.105.0
933
939
  */
934
940
  Context.prototype.isDeleted = function () {
935
941
  return this.bDeleted;
@@ -955,9 +961,9 @@ sap.ui.define([
955
961
  * Returns whether this context is inactive. The result of this function can also be accessed
956
962
  * via instance annotation "@$ui5.context.isInactive" at the entity.
957
963
  *
958
- * @returns {boolean} <code>true</code> if this context is inactive, <code>false</code> if it
959
- * was created in an inactive state and has been activated, and <code>undefined</code>
960
- * otherwise.
964
+ * @returns {boolean|undefined} <code>true</code> if this context is inactive,
965
+ * <code>false</code> if it was created in an inactive state and has been activated, and
966
+ * <code>undefined</code> otherwise.
961
967
  *
962
968
  * @public
963
969
  * @see #isTransient
@@ -970,7 +976,9 @@ sap.ui.define([
970
976
  };
971
977
 
972
978
  /**
973
- * Returns whether this context is kept alive.
979
+ * Returns whether this context is kept alive even when it is removed from its binding's
980
+ * collection, for example if a filter is applied and the entity represented by this context
981
+ * does not match the filter criteria.
974
982
  *
975
983
  * @returns {boolean} <code>true</code> if this context is kept alive
976
984
  *
@@ -989,7 +997,7 @@ sap.ui.define([
989
997
  * if the context is not transient. The result of this function can also be accessed via
990
998
  * instance annotation "@$ui5.context.isTransient" at the entity.
991
999
  *
992
- * @returns {boolean}
1000
+ * @returns {boolean|undefined}
993
1001
  * Whether this context is transient if it is created using
994
1002
  * {@link sap.ui.model.odata.v4.ODataListBinding#create}; <code>undefined</code> if it is not
995
1003
  * created using {@link sap.ui.model.odata.v4.ODataListBinding#create}
@@ -1033,9 +1041,9 @@ sap.ui.define([
1033
1041
  * binding, the parameter must not be used.
1034
1042
  * Supported since 1.55.0
1035
1043
  *
1036
- * Since 1.84.0, if this context is kept alive (see {@link #isKeepAlive}), it is only
1037
- * destroyed if the corresponding entity does no longer exist in the back end. In this case,
1038
- * the <code>fnOnBeforeDestroy</code> callback passed with {@link #setKeepAlive}) is called.
1044
+ * Since 1.84.0, if this context is {@link #isKeepAlive kept alive}, it is only destroyed if
1045
+ * the corresponding entity does no longer exist in the back end. In this case, the
1046
+ * <code>fnOnBeforeDestroy</code> callback passed with {@link #setKeepAlive}) is called.
1039
1047
  * @throws {Error}
1040
1048
  * If the group ID is not valid, if this context has pending changes or does not represent a
1041
1049
  * single entity (see {@link sap.ui.model.odata.v4.ODataListBinding#getHeaderContext}), if the
@@ -1093,8 +1101,9 @@ sap.ui.define([
1093
1101
  * <ul>
1094
1102
  * <li> this context's root binding is suspended,
1095
1103
  * <li> this context is transient (see {@link #isTransient}),
1096
- * <li> the given other context does not belong to the same list binding as this context, or
1097
- * is already in the collection (has an index, see {@link #getIndex}).
1104
+ * <li> the given other context does not belong to the same list binding as this context, is
1105
+ * already in the collection (has an index, see {@link #getIndex}), or is not
1106
+ * {@link #isKeepAlive kept alive}.
1098
1107
  * </ul>
1099
1108
  *
1100
1109
  * @public
@@ -1107,7 +1116,8 @@ sap.ui.define([
1107
1116
  if (this.isTransient()) {
1108
1117
  throw new Error("Cannot replace " + this);
1109
1118
  }
1110
- if (oOtherContext.oBinding !== this.oBinding || oOtherContext.iIndex !== undefined) {
1119
+ if (oOtherContext.oBinding !== this.oBinding || oOtherContext.iIndex !== undefined
1120
+ || !oOtherContext.bKeepAlive) {
1111
1121
  throw new Error("Cannot replace with " + oOtherContext);
1112
1122
  }
1113
1123
  oElement = oOtherContext.getValue();
@@ -1116,12 +1126,14 @@ sap.ui.define([
1116
1126
  };
1117
1127
 
1118
1128
  /**
1119
- * Returns a promise for the "canonical path" of the entity for this context.
1120
- * According to "4.3.1 Canonical URL" of the specification "OData Version 4.0 Part 2: URL
1121
- * Conventions", this is the "name of the entity set associated with the entity followed by the
1122
- * key predicate identifying the entity within the collection".
1123
- * Use the canonical path in {@link sap.ui.core.Element#bindElement} to create an element
1124
- * binding.
1129
+ * Returns a promise for the "canonical path" of the entity for this context. According to
1130
+ * <a href=
1131
+ * "https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html#canonical-urlurl4.1.1"
1132
+ * >"4.3.1 Canonical URL"</a> of the specification "OData Version 4.0 Part 2: URL Conventions",
1133
+ * this is the "name of the entity set associated with the entity followed by the key predicate
1134
+ * identifying the entity within the collection". Use the canonical path in
1135
+ * {@link sap.ui.core.Element#bindElement} to create an element binding.
1136
+ *
1125
1137
  * Note: For a transient context (see {@link #isTransient}) a wrong path is returned unless all
1126
1138
  * key properties are available within the initial data.
1127
1139
  *
@@ -1139,10 +1151,9 @@ sap.ui.define([
1139
1151
  /**
1140
1152
  * Returns a promise on the value for the given path relative to this context. The function
1141
1153
  * allows access to the complete data the context points to (if <code>sPath</code> is "") or
1142
- * any part thereof. The data is a JSON structure as described in
1143
- * <a
1144
- * href="http://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html">
1145
- * "OData JSON Format Version 4.0"</a>.
1154
+ * any part thereof. The data is a JSON structure as described in <a href=
1155
+ * "https://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html"
1156
+ * >"OData JSON Format Version 4.0"</a>.
1146
1157
  * Note that the function clones the result. Modify values via
1147
1158
  * {@link sap.ui.model.odata.v4.Context#setProperty}.
1148
1159
  *
@@ -1233,7 +1244,7 @@ sap.ui.define([
1233
1244
  Context.prototype.requestRefresh = function (sGroupId, bAllowRemoval) {
1234
1245
  var oPromise;
1235
1246
 
1236
- this.oModel.checkGroupId(sGroupId);
1247
+ _Helper.checkGroupId(sGroupId);
1237
1248
  this.oBinding.checkSuspended();
1238
1249
  if (this.hasPendingChanges()) {
1239
1250
  throw new Error("Cannot refresh entity due to pending changes: " + this);
@@ -1322,7 +1333,7 @@ sap.ui.define([
1322
1333
  * specified, make sure that {@link #requestSideEffects} is called after the corresponding
1323
1334
  * updates have been successfully processed by the server and that there are no pending
1324
1335
  * changes for the affected properties.
1325
- * @returns {Promise}
1336
+ * @returns {Promise<undefined>}
1326
1337
  * Promise resolved with <code>undefined</code>, or rejected with an error if loading of side
1327
1338
  * effects fails. Use it to set fields affected by side effects to read-only before
1328
1339
  * {@link #requestSideEffects} and make them editable again when the promise resolves; in the
@@ -1387,7 +1398,7 @@ sap.ui.define([
1387
1398
  }
1388
1399
 
1389
1400
  this.oBinding.checkSuspended();
1390
- this.oModel.checkGroupId(sGroupId);
1401
+ _Helper.checkGroupId(sGroupId);
1391
1402
  if (this.isTransient()) {
1392
1403
  throw new Error("Unsupported context: " + this);
1393
1404
  }
@@ -1606,7 +1617,7 @@ sap.ui.define([
1606
1617
  if (this.isTransient()) {
1607
1618
  throw new Error("Unsupported transient context " + this);
1608
1619
  }
1609
- this.oModel.getPredicateIndex(this.sPath);
1620
+ _Helper.getPredicateIndex(this.sPath);
1610
1621
  this.oBinding.checkKeepAlive(this);
1611
1622
 
1612
1623
  if (bKeepAlive && bRequestMessages) {
@@ -1692,7 +1703,7 @@ sap.ui.define([
1692
1703
  throw new Error("Not a primitive value");
1693
1704
  }
1694
1705
  if (sGroupId !== null) {
1695
- this.oModel.checkGroupId(sGroupId);
1706
+ _Helper.checkGroupId(sGroupId);
1696
1707
  oGroupLock = this.oBinding.lockGroup(sGroupId, true, true);
1697
1708
  }
1698
1709
 
@@ -1708,19 +1719,46 @@ sap.ui.define([
1708
1719
  };
1709
1720
 
1710
1721
  /**
1711
- * Returns a string representation of this object including the binding path.
1722
+ * Returns a string representation of this object including the {@link #getPath binding path},
1723
+ * {@link #getIndex index}, and state (see also "Context states" of
1724
+ * {@link topic:c9723f8265f644af91c0ed941e114d46 Creating an Entity}).
1725
+ *
1726
+ * @returns {string} A string description of this binding
1712
1727
  *
1713
- * @return {string} A string description of this binding
1714
1728
  * @public
1729
+ * @see #destroy
1730
+ * @see #isDeleted
1731
+ * @see #isInactive
1732
+ * @see #isTransient
1715
1733
  * @since 1.39.0
1716
1734
  */
1717
1735
  Context.prototype.toString = function () {
1718
- var sIndex = "";
1736
+ var sSuffix = "";
1737
+
1738
+ if (!this.oModel) {
1739
+ sSuffix = ";destroyed";
1740
+ } else if (this.bDeleted) {
1741
+ sSuffix = ";deleted";
1742
+ }
1719
1743
 
1720
1744
  if (this.iIndex !== undefined) {
1721
- sIndex = "[" + this.iIndex + (this.isTransient() ? "|transient" : "") + "]";
1745
+ if (!sSuffix) {
1746
+ switch (this.isTransient()) {
1747
+ case false:
1748
+ sSuffix = ";createdPersisted";
1749
+ break;
1750
+
1751
+ case true:
1752
+ sSuffix = this.bInactive ? ";inactive" : ";transient";
1753
+ break;
1754
+
1755
+ // no default
1756
+ }
1757
+ }
1758
+ sSuffix = "[" + this.iIndex + sSuffix + "]";
1722
1759
  }
1723
- return this.sPath + sIndex;
1760
+
1761
+ return this.sPath + sSuffix;
1724
1762
  };
1725
1763
 
1726
1764
  /**
@@ -136,7 +136,7 @@ sap.ui.define([
136
136
  break;
137
137
  case "$$groupId":
138
138
  case "$$updateGroupId":
139
- that.oModel.checkGroupId(vValue, false,
139
+ _Helper.checkGroupId(vValue, false,
140
140
  "Unsupported value for binding parameter '" + sKey + "': ");
141
141
  break;
142
142
  case "$$ignoreMessages":
@@ -388,6 +388,15 @@ sap.ui.define([
388
388
  this.oCache.deregisterChangeListener(sPath, oListener);
389
389
  };
390
390
 
391
+ /**
392
+ * @override
393
+ * @see sap.ui.base.EventProvider#getEventingParent
394
+ */
395
+ ODataBinding.prototype.getEventingParent = function () {
396
+ // this allows that dataRequested/dataReceived events are bubbled up to the model
397
+ return this.oModel;
398
+ };
399
+
391
400
  /**
392
401
  * Hook method for {@link #fetchQueryOptionsForOwnCache} to determine the query options for this
393
402
  * binding.
@@ -639,6 +648,40 @@ sap.ui.define([
639
648
  });
640
649
  };
641
650
 
651
+ /**
652
+ * Fires the 'dataReceived' event. It may be bubbled up to the model.
653
+ *
654
+ * @param {object} oParameters
655
+ * The event parameters
656
+ * @param {object} [oParameters.data]
657
+ * An empty data object if a back-end request succeeds
658
+ * @param {Error} [oParameters.error]
659
+ * The error object if a back-end request failed.
660
+ * @param {boolean} [bPreventBubbling]
661
+ * Whether the dataRequested and dataReceived events must not be bubbled up to the model
662
+ *
663
+ * @private
664
+ */
665
+ // @override sap.ui.model.Binding#fireDataReceived
666
+ ODataBinding.prototype.fireDataReceived = function (oParameters, bPreventBubbling) {
667
+ this.fireEvent("dataReceived", oParameters, /*bAllowPreventDefault*/false,
668
+ /*bEnableEventBubbling*/!bPreventBubbling);
669
+ };
670
+
671
+ /**
672
+ * Fires the 'dataRequested' event. It may be bubbled up to the model.
673
+ *
674
+ * @param {boolean} [bPreventBubbling]
675
+ * Whether the dataRequested and dataReceived events must not be bubbled up to the model
676
+ *
677
+ * @private
678
+ */
679
+ // @override sap.ui.model.Binding#fireDataRequested
680
+ ODataBinding.prototype.fireDataRequested = function (bPreventBubbling) {
681
+ this.fireEvent("dataRequested", undefined, /*bAllowPreventDefault*/false,
682
+ /*bEnableEventBubbling*/!bPreventBubbling);
683
+ };
684
+
642
685
  /**
643
686
  * Returns all bindings which have this binding as parent binding.
644
687
  *
@@ -755,8 +798,8 @@ sap.ui.define([
755
798
  */
756
799
 
757
800
  /**
758
- * Returns the root binding of this binding's hierarchy, see binding
759
- * {@link topic:54e0ddf695af4a6c978472cecb01c64d Initialization and Read Requests}.
801
+ * Returns the root binding of this binding's hierarchy, see
802
+ * {@link topic:fccfb2eb41414f0792c165e69a878717 Initialization and Read Requests}.
760
803
  *
761
804
  * @returns {sap.ui.model.odata.v4.ODataContextBinding|sap.ui.model.odata.v4.ODataListBinding|
762
805
  * sap.ui.model.odata.v4.ODataPropertyBinding|undefined}
@@ -841,7 +884,7 @@ sap.ui.define([
841
884
  * {@link sap.ui.model.odata.v4.ODataListBinding#refresh refresh} (since 1.100.0),
842
885
  * {@link sap.ui.model.odata.v4.ODataListBinding#sort sort}, or
843
886
  * {@link sap.ui.model.odata.v4.ODataListBinding#suspend suspend} because they relate to a
844
- * {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding
887
+ * {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive} context of this binding
845
888
  * (since 1.97.0). Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient}
846
889
  * contexts of a {@link #getRootBinding root binding} are treated as kept-alive by this flag.
847
890
  * Since 1.99.0, the same happens for bindings using the <code>$$ownRequest</code> parameter
@@ -983,7 +1026,7 @@ sap.ui.define([
983
1026
  * The group lock
984
1027
  *
985
1028
  * @private
986
- * @see {sap.ui.model.odata.v4.ODataModel#lockGroup}
1029
+ * @see sap.ui.model.odata.v4.ODataModel#lockGroup
987
1030
  */
988
1031
  ODataBinding.prototype.lockGroup = function (sGroupId, bLocked, bModifying, fnCancel) {
989
1032
  sGroupId = sGroupId || (bModifying ? this.getUpdateGroupId() : this.getGroupId());
@@ -1037,7 +1080,7 @@ sap.ui.define([
1037
1080
  * binding,
1038
1081
  * <li> or a value of type boolean is given.
1039
1082
  * </ul> Since 1.100.0, pending changes are ignored if they relate to a
1040
- * {@link sap.ui.model.odata.v4.Context#setKeepAlive kept-alive} context of this binding, and
1083
+ * {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive} context of this binding, and
1041
1084
  * {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts of a
1042
1085
  * {@link #getRootBinding root binding} do not count as pending changes.
1043
1086
  *
@@ -1192,7 +1235,7 @@ sap.ui.define([
1192
1235
  if (this.hasPendingChanges(true)) {
1193
1236
  throw new Error("Cannot refresh due to pending changes");
1194
1237
  }
1195
- this.oModel.checkGroupId(sGroupId);
1238
+ _Helper.checkGroupId(sGroupId);
1196
1239
 
1197
1240
  // The actual refresh is specific to the binding and is implemented in each binding class.
1198
1241
  return Promise.resolve(this.refreshInternal("", sGroupId, true)).then(function () {