/** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { collectContextualDocumentationEntries, collectKeyedCommandConfigEntriesFromConfig, type KeyedCommandConfigEntry, type ContextualDocumentationEntry, type SettingConfigurationEntry, collectSettingConfigurationEntriesFromConfig, type LegendApplicationSetup, type VirtualAssistantViewConfiguration, type ApplicationExtensionStateBuilder, } from '@finos/legend-application'; import packageJson from '../../../package.json' with { type: 'json' }; import { LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY } from '../../__lib__/LegendStudioApplicationNavigationContext.js'; import { CORE_CONTEXTUAL_DOCUMENTATION_CONFIG, LEGEND_STUDIO_DOCUMENTATION_KEY, } from '../../__lib__/LegendStudioDocumentation.js'; import { LegendStudioApplicationPlugin, type DSL_LegendStudioApplicationPlugin_Extension, } from '../../stores/LegendStudioApplicationPlugin.js'; import { LEGEND_STUDIO_COMMAND_CONFIG } from '../../__lib__/LegendStudioCommand.js'; import { LEGEND_STUDIO_SETTING_CONFIG } from '../../__lib__/LegendStudioSetting.js'; import { setupPureLanguageService } from '@finos/legend-code-editor'; import { configureCodeEditorComponent } from '@finos/legend-lego/code-editor'; import { STO_RELATIONAL_LEGEND_STUDIO_COMMAND_CONFIG } from '../../__lib__/STO_Relational_LegendStudioCommand.js'; import { LEGEND_CUBE_COMMAND_CONFIG } from '@finos/legend-cube-builder'; import { ShowcaseManager } from '../ShowcaseManager.js'; import { CabinetIcon } from '@finos/legend-art'; import { ShowcaseManagerState } from '../../stores/ShowcaseManagerState.js'; import { LegendStudioTelemetryHelper } from '../../__lib__/LegendStudioTelemetryHelper.js'; import type { LegendStudioApplicationStore } from '../../stores/LegendStudioBaseStore.js'; export const SHOWCASE_MANAGER_VIRTUAL_ASSISTANT_TAB_KEY = 'showcase-manager'; export class Core_LegendStudioApplicationPlugin extends LegendStudioApplicationPlugin { static NAME = packageJson.extensions.applicationStudioPlugin; constructor() { super(Core_LegendStudioApplicationPlugin.NAME, packageJson.version); } override getExtraApplicationExtensionStateBuilders(): ApplicationExtensionStateBuilder[] { return [ (applicationStore) => { const store = applicationStore as LegendStudioApplicationStore; store.assistantService.telemetryCallbacks = { onPanelOpen: () => LegendStudioTelemetryHelper.logEvent_VirtualAssistantPanelOpened( store.telemetryService, ), onPanelClose: () => LegendStudioTelemetryHelper.logEvent_VirtualAssistantPanelClosed( store.telemetryService, ), onTabAccess: (tab) => LegendStudioTelemetryHelper.logEvent_VirtualAssistantTabAccessed( store.telemetryService, tab, ), onSearchInitiated: (searchText) => LegendStudioTelemetryHelper.logEvent_VirtualAssistantDocumentationSearchInitiated( store.telemetryService, searchText, ), onSearchResultAccess: (data) => LegendStudioTelemetryHelper.logEvent_VirtualAssistantSearchResultAccessed( store.telemetryService, data, ), onContextualInfoPresent: (contextKey) => LegendStudioTelemetryHelper.logEvent_VirtualAssistantContextualInfoPresent( store.telemetryService, contextKey, ), }; return new ShowcaseManagerState(store); }, ]; } override getExtraApplicationSetups(): LegendApplicationSetup[] { return [ async (applicationStore) => { await configureCodeEditorComponent(applicationStore); setupPureLanguageService({ extraKeywords: applicationStore.pluginManager .getApplicationPlugins() .flatMap( (plugin) => ( plugin as DSL_LegendStudioApplicationPlugin_Extension ).getExtraPureGrammarKeywords?.() ?? [], ), }); }, ]; } override getExtraKeyedCommandConfigEntries(): KeyedCommandConfigEntry[] { return [ ...collectKeyedCommandConfigEntriesFromConfig( LEGEND_STUDIO_COMMAND_CONFIG, ), ...collectKeyedCommandConfigEntriesFromConfig( STO_RELATIONAL_LEGEND_STUDIO_COMMAND_CONFIG, ), // Legend Cube's shortcuts (F9, Ctrl/Cmd+Z), for Create MatView with // Cube: Studio's own are off while the cube is open ...collectKeyedCommandConfigEntriesFromConfig(LEGEND_CUBE_COMMAND_CONFIG), ]; } override getExtraRequiredDocumentationKeys(): string[] { return [ // grammar parsers LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_PURE, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_MAPPING, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_CONNECTION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_RUNTIME, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_RELATIONAL, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_SERVICE, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_GENERATION_SPECIFICATION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_FILE_GENERATION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_PARSER_DATA, // grammar elements LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_CLASS, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_PROFILE, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_ENUMERATION, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_MEASURE, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_ASSOCIATION, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_FUNCTION, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_MAPPING, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_DATABASE, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_SERVICE, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_RUNTIME, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_CONNECTION, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_GENERATION_SPECIFICATION, LEGEND_STUDIO_DOCUMENTATION_KEY.CONCEPT_ELEMENT_FILE_GENERATION_SPECIFICATION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_DATA_ELEMENT, // grammar elements LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_CONNECTION_JSON_MODEL_CONNECTION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_CONNECTION_XML_MODEL_CONNECTION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_CONNECTION_MODEL_CHAIN_CONNECTION, LEGEND_STUDIO_DOCUMENTATION_KEY.GRAMMAR_CONNECTION_RELATIONAL_DATABASE_CONNECTION, ]; } override getExtraContextualDocumentationEntries(): ContextualDocumentationEntry[] { return collectContextualDocumentationEntries( CORE_CONTEXTUAL_DOCUMENTATION_CONFIG, ); } override getExtraAccessEventLoggingApplicationContextKeys(): string[] { return [ LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.EMBEDDED_QUERY_BUILDER, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.TEXT_MODE_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.MODEL_LOADER, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.CLASS_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.PROFILE_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.ENUMERATION_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.ASSOCIATION_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.FUNCTION_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.MAPPING_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.RUNTIME_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.CONNECTION_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.DATABASE_BUILDER, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.SERVICE_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.DATA_ELEMENT_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.MAPPING_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.BINDING_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.SCHEMA_SET_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.SCHEMA_SET_MODEL_GENERATION, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.EMBEDDED_DATA_RELATIONAL_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.EMBEDDED_DATA_EXTERNAL_FORMAT_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.EMBEDDED_DATA_DATA_ELEMENT_REFERENCE_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.EMBEDDED_DATA_MODEL_STORE_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.INGEST_DEFINITION_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.DATA_PRODUCT_EDITOR, LEGEND_STUDIO_APPLICATION_NAVIGATION_CONTEXT_KEY.AVAILABILITY_EDITOR, ]; } override getExtraSettingConfigurationEntries(): SettingConfigurationEntry[] { return collectSettingConfigurationEntriesFromConfig( LEGEND_STUDIO_SETTING_CONFIG, ); } override getExtraVirtualAssistantViewConfigurations(): VirtualAssistantViewConfiguration[] { return [ { key: SHOWCASE_MANAGER_VIRTUAL_ASSISTANT_TAB_KEY, title: 'Showcases', icon: , autoExpandOnOpen: true, renderer: () => , }, ]; } }