From 8ed9df7bb9c9ab635169968153d8f9e32567169d Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Thu, 12 Nov 2020 22:30:51 +0200 Subject: [PATCH 1/8] add basctl server --- bas-platform/package.json | 4 ++-- bas-platform/src/extension.ts | 36 ++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/bas-platform/package.json b/bas-platform/package.json index 56d3c88..9020ecc 100644 --- a/bas-platform/package.json +++ b/bas-platform/package.json @@ -2,7 +2,7 @@ "name": "bas-platform", "displayName": "BAS Platform Extension", "description": "SAP Business Application Studio platform extension", - "version": "0.0.5", + "version": "0.0.7", "publisher": "SAPOSS", "license": "Apache-2.0", "engines": { @@ -46,4 +46,4 @@ "vscode-test": "^1.2.2" }, "dependencies": {} -} +} \ No newline at end of file diff --git a/bas-platform/src/extension.ts b/bas-platform/src/extension.ts index c88f831..8a56b76 100644 --- a/bas-platform/src/extension.ts +++ b/bas-platform/src/extension.ts @@ -1,8 +1,13 @@ import * as vscode from 'vscode'; import { bas } from './api'; import { _performAction } from "./actions/performer"; +import * as net from 'net'; +import * as fs from 'fs'; -const subscriptions: Array= []; +const subscriptions: Array = []; + +const SOCKETFILE = '/extbin/basctlSocket'; +let basctlServer: net.Server; function performScheduledActions() { const actionsSettings = vscode.workspace.getConfiguration(); @@ -16,9 +21,36 @@ function performScheduledActions() { } } +function startBasctlServer() { + fs.stat(SOCKETFILE, err => { + if (err) { + createServer(); + } else { + fs.unlink(SOCKETFILE, err => { + if (err) { + throw new Error(err.message); + } + createServer(); + }); + } + }); +} + +function createServer() { + basctlServer = net.createServer(stream => { + stream.on("data", (dataBuffer: any) => { + const data = JSON.parse(dataBuffer.toString()); + const uri = vscode.Uri.parse(data.url, true); + vscode.env.openExternal(uri); // TODO: cast to IAction + }); + }).listen(SOCKETFILE); +} + export async function activate(context: vscode.ExtensionContext) { performScheduledActions(); + startBasctlServer(); + return bas; } @@ -26,4 +58,6 @@ export function deactivate() { for (const subscription of subscriptions) { subscription.dispose(); } + + basctlServer.close(); } From 20f2b5aae814769259c479af4fd96a7fc8a1b572 Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Sun, 15 Nov 2020 12:54:39 +0200 Subject: [PATCH 2/8] add server --- bas-platform/package.json | 9 ++-- bas-platform/src/actions/basctlAction.ts | 69 ++++++++++++++++++++++++ bas-platform/src/extension.ts | 43 +++------------ 3 files changed, 82 insertions(+), 39 deletions(-) create mode 100644 bas-platform/src/actions/basctlAction.ts diff --git a/bas-platform/package.json b/bas-platform/package.json index 9020ecc..027ef88 100644 --- a/bas-platform/package.json +++ b/bas-platform/package.json @@ -39,11 +39,14 @@ "test": "node ./out/test/runTest.js", "package": "vsce package ." }, + "dependencies": { + "lodash": "^4.17.20" + }, "devDependencies": { + "@types/lodash": "^4.14.165", "@types/vscode": "^1.40.0", "typescript": "^3.9.7", "vsce": "^1.69.0", "vscode-test": "^1.2.2" - }, - "dependencies": {} -} \ No newline at end of file + } +} diff --git a/bas-platform/src/actions/basctlAction.ts b/bas-platform/src/actions/basctlAction.ts new file mode 100644 index 0000000..2c16e0b --- /dev/null +++ b/bas-platform/src/actions/basctlAction.ts @@ -0,0 +1,69 @@ +import * as vscode from 'vscode'; +import * as net from 'net'; +import * as fs from 'fs'; +import * as _ from 'lodash'; +// import { bas } from '../api'; + +const SOCKETFILE = '/extbin/basctlSocket'; + +let basctlServer: net.Server; + + +function _addBasctlAction(socket: net.Socket) { + //const openExternal = new bas.actions.ExecuteAction(); + //openExternal.executeAction = async () => { + socket.on("data", dataBuffer => { + let data; + try { + const strData = _.toString(dataBuffer); + vscode.window.showInformationMessage("Client string - " + strData); + data = JSON.parse(strData); + vscode.window.showInformationMessage("Client data.url - " + data.url); + } catch (error) { + const errorMessage = _.get(error, "stack", _.get(error, "message", "failed to parse data")); + vscode.window.showErrorMessage(errorMessage); + return; + } + + if (data.command === "open") { + vscode.window.showInformationMessage("got open command with url - " + data.url); + const uri = vscode.Uri.parse(data.url, true); + vscode.env.openExternal(uri); + } + }); + // } + + //bas.actions.performAction(openExternal); +} + +export function closeBasctlServer() { + if (basctlServer) { + basctlServer.close(); + } +} + +function createBasctlServer() { + try { + basctlServer = net.createServer(socket => { + _addBasctlAction(socket); + }).listen(SOCKETFILE); + } catch (error) { + const errorMessage = _.get(error, "stack", _.get(error, "message", "failed to start basctl server")); + vscode.window.showErrorMessage(errorMessage); + } +} + +export function startBasctlServer() { + fs.stat(SOCKETFILE, err => { + if (err) { + createBasctlServer(); + } else { + fs.unlink(SOCKETFILE, err => { + if (err) { + throw new Error(err.message); + } + createBasctlServer(); + }); + } + }); +} diff --git a/bas-platform/src/extension.ts b/bas-platform/src/extension.ts index 8a56b76..ab8e10b 100644 --- a/bas-platform/src/extension.ts +++ b/bas-platform/src/extension.ts @@ -1,18 +1,14 @@ import * as vscode from 'vscode'; import { bas } from './api'; import { _performAction } from "./actions/performer"; -import * as net from 'net'; -import * as fs from 'fs'; +import { startBasctlServer, closeBasctlServer } from './actions/basctlAction'; const subscriptions: Array = []; -const SOCKETFILE = '/extbin/basctlSocket'; -let basctlServer: net.Server; - function performScheduledActions() { const actionsSettings = vscode.workspace.getConfiguration(); - let actionsList: any[] | undefined = actionsSettings.get("actions"); - if (actionsList && actionsList.length > 0) { + const actionsList: any[] | undefined = actionsSettings.get("actions"); + if (actionsList && actionsList.length) { for (const action of actionsList) { console.log(`performing action ${action.name} of type ${action.constructor.name}`) _performAction(action); @@ -21,43 +17,18 @@ function performScheduledActions() { } } -function startBasctlServer() { - fs.stat(SOCKETFILE, err => { - if (err) { - createServer(); - } else { - fs.unlink(SOCKETFILE, err => { - if (err) { - throw new Error(err.message); - } - createServer(); - }); - } - }); -} - -function createServer() { - basctlServer = net.createServer(stream => { - stream.on("data", (dataBuffer: any) => { - const data = JSON.parse(dataBuffer.toString()); - const uri = vscode.Uri.parse(data.url, true); - vscode.env.openExternal(uri); // TODO: cast to IAction - }); - }).listen(SOCKETFILE); -} +export async function activate() { + startBasctlServer(); -export async function activate(context: vscode.ExtensionContext) { performScheduledActions(); - startBasctlServer(); - return bas; } export function deactivate() { + closeBasctlServer(); + for (const subscription of subscriptions) { subscription.dispose(); } - - basctlServer.close(); } From d125285e1419eba87fc23e670dd91fab7b183646 Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Sun, 15 Nov 2020 13:05:25 +0200 Subject: [PATCH 3/8] fix: add server --- bas-platform/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bas-platform/package.json b/bas-platform/package.json index 027ef88..163e7bc 100644 --- a/bas-platform/package.json +++ b/bas-platform/package.json @@ -6,7 +6,7 @@ "publisher": "SAPOSS", "license": "Apache-2.0", "engines": { - "vscode": "^1.44.2" + "vscode": "^1.44.2" }, "repository": { "type": "git", @@ -49,4 +49,4 @@ "vsce": "^1.69.0", "vscode-test": "^1.2.2" } -} +} \ No newline at end of file From 3bab15c59475af8cc7b571f1fceb0ba1f77d8fc6 Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Sun, 15 Nov 2020 13:12:03 +0200 Subject: [PATCH 4/8] refactor: improve basctl server logic --- bas-platform/src/actions/basctlAction.ts | 44 +++++++++++++----------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/bas-platform/src/actions/basctlAction.ts b/bas-platform/src/actions/basctlAction.ts index 2c16e0b..05d1919 100644 --- a/bas-platform/src/actions/basctlAction.ts +++ b/bas-platform/src/actions/basctlAction.ts @@ -12,30 +12,33 @@ let basctlServer: net.Server; function _addBasctlAction(socket: net.Socket) { //const openExternal = new bas.actions.ExecuteAction(); //openExternal.executeAction = async () => { - socket.on("data", dataBuffer => { - let data; - try { - const strData = _.toString(dataBuffer); - vscode.window.showInformationMessage("Client string - " + strData); - data = JSON.parse(strData); - vscode.window.showInformationMessage("Client data.url - " + data.url); - } catch (error) { - const errorMessage = _.get(error, "stack", _.get(error, "message", "failed to parse data")); - vscode.window.showErrorMessage(errorMessage); - return; - } + socket.on("data", dataBuffer => { + const data: any = getRequestData(dataBuffer); - if (data.command === "open") { - vscode.window.showInformationMessage("got open command with url - " + data.url); - const uri = vscode.Uri.parse(data.url, true); - vscode.env.openExternal(uri); - } - }); - // } + if (data.command === "open") { + const uri = vscode.Uri.parse(data.url, true); + vscode.env.openExternal(uri); + } + }); + // } //bas.actions.performAction(openExternal); } +function getRequestData(dataBuffer: any) { + try { + return JSON.parse(_.toString(dataBuffer)); + } catch (error) { + showErrorMessage(error, "failed to parse basctl request data"); + return {}; + } +} + +function showErrorMessage(error: any, defaultError: string) { + const errorMessage = _.get(error, "stack", _.get(error, "message", defaultError)); + vscode.window.showErrorMessage(errorMessage); +} + export function closeBasctlServer() { if (basctlServer) { basctlServer.close(); @@ -48,8 +51,7 @@ function createBasctlServer() { _addBasctlAction(socket); }).listen(SOCKETFILE); } catch (error) { - const errorMessage = _.get(error, "stack", _.get(error, "message", "failed to start basctl server")); - vscode.window.showErrorMessage(errorMessage); + showErrorMessage(error, "failed to start basctl server"); } } From b33cfe5438043c6e20c292b1dca3fcd618ab83a4 Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Tue, 17 Nov 2020 07:46:10 +0200 Subject: [PATCH 5/8] fix: remove commented lines --- bas-platform/package.json | 2 +- .../{basctlAction.ts => basctlServer.ts} | 22 +++++++------------ 2 files changed, 9 insertions(+), 15 deletions(-) rename bas-platform/src/actions/{basctlAction.ts => basctlServer.ts} (62%) diff --git a/bas-platform/package.json b/bas-platform/package.json index 163e7bc..11a89c9 100644 --- a/bas-platform/package.json +++ b/bas-platform/package.json @@ -2,7 +2,7 @@ "name": "bas-platform", "displayName": "BAS Platform Extension", "description": "SAP Business Application Studio platform extension", - "version": "0.0.7", + "version": "0.0.8", "publisher": "SAPOSS", "license": "Apache-2.0", "engines": { diff --git a/bas-platform/src/actions/basctlAction.ts b/bas-platform/src/actions/basctlServer.ts similarity index 62% rename from bas-platform/src/actions/basctlAction.ts rename to bas-platform/src/actions/basctlServer.ts index 05d1919..9af3353 100644 --- a/bas-platform/src/actions/basctlAction.ts +++ b/bas-platform/src/actions/basctlServer.ts @@ -2,40 +2,34 @@ import * as vscode from 'vscode'; import * as net from 'net'; import * as fs from 'fs'; import * as _ from 'lodash'; -// import { bas } from '../api'; const SOCKETFILE = '/extbin/basctlSocket'; let basctlServer: net.Server; -function _addBasctlAction(socket: net.Socket) { - //const openExternal = new bas.actions.ExecuteAction(); - //openExternal.executeAction = async () => { - socket.on("data", dataBuffer => { +function handleRequest(socket: net.Socket) { + socket.on('data', dataBuffer => { const data: any = getRequestData(dataBuffer); - if (data.command === "open") { + if (data.command === 'open') { const uri = vscode.Uri.parse(data.url, true); vscode.env.openExternal(uri); } }); - // } - - //bas.actions.performAction(openExternal); } function getRequestData(dataBuffer: any) { try { return JSON.parse(_.toString(dataBuffer)); } catch (error) { - showErrorMessage(error, "failed to parse basctl request data"); + showErrorMessage(error, 'failed to parse basctl request data'); return {}; } } function showErrorMessage(error: any, defaultError: string) { - const errorMessage = _.get(error, "stack", _.get(error, "message", defaultError)); + const errorMessage = _.get(error, 'stack', _.get(error, 'message', defaultError)); vscode.window.showErrorMessage(errorMessage); } @@ -48,10 +42,10 @@ export function closeBasctlServer() { function createBasctlServer() { try { basctlServer = net.createServer(socket => { - _addBasctlAction(socket); + handleRequest(socket); }).listen(SOCKETFILE); } catch (error) { - showErrorMessage(error, "failed to start basctl server"); + showErrorMessage(error, 'basctl server error'); } } @@ -62,7 +56,7 @@ export function startBasctlServer() { } else { fs.unlink(SOCKETFILE, err => { if (err) { - throw new Error(err.message); + throw new Error(err.stack); } createBasctlServer(); }); From 78edd3c869e9b3d2c4a5c45d84c3f1af778de8b5 Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Tue, 17 Nov 2020 07:52:48 +0200 Subject: [PATCH 6/8] fix: import basctlServer module --- bas-platform/package.json | 2 +- bas-platform/src/actions/basctlAction.ts | 71 ------------------------ bas-platform/src/extension.ts | 2 +- 3 files changed, 2 insertions(+), 73 deletions(-) delete mode 100644 bas-platform/src/actions/basctlAction.ts diff --git a/bas-platform/package.json b/bas-platform/package.json index b00c833..db30f81 100644 --- a/bas-platform/package.json +++ b/bas-platform/package.json @@ -6,7 +6,7 @@ "publisher": "SAPOSS", "license": "Apache-2.0", "engines": { - "vscode": "^1.44.2" + "vscode": "^1.44.2" }, "repository": { "type": "git", diff --git a/bas-platform/src/actions/basctlAction.ts b/bas-platform/src/actions/basctlAction.ts deleted file mode 100644 index 05d1919..0000000 --- a/bas-platform/src/actions/basctlAction.ts +++ /dev/null @@ -1,71 +0,0 @@ -import * as vscode from 'vscode'; -import * as net from 'net'; -import * as fs from 'fs'; -import * as _ from 'lodash'; -// import { bas } from '../api'; - -const SOCKETFILE = '/extbin/basctlSocket'; - -let basctlServer: net.Server; - - -function _addBasctlAction(socket: net.Socket) { - //const openExternal = new bas.actions.ExecuteAction(); - //openExternal.executeAction = async () => { - socket.on("data", dataBuffer => { - const data: any = getRequestData(dataBuffer); - - if (data.command === "open") { - const uri = vscode.Uri.parse(data.url, true); - vscode.env.openExternal(uri); - } - }); - // } - - //bas.actions.performAction(openExternal); -} - -function getRequestData(dataBuffer: any) { - try { - return JSON.parse(_.toString(dataBuffer)); - } catch (error) { - showErrorMessage(error, "failed to parse basctl request data"); - return {}; - } -} - -function showErrorMessage(error: any, defaultError: string) { - const errorMessage = _.get(error, "stack", _.get(error, "message", defaultError)); - vscode.window.showErrorMessage(errorMessage); -} - -export function closeBasctlServer() { - if (basctlServer) { - basctlServer.close(); - } -} - -function createBasctlServer() { - try { - basctlServer = net.createServer(socket => { - _addBasctlAction(socket); - }).listen(SOCKETFILE); - } catch (error) { - showErrorMessage(error, "failed to start basctl server"); - } -} - -export function startBasctlServer() { - fs.stat(SOCKETFILE, err => { - if (err) { - createBasctlServer(); - } else { - fs.unlink(SOCKETFILE, err => { - if (err) { - throw new Error(err.message); - } - createBasctlServer(); - }); - } - }); -} diff --git a/bas-platform/src/extension.ts b/bas-platform/src/extension.ts index ab8e10b..20514d3 100644 --- a/bas-platform/src/extension.ts +++ b/bas-platform/src/extension.ts @@ -1,7 +1,7 @@ import * as vscode from 'vscode'; import { bas } from './api'; import { _performAction } from "./actions/performer"; -import { startBasctlServer, closeBasctlServer } from './actions/basctlAction'; +import { startBasctlServer, closeBasctlServer } from './actions/basctlServer'; const subscriptions: Array = []; From deadbf6519f794a16e8557823991e5e8ac00376d Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Tue, 17 Nov 2020 10:02:29 +0200 Subject: [PATCH 7/8] Update package.json --- backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/package.json b/backend/package.json index bcbd7ee..00d7ee1 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "guided-development", - "version": "0.0.11", + "version": "0.0.12", "displayName": "Guided Development", "publisher": "SAPOSS", "author": { From a3fc4750650bb6e5f8f3215582e343bef5de20c6 Mon Sep 17 00:00:00 2001 From: Stanislav Lvovsky Date: Tue, 17 Nov 2020 11:21:23 +0200 Subject: [PATCH 8/8] fix: commit message