@openui5/sap.ui.core 1.96.2 → 1.97.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 (302) hide show
  1. package/.eslintrc.json +2 -2
  2. package/.reuse/dep5 +1 -1
  3. package/THIRDPARTY.txt +2 -1
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +1 -1
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +2 -2
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +3 -3
  10. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  11. package/src/sap/base/util/restricted/_castArray.js +1 -1
  12. package/src/sap/base/util/restricted/_compact.js +1 -1
  13. package/src/sap/base/util/restricted/_curry.js +1 -1
  14. package/src/sap/base/util/restricted/_debounce.js +1 -1
  15. package/src/sap/base/util/restricted/_difference.js +1 -1
  16. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  17. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  18. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  21. package/src/sap/base/util/restricted/_flatten.js +1 -1
  22. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  23. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  24. package/src/sap/base/util/restricted/_intersection.js +1 -1
  25. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  26. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  27. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  28. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  29. package/src/sap/base/util/restricted/_isNil.js +1 -1
  30. package/src/sap/base/util/restricted/_max.js +1 -1
  31. package/src/sap/base/util/restricted/_merge.js +1 -1
  32. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  33. package/src/sap/base/util/restricted/_min.js +1 -1
  34. package/src/sap/base/util/restricted/_omit.js +1 -1
  35. package/src/sap/base/util/restricted/_pick.js +1 -1
  36. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  37. package/src/sap/base/util/restricted/_throttle.js +1 -1
  38. package/src/sap/base/util/restricted/_toArray.js +1 -1
  39. package/src/sap/base/util/restricted/_union.js +1 -1
  40. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  41. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  42. package/src/sap/base/util/restricted/_uniq.js +1 -1
  43. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  44. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  45. package/src/sap/base/util/restricted/_without.js +1 -1
  46. package/src/sap/base/util/restricted/_xor.js +1 -1
  47. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  48. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  49. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  50. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  51. package/src/sap/ui/Device.js +4 -4
  52. package/src/sap/ui/Global.js +11 -16
  53. package/src/sap/ui/base/Event.js +1 -1
  54. package/src/sap/ui/base/EventProvider.js +1 -1
  55. package/src/sap/ui/base/Interface.js +1 -1
  56. package/src/sap/ui/base/ManagedObject.js +3 -3
  57. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  58. package/src/sap/ui/base/Metadata.js +1 -3
  59. package/src/sap/ui/base/Object.js +1 -1
  60. package/src/sap/ui/base/ObjectPool.js +1 -1
  61. package/src/sap/ui/core/.library +1 -27
  62. package/src/sap/ui/core/AppCacheBuster.js +4 -4
  63. package/src/sap/ui/core/BusyIndicator.js +1 -1
  64. package/src/sap/ui/core/Component.js +31 -9
  65. package/src/sap/ui/core/ComponentContainer.js +1 -1
  66. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  67. package/src/sap/ui/core/ComponentSupport.js +1 -1
  68. package/src/sap/ui/core/Control.js +2 -2
  69. package/src/sap/ui/core/Core.js +2 -2
  70. package/src/sap/ui/core/CustomData.js +1 -1
  71. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  72. package/src/sap/ui/core/Element.js +2 -6
  73. package/src/sap/ui/core/ElementMetadata.js +1 -1
  74. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  75. package/src/sap/ui/core/EventBus.js +1 -1
  76. package/src/sap/ui/core/Fragment.js +1 -1
  77. package/src/sap/ui/core/HTML.js +3 -3
  78. package/src/sap/ui/core/History.js +1 -1
  79. package/src/sap/ui/core/Icon.js +1 -1
  80. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  81. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  82. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  83. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  84. package/src/sap/ui/core/InvisibleText.js +1 -1
  85. package/src/sap/ui/core/Item.js +1 -1
  86. package/src/sap/ui/core/LabelEnablement.js +1 -1
  87. package/src/sap/ui/core/LayoutData.js +1 -1
  88. package/src/sap/ui/core/ListItem.js +1 -1
  89. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  90. package/src/sap/ui/core/Locale.js +1 -1
  91. package/src/sap/ui/core/LocaleData.js +3 -3
  92. package/src/sap/ui/core/Manifest.js +1 -1
  93. package/src/sap/ui/core/Message.js +1 -1
  94. package/src/sap/ui/core/RenderManager.js +3 -3
  95. package/src/sap/ui/core/Renderer.js +1 -1
  96. package/src/sap/ui/core/ResizeHandler.js +1 -1
  97. package/src/sap/ui/core/ScrollBar.js +4 -3
  98. package/src/sap/ui/core/SeparatorItem.js +1 -1
  99. package/src/sap/ui/core/ThemeCheck.js +2 -2
  100. package/src/sap/ui/core/Title.js +1 -1
  101. package/src/sap/ui/core/TooltipBase.js +1 -1
  102. package/src/sap/ui/core/UIArea.js +3 -3
  103. package/src/sap/ui/core/UIComponent.js +1 -1
  104. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  105. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  106. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  107. package/src/sap/ui/core/XMLComposite.js +1 -1
  108. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  109. package/src/sap/ui/core/XMLTemplateProcessor.js +19 -5
  110. package/src/sap/ui/core/cache/LRUPersistentCache.js +4 -2
  111. package/src/sap/ui/core/date/UniversalDateUtils.js +33 -0
  112. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  113. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  114. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  115. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  116. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  117. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  118. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  119. package/src/sap/ui/core/library.js +5 -5
  120. package/src/sap/ui/core/message/ControlMessageProcessor.js +5 -5
  121. package/src/sap/ui/core/message/Message.js +1 -1
  122. package/src/sap/ui/core/message/MessageManager.js +1 -1
  123. package/src/sap/ui/core/message/MessageParser.js +1 -1
  124. package/src/sap/ui/core/message/MessageProcessor.js +22 -12
  125. package/src/sap/ui/core/messagebundle_fr.properties +7 -7
  126. package/src/sap/ui/core/messagebundle_ru.properties +21 -21
  127. package/src/sap/ui/core/mvc/Controller.js +4 -4
  128. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  129. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  130. package/src/sap/ui/core/mvc/JSView.js +1 -1
  131. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  132. package/src/sap/ui/core/mvc/View.js +1 -1
  133. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  134. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  135. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  136. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  137. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  138. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  139. package/src/sap/ui/core/rules/Misc.support.js +51 -1
  140. package/src/sap/ui/core/rules/Rendering.support.js +1 -4
  141. package/src/sap/ui/core/rules/View.support.js +14 -46
  142. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  143. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  144. package/src/sap/ui/core/service/Service.js +1 -1
  145. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  146. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  147. package/src/sap/ui/core/support/Plugin.js +2 -2
  148. package/src/sap/ui/core/support/RuleEngineOpaExtension.js +0 -1
  149. package/src/sap/ui/core/support/Support.js +1 -1
  150. package/src/sap/ui/core/support/controls/TreeViewer.js +1 -1
  151. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  152. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  153. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  154. package/src/sap/ui/core/support/plugins/Performance.js +1 -2
  155. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  156. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  157. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  158. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  159. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +1 -1
  160. package/src/sap/ui/core/support/trace/E2eTraceLib.js +3 -3
  161. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  162. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  163. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  164. package/src/sap/ui/core/tmpl/Template.js +1 -1
  165. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  166. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  167. package/src/sap/ui/core/util/Export.js +1 -1
  168. package/src/sap/ui/core/util/ExportCell.js +1 -1
  169. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  170. package/src/sap/ui/core/util/ExportRow.js +1 -1
  171. package/src/sap/ui/core/util/ExportType.js +1 -1
  172. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  173. package/src/sap/ui/core/util/File.js +1 -1
  174. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  175. package/src/sap/ui/core/util/MockServer.js +2 -2
  176. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  177. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +4 -4
  178. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  179. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  180. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  181. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  182. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  183. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  184. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  185. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  186. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  187. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  188. package/src/sap/ui/debug/ControlTree.js +1 -1
  189. package/src/sap/ui/debug/DebugEnv.js +1 -1
  190. package/src/sap/ui/debug/PropertyList.js +1 -1
  191. package/src/sap/ui/model/ChangeReason.js +1 -1
  192. package/src/sap/ui/model/ClientListBinding.js +7 -0
  193. package/src/sap/ui/model/ClientModel.js +6 -5
  194. package/src/sap/ui/model/ClientTreeBindingAdapter.js +1 -1
  195. package/src/sap/ui/model/CompositeDataState.js +1 -1
  196. package/src/sap/ui/model/CompositeType.js +1 -1
  197. package/src/sap/ui/model/DataState.js +1 -1
  198. package/src/sap/ui/model/ListBinding.js +24 -5
  199. package/src/sap/ui/model/MetaModel.js +1 -1
  200. package/src/sap/ui/model/Model.js +5 -10
  201. package/src/sap/ui/model/SelectionModel.js +1 -1
  202. package/src/sap/ui/model/SimpleType.js +1 -1
  203. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  204. package/src/sap/ui/model/TreeBindingAdapter.js +0 -2
  205. package/src/sap/ui/model/TreeBindingUtils.js +2 -0
  206. package/src/sap/ui/model/Type.js +1 -1
  207. package/src/sap/ui/model/analytics/AnalyticalBinding.js +12 -6
  208. package/src/sap/ui/model/analytics/AnalyticalTreeBindingAdapter.js +16 -18
  209. package/src/sap/ui/model/json/JSONModel.js +7 -7
  210. package/src/sap/ui/model/json/JSONPropertyBinding.js +1 -1
  211. package/src/sap/ui/model/message/MessageModel.js +3 -3
  212. package/src/sap/ui/model/message/MessagePropertyBinding.js +1 -1
  213. package/src/sap/ui/model/odata/AnnotationHelper.js +2 -2
  214. package/src/sap/ui/model/odata/AnnotationParser.js +4 -2
  215. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  216. package/src/sap/ui/model/odata/ODataListBinding.js +61 -38
  217. package/src/sap/ui/model/odata/ODataMessageParser.js +2 -2
  218. package/src/sap/ui/model/odata/ODataMetaModel.js +3 -3
  219. package/src/sap/ui/model/odata/ODataMetadata.js +136 -85
  220. package/src/sap/ui/model/odata/ODataModel.js +442 -215
  221. package/src/sap/ui/model/odata/ODataPropertyBinding.js +7 -5
  222. package/src/sap/ui/model/odata/ODataTreeBindingAdapter.js +27 -17
  223. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +440 -260
  224. package/src/sap/ui/model/odata/ODataUtils.js +24 -9
  225. package/src/sap/ui/model/odata/_AnnotationHelperBasics.js +2 -1
  226. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +10 -8
  227. package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +6 -4
  228. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  229. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  230. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  231. package/src/sap/ui/model/odata/type/Date.js +1 -1
  232. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  233. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  234. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  235. package/src/sap/ui/model/odata/type/Decimal.js +5 -1
  236. package/src/sap/ui/model/odata/type/Double.js +1 -1
  237. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  238. package/src/sap/ui/model/odata/type/Int.js +1 -1
  239. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  240. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  241. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  242. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  243. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  244. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  245. package/src/sap/ui/model/odata/type/Single.js +1 -1
  246. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  247. package/src/sap/ui/model/odata/type/String.js +1 -1
  248. package/src/sap/ui/model/odata/type/Time.js +1 -1
  249. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  250. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  251. package/src/sap/ui/model/odata/type/UnitMixin.js +0 -1
  252. package/src/sap/ui/model/odata/v2/Context.js +42 -11
  253. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  254. package/src/sap/ui/model/odata/v2/ODataListBinding.js +205 -88
  255. package/src/sap/ui/model/odata/v2/ODataModel.js +154 -89
  256. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +162 -89
  257. package/src/sap/ui/model/odata/v2/_CreatedContextsCache.js +52 -2
  258. package/src/sap/ui/model/odata/v4/Context.js +48 -7
  259. package/src/sap/ui/model/odata/v4/ODataBinding.js +55 -24
  260. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +67 -19
  261. package/src/sap/ui/model/odata/v4/ODataListBinding.js +211 -78
  262. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  263. package/src/sap/ui/model/odata/v4/ODataModel.js +2 -1
  264. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +36 -23
  265. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -3
  266. package/src/sap/ui/model/odata/v4/lib/_Cache.js +106 -11
  267. package/src/sap/ui/model/odata/v4/lib/_Helper.js +33 -3
  268. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +11 -2
  269. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  270. package/src/sap/ui/model/type/Boolean.js +1 -1
  271. package/src/sap/ui/model/type/Currency.js +1 -1
  272. package/src/sap/ui/model/type/Date.js +1 -1
  273. package/src/sap/ui/model/type/DateInterval.js +1 -1
  274. package/src/sap/ui/model/type/DateTime.js +1 -1
  275. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  276. package/src/sap/ui/model/type/FileSize.js +1 -1
  277. package/src/sap/ui/model/type/Float.js +1 -1
  278. package/src/sap/ui/model/type/Integer.js +1 -1
  279. package/src/sap/ui/model/type/String.js +1 -1
  280. package/src/sap/ui/model/type/Time.js +1 -1
  281. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  282. package/src/sap/ui/model/type/Unit.js +1 -1
  283. package/src/sap/ui/model/xml/XMLModel.js +5 -5
  284. package/src/sap/ui/model/xml/XMLPropertyBinding.js +1 -1
  285. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  286. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  287. package/src/sap/ui/test/actions/Action.js +9 -2
  288. package/src/sap/ui/test/actions/Press.js +28 -1
  289. package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +111 -0
  290. package/src/sap/ui/util/Mobile.js +28 -39
  291. package/src/sap/ui/util/Storage.js +1 -1
  292. package/src/ui5loader.js +6 -6
  293. package/ui5.yaml +244 -1
  294. package/src/sap/ui/core/CustomizingConfiguration.js +0 -47
  295. package/src/sap/ui/thirdparty/baseuri.js +0 -1
  296. package/src/sap/ui/thirdparty/es6-object-assign.js +0 -1
  297. package/src/sap/ui/thirdparty/es6-promise.js +0 -1
  298. package/src/sap/ui/thirdparty/es6-shim-nopromise.js +0 -1
  299. package/src/sap/ui/thirdparty/es6-string-methods.js +0 -1
  300. package/src/sap/ui/thirdparty/flexie.js +0 -1
  301. package/src/sap/ui/thirdparty/unorm.js +0 -1
  302. package/src/sap/ui/thirdparty/unormdata.js +0 -1
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @mixes sap.ui.model.odata.v4.ODataBinding
58
58
  * @public
