@openui5/sap.ui.core 1.102.2 → 1.104.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 (374) hide show
  1. package/.reuse/dep5 +17 -0
  2. package/LICENSES/LicenseRef-tzdata-PublicDomain.txt +5 -0
  3. package/THIRDPARTY.txt +35 -2
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +2 -2
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +1 -1
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +3 -3
  10. package/src/sap/base/i18n/ResourceBundle.js +2 -2
  11. package/src/sap/base/util/LoaderExtensions.js +69 -61
  12. package/src/sap/base/util/fetch.js +230 -0
  13. package/src/sap/base/util/mixedFetch.js +69 -0
  14. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  15. package/src/sap/base/util/restricted/_castArray.js +1 -1
  16. package/src/sap/base/util/restricted/_compact.js +1 -1
  17. package/src/sap/base/util/restricted/_curry.js +1 -1
  18. package/src/sap/base/util/restricted/_debounce.js +1 -1
  19. package/src/sap/base/util/restricted/_difference.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  21. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_flatten.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_intersection.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  30. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  32. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  33. package/src/sap/base/util/restricted/_isNil.js +1 -1
  34. package/src/sap/base/util/restricted/_max.js +1 -1
  35. package/src/sap/base/util/restricted/_merge.js +1 -1
  36. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  37. package/src/sap/base/util/restricted/_min.js +1 -1
  38. package/src/sap/base/util/restricted/_omit.js +1 -1
  39. package/src/sap/base/util/restricted/_pick.js +1 -1
  40. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  41. package/src/sap/base/util/restricted/_throttle.js +1 -1
  42. package/src/sap/base/util/restricted/_toArray.js +1 -1
  43. package/src/sap/base/util/restricted/_union.js +1 -1
  44. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  45. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  46. package/src/sap/base/util/restricted/_uniq.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  48. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  49. package/src/sap/base/util/restricted/_without.js +1 -1
  50. package/src/sap/base/util/restricted/_xor.js +1 -1
  51. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  52. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  54. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  55. package/src/sap/base/util/syncFetch.js +73 -0
  56. package/src/sap/ui/Device.js +9 -3
  57. package/src/sap/ui/Global.js +4 -4
  58. package/src/sap/ui/VersionInfo.js +12 -6
  59. package/src/sap/ui/base/Event.js +1 -1
  60. package/src/sap/ui/base/EventProvider.js +2 -2
  61. package/src/sap/ui/base/ExpressionParser.js +2 -2
  62. package/src/sap/ui/base/Interface.js +1 -1
  63. package/src/sap/ui/base/ManagedObject.js +10 -8
  64. package/src/sap/ui/base/ManagedObjectMetadata.js +21 -8
  65. package/src/sap/ui/base/Metadata.js +1 -1
  66. package/src/sap/ui/base/Object.js +1 -1
  67. package/src/sap/ui/base/ObjectPool.js +1 -1
  68. package/src/sap/ui/base/SyncPromise.js +2 -0
  69. package/src/sap/ui/core/.library +17 -90
  70. package/src/sap/ui/core/AppCacheBuster.js +69 -55
  71. package/src/sap/ui/core/BusyIndicator.js +1 -1
  72. package/src/sap/ui/core/Component.js +51 -24
  73. package/src/sap/ui/core/ComponentContainer.js +1 -1
  74. package/src/sap/ui/core/ComponentMetadata.js +2 -2
  75. package/src/sap/ui/core/ComponentSupport.js +1 -1
  76. package/src/sap/ui/core/Configuration.js +45 -22
  77. package/src/sap/ui/core/Control.js +2 -2
  78. package/src/sap/ui/core/Core.js +56 -68
  79. package/src/sap/ui/core/CustomData.js +1 -1
  80. package/src/sap/ui/core/DeclarativeSupport.js +10 -9
  81. package/src/sap/ui/core/Element.js +20 -11
  82. package/src/sap/ui/core/ElementMetadata.js +1 -1
  83. package/src/sap/ui/core/EnabledPropagator.js +4 -2
  84. package/src/sap/ui/core/EventBus.js +1 -1
  85. package/src/sap/ui/core/FocusHandler.js +58 -35
  86. package/src/sap/ui/core/Fragment.js +17 -14
  87. package/src/sap/ui/core/HTML.js +2 -2
  88. package/src/sap/ui/core/History.js +1 -1
  89. package/src/sap/ui/core/Icon.js +6 -6
  90. package/src/sap/ui/core/IconPool.js +1 -3
  91. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  92. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  93. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  94. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  95. package/src/sap/ui/core/InvisibleText.js +4 -1
  96. package/src/sap/ui/core/Item.js +1 -1
  97. package/src/sap/ui/core/LabelEnablement.js +1 -1
  98. package/src/sap/ui/core/LayoutData.js +1 -1
  99. package/src/sap/ui/core/ListItem.js +1 -1
  100. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  101. package/src/sap/ui/core/Locale.js +28 -4
  102. package/src/sap/ui/core/LocaleData.js +3 -45
  103. package/src/sap/ui/core/Manifest.js +1 -1
  104. package/src/sap/ui/core/Message.js +1 -1
  105. package/src/sap/ui/core/Popup.js +4 -2
  106. package/src/sap/ui/core/RenderManager.js +11 -21
  107. package/src/sap/ui/core/Renderer.js +1 -1
  108. package/src/sap/ui/core/ResizeHandler.js +22 -43
  109. package/src/sap/ui/core/ScrollBar.js +1 -1
  110. package/src/sap/ui/core/SeparatorItem.js +1 -1
  111. package/src/sap/ui/core/ThemeCheck.js +7 -7
  112. package/src/sap/ui/core/Title.js +1 -1
  113. package/src/sap/ui/core/TooltipBase.js +1 -1
  114. package/src/sap/ui/core/UIArea.js +8 -5
  115. package/src/sap/ui/core/UIComponent.js +2 -2
  116. package/src/sap/ui/core/UIComponentMetadata.js +2 -2
  117. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  118. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  119. package/src/sap/ui/core/XMLComposite.js +1 -1
  120. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  121. package/src/sap/ui/core/XMLTemplateProcessor.js +3 -5
  122. package/src/sap/ui/core/_IconRegistry.js +66 -55
  123. package/src/sap/ui/core/cache/CacheManager.js +18 -14
  124. package/src/sap/ui/core/cache/CacheManagerNOP.js +5 -2
  125. package/src/sap/ui/core/cache/LRUPersistentCache.js +17 -9
  126. package/src/sap/ui/core/cldr/en.json +0 -1
  127. package/src/sap/ui/core/date/Buddhist.js +15 -13
  128. package/src/sap/ui/core/date/Japanese.js +0 -6
  129. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  130. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  131. package/src/sap/ui/core/dnd/DragAndDrop.js +1 -1
  132. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  133. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  134. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  135. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  136. package/src/sap/ui/core/format/DateFormat.js +2 -2
  137. package/src/sap/ui/core/format/NumberFormat.js +3 -3
  138. package/src/sap/ui/core/format/TimezoneUtil.js +2 -2
  139. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  140. package/src/sap/ui/core/library.js +3 -3
  141. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  142. package/src/sap/ui/core/message/Message.js +1 -1
  143. package/src/sap/ui/core/message/MessageManager.js +1 -1
  144. package/src/sap/ui/core/message/MessageParser.js +2 -2
  145. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  146. package/src/sap/ui/core/messagebundle_ar.properties +54 -53
  147. package/src/sap/ui/core/messagebundle_bg.properties +54 -53
  148. package/src/sap/ui/core/messagebundle_ca.properties +28 -27
  149. package/src/sap/ui/core/messagebundle_cs.properties +37 -36
  150. package/src/sap/ui/core/messagebundle_cy.properties +56 -55
  151. package/src/sap/ui/core/messagebundle_da.properties +53 -52
  152. package/src/sap/ui/core/messagebundle_de.properties +54 -53
  153. package/src/sap/ui/core/messagebundle_el.properties +47 -46
  154. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +1 -0
  155. package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +1 -0
  156. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +1 -0
  157. package/src/sap/ui/core/messagebundle_es.properties +42 -41
  158. package/src/sap/ui/core/messagebundle_es_MX.properties +54 -53
  159. package/src/sap/ui/core/messagebundle_et.properties +51 -50
  160. package/src/sap/ui/core/messagebundle_fi.properties +48 -47
  161. package/src/sap/ui/core/messagebundle_fr.properties +36 -35
  162. package/src/sap/ui/core/messagebundle_fr_CA.properties +21 -20
  163. package/src/sap/ui/core/messagebundle_hi.properties +41 -40
  164. package/src/sap/ui/core/messagebundle_hr.properties +55 -54
  165. package/src/sap/ui/core/messagebundle_hu.properties +55 -54
  166. package/src/sap/ui/core/messagebundle_id.properties +55 -54
  167. package/src/sap/ui/core/messagebundle_it.properties +58 -57
  168. package/src/sap/ui/core/messagebundle_iw.properties +55 -54
  169. package/src/sap/ui/core/messagebundle_ja.properties +48 -47
  170. package/src/sap/ui/core/messagebundle_kk.properties +41 -40
  171. package/src/sap/ui/core/messagebundle_ko.properties +17 -16
  172. package/src/sap/ui/core/messagebundle_lt.properties +55 -54
  173. package/src/sap/ui/core/messagebundle_lv.properties +55 -54
  174. package/src/sap/ui/core/messagebundle_ms.properties +52 -51
  175. package/src/sap/ui/core/messagebundle_nl.properties +53 -52
  176. package/src/sap/ui/core/messagebundle_no.properties +53 -52
  177. package/src/sap/ui/core/messagebundle_pl.properties +52 -51
  178. package/src/sap/ui/core/messagebundle_pt.properties +54 -53
  179. package/src/sap/ui/core/messagebundle_pt_PT.properties +55 -54
  180. package/src/sap/ui/core/messagebundle_ro.properties +56 -55
  181. package/src/sap/ui/core/messagebundle_ru.properties +52 -51
  182. package/src/sap/ui/core/messagebundle_sh.properties +56 -55
  183. package/src/sap/ui/core/messagebundle_sk.properties +54 -53
  184. package/src/sap/ui/core/messagebundle_sl.properties +56 -55
  185. package/src/sap/ui/core/messagebundle_sv.properties +52 -51
  186. package/src/sap/ui/core/messagebundle_th.properties +25 -24
  187. package/src/sap/ui/core/messagebundle_tr.properties +56 -55
  188. package/src/sap/ui/core/messagebundle_uk.properties +55 -54
  189. package/src/sap/ui/core/messagebundle_vi.properties +55 -54
  190. package/src/sap/ui/core/messagebundle_zh_CN.properties +55 -54
  191. package/src/sap/ui/core/messagebundle_zh_TW.properties +55 -54
  192. package/src/sap/ui/core/mvc/ControllerExtension.js +1 -1
  193. package/src/sap/ui/core/mvc/HTMLView.js +12 -12
  194. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  195. package/src/sap/ui/core/mvc/JSView.js +1 -1
  196. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  197. package/src/sap/ui/core/mvc/View.js +1 -1
  198. package/src/sap/ui/core/mvc/XMLView.js +1 -2
  199. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  200. package/src/sap/ui/core/plugin/LessSupport.js +16 -14
  201. package/src/sap/ui/core/plugin/TemplatingSupport.js +2 -1
  202. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  203. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  204. package/src/sap/ui/core/routing/History.js +5 -3
  205. package/src/sap/ui/core/routing/Router.js +4 -2
  206. package/src/sap/ui/core/routing/Targets.js +2 -2
  207. package/src/sap/ui/core/routing/async/TargetCache.js +4 -0
  208. package/src/sap/ui/core/rules/Config.support.js +1 -1
  209. package/src/sap/ui/core/rules/View.support.js +11 -4
  210. package/src/sap/ui/core/search/OpenSearchProvider.js +24 -11
  211. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  212. package/src/sap/ui/core/service/Service.js +1 -1
  213. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  214. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  215. package/src/sap/ui/core/support/Plugin.js +1 -1
  216. package/src/sap/ui/core/support/RuleEngineOpaExtension.js +1 -1
  217. package/src/sap/ui/core/support/Support.js +2 -2
  218. package/src/sap/ui/core/support/ToolsAPI.js +4 -1
  219. package/src/sap/ui/core/support/plugins/ControlTree.js +3 -1
  220. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  221. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  222. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  223. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  224. package/src/sap/ui/core/support/plugins/TechInfo.js +46 -33
  225. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  226. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  227. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +1 -1
  228. package/src/sap/ui/core/themes/base/base.less +26 -26
  229. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  230. package/src/sap/ui/core/theming/Parameters.js +46 -40
  231. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  232. package/src/sap/ui/core/tmpl/DOMElement.js +2 -2
  233. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  234. package/src/sap/ui/core/tmpl/Template.js +5 -5
  235. package/src/sap/ui/core/tmpl/TemplateControl.js +2 -2
  236. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  237. package/src/sap/ui/core/util/Export.js +1 -1
  238. package/src/sap/ui/core/util/ExportCell.js +1 -1
  239. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  240. package/src/sap/ui/core/util/ExportRow.js +1 -1
  241. package/src/sap/ui/core/util/ExportType.js +1 -1
  242. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  243. package/src/sap/ui/core/util/File.js +1 -1
  244. package/src/sap/ui/core/util/LibraryInfo.js +61 -42
  245. package/src/sap/ui/core/util/MockServer.js +1 -1
  246. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  247. package/src/sap/ui/core/util/ResponsivePaddingsEnablement.js +2 -2
  248. package/src/sap/ui/core/util/XMLPreprocessor.js +2 -2
  249. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  250. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  251. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  252. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  253. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  254. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  255. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  256. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  257. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  258. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  259. package/src/sap/ui/debug/ControlTree.js +1 -1
  260. package/src/sap/ui/debug/DebugEnv.js +1 -1
  261. package/src/sap/ui/debug/PropertyList.js +19 -9
  262. package/src/sap/ui/dom/_ready.js +34 -0
  263. package/src/sap/ui/dom/containsOrEquals.js +2 -2
  264. package/src/sap/ui/dom/getFirstEditableInput.js +2 -2
  265. package/src/sap/ui/dom/jquery/Focusable.js +1 -1
  266. package/src/sap/ui/dom/jquery/control.js +1 -1
  267. package/src/sap/ui/events/jquery/EventExtension.js +1 -1
  268. package/src/sap/ui/events/jquery/EventSimulation.js +1 -1
  269. package/src/sap/ui/model/ClientModel.js +1 -1
  270. package/src/sap/ui/model/CompositeDataState.js +1 -1
  271. package/src/sap/ui/model/CompositeType.js +1 -1
  272. package/src/sap/ui/model/DataState.js +2 -2
  273. package/src/sap/ui/model/MetaModel.js +1 -1
  274. package/src/sap/ui/model/Model.js +1 -1
  275. package/src/sap/ui/model/SelectionModel.js +1 -1
  276. package/src/sap/ui/model/SimpleType.js +1 -1
  277. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  278. package/src/sap/ui/model/TreeBindingAdapter.js +134 -0
  279. package/src/sap/ui/model/Type.js +1 -1
  280. package/src/sap/ui/model/analytics/odata4analytics.js +2 -2
  281. package/src/sap/ui/model/json/JSONModel.js +1 -1
  282. package/src/sap/ui/model/message/MessageModel.js +1 -1
  283. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  284. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  285. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  286. package/src/sap/ui/model/odata/ODataMetadata.js +6 -3
  287. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  288. package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +6 -0
  289. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +407 -91
  290. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  291. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  292. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  293. package/src/sap/ui/model/odata/type/Date.js +1 -1
  294. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  295. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  296. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  297. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  298. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  299. package/src/sap/ui/model/odata/type/Double.js +1 -1
  300. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  301. package/src/sap/ui/model/odata/type/Int.js +1 -1
  302. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  303. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  304. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  305. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  306. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  307. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  308. package/src/sap/ui/model/odata/type/Single.js +1 -1
  309. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  310. package/src/sap/ui/model/odata/type/String.js +1 -1
  311. package/src/sap/ui/model/odata/type/Time.js +1 -1
  312. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  313. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  314. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  315. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  316. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +4 -1
  317. package/src/sap/ui/model/odata/v2/ODataModel.js +112 -104
  318. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +50 -5
  319. package/src/sap/ui/model/odata/v4/Context.js +9 -10
  320. package/src/sap/ui/model/odata/v4/ODataBinding.js +16 -8
  321. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +24 -1
  322. package/src/sap/ui/model/odata/v4/ODataListBinding.js +30 -2
  323. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +5 -5
  324. package/src/sap/ui/model/odata/v4/ODataModel.js +66 -3
  325. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +30 -1
  326. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +17 -6
  327. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +6 -6
  328. package/src/sap/ui/model/odata/v4/lib/_Cache.js +203 -30
  329. package/src/sap/ui/model/odata/v4/lib/_Helper.js +52 -3
  330. package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +1 -1
  331. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +3 -7
  332. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +1 -1
  333. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  334. package/src/sap/ui/model/type/Boolean.js +1 -1
  335. package/src/sap/ui/model/type/Currency.js +1 -1
  336. package/src/sap/ui/model/type/Date.js +1 -1
  337. package/src/sap/ui/model/type/DateInterval.js +1 -1
  338. package/src/sap/ui/model/type/DateTime.js +1 -1
  339. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  340. package/src/sap/ui/model/type/FileSize.js +1 -1
  341. package/src/sap/ui/model/type/Float.js +1 -1
  342. package/src/sap/ui/model/type/Integer.js +1 -1
  343. package/src/sap/ui/model/type/String.js +1 -1
  344. package/src/sap/ui/model/type/Time.js +1 -1
  345. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  346. package/src/sap/ui/model/type/Unit.js +1 -1
  347. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  348. package/src/sap/ui/qunit/sinon-qunit-bridge.js +1 -1
  349. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  350. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  351. package/src/sap/ui/security/FrameOptions.js +4 -2
  352. package/src/sap/ui/test/Opa5.js +1 -1
  353. package/src/sap/ui/test/OpaBuilder.js +1 -1
  354. package/src/sap/ui/test/OpaPlugin.js +3 -3
  355. package/src/sap/ui/test/TestUtils.js +35 -2
  356. package/src/sap/ui/test/_ControlFinder.js +5 -4
  357. package/src/sap/ui/test/actions/Drag.js +2 -2
  358. package/src/sap/ui/test/actions/Drop.js +2 -2
  359. package/src/sap/ui/test/actions/EnterText.js +8 -8
  360. package/src/sap/ui/test/actions/Press.js +5 -5
  361. package/src/sap/ui/test/actions/Scroll.js +1 -1
  362. package/src/sap/ui/test/generic/TestBase.js +1 -1
  363. package/src/sap/ui/test/matchers/Matcher.js +9 -11
  364. package/src/sap/ui/test/opaQunit.js +4 -3
  365. package/src/sap/ui/thirdparty/IPv6.js +1 -1
  366. package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
  367. package/src/sap/ui/thirdparty/URI.js +8 -2
  368. package/src/sap/ui/thirdparty/URITemplate.js +1 -1
  369. package/src/sap/ui/util/Mobile.js +59 -33
  370. package/src/sap/ui/util/Storage.js +2 -2
  371. package/src/sap/ui/util/XMLHelper.js +1 -1
  372. package/src/sap/ui/util/openWindow.js +1 -1
  373. package/src/ui5loader.js +3 -3
  374. package/ui5.yaml +71 -0
