From 677a7b09270062c22ba6c45e7f0dc1eb415c1e77 Mon Sep 17 00:00:00 2001 From: Chinthaka Jayatilake <37581983+ChinthakaJ98@users.noreply.github.com> Date: Fri, 3 Jul 2026 14:56:38 +0530 Subject: [PATCH] Handle errors when generating connectors --- .../mi/mi-core/src/rpc-types/mi-visualizer/index.ts | 3 ++- .../mi-core/src/rpc-types/mi-visualizer/rpc-type.ts | 3 ++- .../mi/mi-core/src/rpc-types/mi-visualizer/types.ts | 5 +++++ .../src/rpc-managers/mi-visualizer/rpc-manager.ts | 9 +++++++-- .../src/rpc-clients/mi-visualizer/rpc-client.ts | 3 ++- .../ConnectionForm/ImportConnectionFromOpenAPI.tsx | 11 +++++++++-- .../ConnectionForm/ImportConnectionFromProto.tsx | 9 ++++++++- 7 files changed, 35 insertions(+), 8 deletions(-) diff --git a/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/index.ts b/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/index.ts index 65a61f97a5f..97b4ffd4b95 100644 --- a/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/index.ts +++ b/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/index.ts @@ -46,6 +46,7 @@ import { UpdatePomValuesRequest, UpdateConfigValuesRequest, ImportOpenAPISpecRequest, + ImportOpenAPISpecResponse, SetupDetails, SetPathRequest, PathDetailsResponse, @@ -104,7 +105,7 @@ export interface MIVisualizerAPI { refetchIntegrationProjectDependencies: () => Promise; getDependencyStatusList: () => Promise; updateDependenciesFromOverview: (params: UpdateDependenciesRequest) => Promise; - importOpenAPISpec: (params: ImportOpenAPISpecRequest) => Promise; + importOpenAPISpec: (params: ImportOpenAPISpecRequest) => Promise; getProjectSetupDetails: () => Promise; updateRuntimeVersionsInPom: (params:string) => Promise; setPathsInWorkSpace: (params: SetPathRequest) => Promise; diff --git a/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/rpc-type.ts b/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/rpc-type.ts index 0e70c296030..722ab923c7a 100644 --- a/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/rpc-type.ts +++ b/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/rpc-type.ts @@ -47,6 +47,7 @@ import { UpdatePomValuesRequest, UpdateConfigValuesRequest, ImportOpenAPISpecRequest, + ImportOpenAPISpecResponse, SetupDetails, SetPathRequest, PathDetailsResponse, @@ -91,7 +92,7 @@ export const showNotification: RequestType = { method: `${_preFix}/getAvailableRuntimeServices` }; export const sendSwaggerProxyRequest: RequestType = { method: `${_preFix}/sendSwaggerProxyRequest` }; export const openExternal: RequestType = { method: `${_preFix}/openExternal` }; -export const importOpenAPISpec: RequestType = { method: `${_preFix}/importOpenAPISpec` }; +export const importOpenAPISpec: RequestType = { method: `${_preFix}/importOpenAPISpec` }; export const getReadmeContent: RequestType = { method: `${_preFix}/getReadmeContent` }; export const openReadme: NotificationType = { method: `${_preFix}/openReadme` }; diff --git a/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/types.ts b/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/types.ts index e7f9fccc50d..39f32a457c3 100644 --- a/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/types.ts +++ b/workspaces/mi/mi-core/src/rpc-types/mi-visualizer/types.ts @@ -393,6 +393,11 @@ export interface ImportOpenAPISpecRequest { filePath: string; } +export interface ImportOpenAPISpecResponse { + isSuccess: boolean; + errorMessage?: string; +} + export interface RuntimeServicesResponse { api: RuntimeServiceDetails | undefined; proxy: RuntimeServiceDetails | undefined; diff --git a/workspaces/mi/mi-extension/src/rpc-managers/mi-visualizer/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/mi-visualizer/rpc-manager.ts index 72b8e9a024a..46eecb4d88a 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/mi-visualizer/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/mi-visualizer/rpc-manager.ts @@ -60,6 +60,7 @@ import { UpdatePomValuesRequest, UpdateConfigValuesRequest, ImportOpenAPISpecRequest, + ImportOpenAPISpecResponse, PathDetailsResponse, DownloadMIRequest, UpdateAiDependenciesRequest, @@ -919,7 +920,7 @@ export class MiVisualizerRpcManager implements MIVisualizerAPI { } } - async importOpenAPISpec(params: ImportOpenAPISpecRequest): Promise { + async importOpenAPISpec(params: ImportOpenAPISpecRequest): Promise { const { filePath } = params; const langClient = await MILanguageClient.getInstance(this.projectUri); if (filePath && filePath.length > 0) { @@ -931,10 +932,14 @@ export class MiVisualizerRpcManager implements MIVisualizerAPI { if (buildStatus) { await copy(connectorPath, path.join(this.projectUri, 'src', 'main', 'wso2mi', 'resources', 'connectors', path.basename(connectorPath))); vscode.window.showInformationMessage("Connector generated successfully"); + return { isSuccess: true }; } else { - vscode.window.showErrorMessage(errorMessage || "Error while generating connector"); + const message = errorMessage || "Error while generating connector"; + vscode.window.showErrorMessage(message); + return { isSuccess: false, errorMessage: message }; } } + return { isSuccess: false, errorMessage: "Please select a valid file for connector generation" }; } async updateProjectSettingsConfig(params: ProjectConfig): Promise { diff --git a/workspaces/mi/mi-rpc-client/src/rpc-clients/mi-visualizer/rpc-client.ts b/workspaces/mi/mi-rpc-client/src/rpc-clients/mi-visualizer/rpc-client.ts index 5d5df003224..28a86d95cb9 100644 --- a/workspaces/mi/mi-rpc-client/src/rpc-clients/mi-visualizer/rpc-client.ts +++ b/workspaces/mi/mi-rpc-client/src/rpc-clients/mi-visualizer/rpc-client.ts @@ -97,6 +97,7 @@ import { updateConnectorDependencies, refetchIntegrationProjectDependencies, ImportOpenAPISpecRequest, + ImportOpenAPISpecResponse, updateRuntimeVersionsInPom, PathDetailsResponse, updateProjectSettingsConfig, @@ -296,7 +297,7 @@ export class MiVisualizerRpcClient implements MIVisualizerAPI { updateDependenciesFromOverview(params: UpdateDependenciesRequest): Promise { return this._messenger.sendRequest(updateDependenciesFromOverview, HOST_EXTENSION, params); } - importOpenAPISpec(params: ImportOpenAPISpecRequest): Promise { + importOpenAPISpec(params: ImportOpenAPISpecRequest): Promise { return this._messenger.sendRequest(importOpenAPISpec, HOST_EXTENSION, params); } updateProjectSettingsConfig(params: ProjectConfig): Promise { diff --git a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromOpenAPI.tsx b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromOpenAPI.tsx index 140051383da..fb73112680d 100644 --- a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromOpenAPI.tsx +++ b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromOpenAPI.tsx @@ -67,9 +67,15 @@ export function ImportConnectionFromOpenAPI(props: ImportConnectionProps) { const importWithOpenAPI = async () => { setIsImporting(true); + setIsFailedImport(false); try { - await rpcClient.getMiVisualizerRpcClient().importOpenAPISpec({ filePath: openApiDir }); - + const result = await rpcClient.getMiVisualizerRpcClient().importOpenAPISpec({ filePath: openApiDir }); + if (!result?.isSuccess) { + setIsFailedImport(true); + setIsImporting(false); + return; + } + const newConnector: any = await waitForEvent(); if (newConnector?.isSuccess) { props.onImportSuccess(); @@ -78,6 +84,7 @@ export function ImportConnectionFromOpenAPI(props: ImportConnectionProps) { } } catch (error) { console.log(error); + setIsFailedImport(true); } setIsImporting(false); }; diff --git a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromProto.tsx b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromProto.tsx index ddd7538766d..b84fcf3dbc6 100644 --- a/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromProto.tsx +++ b/workspaces/mi/mi-visualizer/src/views/Forms/ConnectionForm/ImportConnectionFromProto.tsx @@ -67,8 +67,14 @@ export function ImportConnectionFromProto(props: ImportConnectionProps) { const importWithProto = async () => { setIsImporting(true); + setIsFailedImport(false); try { - await rpcClient.getMiVisualizerRpcClient().importOpenAPISpec({ filePath: protoDir }); + const result = await rpcClient.getMiVisualizerRpcClient().importOpenAPISpec({ filePath: protoDir }); + if (!result?.isSuccess) { + setIsFailedImport(true); + setIsImporting(false); + return; + } const newConnector: any = await waitForEvent(); if (newConnector?.isSuccess) { @@ -78,6 +84,7 @@ export function ImportConnectionFromProto(props: ImportConnectionProps) { } } catch (error) { console.log(error); + setIsFailedImport(true); } setIsImporting(false); };