59
59
  * @since 1.37.0
60
- * @version 1.96.2
60
+ * @version 1.97.0
61
61
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -501,7 +501,7 @@ sap.ui.define([
501
501
  * @see sap.ui.model.odata.v4.ODataBinding#refreshInternal
502
502
  */
503
503
  ODataPropertyBinding.prototype.refreshInternal = function (_sResourcePathPrefix, sGroupId,
504
- bCheckUpdate, _bKeepCacheOnError) {
504
+ bCheckUpdate, bKeepCacheOnError) {
505
505
  var that = this;
506
506
 
507
507
  if (this.isRootBindingSuspended()) {
@@ -509,7 +509,7 @@ sap.ui.define([
509
509
  return SyncPromise.resolve();
510
510
  }
511
511
  return this.oCachePromise.then(function () {
512
- that.fetchCache(that.oContext, false, /*bKeepQueryOptions*/true);
512
+ that.fetchCache(that.oContext, false, /*bKeepQueryOptions*/true, bKeepCacheOnError);
513
513
 
514
514
  if (bCheckUpdate) {
515
515
  return that.checkUpdateInternal(undefined, ChangeReason.Refresh, sGroupId);
@@ -21,6 +21,7 @@ sap.ui.define([
21
21
  // EMPLOYEE($uid=id-1550828854217-16) -> aMatches[0] === "($uid=id-1550828854217-16)"
22
22
  // @see sap.base.util.uid
23
23
  rEndsWithTransientPredicate = /\(\$uid=[-\w]+\)$/,
24
+ rInactive = /^\$inactive\./,
24
25
  sMessagesAnnotation = "@com.sap.vocabularies.Common.v1.Messages",
25
26
  rNumber = /^-?\d+$/,
26
27
  // Matches two cases: segment with predicate or simply predicate:
@@ -140,6 +141,10 @@ sap.ui.define([
140
141
  * An entity with the ETag of the binding for which the deletion was requested. This is
141
142
  * provided if the deletion is delegated from a context binding with empty path to a list
142
143
  * binding.
144
+ * @param {boolean} [bDoNotRequestCount]
145
+ * Whether not to request the new count from the server; useful in case of
146
+ * {@link sap.ui.model.odata.v4.Context#replaceWith} where it is known that the count remains
147
+ * unchanged
143
148
  * @param {function} fnCallback
144
149
  * A function which is called after a transient entity has been deleted from the cache or
145
150
  * after the entity has been deleted from the server and from the cache; the index of the
@@ -150,7 +155,8 @@ sap.ui.define([
150
155
  *
151
156
  * @public
152
157
  */
153
- _Cache.prototype._delete = function (oGroupLock, sEditUrl, sPath, oETagEntity, fnCallback) {
158
+ _Cache.prototype._delete = function (oGroupLock, sEditUrl, sPath, oETagEntity,
159
+ bDoNotRequestCount, fnCallback) {
154
160
  var aSegments = sPath.split("/"),
155
161
  vDeleteProperty = aSegments.pop(),
156
162
  iIndex = rNumber.test(vDeleteProperty) ? Number(vDeleteProperty) : undefined,
@@ -214,6 +220,7 @@ sap.ui.define([
214
220
  [], [sEntityPath]);
215
221
  }),
216
222
  iIndex === undefined // single element or kept-alive not in list
223
+ && !bDoNotRequestCount
217
224
  && that.requestCount(oGroupLock),
218
225
  oGroupLock.unlock() // unlock when all requests have been queued
219
226
  ]);
@@ -395,6 +402,7 @@ sap.ui.define([
395
402
  if (that.fetchTypes().isRejected()) {
396
403
  throw oError;
397
404
  }
405
+ sPostGroupId = sPostGroupId.replace(rInactive, "");
398
406
  return request(sPostPath, that.oRequestor.lockGroup(
399
407
  that.oRequestor.getGroupSubmitMode(sPostGroupId) === "API" ?
400
408
  sPostGroupId : "$parked." + sPostGroupId, that, true, true));
@@ -989,14 +997,23 @@ sap.ui.define([
989
997
  *
990
998
  * @param {string} sPath
991
999
  * The relative path of a binding; must not end with '/'
1000
+ * @param {boolean} [bIgnoreKeptAlive]
1001
+ * Whether to ignore changes which will not be lost by APIs like sort or filter because they
1002
+ * relate to a context which is kept alive.
992
1003
  * @returns {boolean}
993
1004
  * <code>true</code> if there are pending changes
994
1005
  *
995
1006
  * @public
996
1007
  */
997
- _Cache.prototype.hasPendingChangesForPath = function (sPath) {
1008
+ _Cache.prototype.hasPendingChangesForPath = function (sPath, bIgnoreKeptAlive) {
1009
+ var that = this;
1010
+
998
1011
  return Object.keys(this.mPatchRequests).some(function (sRequestPath) {
999
- return isSubPath(sRequestPath, sPath);
1012
+ return isSubPath(sRequestPath, sPath)
1013
+ && !(bIgnoreKeptAlive
1014
+ && that.mPatchRequests[sRequestPath].every(function (oPatchPromise) {
1015
+ return oPatchPromise.$isKeepAlive();
1016
+ }));
1000
1017
  }) || Object.keys(this.mPostRequests).some(function (sRequestPath) {
1001
1018
  return isSubPath(sRequestPath, sPath);
1002
1019
  });
@@ -1620,6 +1637,8 @@ sap.ui.define([
1620
1637
  * @param {function} fnPatchSent
1621
1638
  * The function is called just before a back-end request is sent for the first time.
1622
1639
  * If no back-end request is needed, the function is not called.
1640
+ * @param {function} fnIsKeepAlive
1641
+ * A function to tell whether the entity is kept-alive
1623
1642
  * @returns {Promise}
1624
1643
  * A promise for the PATCH request (resolves with <code>undefined</code>); rejected in case of
1625
1644
  * cancellation or if no <code>fnErrorCallback</code> is given
@@ -1628,7 +1647,8 @@ sap.ui.define([
1628
1647
  * @public
1629
1648
  */
1630
1649
  _Cache.prototype.update = function (oGroupLock, sPropertyPath, vValue, fnErrorCallback,
1631
- sEditUrl, sEntityPath, sUnitOrCurrencyPath, bPatchWithoutSideEffects, fnPatchSent) {
1650
+ sEditUrl, sEntityPath, sUnitOrCurrencyPath, bPatchWithoutSideEffects, fnPatchSent,
1651
+ fnIsKeepAlive) {
1632
1652
  var oPromise,
1633
1653
  aPropertyPath = sPropertyPath.split("/"),
1634
1654
  aUnitOrCurrencyPath,
@@ -1691,6 +1711,7 @@ sap.ui.define([
1691
1711
  mHeaders, oUpdateData, onSubmit, onCancel, /*sMetaPath*/undefined,
1692
1712
  _Helper.buildPath(that.getOriginalResourcePath(oEntity), sEntityPath),
1693
1713
  bAtFront);
1714
+ oPatchPromise.$isKeepAlive = fnIsKeepAlive;
1694
1715
  _Helper.addByPath(that.mPatchRequests, sFullPath, oPatchPromise);
1695
1716
  return SyncPromise.all([
1696
1717
  oPatchPromise,
@@ -1761,9 +1782,10 @@ sap.ui.define([
1761
1782
  if (sTransientGroup === true) {
1762
1783
  throw new Error("No 'update' allowed while waiting for server response");
1763
1784
  }
1764
- if (sTransientGroup.startsWith("$parked.")) {
1785
+ if (sTransientGroup.startsWith("$parked.")
1786
+ || sTransientGroup.startsWith("$inactive.")) {
1765
1787
  sParkedGroup = sTransientGroup;
1766
- sTransientGroup = sTransientGroup.slice(8);
1788
+ sTransientGroup = sTransientGroup.slice(sTransientGroup.indexOf(".") + 1);
1767
1789
  }
1768
1790
  if (sTransientGroup !== sGroupId) {
1769
1791
  throw new Error("The entity will be created via group '" + sTransientGroup
@@ -2073,6 +2095,19 @@ sap.ui.define([
2073
2095
  });
2074
2096
  };
2075
2097
 
2098
+ /**
2099
+ * Replaces the old element at the given index with the given new element.
2100
+ *
2101
+ * @param {number} iIndex - The index
2102
+ * @param {object} oElement - The new element
2103
+ *
2104
+ * @public
2105
+ */
2106
+ _CollectionCache.prototype.doReplaceWith = function (iIndex, oElement) {
2107
+ this.aElements[iIndex] = oElement;
2108
+ this.addKeptElement(oElement); // maintain $byPredicate
2109
+ };
2110
+
2076
2111
  /**
2077
2112
  * Returns a promise to be resolved (synchronously if possible) with an OData object for the
2078
2113
  * requested data.
@@ -2303,7 +2338,8 @@ sap.ui.define([
2303
2338
  oKeptElement = this.aElements.$byPredicate[sPredicate];
2304
2339
  if (oKeptElement) {
2305
2340
  if (oElement["@odata.etag"] === oKeptElement["@odata.etag"]) {
2306
- _Helper.merge(oElement, oKeptElement);
2341
+ _Helper.updateNonExisting(oKeptElement, oElement);
2342
+ oElement = oKeptElement;
2307
2343
  } else if (this.hasPendingChangesForPath(sPredicate)) {
2308
2344
  throw new Error("Modified on client and on server: "
2309
2345
  + this.sResourcePath + sPredicate);
@@ -2456,7 +2492,9 @@ sap.ui.define([
2456
2492
  var aKeyFilters,
2457
2493
  mQueryOptions = _Helper.merge({}, that.mQueryOptions);
2458
2494
 
2459
- _Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
2495
+ if (that.mLateQueryOptions) {
2496
+ _Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
2497
+ }
2460
2498
  delete mQueryOptions.$count;
2461
2499
  delete mQueryOptions.$orderby;
2462
2500
  delete mQueryOptions.$search;
@@ -2588,6 +2626,7 @@ sap.ui.define([
2588
2626
  mQueryOptions,
2589
2627
  mPredicates = {}, // a set of the predicates (as map to true) to speed up the search
2590
2628
  sResourcePath,
2629
+ bSkip,
2591
2630
  mTypeForMetaPath = this.fetchTypes().getResult(),
2592
2631
  that = this;
2593
2632
 
@@ -2662,8 +2701,15 @@ sap.ui.define([
2662
2701
  + this.oRequestor.buildQueryString(this.sMetaPath, mQueryOptions, false, true);
2663
2702
 
2664
2703
  return this.oRequestor.request("GET", sResourcePath, oGroupLock, undefined, undefined,
2665
- undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions
2666
- ).then(function (oResult) {
2704
+ undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions,
2705
+ function (aOtherPaths) {
2706
+ if (arguments.length) {
2707
+ aPaths = aPaths.concat(aOtherPaths);
2708
+ } else {
2709
+ bSkip = true; // my GET was merged
2710
+ return aPaths;
2711
+ }
2712
+ }).then(function (oResult) {
2667
2713
  var oElement, sPredicate, i, n;
2668
2714
 
2669
2715
  function preventKeyPredicateChange(sPath) {
@@ -2674,6 +2720,10 @@ sap.ui.define([
2674
2720
  });
2675
2721
  }
2676
2722
 
2723
+ if (bSkip) {
2724
+ return;
2725
+ }
2726
+
2677
2727
  if (oResult.value.length !== aElements.length) {
2678
2728
  throw new Error("Expected " + aElements.length + " row(s), but instead saw "
2679
2729
  + oResult.value.length);
@@ -2691,6 +2741,38 @@ sap.ui.define([
2691
2741
  });
2692
2742
  };
2693
2743
 
2744
+ /**
2745
+ * Resets this cache to its initial state, but keeps certain elements and their change listeners
2746
+ * alive.
2747
+ *
2748
+ * @param {string[]} aKeptElementPredicates
2749
+ * The key predicates for all kept-alive elements
2750
+ *
2751
+ * @public
2752
+ */
2753
+ _CollectionCache.prototype.reset = function (aKeptElementPredicates) {
2754
+ var mChangeListeners = this.mChangeListeners,
2755
+ mByPredicate = this.aElements.$byPredicate,
2756
+ that = this;
2757
+
2758
+ this.mChangeListeners = {};
2759
+ this.sContext = undefined;
2760
+ this.aElements = [];
2761
+ this.aElements.$byPredicate = {};
2762
+ this.aElements.$count = undefined; // needed for setCount()
2763
+ this.aElements.$created = 0;
2764
+ this.iLimit = Infinity;
2765
+
2766
+ Object.keys(mChangeListeners).forEach(function (sPath) {
2767
+ if (aKeptElementPredicates.includes(sPath.split("/")[0])) {
2768
+ that.mChangeListeners[sPath] = mChangeListeners[sPath];
2769
+ }
2770
+ });
2771
+ aKeptElementPredicates.forEach(function (sPredicate) {
2772
+ that.aElements.$byPredicate[sPredicate] = mByPredicate[sPredicate];
2773
+ });
2774
+ };
2775
+
2694
2776
  //*********************************************************************************************
2695
2777
  // PropertyCache
2696
2778
  //*********************************************************************************************
@@ -3055,6 +3137,7 @@ sap.ui.define([
3055
3137
  oOldValuePromise = this.oPromise,
3056
3138
  mQueryOptions,
3057
3139
  oResult,
3140
+ bSkip,
3058
3141
  that = this;
3059
3142
 
3060
3143
  this.checkSharedRequest();
@@ -3072,7 +3155,15 @@ sap.ui.define([
3072
3155
  + this.oRequestor.buildQueryString(this.sMetaPath, mQueryOptions, false, true);
3073
3156
  oResult = SyncPromise.all([
3074
3157
  this.oRequestor.request("GET", sResourcePath, oGroupLock, undefined, undefined,
3075
- undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions),
3158
+ undefined, undefined, this.sMetaPath, undefined, false, mMergeableQueryOptions,
3159
+ function (aOtherPaths) {
3160
+ if (arguments.length) {
3161
+ aPaths = aPaths.concat(aOtherPaths);
3162
+ } else {
3163
+ bSkip = true; // my GET was merged
3164
+ return aPaths;
3165
+ }
3166
+ }),
3076
3167
  this.fetchTypes(),
3077
3168
  this.fetchValue(_GroupLock.$cached, "") // Note: includes some additional checks
3078
3169
  ]).then(function (aResult) {
@@ -3083,6 +3174,10 @@ sap.ui.define([
3083
3174
  var oNewValue = aResult[0],
3084
3175
  oOldValue = aResult[2];
3085
3176
 
3177
+ if (bSkip) {
3178
+ return;
3179
+ }
3180
+
3086
3181
  // ensure that the new value has a predicate although key properties were not requested
3087
3182
  _Helper.setPrivateAnnotation(oNewValue, "predicate",
3088
3183
  _Helper.getPrivateAnnotation(oOldValue, "predicate"));
@@ -1874,7 +1874,7 @@ sap.ui.define([
1874
1874
  * properties therein.
1875
1875
  *
1876
1876
  * Restrictions:
1877
- * - oTarget and oSource are expected to have the same structure; when there is an
1877
+ * - oTarget and oSource are expected to have the same structure: when there is an
1878
1878
  * object at a given path in either of them, the other one must have an object or
1879
1879
  * <code>null</code>.
1880
1880
  * - no change events for collection-valued properties; list bindings without own cache must
@@ -1937,7 +1937,7 @@ sap.ui.define([
1937
1937
  * advertised actions.
1938
1938
  *
1939
1939
  * Restrictions:
1940
- * - oOldObject and oNewObject are expected to have the same structure; when there is an
1940
+ * - oOldObject and oNewObject are expected to have the same structure: when there is an
1941
1941
  * object at a given path in either of them, the other one must have an object or
1942
1942
  * <code>null</code>.
1943
1943
  * - no change events for collection-valued properties
@@ -2004,6 +2004,36 @@ sap.ui.define([
2004
2004
  });
2005
2005
  },
2006
2006
 
2007
+ /**
2008
+ * Recursively adds all properties of oSource to oTarget that do not exist there yet.
2009
+ * Ensures that object references in oTarget remain unchanged.
2010
+ *
2011
+ * Restrictions:
2012
+ * - oTarget and oSource are expected to have the same structure: when there is an
2013
+ * object at a given path in either of them, the other one must have an object.
2014
+ * <code>null</code>, or no property at all.
2015
+ * - arrays are not merged in any way, they are taken either from oSource or from oTarget
2016
+ *
2017
+ * @param {object} oTarget - The target
2018
+ * @param {object} oSource - The source
2019
+ */
2020
+ updateNonExisting : function (oTarget, oSource) {
2021
+ Object.keys(oSource).forEach(function (sKey) {
2022
+ var vSourceValue = oSource[sKey],
2023
+ vTargetValue;
2024
+
2025
+ if (sKey in oTarget) {
2026
+ vTargetValue = oTarget[sKey];
2027
+ if (vSourceValue && vTargetValue
2028
+ && typeof vSourceValue === "object" && !Array.isArray(vSourceValue)) {
2029
+ _Helper.updateNonExisting(vTargetValue, vSourceValue);
2030
+ }
2031
+ } else {
2032
+ oTarget[sKey] = vSourceValue;
2033
+ }
2034
+ });
2035
+ },
2036
+
2007
2037
  /**
2008
2038
  * Updates the old value with the given new value for the selected properties (see
2009
2039
  * {@link #updateExisting}). If no selected properties are given or if "*" is contained in
@@ -2011,7 +2041,7 @@ sap.ui.define([
2011
2041
  * changed properties.
2012
2042
  *
2013
2043
  * Restrictions:
2014
- * - oOldValue and oNewValue are expected to have the same structure; when there is an
2044
+ * - oOldValue and oNewValue are expected to have the same structure: when there is an
2015
2045
  * object at a given path in either of them, the other one must have an object or
2016
2046
  * <code>null</code>.
2017
2047
  * - "*" in aSelect does not work correctly if oNewValue contains navigation properties
@@ -1062,7 +1062,7 @@ sap.ui.define([
1062
1062
  * Merges all GET requests that are marked as mergeable, have the same resource path and the
1063
1063
  * same query options besides $expand and $select. One request with the merged $expand and
1064
1064
  * $select is left in the queue and all merged requests get the response of this one remaining
1065
- * request.
1065
+ * request. For $mergeRequests, see parameter fnMergeRequests of {@link #request}.
1066
1066
  *
1067
1067
  * @param {object[]} aRequests The batch queue
1068
1068
  * @returns {object[]} The adjusted batch queue
@@ -1076,6 +1076,9 @@ sap.ui.define([
1076
1076
  if (oCandidate.$queryOptions && oRequest.url === oCandidate.url) {
1077
1077
  _Helper.aggregateExpandSelect(oCandidate.$queryOptions, oRequest.$queryOptions);
1078
1078
  oRequest.$resolve(oCandidate.$promise);
1079
+ if (oCandidate.$mergeRequests && oRequest.$mergeRequests) {
1080
+ oCandidate.$mergeRequests(oRequest.$mergeRequests());
1081
+ }
1079
1082
 
1080
1083
  return true;
1081
1084
  }
@@ -1545,6 +1548,10 @@ sap.ui.define([
1545
1548
  * Query options if it is allowed to merge this request with another request having the same
1546
1549
  * sResourcePath (only allowed for GET requests); the resulting resource path is the path from
1547
1550
  * sResourcePath plus the merged query options; may only contain $expand and $select
1551
+ * @param {function(string[]):string[]} [fnMergeRequests]
1552
+ * Function which is called during merging of GET requests. If a merged request has a
1553
+ * function given, this function will be called and its return value is
1554
+ * given to the one remaining request's function as a parameter.
1548
1555
  * @returns {Promise}
1549
1556
  * A promise on the outcome of the HTTP request; it will be rejected with an error having the
1550
1557
  * property <code>canceled = true</code> instead of sending a request if
@@ -1555,7 +1562,8 @@ sap.ui.define([
1555
1562
  * @public
1556
1563
  */
1557
1564
  _Requestor.prototype.request = function (sMethod, sResourcePath, oGroupLock, mHeaders, oPayload,
1558
- fnSubmit, fnCancel, sMetaPath, sOriginalResourcePath, bAtFront, mQueryOptions) {
1565
+ fnSubmit, fnCancel, sMetaPath, sOriginalResourcePath, bAtFront, mQueryOptions,
1566
+ fnMergeRequests) {
1559
1567
  var iChangeSetNo,
1560
1568
  oError,
1561
1569
  sGroupId = oGroupLock && oGroupLock.getGroupId() || "$direct",
@@ -1599,6 +1607,7 @@ sap.ui.define([
1599
1607
  that.mFinalHeaders),
1600
1608
  body : oPayload,
1601
1609
  $cancel : fnCancel,
1610
+ $mergeRequests : fnMergeRequests,
1602
1611
  $metaPath : sMetaPath,
1603
1612
  $queryOptions : mQueryOptions,
1604
1613
  $reject : fnReject,
@@ -228,7 +228,7 @@ sap.ui.define([
228
228
  *
229
229
  * @extends sap.ui.model.Model
230
230
  * @public
231
- * @version 1.96.2
231
+ * @version 1.97.0
232
232
  */
233
233
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
234
234
 
@@ -19,7 +19,7 @@ sap.ui.define(['sap/ui/model/SimpleType', 'sap/ui/model/FormatException', 'sap/u
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.96.2
22
+ * @version 1.97.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @extends sap.ui.model.CompositeType
33
33
  *
34
34
  * @author SAP SE
35
- * @version 1.96.2
35
+ * @version 1.97.0
36
36
  *
37
37
  * @public
38
38
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.96.2
29
+ * @version 1.97.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @extends sap.ui.model.CompositeType
34
34
  *
35
35
  * @author SAP SE
36
- * @version 1.96.2
36
+ * @version 1.97.0
37
37
  *
38
38
  * @public
39
39
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.96.2
22
+ * @version 1.97.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.96.2
22
+ * @version 1.97.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.96.2
27
+ * @version 1.97.0
28
28
  *
29
29
  * @public
30
30
  * @param {object} [oFormatOptions] formatting options. Supports the same options as {@link sap.ui.core.format.FileSizeFormat.getInstance FileSizeFormat.getInstance}
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.96.2
29
+ * @version 1.97.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.NumberFormat NumberFormat}.
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.96.2
29
+ * @version 1.97.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.NumberFormat NumberFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.96.2
27
+ * @version 1.97.0
28
28
  *
29
29
  * @alias sap.ui.model.type.String
30
30
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.96.2
22
+ * @version 1.97.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.96.2
22
+ * @version 1.97.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  *
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.96.2
50
+ * @version 1.97.0
51
51
  *
52
52
  * @public
53
53
  * @param {object} [oFormatOptions]
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.model.ClientModel
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.96.2
50
+ * @version 1.97.0
51
51
  *
52
52
  * @param {object} oData either the URL where to load the XML from or an XML
53
53
  * @public
@@ -181,7 +181,7 @@ sap.ui.define([
181
181
  this.oNameSpaces[sPrefix] = sNameSpace;
182
182
  };
183
183
 
184
- /**
184
+ /*
185
185
  * @see sap.ui.model.Model.prototype.bindProperty
186
186
  */
187
187
  XMLModel.prototype.bindProperty = function(sPath, oContext, mParameters) {
@@ -189,7 +189,7 @@ sap.ui.define([
189
189
  return oBinding;
190
190
  };
191
191
 
192
- /**
192
+ /*
193
193
  * @see sap.ui.model.Model.prototype.bindList
194
194
  */
195
195
  XMLModel.prototype.bindList = function(sPath, oContext, aSorters, aFilters, mParameters) {
@@ -197,7 +197,7 @@ sap.ui.define([
197
197
  return oBinding;
198
198
  };
199
199
 
200
- /**
200
+ /*
201
201
  * @see sap.ui.model.Model.prototype.bindTree
202
202
  */
203
203
  XMLModel.prototype.bindTree = function(sPath, oContext, aFilters, mParameters, aSorters) {
@@ -267,7 +267,7 @@ sap.ui.define([
267
267
  XMLModel.prototype.getProperty = function(sPath, oContext) {
268
268
  var oResult = this._getObject(sPath, oContext);
269
269
  if (oResult && typeof oResult != "string") {
270
- oResult = oResult[0] ? oResult[0].textContent : ""; // TODO is this right? shouldn't we return the object?!
270
+ oResult = oResult[0] ? oResult[0].textContent : "";
271
271
  }
272
272
  return oResult;
273
273
  };
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  */
29
29
  var XMLPropertyBinding = ClientPropertyBinding.extend("sap.ui.model.xml.XMLPropertyBinding");
30
30
 
31
- /**
31
+ /*
32
32
  * @see sap.ui.model.PropertyBinding.prototype.setValue
33
33
  */
34
34
  XMLPropertyBinding.prototype.setValue = function(oValue){
@@ -53,7 +53,7 @@ sap.ui.define(['sap/ui/core/Core', "sap/ui/VersionInfo"],
53
53
  * @namespace
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.96.2
56
+ * @version 1.97.0
57
57
  *
58
58
  * @public
59
59
  * @since 1.48.0
@@ -27,7 +27,7 @@ sap.ui.define([ 'sap/ui/core/Element', 'sap/ui/core/Control', 'sap/ui/core/Core'
27
27
  * @namespace
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.96.2
30
+ * @version 1.97.0
31
31
  *
32
32
  * @public
33
33
  * @since 1.48.0
@@ -207,9 +207,12 @@ function (ManagedObject, QUnitUtils, Opa5, Device, jQueryDOM, _OpaLogger) {
207
207
  *
208
208
  * @param {string} sName Name of the mouse event
209
209
  * @param {Element} oDomRef DOM element on which the event is going to be triggered
210
+ * @param {boolean} bShiftKey Indicates whether the shift key is down in addition
211
+ * @param {boolean} bAltKey Indicates whether the alt key is down in addition
212
+ * @param {boolean} bCtrlKey Indicates whether the ctrl key is down in addition
210
213
  * @private
211
214
  */
212
- _createAndDispatchMouseEvent: function (sName, oDomRef) {
215
+ _createAndDispatchMouseEvent: function (sName, oDomRef, bShiftKey, bAltKey, bCtrlKey) {
213
216
  // ignore scrolled down stuff (client X, Y not set)
214
217
  // and assume stuff is over the whole screen (screen X, Y not set)
215
218
  // See file jquery.sap.events.js for some insights to the magic
@@ -224,8 +227,12 @@ function (ManagedObject, QUnitUtils, Opa5, Device, jQueryDOM, _OpaLogger) {
224
227
  radiusY: 1,
225
228
  rotationAngle: 0,
226
229
  button: iLeftMouseButtonIndex,
227
- type: sName // include the type so jQuery.event.fixHooks can copy properties properly
230
+ type: sName, // include the type so jQuery.event.fixHooks can copy properties properly
231
+ shiftKey: bShiftKey,
232
+ altKey: bAltKey,
233
+ ctrlKey: bCtrlKey
228
234
  });
235
+
229
236
  oDomRef.dispatchEvent(oMouseEvent);
230
237
  },
231
238