@@ -87,7 +87,7 @@ sap.ui.define([
87
87
  * @extends sap.ui.model.odata.type.ODataType
88
88
  *
89
89
  * @author SAP SE
90
- * @version 1.102.2
90
+ * @version 1.104.0
91
91
  *
92
92
  * @alias sap.ui.model.odata.type.Boolean
93
93
  * @param {object} [oFormatOptions]
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.odata.type.Int
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.102.2
27
+ * @version 1.104.0
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.Byte
30
30
  * @param {object} [oFormatOptions]
@@ -61,7 +61,7 @@ sap.ui.define([
61
61
  * @extends sap.ui.model.type.Currency
62
62
  * @public
63
63
  * @since 1.63.0
64
- * @version 1.102.2
64
+ * @version 1.104.0
65
65
  */
66
66
  var Currency = BaseCurrency.extend("sap.ui.model.odata.type.Currency", {
67
67
  constructor : function (oFormatOptions, oConstraints) {
@@ -106,7 +106,7 @@ sap.ui.define([
106
106
  * @extends sap.ui.model.odata.type.ODataType
107
107
  *
108
108
  * @author SAP SE
109
- * @version 1.102.2
109
+ * @version 1.104.0
110
110
  *
111
111
  * @alias sap.ui.model.odata.type.Date
112
112
  * @param {object} [oFormatOptions]
@@ -59,7 +59,7 @@ sap.ui.define([
59
59
  * @extends sap.ui.model.odata.type.DateTimeBase
60
60
  *
61
61
  * @author SAP SE
62
- * @version 1.102.2
62
+ * @version 1.104.0
63
63
  *
64
64
  * @alias sap.ui.model.odata.type.DateTime
65
65
  * @param {object} [oFormatOptions]
@@ -132,7 +132,7 @@ sap.ui.define([
132
132
  * @extends sap.ui.model.odata.type.ODataType
133
133
  * @public
134
134
  * @since 1.27.0
135
- * @version 1.102.2
135
+ * @version 1.104.0
136
136
  */
137
137
  var DateTimeBase = ODataType.extend("sap.ui.model.odata.type.DateTimeBase", {
138
138
  constructor : function (oFormatOptions, oConstraints) {
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  * @extends sap.ui.model.odata.type.DateTimeBase
29
29
  *
30
30
  * @author SAP SE
31
- * @version 1.102.2
31
+ * @version 1.104.0
32
32
  *
33
33
  * @alias sap.ui.model.odata.type.DateTimeOffset
34
34
  * @param {object} [oFormatOptions]
@@ -60,7 +60,7 @@ sap.ui.define([
60
60
  * @public
61
61
  * @see {sap.ui.model.odata.v2.ODataModel#bindProperty}
62
62
  * @since 1.99.0
63
- * @version 1.102.2
63
+ * @version 1.104.0
64
64
  */
65
65
  var DateTimeWithTimezone = CompositeType.extend("sap.ui.model.odata.type.DateTimeWithTimezone",
66
66
  {
@@ -201,7 +201,7 @@ sap.ui.define([
201
201
  * @extends sap.ui.model.odata.type.ODataType
202
202
  *
203
203
  * @author SAP SE
204
- * @version 1.102.2
204
+ * @version 1.104.0
205
205
  *
206
206
  * @alias sap.ui.model.odata.type.Decimal
207
207
  * @param {object} [oFormatOptions]
@@ -95,7 +95,7 @@ sap.ui.define([
95
95
  * @extends sap.ui.model.odata.type.ODataType
96
96
  *
97
97
  * @author SAP SE
98
- * @version 1.102.2
98
+ * @version 1.104.0
99
99
  *
100
100
  * @alias sap.ui.model.odata.type.Double
101
101
  * @param {object} [oFormatOptions]
@@ -62,7 +62,7 @@ sap.ui.define([
62
62
  * @extends sap.ui.model.odata.type.ODataType
63
63
  *
64
64
  * @author SAP SE
65
- * @version 1.102.2
65
+ * @version 1.104.0
66
66
  *
67
67
  * @alias sap.ui.model.odata.type.Guid
68
68
  * @param {object} [oFormatOptions]
@@ -80,7 +80,7 @@ sap.ui.define([
80
80
  * @extends sap.ui.model.odata.type.ODataType
81
81
  *
82
82
  * @author SAP SE
83
- * @version 1.102.2
83
+ * @version 1.104.0
84
84
  *
85
85
  * @abstract
86
86
  * @alias sap.ui.model.odata.type.Int
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.odata.type.Int
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.102.2
27
+ * @version 1.104.0
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.Int16
30
30
  * @param {object} [oFormatOptions]
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.odata.type.Int
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.102.2
27
+ * @version 1.104.0
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.Int32
30
30
  * @param {object} [oFormatOptions]
@@ -137,7 +137,7 @@ sap.ui.define([
137
137
  * @extends sap.ui.model.odata.type.ODataType
138
138
  *
139
139
  * @author SAP SE
140
- * @version 1.102.2
140
+ * @version 1.104.0
141
141
  *
142
142
  * @alias sap.ui.model.odata.type.Int64
143
143
  * @param {object} [oFormatOptions]
@@ -115,7 +115,7 @@ sap.ui.define([
115
115
  * @extends sap.ui.model.SimpleType
116
116
  *
117
117
  * @author SAP SE
118
- * @version 1.102.2
118
+ * @version 1.104.0
119
119
  *
120
120
  * @abstract
121
121
  * @alias sap.ui.model.odata.type.ODataType
@@ -30,7 +30,7 @@ sap.ui.define([
30
30
  * @extends sap.ui.model.odata.type.ODataType
31
31
  * @public
32
32
  * @since 1.37.0
33
- * @version 1.102.2
33
+ * @version 1.104.0
34
34
  */
35
35
  var Raw = ODataType.extend("sap.ui.model.odata.type.Raw", {
36
36
  constructor : function (oFormatOptions, oConstraints) {
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.odata.type.Int
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.102.2
27
+ * @version 1.104.0
28
28
  *
29
29
  * @alias sap.ui.model.odata.type.SByte
30
30
  * @param {object} [oFormatOptions]
@@ -95,7 +95,7 @@ sap.ui.define([
95
95
  * @extends sap.ui.model.odata.type.ODataType
96
96
  *
97
97
  * @author SAP SE
98
- * @version 1.102.2
98
+ * @version 1.104.0
99
99
  *
100
100
  * @alias sap.ui.model.odata.type.Single
101
101
  * @param {object} [oFormatOptions]
@@ -60,7 +60,7 @@ sap.ui.define([
60
60
  * @extends sap.ui.model.odata.type.ODataType
61
61
  * @public
62
62
  * @since 1.51.0
63
- * @version 1.102.2
63
+ * @version 1.104.0
64
64
  */
65
65
  var Stream = ODataType.extend("sap.ui.model.odata.type.Stream", {
66
66
  constructor : function (oFormatOptions, oConstraints) {
@@ -84,7 +84,7 @@ sap.ui.define([
84
84
  * @extends sap.ui.model.odata.type.ODataType
85
85
  *
86
86
  * @author SAP SE
87
- * @version 1.102.2
87
+ * @version 1.104.0
88
88
  *
89
89
  * @alias sap.ui.model.odata.type.String
90
90
  * @param {object} [oFormatOptions]
@@ -154,7 +154,7 @@ sap.ui.define([
154
154
  * @extends sap.ui.model.odata.type.ODataType
155
155
  *
156
156
  * @author SAP SE
157
- * @version 1.102.2
157
+ * @version 1.104.0
158
158
  *
159
159
  * @alias sap.ui.model.odata.type.Time
160
160
  * @param {object} [oFormatOptions]
@@ -110,7 +110,7 @@ sap.ui.define([
110
110
  * @extends sap.ui.model.odata.type.ODataType
111
111
  * @public
112
112
  * @since 1.37.0
113
- * @version 1.102.2
113
+ * @version 1.104.0
114
114
  */
115
115
  var TimeOfDay = ODataType.extend("sap.ui.model.odata.type.TimeOfDay", {
116
116
  constructor : function (oFormatOptions, oConstraints) {
@@ -63,7 +63,7 @@ sap.ui.define([
63
63
  * @extends sap.ui.model.type.Unit
64
64
  * @public
65
65
  * @since 1.63.0
66
- * @version 1.102.2
66
+ * @version 1.104.0
67
67
  */
68
68
  var Unit = BaseUnit.extend("sap.ui.model.odata.type.Unit", {
69
69
  constructor : function (oFormatOptions, oConstraints, aDynamicFormatOptionNames) {
@@ -60,7 +60,7 @@ sap.ui.define([
60
60
  * @hideconstructor
61
61
  * @public
62
62
  * @since 1.93.0
63
- * @version 1.102.2
63
+ * @version 1.104.0
64
64
  */
65
65
  var Context = BaseContext.extend("sap.ui.model.odata.v2.Context", {
66
66
  constructor : function (oModel, sPath, sDeepPath, oCreatePromise, bInactive) {
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  * @class Annotation loader for OData V2 services
36
36
  *
37
37
  * @author SAP SE
38
- * @version 1.102.2
38
+ * @version 1.104.0
39
39
  *
40
40
  * @public
41
41
  * @since 1.37.0
@@ -363,14 +363,17 @@ sap.ui.define([
363
363
  };
364
364
 
365
365
  ODataContextBinding.prototype._fireChange = function(mParameters, bForceUpdate, bUpdated) {
366
+ var bOldUpdated;
367
+
366
368
  if (this.oElementContext) {
369
+ bOldUpdated = this.oElementContext.isUpdated();
367
370
  this.oElementContext.setForceRefresh(bForceUpdate);
368
371
  this.oElementContext.setUpdated(bUpdated);
369
372
  }
370
373
  ContextBinding.prototype._fireChange.call(this, mParameters);
371
374
  if (this.oElementContext) {
372
375
  this.oElementContext.setForceRefresh(false);
373
- this.oElementContext.setUpdated(false);
376
+ this.oElementContext.setUpdated(bOldUpdated);
374
377
  }
375
378
  };
376
379
 
@@ -203,7 +203,7 @@ sap.ui.define([
203
203
  * This model is not prepared to be inherited from.
204
204
  *
205
205
  * @author SAP SE
206
- * @version 1.102.2
206
+ * @version 1.104.0
207
207
  *
208
208
  * @public
209
209
  * @alias sap.ui.model.odata.v2.ODataModel
@@ -1464,6 +1464,7 @@ sap.ui.define([
1464
1464
  * @param {object} oData Data that should be imported
1465
1465
  * @param {map} mChangedEntities Map of changed entities
1466
1466
  * @param {object} oResponse Response where the data came from
1467
+ * @param {object} oRequest The request object
1467
1468
  * @param {string} [sPath] The path to the data
1468
1469
  * @param {string} [sDeepPath] The deep path to the data
1469
1470
  * @param {string} [sKey] The cache key to the data if known
@@ -1478,7 +1479,7 @@ sap.ui.define([
1478
1479
  * @return {string|string[]} Key of imported data or array of keys in case of nested entries
1479
1480
  * @private
1480
1481
  */
1481
- ODataModel.prototype._importData = function(oData, mChangedEntities, oResponse, sPath,
1482
+ ODataModel.prototype._importData = function(oData, mChangedEntities, oResponse, oRequest, sPath,
1482
1483
  sDeepPath, sKey, bFunctionImport, sPathFromCanonicalParent, bSideEffects) {
1483
1484
  var that = this,
1484
1485
  aList, oResult, oEntry, oCurrentEntry;
@@ -1489,7 +1490,7 @@ sap.ui.define([
1489
1490
  aList = [];
1490
1491
  each(oData.results, function(i, entry) {
1491
1492
  var sKey = that._getKey(entry);
1492
- sKey = that._importData(entry, mChangedEntities, oResponse,
1493
+ sKey = that._importData(entry, mChangedEntities, oResponse, /*oRequest*/undefined,
1493
1494
  sPath.substr(0, sPath.lastIndexOf("/")), sDeepPath, sKey,
1494
1495
  /*bFunctionImport*/undefined, /*sPathFromCanonicalParent*/undefined,
1495
1496
  bSideEffects);
@@ -1545,8 +1546,9 @@ sap.ui.define([
1545
1546
  var sNewPath = sPath + "/" + sName;
1546
1547
  var sNewDeepPath = sDeepPath + "/" + sName;
1547
1548
 
1548
- oResult = that._importData(oProperty, mChangedEntities, oResponse, sNewPath,
1549
- sNewDeepPath, undefined, false, "/" + sKey + "/" + sName, bSideEffects);
1549
+ oResult = that._importData(oProperty, mChangedEntities, oResponse,
1550
+ /*oRequest*/undefined, sNewPath, sNewDeepPath, undefined, false,
1551
+ "/" + sKey + "/" + sName, bSideEffects);
1550
1552
  if (Array.isArray(oResult)) {
1551
1553
  oEntry[sName] = {__list: oResult};
1552
1554
  if (bSideEffects) {
@@ -1559,7 +1561,6 @@ sap.ui.define([
1559
1561
  // ODataModel#requestSideEffects; see BLI CPOUI5MODELS-656
1560
1562
  delete oEntry[sName];
1561
1563
  });
1562
-
1563
1564
  }
1564
1565
  } else {
1565
1566
  if (oCurrentEntry[sName] && oCurrentEntry[sName].__ref) {
@@ -1577,18 +1578,19 @@ sap.ui.define([
1577
1578
  oEntry[sName] = oProperty;
1578
1579
  }
1579
1580
  });
1580
- // if we got new data we have to update changed entities
1581
- var oMap = {};
1582
- oMap[sKey] = oEntry;
1583
-
1584
1581
  //if we detect a preliminary context we need to set preliminary false and flag for update
1585
1582
  if (this.hasContext("/" + sKey) && this.getContext("/" + sKey).isPreliminary()) {
1586
1583
  var oExistingContext = this.getContext("/" + sKey);
1587
1584
  oExistingContext.setUpdated(true);
1585
+ this.callAfterUpdate(function() {
1586
+ oExistingContext.setUpdated(false);
1587
+ });
1588
1588
  oExistingContext.setPreliminary(false);
1589
1589
  }
1590
-
1591
- this._updateChangedEntities(oMap);
1590
+ if (oRequest && oRequest.created && oRequest.key) {
1591
+ this._cleanupAfterCreate(oRequest, sKey);
1592
+ }
1593
+ this._updateChangedEntity(sKey, oEntry);
1592
1594
  mChangedEntities[sKey] = true;
1593
1595
 
1594
1596
  // if no path information available use the key. This should be the case for create/callFunction
@@ -4268,10 +4270,10 @@ sap.ui.define([
4268
4270
  if (oRequest.key || oRequest.created) {
4269
4271
  // no need to pass sideEffects because side-effects requests don't have a key or
4270
4272
  // a created property attached to the request
4271
- that._importData(oImportData, mLocalGetEntities, oResponse, /*sPath*/undefined,
4272
- /*sDeepPath*/undefined, /*sKey*/undefined, bIsFunction);
4273
+ that._importData(oImportData, mLocalGetEntities, oResponse, oRequest,
4274
+ /*sPath*/undefined, /*sDeepPath*/undefined, /*sKey*/undefined, bIsFunction);
4273
4275
  } else {
4274
- that._importData(oImportData, mLocalGetEntities, oResponse, sPath,
4276
+ that._importData(oImportData, mLocalGetEntities, oResponse, oRequest, sPath,
4275
4277
  oRequest.deepPath, /*sKey*/undefined, bIsFunction,
4276
4278
  /*sPathFromCanonicalParent*/undefined, oRequest.sideEffects);
4277
4279
  }
@@ -4279,7 +4281,8 @@ sap.ui.define([
4279
4281
  }
4280
4282
 
4281
4283
  oEntity = this._getEntity(oRequest.key);
4282
- if (mLocalGetEntities && oEntity && oEntity.__metadata.created && oEntity.__metadata.created.functionImport) {
4284
+ if (oEntity && oEntity.__metadata.created
4285
+ && oEntity.__metadata.created.functionImport) {
4283
4286
  var aResults = [];
4284
4287
  var oResult = oEntity["$result"];
4285
4288
  if (oResult && oResult.__list) {
@@ -4301,9 +4304,7 @@ sap.ui.define([
4301
4304
  if (aParts[1]) {
4302
4305
  mLocalChangeEntities[aParts[1]] = oRequest;
4303
4306
  //cleanup of this.mChangedEntities; use only the actual response key
4304
- var oMap = {};
4305
- oMap[aParts[1]] = oRequest.data;
4306
- this._updateChangedEntities(oMap);
4307
+ this._updateChangedEntity(aParts[1], oRequest.data);
4307
4308
  }
4308
4309
  //for delete requests delete data in model (exclude $links)
4309
4310
  if (oRequest.method === "DELETE" && aParts[2] !== "$links") {
@@ -4316,29 +4317,7 @@ sap.ui.define([
4316
4317
  mEntityTypes[oEntityType.entityType] = true;
4317
4318
  }
4318
4319
  if (oRequest.key) {
4319
- // for createEntry entities change context path to new one
4320
4320
  if (oRequest.created) {
4321
- var sKey = this._getKey(oResultData);
4322
- // rewrite context for new path
4323
- var oContext = this.getContext("/" + oRequest.key);
4324
- sDeepPath = oRequest.deepPath;
4325
- if (oContext.isTransient() && sDeepPath.endsWith(")")) {
4326
- oRequest.deepPath = sDeepPath.slice(0, sDeepPath.lastIndexOf("("))
4327
- + sKey.slice(sKey.indexOf("("));
4328
- }
4329
- this._updateContext(oContext, '/' + sKey, oRequest.deepPath);
4330
- oContext.setUpdated(true);
4331
- // register function to reset updated flag call as callAfterUpdate
4332
- this.callAfterUpdate(function() {
4333
- oContext.setUpdated(false);
4334
- });
4335
- //delete created flag after successful creation
4336
- oEntity = this._getEntity(sKey);
4337
- if (oEntity) {
4338
- delete oEntity.__metadata.created;
4339
- // before deleting the old entity copy and update the changes
4340
- this._keepChangesAfterCreate(oRequest, oEntity, sKey);
4341
- }
4342
4321
  this._removeEntity(oRequest.key);
4343
4322
  } else {
4344
4323
  // do not call _removeEntity after successful function import call as
@@ -4381,17 +4360,29 @@ sap.ui.define([
4381
4360
  *
4382
4361
  * @param {object} oRequest
4383
4362
  * The request object for a created entity
4384
- * @param {object} oEntity
4385
- * The persisted and retrieved entity object
4386
4363
  * @param {string} sKey
4387
4364
  * The key of the created entity
4388
4365
  *
4389
4366
  * @private
4390
4367
  */
4391
- ODataModel.prototype._keepChangesAfterCreate = function (oRequest, oEntity, sKey) {
4392
- var oKey2Entity, aNavProps, sProperty,
4393
- oChangedEntity = this.mChangedEntities[oRequest.key];
4368
+ ODataModel.prototype._cleanupAfterCreate = function (oRequest, sKey) {
4369
+ var oChangedEntity, aNavProps, sProperty,
4370
+ oContext = this.getContext("/" + oRequest.key),
4371
+ sDeepPath = oRequest.deepPath,
4372
+ oEntity = this._getEntity(sKey);
4394
4373
 
4374
+ if (oContext.isTransient() && sDeepPath.endsWith(")")) {
4375
+ oRequest.deepPath = sDeepPath.slice(0, sDeepPath.lastIndexOf("("))
4376
+ + sKey.slice(sKey.indexOf("("));
4377
+ }
4378
+ this._updateContext(oContext, '/' + sKey, oRequest.deepPath);
4379
+ oContext.setUpdated(true);
4380
+ this.callAfterUpdate(function() {
4381
+ oContext.setUpdated(false);
4382
+ });
4383
+ delete oEntity.__metadata.created;
4384
+ // before deleting the old entity copy and update the changes
4385
+ oChangedEntity = this.mChangedEntities[oRequest.key];
4395
4386
  if (oChangedEntity) {
4396
4387
  aNavProps = this.oMetadata._getNavigationPropertyNames(
4397
4388
  this.oMetadata._getEntityTypeByPath(sKey));
@@ -4405,13 +4396,10 @@ sap.ui.define([
4405
4396
  }
4406
4397
  }
4407
4398
  this.mChangedEntities[sKey] = oChangedEntity;
4408
- oKey2Entity = {};
4409
- oKey2Entity[sKey] = oEntity;
4410
- this._updateChangedEntities(oKey2Entity);
4411
4399
  // cleanup also further POST request for the just created entity
4412
4400
  this.abortInternalRequest(this._resolveGroup(oRequest.key).groupId,
4413
4401
  {requestKey: oRequest.key});
4414
- }
4402
+ } // else case may happen if ODataModel#create is called which does not use the cache
4415
4403
  };
4416
4404
 
4417
4405
  /**
@@ -4641,25 +4629,29 @@ sap.ui.define([
4641
4629
  };
4642
4630
 
4643
4631
  /**
4644
- * Resolves batch group settings for an entity.
4632
+ * Resolves batch group settings based on a given entity key or a given resolved path to an
4633
+ * entity.
4634
+ *
4635
+ * @param {string} sKeyOrPath
4636
+ * The entity key or the resolved path to an entity
4637
+ * @returns {object}
4638
+ * Batch group info containing <code>groupId</code> and <code>changeSetId</code>
4645
4639
  *
4646
- * @param {string} sKey Key of the entity
4647
- * @returns {object} Batch group info
4648
4640
  * @private
4649
4641
  */
4650
- ODataModel.prototype._resolveGroup = function(sKey) {
4651
- var oChangeGroup, oEntityType, mParams, sGroupId, sChangeSetId, oData;
4642
+ ODataModel.prototype._resolveGroup = function(sKeyOrPath) {
4643
+ var oChangeGroup, sChangeSetId, mCreated, oData, oEntityType, sGroupId,
4644
+ sPath = sKeyOrPath.startsWith("/") ? sKeyOrPath : ("/" + sKeyOrPath);
4652
4645
 
4653
- oEntityType = this.oMetadata._getEntityTypeByPath(sKey);
4654
- oData = this._getObject('/' + sKey);
4655
- if (oData) {
4656
- mParams = oData.__metadata.created;
4657
- //for created entries the group information is retrieved from the params
4658
- if (mParams) {
4659
- return {groupId: mParams.groupId, changeSetId: mParams.changeSetId};
4660
- }
4646
+ oData = this._getObject(sPath);
4647
+ mCreated = oData && oData.__metadata && oData.__metadata.created;
4648
+ //for created entries the group information is retrieved from the params
4649
+ if (mCreated) {
4650
+ return {groupId: mCreated.groupId, changeSetId: mCreated.changeSetId};
4661
4651
  }
4652
+
4662
4653
  //resolve groupId/changeSetId
4654
+ oEntityType = this.oMetadata._getEntityTypeByPath(sPath);
4663
4655
  if (this.mChangeGroups[oEntityType.name]) {
4664
4656
  oChangeGroup = this.mChangeGroups[oEntityType.name];
4665
4657
  sGroupId = oChangeGroup.groupId;
@@ -6065,16 +6057,30 @@ sap.ui.define([
6065
6057
  bRefreshAfterChange = this.bRefreshAfterChange,
6066
6058
  that = this;
6067
6059
 
6068
- if (mParameters) {
6069
- sGroupId = mParameters.groupId || mParameters.batchGroupId;
6070
- fnSuccess = mParameters.success;
6071
- fnError = mParameters.error;
6072
- // ensure merge parameter backwards compatibility
6073
- if (mParameters.merge !== undefined) {
6074
- sMethod = mParameters.merge ? "MERGE" : "PUT";
6075
- }
6060
+ mParameters = mParameters || {};
6061
+ sGroupId = mParameters.groupId || mParameters.batchGroupId;
6062
+ fnSuccess = mParameters.success;
6063
+ fnError = mParameters.error;
6064
+ // ensure merge parameter backwards compatibility
6065
+ if (mParameters.merge !== undefined) {
6066
+ sMethod = mParameters.merge ? "MERGE" : "PUT";
6076
6067
  }
6077
6068
 
6069
+ this.getBindings().forEach(function (oBinding) {
6070
+ if (oBinding._submitChanges) {
6071
+ var fnOldSuccess = fnSuccess || function () {},
6072
+ mParameters0 = {groupId : sGroupId};
6073
+
6074
+ oBinding._submitChanges(mParameters0);
6075
+ if (mParameters0.success) {
6076
+ fnSuccess = function () {
6077
+ fnOldSuccess.apply(null, arguments);
6078
+ mParameters0.success.apply(null, arguments);
6079
+ };
6080
+ }
6081
+ }
6082
+ });
6083
+
6078
6084
  if (sGroupId && !this.mDeferredGroups[sGroupId]) {
6079
6085
  Log.fatal(this + " submitChanges: \"" + sGroupId + "\" is not a deferred group!");
6080
6086
  }
@@ -6155,13 +6161,19 @@ sap.ui.define([
6155
6161
  return oRequestHandle;
6156
6162
  };
6157
6163
 
6158
- /*
6159
- * updateChangedEntities
6164
+ /**
6165
+ * Updates the object in the shadow cache containing the pending user input and the object in
6166
+ * the model cache with the given data for the entity with the given key. If all changes for
6167
+ * that entity are processed the object is removed from the shadow cache.
6168
+ *
6169
+ * @param {string} [sEntityKey] The key for the entity to be updated
6170
+ * @param {object} [oData] The new data for the entity
6171
+ *
6160
6172
  * @private
6161
- * @param {map} mChangedEntities Map of changedEntities
6162
6173
  */
6163
- ODataModel.prototype._updateChangedEntities = function(mChangedEntities) {
6164
- var that = this, sRootPath, oEntityType, oNavPropRefInfo;
6174
+ ODataModel.prototype._updateChangedEntity = function(sEntityKey, oData) {
6175
+ var oChangedEntry, sDeepPath, oEntityType, oEntry, oNavPropRefInfo, sRootPath,
6176
+ that = this;
6165
6177
 
6166
6178
  function updateChangedEntities(oOriginalObject, oChangedObject, sCurPath) {
6167
6179
  each(oChangedObject,function(sKey) {
@@ -6175,44 +6187,40 @@ sap.ui.define([
6175
6187
  || deepEqual(oChangedObject[sKey], oOriginalObject[sKey])
6176
6188
  && !that.isLaundering(sActPath)) {
6177
6189
  delete oChangedObject[sKey];
6178
- // When current object is the entity itself check for matching navigation property in changed
6179
- // entity data and take care of it as well
6190
+ // When current object is the entity itself check for matching navigation
6191
+ // property in changed entity data and take care of it as well
6180
6192
  if (sCurPath === sRootPath) {
6181
6193
  oEntityType = that.oMetadata._getEntityTypeByPath(sRootPath);
6182
- oNavPropRefInfo = oEntityType && that.oMetadata._getNavPropertyRefInfo(oEntityType, sKey);
6194
+ oNavPropRefInfo = oEntityType &&
6195
+ that.oMetadata._getNavPropertyRefInfo(oEntityType, sKey);
6183
6196
  if (oNavPropRefInfo && oChangedObject[oNavPropRefInfo.name]) {
6184
- // if the nav prop related to the matching property is also set, set it on original
6185
- // entry and remove from changed entity
6186
- oOriginalObject[oNavPropRefInfo.name] = oChangedObject[oNavPropRefInfo.name];
6197
+ // if the nav prop related to the matching property is also set, set it
6198
+ // on original entry and remove it from changed entity
6199
+ oOriginalObject[oNavPropRefInfo.name] =
6200
+ oChangedObject[oNavPropRefInfo.name];
6187
6201
  delete oChangedObject[oNavPropRefInfo.name];
6188
6202
  }
6189
6203
  }
6190
6204
  }
6191
6205
  });
6192
6206
  }
6193
-
6194
- each(mChangedEntities, function(sKey, oData) {
6195
- if (sKey in that.mChangedEntities) {
6196
- var oEntry = that._getObject('/' + sKey, null, true);
6197
- var oChangedEntry = that._getObject('/' + sKey);
6198
-
6199
- merge(oEntry, oData);
6200
-
6201
- sRootPath = '/' + sKey;
6202
-
6203
- var sDeepPath = that.removeInternalMetadata(oChangedEntry).deepPath;
6204
- updateChangedEntities(oEntry, oChangedEntry, sRootPath);
6205
-
6206
- if (isEmptyObject(oChangedEntry)) {
6207
- delete that.mChangedEntities[sKey];
6208
- that.abortInternalRequest(that._resolveGroup(sKey).groupId, {requestKey: sKey});
6209
- } else {
6210
- that.mChangedEntities[sKey] = oChangedEntry;
6211
- oChangedEntry.__metadata = {deepPath: sDeepPath};
6212
- extend(oChangedEntry.__metadata, oEntry.__metadata);
6213
- }
6207
+ if (sEntityKey in that.mChangedEntities) {
6208
+ oEntry = that._getObject('/' + sEntityKey, null, true);
6209
+ oChangedEntry = that._getObject('/' + sEntityKey);
6210
+ merge(oEntry, oData);
6211
+ sRootPath = '/' + sEntityKey;
6212
+ sDeepPath = that.removeInternalMetadata(oChangedEntry).deepPath;
6213
+ updateChangedEntities(oEntry, oChangedEntry, sRootPath);
6214
+ if (isEmptyObject(oChangedEntry)) {
6215
+ delete that.mChangedEntities[sEntityKey];
6216
+ that.abortInternalRequest(that._resolveGroup(sEntityKey).groupId,
6217
+ {requestKey: sEntityKey});
6218
+ } else {
6219
+ that.mChangedEntities[sEntityKey] = oChangedEntry;
6220
+ oChangedEntry.__metadata = {deepPath: sDeepPath};
6221
+ extend(oChangedEntry.__metadata, oEntry.__metadata);
6214
6222
  }
6215
- });
6223
+ }
6216
6224
  };
6217
6225
 
6218
6226
  /**