Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[KXI-32280] - Move Server Object logic away from models code #444

Merged
merged 1 commit into from
Oct 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 0 additions & 123 deletions src/models/serverObject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
* specific language governing permissions and limitations under the License.
*/

import { LocalConnection } from "../classes/localConnection";
import { loadServerObjects } from "../commands/serverCommand";
import { ext } from "../extensionVariables";

export interface ServerObject {
id: number;
pid: number;
Expand All @@ -25,122 +21,3 @@ export interface ServerObject {
context: object;
isNs: boolean;
}

export async function loadNamespaces(root?: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const ns = serverObjects.filter((value) => {
return value.isNs ? value : undefined;
});

const sorted = sortObjects(ns);

return getNamespaces(sorted, root);
}
return new Array<ServerObject>();
}

export async function loadDictionaries(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const dicts = serverObjects.filter((value) => {
return value.typeNum === 99 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return sortObjects(dicts);
}
return new Array<ServerObject>();
}

export async function loadFunctions(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const funcs = serverObjects.filter((value) => {
return value.typeNum === 100 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return sortObjects(funcs);
}
return new Array<ServerObject>();
}

export async function loadTables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const tables = serverObjects.filter((value) => {
return value.typeNum === 98 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return sortObjects(tables);
}
return new Array<ServerObject>();
}

export async function loadVariables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
const views = await loadViews();

if (serverObjects !== undefined) {
const vars = serverObjects.filter((value) => {
return views.indexOf(value.name) === -1 &&
value.typeNum < 98 &&
!value.isNs &&
value.namespace === ns
? value
: undefined;
});
return sortObjects(vars);
}
return new Array<ServerObject>();
}

export async function loadViews(): Promise<string[]> {
if (ext.activeConnection instanceof LocalConnection) {
const rawViewArray = await ext.activeConnection?.executeQuery("views`");
const views = rawViewArray?.filter((item: any) => {
return item !== "s#" && item !== "" && item !== ",";
});
const sorted = views?.sort((object1: any, object2: any) => {
if (object1 < object2) {
return -1;
} else if (object1 > object2) {
return 1;
}
return 0;
});
return sorted ?? new Array<string>();
}
return new Array<string>();
}

function getNamespaces(input: ServerObject[], root = "."): ServerObject[] {
const output: ServerObject[] = [];

input.forEach((v, i) => {
let index = -1;
if (root === v.namespace) {
index = i;
}

if (index != -1) {
output.push(v);
}
});

return output;
}

function sortObjects(input: ServerObject[]): ServerObject[] {
const sorted = input.sort((object1, object2) => {
if (object1.fname < object2.fname) {
return -1;
} else if (object1.fname > object2.fname) {
return 1;
}
return 0;
});
return sorted;
}
29 changes: 15 additions & 14 deletions src/services/kdbTreeProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,6 @@ import {
commands,
} from "vscode";
import { ext } from "../extensionVariables";
import {
loadDictionaries,
loadFunctions,
loadNamespaces,
loadTables,
loadVariables,
loadViews,
} from "../models/serverObject";
import {
getInsightsAlias,
getServerAlias,
Expand All @@ -53,6 +45,7 @@ import {
Server,
ServerDetails,
} from "../models/connectionsModels";
import { KdbTreeService } from "./kdbTreeService";

export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
private _onDidChangeTreeData: EventEmitter<
Expand Down Expand Up @@ -214,7 +207,7 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {

/* istanbul ignore next */
private async getNamespaces(connLabel?: string): Promise<QNamespaceNode[]> {
const ns = await loadNamespaces();
const ns = await KdbTreeService.loadNamespaces();
const result = ns.map(
(x) =>
new QNamespaceNode(
Expand Down Expand Up @@ -272,7 +265,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
serverType instanceof QCategoryNode ? serverType.connLabel : "";
if (serverType.label === ext.qObjectCategories[0]) {
// dictionaries
const dicts = await loadDictionaries(serverType.contextValue ?? "");
const dicts = await KdbTreeService.loadDictionaries(
serverType.contextValue ?? "",
);
const result = dicts.map(
(x) =>
new QServerNode(
Expand All @@ -291,7 +286,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[1]) {
// functions
const funcs = await loadFunctions(serverType.contextValue ?? "");
const funcs = await KdbTreeService.loadFunctions(
serverType.contextValue ?? "",
);
const result = funcs.map(
(x) =>
new QServerNode(
Expand All @@ -310,7 +307,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[2]) {
// tables
const tables = await loadTables(serverType.contextValue ?? "");
const tables = await KdbTreeService.loadTables(
serverType.contextValue ?? "",
);
const result = tables.map(
(x) =>
new QServerNode(
Expand All @@ -329,7 +328,9 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[3]) {
// variables
const vars = await loadVariables(serverType.contextValue ?? "");
const vars = await KdbTreeService.loadVariables(
serverType.contextValue ?? "",
);
const result = vars.map(
(x) =>
new QServerNode(
Expand All @@ -348,7 +349,7 @@ export class KdbTreeProvider implements TreeDataProvider<TreeItem> {
}
} else if (serverType.label === ext.qObjectCategories[4]) {
// views
const views = await loadViews();
const views = await KdbTreeService.loadViews();
const result = views.map(
(x) =>
new QServerNode(
Expand Down
128 changes: 128 additions & 0 deletions src/services/kdbTreeService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
import { ServerObject } from "../models/serverObject";
import { ext } from "../extensionVariables";
import { loadServerObjects } from "../commands/serverCommand";
import { LocalConnection } from "../classes/localConnection";

export class KdbTreeService {
static async loadNamespaces(root?: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const ns = serverObjects.filter((value) => {
return value.isNs ? value : undefined;
});

const sorted = KdbTreeService.sortObjects(ns);

return KdbTreeService.getNamespaces(sorted, root);
}
return new Array<ServerObject>();
}

static async loadDictionaries(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const dicts = serverObjects.filter((value) => {
return value.typeNum === 99 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(dicts);
}
return new Array<ServerObject>();
}

static async loadFunctions(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const funcs = serverObjects.filter((value) => {
return value.typeNum === 100 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(funcs);
}
return new Array<ServerObject>();
}

static async loadTables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
if (serverObjects !== undefined) {
const tables = serverObjects.filter((value) => {
return value.typeNum === 98 && !value.isNs && value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(tables);
}
return new Array<ServerObject>();
}

static async loadVariables(ns: string): Promise<ServerObject[]> {
const serverObjects = await loadServerObjects();
const views = await KdbTreeService.loadViews();

if (serverObjects !== undefined) {
const vars = serverObjects.filter((value) => {
return views.indexOf(value.name) === -1 &&
value.typeNum < 98 &&
!value.isNs &&
value.namespace === ns
? value
: undefined;
});
return KdbTreeService.sortObjects(vars);
}
return new Array<ServerObject>();
}

static async loadViews(): Promise<string[]> {
if (ext.activeConnection instanceof LocalConnection) {
const rawViewArray = await ext.activeConnection?.executeQuery("views`");
const views = rawViewArray?.filter((item: any) => {
return item !== "s#" && item !== "" && item !== ",";
});
const sorted = views?.sort((object1: any, object2: any) => {
if (object1 < object2) {
return -1;
} else if (object1 > object2) {
return 1;
}
return 0;
});
return sorted ?? new Array<string>();
}
return new Array<string>();
}

private static getNamespaces(
input: ServerObject[],
root = ".",
): ServerObject[] {
const output: ServerObject[] = [];

input.forEach((v, i) => {
let index = -1;
if (root === v.namespace) {
index = i;
}

if (index != -1) {
output.push(v);
}
});

return output;
}

private static sortObjects(input: ServerObject[]): ServerObject[] {
const sorted = input.sort((object1, object2) => {
if (object1.fname < object2.fname) {
return -1;
} else if (object1.fname > object2.fname) {
return 1;
}
return 0;
});
return sorted;
}
}
Loading