@openui5/sap.ui.core 1.94.0 → 1.95.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 (316) hide show
  1. package/.eslintrc.json +1 -2
  2. package/.reuse/dep5 +1 -6
  3. package/THIRDPARTY.txt +3 -9
  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 +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 +6 -2
  11. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  12. package/src/sap/base/util/restricted/_castArray.js +1 -1
  13. package/src/sap/base/util/restricted/_compact.js +1 -1
  14. package/src/sap/base/util/restricted/_curry.js +1 -1
  15. package/src/sap/base/util/restricted/_debounce.js +1 -1
  16. package/src/sap/base/util/restricted/_difference.js +1 -1
  17. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  18. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  22. package/src/sap/base/util/restricted/_flatten.js +1 -1
  23. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_intersection.js +1 -1
  26. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  27. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  28. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  29. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isNil.js +1 -1
  31. package/src/sap/base/util/restricted/_max.js +1 -1
  32. package/src/sap/base/util/restricted/_merge.js +1 -1
  33. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  34. package/src/sap/base/util/restricted/_min.js +1 -1
  35. package/src/sap/base/util/restricted/_omit.js +1 -1
  36. package/src/sap/base/util/restricted/_pick.js +1 -1
  37. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  38. package/src/sap/base/util/restricted/_throttle.js +1 -1
  39. package/src/sap/base/util/restricted/_toArray.js +1 -1
  40. package/src/sap/base/util/restricted/_union.js +1 -1
  41. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  42. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  43. package/src/sap/base/util/restricted/_uniq.js +1 -1
  44. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  45. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  46. package/src/sap/base/util/restricted/_without.js +1 -1
  47. package/src/sap/base/util/restricted/_xor.js +1 -1
  48. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  49. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  50. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  51. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  52. package/src/sap/ui/Device.js +14 -10
  53. package/src/sap/ui/Global.js +4 -4
  54. package/src/sap/ui/base/DataType.js +14 -8
  55. package/src/sap/ui/base/Event.js +1 -1
  56. package/src/sap/ui/base/EventProvider.js +1 -1
  57. package/src/sap/ui/base/Interface.js +1 -1
  58. package/src/sap/ui/base/ManagedObject.js +11 -6
  59. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  60. package/src/sap/ui/base/Metadata.js +1 -1
  61. package/src/sap/ui/base/Object.js +1 -1
  62. package/src/sap/ui/base/ObjectPool.js +1 -1
  63. package/src/sap/ui/core/.library +5 -5
  64. package/src/sap/ui/core/AppCacheBuster.js +4 -4
  65. package/src/sap/ui/core/BusyIndicator.js +1 -1
  66. package/src/sap/ui/core/Component.js +272 -125
  67. package/src/sap/ui/core/ComponentContainer.js +3 -5
  68. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  69. package/src/sap/ui/core/ComponentSupport.js +1 -1
  70. package/src/sap/ui/core/Configuration.js +62 -31
  71. package/src/sap/ui/core/Control.js +1 -1
  72. package/src/sap/ui/core/Core.js +15 -9
  73. package/src/sap/ui/core/CustomData.js +1 -1
  74. package/src/sap/ui/core/CustomizingConfiguration.js +35 -260
  75. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  76. package/src/sap/ui/core/Element.js +1 -1
  77. package/src/sap/ui/core/ElementMetadata.js +1 -1
  78. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  79. package/src/sap/ui/core/EventBus.js +1 -1
  80. package/src/sap/ui/core/ExtensionPoint.js +6 -13
  81. package/src/sap/ui/core/Fragment.js +29 -31
  82. package/src/sap/ui/core/HTML.js +1 -1
  83. package/src/sap/ui/core/History.js +1 -1
  84. package/src/sap/ui/core/Icon.js +5 -5
  85. package/src/sap/ui/core/IconPool.js +15 -1097
  86. package/src/sap/ui/core/IconRenderer.js +2 -2
  87. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  88. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  89. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  90. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  91. package/src/sap/ui/core/InvisibleText.js +1 -1
  92. package/src/sap/ui/core/Item.js +1 -1
  93. package/src/sap/ui/core/LabelEnablement.js +1 -1
  94. package/src/sap/ui/core/LayoutData.js +1 -1
  95. package/src/sap/ui/core/ListItem.js +1 -1
  96. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  97. package/src/sap/ui/core/Locale.js +26 -4
  98. package/src/sap/ui/core/LocaleData.js +1 -1
  99. package/src/sap/ui/core/Manifest.js +2 -60
  100. package/src/sap/ui/core/Message.js +1 -1
  101. package/src/sap/ui/core/RenderManager.js +17 -3
  102. package/src/sap/ui/core/Renderer.js +13 -3
  103. package/src/sap/ui/core/ResizeHandler.js +1 -1
  104. package/src/sap/ui/core/ScrollBar.js +1 -1
  105. package/src/sap/ui/core/SeparatorItem.js +1 -1
  106. package/src/sap/ui/core/ShortcutHintsMixin.js +14 -7
  107. package/src/sap/ui/core/Title.js +1 -1
  108. package/src/sap/ui/core/TooltipBase.js +1 -1
  109. package/src/sap/ui/core/UIArea.js +1 -1
  110. package/src/sap/ui/core/UIComponent.js +17 -8
  111. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  112. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  113. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  114. package/src/sap/ui/core/XMLComposite.js +1 -1
  115. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  116. package/src/sap/ui/core/XMLTemplateProcessor.js +1 -1
  117. package/src/sap/ui/core/_IconRegistry.js +1215 -0
  118. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  119. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  120. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  122. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  124. package/src/sap/ui/core/hyphenation/Hyphenation.js +61 -80
  125. package/src/sap/ui/core/library.js +3 -3
  126. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  127. package/src/sap/ui/core/message/Message.js +1 -1
  128. package/src/sap/ui/core/message/MessageManager.js +13 -15
  129. package/src/sap/ui/core/message/MessageParser.js +1 -1
  130. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  131. package/src/sap/ui/core/messagebundle_de.properties +1 -1
  132. package/src/sap/ui/core/messagebundle_fr.properties +1 -1
  133. package/src/sap/ui/core/messagebundle_it.properties +1 -1
  134. package/src/sap/ui/core/messagebundle_pl.properties +1 -1
  135. package/src/sap/ui/core/messagebundle_th.properties +2 -2
  136. package/src/sap/ui/core/mvc/Controller.js +1 -1
  137. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +30 -32
  138. package/src/sap/ui/core/mvc/ControllerMetadata.js +18 -18
  139. package/src/sap/ui/core/mvc/HTMLView.js +2 -2
  140. package/src/sap/ui/core/mvc/JSONView.js +2 -2
  141. package/src/sap/ui/core/mvc/JSView.js +2 -2
  142. package/src/sap/ui/core/mvc/TemplateView.js +2 -2
  143. package/src/sap/ui/core/mvc/View.js +58 -85
  144. package/src/sap/ui/core/mvc/XMLView.js +2 -2
  145. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  146. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  147. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  148. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  149. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  150. package/src/sap/ui/core/routing/Route.js +10 -1
  151. package/src/sap/ui/core/routing/Router.js +8 -5
  152. package/src/sap/ui/core/routing/Targets.js +26 -0
  153. package/src/sap/ui/core/routing/async/Route.js +6 -3
  154. package/src/sap/ui/core/routing/async/Target.js +26 -0
  155. package/src/sap/ui/core/routing/sync/Target.js +15 -0
  156. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  157. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  158. package/src/sap/ui/core/service/Service.js +1 -1
  159. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  160. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  161. package/src/sap/ui/core/support/Plugin.js +1 -1
  162. package/src/sap/ui/core/support/Support.js +1 -1
  163. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  165. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  166. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  167. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  168. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  169. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  170. package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -2
  171. package/src/sap/ui/core/support/support.css +2 -8
  172. package/src/sap/ui/core/support/techinfo/TechnicalInfo.fragment.xml +1 -0
  173. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +149 -72
  174. package/src/sap/ui/core/theming/Parameters.js +21 -0
  175. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  176. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  177. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  178. package/src/sap/ui/core/tmpl/Template.js +1 -1
  179. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  180. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  181. package/src/sap/ui/core/util/Export.js +1 -1
  182. package/src/sap/ui/core/util/ExportCell.js +1 -1
  183. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  184. package/src/sap/ui/core/util/ExportRow.js +1 -1
  185. package/src/sap/ui/core/util/ExportType.js +1 -1
  186. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  187. package/src/sap/ui/core/util/File.js +1 -1
  188. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  189. package/src/sap/ui/core/util/MockServer.js +1 -1
  190. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  191. package/src/sap/ui/core/util/XMLPreprocessor.js +11 -12
  192. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  193. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  194. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  195. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  196. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  197. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  198. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  199. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  200. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  201. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  202. package/src/sap/ui/debug/ControlTree.js +1 -1
  203. package/src/sap/ui/debug/DebugEnv.js +1 -1
  204. package/src/sap/ui/debug/PropertyList.js +1 -1
  205. package/src/sap/ui/model/ClientModel.js +1 -1
  206. package/src/sap/ui/model/ClientPropertyBinding.js +3 -1
  207. package/src/sap/ui/model/ClientTreeBinding.js +14 -8
  208. package/src/sap/ui/model/CompositeDataState.js +1 -1
  209. package/src/sap/ui/model/CompositeType.js +1 -1
  210. package/src/sap/ui/model/DataState.js +1 -1
  211. package/src/sap/ui/model/MetaModel.js +1 -1
  212. package/src/sap/ui/model/Model.js +1 -1
  213. package/src/sap/ui/model/SelectionModel.js +1 -1
  214. package/src/sap/ui/model/SimpleType.js +1 -1
  215. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  216. package/src/sap/ui/model/Type.js +1 -1
  217. package/src/sap/ui/model/analytics/AnalyticalBinding.js +6 -3
  218. package/src/sap/ui/model/base/ManagedObjectModel.js +4 -0
  219. package/src/sap/ui/model/json/JSONModel.js +4 -2
  220. package/src/sap/ui/model/message/MessageModel.js +4 -2
  221. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  222. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  223. package/src/sap/ui/model/odata/ODataMetaModel.js +3 -1
  224. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  225. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  226. package/src/sap/ui/model/odata/ODataUtils.js +12 -10
  227. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  228. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  229. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  230. package/src/sap/ui/model/odata/type/Date.js +1 -1
  231. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  232. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  233. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  234. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  235. package/src/sap/ui/model/odata/type/Double.js +1 -1
  236. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  237. package/src/sap/ui/model/odata/type/Int.js +1 -1
  238. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  239. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  240. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  241. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  242. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  243. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  244. package/src/sap/ui/model/odata/type/Single.js +1 -1
  245. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  246. package/src/sap/ui/model/odata/type/String.js +1 -1
  247. package/src/sap/ui/model/odata/type/Time.js +1 -1
  248. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  249. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  250. package/src/sap/ui/model/odata/v2/Context.js +2 -2
  251. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  252. package/src/sap/ui/model/odata/v2/ODataModel.js +179 -109
  253. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +29 -20
  254. package/src/sap/ui/model/odata/v4/Context.js +1 -1
  255. package/src/sap/ui/model/odata/v4/ODataBinding.js +3 -3
  256. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +76 -11
  257. package/src/sap/ui/model/odata/v4/ODataListBinding.js +74 -4
  258. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +3 -1
  259. package/src/sap/ui/model/odata/v4/ODataModel.js +25 -12
  260. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +10 -0
  261. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -7
  262. package/src/sap/ui/model/odata/v4/lib/_Cache.js +8 -5
  263. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +39 -3
  264. package/src/sap/ui/model/resource/ResourceModel.js +5 -2
  265. package/src/sap/ui/model/type/Boolean.js +1 -1
  266. package/src/sap/ui/model/type/Currency.js +1 -1
  267. package/src/sap/ui/model/type/Date.js +1 -1
  268. package/src/sap/ui/model/type/DateInterval.js +1 -1
  269. package/src/sap/ui/model/type/DateTime.js +1 -1
  270. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  271. package/src/sap/ui/model/type/FileSize.js +1 -1
  272. package/src/sap/ui/model/type/Float.js +1 -1
  273. package/src/sap/ui/model/type/Integer.js +1 -1
  274. package/src/sap/ui/model/type/String.js +1 -1
  275. package/src/sap/ui/model/type/Time.js +1 -1
  276. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  277. package/src/sap/ui/model/type/Unit.js +1 -1
  278. package/src/sap/ui/model/xml/XMLModel.js +4 -2
  279. package/src/sap/ui/performance/trace/Interaction.js +31 -16
  280. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  281. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  282. package/src/sap/ui/test/TestUtils.js +11 -4
  283. package/src/sap/ui/test/matchers/I18NText.js +29 -11
  284. package/src/sap/ui/test/opaQunit.js +5 -0
  285. package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly.js +1196 -0
  286. package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly_Loader.js +797 -0
  287. package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.asm.js +108 -127
  288. package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.wasm +0 -0
  289. package/src/sap/ui/thirdparty/hyphenopoly/patterns/bg.hpb +0 -0
  290. package/src/sap/ui/thirdparty/hyphenopoly/patterns/ca.hpb +0 -0
  291. package/src/sap/ui/thirdparty/hyphenopoly/patterns/da.hpb +0 -0
  292. package/src/sap/ui/thirdparty/hyphenopoly/patterns/de.hpb +0 -0
  293. package/src/sap/ui/thirdparty/hyphenopoly/patterns/el-monoton.hpb +0 -0
  294. package/src/sap/ui/thirdparty/hyphenopoly/patterns/en-us.hpb +0 -0
  295. package/src/sap/ui/thirdparty/hyphenopoly/patterns/es.hpb +0 -0
  296. package/src/sap/ui/thirdparty/hyphenopoly/patterns/et.hpb +0 -0
  297. package/src/sap/ui/thirdparty/hyphenopoly/patterns/fi.hpb +0 -0
  298. package/src/sap/ui/thirdparty/hyphenopoly/patterns/fr.hpb +0 -0
  299. package/src/sap/ui/thirdparty/hyphenopoly/patterns/hi.hpb +0 -0
  300. package/src/sap/ui/thirdparty/hyphenopoly/patterns/hr.hpb +0 -0
  301. package/src/sap/ui/thirdparty/hyphenopoly/patterns/hu.hpb +0 -0
  302. package/src/sap/ui/thirdparty/hyphenopoly/patterns/it.hpb +0 -0
  303. package/src/sap/ui/thirdparty/hyphenopoly/patterns/lt.hpb +0 -0
  304. package/src/sap/ui/thirdparty/hyphenopoly/patterns/nb-no.hpb +0 -0
  305. package/src/sap/ui/thirdparty/hyphenopoly/patterns/nl.hpb +0 -0
  306. package/src/sap/ui/thirdparty/hyphenopoly/patterns/pt.hpb +0 -0
  307. package/src/sap/ui/thirdparty/hyphenopoly/patterns/ru.hpb +0 -0
  308. package/src/sap/ui/thirdparty/hyphenopoly/patterns/sl.hpb +0 -0
  309. package/src/sap/ui/thirdparty/hyphenopoly/patterns/sv.hpb +0 -0
  310. package/src/sap/ui/thirdparty/hyphenopoly/patterns/th.hpb +0 -0
  311. package/src/sap/ui/thirdparty/hyphenopoly/patterns/tr.hpb +0 -0
  312. package/src/sap/ui/thirdparty/hyphenopoly/patterns/uk.hpb +0 -0
  313. package/src/sap/ui/util/Storage.js +1 -1
  314. package/src/sap/ui/util/isCrossOriginURL.js +16 -6
  315. package/src/sap/ui/core/support/plugins/MessageTest.js +0 -96
  316. package/src/sap/ui/thirdparty/hyphenopoly/hyphenopoly.bundle.js +0 -860
