@sapui5/sap.fe.core 1.121.2 → 1.123.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/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +1 -2
- package/src/sap/fe/core/CommonUtils.js +14 -171
- package/src/sap/fe/core/CommonUtils.ts +15 -221
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +16 -0
- package/src/sap/fe/core/TemplateComponent.js +6 -1
- package/src/sap/fe/core/TemplateComponent.ts +8 -0
- package/src/sap/fe/core/UIProvider.js +23 -0
- package/src/sap/fe/core/UIProvider.ts +38 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
- package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
- package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
- package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
- package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
- package/src/sap/fe/core/controllerextensions/Share.js +7 -7
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
- package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
- package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
- package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
- package/src/sap/fe/core/converters/ConverterContext.js +17 -9
- package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
- package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
- package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
- package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
- package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
- package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
- package/src/sap/fe/core/converters/helpers/Key.js +2 -2
- package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
- package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
- package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
- package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
- package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
- package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
- package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
- package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
- package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
- package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
- package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
- package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
- package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
- package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
- package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
- package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
- package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
- package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +5 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_en.properties +267 -2
- package/src/sap/fe/core/messagebundle_sl.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +2 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
- package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
- package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
- package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
- package/src/sap/fe/core/templating/FilterHelper.js +13 -10
- package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
- package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
- package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
- package/src/sap/fe/core/templating/UIFormatters.js +23 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/EDM.ts +2 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +2 -2
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
14
14
|
import Log from "sap/base/Log";
|
|
15
15
|
import type { NavigationParameters } from "sap/fe/core/controllerextensions/InternalIntentBasedNavigation";
|
|
16
|
+
import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
16
17
|
import type {
|
|
17
18
|
AnnotationAction,
|
|
18
19
|
BaseAction,
|
|
@@ -56,7 +57,7 @@ import {
|
|
|
56
57
|
} from "sap/fe/core/helpers/BindingToolkit";
|
|
57
58
|
import { isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
58
59
|
import type ConverterContext from "../../ConverterContext";
|
|
59
|
-
import type { ManifestAction, ManifestSubSection } from "../../ManifestSettings";
|
|
60
|
+
import type { FormManifestConfiguration, ManifestAction, ManifestSubSection } from "../../ManifestSettings";
|
|
60
61
|
import { ActionType } from "../../ManifestSettings";
|
|
61
62
|
import { isActionWithDialog } from "../../annotations/DataField";
|
|
62
63
|
import type { ConfigurableObject, ConfigurableRecord, CustomElement } from "../../helpers/ConfigurableObject";
|
|
@@ -189,7 +190,7 @@ const visualizationTerms: string[] = [
|
|
|
189
190
|
*/
|
|
190
191
|
export function createSubSections(
|
|
191
192
|
facetCollection: FacetTypes[],
|
|
192
|
-
converterContext: ConverterContext
|
|
193
|
+
converterContext: ConverterContext<PageContextPathTarget>,
|
|
193
194
|
isHeaderSection?: boolean
|
|
194
195
|
): ObjectPageSubSection[] {
|
|
195
196
|
// First we determine which sub section we need to create
|
|
@@ -226,7 +227,7 @@ export function createSubSections(
|
|
|
226
227
|
* @param converterContext The converter context
|
|
227
228
|
* @returns The current subsections
|
|
228
229
|
*/
|
|
229
|
-
export function createCustomHeaderFacetSubSections(converterContext: ConverterContext): ObjectPageSubSection[] {
|
|
230
|
+
export function createCustomHeaderFacetSubSections(converterContext: ConverterContext<PageContextPathTarget>): ObjectPageSubSection[] {
|
|
230
231
|
const customHeaderFacets: Record<string, CustomObjectPageHeaderFacet> = getHeaderFacetsFromManifest(
|
|
231
232
|
converterContext.getManifestWrapper().getHeaderFacets()
|
|
232
233
|
);
|
|
@@ -281,7 +282,11 @@ const getSubSectionKey = (facetDefinition: FacetTypes, fallback: string): string
|
|
|
281
282
|
* @param converterContext The converter context
|
|
282
283
|
* @returns The form menu actions
|
|
283
284
|
*/
|
|
284
|
-
function addFormMenuActions(
|
|
285
|
+
function addFormMenuActions(
|
|
286
|
+
actions: BaseAction[],
|
|
287
|
+
facetDefinition: FacetTypes,
|
|
288
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
289
|
+
): CombinedAction {
|
|
285
290
|
const hiddenActions: BaseAction[] = getFormHiddenActions(facetDefinition, converterContext) || [],
|
|
286
291
|
formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
|
|
287
292
|
manifestActions = getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
|
|
@@ -305,7 +310,7 @@ function addFormMenuActions(actions: BaseAction[], facetDefinition: FacetTypes,
|
|
|
305
310
|
* @param converterContext
|
|
306
311
|
* @returns The current facet actions
|
|
307
312
|
*/
|
|
308
|
-
function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext): CombinedAction {
|
|
313
|
+
function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext<PageContextPathTarget>): CombinedAction {
|
|
309
314
|
let actions: BaseAction[] = [];
|
|
310
315
|
switch (facetDefinition.$Type) {
|
|
311
316
|
case UIAnnotationTypes.CollectionFacet:
|
|
@@ -350,7 +355,7 @@ function getButtonType(emphasized: Emphasized | undefined): ButtonType {
|
|
|
350
355
|
export function createSubSection(
|
|
351
356
|
facetDefinition: FacetTypes,
|
|
352
357
|
facetsToCreate: FacetTypes[],
|
|
353
|
-
converterContext: ConverterContext
|
|
358
|
+
converterContext: ConverterContext<PageContextPathTarget>,
|
|
354
359
|
level: number,
|
|
355
360
|
hasSingleContent: boolean,
|
|
356
361
|
isHeaderSection?: boolean
|
|
@@ -573,7 +578,7 @@ export function getShowSubSectionTitle(
|
|
|
573
578
|
function createFormActionReducer(
|
|
574
579
|
actions: BaseAction[],
|
|
575
580
|
facetDefinition: ReferenceFacetTypes,
|
|
576
|
-
converterContext: ConverterContext
|
|
581
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
577
582
|
): BaseAction[] {
|
|
578
583
|
const referenceTarget = facetDefinition.Target.$target;
|
|
579
584
|
const targetValue = facetDefinition.Target.value;
|
|
@@ -594,7 +599,9 @@ function createFormActionReducer(
|
|
|
594
599
|
case UIAnnotationTerms.FieldGroup:
|
|
595
600
|
dataFieldCollection = (referenceTarget as FieldGroup).Data;
|
|
596
601
|
manifestActions = getActionsFromManifest(
|
|
597
|
-
converterContext.getManifestControlConfiguration(referenceTarget).actions
|
|
602
|
+
converterContext.getManifestControlConfiguration<FormManifestConfiguration>(referenceTarget).actions as
|
|
603
|
+
| Record<string, ManifestAction>
|
|
604
|
+
| undefined,
|
|
598
605
|
converterContext,
|
|
599
606
|
undefined,
|
|
600
607
|
undefined,
|
|
@@ -612,97 +619,99 @@ function createFormActionReducer(
|
|
|
612
619
|
default:
|
|
613
620
|
break;
|
|
614
621
|
}
|
|
622
|
+
actions = dataFieldCollection.reduce((actionReducer, dataField: DataFieldAbstractTypes) => {
|
|
623
|
+
switch (dataField.$Type) {
|
|
624
|
+
case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
|
|
625
|
+
if (dataField.RequiresContext?.valueOf() === true) {
|
|
626
|
+
converterContext
|
|
627
|
+
.getDiagnostics()
|
|
628
|
+
.addIssue(IssueCategory.Annotation, IssueSeverity.Low, IssueType.MALFORMED_DATAFIELD_FOR_IBN.REQUIRESCONTEXT);
|
|
629
|
+
}
|
|
630
|
+
if (dataField.Inline?.valueOf() === true) {
|
|
631
|
+
converterContext
|
|
632
|
+
.getDiagnostics()
|
|
633
|
+
.addIssue(IssueCategory.Annotation, IssueSeverity.Low, IssueType.MALFORMED_DATAFIELD_FOR_IBN.INLINE);
|
|
634
|
+
}
|
|
635
|
+
if (dataField.Determining?.valueOf() === true) {
|
|
636
|
+
converterContext
|
|
637
|
+
.getDiagnostics()
|
|
638
|
+
.addIssue(IssueCategory.Annotation, IssueSeverity.Low, IssueType.MALFORMED_DATAFIELD_FOR_IBN.DETERMINING);
|
|
639
|
+
}
|
|
640
|
+
const mNavigationParameters: NavigationParameters = {};
|
|
641
|
+
if (dataField.Mapping) {
|
|
642
|
+
mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
|
|
643
|
+
}
|
|
644
|
+
actionReducer.push({
|
|
645
|
+
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
646
|
+
id: getFormID(facetDefinition, dataField),
|
|
647
|
+
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
648
|
+
text: dataField.Label?.toString(),
|
|
649
|
+
annotationPath: "",
|
|
650
|
+
enabled:
|
|
651
|
+
dataField.NavigationAvailable !== undefined
|
|
652
|
+
? compileExpression(equal(getExpressionFromAnnotation(dataField.NavigationAvailable), true))
|
|
653
|
+
: "true",
|
|
654
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
|
|
655
|
+
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
656
|
+
press: compileExpression(
|
|
657
|
+
fn("._intentBasedNavigation.navigate", [
|
|
658
|
+
getExpressionFromAnnotation(dataField.SemanticObject),
|
|
659
|
+
getExpressionFromAnnotation(dataField.Action),
|
|
660
|
+
mNavigationParameters
|
|
661
|
+
])
|
|
662
|
+
),
|
|
663
|
+
customData: compileExpression({
|
|
664
|
+
semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
|
|
665
|
+
action: getExpressionFromAnnotation(dataField.Action)
|
|
666
|
+
})
|
|
667
|
+
} as AnnotationAction);
|
|
668
|
+
break;
|
|
669
|
+
case UIAnnotationTypes.DataFieldForAction:
|
|
670
|
+
const formManifestActionsConfiguration =
|
|
671
|
+
converterContext.getManifestControlConfiguration<FormManifestConfiguration>(referenceTarget).actions;
|
|
672
|
+
const key: string = KeyHelper.generateKeyFromDataField(dataField);
|
|
673
|
+
actionReducer.push({
|
|
674
|
+
type: ActionType.DataFieldForAction,
|
|
675
|
+
id: getFormID(facetDefinition, dataField),
|
|
676
|
+
key: key,
|
|
677
|
+
text: dataField.Label?.toString(),
|
|
678
|
+
annotationPath: "",
|
|
679
|
+
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
680
|
+
binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
|
|
681
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
|
|
682
|
+
requiresDialog: isActionWithDialog(dataField),
|
|
683
|
+
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
684
|
+
press: compileExpression(
|
|
685
|
+
fn(
|
|
686
|
+
"invokeAction",
|
|
687
|
+
[
|
|
688
|
+
dataField.Action,
|
|
689
|
+
{
|
|
690
|
+
contexts: fn("getBindingContext", [], pathInModel("", "$source")),
|
|
691
|
+
invocationGrouping: (dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet"
|
|
692
|
+
? "ChangeSet"
|
|
693
|
+
: "Isolated") as OperationGroupingType,
|
|
694
|
+
label: dataField.Label?.toString(),
|
|
695
|
+
model: fn("getModel", [], pathInModel("/", "$source")),
|
|
696
|
+
isNavigable: isActionNavigable(
|
|
697
|
+
formManifestActionsConfiguration &&
|
|
698
|
+
(formManifestActionsConfiguration as Record<string, ManifestAction>)[key]
|
|
699
|
+
)
|
|
700
|
+
}
|
|
701
|
+
],
|
|
702
|
+
ref(".editFlow")
|
|
703
|
+
)
|
|
704
|
+
),
|
|
705
|
+
facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
|
|
706
|
+
} as AnnotationAction);
|
|
707
|
+
break;
|
|
708
|
+
default:
|
|
709
|
+
break;
|
|
710
|
+
}
|
|
711
|
+
return actionReducer;
|
|
712
|
+
}, actions);
|
|
615
713
|
}
|
|
616
714
|
|
|
617
|
-
actions = dataFieldCollection.reduce((actionReducer, dataField: DataFieldAbstractTypes) => {
|
|
618
|
-
switch (dataField.$Type) {
|
|
619
|
-
case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
|
|
620
|
-
if (dataField.RequiresContext?.valueOf() === true) {
|
|
621
|
-
converterContext
|
|
622
|
-
.getDiagnostics()
|
|
623
|
-
.addIssue(IssueCategory.Annotation, IssueSeverity.Low, IssueType.MALFORMED_DATAFIELD_FOR_IBN.REQUIRESCONTEXT);
|
|
624
|
-
}
|
|
625
|
-
if (dataField.Inline?.valueOf() === true) {
|
|
626
|
-
converterContext
|
|
627
|
-
.getDiagnostics()
|
|
628
|
-
.addIssue(IssueCategory.Annotation, IssueSeverity.Low, IssueType.MALFORMED_DATAFIELD_FOR_IBN.INLINE);
|
|
629
|
-
}
|
|
630
|
-
if (dataField.Determining?.valueOf() === true) {
|
|
631
|
-
converterContext
|
|
632
|
-
.getDiagnostics()
|
|
633
|
-
.addIssue(IssueCategory.Annotation, IssueSeverity.Low, IssueType.MALFORMED_DATAFIELD_FOR_IBN.DETERMINING);
|
|
634
|
-
}
|
|
635
|
-
const mNavigationParameters: NavigationParameters = {};
|
|
636
|
-
if (dataField.Mapping) {
|
|
637
|
-
mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
|
|
638
|
-
}
|
|
639
|
-
actionReducer.push({
|
|
640
|
-
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
641
|
-
id: getFormID(facetDefinition, dataField),
|
|
642
|
-
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
643
|
-
text: dataField.Label?.toString(),
|
|
644
|
-
annotationPath: "",
|
|
645
|
-
enabled:
|
|
646
|
-
dataField.NavigationAvailable !== undefined
|
|
647
|
-
? compileExpression(equal(getExpressionFromAnnotation(dataField.NavigationAvailable), true))
|
|
648
|
-
: "true",
|
|
649
|
-
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
|
|
650
|
-
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
651
|
-
press: compileExpression(
|
|
652
|
-
fn("._intentBasedNavigation.navigate", [
|
|
653
|
-
getExpressionFromAnnotation(dataField.SemanticObject),
|
|
654
|
-
getExpressionFromAnnotation(dataField.Action),
|
|
655
|
-
mNavigationParameters
|
|
656
|
-
])
|
|
657
|
-
),
|
|
658
|
-
customData: compileExpression({
|
|
659
|
-
semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
|
|
660
|
-
action: getExpressionFromAnnotation(dataField.Action)
|
|
661
|
-
})
|
|
662
|
-
} as AnnotationAction);
|
|
663
|
-
break;
|
|
664
|
-
case UIAnnotationTypes.DataFieldForAction:
|
|
665
|
-
const formManifestActionsConfiguration = converterContext.getManifestControlConfiguration(referenceTarget).actions;
|
|
666
|
-
const key: string = KeyHelper.generateKeyFromDataField(dataField);
|
|
667
|
-
actionReducer.push({
|
|
668
|
-
type: ActionType.DataFieldForAction,
|
|
669
|
-
id: getFormID(facetDefinition, dataField),
|
|
670
|
-
key: key,
|
|
671
|
-
text: dataField.Label?.toString(),
|
|
672
|
-
annotationPath: "",
|
|
673
|
-
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
674
|
-
binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
|
|
675
|
-
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden), true))),
|
|
676
|
-
requiresDialog: isActionWithDialog(dataField),
|
|
677
|
-
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
678
|
-
press: compileExpression(
|
|
679
|
-
fn(
|
|
680
|
-
"invokeAction",
|
|
681
|
-
[
|
|
682
|
-
dataField.Action,
|
|
683
|
-
{
|
|
684
|
-
contexts: fn("getBindingContext", [], pathInModel("", "$source")),
|
|
685
|
-
invocationGrouping: (dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet"
|
|
686
|
-
? "ChangeSet"
|
|
687
|
-
: "Isolated") as OperationGroupingType,
|
|
688
|
-
label: dataField.Label?.toString(),
|
|
689
|
-
model: fn("getModel", [], pathInModel("/", "$source")),
|
|
690
|
-
isNavigable: isActionNavigable(
|
|
691
|
-
formManifestActionsConfiguration && formManifestActionsConfiguration[key]
|
|
692
|
-
)
|
|
693
|
-
}
|
|
694
|
-
],
|
|
695
|
-
ref(".editFlow")
|
|
696
|
-
)
|
|
697
|
-
),
|
|
698
|
-
facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
|
|
699
|
-
} as AnnotationAction);
|
|
700
|
-
break;
|
|
701
|
-
default:
|
|
702
|
-
break;
|
|
703
|
-
}
|
|
704
|
-
return actionReducer;
|
|
705
|
-
}, actions);
|
|
706
715
|
// Overwriting of actions happens in addFormMenuActions
|
|
707
716
|
return insertCustomElements(actions, manifestActions);
|
|
708
717
|
}
|
|
@@ -722,7 +731,7 @@ export function isDialog(actionDefinition: Action | undefined): string {
|
|
|
722
731
|
|
|
723
732
|
export function createCustomSubSections(
|
|
724
733
|
manifestSubSections: Record<string, ManifestSubSection>,
|
|
725
|
-
converterContext: ConverterContext
|
|
734
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
726
735
|
): Record<string, CustomObjectPageSubSection> {
|
|
727
736
|
const subSections: Record<string, CustomObjectPageSubSection> = {};
|
|
728
737
|
Object.keys(manifestSubSections).forEach(
|
|
@@ -735,7 +744,7 @@ export function createCustomSubSections(
|
|
|
735
744
|
export function createCustomSubSection(
|
|
736
745
|
manifestSubSection: ManifestSubSection,
|
|
737
746
|
subSectionKey: string,
|
|
738
|
-
converterContext: ConverterContext
|
|
747
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
739
748
|
): CustomObjectPageSubSection {
|
|
740
749
|
const sideContent: SideContentDef | undefined = manifestSubSection.sideContent
|
|
741
750
|
? {
|
|
@@ -795,7 +804,7 @@ export function createCustomSubSection(
|
|
|
795
804
|
function getCondensedTableLayoutCompliance(
|
|
796
805
|
currentFacet: FacetTypes,
|
|
797
806
|
facetsToCreateInSection: FacetTypes[],
|
|
798
|
-
converterContext: ConverterContext
|
|
807
|
+
converterContext: ConverterContext<PageContextPathTarget>
|
|
799
808
|
): boolean {
|
|
800
809
|
const manifestWrapper = converterContext.getManifestWrapper();
|
|
801
810
|
if (manifestWrapper.useIconTabBar()) {
|
|
@@ -6,6 +6,7 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
+
var isProperty = TypeGuards.isProperty;
|
|
9
10
|
var isNavigationProperty = TypeGuards.isNavigationProperty;
|
|
10
11
|
var isEntityType = TypeGuards.isEntityType;
|
|
11
12
|
var isEntitySet = TypeGuards.isEntitySet;
|
|
@@ -67,7 +68,7 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
67
68
|
const oDataModelObjectPath = this._converterContext.getDataModelObjectPath();
|
|
68
69
|
const oNavigationPropertyObject = oDataModelObjectPath === null || oDataModelObjectPath === void 0 ? void 0 : oDataModelObjectPath.targetObject;
|
|
69
70
|
const oEntityTypeObject = oDataModelObjectPath === null || oDataModelObjectPath === void 0 ? void 0 : oDataModelObjectPath.targetEntityType;
|
|
70
|
-
if (oNavigationPropertyObject !== null && oNavigationPropertyObject !== void 0 && (_oNavigationPropertyO = oNavigationPropertyObject.annotations) !== null && _oNavigationPropertyO !== void 0 && (_oNavigationPropertyO2 = _oNavigationPropertyO.Aggregation) !== null && _oNavigationPropertyO2 !== void 0 && _oNavigationPropertyO2.ApplySupported) {
|
|
71
|
+
if (oNavigationPropertyObject !== null && oNavigationPropertyObject !== void 0 && (_oNavigationPropertyO = oNavigationPropertyObject.annotations) !== null && _oNavigationPropertyO !== void 0 && (_oNavigationPropertyO2 = _oNavigationPropertyO.Aggregation) !== null && _oNavigationPropertyO2 !== void 0 && _oNavigationPropertyO2.hasOwnProperty("ApplySupported")) {
|
|
71
72
|
oAggregationAnnotationSource = oNavigationPropertyObject;
|
|
72
73
|
} else if (oEntityTypeObject !== null && oEntityTypeObject !== void 0 && (_oEntityTypeObject$an = oEntityTypeObject.annotations) !== null && _oEntityTypeObject$an !== void 0 && (_oEntityTypeObject$an2 = _oEntityTypeObject$an.Aggregation) !== null && _oEntityTypeObject$an2 !== void 0 && _oEntityTypeObject$an2.ApplySupported) {
|
|
73
74
|
oAggregationAnnotationSource = oEntityTypeObject;
|
|
@@ -144,13 +145,12 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
144
145
|
* Returns AggregatedProperties or AggregatedProperty based on param Term.
|
|
145
146
|
* The Term here indicates if the AggregatedProperty should be retrieved or the deprecated AggregatedProperties.
|
|
146
147
|
*
|
|
147
|
-
* @param Term The Annotation Term
|
|
148
148
|
* @returns Annotations The appropriate annotations based on the given Term.
|
|
149
149
|
*/;
|
|
150
|
-
_proto.getAggregatedProperties = function getAggregatedProperties(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
150
|
+
_proto.getAggregatedProperties = function getAggregatedProperties() {
|
|
151
|
+
return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
|
|
152
|
+
};
|
|
153
|
+
_proto.getAggregatedProperty = function getAggregatedProperty() {
|
|
154
154
|
return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperty", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
|
|
155
155
|
}
|
|
156
156
|
|
|
@@ -158,9 +158,9 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
158
158
|
;
|
|
159
159
|
_proto.getTransAggregations = function getTransAggregations() {
|
|
160
160
|
var _aAggregatedPropertyO;
|
|
161
|
-
let aAggregatedPropertyObjects = this.
|
|
161
|
+
let aAggregatedPropertyObjects = this.getAggregatedProperty();
|
|
162
162
|
if (!aAggregatedPropertyObjects || aAggregatedPropertyObjects.length === 0) {
|
|
163
|
-
aAggregatedPropertyObjects = this.getAggregatedProperties(
|
|
163
|
+
aAggregatedPropertyObjects = this.getAggregatedProperties()[0];
|
|
164
164
|
}
|
|
165
165
|
return (_aAggregatedPropertyO = aAggregatedPropertyObjects) === null || _aAggregatedPropertyO === void 0 ? void 0 : _aAggregatedPropertyO.filter(aggregatedProperty => {
|
|
166
166
|
if (this._getAggregatableAggregates(aggregatedProperty.AggregatableProperty)) {
|
|
@@ -180,10 +180,11 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
180
180
|
return aAggregatableProperties.find(function (obj) {
|
|
181
181
|
var _$target, _obj$Property;
|
|
182
182
|
const prop = property.qualifier ? property.qualifier : (_$target = property.$target) === null || _$target === void 0 ? void 0 : _$target.name;
|
|
183
|
-
if (
|
|
183
|
+
if (isProperty(obj)) {
|
|
184
|
+
return (obj === null || obj === void 0 ? void 0 : obj.name) === prop;
|
|
185
|
+
} else if (obj !== null && obj !== void 0 && (_obj$Property = obj.Property) !== null && _obj$Property !== void 0 && _obj$Property.value) {
|
|
184
186
|
return obj.Property.value === prop;
|
|
185
187
|
}
|
|
186
|
-
return (obj === null || obj === void 0 ? void 0 : obj.name) === prop;
|
|
187
188
|
});
|
|
188
189
|
};
|
|
189
190
|
_proto._getEntityProperties = function _getEntityProperties() {
|
|
@@ -225,4 +226,4 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards"], function (TypeGuards) {
|
|
|
225
226
|
_exports.AggregationHelper = AggregationHelper;
|
|
226
227
|
return _exports;
|
|
227
228
|
}, false);
|
|
228
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBZ2dyZWdhdGlvbkhlbHBlciIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29uc2lkZXJPbGRBbm5vdGF0aW9ucyIsIl9lbnRpdHlUeXBlIiwiX2NvbnZlcnRlckNvbnRleHQiLCJfb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCIsIl9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImlzRW50aXR5VHlwZSIsImlzRW50aXR5U2V0Iiwib1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiX2JBcHBseVN1cHBvcnRlZCIsIkFwcGx5U3VwcG9ydGVkIiwiX2FHcm91cGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsIl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiZW50aXR5UHJvcGVydGllcyIsIl9nZXRFbnRpdHlQcm9wZXJ0aWVzIiwiZmlsdGVyIiwicHJvcGVydHkiLCJBZ2dyZWdhdGFibGUiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwib0VudGl0eVNldE9iamVjdCIsImdldEVudGl0eVNldCIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJzb21lIiwicGF0aCIsIiR0YXJnZXQiLCJpc1Byb3BlcnR5QWdncmVnYXRhYmxlIiwiYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJhbm5vdGF0aW9uIiwibmFtZSIsInF1YWxpZmllciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJUZXJtIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQWdncmVnYXRlZFByb3BlcnR5T2JqZWN0cyIsImFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9nZXRBZ2dyZWdhdGFibGVBZ2dyZWdhdGVzIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJhQWdncmVnYXRhYmxlUHJvcGVydGllcyIsImZpbmQiLCJvYmoiLCJwcm9wIiwiUHJvcGVydHkiLCJ2YWx1ZSIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsIlRyYW5zZm9ybWF0aW9ucyIsIkFwcGx5U3VwcG9ydGVkRGVmYXVsdHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSwgQXBwbHlTdXBwb3J0ZWRUeXBlLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0LCBpc0VudGl0eVR5cGUsIGlzTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG4vKipcbiAqIGhlbHBlciBjbGFzcyBmb3IgQWdncmVnYXRpb24gYW5ub3RhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGlvbkhlbHBlciB7XG5cdF9lbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXG5cdF9jb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xuXG5cdF9iQXBwbHlTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cblx0X2FHcm91cGFibGVQcm9wZXJ0aWVzPzogUHJvcGVydHlQYXRoW107XG5cblx0X2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPzogQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlW10gfCBQcm9wZXJ0eVtdO1xuXG5cdF9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0OiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXG5cdG9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPzpcblx0XHR8IENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHRvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPzogRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIGEgY29udmVydGVyIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqIEBwYXJhbSBbY29uc2lkZXJPbGRBbm5vdGF0aW9uc10gVGhlIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdG8gY29uc2lkZXIgb2xkIGFubm90YXRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBjb25zaWRlck9sZEFubm90YXRpb25zID0gZmFsc2UpIHtcblx0XHQvL2NvbnNpZGVyT2xkQW5ub3RhdGlvbnMgd2lsbCBiZSB0cnVlIGFuZCBzZW50IG9ubHkgZm9yIGNoYXJ0XG5cdFx0dGhpcy5fZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XG5cdFx0dGhpcy5fY29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQ7XG5cblx0XHR0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0ID0gdGhpcy5fZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk7XG5cdFx0aWYgKFxuXHRcdFx0aXNOYXZpZ2F0aW9uUHJvcGVydHkodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCkgfHxcblx0XHRcdGlzRW50aXR5VHlwZSh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KSB8fFxuXHRcdFx0aXNFbnRpdHlTZXQodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldClcblx0XHQpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0LmFubm90YXRpb25zLkFnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0XHR0aGlzLl9iQXBwbHlTdXBwb3J0ZWQgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZCA/IHRydWUgOiBmYWxzZTtcblxuXHRcdGlmICh0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/Lkdyb3VwYWJsZVByb3BlcnRpZXMgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0XHR0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXG5cdFx0XHR0aGlzLm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLmFubm90YXRpb25zXG5cdFx0XHRcdC5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyAmJiBjb25zaWRlck9sZEFubm90YXRpb25zKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlQcm9wZXJ0aWVzID0gdGhpcy5fZ2V0RW50aXR5UHJvcGVydGllcygpO1xuXHRcdFx0dGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBlbnRpdHlQcm9wZXJ0aWVzPy5maWx0ZXIoKHByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFnZ3JlZ2F0YWJsZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRhcmdldCBmb3IgdGhlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgRW50aXR5VHlwZSwgRW50aXR5U2V0IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSB3aGVyZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucyBzaG91bGQgYmUgcmVhZCBmcm9tLlxuXHQgKi9cblx0cHJpdmF0ZSBfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRcdGNvbnN0IGJJc1BhcmFtZXRlcml6ZWQgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKT8udGFyZ2V0RW50aXR5U2V0Py5lbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHQ/LlJlc3VsdENvbnRleHRcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0XHRsZXQgb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblxuXHRcdC8vIGZpbmQgQXBwbHlTdXBwb3J0ZWRcblx0XHRpZiAoYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhIHBhcmFtZXRlcml6ZWQgdmlldyB0aGVuIGFwcGx5c3VwcG9ydGVkIGNhbiBiZSBmb3VuZCBhdCBlaXRoZXIgdGhlIG5hdlByb3AgcG9pbnRpbmcgdG8gdGhlIHJlc3VsdCBzZXQgb3IgZW50aXR5VHlwZS5cblx0XHRcdC8vIElmIGFwcGx5U3VwcG9ydGVkIGlzIHByZXNlbnQgYXQgYm90aCB0aGUgbmF2UHJvcCBhbmQgdGhlIGVudGl0eVR5cGUgdGhlbiBuYXZQcm9wIGlzIG1vcmUgc3BlY2lmaWMgc28gdGFrZSBhbm5vdGF0aW9ucyBmcm9tIHRoZXJlXG5cdFx0XHQvLyB0YXJnZXRPYmplY3QgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciBhIHBhcmFtZXRlcml6ZWQgdmlldyBpcyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aCByZXN1bHQgc2V0XG5cdFx0XHRjb25zdCBvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvRW50aXR5VHlwZU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9FbnRpdHlUeXBlT2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5VHlwZU9iamVjdDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSBpZ25vcmUgYW5ub3RhdGlvbnMgYXQgdGhlIGNvbnRhaW5lciBsZXZlbCwgdW50aWwgdGhlIHZvY2FidWxhcnkgaXMgc3RhYmlsaXplZFxuXHRcdFx0Y29uc3Qgb0VudGl0eVNldE9iamVjdCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRpZiAoaXNFbnRpdHlTZXQob0VudGl0eVNldE9iamVjdCkgJiYgb0VudGl0eVNldE9iamVjdC5hbm5vdGF0aW9ucy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9FbnRpdHlTZXRPYmplY3Q7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGFuYWx5dGljYWwgcXVlcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGFuYWx5dGljYWwgcXVlcmllcyBhcmUgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JBcHBseVN1cHBvcnRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBpcyBncm91cGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLCB0cnVlIG9yIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHVibGljIGlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBObyBncm91cGFibGVQcm9wZXJ0aWVzIC0tPiBhbGwgcHJvcGVydGllcyBhcmUgZ3JvdXBhYmxlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLnNvbWUoKHBhdGgpID0+IHBhdGguJHRhcmdldCA9PT0gcHJvcGVydHkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLCB0cnVlIG9yIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHVibGljIGlzUHJvcGVydHlBZ2dyZWdhdGFibGUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEdldCB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZXNcblx0XHRcdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9uczogQ3VzdG9tQWdncmVnYXRlW10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XHRcIkFnZ3JlZ2F0aW9uXCIsXG5cdFx0XHRcdEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zLkN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFx0W3RoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRdXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGN1c3RvbSBhZ2dyZWdhdGUgaGFzIGEgcXVhbGlmaWVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByb3BlcnR5IG5hbWVcblx0XHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMuc29tZSgoYW5ub3RhdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RW50aXR5VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIG9yIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSBiYXNlZCBvbiBwYXJhbSBUZXJtLlxuXHQgKiBUaGUgVGVybSBoZXJlIGluZGljYXRlcyBpZiB0aGUgQWdncmVnYXRlZFByb3BlcnR5IHNob3VsZCBiZSByZXRyaWV2ZWQgb3IgdGhlIGRlcHJlY2F0ZWQgQWdncmVnYXRlZFByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBUZXJtIFRoZSBBbm5vdGF0aW9uIFRlcm1cblx0ICogQHJldHVybnMgQW5ub3RhdGlvbnMgVGhlIGFwcHJvcHJpYXRlIGFubm90YXRpb25zIGJhc2VkIG9uIHRoZSBnaXZlbiBUZXJtLlxuXHQgKi9cblx0cHVibGljIGdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKFRlcm06IFN0cmluZykge1xuXHRcdGlmIChUZXJtID09PSBcIkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQW5hbHl0aWNzXCIsIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIsIFtcblx0XHRcdFx0dGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKSxcblx0XHRcdFx0dGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkFuYWx5dGljc1wiLCBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlcIiwgW1xuXHRcdFx0dGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKSxcblx0XHRcdHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XSk7XG5cdH1cblxuXHQvLyByZXRpcnZlIGFsbCB0cmFuc2Zvcm1hdGlvbiBhZ2dyZWdhdGVzIGJ5IHByaW9yaXRpemluZyBBZ2dyZWdhdGVkUHJvcGVydHkgb3ZlciBBZ2dyZWdhdGVkUHJvcGVydGllcyBvYmplY3RzXG5cdHB1YmxpYyBnZXRUcmFuc0FnZ3JlZ2F0aW9ucygpIHtcblx0XHRsZXQgYUFnZ3JlZ2F0ZWRQcm9wZXJ0eU9iamVjdHMgPSB0aGlzLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKFwiQWdncmVnYXRlZFByb3BlcnR5XCIpO1xuXHRcdGlmICghYUFnZ3JlZ2F0ZWRQcm9wZXJ0eU9iamVjdHMgfHwgYUFnZ3JlZ2F0ZWRQcm9wZXJ0eU9iamVjdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRhQWdncmVnYXRlZFByb3BlcnR5T2JqZWN0cyA9IHRoaXMuZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMoXCJBZ2dyZWdhdGVkUHJvcGVydGllc1wiKVswXTtcblx0XHR9XG5cdFx0cmV0dXJuIGFBZ2dyZWdhdGVkUHJvcGVydHlPYmplY3RzPy5maWx0ZXIoKGFnZ3JlZ2F0ZWRQcm9wZXJ0eTogQWdncmVnYXRlZFByb3BlcnR5VHlwZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX2dldEFnZ3JlZ2F0YWJsZUFnZ3JlZ2F0ZXMoYWdncmVnYXRlZFByb3BlcnR5LkFnZ3JlZ2F0YWJsZVByb3BlcnR5KSkge1xuXHRcdFx0XHRyZXR1cm4gYWdncmVnYXRlZFByb3BlcnR5O1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGVhY2ggdHJhbnNmb3JtYXRpb24gaXMgYWdncmVnYXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zICdhZ2dyZWdhdGVkUHJvcGVydHknXG5cdCAqL1xuXG5cdHByaXZhdGUgX2dldEFnZ3JlZ2F0YWJsZUFnZ3JlZ2F0ZXMocHJvcGVydHk6IFByb3BlcnR5UGF0aCB8IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT4pIHtcblx0XHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcGVydGllcyA9ICh0aGlzLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKSBhcyBBcHBseVN1cHBvcnRlZFR5cGVbXCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzXCJdKSB8fCBbXTtcblx0XHRyZXR1cm4gYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob2JqOiBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUgfCBhbnkpIHtcblx0XHRcdGNvbnN0IHByb3AgPSAocHJvcGVydHkgYXMgQW5ub3RhdGlvblRlcm08Q3VzdG9tQWdncmVnYXRlPikucXVhbGlmaWVyXG5cdFx0XHRcdD8gKHByb3BlcnR5IGFzIEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT4pLnF1YWxpZmllclxuXHRcdFx0XHQ6IChwcm9wZXJ0eSBhcyBQcm9wZXJ0eVBhdGgpLiR0YXJnZXQ/Lm5hbWU7XG5cdFx0XHRpZiAob2JqPy5Qcm9wZXJ0eT8udmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIG9iai5Qcm9wZXJ0eS52YWx1ZSA9PT0gcHJvcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmo/Lm5hbWUgPT09IHByb3A7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRFbnRpdHlQcm9wZXJ0aWVzKCkge1xuXHRcdGxldCBlbnRpdHlQcm9wZXJ0aWVzO1xuXHRcdGlmIChpc0VudGl0eVNldCh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KSkge1xuXHRcdFx0ZW50aXR5UHJvcGVydGllcyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmVudGl0eVR5cGU/LmVudGl0eVByb3BlcnRpZXM7XG5cdFx0fSBlbHNlIGlmIChpc0VudGl0eVR5cGUodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCkpIHtcblx0XHRcdGVudGl0eVByb3BlcnRpZXMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5lbnRpdHlQcm9wZXJ0aWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZW50aXR5UHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cblx0ICpcblx0ICogQHJldHVybnMgQSBtYXAgKHByb3BlcnR5TmFtZSAtLT4gYXJyYXkgb2YgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcykgZm9yIGVhY2ggY3VzdG9tIGFnZ3JlZ2F0ZSBjb3JyZXNwb25kaW5nIHRvIGEgcHJvcGVydHkuIFRoZSBhcnJheSBvZlxuXHQgKiBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IG5hbWVzIGlzIGVtcHR5IGlmIHRoZSBjdXN0b20gYWdncmVnYXRlIGRvZXNuJ3QgaGF2ZSBhbnkgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eS5cblx0ICovXG5cdHB1YmxpYyBnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpIHtcblx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBDdXN0b21BZ2dyZWdhdGVbXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIkFnZ3JlZ2F0aW9uXCIsXG5cdFx0XHRBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcy5DdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHQpO1xuXHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGxvd2VkIHRyYW5zZm9ybWF0aW9ucyBpbiB0aGUgJGFwcGx5LlxuXHQgKiBGaXJzdCBsb29rIGF0IHRoZSBjdXJyZW50IEVudGl0eVNldCwgdGhlbiBsb29rIGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBwcm92aWRlZCBhdCB0aGUgY29udGFpbmVyIGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbnMsIG9yIHVuZGVmaW5lZCBpZiBubyBsaXN0IGlzIGZvdW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpOiBTdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKSB8fFxuXHRcdFx0KHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj8uQXBwbHlTdXBwb3J0ZWREZWZhdWx0cz8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKVxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFhQTtBQUNBO0FBQ0E7RUFGQSxJQUdhQSxpQkFBaUI7SUFvQjdCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0MsMkJBQVlDLFVBQXNCLEVBQUVDLGdCQUFrQyxFQUFrQztNQUFBO01BQUEsSUFBaENDLHNCQUFzQix1RUFBRyxLQUFLO01BQ3JHO01BQ0EsSUFBSSxDQUFDQyxXQUFXLEdBQUdILFVBQVU7TUFDN0IsSUFBSSxDQUFDSSxpQkFBaUIsR0FBR0gsZ0JBQWdCO01BRXpDLElBQUksQ0FBQ0ksNkJBQTZCLEdBQUcsSUFBSSxDQUFDQyxxQ0FBcUMsRUFBRTtNQUNqRixJQUNDQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUNGLDZCQUE2QixDQUFDLElBQ3hERyxZQUFZLENBQUMsSUFBSSxDQUFDSCw2QkFBNkIsQ0FBQyxJQUNoREksV0FBVyxDQUFDLElBQUksQ0FBQ0osNkJBQTZCLENBQUMsRUFDOUM7UUFDRCxJQUFJLENBQUNLLDZCQUE2QixHQUFHLElBQUksQ0FBQ0wsNkJBQTZCLENBQUNNLFdBQVcsQ0FBQ0MsV0FBVztNQUNoRztNQUNBLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsNkJBQUksQ0FBQ0gsNkJBQTZCLGtEQUFsQyxzQkFBb0NJLGNBQWMsR0FBRyxJQUFJ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
|
|
229
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBZ2dyZWdhdGlvbkhlbHBlciIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiY29uc2lkZXJPbGRBbm5vdGF0aW9ucyIsIl9lbnRpdHlUeXBlIiwiX2NvbnZlcnRlckNvbnRleHQiLCJfb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCIsIl9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImlzRW50aXR5VHlwZSIsImlzRW50aXR5U2V0Iiwib1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiX2JBcHBseVN1cHBvcnRlZCIsIkFwcGx5U3VwcG9ydGVkIiwiX2FHcm91cGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsIl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiZW50aXR5UHJvcGVydGllcyIsIl9nZXRFbnRpdHlQcm9wZXJ0aWVzIiwiZmlsdGVyIiwicHJvcGVydHkiLCJBZ2dyZWdhdGFibGUiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiaGFzT3duUHJvcGVydHkiLCJvRW50aXR5U2V0T2JqZWN0IiwiZ2V0RW50aXR5U2V0IiwiZ2V0RW50aXR5VHlwZSIsImlzQW5hbHl0aWNzU3VwcG9ydGVkIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInNvbWUiLCJwYXRoIiwiJHRhcmdldCIsImlzUHJvcGVydHlBZ2dyZWdhdGFibGUiLCJhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImFubm90YXRpb24iLCJuYW1lIiwicXVhbGlmaWVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJnZXRBZ2dyZWdhdGVkUHJvcGVydGllcyIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsImdldFRyYW5zQWdncmVnYXRpb25zIiwiYUFnZ3JlZ2F0ZWRQcm9wZXJ0eU9iamVjdHMiLCJhZ2dyZWdhdGVkUHJvcGVydHkiLCJfZ2V0QWdncmVnYXRhYmxlQWdncmVnYXRlcyIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJmaW5kIiwib2JqIiwicHJvcCIsImlzUHJvcGVydHkiLCJQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiVHJhbnNmb3JtYXRpb25zIiwiQXBwbHlTdXBwb3J0ZWREZWZhdWx0cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWdncmVnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSwgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvbl9FZG1cIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnRpZXMsIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSwgQWdncmVnYXRlZFByb3BlcnR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNFbnRpdHlUeXBlLCBpc05hdmlnYXRpb25Qcm9wZXJ0eSwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuLyoqXG4gKiBoZWxwZXIgY2xhc3MgZm9yIEFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25IZWxwZXIge1xuXHRfZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblxuXHRfY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xuXG5cdF9iQXBwbHlTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cblx0X2FHcm91cGFibGVQcm9wZXJ0aWVzPzogUHJvcGVydHlQYXRoW107XG5cblx0X2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPzogQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlW10gfCBQcm9wZXJ0eVtdO1xuXG5cdF9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0OiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXG5cdG9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPzpcblx0XHR8IENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHRvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPzogRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIGEgY29udmVydGVyIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqIEBwYXJhbSBbY29uc2lkZXJPbGRBbm5vdGF0aW9uc10gVGhlIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdG8gY29uc2lkZXIgb2xkIGFubm90YXRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sIGNvbnNpZGVyT2xkQW5ub3RhdGlvbnMgPSBmYWxzZSkge1xuXHRcdC8vY29uc2lkZXJPbGRBbm5vdGF0aW9ucyB3aWxsIGJlIHRydWUgYW5kIHNlbnQgb25seSBmb3IgY2hhcnRcblx0XHR0aGlzLl9lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcblx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dDtcblxuXHRcdHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQgPSB0aGlzLl9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQoKTtcblx0XHRpZiAoXG5cdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eSh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KSB8fFxuXHRcdFx0aXNFbnRpdHlUeXBlKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQpIHx8XG5cdFx0XHRpc0VudGl0eVNldCh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQuYW5ub3RhdGlvbnMuQWdncmVnYXRpb247XG5cdFx0fVxuXHRcdHRoaXMuX2JBcHBseVN1cHBvcnRlZCA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uR3JvdXBhYmxlUHJvcGVydGllcyBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRcdHRoaXMuX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/LkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cblx0XHRcdHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnNcblx0XHRcdFx0LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzICYmIGNvbnNpZGVyT2xkQW5ub3RhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGVudGl0eVByb3BlcnRpZXMgPSB0aGlzLl9nZXRFbnRpdHlQcm9wZXJ0aWVzKCk7XG5cdFx0XHR0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IGVudGl0eVByb3BlcnRpZXM/LmZpbHRlcigocHJvcGVydHkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnR5LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQWdncmVnYXRhYmxlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgdGFyZ2V0IGZvciB0aGUgYWdncmVnYXRpb24gYW5ub3RhdGlvbnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zICBFbnRpdHlUeXBlLCBFbnRpdHlTZXQgb3IgTmF2aWdhdGlvblByb3BlcnR5IHdoZXJlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zIHNob3VsZCBiZSByZWFkIGZyb20uXG5cdCAqL1xuXHRwcml2YXRlIF9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQoKTogRW50aXR5VHlwZSB8IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdFx0Y29uc3QgYklzUGFyYW1ldGVyaXplZCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpPy50YXJnZXRFbnRpdHlTZXQ/LmVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdD8uUmVzdWx0Q29udGV4dFxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHRcdGxldCBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlOiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXG5cdFx0Ly8gZmluZCBBcHBseVN1cHBvcnRlZFxuXHRcdGlmIChiSXNQYXJhbWV0ZXJpemVkKSB7XG5cdFx0XHQvLyBpZiB0aGlzIGlzIGEgcGFyYW1ldGVyaXplZCB2aWV3IHRoZW4gYXBwbHlzdXBwb3J0ZWQgY2FuIGJlIGZvdW5kIGF0IGVpdGhlciB0aGUgbmF2UHJvcCBwb2ludGluZyB0byB0aGUgcmVzdWx0IHNldCBvciBlbnRpdHlUeXBlLlxuXHRcdFx0Ly8gSWYgYXBwbHlTdXBwb3J0ZWQgaXMgcHJlc2VudCBhdCBib3RoIHRoZSBuYXZQcm9wIGFuZCB0aGUgZW50aXR5VHlwZSB0aGVuIG5hdlByb3AgaXMgbW9yZSBzcGVjaWZpYyBzbyB0YWtlIGFubm90YXRpb25zIGZyb20gdGhlcmVcblx0XHRcdC8vIHRhcmdldE9iamVjdCBpbiB0aGUgY29udmVydGVyIGNvbnRleHQgZm9yIGEgcGFyYW1ldGVyaXplZCB2aWV3IGlzIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBvaW50aW5nIHRvIHRoIHJlc3VsdCBzZXRcblx0XHRcdGNvbnN0IG9EYXRhTW9kZWxPYmplY3RQYXRoID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdCBhcyBNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlT2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU7XG5cdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5oYXNPd25Qcm9wZXJ0eShcIkFwcGx5U3VwcG9ydGVkXCIpKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0O1xuXHRcdFx0fSBlbHNlIGlmIChvRW50aXR5VHlwZU9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb0VudGl0eVR5cGVPYmplY3Q7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEZvciB0aGUgdGltZSBiZWluZywgd2UgaWdub3JlIGFubm90YXRpb25zIGF0IHRoZSBjb250YWluZXIgbGV2ZWwsIHVudGlsIHRoZSB2b2NhYnVsYXJ5IGlzIHN0YWJpbGl6ZWRcblx0XHRcdGNvbnN0IG9FbnRpdHlTZXRPYmplY3QgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0aWYgKGlzRW50aXR5U2V0KG9FbnRpdHlTZXRPYmplY3QpICYmIG9FbnRpdHlTZXRPYmplY3QuYW5ub3RhdGlvbnMuQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5U2V0T2JqZWN0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSE7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbnRpdHkgc3VwcG9ydHMgYW5hbHl0aWNhbCBxdWVyaWVzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW5hbHl0aWNhbCBxdWVyaWVzIGFyZSBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc0FuYWx5dGljc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fYkFwcGx5U3VwcG9ydGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGdyb3VwYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyB8fCB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIE5vIGdyb3VwYWJsZVByb3BlcnRpZXMgLS0+IGFsbCBwcm9wZXJ0aWVzIGFyZSBncm91cGFibGVcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMuc29tZSgocGF0aCkgPT4gcGF0aC4kdGFyZ2V0ID09PSBwcm9wZXJ0eSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBDdXN0b21BZ2dyZWdhdGVbXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHRcdCk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk6IFByb3BlcnR5UGF0aFtdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpOiBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGVbXSB8IFByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdHJldHVybiB0aGlzLl9lbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgQWdncmVnYXRlZFByb3BlcnRpZXMgb3IgQWdncmVnYXRlZFByb3BlcnR5IGJhc2VkIG9uIHBhcmFtIFRlcm0uXG5cdCAqIFRoZSBUZXJtIGhlcmUgaW5kaWNhdGVzIGlmIHRoZSBBZ2dyZWdhdGVkUHJvcGVydHkgc2hvdWxkIGJlIHJldHJpZXZlZCBvciB0aGUgZGVwcmVjYXRlZCBBZ2dyZWdhdGVkUHJvcGVydGllcy5cblx0ICpcblx0ICogQHJldHVybnMgQW5ub3RhdGlvbnMgVGhlIGFwcHJvcHJpYXRlIGFubm90YXRpb25zIGJhc2VkIG9uIHRoZSBnaXZlbiBUZXJtLlxuXHQgKi9cblx0cHVibGljIGdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKCk6IEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzW10ge1xuXHRcdHJldHVybiB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQW5hbHl0aWNzXCIsIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIsIFtcblx0XHRcdHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCksXG5cdFx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdF0pO1xuXHR9XG5cblx0cHVibGljIGdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSgpOiBBZ2dyZWdhdGVkUHJvcGVydHlbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJBbmFseXRpY3NcIiwgXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5XCIsIFtcblx0XHRcdHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCksXG5cdFx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdF0pO1xuXHR9XG5cblx0Ly8gcmV0aXJ2ZSBhbGwgdHJhbnNmb3JtYXRpb24gYWdncmVnYXRlcyBieSBwcmlvcml0aXppbmcgQWdncmVnYXRlZFByb3BlcnR5IG92ZXIgQWdncmVnYXRlZFByb3BlcnRpZXMgb2JqZWN0c1xuXHRwdWJsaWMgZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTogQWdncmVnYXRlZFByb3BlcnR5W10ge1xuXHRcdGxldCBhQWdncmVnYXRlZFByb3BlcnR5T2JqZWN0cyA9IHRoaXMuZ2V0QWdncmVnYXRlZFByb3BlcnR5KCk7XG5cdFx0aWYgKCFhQWdncmVnYXRlZFByb3BlcnR5T2JqZWN0cyB8fCBhQWdncmVnYXRlZFByb3BlcnR5T2JqZWN0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdGFBZ2dyZWdhdGVkUHJvcGVydHlPYmplY3RzID0gdGhpcy5nZXRBZ2dyZWdhdGVkUHJvcGVydGllcygpWzBdIGFzIHVua25vd24gYXMgQWdncmVnYXRlZFByb3BlcnR5W107XG5cdFx0fVxuXHRcdHJldHVybiBhQWdncmVnYXRlZFByb3BlcnR5T2JqZWN0cz8uZmlsdGVyKChhZ2dyZWdhdGVkUHJvcGVydHk6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUpID0+IHtcblx0XHRcdGlmICh0aGlzLl9nZXRBZ2dyZWdhdGFibGVBZ2dyZWdhdGVzKGFnZ3JlZ2F0ZWRQcm9wZXJ0eS5BZ2dyZWdhdGFibGVQcm9wZXJ0eSkpIHtcblx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0ZWRQcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBlYWNoIHRyYW5zZm9ybWF0aW9uIGlzIGFnZ3JlZ2F0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyAnYWdncmVnYXRlZFByb3BlcnR5J1xuXHQgKi9cblxuXHRwcml2YXRlIF9nZXRBZ2dyZWdhdGFibGVBZ2dyZWdhdGVzKFxuXHRcdHByb3BlcnR5OiBQcm9wZXJ0eVBhdGggfCBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+XG5cdCk6IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSB8IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IHRoaXMuZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpIHx8IFtdO1xuXHRcdHJldHVybiBhQWdncmVnYXRhYmxlUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvYmo6IEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSB8IFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCBwcm9wID0gKHByb3BlcnR5IGFzIEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT4pLnF1YWxpZmllclxuXHRcdFx0XHQ/IChwcm9wZXJ0eSBhcyBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+KS5xdWFsaWZpZXJcblx0XHRcdFx0OiAocHJvcGVydHkgYXMgUHJvcGVydHlQYXRoKS4kdGFyZ2V0Py5uYW1lO1xuXHRcdFx0aWYgKGlzUHJvcGVydHkob2JqKSkge1xuXHRcdFx0XHRyZXR1cm4gb2JqPy5uYW1lID09PSBwcm9wO1xuXHRcdFx0fSBlbHNlIGlmIChvYmo/LlByb3BlcnR5Py52YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gb2JqLlByb3BlcnR5LnZhbHVlID09PSBwcm9wO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0RW50aXR5UHJvcGVydGllcygpOiBQcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgZW50aXR5UHJvcGVydGllcztcblx0XHRpZiAoaXNFbnRpdHlTZXQodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCkpIHtcblx0XHRcdGVudGl0eVByb3BlcnRpZXMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5lbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzO1xuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlUeXBlKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQpKSB7XG5cdFx0XHRlbnRpdHlQcm9wZXJ0aWVzID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uZW50aXR5UHJvcGVydGllcztcblx0XHR9XG5cdFx0cmV0dXJuIGVudGl0eVByb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBjdXN0b20gYWdncmVnYXRlIGRlZmluaXRpb25zIGZvciB0aGUgZW50aXR5IHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgbWFwIChwcm9wZXJ0eU5hbWUgLS0+IGFycmF5IG9mIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkgbmFtZXMpIGZvciBlYWNoIGN1c3RvbSBhZ2dyZWdhdGUgY29ycmVzcG9uZGluZyB0byBhIHByb3BlcnR5LiBUaGUgYXJyYXkgb2Zcblx0ICogY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcyBpcyBlbXB0eSBpZiB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZSBkb2Vzbid0IGhhdmUgYW55IGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTogQ3VzdG9tQWdncmVnYXRlW10ge1xuXHRcdC8vIEdldCB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZXNcblx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEN1c3RvbUFnZ3JlZ2F0ZVtdID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcblx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zLkN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFt0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0XVxuXHRcdCk7XG5cdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbG93ZWQgdHJhbnNmb3JtYXRpb25zIGluIHRoZSAkYXBwbHkuXG5cdCAqIEZpcnN0IGxvb2sgYXQgdGhlIGN1cnJlbnQgRW50aXR5U2V0LCB0aGVuIGxvb2sgYXQgdGhlIGRlZmF1bHQgdmFsdWVzIHByb3ZpZGVkIGF0IHRoZSBjb250YWluZXIgbGV2ZWwuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHRyYW5zZm9ybWF0aW9ucywgb3IgdW5kZWZpbmVkIGlmIG5vIGxpc3QgaXMgZm91bmRcblx0ICovXG5cdHB1YmxpYyBnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk6IFN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5UcmFuc2Zvcm1hdGlvbnMgYXMgU3RyaW5nW10pIHx8XG5cdFx0XHQodGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPy5BcHBseVN1cHBvcnRlZERlZmF1bHRzPy5UcmFuc2Zvcm1hdGlvbnMgYXMgU3RyaW5nW10pXG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FB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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AnnotationTerm, EntitySet, EntityType, NavigationProperty, Property, PropertyPath } from "@sap-ux/vocabularies-types";
|
|
2
|
-
import type {
|
|
2
|
+
import type { MultipleNavigationProperty } from "@sap-ux/vocabularies-types/Edm";
|
|
3
|
+
import type { AggregatablePropertyType, CustomAggregate } from "@sap-ux/vocabularies-types/vocabularies/Aggregation";
|
|
3
4
|
import { AggregationAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Aggregation";
|
|
4
5
|
import type {
|
|
5
6
|
CollectionAnnotations_Aggregation,
|
|
@@ -7,8 +8,9 @@ import type {
|
|
|
7
8
|
EntitySetAnnotations_Aggregation,
|
|
8
9
|
EntityTypeAnnotations_Aggregation
|
|
9
10
|
} from "@sap-ux/vocabularies-types/vocabularies/Aggregation_Edm";
|
|
10
|
-
import type { AggregatedPropertyType } from "@sap-ux/vocabularies-types/vocabularies/Analytics";
|
|
11
|
-
import {
|
|
11
|
+
import type { AggregatedProperties, AggregatedProperty, AggregatedPropertyType } from "@sap-ux/vocabularies-types/vocabularies/Analytics";
|
|
12
|
+
import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
13
|
+
import { isEntitySet, isEntityType, isNavigationProperty, isProperty } from "sap/fe/core/helpers/TypeGuards";
|
|
12
14
|
import type ConverterContext from "../ConverterContext";
|
|
13
15
|
|
|
14
16
|
/**
|
|
@@ -17,7 +19,7 @@ import type ConverterContext from "../ConverterContext";
|
|
|
17
19
|
export class AggregationHelper {
|
|
18
20
|
_entityType: EntityType;
|
|
19
21
|
|
|
20
|
-
_converterContext: ConverterContext
|
|
22
|
+
_converterContext: ConverterContext<PageContextPathTarget>;
|
|
21
23
|
|
|
22
24
|
_bApplySupported: boolean;
|
|
23
25
|
|
|
@@ -41,7 +43,7 @@ export class AggregationHelper {
|
|
|
41
43
|
* @param converterContext The ConverterContext
|
|
42
44
|
* @param [considerOldAnnotations] The flag to indicate whether or not to consider old annotations
|
|
43
45
|
*/
|
|
44
|
-
constructor(entityType: EntityType, converterContext: ConverterContext
|
|
46
|
+
constructor(entityType: EntityType, converterContext: ConverterContext<PageContextPathTarget>, considerOldAnnotations = false) {
|
|
45
47
|
//considerOldAnnotations will be true and sent only for chart
|
|
46
48
|
this._entityType = entityType;
|
|
47
49
|
this._converterContext = converterContext;
|
|
@@ -81,7 +83,7 @@ export class AggregationHelper {
|
|
|
81
83
|
?.ResultContext
|
|
82
84
|
? true
|
|
83
85
|
: false;
|
|
84
|
-
let oAggregationAnnotationSource;
|
|
86
|
+
let oAggregationAnnotationSource: EntityType | EntitySet | NavigationProperty;
|
|
85
87
|
|
|
86
88
|
// find ApplySupported
|
|
87
89
|
if (bIsParameterized) {
|
|
@@ -89,9 +91,9 @@ export class AggregationHelper {
|
|
|
89
91
|
// If applySupported is present at both the navProp and the entityType then navProp is more specific so take annotations from there
|
|
90
92
|
// targetObject in the converter context for a parameterized view is the navigation property pointing to th result set
|
|
91
93
|
const oDataModelObjectPath = this._converterContext.getDataModelObjectPath();
|
|
92
|
-
const oNavigationPropertyObject = oDataModelObjectPath?.targetObject;
|
|
94
|
+
const oNavigationPropertyObject = oDataModelObjectPath?.targetObject as MultipleNavigationProperty;
|
|
93
95
|
const oEntityTypeObject = oDataModelObjectPath?.targetEntityType;
|
|
94
|
-
if (oNavigationPropertyObject?.annotations?.Aggregation?.ApplySupported) {
|
|
96
|
+
if (oNavigationPropertyObject?.annotations?.Aggregation?.hasOwnProperty("ApplySupported")) {
|
|
95
97
|
oAggregationAnnotationSource = oNavigationPropertyObject;
|
|
96
98
|
} else if (oEntityTypeObject?.annotations?.Aggregation?.ApplySupported) {
|
|
97
99
|
oAggregationAnnotationSource = oEntityTypeObject;
|
|
@@ -105,7 +107,7 @@ export class AggregationHelper {
|
|
|
105
107
|
oAggregationAnnotationSource = this._converterContext.getEntityType();
|
|
106
108
|
}
|
|
107
109
|
}
|
|
108
|
-
return oAggregationAnnotationSource
|
|
110
|
+
return oAggregationAnnotationSource!;
|
|
109
111
|
}
|
|
110
112
|
|
|
111
113
|
/**
|
|
@@ -158,15 +160,15 @@ export class AggregationHelper {
|
|
|
158
160
|
}
|
|
159
161
|
}
|
|
160
162
|
|
|
161
|
-
public getGroupableProperties() {
|
|
163
|
+
public getGroupableProperties(): PropertyPath[] | undefined {
|
|
162
164
|
return this._aGroupableProperties;
|
|
163
165
|
}
|
|
164
166
|
|
|
165
|
-
public getAggregatableProperties() {
|
|
167
|
+
public getAggregatableProperties(): AggregatablePropertyType[] | Property[] | undefined {
|
|
166
168
|
return this._aAggregatableProperties;
|
|
167
169
|
}
|
|
168
170
|
|
|
169
|
-
public getEntityType() {
|
|
171
|
+
public getEntityType(): EntityType {
|
|
170
172
|
return this._entityType;
|
|
171
173
|
}
|
|
172
174
|
|
|
@@ -174,16 +176,16 @@ export class AggregationHelper {
|
|
|
174
176
|
* Returns AggregatedProperties or AggregatedProperty based on param Term.
|
|
175
177
|
* The Term here indicates if the AggregatedProperty should be retrieved or the deprecated AggregatedProperties.
|
|
176
178
|
*
|
|
177
|
-
* @param Term The Annotation Term
|
|
178
179
|
* @returns Annotations The appropriate annotations based on the given Term.
|
|
179
180
|
*/
|
|
180
|
-
public getAggregatedProperties(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
181
|
+
public getAggregatedProperties(): AggregatedProperties[] {
|
|
182
|
+
return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [
|
|
183
|
+
this._converterContext.getEntityContainer(),
|
|
184
|
+
this._converterContext.getEntityType()
|
|
185
|
+
]);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
public getAggregatedProperty(): AggregatedProperty[] {
|
|
187
189
|
return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperty", [
|
|
188
190
|
this._converterContext.getEntityContainer(),
|
|
189
191
|
this._converterContext.getEntityType()
|
|
@@ -191,10 +193,10 @@ export class AggregationHelper {
|
|
|
191
193
|
}
|
|
192
194
|
|
|
193
195
|
// retirve all transformation aggregates by prioritizing AggregatedProperty over AggregatedProperties objects
|
|
194
|
-
public getTransAggregations() {
|
|
195
|
-
let aAggregatedPropertyObjects = this.
|
|
196
|
+
public getTransAggregations(): AggregatedProperty[] {
|
|
197
|
+
let aAggregatedPropertyObjects = this.getAggregatedProperty();
|
|
196
198
|
if (!aAggregatedPropertyObjects || aAggregatedPropertyObjects.length === 0) {
|
|
197
|
-
aAggregatedPropertyObjects = this.getAggregatedProperties(
|
|
199
|
+
aAggregatedPropertyObjects = this.getAggregatedProperties()[0] as unknown as AggregatedProperty[];
|
|
198
200
|
}
|
|
199
201
|
return aAggregatedPropertyObjects?.filter((aggregatedProperty: AggregatedPropertyType) => {
|
|
200
202
|
if (this._getAggregatableAggregates(aggregatedProperty.AggregatableProperty)) {
|
|
@@ -210,20 +212,23 @@ export class AggregationHelper {
|
|
|
210
212
|
* @returns 'aggregatedProperty'
|
|
211
213
|
*/
|
|
212
214
|
|
|
213
|
-
private _getAggregatableAggregates(
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
private _getAggregatableAggregates(
|
|
216
|
+
property: PropertyPath | AnnotationTerm<CustomAggregate>
|
|
217
|
+
): AggregatablePropertyType | Property | undefined {
|
|
218
|
+
const aAggregatableProperties = this.getAggregatableProperties() || [];
|
|
219
|
+
return aAggregatableProperties.find(function (obj: AggregatablePropertyType | Property) {
|
|
216
220
|
const prop = (property as AnnotationTerm<CustomAggregate>).qualifier
|
|
217
221
|
? (property as AnnotationTerm<CustomAggregate>).qualifier
|
|
218
222
|
: (property as PropertyPath).$target?.name;
|
|
219
|
-
if (obj
|
|
223
|
+
if (isProperty(obj)) {
|
|
224
|
+
return obj?.name === prop;
|
|
225
|
+
} else if (obj?.Property?.value) {
|
|
220
226
|
return obj.Property.value === prop;
|
|
221
227
|
}
|
|
222
|
-
return obj?.name === prop;
|
|
223
228
|
});
|
|
224
229
|
}
|
|
225
230
|
|
|
226
|
-
private _getEntityProperties() {
|
|
231
|
+
private _getEntityProperties(): Property[] | undefined {
|
|
227
232
|
let entityProperties;
|
|
228
233
|
if (isEntitySet(this._oAggregationAnnotationTarget)) {
|
|
229
234
|
entityProperties = this._oAggregationAnnotationTarget?.entityType?.entityProperties;
|
|
@@ -239,7 +244,7 @@ export class AggregationHelper {
|
|
|
239
244
|
* @returns A map (propertyName --> array of context-defining property names) for each custom aggregate corresponding to a property. The array of
|
|
240
245
|
* context-defining property names is empty if the custom aggregate doesn't have any context-defining property.
|
|
241
246
|
*/
|
|
242
|
-
public getCustomAggregateDefinitions() {
|
|
247
|
+
public getCustomAggregateDefinitions(): CustomAggregate[] {
|
|
243
248
|
// Get the custom aggregates
|
|
244
249
|
const aCustomAggregateAnnotations: CustomAggregate[] = this._converterContext.getAnnotationsByTerm(
|
|
245
250
|
"Aggregation",
|