mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
fix for 1705 (#3131)
This commit is contained in:
@@ -12,6 +12,7 @@ import { CreateSessionData } from '../data/createSessionData';
|
|||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
export class CreateSessionDialog {
|
export class CreateSessionDialog {
|
||||||
|
private readonly _providerType: string;
|
||||||
|
|
||||||
// Top level
|
// Top level
|
||||||
private readonly DialogTitle: string = localize('createSessionDialog.newSession', 'New Session');
|
private readonly DialogTitle: string = localize('createSessionDialog.newSession', 'New Session');
|
||||||
@@ -30,13 +31,17 @@ export class CreateSessionDialog {
|
|||||||
public readonly onSuccess: vscode.Event<CreateSessionData> = this._onSuccess.event;
|
public readonly onSuccess: vscode.Event<CreateSessionData> = this._onSuccess.event;
|
||||||
|
|
||||||
|
|
||||||
constructor(ownerUri: string, templates: Array<sqlops.ProfilerSessionTemplate>) {
|
constructor(ownerUri: string, providerType: string, templates: Array<sqlops.ProfilerSessionTemplate>) {
|
||||||
if (typeof (templates) === 'undefined' || templates === null) {
|
if (typeof (templates) === 'undefined' || templates === null) {
|
||||||
throw new Error(localize('createSessionDialog.templatesInvalid', "Invalid templates list, cannot open dialog"));
|
throw new Error(localize('createSessionDialog.templatesInvalid', "Invalid templates list, cannot open dialog"));
|
||||||
}
|
}
|
||||||
if (typeof (ownerUri) === 'undefined' || ownerUri === null) {
|
if (typeof (ownerUri) === 'undefined' || ownerUri === null) {
|
||||||
throw new Error(localize('createSessionDialog.dialogOwnerInvalid', "Invalid dialog owner, cannot open dialog"));
|
throw new Error(localize('createSessionDialog.dialogOwnerInvalid', "Invalid dialog owner, cannot open dialog"));
|
||||||
}
|
}
|
||||||
|
if (typeof (providerType) === 'undefined' || providerType === null) {
|
||||||
|
throw new Error(localize('createSessionDialog.invalidProviderType', "Invalid provider type, cannot open dialog"));
|
||||||
|
}
|
||||||
|
this._providerType = providerType;
|
||||||
this.model = new CreateSessionData(ownerUri, templates);
|
this.model = new CreateSessionData(ownerUri, templates);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,8 +102,7 @@ export class CreateSessionDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async execute(): Promise<void> {
|
private async execute(): Promise<void> {
|
||||||
let currentConnection = await sqlops.connection.getCurrentConnection();
|
let profilerService = sqlops.dataprotocol.getProvider<sqlops.ProfilerProvider>(this._providerType, sqlops.DataProviderType.ProfilerProvider);
|
||||||
let profilerService = sqlops.dataprotocol.getProvider<sqlops.ProfilerProvider>(currentConnection.providerName, sqlops.DataProviderType.ProfilerProvider);
|
|
||||||
|
|
||||||
let name = this.sessionNameBox.value;
|
let name = this.sessionNameBox.value;
|
||||||
let selected = this.templatesBox.value.toString();
|
let selected = this.templatesBox.value.toString();
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ export class MainController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public activate(): void {
|
public activate(): void {
|
||||||
vscode.commands.registerCommand('profiler.openCreateSessionDialog', (ownerUri: string, templates: Array<sqlops.ProfilerSessionTemplate>) => {
|
vscode.commands.registerCommand('profiler.openCreateSessionDialog', (ownerUri: string, providerType: string, templates: Array<sqlops.ProfilerSessionTemplate>) => {
|
||||||
let dialog = new CreateSessionDialog(ownerUri, templates);
|
let dialog = new CreateSessionDialog(ownerUri, providerType, templates);
|
||||||
dialog.showDialog();
|
dialog.showDialog();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
"Microsoft.mssql"
|
"Microsoft.mssql"
|
||||||
],
|
],
|
||||||
"contributes": {
|
"contributes": {
|
||||||
|
|
||||||
"commands": [
|
"commands": [
|
||||||
{
|
{
|
||||||
"command": "profiler.newProfiler",
|
"command": "profiler.newProfiler",
|
||||||
@@ -49,6 +48,15 @@
|
|||||||
"category": "Profiler"
|
"category": "Profiler"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"menus": {
|
||||||
|
"objectExplorer/item/context": [
|
||||||
|
{
|
||||||
|
"command": "profiler.newProfiler",
|
||||||
|
"when": "connectionProvider == MSSQL && nodeType && nodeType == Server",
|
||||||
|
"group": "profiler"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"outputChannels": [
|
"outputChannels": [
|
||||||
"sqlprofiler"
|
"sqlprofiler"
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -90,9 +90,11 @@ export class ServerTreeActionProvider extends ContributableActionProvider {
|
|||||||
* Return actions for connection elements
|
* Return actions for connection elements
|
||||||
*/
|
*/
|
||||||
public getConnectionActions(tree: ITree, profile: ConnectionProfile): IAction[] {
|
public getConnectionActions(tree: ITree, profile: ConnectionProfile): IAction[] {
|
||||||
|
let node = new TreeNode(NodeType.Server, '', false, '', '', '', undefined, undefined, undefined, undefined);
|
||||||
return this.getAllActions({
|
return this.getAllActions({
|
||||||
tree: tree,
|
tree: tree,
|
||||||
profile: profile
|
profile: profile,
|
||||||
|
treeNode: node
|
||||||
}, (context) => this.getBuiltinConnectionActions(context));
|
}, (context) => this.getBuiltinConnectionActions(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,10 +127,6 @@ export class ServerTreeActionProvider extends ContributableActionProvider {
|
|||||||
actions.push(this._instantiationService.createInstance(DeleteConnectionAction, DeleteConnectionAction.ID, DeleteConnectionAction.DELETE_CONNECTION_LABEL, context.profile));
|
actions.push(this._instantiationService.createInstance(DeleteConnectionAction, DeleteConnectionAction.ID, DeleteConnectionAction.DELETE_CONNECTION_LABEL, context.profile));
|
||||||
actions.push(this._instantiationService.createInstance(RefreshAction, RefreshAction.ID, RefreshAction.LABEL, context.tree, context.profile));
|
actions.push(this._instantiationService.createInstance(RefreshAction, RefreshAction.ID, RefreshAction.LABEL, context.tree, context.profile));
|
||||||
|
|
||||||
if (process.env['VSCODE_DEV'] && constants.MssqlProviderId === context.profile.providerName) {
|
|
||||||
actions.push(this._instantiationService.createInstance(OEAction, NewProfilerAction.ID, NewProfilerAction.LABEL));
|
|
||||||
}
|
|
||||||
|
|
||||||
return actions;
|
return actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiati
|
|||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
||||||
import { IEditorService, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService, IConnectionDialogService} from 'sql/parts/connection/common/connectionManagement';
|
||||||
import { IObjectExplorerService } from '../../objectExplorer/common/objectExplorerService';
|
import { IObjectExplorerService } from '../../objectExplorer/common/objectExplorerService';
|
||||||
import { ProfilerInput } from 'sql/parts/profiler/editor/profilerInput';
|
import { ProfilerInput } from 'sql/parts/profiler/editor/profilerInput';
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
@@ -18,6 +18,10 @@ import { IProfilerService } from '../service/interfaces';
|
|||||||
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||||
import { KeyCode, KeyMod } from 'vs/editor/editor.api';
|
import { KeyCode, KeyMod } from 'vs/editor/editor.api';
|
||||||
import { ProfilerEditor } from '../editor/profilerEditor';
|
import { ProfilerEditor } from '../editor/profilerEditor';
|
||||||
|
import { ObjectExplorerActionsContext } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
|
||||||
|
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
||||||
|
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
||||||
|
import { mssqlProviderName } from 'sql/parts/connection/common/constants';
|
||||||
|
|
||||||
// Contribute Global Actions
|
// Contribute Global Actions
|
||||||
const category = nls.localize('profilerCategory', "Profiler");
|
const category = nls.localize('profilerCategory', "Profiler");
|
||||||
@@ -30,15 +34,45 @@ const newProfilerSchema: IJSONSchema = {
|
|||||||
|
|
||||||
CommandsRegistry.registerCommand({
|
CommandsRegistry.registerCommand({
|
||||||
id: 'profiler.newProfiler',
|
id: 'profiler.newProfiler',
|
||||||
handler: (accessor: ServicesAccessor) => {
|
handler: (accessor: ServicesAccessor, ...args: any[]) => {
|
||||||
let editorService: IEditorService = accessor.get(IEditorService);
|
let connectionProfile: ConnectionProfile = undefined;
|
||||||
let instantiationService: IInstantiationService = accessor.get(IInstantiationService);
|
let instantiationService: IInstantiationService = accessor.get(IInstantiationService);
|
||||||
|
let editorService: IEditorService = accessor.get(IEditorService);
|
||||||
let connectionService: IConnectionManagementService = accessor.get(IConnectionManagementService);
|
let connectionService: IConnectionManagementService = accessor.get(IConnectionManagementService);
|
||||||
let objectExplorerService: IObjectExplorerService = accessor.get(IObjectExplorerService);
|
let objectExplorerService: IObjectExplorerService = accessor.get(IObjectExplorerService);
|
||||||
|
let connectionDialogService: IConnectionDialogService = accessor.get(IConnectionDialogService);
|
||||||
|
let capabilitiesService: ICapabilitiesService = accessor.get(ICapabilitiesService);
|
||||||
|
|
||||||
let connectionProfile = TaskUtilities.getCurrentGlobalConnection(objectExplorerService, connectionService, editorService);
|
// If a context is available if invoked from the context menu, we will use the connection profiler of the server node
|
||||||
|
if (args && args.length === 1 && args[0] && args[0] instanceof ObjectExplorerActionsContext) {
|
||||||
|
let context = args[0] as ObjectExplorerActionsContext;
|
||||||
|
connectionProfile = ConnectionProfile.fromIConnectionProfile(capabilitiesService, context.connectionProfile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// No context available, we will try to get the current global active connection
|
||||||
|
connectionProfile = TaskUtilities.getCurrentGlobalConnection(objectExplorerService, connectionService, editorService) as ConnectionProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
let promise;
|
||||||
|
if (connectionProfile) {
|
||||||
|
promise = connectionService.connectIfNotConnected(connectionProfile);
|
||||||
|
} else {
|
||||||
|
// if still no luck, we will open the Connection dialog and let user connect to a server
|
||||||
|
promise = connectionDialogService.openDialogAndWait(connectionService, { connectionType: 1, providers: [mssqlProviderName] }).then((profile) => {
|
||||||
|
connectionProfile = profile as ConnectionProfile;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return promise.then(() => {
|
||||||
|
if (!connectionProfile) {
|
||||||
|
connectionProfile = TaskUtilities.getCurrentGlobalConnection(objectExplorerService, connectionService, editorService) as ConnectionProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connectionProfile && connectionProfile.providerName === mssqlProviderName) {
|
||||||
let profilerInput = instantiationService.createInstance(ProfilerInput, connectionProfile);
|
let profilerInput = instantiationService.createInstance(ProfilerInput, connectionProfile);
|
||||||
return editorService.openEditor(profilerInput, { pinned: true }, ACTIVE_GROUP).then(() => TPromise.as(true));
|
editorService.openEditor(profilerInput, { pinned: true }, ACTIVE_GROUP).then(() => TPromise.as(true));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,10 @@ export class ProfilerInput extends EditorInput implements IProfilerSession {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get providerType(): string {
|
||||||
|
return this._connection ? this._connection.providerName : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
public set viewTemplate(template: IProfilerViewTemplate) {
|
public set viewTemplate(template: IProfilerViewTemplate) {
|
||||||
this._data.clear();
|
this._data.clear();
|
||||||
this._viewTemplate = template;
|
this._viewTemplate = template;
|
||||||
|
|||||||
@@ -228,6 +228,6 @@ export class ProfilerService implements IProfilerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public launchCreateSessionDialog(input?: ProfilerInput): Thenable<void> {
|
public launchCreateSessionDialog(input?: ProfilerInput): Thenable<void> {
|
||||||
return this._commandService.executeCommand('profiler.openCreateSessionDialog', input.id, this.getSessionTemplates());
|
return this._commandService.executeCommand('profiler.openCreateSessionDialog', input.id, input.providerType, this.getSessionTemplates());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user