@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.
- package/.eslintrc.json +1 -2
- package/.reuse/dep5 +1 -6
- package/THIRDPARTY.txt +3 -9
- package/package.json +1 -1
- package/src/jquery.sap.global.js +1 -1
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +3 -3
- package/src/sap/base/i18n/ResourceBundle.js +6 -2
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/ui/Device.js +14 -10
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/base/DataType.js +14 -8
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +11 -6
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/core/.library +5 -5
- package/src/sap/ui/core/AppCacheBuster.js +4 -4
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/Component.js +272 -125
- package/src/sap/ui/core/ComponentContainer.js +3 -5
- package/src/sap/ui/core/ComponentMetadata.js +1 -1
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +62 -31
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +15 -9
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/CustomizingConfiguration.js +35 -260
- package/src/sap/ui/core/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/Element.js +1 -1
- package/src/sap/ui/core/ElementMetadata.js +1 -1
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/ExtensionPoint.js +6 -13
- package/src/sap/ui/core/Fragment.js +29 -31
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +5 -5
- package/src/sap/ui/core/IconPool.js +15 -1097
- package/src/sap/ui/core/IconRenderer.js +2 -2
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +1 -1
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +26 -4
- package/src/sap/ui/core/LocaleData.js +1 -1
- package/src/sap/ui/core/Manifest.js +2 -60
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/RenderManager.js +17 -3
- package/src/sap/ui/core/Renderer.js +13 -3
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/ShortcutHintsMixin.js +14 -7
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +1 -1
- package/src/sap/ui/core/UIComponent.js +17 -8
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +1 -1
- package/src/sap/ui/core/_IconRegistry.js +1215 -0
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +61 -80
- package/src/sap/ui/core/library.js +3 -3
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +13 -15
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +1 -1
- package/src/sap/ui/core/messagebundle_de.properties +1 -1
- package/src/sap/ui/core/messagebundle_fr.properties +1 -1
- package/src/sap/ui/core/messagebundle_it.properties +1 -1
- package/src/sap/ui/core/messagebundle_pl.properties +1 -1
- package/src/sap/ui/core/messagebundle_th.properties +2 -2
- package/src/sap/ui/core/mvc/Controller.js +1 -1
- package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +30 -32
- package/src/sap/ui/core/mvc/ControllerMetadata.js +18 -18
- package/src/sap/ui/core/mvc/HTMLView.js +2 -2
- package/src/sap/ui/core/mvc/JSONView.js +2 -2
- package/src/sap/ui/core/mvc/JSView.js +2 -2
- package/src/sap/ui/core/mvc/TemplateView.js +2 -2
- package/src/sap/ui/core/mvc/View.js +58 -85
- package/src/sap/ui/core/mvc/XMLView.js +2 -2
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/routing/Route.js +10 -1
- package/src/sap/ui/core/routing/Router.js +8 -5
- package/src/sap/ui/core/routing/Targets.js +26 -0
- package/src/sap/ui/core/routing/async/Route.js +6 -3
- package/src/sap/ui/core/routing/async/Target.js +26 -0
- package/src/sap/ui/core/routing/sync/Target.js +15 -0
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +1 -1
- package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
- package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +2 -2
- package/src/sap/ui/core/support/support.css +2 -8
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.fragment.xml +1 -0
- package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +149 -72
- package/src/sap/ui/core/theming/Parameters.js +21 -0
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +1 -1
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +1 -1
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- package/src/sap/ui/core/util/XMLPreprocessor.js +11 -12
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/ClientPropertyBinding.js +3 -1
- package/src/sap/ui/model/ClientTreeBinding.js +14 -8
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +6 -3
- package/src/sap/ui/model/base/ManagedObjectModel.js +4 -0
- package/src/sap/ui/model/json/JSONModel.js +4 -2
- package/src/sap/ui/model/message/MessageModel.js +4 -2
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +3 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
- package/src/sap/ui/model/odata/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/ODataUtils.js +12 -10
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +1 -1
- package/src/sap/ui/model/odata/type/Date.js +1 -1
- package/src/sap/ui/model/odata/type/DateTime.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/Decimal.js +1 -1
- package/src/sap/ui/model/odata/type/Double.js +1 -1
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +1 -1
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +1 -1
- package/src/sap/ui/model/odata/type/ODataType.js +1 -1
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +1 -1
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +1 -1
- package/src/sap/ui/model/odata/type/Time.js +1 -1
- package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
- package/src/sap/ui/model/odata/type/Unit.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +2 -2
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataModel.js +179 -109
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +29 -20
- package/src/sap/ui/model/odata/v4/Context.js +1 -1
- package/src/sap/ui/model/odata/v4/ODataBinding.js +3 -3
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +76 -11
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +74 -4
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +3 -1
- package/src/sap/ui/model/odata/v4/ODataModel.js +25 -12
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +10 -0
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -7
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +8 -5
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +39 -3
- package/src/sap/ui/model/resource/ResourceModel.js +5 -2
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +1 -1
- package/src/sap/ui/model/type/DateInterval.js +1 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +4 -2
- package/src/sap/ui/performance/trace/Interaction.js +31 -16
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/TestUtils.js +11 -4
- package/src/sap/ui/test/matchers/I18NText.js +29 -11
- package/src/sap/ui/test/opaQunit.js +5 -0
- package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly.js +1196 -0
- package/src/sap/ui/thirdparty/hyphenopoly/Hyphenopoly_Loader.js +797 -0
- package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.asm.js +108 -127
- package/src/sap/ui/thirdparty/hyphenopoly/hyphenEngine.wasm +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/bg.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/ca.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/da.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/de.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/el-monoton.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/en-us.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/es.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/et.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/fi.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/fr.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/hi.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/hr.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/hu.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/it.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/lt.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/nb-no.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/nl.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/pt.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/ru.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/sl.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/sv.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/th.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/tr.hpb +0 -0
- package/src/sap/ui/thirdparty/hyphenopoly/patterns/uk.hpb +0 -0
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/sap/ui/util/isCrossOriginURL.js +16 -6
- package/src/sap/ui/core/support/plugins/MessageTest.js +0 -96
- 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.
|
|
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
|
|
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,
|
|
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.
|
|
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 (
|
|
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 (
|
|
1546
|
-
|
|
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.
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
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 &&
|
|
1827
|
+
if (sSystemParameter && (bIsV1Model || bIsV2Model)) {
|
|
1702
1828
|
bAddOrigin = true;
|
|
1703
|
-
ODataUtils = sap.ui.
|
|
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 (
|
|
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
|
|
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.
|
|
1989
|
+
var sComponentName = oManifest.getComponentName();
|
|
1990
|
+
var mAllModelConfigurations = Component._findManifestModelClasses({
|
|
1865
1991
|
models: oManifestModels,
|
|
1866
1992
|
dataSources: oManifestDataSources,
|
|
1867
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1895
|
-
mModelConfig.settings.
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
3014
|
-
|
|
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(
|
|
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 =
|
|
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
|
|
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 "
|
|
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(
|
|
3102
|
-
var mResourceModels = Component._createManifestModels(
|
|
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.
|
|
3427
|
+
var mAllModelConfigurations = Component._findManifestModelClasses({
|
|
3279
3428
|
models: mManifestModels,
|
|
3280
3429
|
dataSources: mManifestDataSources,
|
|
3281
|
-
|
|
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
|
|