Skip to content

Commit 3f001c9

Browse files
authored
Create remote db tree view items based on the user's db config (#1714)
1 parent 93054e1 commit 3f001c9

File tree

7 files changed

+370
-19
lines changed

7 files changed

+370
-19
lines changed
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
1-
import { logger } from '../logging';
21
import { DbConfigStore } from './db-config-store';
32
import { DbItem } from './db-item';
3+
import { createLocalTree, createRemoteTree } from './db-tree-creator';
44

55
export class DbManager {
66
constructor(
77
private readonly dbConfigStore: DbConfigStore
88
) {
99
}
1010

11-
public loadDatabases(): void {
11+
public getDbItems(): DbItem[] {
1212
const config = this.dbConfigStore.getConfig();
13-
void logger.log(`Loaded databases: ${JSON.stringify(config)}`);
14-
15-
// This will be fleshed out in a future change.
16-
}
1713

18-
public getDbItems(): DbItem[] {
19-
// This will be fleshed out in a future change.
20-
return [];
14+
return [
15+
createRemoteTree(config),
16+
createLocalTree()
17+
];
2118
}
2219
}

extensions/ql-vscode/src/databases/db-module.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ export class DbModule extends DisposableObject {
2626
await dbConfigStore.initialize();
2727

2828
const dbManager = new DbManager(dbConfigStore);
29-
dbManager.loadDatabases();
30-
3129
const dbPanel = new DbPanel(dbManager);
3230

3331
this.push(dbPanel);
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import { DbConfig, RemoteRepositoryList } from './db-config';
2+
import {
3+
DbItemKind,
4+
RemoteOwnerDbItem,
5+
RemoteRepoDbItem,
6+
RemoteSystemDefinedListDbItem,
7+
RemoteUserDefinedListDbItem,
8+
RootLocalDbItem,
9+
RootRemoteDbItem
10+
} from './db-item';
11+
12+
export function createRemoteTree(dbConfig: DbConfig): RootRemoteDbItem {
13+
const systemDefinedLists = [
14+
createSystemDefinedList(10),
15+
createSystemDefinedList(100),
16+
createSystemDefinedList(1000)
17+
];
18+
19+
const userDefinedRepoLists = dbConfig.remote.repositoryLists.map(createUserDefinedList);
20+
const owners = dbConfig.remote.owners.map(createOwnerItem);
21+
const repos = dbConfig.remote.repositories.map(createRepoItem);
22+
23+
return {
24+
kind: DbItemKind.RootRemote,
25+
children: [
26+
...systemDefinedLists,
27+
...owners,
28+
...userDefinedRepoLists,
29+
...repos
30+
]
31+
};
32+
}
33+
34+
export function createLocalTree(): RootLocalDbItem {
35+
// This will be fleshed out further in the future.
36+
return {
37+
kind: DbItemKind.RootLocal
38+
};
39+
}
40+
41+
function createSystemDefinedList(n: number): RemoteSystemDefinedListDbItem {
42+
return {
43+
kind: DbItemKind.RemoteSystemDefinedList,
44+
listName: `top_${n}`,
45+
listDisplayName: `Top ${n} repositories`,
46+
listDescription: `Top ${n} repositories of a language`
47+
};
48+
}
49+
50+
function createUserDefinedList(list: RemoteRepositoryList): RemoteUserDefinedListDbItem {
51+
return {
52+
kind: DbItemKind.RemoteUserDefinedList,
53+
listName: list.name,
54+
repos: list.repositories.map((r) => createRepoItem(r))
55+
};
56+
}
57+
58+
function createOwnerItem(owner: string): RemoteOwnerDbItem {
59+
return {
60+
kind: DbItemKind.RemoteOwner,
61+
ownerName: owner
62+
};
63+
}
64+
65+
function createRepoItem(repo: string): RemoteRepoDbItem {
66+
return {
67+
kind: DbItemKind.RemoteRepo,
68+
repoFullName: repo
69+
};
70+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { DbItem, DbItemKind } from '../db-item';
2+
import {
3+
createDbTreeViewItemOwner,
4+
createDbTreeViewItemRepo,
5+
createDbTreeViewItemRoot,
6+
createDbTreeViewItemSystemDefinedList,
7+
createDbTreeViewItemUserDefinedList,
8+
DbTreeViewItem
9+
} from './db-tree-view-item';
10+
11+
export function mapDbItemToTreeViewItem(dbItem: DbItem): DbTreeViewItem {
12+
switch (dbItem.kind) {
13+
case DbItemKind.RootLocal:
14+
return createDbTreeViewItemRoot(
15+
dbItem,
16+
'local',
17+
'Local databases',
18+
[]);
19+
20+
case DbItemKind.RootRemote:
21+
return createDbTreeViewItemRoot(
22+
dbItem,
23+
'remote',
24+
'Remote databases',
25+
dbItem.children.map(c => mapDbItemToTreeViewItem(c)));
26+
27+
case DbItemKind.RemoteSystemDefinedList:
28+
return createDbTreeViewItemSystemDefinedList(
29+
dbItem,
30+
dbItem.listDisplayName,
31+
dbItem.listDescription);
32+
33+
case DbItemKind.RemoteUserDefinedList:
34+
return createDbTreeViewItemUserDefinedList(
35+
dbItem,
36+
dbItem.listName,
37+
dbItem.repos.map(mapDbItemToTreeViewItem));
38+
39+
case DbItemKind.RemoteOwner:
40+
return createDbTreeViewItemOwner(
41+
dbItem,
42+
dbItem.ownerName);
43+
44+
case DbItemKind.RemoteRepo:
45+
return createDbTreeViewItemRepo(
46+
dbItem,
47+
dbItem.repoFullName);
48+
}
49+
}

extensions/ql-vscode/src/databases/ui/db-tree-data-provider.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { logger } from '../../logging';
21
import { ProviderResult, TreeDataProvider, TreeItem } from 'vscode';
32
import { createDbTreeViewItemWarning, DbTreeViewItem } from './db-tree-view-item';
43
import { DbManager } from '../db-manager';
4+
import { mapDbItemToTreeViewItem } from './db-item-mapper';
55

66
export class DbTreeDataProvider implements TreeDataProvider<DbTreeViewItem> {
77
private dbTreeItems: DbTreeViewItem[];
@@ -38,15 +38,12 @@ export class DbTreeDataProvider implements TreeDataProvider<DbTreeViewItem> {
3838
private createTree(): DbTreeViewItem[] {
3939
const dbItems = this.dbManager.getDbItems();
4040

41-
// This will be fleshed out in a future change.
42-
void logger.log(`Creating database tree with ${dbItems.length} items`);
43-
4441
// Add a sample warning as a proof of concept.
4542
const warningTreeViewItem = createDbTreeViewItemWarning(
4643
'There was an error',
4744
'Fix it'
4845
);
4946

50-
return [warningTreeViewItem];
47+
return [...dbItems.map(mapDbItemToTreeViewItem), warningTreeViewItem];
5148
}
5249
}

extensions/ql-vscode/src/databases/ui/db-tree-view-item.ts

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
import * as vscode from 'vscode';
2-
import { DbItem } from '../db-item';
2+
import {
3+
DbItem,
4+
RemoteOwnerDbItem,
5+
RemoteRepoDbItem,
6+
RemoteSystemDefinedListDbItem,
7+
RemoteUserDefinedListDbItem,
8+
RootLocalDbItem,
9+
RootRemoteDbItem
10+
} from '../db-item';
311

412
/**
513
* Represents an item in the database tree view. This item could be
@@ -8,9 +16,9 @@ import { DbItem } from '../db-item';
816
export class DbTreeViewItem extends vscode.TreeItem {
917
constructor(
1018
public readonly dbItem: DbItem | undefined,
11-
public readonly iconPath: vscode.ThemeIcon,
19+
public readonly iconPath: vscode.ThemeIcon | undefined,
1220
public readonly label: string,
13-
public readonly tooltip: string,
21+
public readonly tooltip: string | undefined,
1422
public readonly collapsibleState: vscode.TreeItemCollapsibleState,
1523
public readonly children: DbTreeViewItem[]
1624
) {
@@ -28,3 +36,72 @@ export function createDbTreeViewItemWarning(label: string, tooltip: string): DbT
2836
[]
2937
);
3038
}
39+
40+
export function createDbTreeViewItemRoot(
41+
dbItem: RootLocalDbItem | RootRemoteDbItem,
42+
label: string,
43+
tooltip: string,
44+
children: DbTreeViewItem[]
45+
): DbTreeViewItem {
46+
return new DbTreeViewItem(
47+
dbItem,
48+
undefined,
49+
label,
50+
tooltip,
51+
vscode.TreeItemCollapsibleState.Collapsed,
52+
children);
53+
}
54+
55+
export function createDbTreeViewItemSystemDefinedList(
56+
dbItem: RemoteSystemDefinedListDbItem,
57+
label: string,
58+
tooltip: string
59+
): DbTreeViewItem {
60+
return new DbTreeViewItem(
61+
dbItem,
62+
new vscode.ThemeIcon('github'),
63+
label,
64+
tooltip,
65+
vscode.TreeItemCollapsibleState.None,
66+
[]);
67+
}
68+
69+
export function createDbTreeViewItemUserDefinedList(
70+
dbItem: RemoteUserDefinedListDbItem,
71+
listName: string,
72+
children: DbTreeViewItem[]
73+
): DbTreeViewItem {
74+
return new DbTreeViewItem(
75+
dbItem,
76+
undefined,
77+
listName,
78+
undefined,
79+
vscode.TreeItemCollapsibleState.Collapsed,
80+
children);
81+
}
82+
83+
export function createDbTreeViewItemOwner(
84+
dbItem: RemoteOwnerDbItem,
85+
ownerName: string,
86+
): DbTreeViewItem {
87+
return new DbTreeViewItem(
88+
dbItem,
89+
new vscode.ThemeIcon('organization'),
90+
ownerName,
91+
undefined,
92+
vscode.TreeItemCollapsibleState.None,
93+
[]);
94+
}
95+
96+
export function createDbTreeViewItemRepo(
97+
dbItem: RemoteRepoDbItem,
98+
repoName: string,
99+
): DbTreeViewItem {
100+
return new DbTreeViewItem(
101+
dbItem,
102+
new vscode.ThemeIcon('database'),
103+
repoName,
104+
undefined,
105+
vscode.TreeItemCollapsibleState.None,
106+
[]);
107+
}

0 commit comments

Comments
 (0)