@@ -228,7 +228,7 @@ sap.ui.define([
228
228
  * @extends sap.ui.base.ManagedObject
229
229
  * @abstract
230
230
  * @author SAP SE
231
- * @version 1.94.0
231
+ * @version 1.95.0
232
232
  * @alias sap.ui.core.Component
233
233
  * @since 1.9.2
234
234
  */
@@ -383,6 +383,64 @@ sap.ui.define([
383
383
  }
384
384
  });
385
385
 
386
+ /**
387
+ * Helper function to retrieve owner (extension) component holding the customizing configuration.
388
+ * @param {string|sap.ui.core.Component|sap.ui.base.ManagedObject} vObject Component Id, component instance or ManagedObject
389
+ * @throws {Error} If 'getExtensionComponent' function is given, but does not return an instance.
390
+ * @returns {sap.ui.core.Component|undefined} The owner component or <code>undefined</code>
391
+ */
392
+ function getCustomizingComponent(vObject) {
393
+ var oComponent, sComponentId;
394
+
395
+ if (!sap.ui.getCore().getConfiguration().getDisableCustomizing()) {
396
+ if (typeof vObject === "string") {
397
+ sComponentId = vObject;
398
+ } else if (vObject && typeof vObject.isA === "function" && !vObject.isA("sap.ui.core.Component")) {
399
+ sComponentId = Component.getOwnerIdFor(vObject);
400
+ } else {
401
+ oComponent = vObject;
402
+ }
403
+
404
+ if (sComponentId) {
405
+ oComponent = Component.get(sComponentId);
406
+ }
407
+
408
+ if (oComponent) {
409
+ if (oComponent.getExtensionComponent) {
410
+ oComponent = oComponent.getExtensionComponent();
411
+ if (!oComponent) {
412
+ throw new Error("getExtensionComponent() must return an instance.");
413
+ }
414
+ }
415
+ }
416
+ }
417
+ return oComponent;
418
+ }
419
+
420
+ /**
421
+ * @param {string|sap.ui.base.ManagedObject|sap.ui.core.Component} vObject Either Component Id, ManagedObject or component instance
422
+ * @param {object} mOptions Info object to retrieve the customizing config
423
+ * @param {object} mOptions.type Either <code>sap.ui.viewExtension</code>, <code>sap.ui.controllerReplacement</code>, <code>sap.ui.viewReplacement</code>, <code>sap.ui.viewModification</code> or <code>sap.ui.controllerExtension</code>
424
+ * @param {object} mOptions.name Name of the customizing configuration
425
+ * @param {object} [mOptions.extensionName] If type <code>sap.ui.viewExtension</code>, the extension name must be provided
426
+ * @param {object} oExtInfo Config object containing the view/fragment and extension name
427
+ * @throws {Error} If 'getExtensionComponent' function is given, but does not return an instance.
428
+ * @returns {object|undefined} Object containing the customizing config or <code>undefined</code>
429
+ * @static
430
+ * @private ui5-restricted sap.ui.core
431
+ */
432
+ Component.getCustomizing = function(vObject, mOptions) {
433
+ var sType = mOptions.type,
434
+ sPath = "/sap.ui5/extends/extensions/" + sType + "/" + mOptions.name;
435
+
436
+ if (sType === "sap.ui.viewExtensions") {
437
+ sPath += "/" + mOptions.extensionName;
438
+ }
439
+
440
+ var oComponent = getCustomizingComponent(vObject);
441
+ return oComponent ? oComponent._getManifestEntry(sPath, true) : undefined;
442
+ };
443
+
386
444
  /**
387
445
  * Returns the metadata for the Component class.
388
446
  *
@@ -874,10 +932,18 @@ sap.ui.define([
874
932
  * @private
875
933
  */
876
934
  Component.prototype._initComponentModels = function(mModels, mDataSources, mCacheTokens) {
935
+ var sComponentName = this.getManifestObject().getComponentName();
877
936
 
878
- var mAllModelConfigurations = Component._createManifestModelConfigurations({
937
+ var mAllModelConfigs = Component._findManifestModelClasses({
879
938
  models: mModels,
880
939
  dataSources: mDataSources,
940
+ componentName: sComponentName
941
+ });
942
+ Component._loadManifestModelClasses(mAllModelConfigs, sComponentName);
943
+
944
+ var mAllModelConfigurations = Component._createManifestModelConfigurations({
945
+ models: mAllModelConfigs,
946
+ dataSources: mDataSources,
881
947
  component: this,
882
948
  mergeParent: true,
883
949
  cacheTokens: mCacheTokens,
@@ -898,7 +964,7 @@ sap.ui.define([
898
964
  }
899
965
 
900
966
  // create all models which are not created, yet.
901
- var mCreatedModels = Component._createManifestModels(mModelConfigurations, this.toString());
967
+ var mCreatedModels = Component._createManifestModels(mModelConfigurations, sComponentName);
902
968
  for (sModelName in mCreatedModels) {
903
969
  // keep the model instance to be able to destroy the created models on component destroy
904
970
  this._mManifestModels[sModelName] = mCreatedModels[sModelName];
@@ -1373,6 +1439,102 @@ sap.ui.define([
1373
1439
 
1374
1440
  };
1375
1441
 
1442
+ Component._findManifestModelClasses = function(mOptions) {
1443
+ if (!mOptions.models) {
1444
+ // skipping model creation because of missing sap.ui5 models manifest entry
1445
+ return null;
1446
+ }
1447
+
1448
+ var mConfig = {
1449
+
1450
+ // ui5 model definitions
1451
+ models: mOptions.models,
1452
+
1453
+ // optional dataSources from "sap.app" manifest
1454
+ dataSources: mOptions.dataSources || {},
1455
+
1456
+ // to identify where the dataSources/models have been originally defined
1457
+ origin: {
1458
+ dataSources: {},
1459
+ models: {}
1460
+ }
1461
+ };
1462
+
1463
+ var sLogComponentName = mOptions.componentName;
1464
+ var mModelConfigurations = {};
1465
+
1466
+ // create a model for each ["sap.ui5"]["models"] entry
1467
+ for (var sModelName in mConfig.models) {
1468
+
1469
+ var oModelConfig = mConfig.models[sModelName];
1470
+
1471
+ // normalize dataSource shorthand, e.g.
1472
+ // "myModel": "myDataSource" => "myModel": { dataSource: "myDataSource" }
1473
+ if (typeof oModelConfig === 'string') {
1474
+ oModelConfig = {
1475
+ dataSource: oModelConfig
1476
+ };
1477
+ }
1478
+
1479
+ // check for referenced dataSource entry and read out settings/uri/type
1480
+ // if not already provided in model config
1481
+ if (oModelConfig.dataSource) {
1482
+
1483
+ var oDataSource = mConfig.dataSources && mConfig.dataSources[oModelConfig.dataSource];
1484
+ if (typeof oDataSource === 'object') {
1485
+
1486
+ // default type is OData
1487
+ if (oDataSource.type === undefined) {
1488
+ oDataSource.type = 'OData';
1489
+ }
1490
+
1491
+ var sODataVersion;
1492
+
1493
+ // read out type and translate to model class
1494
+ // (only if no model type was set to allow overriding)
1495
+ if (!oModelConfig.type) {
1496
+ switch (oDataSource.type) {
1497
+ case 'OData':
1498
+ sODataVersion = oDataSource.settings && oDataSource.settings.odataVersion;
1499
+ if (sODataVersion === "4.0") {
1500
+ oModelConfig.type = 'sap.ui.model.odata.v4.ODataModel';
1501
+ } else if (!sODataVersion || sODataVersion === "2.0") {
1502
+ // 2.0 is the default in case no version is provided
1503
+ oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1504
+ } else {
1505
+ Log.error('Component Manifest: Provided OData version "' + sODataVersion + '" in ' +
1506
+ 'dataSource "' + oModelConfig.dataSource + '" for model "' + sModelName + '" is unknown. ' +
1507
+ 'Falling back to default model type "sap.ui.model.odata.v2.ODataModel".',
1508
+ '["sap.app"]["dataSources"]["' + oModelConfig.dataSource + '"]', sLogComponentName);
1509
+ oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1510
+ }
1511
+ break;
1512
+ case 'JSON':
1513
+ oModelConfig.type = 'sap.ui.model.json.JSONModel';
1514
+ break;
1515
+ case 'XML':
1516
+ oModelConfig.type = 'sap.ui.model.xml.XMLModel';
1517
+ break;
1518
+ default:
1519
+ // for custom dataSource types, the class should already be specified in the sap.ui5 models config
1520
+ }
1521
+ }
1522
+ }
1523
+ }
1524
+
1525
+ // model type is required!
1526
+ if (!oModelConfig.type) {
1527
+ Log.error("Component Manifest: Missing \"type\" for model \"" + sModelName + "\"", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1528
+ continue;
1529
+ }
1530
+
1531
+ // Add final configuration to result map
1532
+ mModelConfigurations[sModelName] = oModelConfig;
1533
+ }
1534
+
1535
+ return mModelConfigurations;
1536
+ };
1537
+
1376
1538
  /**
1377
1539
  * Creates model configurations by processing "/sap.app/dataSources" and "/sap.ui5/models" manifest entries.
1378
1540
  * Result can be handed over to {@link sap.ui.core.Component._createManifestModels} in order to create instances.
@@ -1393,7 +1555,7 @@ sap.ui.define([
1393
1555
  var oManifest = mOptions.manifest || oComponent.getManifestObject();
1394
1556
  var bMergeParent = mOptions.mergeParent;
1395
1557
  var mCacheTokens = mOptions.cacheTokens || {};
1396
- var sLogComponentName = oComponent ? oComponent.toString() : oManifest.getComponentName();
1558
+ var sLogComponentName = oComponent ? oComponent.getMetadata().getComponentName() : oManifest.getComponentName();
1397
1559
  var oConfig = sap.ui.getCore().getConfiguration();
1398
1560
  var aActiveTerminologies = mOptions.activeTerminologies;
1399
1561
 
@@ -1439,6 +1601,22 @@ sap.ui.define([
1439
1601
  for (var sModelName in mConfig.models) {
1440
1602
 
1441
1603
  var oModelConfig = mConfig.models[sModelName];
1604
+ var fnClass = sap.ui.require(oModelConfig.type.replace(/\./g, "/"));
1605
+ if (!fnClass) {
1606
+ fnClass = ObjectPath.get(oModelConfig.type);
1607
+ }
1608
+ // class could not be loaded by _loadManifestModelClasses
1609
+ if (!fnClass) {
1610
+ Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be found", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1611
+ continue;
1612
+ }
1613
+ var oClassMetadata = fnClass.getMetadata();
1614
+
1615
+ var bIsV1Model = oClassMetadata.isA("sap.ui.model.odata.ODataModel");
1616
+ var bIsV2Model = oClassMetadata.isA("sap.ui.model.odata.v2.ODataModel");
1617
+ var bIsV4Model = oClassMetadata.isA("sap.ui.model.odata.v4.ODataModel");
1618
+ var bIsResourceModel = oClassMetadata.isA("sap.ui.model.resource.ResourceModel");
1619
+
1442
1620
  var bIsDataSourceUri = false;
1443
1621
  var mMetadataUrlParams = null;
1444
1622
 
@@ -1462,42 +1640,8 @@ sap.ui.define([
1462
1640
  oDataSource.type = 'OData';
1463
1641
  }
1464
1642
 
1465
- var sODataVersion;
1466
-
1467
- // read out type and translate to model class
1468
- // (only if no model type was set to allow overriding)
1469
- if (!oModelConfig.type) {
1470
- switch (oDataSource.type) {
1471
- case 'OData':
1472
- sODataVersion = oDataSource.settings && oDataSource.settings.odataVersion;
1473
- if (sODataVersion === "4.0") {
1474
- oModelConfig.type = 'sap.ui.model.odata.v4.ODataModel';
1475
- } else if (!sODataVersion || sODataVersion === "2.0") {
1476
- // 2.0 is the default in case no version is provided
1477
- oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1478
- } else {
1479
- Log.error('Component Manifest: Provided OData version "' + sODataVersion + '" in ' +
1480
- 'dataSource "' + oModelConfig.dataSource + '" for model "' + sModelName + '" is unknown. ' +
1481
- 'Falling back to default model type "sap.ui.model.odata.v2.ODataModel".',
1482
- '["sap.app"]["dataSources"]["' + oModelConfig.dataSource + '"]', sLogComponentName);
1483
- oModelConfig.type = 'sap.ui.model.odata.v2.ODataModel';
1484
- }
1485
- break;
1486
- case 'JSON':
1487
- oModelConfig.type = 'sap.ui.model.json.JSONModel';
1488
- break;
1489
- case 'XML':
1490
- oModelConfig.type = 'sap.ui.model.xml.XMLModel';
1491
- break;
1492
- default:
1493
- // for custom dataSource types, the class should already be specified in the sap.ui5 models config
1494
- }
1495
- }
1496
-
1497
1643
  // pass OData service version (e.g. "2.0"), if specified, to the OData V4 model
1498
- if (oModelConfig.type === 'sap.ui.model.odata.v4.ODataModel'
1499
- && oDataSource.settings
1500
- && oDataSource.settings.odataVersion) {
1644
+ if (bIsV4Model && oDataSource.settings && oDataSource.settings.odataVersion) {
1501
1645
  oModelConfig.settings = oModelConfig.settings || {};
1502
1646
  oModelConfig.settings.odataVersion = oDataSource.settings.odataVersion;
1503
1647
  }
@@ -1542,20 +1686,16 @@ sap.ui.define([
1542
1686
 
1543
1687
  var oAnnotationUri = new URI(oAnnotation.uri);
1544
1688
 
1545
- if (oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel' ||
1546
- oModelConfig.type === 'sap.ui.model.odata.v4.ODataModel') {
1689
+ if (bIsV2Model || bIsV4Model) {
1690
+ /* eslint-disable no-loop-func */
1691
+ ["sap-language", "sap-client"].forEach(function(sName) {
1692
+ if (!oAnnotationUri.hasQuery(sName) && oConfig.getSAPParam(sName)) {
1693
+ oAnnotationUri.setQuery(sName, oConfig.getSAPParam(sName));
1694
+ }
1695
+ });
1696
+ /* eslint-enable no-loop-func */
1547
1697
 
1548
1698
  var sCacheTokenForAnnotation = mCacheTokens.dataSources && mCacheTokens.dataSources[oAnnotation.uri];
1549
- if (sCacheTokenForAnnotation || oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel') {
1550
- /* eslint-disable no-loop-func */
1551
- ["sap-language", "sap-client"].forEach(function(sName) {
1552
- if (!oAnnotationUri.hasQuery(sName) && oConfig.getSAPParam(sName)) {
1553
- oAnnotationUri.setQuery(sName, oConfig.getSAPParam(sName));
1554
- }
1555
- });
1556
- /* eslint-enable no-loop-func */
1557
- }
1558
-
1559
1699
  if (sCacheTokenForAnnotation) {
1560
1700
  Component._applyCacheToken(oAnnotationUri, {
1561
1701
  cacheToken: sCacheTokenForAnnotation,
@@ -1582,24 +1722,16 @@ sap.ui.define([
1582
1722
  }
1583
1723
  }
1584
1724
 
1585
- // model type is required!
1586
- if (!oModelConfig.type) {
1587
- Log.error("Component Manifest: Missing \"type\" for model \"" + sModelName + "\"", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1588
- continue;
1589
- }
1590
-
1591
1725
  // set mode of old ODataModel to "json" (default is xml).
1592
1726
  // as the automatic model creation is a new feature, this is not incompatible here
1593
- if (oModelConfig.type === 'sap.ui.model.odata.ODataModel' &&
1594
- (!oModelConfig.settings || oModelConfig.settings.json === undefined)) {
1727
+ if (bIsV1Model && (!oModelConfig.settings || oModelConfig.settings.json === undefined)) {
1595
1728
  // do not overwrite the flag if it was explicitly defined!
1596
-
1597
1729
  oModelConfig.settings = oModelConfig.settings || {};
1598
1730
  oModelConfig.settings.json = true;
1599
1731
  }
1600
1732
 
1601
1733
  // Check resource models for bundleUrl configuration
1602
- if (oModelConfig.type === "sap.ui.model.resource.ResourceModel") {
1734
+ if (bIsResourceModel) {
1603
1735
  if (oModelConfig.uri && oModelConfig.settings && oModelConfig.settings.bundleUrl) {
1604
1736
  Log.warning("Defining both model uri and bundleUrl is not supported. Only model uri will be resolved.");
1605
1737
  }
@@ -1627,8 +1759,7 @@ sap.ui.define([
1627
1759
  if (oModelConfig.dataSource) {
1628
1760
  addSapParams(oUri);
1629
1761
 
1630
- if (oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel' ||
1631
- oModelConfig.type === 'sap.ui.model.odata.v4.ODataModel') {
1762
+ if (bIsV2Model || bIsV4Model) {
1632
1763
 
1633
1764
  var oModelDataSource = mConfig.dataSources && mConfig.dataSources[oModelConfig.dataSource];
1634
1765
  var sCacheToken = mCacheTokens.dataSources && mCacheTokens.dataSources[oModelDataSource.uri];
@@ -1639,7 +1770,7 @@ sap.ui.define([
1639
1770
  && !oUri.hasQuery('sap-language')
1640
1771
  && oConfig.getSAPParam('sap-language');
1641
1772
 
1642
- if ((bNeedsLanguage && oModelConfig.type === 'sap.ui.model.odata.v2.ODataModel') || sCacheToken) {
1773
+ if (bNeedsLanguage || sCacheToken) {
1643
1774
  // Lazy initialize settings and metadataUrlParams objects
1644
1775
  oModelConfig.settings = oModelConfig.settings || {};
1645
1776
  mMetadataUrlParams = oModelConfig.settings.metadataUrlParams = oModelConfig.settings.metadataUrlParams || {};
@@ -1667,17 +1798,12 @@ sap.ui.define([
1667
1798
  // set model specific "uri" property names which should be used to map "uri" to model specific constructor
1668
1799
  // (only if it wasn't specified before)
1669
1800
  if (oModelConfig.uriSettingName === undefined) {
1670
- switch (oModelConfig.type) {
1671
- case 'sap.ui.model.odata.ODataModel':
1672
- case 'sap.ui.model.odata.v2.ODataModel':
1673
- case 'sap.ui.model.odata.v4.ODataModel':
1674
- oModelConfig.uriSettingName = 'serviceUrl';
1675
- break;
1676
- case 'sap.ui.model.resource.ResourceModel':
1677
- oModelConfig.uriSettingName = 'bundleUrl';
1678
- break;
1679
- default:
1680
- // default 'undefined' is already set in this case
1801
+ if (bIsV1Model || bIsV2Model || bIsV4Model) {
1802
+ oModelConfig.uriSettingName = 'serviceUrl';
1803
+ } else if (bIsResourceModel) {
1804
+ oModelConfig.uriSettingName = 'bundleUrl';
1805
+ } else {
1806
+ // default 'undefined' is already set in this case
1681
1807
  }
1682
1808
  }
1683
1809
 
@@ -1698,9 +1824,9 @@ sap.ui.define([
1698
1824
  // lazy load the ODataUtils if systemParameter is given
1699
1825
  var bAddOrigin = false;
1700
1826
  var ODataUtils;
1701
- if (sSystemParameter && ["sap.ui.model.odata.ODataModel", "sap.ui.model.odata.v2.ODataModel"].indexOf(oModelConfig.type) != -1) {
1827
+ if (sSystemParameter && (bIsV1Model || bIsV2Model)) {
1702
1828
  bAddOrigin = true;
1703
- ODataUtils = sap.ui.requireSync("sap/ui/model/odata/ODataUtils");
1829
+ ODataUtils = sap.ui.require("sap/ui/model/odata/ODataUtils");
1704
1830
  }
1705
1831
 
1706
1832
  // include "uri" property in "settings" object, depending on "uriSettingName"
@@ -1757,7 +1883,7 @@ sap.ui.define([
1757
1883
  // resolve the bundleUrl of the enhancing resource bundle relative to
1758
1884
  // the component (default) or relative to manifest, e.g.:
1759
1885
  // bundleUrlRelativeTo: 'component|manifest'
1760
- if (oModelConfig.type === 'sap.ui.model.resource.ResourceModel' && oModelConfig.settings) {
1886
+ if (bIsResourceModel && oModelConfig.settings) {
1761
1887
  if (aActiveTerminologies) {
1762
1888
  oModelConfig.settings.activeTerminologies = aActiveTerminologies;
1763
1889
  }
@@ -1784,6 +1910,21 @@ sap.ui.define([
1784
1910
  return mModelConfigurations;
1785
1911
  };
1786
1912
 
1913
+ Component._loadManifestModelClasses = function(mModelConfigurations, sLogComponentName) {
1914
+ for (var sModelName in mModelConfigurations) {
1915
+ var oModelConfig = mModelConfigurations[sModelName];
1916
+
1917
+ // load model class and log error message if it couldn't be loaded.
1918
+ // error gets caught to continue creating the other models and not breaking the execution here
1919
+ try {
1920
+ sap.ui.requireSync(oModelConfig.type.replace(/\./g, "/"));
1921
+ } catch (oError) {
1922
+ Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be loaded. " + oError, "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1923
+ continue;
1924
+ }
1925
+ }
1926
+ };
1927
+
1787
1928
  /**
1788
1929
  * Creates model instances using a configuration provided by {@link sap.ui.core.Component._createManifestModelConfigurations}.
1789
1930
  *
@@ -1797,24 +1938,9 @@ sap.ui.define([
1797
1938
  for (var sModelName in mModelConfigurations) {
1798
1939
  var oModelConfig = mModelConfigurations[sModelName];
1799
1940
 
1800
- // load model class and log error message if it couldn't be loaded.
1801
- // error gets caught to continue creating the other models and not breaking the execution here
1802
- try {
1803
- sap.ui.requireSync(oModelConfig.type.replace(/\./g, "/"));
1804
- } catch (oError) {
1805
- Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be loaded. " + oError, "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1806
- continue;
1807
- }
1808
-
1809
- // TODO: We don't use the return value of sap.ui.requireSync here yet.
1810
1941
  // The tests for the Model creation make use of a constructor stub,
1811
1942
  // and this only works from the global namespace export.
1812
1943
  var fnModelClass = ObjectPath.get(oModelConfig.type);
1813
- if (!fnModelClass) {
1814
- // this could be the case if the required module doesn't register itself in the defined namespace
1815
- Log.error("Component Manifest: Class \"" + oModelConfig.type + "\" for model \"" + sModelName + "\" could not be found", "[\"sap.ui5\"][\"models\"][\"" + sModelName + "\"]", sLogComponentName);
1816
- continue;
1817
- }
1818
1944
 
1819
1945
  // create arguments array with leading "null" value so that it can be passed to the apply function
1820
1946
  var aArgs = [null].concat(oModelConfig.settings || []);
@@ -1851,7 +1977,7 @@ sap.ui.define([
1851
1977
  * @param {string[]} [aActiveTerminologies] optional list of active terminologies
1852
1978
  * @returns {object} object with two maps, see above
1853
1979
  */
1854
- function getPreloadModelConfigsFromManifest(oManifest, oComponentData, mCacheTokens, aActiveTerminologies) {
1980
+ function getPreloadModelConfigsFromManifest(oManifest) {
1855
1981
  var mModelConfigs = {
1856
1982
  afterManifest: {},
1857
1983
  afterPreload: {}
@@ -1860,14 +1986,11 @@ sap.ui.define([
1860
1986
  // deep clone is needed as manifest only returns a read-only copy (frozen object)
1861
1987
  var oManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
1862
1988
  var oManifestModels = merge({}, oManifest.getEntry("/sap.ui5/models"));
1863
-
1864
- var mAllModelConfigurations = Component._createManifestModelConfigurations({
1989
+ var sComponentName = oManifest.getComponentName();
1990
+ var mAllModelConfigurations = Component._findManifestModelClasses({
1865
1991
  models: oManifestModels,
1866
1992
  dataSources: oManifestDataSources,
1867
- manifest: oManifest,
1868
- componentData: oComponentData,
1869
- cacheTokens: mCacheTokens,
1870
- activeTerminologies: aActiveTerminologies
1993
+ componentName: sComponentName
1871
1994
  });
1872
1995
 
1873
1996
  // Read internal URI parameter to enable model preload for testing purposes
@@ -1886,14 +2009,13 @@ sap.ui.define([
1886
2009
  if (!mModelConfig.preload && aPreloadModels && aPreloadModels.indexOf(sModelName) > -1 ) {
1887
2010
  mModelConfig.preload = true;
1888
2011
  Log.warning("FOR TESTING ONLY!!! Activating preload for model \"" + sModelName + "\" (" + mModelConfig.type + ")",
1889
- oManifest.getComponentName(), "sap.ui.core.Component");
2012
+ sComponentName, "sap.ui.core.Component");
1890
2013
  }
1891
2014
 
1892
2015
  // ResourceModels with async=false should be always loaded beforehand to get rid of sync requests under the hood (regardless of the "preload" flag)
1893
2016
  if (mModelConfig.type === "sap.ui.model.resource.ResourceModel" &&
1894
- Array.isArray(mModelConfig.settings) &&
1895
- mModelConfig.settings.length > 0 &&
1896
- mModelConfig.settings[0].async !== true
2017
+ (!mModelConfig.settings ||
2018
+ mModelConfig.settings.async !== true)
1897
2019
  ) {
1898
2020
  // Use separate config object for ResourceModels as the resourceBundle might be
1899
2021
  // part of the Component-preload which isn't available when the regular "preloaded"-models are created
@@ -1902,11 +2024,14 @@ sap.ui.define([
1902
2024
  // Only create models:
1903
2025
  // - which are flagged for preload (mModelConfig.preload) or configured via internal URI param (see above)
1904
2026
  // - in case the model class is already loaded (otherwise log a warning)
2027
+ // We check for the moduleState here instead of a simple sap.ui.require probing, because it captures the following cases:
2028
+ // - modules defined in a preload (via predefine) are "available, but not executed"
2029
+ // - modules which are already loaded/executed
1905
2030
  if (sap.ui.loader._.getModuleState(mModelConfig.type.replace(/\./g, "/") + ".js")) {
1906
2031
  mModelConfigs.afterManifest[sModelName] = mModelConfig;
1907
2032
  } else {
1908
2033
  Log.warning("Can not preload model \"" + sModelName + "\" as required class has not been loaded: \"" + mModelConfig.type + "\"",
1909
- oManifest.getComponentName(), "sap.ui.core.Component");
2034
+ sComponentName, "sap.ui.core.Component");
1910
2035
  }
1911
2036
  }
1912
2037
 
@@ -2260,9 +2385,9 @@ sap.ui.define([
2260
2385
  if (typeof vConfig === 'string') {
2261
2386
  Log.warning("Do not use deprecated function 'sap.ui.component' (" + vConfig + ") + for Component instance lookup. " +
2262
2387
  "Use 'Component.get' instead", "sap.ui.component", null, fnLogProperties.bind(null, vConfig));
2263
- // when only a string is given then this function behaves like a
2388
+ // when only a string is given, then this function behaves like a
2264
2389
  // getter and returns an existing component instance
2265
- return sap.ui.getCore().getComponent(vConfig);
2390
+ return Component.get(vConfig);
2266
2391
  }
2267
2392
 
2268
2393
  if (vConfig.async) {
@@ -2505,7 +2630,7 @@ sap.ui.define([
2505
2630
  */
2506
2631
  Component.get = function (sId) {
2507
2632
  // lookup and return the component
2508
- return sap.ui.getCore().getComponent(sId);
2633
+ return Component.registry.get(sId);
2509
2634
  };
2510
2635
 
2511
2636
  /**
@@ -2597,7 +2722,7 @@ sap.ui.define([
2597
2722
  sManifestUrl,
2598
2723
  oManifest,
2599
2724
  mModels,
2600
- mModelConfigs,
2725
+ mPreloadModelConfigs,
2601
2726
  fnCallLoadComponentCallback;
2602
2727
 
2603
2728
  function createSanitizedManifest( oRawManifestJSON, mOptions ) {
@@ -3004,14 +3129,26 @@ sap.ui.define([
3004
3129
  // create "afterPreload" models in parallel to loading the component preload (below)
3005
3130
  if (mOptions.createModels) {
3006
3131
  collect(oManifest.then(function(oManifest) {
3132
+ var sComponentName = oManifest.getComponentName();
3007
3133
  // Calculate configurations of preloaded models once the manifest is available
3008
- mModelConfigs = getPreloadModelConfigsFromManifest(oManifest, oConfig.componentData, hints.cacheTokens, aActiveTerminologies);
3134
+ mPreloadModelConfigs = getPreloadModelConfigsFromManifest(oManifest);
3009
3135
 
3010
- return oManifest;
3011
- }).then(function(oManifest) {
3012
3136
  // Create preloaded models directly after the manifest has been loaded
3013
- if (Object.keys(mModelConfigs.afterManifest).length > 0) {
3014
- mModels = Component._createManifestModels(mModelConfigs.afterManifest, oManifest.getComponentName());
3137
+ if (Object.keys(mPreloadModelConfigs.afterManifest).length > 0) {
3138
+ Component._loadManifestModelClasses(mPreloadModelConfigs.afterManifest, sComponentName);
3139
+
3140
+ // deep clone is needed as manifest only returns a read-only copy (frozen object)
3141
+ var oManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
3142
+ var mAllModelConfigurations = Component._createManifestModelConfigurations({
3143
+ models: mPreloadModelConfigs.afterManifest,
3144
+ dataSources: oManifestDataSources,
3145
+ manifest: oManifest,
3146
+ componentData: oConfig.componentData,
3147
+ cacheTokens: hints.cacheTokens,
3148
+ activeTerminologies: aActiveTerminologies
3149
+ });
3150
+
3151
+ mModels = Component._createManifestModels(mAllModelConfigurations, sComponentName);
3015
3152
  }
3016
3153
 
3017
3154
  return oManifest;
@@ -3040,7 +3177,7 @@ sap.ui.define([
3040
3177
  return null;
3041
3178
  }
3042
3179
 
3043
- var aResourceModelNames = Object.keys(mModelConfigs.afterPreload);
3180
+ var aResourceModelNames = Object.keys(mPreloadModelConfigs.afterPreload);
3044
3181
 
3045
3182
  if (aResourceModelNames.length === 0) {
3046
3183
  return null;
@@ -3055,8 +3192,20 @@ sap.ui.define([
3055
3192
  resolve(ResourceModel);
3056
3193
  }, reject);
3057
3194
  }).then(function(ResourceModel) {
3195
+
3196
+ // deep clone is needed as manifest only returns a read-only copy (frozen object)
3197
+ var oManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
3198
+ var mAfterPreloadModelConfigurations = Component._createManifestModelConfigurations({
3199
+ models: mPreloadModelConfigs.afterPreload,
3200
+ dataSources: oManifestDataSources,
3201
+ manifest: oManifest,
3202
+ componentData: oConfig.componentData,
3203
+ cacheTokens: hints.cacheTokens,
3204
+ activeTerminologies: aActiveTerminologies
3205
+ });
3206
+
3058
3207
  function loadResourceBundle(sModelName) {
3059
- var mModelConfig = mModelConfigs.afterPreload[sModelName];
3208
+ var mModelConfig = mAfterPreloadModelConfigurations[sModelName];
3060
3209
  if (Array.isArray(mModelConfig.settings) && mModelConfig.settings.length > 0) {
3061
3210
  var mModelSettings = mModelConfig.settings[0]; // first argument is the config map
3062
3211
 
@@ -3087,19 +3236,19 @@ sap.ui.define([
3087
3236
 
3088
3237
  // If the resource bundle can't be loaded, the resource model will be skipped.
3089
3238
  // But once the component instance gets created, the model will be tried to created again.
3090
- delete mModelConfigs.afterPreload[sModelName];
3239
+ delete mAfterPreloadModelConfigurations[sModelName];
3091
3240
  });
3092
3241
  } else {
3093
3242
  // Can't load bundle as no settings are defined.
3094
- // Should not happen as those models won't be part of "mModelConfigs.afterPreload"
3243
+ // Should not happen as those models won't be part of "afterPreload"
3095
3244
  return Promise.resolve();
3096
3245
  }
3097
3246
  }
3098
3247
 
3099
3248
  // Load all ResourceBundles for all models in parallel
3100
3249
  return Promise.all(aResourceModelNames.map(loadResourceBundle)).then(function() {
3101
- if (Object.keys(mModelConfigs.afterPreload).length > 0) {
3102
- var mResourceModels = Component._createManifestModels(mModelConfigs.afterPreload, oManifest.getComponentName());
3250
+ if (Object.keys(mAfterPreloadModelConfigurations).length > 0) {
3251
+ var mResourceModels = Component._createManifestModels(mAfterPreloadModelConfigurations, oManifest.getComponentName());
3103
3252
  if (!mModels) {
3104
3253
  mModels = {};
3105
3254
  }
@@ -3275,12 +3424,10 @@ sap.ui.define([
3275
3424
  // lookup model classes
3276
3425
  var mManifestModels = merge({}, oManifest.getEntry("/sap.ui5/models"));
3277
3426
  var mManifestDataSources = merge({}, oManifest.getEntry("/sap.app/dataSources"));
3278
- var mAllModelConfigurations = Component._createManifestModelConfigurations({
3427
+ var mAllModelConfigurations = Component._findManifestModelClasses({
3279
3428
  models: mManifestModels,
3280
3429
  dataSources: mManifestDataSources,
3281
- manifest: oManifest,
3282
- cacheTokens: hints.cacheTokens,
3283
- activeTerminologies: aActiveTerminologies
3430
+ componentName: oManifest.getComponentName()
3284
3431
  });
3285
3432
  for (var mModelName in mAllModelConfigurations) {
3286
3433
  if (!mAllModelConfigurations.hasOwnProperty(mModelName)) {
@@ -3369,7 +3516,7 @@ sap.ui.define([
3369
3516
 
3370
3517
  // synchronously load the controller class, prepare and return it
3371
3518
  return prepareControllerClass(
3372
- sap.ui.requireSync( getControllerModuleName() )
3519
+ sap.ui.requireSync( getControllerModuleName() ) // legacy-relevant: Sync path
3373
3520
  );
3374
3521
  }
3375
3522