Compare commits

..

17 Commits

Author SHA1 Message Date
Matt Irvine
3545483fc1 Update action collapsed state with emitter (#1099) 2018-04-06 17:58:27 -07:00
Matt Irvine
e5a1896414 Clear connection validation messages on open (#1097) 2018-04-06 15:55:14 -07:00
Anthony Dresser
bec8e72688 fix problems with low result count breaking insights (#1052) 2018-04-06 15:54:43 -07:00
Anthony Dresser
86748e6d69 clear insights view before showing error (#1050) 2018-04-06 15:54:18 -07:00
Anthony Dresser
596f09f754 add custom action for explorer actions (#1059) 2018-04-06 15:53:45 -07:00
Anthony Dresser
563e25f073 add custom output channel (#1087) 2018-04-06 15:52:33 -07:00
Karl Burtram
1800d0baaf Bump SQL Ops to 0.28.2 (#1098) 2018-04-06 15:51:24 -07:00
Karl Burtram
2182658301 Fix OE single click and expand groups by default (#1096) 2018-04-06 15:15:41 -07:00
Karl Burtram
3990719054 Rename registeredServers to objectExplorer (#1093) 2018-04-06 13:33:49 -07:00
Abbie Petchtes
071b510fba add dropdown background color for sqlops light and dark themes (#1088)
* add dropdown background color for sqlops light and dark themes

* edit the colors

* formatting
2018-04-06 10:15:59 -07:00
Anthony Dresser
d2d2ade9f7 register feature for language client for agent (#1086) 2018-04-05 21:49:57 -07:00
Matt Irvine
d97d2e5c91 Reenable logging for SQL Tools Service (#1089) 2018-04-05 16:04:18 -07:00
Abbie Petchtes
a6ba44e435 Fix accessibility issue for clear history button in connection dialog (#1084)
* change clear history connections button to action bar

* formatting
2018-04-05 14:42:21 -07:00
Aditya Bist
4967e630fb Build fix (#1085)
* added caching for jobs view and history page

* added build fix
2018-04-05 12:58:21 -07:00
Abbie Petchtes
2508464fde fix build break in sql agent (#1083)
fix build break in master branch
2018-04-05 11:55:28 -07:00
Abbie Petchtes
782623cba9 fix keyboard issues in task and explorer widgets (#1064) 2018-04-05 10:09:02 -07:00
Aditya Bist
36045c5381 added caching for jobs view and history page (#1056) 2018-04-04 21:56:04 -07:00
84 changed files with 499 additions and 243 deletions

View File

@@ -2,7 +2,7 @@
"name": "agent", "name": "agent",
"displayName": "SQL Server Agent", "displayName": "SQL Server Agent",
"description": "Manage and troubleshoot SQL Server Agent jobs (early preview)", "description": "Manage and troubleshoot SQL Server Agent jobs (early preview)",
"version": "0.27.1", "version": "0.28.0",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"license": "https://raw.githubusercontent.com/Microsoft/sqlopsstudio/master/LICENSE.txt", "license": "https://raw.githubusercontent.com/Microsoft/sqlopsstudio/master/LICENSE.txt",

View File

@@ -1,6 +1,6 @@
{ {
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}", "downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
"version": "1.4.0-alpha.18", "version": "1.4.0-alpha.19",
"downloadFileNames": { "downloadFileNames": {
"Windows_86": "win-x86-netcoreapp2.0.zip", "Windows_86": "win-x86-netcoreapp2.0.zip",
"Windows_64": "win-x64-netcoreapp2.0.zip", "Windows_64": "win-x64-netcoreapp2.0.zip",

View File

@@ -9,3 +9,5 @@ export const providerId = 'MSSQL';
export const serviceCrashMessage = 'SQL Tools Service component exited unexpectedly. Please restart SQL Operations Studio.'; export const serviceCrashMessage = 'SQL Tools Service component exited unexpectedly. Please restart SQL Operations Studio.';
export const serviceCrashButton = 'View Known Issues'; export const serviceCrashButton = 'View Known Issues';
export const serviceCrashLink = 'https://github.com/Microsoft/vscode-mssql/wiki/SqlToolsService-Known-Issues'; export const serviceCrashLink = 'https://github.com/Microsoft/vscode-mssql/wiki/SqlToolsService-Known-Issues';
export const configLogDebugInfo = 'logDebugInfo';
export const extensionConfigSectionName = 'mssql';

View File

@@ -16,7 +16,7 @@ import { CredentialStore } from './credentialstore/credentialstore';
import { AzureResourceProvider } from './resourceProvider/resourceProvider'; import { AzureResourceProvider } from './resourceProvider/resourceProvider';
import * as Utils from './utils'; import * as Utils from './utils';
import { Telemetry, LanguageClientErrorHandler } from './telemetry'; import { Telemetry, LanguageClientErrorHandler } from './telemetry';
import { TelemetryFeature } from './features'; import { TelemetryFeature, AgentServicesFeature } from './features';
const baseConfig = require('./config.json'); const baseConfig = require('./config.json');
const outputChannel = vscode.window.createOutputChannel(Constants.serviceName); const outputChannel = vscode.window.createOutputChannel(Constants.serviceName);
@@ -47,15 +47,17 @@ export async function activate(context: vscode.ExtensionContext) {
let clientOptions: ClientOptions = { let clientOptions: ClientOptions = {
documentSelector: ['sql'], documentSelector: ['sql'],
synchronize: { synchronize: {
configurationSection: 'mssql' configurationSection: Constants.extensionConfigSectionName
}, },
providerId: Constants.providerId, providerId: Constants.providerId,
errorHandler: new LanguageClientErrorHandler(), errorHandler: new LanguageClientErrorHandler(),
features: [ features: [
// we only want to add new features // we only want to add new features
...SqlOpsDataClient.defaultFeatures, ...SqlOpsDataClient.defaultFeatures,
TelemetryFeature TelemetryFeature,
] AgentServicesFeature
],
outputChannel: new CustomOutputChannel()
}; };
const installationStart = Date.now(); const installationStart = Date.now();
@@ -99,6 +101,13 @@ function generateServerOptions(executablePath: string): ServerOptions {
launchArgs.push('--log-dir'); launchArgs.push('--log-dir');
let logFileLocation = path.join(Utils.getDefaultLogLocation(), 'mssql'); let logFileLocation = path.join(Utils.getDefaultLogLocation(), 'mssql');
launchArgs.push(logFileLocation); launchArgs.push(logFileLocation);
let config = vscode.workspace.getConfiguration(Constants.extensionConfigSectionName);
if (config) {
let logDebugInfo = config[Constants.configLogDebugInfo];
if (logDebugInfo) {
launchArgs.push('--enable-logging');
}
}
return { command: executablePath, args: launchArgs, transport: TransportKind.stdio }; return { command: executablePath, args: launchArgs, transport: TransportKind.stdio };
} }
@@ -138,3 +147,23 @@ function generateHandleServerProviderEvent() {
// this method is called when your extension is deactivated // this method is called when your extension is deactivated
export function deactivate(): void { export function deactivate(): void {
} }
class CustomOutputChannel implements vscode.OutputChannel {
name: string;
append(value: string): void {
console.log(value);
}
appendLine(value: string): void {
console.log(value);
}
clear(): void {
}
show(preserveFocus?: boolean): void;
show(column?: vscode.ViewColumn, preserveFocus?: boolean): void;
show(column?: any, preserveFocus?: any) {
}
hide(): void {
}
dispose(): void {
}
}

View File

@@ -26,7 +26,7 @@
// "button.disabledForeground": "#888888" , // "button.disabledForeground": "#888888" ,
//Dropdown Control //Dropdown Control
"dropdown.background": "#333333", "dropdown.background": "#212121",
"dropdown.foreground": "#fffffe", "dropdown.foreground": "#fffffe",
"dropdown.border": "#888888", "dropdown.border": "#888888",
@@ -61,7 +61,7 @@
"panel.background": "#212121", "panel.background": "#212121",
"panel.border": "#515151", "panel.border": "#515151",
"panelTitle.activeForeground": "#ffffff", "panelTitle.activeForeground": "#ffffff",
"panelTitle.inactiveForeground": "#888888" "panelTitle.inactiveForeground": "#888888"
}, },
"tokenColors": [ "tokenColors": [
{ {

View File

@@ -26,7 +26,7 @@
// "button.disabledForeground": "#888888", // "button.disabledForeground": "#888888",
//Dropdown Control //Dropdown Control
"dropdown.background": "#EAEAEA00", "dropdown.background": "#fffffe",
"dropdown.foreground": "#4a4a4a", "dropdown.foreground": "#4a4a4a",
"dropdown.border": "#C8C8C8", "dropdown.border": "#C8C8C8",

View File

@@ -1,6 +1,6 @@
{ {
"name": "sqlops", "name": "sqlops",
"version": "0.28.1", "version": "0.28.2",
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee", "distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
"author": { "author": {
"name": "Microsoft Corporation" "name": "Microsoft Corporation"

View File

@@ -12,7 +12,7 @@ import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { DashboardEditor } from 'sql/parts/dashboard/dashboardEditor'; import { DashboardEditor } from 'sql/parts/dashboard/dashboardEditor';
import { DashboardInput } from 'sql/parts/dashboard/dashboardInput'; import { DashboardInput } from 'sql/parts/dashboard/dashboardInput';
import { AddServerGroupAction, AddServerAction } from 'sql/parts/registeredServer/viewlet/connectionTreeAction'; import { AddServerGroupAction, AddServerAction } from 'sql/parts/objectExplorer/viewlet/connectionTreeAction';
import { ClearRecentConnectionsAction } from 'sql/parts/connection/common/connectionActions'; import { ClearRecentConnectionsAction } from 'sql/parts/connection/common/connectionActions';
import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService'; import { ExtensionGalleryService } from 'vs/platform/extensionManagement/node/extensionGalleryService';

View File

@@ -12,58 +12,94 @@ import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { INotificationService, INotificationActions } from 'vs/platform/notification/common/notification'; import { INotificationService, INotificationActions } from 'vs/platform/notification/common/notification';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import { IConfirmationService, IChoiceService, IConfirmation, IConfirmationResult, Choice } from 'vs/platform/dialogs/common/dialogs';
/** /**
* Workbench action to clear the recent connnections list * Workbench action to clear the recent connnections list
*/ */
export class ClearRecentConnectionsAction extends Action { export class ClearRecentConnectionsAction extends Action {
public static ID = 'clearRecentConnectionsAction'; public static ID = 'clearRecentConnectionsAction';
public static LABEL = nls.localize('ClearRecentlyUsedLabel', 'Clear Recent Connections List'); public static LABEL = nls.localize('ClearRecentlyUsedLabel', 'Clear Recent Connections List');
public static ICON = 'search-action clear-search-results';
constructor( private _onRecentConnectionsRemoved = new Emitter<void>();
id: string, public onRecentConnectionsRemoved: Event<void> = this._onRecentConnectionsRemoved.event;
label: string,
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
@INotificationService private _notificationService: INotificationService,
@IQuickOpenService private _quickOpenService: IQuickOpenService
) {
super(id, label);
this.enabled = true;
}
public run(): TPromise<void> { private _useConfirmationMessage = false;
let self = this;
return self.promptToClearRecentConnectionsList().then(result => { constructor(
id: string,
label: string,
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
@INotificationService private _notificationService: INotificationService,
@IQuickOpenService private _quickOpenService: IQuickOpenService,
@IConfirmationService private _confirmationService: IConfirmationService,
) {
super(id, label, ClearRecentConnectionsAction.ICON);
this.enabled = true;
}
public set useConfirmationMessage(value: boolean) {
this._useConfirmationMessage = value;
}
public run(): TPromise<void> {
if (this._useConfirmationMessage) {
return this.promptConfirmationMessage().then(result => {
if (result) { if (result) {
self._connectionManagementService.clearRecentConnectionsList(); this._connectionManagementService.clearRecentConnectionsList();
this._onRecentConnectionsRemoved.fire();
}
});
} else {
return this.promptQuickOpenService().then(result => {
if (result) {
this._connectionManagementService.clearRecentConnectionsList();
const actions: INotificationActions = { primary: [ ] }; const actions: INotificationActions = { primary: [] };
self._notificationService.notify({ this._notificationService.notify({
severity: Severity.Info, severity: Severity.Info,
message: nls.localize('ClearedRecentConnections', 'Recent connections list cleared'), message: nls.localize('ClearedRecentConnections', 'Recent connections list cleared'),
actions actions
}); });
this._onRecentConnectionsRemoved.fire();
} }
}); });
} }
private promptToClearRecentConnectionsList(): TPromise<boolean> {
const self = this;
return new TPromise<boolean>((resolve, reject) => {
let choices: { key, value }[] = [
{ key: nls.localize('connectionAction.yes', 'Yes'), value: true },
{ key: nls.localize('connectionAction.no', 'No'), value: false }
];
self._quickOpenService.pick(choices.map(x => x.key), { placeHolder: nls.localize('ClearRecentlyUsedLabel', 'Clear Recent Connections List'), ignoreFocusLost: true }).then((choice) => {
let confirm = choices.find(x => x.key === choice);
resolve(confirm && confirm.value);
});
});
}
} }
private promptQuickOpenService(): TPromise<boolean> {
const self = this;
return new TPromise<boolean>((resolve, reject) => {
let choices: { key, value }[] = [
{ key: nls.localize('connectionAction.yes', 'Yes'), value: true },
{ key: nls.localize('connectionAction.no', 'No'), value: false }
];
self._quickOpenService.pick(choices.map(x => x.key), { placeHolder: nls.localize('ClearRecentlyUsedLabel', 'Clear Recent Connections List'), ignoreFocusLost: true }).then((choice) => {
let confirm = choices.find(x => x.key === choice);
resolve(confirm && confirm.value);
});
});
}
private promptConfirmationMessage(): TPromise<boolean> {
let confirm: IConfirmation = {
message: nls.localize('clearRecentConnectionMessage', 'Are you sure you want to delete all the connections from the list?'),
primaryButton: nls.localize('connectionDialog.yes', 'Yes'),
secondaryButton: nls.localize('connectionDialog.no', 'No'),
type: 'question'
};
return new TPromise<boolean>((resolve, reject) => {
this._confirmationService.confirm(confirm).then((confirmed) => {
resolve(confirmed);
});
});
}
}
/** /**
* Action to delete one recently used connection from the MRU * Action to delete one recently used connection from the MRU
*/ */

View File

@@ -10,7 +10,7 @@ import { IEditorGroupService } from 'vs/workbench/services/group/common/groupSer
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService'; import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
// Connection status bar showing the current global connection // Connection status bar showing the current global connection

View File

@@ -11,13 +11,14 @@ import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { Modal } from 'sql/base/browser/ui/modal/modal'; import { Modal } from 'sql/base/browser/ui/modal/modal';
import { IConnectionManagementService, INewConnectionParams } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, INewConnectionParams } from 'sql/parts/connection/common/connectionManagement';
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper'; import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
import { TreeCreationUtils } from 'sql/parts/registeredServer/viewlet/treeCreationUtils'; import { TreeCreationUtils } from 'sql/parts/objectExplorer/viewlet/treeCreationUtils';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { TabbedPanel, PanelTabIdentifier } from 'sql/base/browser/ui/panel/panel'; import { TabbedPanel, PanelTabIdentifier } from 'sql/base/browser/ui/panel/panel';
import { RecentConnectionTreeController, RecentConnectionActionsProvider } from 'sql/parts/connection/connectionDialog/recentConnectionTreeController'; import { RecentConnectionTreeController, RecentConnectionActionsProvider } from 'sql/parts/connection/connectionDialog/recentConnectionTreeController';
import { SavedConnectionTreeController } from 'sql/parts/connection/connectionDialog/savedConnectionTreeController'; import { SavedConnectionTreeController } from 'sql/parts/connection/connectionDialog/savedConnectionTreeController';
import * as TelemetryKeys from 'sql/common/telemetryKeys'; import * as TelemetryKeys from 'sql/common/telemetryKeys';
import { ClearRecentConnectionsAction } from 'sql/parts/connection/common/connectionActions';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IWorkbenchThemeService, IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IWorkbenchThemeService, IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
@@ -32,11 +33,11 @@ import { localize } from 'vs/nls';
import { ITree } from 'vs/base/parts/tree/browser/tree'; import { ITree } from 'vs/base/parts/tree/browser/tree';
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IConfirmationService, IChoiceService, IConfirmation, IConfirmationResult, Choice } from 'vs/platform/dialogs/common/dialogs';
import * as styler from 'vs/platform/theme/common/styler'; import * as styler from 'vs/platform/theme/common/styler';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import * as DOM from 'vs/base/browser/dom'; import * as DOM from 'vs/base/browser/dom';
import { DialogService } from 'vs/workbench/services/dialogs/electron-browser/dialogs'; import { DialogService } from 'vs/workbench/services/dialogs/electron-browser/dialogs';
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
export interface OnShowUIResponse { export interface OnShowUIResponse {
selectedProviderType: string; selectedProviderType: string;
@@ -58,6 +59,7 @@ export class ConnectionDialogWidget extends Modal {
private _savedConnectionTree: ITree; private _savedConnectionTree: ITree;
private $connectionUIContainer: Builder; private $connectionUIContainer: Builder;
private _databaseDropdownExpanded: boolean; private _databaseDropdownExpanded: boolean;
private _actionbar: ActionBar;
private _panel: TabbedPanel; private _panel: TabbedPanel;
private _recentConnectionTabId: PanelTabIdentifier; private _recentConnectionTabId: PanelTabIdentifier;
@@ -90,7 +92,6 @@ export class ConnectionDialogWidget extends Modal {
@ITelemetryService telemetryService: ITelemetryService, @ITelemetryService telemetryService: ITelemetryService,
@IContextKeyService contextKeyService: IContextKeyService, @IContextKeyService contextKeyService: IContextKeyService,
@IContextMenuService private _contextMenuService: IContextMenuService, @IContextMenuService private _contextMenuService: IContextMenuService,
@IConfirmationService private _confirmationService: IConfirmationService,
@IContextViewService private _contextViewService: IContextViewService @IContextViewService private _contextViewService: IContextViewService
) { ) {
super(localize('connection', 'Connection'), TelemetryKeys.Connection, _partService, telemetryService, contextKeyService, { hasSpinner: true, hasErrors: true }); super(localize('connection', 'Connection'), TelemetryKeys.Connection, _partService, telemetryService, contextKeyService, { hasSpinner: true, hasErrors: true });
@@ -257,26 +258,6 @@ export class ConnectionDialogWidget extends Modal {
this.hide(); this.hide();
} }
private clearRecentConnectionList(): TPromise<boolean> {
let confirm: IConfirmation = {
message: localize('clearRecentConnectionMessage', 'Are you sure you want to delete all the connections from the list?'),
primaryButton: localize('connectionDialog.yes', 'Yes'),
secondaryButton: localize('connectionDialog.no', 'No'),
type: 'question'
};
return new TPromise<boolean>((resolve, reject) => {
this._confirmationService.confirm(confirm).then((confirmed) => {
if (confirmed) {
this._connectionManagementService.clearRecentConnectionsList();
this.open(false);
}
resolve(confirmed);
});
});
}
private createRecentConnectionList(): void { private createRecentConnectionList(): void {
this._recentConnectionBuilder.div({ class: 'connection-recent-content' }, (recentConnectionContainer) => { this._recentConnectionBuilder.div({ class: 'connection-recent-content' }, (recentConnectionContainer) => {
let recentHistoryLabel = localize('recentHistory', 'Recent history'); let recentHistoryLabel = localize('recentHistory', 'Recent history');
@@ -284,8 +265,12 @@ export class ConnectionDialogWidget extends Modal {
container.div({ class: 'connection-history-label' }, (recentTitle) => { container.div({ class: 'connection-history-label' }, (recentTitle) => {
recentTitle.innerHtml(recentHistoryLabel); recentTitle.innerHtml(recentHistoryLabel);
}); });
container.div({ class: 'search-action clear-search-results' }, (clearSearchIcon) => { container.div({ class: 'connection-history-actions' }, (actionsContainer) => {
clearSearchIcon.on('click', () => this.clearRecentConnectionList()); this._actionbar = this._register(new ActionBar(actionsContainer, { animated: false }));
let clearAction = this._instantiationService.createInstance(ClearRecentConnectionsAction, ClearRecentConnectionsAction.ID, ClearRecentConnectionsAction.LABEL);
clearAction.useConfirmationMessage = true;
clearAction.onRecentConnectionsRemoved(() => this.open(false));
this._actionbar.push(clearAction, { icon: true, label: false });
}); });
}); });
recentConnectionContainer.div({ class: 'server-explorer-viewlet' }, (divContainer: Builder) => { recentConnectionContainer.div({ class: 'server-explorer-viewlet' }, (divContainer: Builder) => {

View File

@@ -343,6 +343,12 @@ export class ConnectionWidget {
public focusOnOpen(): void { public focusOnOpen(): void {
this._serverNameInputBox.focus(); this._serverNameInputBox.focus();
this.focusPasswordIfNeeded(); this.focusPasswordIfNeeded();
this.clearValidationMessages();
}
private clearValidationMessages(): void {
this._serverNameInputBox.hideMessage();
this._userNameInputBox.hideMessage();
} }
private getModelValue(value: string): string { private getModelValue(value: string): string {

View File

@@ -69,15 +69,21 @@
overflow-y: hidden; overflow-y: hidden;
} }
.connection-dialog .connection-history-actions .action-label.icon {
display: block;
height: 20px;
line-height: 20px;
min-width: 20px;
background-size: 16px;
background-position: center center;
background-repeat: no-repeat;
}
.search-action.clear-search-results { .search-action.clear-search-results {
background: url('clear-search-results.svg') center right no-repeat; background: url('clear-search-results.svg');
width: 10%;
cursor: pointer;
} }
.vs-dark .search-action.clear-search-results, .vs-dark .search-action.clear-search-results,
.hc-black .search-action.clear-search-results { .hc-black .search-action.clear-search-results {
background: url('clear-search-results-dark.svg') center right no-repeat; background: url('clear-search-results-dark.svg');
width: 10%;
cursor: pointer;
} }

View File

@@ -8,6 +8,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable } from 'vs/base/common/lifecycle';
import Event from 'vs/base/common/event';
import { IAngularEventingService, AngularEventType, IAngularEvent } from 'sql/services/angularEventing/angularEventingService'; import { IAngularEventingService, AngularEventType, IAngularEvent } from 'sql/services/angularEventing/angularEventingService';
import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface'; import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface';
@@ -209,6 +210,7 @@ export class CollapseWidgetAction extends Action {
private _uri: string, private _uri: string,
private _widgetUuid: string, private _widgetUuid: string,
private collpasedState: boolean, private collpasedState: boolean,
private collapsedStateChangedEvent: Event<boolean>,
@IAngularEventingService private _angularEventService: IAngularEventingService @IAngularEventingService private _angularEventService: IAngularEventingService
) { ) {
super( super(
@@ -216,6 +218,7 @@ export class CollapseWidgetAction extends Action {
collpasedState ? CollapseWidgetAction.EXPAND_LABEL : CollapseWidgetAction.COLLPASE_LABEL, collpasedState ? CollapseWidgetAction.EXPAND_LABEL : CollapseWidgetAction.COLLPASE_LABEL,
collpasedState ? CollapseWidgetAction.EXPAND_ICON : CollapseWidgetAction.COLLAPSE_ICON collpasedState ? CollapseWidgetAction.EXPAND_ICON : CollapseWidgetAction.COLLAPSE_ICON
); );
this.collapsedStateChangedEvent(collapsed => this._updateState(collapsed));
} }
run(): TPromise<boolean> { run(): TPromise<boolean> {
@@ -225,7 +228,11 @@ export class CollapseWidgetAction extends Action {
} }
private _toggleState(): void { private _toggleState(): void {
this.collpasedState = !this.collpasedState; this._updateState(!this.collpasedState);
}
private _updateState(collapsed: boolean): void {
this.collpasedState = collapsed;
this._setClass(this.collpasedState ? CollapseWidgetAction.EXPAND_ICON : CollapseWidgetAction.COLLAPSE_ICON); this._setClass(this.collpasedState ? CollapseWidgetAction.EXPAND_ICON : CollapseWidgetAction.COLLAPSE_ICON);
this._setLabel(this.collpasedState ? CollapseWidgetAction.EXPAND_LABEL : CollapseWidgetAction.COLLPASE_LABEL); this._setLabel(this.collpasedState ? CollapseWidgetAction.EXPAND_LABEL : CollapseWidgetAction.COLLPASE_LABEL);
} }

View File

@@ -35,6 +35,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
import { memoize } from 'vs/base/common/decorators'; import { memoize } from 'vs/base/common/decorators';
import { generateUuid } from 'vs/base/common/uuid'; import { generateUuid } from 'vs/base/common/uuid';
import { Emitter } from 'vs/base/common/event';
const componentMap: { [x: string]: Type<IDashboardWidget> } = { const componentMap: { [x: string]: Type<IDashboardWidget> } = {
'properties-widget': PropertiesWidgetComponent, 'properties-widget': PropertiesWidgetComponent,
@@ -63,12 +64,17 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
return; return;
} }
this._collapsed = val; this._collapsed = val;
if (this.collapsedStateChangedEmitter) {
this.collapsedStateChangedEmitter.fire(this._collapsed);
}
this._changeref.detectChanges(); this._changeref.detectChanges();
if (!val) { if (!val) {
this.loadWidget(); this.loadWidget();
} }
} }
private collapsedStateChangedEmitter: Emitter<boolean>;
@memoize @memoize
public get guid(): string { public get guid(): string {
return generateUuid(); return generateUuid();
@@ -108,7 +114,8 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
this._actionbar = new ActionBar(this._actionbarRef.nativeElement); this._actionbar = new ActionBar(this._actionbarRef.nativeElement);
if (this._actions) { if (this._actions) {
if (this.collapsable) { if (this.collapsable) {
this._actionbar.push(this._bootstrap.instantiationService.createInstance(CollapseWidgetAction, this._bootstrap.getUnderlyingUri(), this.guid, this.collapsed), { icon: true, label: false }); this.collapsedStateChangedEmitter = new Emitter<boolean>();
this._actionbar.push(this._bootstrap.instantiationService.createInstance(CollapseWidgetAction, this._bootstrap.getUnderlyingUri(), this.guid, this.collapsed, this.collapsedStateChangedEmitter.event), { icon: true, label: false });
} }
this._actionbar.push(this._bootstrap.instantiationService.createInstance(ToggleMoreWidgetAction, this._actions, this._component.actionsContext), { icon: true, label: false }); this._actionbar.push(this._bootstrap.instantiationService.createInstance(ToggleMoreWidgetAction, this._actions, this._component.actionsContext), { icon: true, label: false });
} }

View File

@@ -15,6 +15,7 @@ import {
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService'; import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
import { ConnectionManagementInfo } from 'sql/parts/connection/common/connectionManagementInfo'; import { ConnectionManagementInfo } from 'sql/parts/connection/common/connectionManagementInfo';
import * as Constants from 'sql/parts/connection/common/constants'; import * as Constants from 'sql/parts/connection/common/constants';
import { OEAction } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { ObjectMetadata } from 'sqlops'; import { ObjectMetadata } from 'sqlops';
@@ -27,7 +28,8 @@ import { IAction } from 'vs/base/common/actions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { generateUuid } from 'vs/base/common/uuid'; import { generateUuid } from 'vs/base/common/uuid';
import { $ } from 'vs/base/browser/dom'; import { $ } from 'vs/base/browser/dom';
import { OEAction } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { ExecuteCommandAction } from 'vs/platform/actions/common/actions';
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
export class ObjectMetadataWrapper implements ObjectMetadata { export class ObjectMetadataWrapper implements ObjectMetadata {
public metadataType: MetadataType; public metadataType: MetadataType;
@@ -164,6 +166,19 @@ export class ExplorerController extends TreeDefaults.DefaultController {
this._router.navigate(['database-dashboard']); this._router.navigate(['database-dashboard']);
}); });
} }
protected onEnter(tree: tree.ITree, event: IKeyboardEvent): boolean {
let result = super.onEnter(tree, event);
if (result) {
const focus = tree.getFocus();
if (focus && !(focus instanceof ObjectMetadataWrapper)) {
this._connectionService.changeDatabase(focus.databaseName).then(result => {
this._router.navigate(['database-dashboard']);
});
}
}
return result;
}
} }
export class ExplorerDataSource implements tree.IDataSource { export class ExplorerDataSource implements tree.IDataSource {
@@ -371,14 +386,14 @@ function GetExplorerActions(element: TreeResource, instantiationService: IInstan
actions.push(instantiationService.createInstance(ScriptAlterAction, ScriptAlterAction.ID, ScriptAlterAction.LABEL)); actions.push(instantiationService.createInstance(ScriptAlterAction, ScriptAlterAction.ID, ScriptAlterAction.LABEL));
} }
} else { } else {
actions.push(instantiationService.createInstance(OEAction, NewQueryAction.ID, NewQueryAction.LABEL)); actions.push(instantiationService.createInstance(CustomExecuteCommandAction, NewQueryAction.ID, NewQueryAction.LABEL));
let action: IAction = instantiationService.createInstance(OEAction, RestoreAction.ID, RestoreAction.LABEL); let action: IAction = instantiationService.createInstance(CustomExecuteCommandAction, RestoreAction.ID, RestoreAction.LABEL);
if (capabilitiesService.isFeatureAvailable(action, info)) { if (capabilitiesService.isFeatureAvailable(action, info)) {
actions.push(action); actions.push(action);
} }
action = instantiationService.createInstance(OEAction, BackupAction.ID, BackupAction.LABEL); action = instantiationService.createInstance(CustomExecuteCommandAction, BackupAction.ID, BackupAction.LABEL);
if (capabilitiesService.isFeatureAvailable(action, info)) { if (capabilitiesService.isFeatureAvailable(action, info)) {
actions.push(action); actions.push(action);
} }
@@ -391,3 +406,9 @@ function GetExplorerActions(element: TreeResource, instantiationService: IInstan
return TPromise.as(actions); return TPromise.as(actions);
} }
class CustomExecuteCommandAction extends ExecuteCommandAction {
run(context: ManageActionContext): TPromise<any> {
return super.run(context.profile);
}
}

View File

@@ -10,7 +10,7 @@ import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { RunQueryOnConnectionMode, IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { RunQueryOnConnectionMode, IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import { InsightActionContext } from 'sql/workbench/common/actions'; import { InsightActionContext } from 'sql/workbench/common/actions';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
export class RunInsightQueryAction extends Action { export class RunInsightQueryAction extends Action {

View File

@@ -187,13 +187,14 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
} }
private _updateChild(result: SimpleExecuteResult): void { private _updateChild(result: SimpleExecuteResult): void {
this.componentHost.viewContainerRef.clear();
if (result.rowCount === 0) { if (result.rowCount === 0) {
this.showError(nls.localize('noResults', 'No results to show')); this.showError(nls.localize('noResults', 'No results to show'));
return; return;
} }
let componentFactory = this._componentFactoryResolver.resolveComponentFactory<IInsightsView>(insightRegistry.getCtorFromId(this._typeKey)); let componentFactory = this._componentFactoryResolver.resolveComponentFactory<IInsightsView>(insightRegistry.getCtorFromId(this._typeKey));
this.componentHost.viewContainerRef.clear();
let componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory); let componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory);
let componentInstance = componentRef.instance; let componentInstance = componentRef.instance;

View File

@@ -111,7 +111,6 @@ export abstract class ChartInsight extends Disposable implements IInsightsView {
protected abstract get chartType(): ChartType; protected abstract get chartType(): ChartType;
constructor( constructor(
@Inject(forwardRef(() => ChangeDetectorRef)) private _changeRef: ChangeDetectorRef, @Inject(forwardRef(() => ChangeDetectorRef)) private _changeRef: ChangeDetectorRef,
@Inject(forwardRef(() => ElementRef)) private _el: ElementRef, @Inject(forwardRef(() => ElementRef)) private _el: ElementRef,
@@ -127,7 +126,6 @@ export abstract class ChartInsight extends Disposable implements IInsightsView {
// This is because chart.js doesn't auto-update anything other than dataset when re-rendering so defaults are used // This is because chart.js doesn't auto-update anything other than dataset when re-rendering so defaults are used
// hence it's easier to not render until ready // hence it's easier to not render until ready
this.options = mixin(this.options, { maintainAspectRatio: false }); this.options = mixin(this.options, { maintainAspectRatio: false });
this._isDataAvailable = true;
this._changeRef.detectChanges(); this._changeRef.detectChanges();
TelemetryUtils.addTelemetry(this._bootstrapService.telemetryService, TelemetryKeys.ChartCreated, { type: this.chartType }); TelemetryUtils.addTelemetry(this._bootstrapService.telemetryService, TelemetryKeys.ChartCreated, { type: this.chartType });
} }
@@ -178,6 +176,9 @@ export abstract class ChartInsight extends Disposable implements IInsightsView {
unmemoize(this, 'chartData'); unmemoize(this, 'chartData');
unmemoize(this, 'labels'); unmemoize(this, 'labels');
this._data = data; this._data = data;
if (isValidData(data)) {
this._isDataAvailable = true;
}
this._changeRef.detectChanges(); this._changeRef.detectChanges();
} }
@@ -226,14 +227,14 @@ export abstract class ChartInsight extends Disposable implements IInsightsView {
data: this._data.rows.map(row => Number(row[i])), data: this._data.rows.map(row => Number(row[i])),
label: this._data.columns[i] label: this._data.columns[i]
}; };
}).slice(1); });
} else { } else {
return this._data.rows[0].map((row, i) => { return this._data.rows[0].map((row, i) => {
return { return {
data: this._data.rows.map(row => Number(row[i])), data: this._data.rows.map(row => Number(row[i])),
label: 'Series' + i label: 'Series' + i
}; };
}).slice(1); });
} }
} }
} }
@@ -284,3 +285,19 @@ export abstract class ChartInsight extends Disposable implements IInsightsView {
this.options = mixin(this.options, options); this.options = mixin(this.options, options);
} }
} }
function isValidData(data: IInsightData): boolean {
if (types.isUndefinedOrNull(data)) {
return false;
}
if (types.isUndefinedOrNull(data.columns)) {
return false;
}
if (types.isUndefinedOrNull(data.rows)) {
return false;
}
return true;
}

View File

@@ -31,6 +31,8 @@ import * as DOM from 'vs/base/browser/dom';
import { CommandsRegistry, ICommand } from 'vs/platform/commands/common/commands'; import { CommandsRegistry, ICommand } from 'vs/platform/commands/common/commands';
import { MenuRegistry, ICommandAction } from 'vs/platform/actions/common/actions'; import { MenuRegistry, ICommandAction } from 'vs/platform/actions/common/actions';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
interface ITask { interface ITask {
name: string; name: string;
@@ -135,7 +137,15 @@ export class TasksWidget extends DashboardWidget implements IDashboardWidget, On
} }
innerTile.append(label); innerTile.append(label);
tile.append(innerTile); tile.append(innerTile);
tile.attr('tabindex', '0');
tile.on(DOM.EventType.CLICK, () => this.runTask(action)); tile.on(DOM.EventType.CLICK, () => this.runTask(action));
tile.on(DOM.EventType.KEY_DOWN, (e: KeyboardEvent) => {
let event = new StandardKeyboardEvent(e);
if (event.equals(KeyCode.Enter)) {
this.runTask(action);
e.stopImmediatePropagation();
}
});
return tile.getHTMLElement(); return tile.getHTMLElement();
} }

View File

@@ -22,7 +22,7 @@ import { MssqlRestoreInfo } from 'sql/parts/disasterRecovery/restore/mssqlRestor
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { ProviderConnectionInfo } from 'sql/parts/connection/common/providerConnectionInfo'; import { ProviderConnectionInfo } from 'sql/parts/connection/common/providerConnectionInfo';
import * as Utils from 'sql/parts/connection/common/utils'; import * as Utils from 'sql/parts/connection/common/utils';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { ITaskService } from 'sql/parts/taskHistory/common/taskService'; import { ITaskService } from 'sql/parts/taskHistory/common/taskService';
import { TaskStatus, TaskNode } from 'sql/parts/taskHistory/common/taskNode'; import { TaskStatus, TaskNode } from 'sql/parts/taskHistory/common/taskNode';

View File

@@ -351,7 +351,9 @@ export class ChartViewerComponent implements OnInit, OnDestroy, IChartViewAction
this.componentHost.viewContainerRef.clear(); this.componentHost.viewContainerRef.clear();
let componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory); let componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory);
this._chartComponent = <ChartInsight>componentRef.instance; this._chartComponent = <ChartInsight>componentRef.instance;
this._chartComponent.setConfig(this._chartConfig); if (this._chartComponent.setConfig) {
this._chartComponent.setConfig(this._chartConfig);
}
this._chartComponent.data = this._executeResult; this._chartComponent.data = this._executeResult;
this._chartComponent.options = mixin(this._chartComponent.options, { animation: { duration: 0 } }); this._chartComponent.options = mixin(this._chartComponent.options, { animation: { duration: 0 } });
if (this._chartComponent.init) { if (this._chartComponent.init) {

View File

@@ -9,10 +9,10 @@
<tab [title]="jobsComponentTitle" class="fullsize" [identifier]="jobsTabIdentifier" <tab [title]="jobsComponentTitle" class="fullsize" [identifier]="jobsTabIdentifier"
[iconClass]="jobsIconClass"> [iconClass]="jobsIconClass">
<div id="jobsDiv" class="fullsize" *ngIf="showHistory === false"> <div id="jobsDiv" class="fullsize" *ngIf="showHistory === false">
<jobsview-component ></jobsview-component> <jobsview-component></jobsview-component>
</div> </div>
<div id="historyDiv" class="fullsize" *ngIf="showHistory === true"> <div id="historyDiv" class="fullsize" *ngIf="showHistory === true">
<jobhistory-component [jobId]="jobId" [agentJobInfo]="agentJobInfo"></jobhistory-component> <jobhistory-component [jobId]="jobId" [agentJobInfo]="agentJobInfo" [agentJobHistories]="agentJobHistories"></jobhistory-component>
</div> </div>
</tab> </tab>
</panel> </panel>

View File

@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import * as nls from 'vs/nls';
import { OnInit, Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, OnDestroy, ViewChild, Injectable } from '@angular/core'; import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, Injectable } from '@angular/core';
import * as Utils from 'sql/parts/connection/common/utils'; import * as Utils from 'sql/parts/connection/common/utils';
import { RefreshWidgetAction, EditDashboardAction } from 'sql/parts/dashboard/common/actions'; import { RefreshWidgetAction, EditDashboardAction } from 'sql/parts/dashboard/common/actions';
import { IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
@@ -14,11 +14,9 @@ import * as themeColors from 'vs/workbench/common/theme';
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component'; import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component';
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
import { IBootstrapService, BOOTSTRAP_SERVICE_ID } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapService, BOOTSTRAP_SERVICE_ID } from 'sql/services/bootstrap/bootstrapService';
import { IJobManagementService } from '../common/interfaces';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
import { AgentJobInfo, AgentJobHistoryInfo } from 'sqlops'; import { AgentJobInfo, AgentJobHistoryInfo } from 'sqlops';
import { PanelComponent, IPanelOptions, NavigationBarLayout } from 'sql/base/browser/ui/panel/panel.component'; import { PanelComponent, IPanelOptions, NavigationBarLayout } from 'sql/base/browser/ui/panel/panel.component';
import * as nls from 'vs/nls';
export const DASHBOARD_SELECTOR: string = 'agentview-component'; export const DASHBOARD_SELECTOR: string = 'agentview-component';
@@ -40,7 +38,7 @@ export class AgentViewComponent {
private _showHistory: boolean = false; private _showHistory: boolean = false;
private _jobId: string = null; private _jobId: string = null;
private _agentJobInfo: AgentJobInfo = null; private _agentJobInfo: AgentJobInfo = null;
private _agentJobHistoryInfo: AgentJobHistoryInfo[] = null; private _agentJobHistories: AgentJobHistoryInfo[] = null;
public jobsIconClass: string = 'jobsview-icon'; public jobsIconClass: string = 'jobsview-icon';
@@ -52,8 +50,8 @@ export class AgentViewComponent {
}; };
constructor( constructor(
@Inject(forwardRef(() => ChangeDetectorRef)) private _cd: ChangeDetectorRef, @Inject(forwardRef(() => ChangeDetectorRef)) private _cd: ChangeDetectorRef){
){} }
/** /**
* Public Getters * Public Getters
@@ -70,8 +68,8 @@ export class AgentViewComponent {
return this._agentJobInfo; return this._agentJobInfo;
} }
public get agentJobHistoryInfo(): AgentJobHistoryInfo[] { public get agentJobHistories(): AgentJobHistoryInfo[] {
return this._agentJobHistoryInfo; return this._agentJobHistories;
} }
/** /**
@@ -93,8 +91,8 @@ export class AgentViewComponent {
this._cd.detectChanges(); this._cd.detectChanges();
} }
public set agentJobHistoryInfo(value: AgentJobHistoryInfo[]) { public set agentJobHistories(value: AgentJobHistoryInfo[]) {
this._agentJobHistoryInfo = value; this._agentJobHistories = value;
this._cd.detectChanges(); this._cd.detectChanges();
} }
} }

View File

@@ -0,0 +1,54 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import { Injectable } from '@angular/core';
import * as sqlops from 'sqlops';
import * as vscode from 'vscode';
import { IAgentJobCacheService } from './interfaces';
@Injectable()
export class AgentJobCacheService implements IAgentJobCacheService {
_serviceBrand: any;
private _jobs: sqlops.AgentJobInfo[];
private _jobHistories: { [jobId: string]: sqlops.AgentJobHistoryInfo[]; } = {};
private _prevJobID: string;
/* Getters */
public get jobs(): sqlops.AgentJobInfo[] {
return this._jobs;
}
public get jobHistories(): { [jobId: string]: sqlops.AgentJobHistoryInfo[] } {
return this._jobHistories;
}
public get prevJobID(): string {
return this._prevJobID;
}
public getJobHistory(jobID: string): sqlops.AgentJobHistoryInfo[] {
return this._jobHistories[jobID];
}
/* Setters */
public set jobs(value: sqlops.AgentJobInfo[]) {
this._jobs = value;
}
public set jobHistories(value: { [jobId: string]: sqlops.AgentJobHistoryInfo[]; }) {
this._jobHistories = value;
}
public set prevJobID(value: string) {
this._prevJobID = value;
}
public setJobHistory(jobID:string, value: sqlops.AgentJobHistoryInfo[]) {
this._jobHistories[jobID] = value;
}
}

View File

@@ -5,12 +5,15 @@
'use strict'; 'use strict';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import * as sqlops from 'sqlops'; import * as sqlops from 'sqlops';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { Table } from 'sql/base/browser/ui/table/table';
export const SERVICE_ID = 'jobManagementService'; export const SERVICE_ID = 'jobManagementService';
export const CACHE_ID = 'jobCacheService';
export const IJobManagementService = createDecorator<IJobManagementService>(SERVICE_ID); export const IJobManagementService = createDecorator<IJobManagementService>(SERVICE_ID);
export const IAgentJobCacheService = createDecorator<IAgentJobCacheService>(CACHE_ID);
export interface IJobManagementService { export interface IJobManagementService {
_serviceBrand: any; _serviceBrand: any;
@@ -23,3 +26,17 @@ export interface IJobManagementService {
jobAction(connectionUri: string, jobName: string, action: string): Thenable<sqlops.AgentJobActionResult>; jobAction(connectionUri: string, jobName: string, action: string): Thenable<sqlops.AgentJobActionResult>;
} }
export interface IAgentJobCacheService {
_serviceBrand: any;
jobs: sqlops.AgentJobInfo[];
jobHistories: { [jobId: string]: sqlops.AgentJobHistoryInfo[]; };
prevJobID: string;
getJobHistory(jobID: string): sqlops.AgentJobHistoryInfo[];
setJobHistory(jobID: string, value: sqlops.AgentJobHistoryInfo[]);
}

View File

@@ -132,3 +132,7 @@ jobhistory-component {
.vs-dark .jobsview-icon { .vs-dark .jobsview-icon {
content: url('./job_inverse.svg'); content: url('./job_inverse.svg');
} }
agentview-component .tabbedPanel .tabList .tab .tabLabel.icon {
padding: 20px 15px !important;
}

View File

@@ -114,7 +114,7 @@
Job ID: Job ID:
</td> </td>
<td height="30"> <td height="30">
{{agentJobHistoryInfo?.jobId}} {{agentJobHistoryInfo?.jobId || agentJobInfo?.jobId}}
</td> </td>
</tr> </tr>
<tr class="step-row"> <tr class="step-row">

View File

@@ -5,7 +5,7 @@
import 'vs/css!./jobHistory'; import 'vs/css!./jobHistory';
import { OnInit, OnChanges, Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, OnDestroy, ViewChild, Input, Injectable } from '@angular/core'; import { OnInit, OnChanges, Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, OnDestroy, ViewChild, Input, Injectable, ChangeDetectionStrategy } from '@angular/core';
import { AgentJobHistoryInfo, AgentJobInfo } from 'sqlops'; import { AgentJobHistoryInfo, AgentJobInfo } from 'sqlops';
import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IThemeService } from 'vs/platform/theme/common/themeService';
import { attachListStyler } from 'vs/platform/theme/common/styler'; import { attachListStyler } from 'vs/platform/theme/common/styler';
@@ -14,7 +14,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { PanelComponent } from 'sql/base/browser/ui/panel/panel.component'; import { PanelComponent } from 'sql/base/browser/ui/panel/panel.component';
import { IBootstrapService, BOOTSTRAP_SERVICE_ID } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapService, BOOTSTRAP_SERVICE_ID } from 'sql/services/bootstrap/bootstrapService';
import { IJobManagementService } from '../common/interfaces'; import { IJobManagementService, IAgentJobCacheService } from '../common/interfaces';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component'; import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
import { JobHistoryController, JobHistoryDataSource, import { JobHistoryController, JobHistoryDataSource,
@@ -29,28 +29,30 @@ export const DASHBOARD_SELECTOR: string = 'jobhistory-component';
@Component({ @Component({
selector: DASHBOARD_SELECTOR, selector: DASHBOARD_SELECTOR,
templateUrl: decodeURI(require.toUrl('./jobHistory.component.html')) templateUrl: decodeURI(require.toUrl('./jobHistory.component.html')),
changeDetection: ChangeDetectionStrategy.OnPush
}) })
export class JobHistoryComponent extends Disposable implements OnInit { export class JobHistoryComponent extends Disposable implements OnInit {
private _jobManagementService: IJobManagementService; private _jobManagementService: IJobManagementService;
private _tree: Tree; private _tree: Tree;
private _treeController = new JobHistoryController(); private _treeController: JobHistoryController;
private _treeDataSource = new JobHistoryDataSource(); private _treeDataSource: JobHistoryDataSource;
private _treeRenderer = new JobHistoryRenderer(); private _treeRenderer: JobHistoryRenderer;
private _treeFilter = new JobHistoryFilter(); private _treeFilter: JobHistoryFilter;
@ViewChild('table') private _tableContainer: ElementRef; @ViewChild('table') private _tableContainer: ElementRef;
@Input() public agentJobInfo: AgentJobInfo = undefined; @Input() public agentJobInfo: AgentJobInfo = undefined;
@Input() public jobId: string = undefined; @Input() public jobId: string = undefined;
@Input() public agentJobHistoryInfo: AgentJobHistoryInfo = undefined; @Input() public agentJobHistories: AgentJobHistoryInfo[] = undefined;
public agentJobHistoryInfo: AgentJobHistoryInfo = undefined;
private _prevJobId: string = undefined;
private _isVisible: boolean = false; private _isVisible: boolean = false;
private _stepRows: JobStepsViewRow[] = []; private _stepRows: JobStepsViewRow[] = [];
private _showSteps: boolean = false; private _showSteps: boolean = false;
private _runStatus: string = undefined; private _runStatus: string = undefined;
private _agentJobCacheService: IAgentJobCacheService;
private _notificationService: INotificationService; private _notificationService: INotificationService;
constructor( constructor(
@@ -61,7 +63,12 @@ export class JobHistoryComponent extends Disposable implements OnInit {
@Inject(forwardRef(() => AgentViewComponent)) private _agentViewComponent: AgentViewComponent @Inject(forwardRef(() => AgentViewComponent)) private _agentViewComponent: AgentViewComponent
) { ) {
super(); super();
this._treeController = new JobHistoryController();
this._treeDataSource = new JobHistoryDataSource();
this._treeRenderer = new JobHistoryRenderer();
this._treeFilter = new JobHistoryFilter();
this._jobManagementService = bootstrapService.jobManagementService; this._jobManagementService = bootstrapService.jobManagementService;
this._agentJobCacheService = bootstrapService.agentJobCacheService;
this._notificationService = bootstrapService.notificationService; this._notificationService = bootstrapService.notificationService;
} }
@@ -115,10 +122,24 @@ export class JobHistoryComponent extends Disposable implements OnInit {
ngAfterContentChecked() { ngAfterContentChecked() {
if (this._isVisible === false && this._tableContainer.nativeElement.offsetParent !== null) { if (this._isVisible === false && this._tableContainer.nativeElement.offsetParent !== null) {
if (this._prevJobId !== this.jobId) { this._isVisible = true;
if (this.agentJobHistories && this.agentJobHistories.length > 0) {
if (this._agentJobCacheService.prevJobID === this.jobId || this.agentJobHistories[0].jobId === this.jobId) {
this.agentJobHistoryInfo = this.agentJobHistories[0];
this.agentJobHistoryInfo.runDate = this.formatTime(this.agentJobHistories[0].runDate);
this._treeController.jobHistories = this.agentJobHistories;
this._agentJobCacheService.setJobHistory(this.jobId, this.agentJobHistories);
let jobHistoryRows = this._treeController.jobHistories.map(job => this.convertToJobHistoryRow(job));
this._treeDataSource.data = jobHistoryRows;
this._tree.setInput(new JobHistoryModel());
this._cd.detectChanges();
}
} else {
this.loadHistory(); this.loadHistory();
this._prevJobId = this.jobId;
} }
this._agentJobCacheService.prevJobID = this.jobId;
} else if (this._isVisible === true && this._tableContainer.nativeElement.offsetParent === null) {
this._isVisible = false;
} }
} }
@@ -128,6 +149,7 @@ export class JobHistoryComponent extends Disposable implements OnInit {
this._jobManagementService.getJobHistory(ownerUri, this.jobId).then((result) => { this._jobManagementService.getJobHistory(ownerUri, this.jobId).then((result) => {
if (result && result.jobs) { if (result && result.jobs) {
self._treeController.jobHistories = result.jobs; self._treeController.jobHistories = result.jobs;
self._agentJobCacheService.setJobHistory(self.jobId, result.jobs);
let jobHistoryRows = self._treeController.jobHistories.map(job => self.convertToJobHistoryRow(job)); let jobHistoryRows = self._treeController.jobHistories.map(job => self.convertToJobHistoryRow(job));
self._treeDataSource.data = jobHistoryRows; self._treeDataSource.data = jobHistoryRows;
self._tree.setInput(new JobHistoryModel()); self._tree.setInput(new JobHistoryModel());

View File

@@ -24,7 +24,7 @@ import { IAction } from 'vs/base/common/actions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { generateUuid } from 'vs/base/common/uuid'; import { generateUuid } from 'vs/base/common/uuid';
import * as DOM from 'vs/base/browser/dom'; import * as DOM from 'vs/base/browser/dom';
import { OEAction } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { OEAction } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { Builder, $, withElementById } from 'vs/base/browser/builder'; import { Builder, $, withElementById } from 'vs/base/browser/builder';
import { AgentJobHistoryInfo } from 'sqlops'; import { AgentJobHistoryInfo } from 'sqlops';
import { Agent } from 'vs/base/node/request'; import { Agent } from 'vs/base/node/request';

View File

@@ -24,7 +24,7 @@ import { IAction } from 'vs/base/common/actions';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { generateUuid } from 'vs/base/common/uuid'; import { generateUuid } from 'vs/base/common/uuid';
import * as DOM from 'vs/base/browser/dom'; import * as DOM from 'vs/base/browser/dom';
import { OEAction } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { OEAction } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { Builder, $, withElementById } from 'vs/base/browser/builder'; import { Builder, $, withElementById } from 'vs/base/browser/builder';
import { AgentJobHistoryInfo } from 'sqlops'; import { AgentJobHistoryInfo } from 'sqlops';
import { Agent } from 'vs/base/node/request'; import { Agent } from 'vs/base/node/request';

View File

@@ -11,16 +11,15 @@ import 'vs/css!sql/parts/grid/media/slickGrid';
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import 'vs/css!../common/media/detailview'; import 'vs/css!../common/media/detailview';
import { OnInit, Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, OnDestroy, ViewChild } from '@angular/core'; import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, Input } from '@angular/core';
import * as Utils from 'sql/parts/connection/common/utils'; import * as Utils from 'sql/parts/connection/common/utils';
import { RefreshWidgetAction, EditDashboardAction } from 'sql/parts/dashboard/common/actions';
import { IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable } from 'vs/base/common/lifecycle';
import * as themeColors from 'vs/workbench/common/theme'; import * as themeColors from 'vs/workbench/common/theme';
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component'; import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component';
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
import { IBootstrapService, BOOTSTRAP_SERVICE_ID } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapService, BOOTSTRAP_SERVICE_ID } from 'sql/services/bootstrap/bootstrapService';
import { IJobManagementService } from '../common/interfaces'; import { IJobManagementService, IAgentJobCacheService } from '../common/interfaces';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
import * as sqlops from 'sqlops'; import * as sqlops from 'sqlops';
import * as vscode from 'vscode'; import * as vscode from 'vscode';
@@ -32,6 +31,7 @@ import { attachTableStyler } from 'sql/common/theme/styler';
import { JobHistoryComponent } from './jobHistory.component'; import { JobHistoryComponent } from './jobHistory.component';
import { AgentViewComponent } from '../agent/agentView.component'; import { AgentViewComponent } from '../agent/agentView.component';
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview'; import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
import { AgentJobCacheService } from 'sql/parts/jobManagement/common/agentJobCacheService';
export const JOBSVIEW_SELECTOR: string = 'jobsview-component'; export const JOBSVIEW_SELECTOR: string = 'jobsview-component';
@@ -39,9 +39,10 @@ export const JOBSVIEW_SELECTOR: string = 'jobsview-component';
selector: JOBSVIEW_SELECTOR, selector: JOBSVIEW_SELECTOR,
templateUrl: decodeURI(require.toUrl('./jobsView.component.html')) templateUrl: decodeURI(require.toUrl('./jobsView.component.html'))
}) })
export class JobsViewComponent implements OnInit, OnDestroy { export class JobsViewComponent {
private _jobManagementService: IJobManagementService; private _jobManagementService: IJobManagementService;
private _jobCacheService: IAgentJobCacheService;
private _disposables = new Array<vscode.Disposable>(); private _disposables = new Array<vscode.Disposable>();
@@ -64,11 +65,8 @@ export class JobsViewComponent implements OnInit, OnDestroy {
@ViewChild('jobsgrid') _gridEl: ElementRef; @ViewChild('jobsgrid') _gridEl: ElementRef;
private isVisible: boolean = false; private isVisible: boolean = false;
private isInitialized: boolean = false; private isInitialized: boolean = false;
private _table: Table<any>; private _table: Table<any>;
public jobs: sqlops.AgentJobInfo[]; public jobs: sqlops.AgentJobInfo[];
public jobHistories: { [jobId: string]: sqlops.AgentJobHistoryInfo[]; } = Object.create(null); public jobHistories: { [jobId: string]: sqlops.AgentJobHistoryInfo[]; } = Object.create(null);
constructor( constructor(
@@ -79,21 +77,28 @@ export class JobsViewComponent implements OnInit, OnDestroy {
@Inject(forwardRef(() => AgentViewComponent)) private _agentViewComponent: AgentViewComponent @Inject(forwardRef(() => AgentViewComponent)) private _agentViewComponent: AgentViewComponent
) { ) {
this._jobManagementService = bootstrapService.jobManagementService; this._jobManagementService = bootstrapService.jobManagementService;
this._jobCacheService = bootstrapService.agentJobCacheService;
} }
ngAfterContentChecked() { ngAfterContentChecked() {
if (this.isVisible === false && this._gridEl.nativeElement.offsetParent !== null) { if (this.isVisible === false && this._gridEl.nativeElement.offsetParent !== null) {
this.isVisible = true; this.isVisible = true;
if (!this.isInitialized) { if (!this.isInitialized) {
this.onFirstVisible(); if (this._jobCacheService.jobs !== undefined) {
this.isInitialized = true; this.jobs = this._jobCacheService.jobs;
this.onFirstVisible(true);
this.isInitialized = true;
} else {
this.onFirstVisible(false);
this.isInitialized = true;
}
} }
} else if (this.isVisible === true && this._gridEl.nativeElement.offsetParent === null) { } else if (this.isVisible === true && this._gridEl.nativeElement.offsetParent === null) {
this.isVisible = false; this.isVisible = false;
} }
} }
onFirstVisible() { onFirstVisible(cached?: boolean) {
let self = this; let self = this;
let columns = this.columns.map((column) => { let columns = this.columns.map((column) => {
column.rerenderOnResize = true; column.rerenderOnResize = true;
@@ -128,17 +133,26 @@ export class JobsViewComponent implements OnInit, OnDestroy {
self._agentViewComponent.jobId = job.jobId; self._agentViewComponent.jobId = job.jobId;
self._agentViewComponent.agentJobInfo = job; self._agentViewComponent.agentJobInfo = job;
self.isVisible = false; self.isVisible = false;
self._agentViewComponent.showHistory = true; if (self._jobCacheService.getJobHistory(job.jobId)) {
self._agentViewComponent.agentJobHistories = self._jobCacheService.getJobHistory(job.jobId);
}
setTimeout(() => {
self._agentViewComponent.showHistory = true;
}, 500);
}); });
this._cd.detectChanges(); this._cd.detectChanges();
if (cached) {
let ownerUri: string = this._dashboardService.connectionManagementService.connectionInfo.ownerUri; this.onJobsAvailable(this._jobCacheService.jobs);
this._jobManagementService.getJobs(ownerUri).then((result) => { } else {
if (result && result.jobs) { let ownerUri: string = this._dashboardService.connectionManagementService.connectionInfo.ownerUri;
this.jobs = result.jobs; this._jobManagementService.getJobs(ownerUri).then((result) => {
this.onJobsAvailable(result.jobs); if (result && result.jobs) {
} this.jobs = result.jobs;
}); this._jobCacheService.jobs = this.jobs;
this.onJobsAvailable(result.jobs);
}
});
}
} }
onJobsAvailable(jobs: sqlops.AgentJobInfo[]) { onJobsAvailable(jobs: sqlops.AgentJobInfo[]) {
@@ -177,12 +191,6 @@ export class JobsViewComponent implements OnInit, OnDestroy {
this.loadJobHistories(); this.loadJobHistories();
} }
ngOnInit() {
}
ngOnDestroy() {
}
loadingTemplate() { loadingTemplate() {
return '<div class="preload">Loading...</div>'; return '<div class="preload">Loading...</div>';
} }
@@ -201,6 +209,7 @@ export class JobsViewComponent implements OnInit, OnDestroy {
this._jobManagementService.getJobHistory(ownerUri, job.jobId).then((result) => { this._jobManagementService.getJobHistory(ownerUri, job.jobId).then((result) => {
if (result.jobs) { if (result.jobs) {
this.jobHistories[job.jobId] = result.jobs; this.jobHistories[job.jobId] = result.jobs;
this._jobCacheService.setJobHistory(job.jobId, result.jobs);
} }
}); });
}); });

View File

@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; 'use strict';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import { TreeNode, TreeItemCollapsibleState, ObjectExplorerCallbacks } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode, TreeItemCollapsibleState, ObjectExplorerCallbacks } from 'sql/parts/objectExplorer/common/treeNode';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
@@ -18,7 +18,7 @@ import * as TelemetryKeys from 'sql/common/telemetryKeys';
import * as TelemetryUtils from 'sql/common/telemetryUtilities'; import * as TelemetryUtils from 'sql/common/telemetryUtilities';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { warn, error } from 'sql/base/common/log'; import { warn, error } from 'sql/base/common/log';
import { ServerTreeView } from 'sql/parts/registeredServer/viewlet/serverTreeView'; import { ServerTreeView } from 'sql/parts/objectExplorer/viewlet/serverTreeView';
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService'; import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
import * as vscode from 'vscode'; import * as vscode from 'vscode';

View File

@@ -15,7 +15,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry';
import { VIEWLET_ID } from 'sql/parts/connection/common/connectionManagement'; import { VIEWLET_ID } from 'sql/parts/connection/common/connectionManagement';
import { ConnectionViewlet } from 'sql/parts/registeredServer/viewlet/connectionViewlet'; import { ConnectionViewlet } from 'sql/parts/objectExplorer/viewlet/connectionViewlet';
// Viewlet Action // Viewlet Action
export class OpenConnectionsViewletAction extends ToggleViewletAction { export class OpenConnectionsViewletAction extends ToggleViewletAction {

View File

@@ -6,7 +6,7 @@
'use strict'; 'use strict';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import * as sqlops from 'sqlops'; import * as sqlops from 'sqlops';
import * as UUID from 'vs/base/common/uuid'; import * as UUID from 'vs/base/common/uuid';

View File

@@ -5,11 +5,13 @@
import { IConfigurationRegistry, Extensions, IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry'; import { IConfigurationRegistry, Extensions, IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { localize } from 'vs/nls';
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration); const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
export const SERVER_GROUP_CONFIG = 'serverGroup'; export const SERVER_GROUP_CONFIG = 'serverGroup';
export const SERVER_GROUP_COLORS_CONFIG = 'colors'; export const SERVER_GROUP_COLORS_CONFIG = 'colors';
export const SERVER_GROUP_AUTOEXPAND_CONFIG = 'autoExpand';
const serverGroupConfig: IConfigurationNode = { const serverGroupConfig: IConfigurationNode = {
id: 'Server Groups', id: 'Server Groups',
@@ -18,6 +20,7 @@ const serverGroupConfig: IConfigurationNode = {
[SERVER_GROUP_CONFIG + '.' + SERVER_GROUP_COLORS_CONFIG]: <IJSONSchema>{ [SERVER_GROUP_CONFIG + '.' + SERVER_GROUP_COLORS_CONFIG]: <IJSONSchema>{
type: 'array', type: 'array',
items: 'string', items: 'string',
'description': localize('serverGroup.colors', 'Server Group color palette used in the Object Explorer viewlet.'),
default: [ default: [
'#A1634D', '#A1634D',
'#7F0000', '#7F0000',
@@ -28,7 +31,12 @@ const serverGroupConfig: IConfigurationNode = {
'#6A6599', '#6A6599',
'#515151' '#515151'
] ]
} },
[SERVER_GROUP_CONFIG + '.' + SERVER_GROUP_AUTOEXPAND_CONFIG]: {
'type': 'boolean',
'description': localize('serverGroup.autoExpand', 'Auto-expand Server Groups in the Object Explorer viewlet.'),
'default': 'true'
},
} }
}; };

View File

@@ -9,8 +9,8 @@ import {
IServerGroupController, IServerGroupDialogCallbacks IServerGroupController, IServerGroupDialogCallbacks
} from 'sql/parts/connection/common/connectionManagement'; } from 'sql/parts/connection/common/connectionManagement';
import { IPartService } from 'vs/workbench/services/part/common/partService'; import { IPartService } from 'vs/workbench/services/part/common/partService';
import { ServerGroupDialog } from 'sql/parts/registeredServer/serverGroupDialog/serverGroupDialog'; import { ServerGroupDialog } from 'sql/parts/objectExplorer/serverGroupDialog/serverGroupDialog';
import { ServerGroupViewModel } from 'sql/parts/registeredServer/serverGroupDialog/serverGroupViewModel'; import { ServerGroupViewModel } from 'sql/parts/objectExplorer/serverGroupDialog/serverGroupViewModel';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';

View File

@@ -22,7 +22,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { Button } from 'sql/base/browser/ui/button/button'; import { Button } from 'sql/base/browser/ui/button/button';
import { Modal } from 'sql/base/browser/ui/modal/modal'; import { Modal } from 'sql/base/browser/ui/modal/modal';
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox'; import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
import { ServerGroupViewModel } from 'sql/parts/registeredServer/serverGroupDialog/serverGroupViewModel'; import { ServerGroupViewModel } from 'sql/parts/objectExplorer/serverGroupDialog/serverGroupViewModel';
import { attachButtonStyler, attachModalDialogStyler } from 'sql/common/theme/styler'; import { attachButtonStyler, attachModalDialogStyler } from 'sql/common/theme/styler';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import * as TelemetryKeys from 'sql/common/telemetryKeys'; import * as TelemetryKeys from 'sql/common/telemetryKeys';

View File

@@ -10,17 +10,17 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import { ServerTreeView } from 'sql/parts/registeredServer/viewlet/serverTreeView'; import { ServerTreeView } from 'sql/parts/objectExplorer/viewlet/serverTreeView';
import { ConnectionViewlet } from 'sql/parts/registeredServer/viewlet/connectionViewlet'; import { ConnectionViewlet } from 'sql/parts/objectExplorer/viewlet/connectionViewlet';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { ITree } from 'vs/base/parts/tree/browser/tree'; import { ITree } from 'vs/base/parts/tree/browser/tree';
import * as Constants from 'sql/parts/connection/common/constants'; import * as Constants from 'sql/parts/connection/common/constants';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import { ObjectExplorerActionsContext, ObjectExplorerActionUtilities } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { ObjectExplorerActionsContext, ObjectExplorerActionUtilities } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
export class RefreshAction extends Action { export class RefreshAction extends Action {

View File

@@ -20,12 +20,12 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { isPromiseCanceledError } from 'vs/base/common/errors'; import { isPromiseCanceledError } from 'vs/base/common/errors';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import { IConnectionsViewlet, IConnectionManagementService, VIEWLET_ID } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionsViewlet, IConnectionManagementService, VIEWLET_ID } from 'sql/parts/connection/common/connectionManagement';
import { ServerTreeView } from 'sql/parts/registeredServer/viewlet/serverTreeView'; import { ServerTreeView } from 'sql/parts/objectExplorer/viewlet/serverTreeView';
import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox'; import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox';
import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { ClearSearchAction, AddServerAction, AddServerGroupAction, ActiveConnectionsFilterAction } from 'sql/parts/registeredServer/viewlet/connectionTreeAction'; import { ClearSearchAction, AddServerAction, AddServerGroupAction, ActiveConnectionsFilterAction } from 'sql/parts/objectExplorer/viewlet/connectionTreeAction';
import { warn } from 'sql/base/common/log'; import { warn } from 'sql/base/common/log';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IPartService } from 'vs/workbench/services/part/common/partService'; import { IPartService } from 'vs/workbench/services/part/common/partService';
import { INotificationService } from 'vs/platform/notification/common/notification'; import { INotificationService } from 'vs/platform/notification/common/notification';

View File

@@ -11,7 +11,7 @@ import { IConnectionManagementService } from 'sql/parts/connection/common/connec
import { ITree, IDragAndDrop, IDragAndDropData, IDragOverReaction, DRAG_OVER_ACCEPT_BUBBLE_DOWN, DRAG_OVER_REJECT } from 'vs/base/parts/tree/browser/tree'; import { ITree, IDragAndDrop, IDragAndDropData, IDragOverReaction, DRAG_OVER_ACCEPT_BUBBLE_DOWN, DRAG_OVER_REJECT } from 'vs/base/parts/tree/browser/tree';
import * as Constants from 'sql/parts/connection/common/constants'; import * as Constants from 'sql/parts/connection/common/constants';
import { DragMouseEvent } from 'vs/base/browser/mouseEvent'; import { DragMouseEvent } from 'vs/base/browser/mouseEvent';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
/** /**
* Implements drag and drop for the server tree * Implements drag and drop for the server tree

View File

Before

Width:  |  Height:  |  Size: 343 B

After

Width:  |  Height:  |  Size: 343 B

View File

Before

Width:  |  Height:  |  Size: 447 B

After

Width:  |  Height:  |  Size: 447 B

View File

Before

Width:  |  Height:  |  Size: 139 B

After

Width:  |  Height:  |  Size: 139 B

View File

Before

Width:  |  Height:  |  Size: 1002 B

After

Width:  |  Height:  |  Size: 1002 B

View File

Before

Width:  |  Height:  |  Size: 118 B

After

Width:  |  Height:  |  Size: 118 B

View File

Before

Width:  |  Height:  |  Size: 759 B

After

Width:  |  Height:  |  Size: 759 B

View File

@@ -9,19 +9,19 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { Action } from 'vs/base/common/actions'; import { Action } from 'vs/base/common/actions';
import { ITree } from 'vs/base/parts/tree/browser/tree'; import { ITree } from 'vs/base/parts/tree/browser/tree';
import { IConnectionManagementService, IConnectionCompletionOptions, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IConnectionCompletionOptions, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { import {
NewQueryAction, ScriptSelectAction, EditDataAction, ScriptCreateAction, NewQueryAction, ScriptSelectAction, EditDataAction, ScriptCreateAction,
ScriptExecuteAction, ScriptDeleteAction, ScriptAlterAction ScriptExecuteAction, ScriptDeleteAction, ScriptAlterAction
} from 'sql/workbench/common/actions'; } from 'sql/workbench/common/actions';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
import { TreeSelectionHandler } from 'sql/parts/registeredServer/viewlet/treeSelectionHandler'; import { TreeSelectionHandler } from 'sql/parts/objectExplorer/viewlet/treeSelectionHandler';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IScriptingService } from 'sql/services/scripting/scriptingService'; import { IScriptingService } from 'sql/services/scripting/scriptingService';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import * as Constants from 'sql/parts/connection/common/constants'; import * as Constants from 'sql/parts/connection/common/constants';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { ExecuteCommandAction } from 'vs/platform/actions/common/actions'; import { ExecuteCommandAction } from 'vs/platform/actions/common/actions';

View File

@@ -14,18 +14,18 @@ import {
DisconnectConnectionAction, AddServerAction, DisconnectConnectionAction, AddServerAction,
DeleteConnectionAction, RefreshAction, EditServerGroupAction DeleteConnectionAction, RefreshAction, EditServerGroupAction
} }
from 'sql/parts/registeredServer/viewlet/connectionTreeAction'; from 'sql/parts/objectExplorer/viewlet/connectionTreeAction';
import { import {
DisconnectAction, ObjectExplorerActionUtilities, DisconnectAction, ObjectExplorerActionUtilities,
ManageConnectionAction, ManageConnectionAction,
OEAction OEAction
} from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { NewProfilerAction } from 'sql/parts/profiler/contrib/profilerActions'; import { NewProfilerAction } from 'sql/parts/profiler/contrib/profilerActions';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { ExecuteCommandAction } from 'vs/platform/actions/common/actions'; import { ExecuteCommandAction } from 'vs/platform/actions/common/actions';
import { NewQueryAction } from 'sql/workbench/common/actions'; import { NewQueryAction } from 'sql/workbench/common/actions';

View File

@@ -14,9 +14,10 @@ import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { ServerTreeActionProvider } from 'sql/parts/registeredServer/viewlet/serverTreeActionProvider'; import { ServerTreeActionProvider } from 'sql/parts/objectExplorer/viewlet/serverTreeActionProvider';
import { ObjectExplorerActionsContext } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { ObjectExplorerActionsContext } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import { OpenMode } from 'vs/base/parts/tree/browser/treeDefaults';
/** /**
* Extends the tree controller to handle clicks on the tree elements * Extends the tree controller to handle clicks on the tree elements
@@ -29,7 +30,10 @@ export class ServerTreeController extends treedefaults.DefaultController {
@ITelemetryService private telemetryService: ITelemetryService, @ITelemetryService private telemetryService: ITelemetryService,
@IKeybindingService private keybindingService: IKeybindingService @IKeybindingService private keybindingService: IKeybindingService
) { ) {
super({ clickBehavior: treedefaults.ClickBehavior.ON_MOUSE_DOWN }); super({
clickBehavior: treedefaults.ClickBehavior.ON_MOUSE_DOWN,
openMode: OpenMode.SINGLE_CLICK
});
} }
public onClick(tree: ITree, element: any, event: IMouseEvent): boolean { public onClick(tree: ITree, element: any, event: IMouseEvent): boolean {

View File

@@ -7,10 +7,10 @@
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { ITree, IDataSource } from 'vs/base/parts/tree/browser/tree'; import { ITree, IDataSource } from 'vs/base/parts/tree/browser/tree';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
import { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';

View File

@@ -13,11 +13,11 @@ import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionPr
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ITree, IRenderer } from 'vs/base/parts/tree/browser/tree'; import { ITree, IRenderer } from 'vs/base/parts/tree/browser/tree';
import { IConnectionProfileGroupTemplateData, IConnectionTemplateData, IObjectExplorerTemplateData } from 'sql/parts/registeredServer/viewlet/templateData'; import { IConnectionProfileGroupTemplateData, IConnectionTemplateData, IObjectExplorerTemplateData } from 'sql/parts/objectExplorer/viewlet/templateData';
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IThemeService } from 'vs/platform/theme/common/themeService';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
/** /**
* Renders the tree items. * Renders the tree items.

View File

@@ -17,18 +17,20 @@ import { localize } from 'vs/nls';
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import * as ConnectionUtils from 'sql/parts/connection/common/utils'; import * as ConnectionUtils from 'sql/parts/connection/common/utils';
import { ActiveConnectionsFilterAction } from 'sql/parts/registeredServer/viewlet/connectionTreeAction'; import { ActiveConnectionsFilterAction } from 'sql/parts/objectExplorer/viewlet/connectionTreeAction';
import { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
import { TreeCreationUtils } from 'sql/parts/registeredServer/viewlet/treeCreationUtils'; import { TreeCreationUtils } from 'sql/parts/objectExplorer/viewlet/treeCreationUtils';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
import { TreeSelectionHandler } from 'sql/parts/registeredServer/viewlet/treeSelectionHandler'; import { TreeSelectionHandler } from 'sql/parts/objectExplorer/viewlet/treeSelectionHandler';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService'; import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
import { Button } from 'sql/base/browser/ui/button/button'; import { Button } from 'sql/base/browser/ui/button/button';
import { attachButtonStyler } from 'sql/common/theme/styler'; import { attachButtonStyler } from 'sql/common/theme/styler';
import Event, { Emitter } from 'vs/base/common/event'; import Event, { Emitter } from 'vs/base/common/event';
import { TreeNode, TreeItemCollapsibleState } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode, TreeItemCollapsibleState } from 'sql/parts/objectExplorer/common/treeNode';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { SERVER_GROUP_CONFIG, SERVER_GROUP_AUTOEXPAND_CONFIG } from 'sql/parts/objectExplorer/serverGroupDialog/serverGroup.contribution';
const $ = builder.$; const $ = builder.$;
@@ -52,6 +54,7 @@ export class ServerTreeView {
@IThemeService private _themeService: IThemeService, @IThemeService private _themeService: IThemeService,
@IErrorMessageService private _errorMessageService: IErrorMessageService, @IErrorMessageService private _errorMessageService: IErrorMessageService,
@ICapabilitiesService private _capabilitiesService: ICapabilitiesService, @ICapabilitiesService private _capabilitiesService: ICapabilitiesService,
@IConfigurationService private _configurationService: IConfigurationService
) { ) {
this._activeConnectionsFilterAction = this._instantiationService.createInstance( this._activeConnectionsFilterAction = this._instantiationService.createInstance(
ActiveConnectionsFilterAction, ActiveConnectionsFilterAction,
@@ -109,12 +112,10 @@ export class ServerTreeView {
// Refresh Tree when these events are emitted // Refresh Tree when these events are emitted
this._toDispose.push(this._connectionManagementService.onAddConnectionProfile((newProfile: IConnectionProfile) => { this._toDispose.push(this._connectionManagementService.onAddConnectionProfile((newProfile: IConnectionProfile) => {
self.handleAddConnectionProfile(newProfile); self.handleAddConnectionProfile(newProfile);
}) }));
);
this._toDispose.push(this._connectionManagementService.onDeleteConnectionProfile(() => { this._toDispose.push(this._connectionManagementService.onDeleteConnectionProfile(() => {
self.refreshTree(); self.refreshTree();
}) }));
);
this._toDispose.push(this._connectionManagementService.onDisconnect((connectionParams) => { this._toDispose.push(this._connectionManagementService.onDisconnect((connectionParams) => {
if (self.isObjectExplorerConnectionUri(connectionParams.connectionUri)) { if (self.isObjectExplorerConnectionUri(connectionParams.connectionUri)) {
self.deleteObjectExplorerNodeAndRefreshTree(connectionParams.connectionProfile); self.deleteObjectExplorerNodeAndRefreshTree(connectionParams.connectionProfile);
@@ -124,7 +125,7 @@ export class ServerTreeView {
if (this._objectExplorerService && this._objectExplorerService.onUpdateObjectExplorerNodes) { if (this._objectExplorerService && this._objectExplorerService.onUpdateObjectExplorerNodes) {
this._toDispose.push(this._objectExplorerService.onUpdateObjectExplorerNodes(args => { this._toDispose.push(this._objectExplorerService.onUpdateObjectExplorerNodes(args => {
if (args.errorMessage) { if (args.errorMessage) {
this.showError(args.errorMessage); self.showError(args.errorMessage);
} }
if (args.connection) { if (args.connection) {
self.onObjectExplorerSessionCreated(args.connection); self.onObjectExplorerSessionCreated(args.connection);
@@ -133,9 +134,15 @@ export class ServerTreeView {
} }
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
self.refreshTree(); self.refreshTree();
let root = <ConnectionProfileGroup>this._tree.getInput(); let root = <ConnectionProfileGroup>self._tree.getInput();
let expandGroups: boolean = self._configurationService.getValue(SERVER_GROUP_CONFIG)[SERVER_GROUP_AUTOEXPAND_CONFIG];
if (expandGroups) {
self._tree.expandAll(ConnectionProfileGroup.getSubgroups(root));
}
if (root && !root.hasValidConnections) { if (root && !root.hasValidConnections) {
this._treeSelectionHandler.onTreeActionStateChange(true); self._treeSelectionHandler.onTreeActionStateChange(true);
resolve(); resolve();
} else { } else {
resolve(); resolve();

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox'; import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
export interface IConnectionTemplateData { export interface IConnectionTemplateData {
root: HTMLElement; root: HTMLElement;

View File

@@ -7,14 +7,14 @@ import 'vs/css!./media/serverTreeActions';
import nls = require('vs/nls'); import nls = require('vs/nls');
import { Tree } from 'vs/base/parts/tree/browser/treeImpl'; import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ServerTreeRenderer } from 'sql/parts/registeredServer/viewlet/serverTreeRenderer'; import { ServerTreeRenderer } from 'sql/parts/objectExplorer/viewlet/serverTreeRenderer';
import { ServerTreeDataSource } from 'sql/parts/registeredServer/viewlet/serverTreeDataSource'; import { ServerTreeDataSource } from 'sql/parts/objectExplorer/viewlet/serverTreeDataSource';
import { ServerTreeController } from 'sql/parts/registeredServer/viewlet/serverTreeController'; import { ServerTreeController } from 'sql/parts/objectExplorer/viewlet/serverTreeController';
import { ServerTreeActionProvider } from 'sql/parts/registeredServer/viewlet/serverTreeActionProvider'; import { ServerTreeActionProvider } from 'sql/parts/objectExplorer/viewlet/serverTreeActionProvider';
import { DefaultFilter, DefaultAccessibilityProvider, DefaultController } from 'vs/base/parts/tree/browser/treeDefaults'; import { DefaultFilter, DefaultAccessibilityProvider, DefaultController } from 'vs/base/parts/tree/browser/treeDefaults';
import { IController } from 'vs/base/parts/tree/browser/tree'; import { IController } from 'vs/base/parts/tree/browser/tree';
import { ServerTreeDragAndDrop, RecentConnectionsDragAndDrop } from 'sql/parts/registeredServer/viewlet/dragAndDropController'; import { ServerTreeDragAndDrop, RecentConnectionsDragAndDrop } from 'sql/parts/objectExplorer/viewlet/dragAndDropController';
import { RecentConnectionDataSource } from 'sql/parts/registeredServer/viewlet/recentConnectionDataSource'; import { RecentConnectionDataSource } from 'sql/parts/objectExplorer/viewlet/recentConnectionDataSource';
export class TreeCreationUtils { export class TreeCreationUtils {
/** /**

View File

@@ -6,11 +6,11 @@
import { IConnectionManagementService, IConnectionCompletionOptions } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IConnectionCompletionOptions } from 'sql/parts/connection/common/connectionManagement';
import { ITree } from 'vs/base/parts/tree/browser/tree'; import { ITree } from 'vs/base/parts/tree/browser/tree';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IProgressService, IProgressRunner } from 'vs/platform/progress/common/progress'; import { IProgressService, IProgressRunner } from 'vs/platform/progress/common/progress';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import { TreeUpdateUtils } from 'sql/parts/registeredServer/viewlet/treeUpdateUtils'; import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
export class TreeSelectionHandler { export class TreeSelectionHandler {
progressRunner: IProgressRunner; progressRunner: IProgressRunner;

View File

@@ -7,11 +7,11 @@ import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionPr
import { IConnectionManagementService, IConnectionCompletionOptions, IConnectionCallbacks } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IConnectionCompletionOptions, IConnectionCallbacks } from 'sql/parts/connection/common/connectionManagement';
import { ITree } from 'vs/base/parts/tree/browser/tree'; import { ITree } from 'vs/base/parts/tree/browser/tree';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import errors = require('vs/base/common/errors'); import errors = require('vs/base/common/errors');
export class TreeUpdateUtils { export class TreeUpdateUtils {

View File

@@ -10,7 +10,7 @@ import { IProfilerController } from 'sql/parts/profiler/editor/controller/interf
import { ProfilerInput } from 'sql/parts/profiler/editor/profilerInput'; import { ProfilerInput } from 'sql/parts/profiler/editor/profilerInput';
import { BaseActionContext } from 'sql/workbench/common/actions'; import { BaseActionContext } from 'sql/workbench/common/actions';
import { Task } from 'sql/platform/tasks/common/tasks'; import { Task } from 'sql/platform/tasks/common/tasks';
import { ObjectExplorerActionsContext } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { ObjectExplorerActionsContext } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IConnectionManagementService, IConnectionCompletionOptions, ConnectionType } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService, IConnectionCompletionOptions, ConnectionType } from 'sql/parts/connection/common/connectionManagement';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';

View File

@@ -8,7 +8,7 @@ import { BootstrapParams } from 'sql/services/bootstrap/bootstrapParams';
import { IConnectionManagementService, IConnectionDialogService, IErrorMessageService } import { IConnectionManagementService, IConnectionDialogService, IErrorMessageService }
from 'sql/parts/connection/common/connectionManagement'; from 'sql/parts/connection/common/connectionManagement';
import { IMetadataService } from 'sql/services/metadata/metadataService'; import { IMetadataService } from 'sql/services/metadata/metadataService';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import { IAngularEventingService } from 'sql/services/angularEventing/angularEventingService'; import { IAngularEventingService } from 'sql/services/angularEventing/angularEventingService';
import { IScriptingService } from 'sql/services/scripting/scriptingService'; import { IScriptingService } from 'sql/services/scripting/scriptingService';
@@ -40,7 +40,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IStorageService } from 'vs/platform/storage/common/storage'; import { IStorageService } from 'vs/platform/storage/common/storage';
import { ConfigurationEditingService } from 'vs/workbench/services/configuration/node/configurationEditingService'; import { ConfigurationEditingService } from 'vs/workbench/services/configuration/node/configurationEditingService';
import { ICommandService } from 'vs/platform/commands/common/commands'; import { ICommandService } from 'vs/platform/commands/common/commands';
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces'; import { IJobManagementService, IAgentJobCacheService } from 'sql/parts/jobManagement/common/interfaces';
import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { INotificationService } from 'vs/platform/notification/common/notification'; import { INotificationService } from 'vs/platform/notification/common/notification';
@@ -95,6 +95,7 @@ export interface IBootstrapService {
commandService: ICommandService; commandService: ICommandService;
dashboardWebviewService: IDashboardWebviewService; dashboardWebviewService: IDashboardWebviewService;
jobManagementService: IJobManagementService; jobManagementService: IJobManagementService;
agentJobCacheService: IAgentJobCacheService;
environmentService: IEnvironmentService; environmentService: IEnvironmentService;
/* /*

View File

@@ -10,7 +10,7 @@ import { BootstrapParams } from 'sql/services/bootstrap/bootstrapParams';
import { IConnectionManagementService, IConnectionDialogService, IErrorMessageService } import { IConnectionManagementService, IConnectionDialogService, IErrorMessageService }
from 'sql/parts/connection/common/connectionManagement'; from 'sql/parts/connection/common/connectionManagement';
import { IMetadataService } from 'sql/services/metadata/metadataService'; import { IMetadataService } from 'sql/services/metadata/metadataService';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import { IScriptingService } from 'sql/services/scripting/scriptingService'; import { IScriptingService } from 'sql/services/scripting/scriptingService';
import { IQueryManagementService } from 'sql/parts/query/common/queryManagement'; import { IQueryManagementService } from 'sql/parts/query/common/queryManagement';
@@ -44,7 +44,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IStorageService } from 'vs/platform/storage/common/storage'; import { IStorageService } from 'vs/platform/storage/common/storage';
import { ConfigurationEditingService } from 'vs/workbench/services/configuration/node/configurationEditingService'; import { ConfigurationEditingService } from 'vs/workbench/services/configuration/node/configurationEditingService';
import { ICommandService } from 'vs/platform/commands/common/commands'; import { ICommandService } from 'vs/platform/commands/common/commands';
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces'; import { IJobManagementService, IAgentJobCacheService } from 'sql/parts/jobManagement/common/interfaces';
import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { INotificationService } from 'vs/platform/notification/common/notification'; import { INotificationService } from 'vs/platform/notification/common/notification';
@@ -104,6 +104,7 @@ export class BootstrapService implements IBootstrapService {
@ICommandService public commandService: ICommandService, @ICommandService public commandService: ICommandService,
@IDashboardWebviewService public dashboardWebviewService: IDashboardWebviewService, @IDashboardWebviewService public dashboardWebviewService: IDashboardWebviewService,
@IJobManagementService public jobManagementService: IJobManagementService, @IJobManagementService public jobManagementService: IJobManagementService,
@IAgentJobCacheService public agentJobCacheService: IAgentJobCacheService,
@IEnvironmentService public environmentService: IEnvironmentService @IEnvironmentService public environmentService: IEnvironmentService
) { ) {
this.configurationEditorService = this.instantiationService.createInstance(ConfigurationEditingService); this.configurationEditorService = this.instantiationService.createInstance(ConfigurationEditingService);

View File

@@ -9,7 +9,7 @@ import * as sqlops from 'sqlops';
import { IExtHostContext } from 'vs/workbench/api/node/extHost.protocol'; import { IExtHostContext } from 'vs/workbench/api/node/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';

View File

@@ -15,7 +15,7 @@ import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesServ
import { IQueryManagementService } from 'sql/parts/query/common/queryManagement'; import { IQueryManagementService } from 'sql/parts/query/common/queryManagement';
import * as sqlops from 'sqlops'; import * as sqlops from 'sqlops';
import { IMetadataService } from 'sql/services/metadata/metadataService'; import { IMetadataService } from 'sql/services/metadata/metadataService';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IScriptingService } from 'sql/services/scripting/scriptingService'; import { IScriptingService } from 'sql/services/scripting/scriptingService';
import { IAdminService } from 'sql/parts/admin/common/adminService'; import { IAdminService } from 'sql/parts/admin/common/adminService';
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces'; import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';

View File

@@ -10,7 +10,7 @@ import * as vscode from 'vscode';
import { IExtHostContext } from 'vs/workbench/api/node/extHost.protocol'; import { IExtHostContext } from 'vs/workbench/api/node/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { IObjectExplorerService, NodeInfoWithConnection } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService, NodeInfoWithConnection } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';

View File

@@ -17,7 +17,7 @@ import { IAdminService } from 'sql/parts/admin/common/adminService';
import * as Constants from 'sql/common/constants'; import * as Constants from 'sql/common/constants';
import { ScriptOperation } from 'sql/workbench/common/taskUtilities'; import { ScriptOperation } from 'sql/workbench/common/taskUtilities';
import { Task } from 'sql/platform/tasks/common/tasks'; import { Task } from 'sql/platform/tasks/common/tasks';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { ObjectMetadata } from 'sqlops'; import { ObjectMetadata } from 'sqlops';

View File

@@ -24,7 +24,7 @@ import * as sqlops from 'sqlops';
import nls = require('vs/nls'); import nls = require('vs/nls');
import os = require('os'); import os = require('os');
import path = require('path'); import path = require('path');
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService';
import { QueryInput } from 'sql/parts/query/common/queryInput'; import { QueryInput } from 'sql/parts/query/common/queryInput';
import { DashboardInput } from 'sql/parts/dashboard/dashboardInput'; import { DashboardInput } from 'sql/parts/dashboard/dashboardInput';

View File

@@ -14,25 +14,25 @@ import {
RefreshAction, AddServerAction, DeleteConnectionAction, DisconnectConnectionAction, RefreshAction, AddServerAction, DeleteConnectionAction, DisconnectConnectionAction,
ActiveConnectionsFilterAction, RecentConnectionsFilterAction ActiveConnectionsFilterAction, RecentConnectionsFilterAction
} }
from 'sql/parts/registeredServer/viewlet/connectionTreeAction'; from 'sql/parts/objectExplorer/viewlet/connectionTreeAction';
import { TestConnectionManagementService } from 'sqltest/stubs/connectionManagementService.test'; import { TestConnectionManagementService } from 'sqltest/stubs/connectionManagementService.test';
import { ErrorMessageServiceStub } from 'sqltest/stubs/errorMessageServiceStub'; import { ErrorMessageServiceStub } from 'sqltest/stubs/errorMessageServiceStub';
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
import { ServerTreeView } from 'sql/parts/registeredServer/viewlet/serverTreeView'; import { ServerTreeView } from 'sql/parts/objectExplorer/viewlet/serverTreeView';
import * as Constants from 'sql/parts/connection/common/constants'; import * as Constants from 'sql/parts/connection/common/constants';
import * as LocalizedConstants from 'sql/parts/connection/common/localizedConstants'; import * as LocalizedConstants from 'sql/parts/connection/common/localizedConstants';
import { ObjectExplorerService, ObjectExplorerNodeEventArgs } from 'sql/parts/registeredServer/common/objectExplorerService'; import { ObjectExplorerService, ObjectExplorerNodeEventArgs } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { TreeNode } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode } from 'sql/parts/objectExplorer/common/treeNode';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import { Tree } from 'vs/base/parts/tree/browser/treeImpl'; import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
import { ServerTreeDataSource } from 'sql/parts/registeredServer/viewlet/serverTreeDataSource'; import { ServerTreeDataSource } from 'sql/parts/objectExplorer/viewlet/serverTreeDataSource';
import { Builder, $ } from 'vs/base/browser/builder'; import { Builder, $ } from 'vs/base/browser/builder';
import WinJS = require('vs/base/common/winjs.base'); import WinJS = require('vs/base/common/winjs.base');
import { Emitter } from 'vs/base/common/event'; import { Emitter } from 'vs/base/common/event';
import Severity from 'vs/base/common/severity'; import Severity from 'vs/base/common/severity';
import { ObjectExplorerActionsContext, ManageConnectionAction } from 'sql/parts/registeredServer/viewlet/objectExplorerActions'; import { ObjectExplorerActionsContext, ManageConnectionAction } from 'sql/parts/objectExplorer/viewlet/objectExplorerActions';
import { IConnectionResult, IConnectionParams } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionResult, IConnectionParams } from 'sql/parts/connection/common/connectionManagement';
import { TreeSelectionHandler } from 'sql/parts/registeredServer/viewlet/treeSelectionHandler'; import { TreeSelectionHandler } from 'sql/parts/objectExplorer/viewlet/treeSelectionHandler';
import { CapabilitiesTestService } from 'sqltest/stubs/capabilitiesTestService'; import { CapabilitiesTestService } from 'sqltest/stubs/capabilitiesTestService';
suite('SQL Connection Tree Action tests', () => { suite('SQL Connection Tree Action tests', () => {

View File

@@ -8,15 +8,15 @@ import { ObjectExplorerProviderTestService } from 'sqltest/stubs/objectExplorerP
import { TestConnectionManagementService } from 'sqltest/stubs/connectionManagementService.test'; import { TestConnectionManagementService } from 'sqltest/stubs/connectionManagementService.test';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import { ObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { ObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { NodeType } from 'sql/parts/registeredServer/common/nodeType'; import { NodeType } from 'sql/parts/objectExplorer/common/nodeType';
import { TreeNode, TreeItemCollapsibleState, ObjectExplorerCallbacks } from 'sql/parts/registeredServer/common/treeNode'; import { TreeNode, TreeItemCollapsibleState, ObjectExplorerCallbacks } from 'sql/parts/objectExplorer/common/treeNode';
import { TPromise } from 'vs/base/common/winjs.base'; import { TPromise } from 'vs/base/common/winjs.base';
import * as sqlops from 'sqlops'; import * as sqlops from 'sqlops';
import * as TypeMoq from 'typemoq'; import * as TypeMoq from 'typemoq';
import * as assert from 'assert'; import * as assert from 'assert';
import { ServerTreeView } from 'sql/parts/registeredServer/viewlet/serverTreeView'; import { ServerTreeView } from 'sql/parts/objectExplorer/viewlet/serverTreeView';
import { ConnectionOptionSpecialType, ServiceOptionType } from 'sql/workbench/api/common/sqlExtHostTypes'; import { ConnectionOptionSpecialType, ServiceOptionType } from 'sql/workbench/api/common/sqlExtHostTypes';
import Event, { Emitter } from 'vs/base/common/event'; import Event, { Emitter } from 'vs/base/common/event';
import { CapabilitiesService } from 'sql/services/capabilities/capabilitiesService'; import { CapabilitiesService } from 'sql/services/capabilities/capabilitiesService';

View File

@@ -6,7 +6,7 @@
'use strict'; 'use strict';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { ServerTreeView } from 'sql/parts/registeredServer/viewlet/serverTreeView'; import { ServerTreeView } from 'sql/parts/objectExplorer/viewlet/serverTreeView';
import { ConnectionManagementService } from 'sql/parts/connection/common/connectionManagementService'; import { ConnectionManagementService } from 'sql/parts/connection/common/connectionManagementService';
import { Tree } from 'vs/base/parts/tree/browser/treeImpl'; import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
@@ -24,7 +24,7 @@ suite('ServerTreeView onAddConnectionProfile handler tests', () => {
let instantiationService = new TestInstantiationService(); let instantiationService = new TestInstantiationService();
let mockConnectionManagementService = TypeMoq.Mock.ofType(ConnectionManagementService, TypeMoq.MockBehavior.Strict, {}, {}); let mockConnectionManagementService = TypeMoq.Mock.ofType(ConnectionManagementService, TypeMoq.MockBehavior.Strict, {}, {});
mockConnectionManagementService.setup(x => x.getConnectionGroups()).returns(x => []); mockConnectionManagementService.setup(x => x.getConnectionGroups()).returns(x => []);
serverTreeView = new ServerTreeView(mockConnectionManagementService.object, instantiationService, undefined, undefined, undefined, undefined); serverTreeView = new ServerTreeView(mockConnectionManagementService.object, instantiationService, undefined, undefined, undefined, undefined, undefined);
let tree = <Tree>{ let tree = <Tree>{
clearSelection() { }, clearSelection() { },
getSelection() { }, getSelection() { },

View File

@@ -8,7 +8,7 @@
import * as assert from 'assert'; import * as assert from 'assert';
import * as TypeMoq from 'typemoq'; import * as TypeMoq from 'typemoq';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { TestConnectionManagementService } from 'sqltest/stubs/connectionManagementService.test'; import { TestConnectionManagementService } from 'sqltest/stubs/connectionManagementService.test';
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces'; import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';

View File

@@ -53,7 +53,7 @@ import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
interface IEditorInputLabel { interface IEditorInputLabel {
name: string; name: string;
@@ -92,7 +92,7 @@ export class TabsTitleControl extends TitleControl {
@IWorkspaceConfigurationService private workspaceConfigurationService: IWorkspaceConfigurationService, @IWorkspaceConfigurationService private workspaceConfigurationService: IWorkspaceConfigurationService,
@IConnectionManagementService private connectionService: IConnectionManagementService, @IConnectionManagementService private connectionService: IConnectionManagementService,
@IQueryEditorService private queryEditorService: IQueryEditorService, @IQueryEditorService private queryEditorService: IQueryEditorService,
@IObjectExplorerService private objectExplorerService: IObjectExplorerService @IObjectExplorerService private objectExplorerService: IObjectExplorerService
) { ) {
super(contextMenuService, instantiationService, editorService, editorGroupService, contextKeyService, keybindingService, telemetryService, notificationService, menuService, quickOpenService, themeService); super(contextMenuService, instantiationService, editorService, editorGroupService, contextKeyService, keybindingService, telemetryService, notificationService, menuService, quickOpenService, themeService);

View File

@@ -111,7 +111,7 @@ import { IConnectionManagementService, IConnectionDialogService, IErrorMessageSe
import { ConnectionManagementService } from 'sql/parts/connection/common/connectionManagementService'; import { ConnectionManagementService } from 'sql/parts/connection/common/connectionManagementService';
import { ConnectionDialogService } from 'sql/parts/connection/connectionDialog/connectionDialogService'; import { ConnectionDialogService } from 'sql/parts/connection/connectionDialog/connectionDialogService';
import { ErrorMessageService } from 'sql/workbench/errorMessageDialog/errorMessageService'; import { ErrorMessageService } from 'sql/workbench/errorMessageDialog/errorMessageService';
import { ServerGroupController } from 'sql/parts/registeredServer/serverGroupDialog/serverGroupController'; import { ServerGroupController } from 'sql/parts/objectExplorer/serverGroupDialog/serverGroupController';
import { IBootstrapService } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapService } from 'sql/services/bootstrap/bootstrapService';
import { IAngularEventingService, AngularEventingService } from 'sql/services/angularEventing/angularEventingService'; import { IAngularEventingService, AngularEventingService } from 'sql/services/angularEventing/angularEventingService';
@@ -120,7 +120,7 @@ import { ICapabilitiesService, CapabilitiesService } from 'sql/services/capabili
import { ICredentialsService, CredentialsService } from 'sql/services/credentials/credentialsService'; import { ICredentialsService, CredentialsService } from 'sql/services/credentials/credentialsService';
import { ISerializationService, SerializationService } from 'sql/services/serialization/serializationService'; import { ISerializationService, SerializationService } from 'sql/services/serialization/serializationService';
import { IMetadataService, MetadataService } from 'sql/services/metadata/metadataService'; import { IMetadataService, MetadataService } from 'sql/services/metadata/metadataService';
import { IObjectExplorerService, ObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService, ObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { ITaskService, TaskService } from 'sql/parts/taskHistory/common/taskService'; import { ITaskService, TaskService } from 'sql/parts/taskHistory/common/taskService';
import { IQueryModelService } from 'sql/parts/query/execution/queryModel'; import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
import { QueryModelService } from 'sql/parts/query/execution/queryModelService'; import { QueryModelService } from 'sql/parts/query/execution/queryModelService';
@@ -130,8 +130,9 @@ import { IQueryManagementService, QueryManagementService } from 'sql/parts/query
import { IEditorDescriptorService, EditorDescriptorService } from 'sql/parts/query/editor/editorDescriptorService'; import { IEditorDescriptorService, EditorDescriptorService } from 'sql/parts/query/editor/editorDescriptorService';
import { IScriptingService, ScriptingService } from 'sql/services/scripting/scriptingService'; import { IScriptingService, ScriptingService } from 'sql/services/scripting/scriptingService';
import { IAdminService, AdminService } from 'sql/parts/admin/common/adminService'; import { IAdminService, AdminService } from 'sql/parts/admin/common/adminService';
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces'; import { IJobManagementService, IAgentJobCacheService } from 'sql/parts/jobManagement/common/interfaces';
import { JobManagementService } from 'sql/parts/jobManagement/common/jobManagementService'; import { JobManagementService } from 'sql/parts/jobManagement/common/jobManagementService';
import { AgentJobCacheService } from 'sql/parts/jobManagement/common/agentJobCacheService';
import { IBackupService, IBackupUiService } from 'sql/parts/disasterRecovery/backup/common/backupService'; import { IBackupService, IBackupUiService } from 'sql/parts/disasterRecovery/backup/common/backupService';
import { BackupService, BackupUiService } from 'sql/parts/disasterRecovery/backup/common/backupServiceImp'; import { BackupService, BackupUiService } from 'sql/parts/disasterRecovery/backup/common/backupServiceImp';
import { IRestoreDialogController, IRestoreService } from 'sql/parts/disasterRecovery/restore/common/restoreService'; import { IRestoreDialogController, IRestoreService } from 'sql/parts/disasterRecovery/restore/common/restoreService';
@@ -702,6 +703,7 @@ export class Workbench implements IPartService {
serviceCollection.set(IScriptingService, this.instantiationService.createInstance(ScriptingService)); serviceCollection.set(IScriptingService, this.instantiationService.createInstance(ScriptingService));
serviceCollection.set(IAdminService, this.instantiationService.createInstance(AdminService)); serviceCollection.set(IAdminService, this.instantiationService.createInstance(AdminService));
serviceCollection.set(IJobManagementService, this.instantiationService.createInstance(JobManagementService)); serviceCollection.set(IJobManagementService, this.instantiationService.createInstance(JobManagementService));
serviceCollection.set(IAgentJobCacheService, this.instantiationService.createInstance(AgentJobCacheService));
serviceCollection.set(IBackupService, this.instantiationService.createInstance(BackupService)); serviceCollection.set(IBackupService, this.instantiationService.createInstance(BackupService));
serviceCollection.set(IBackupUiService, this.instantiationService.createInstance(BackupUiService)); serviceCollection.set(IBackupUiService, this.instantiationService.createInstance(BackupUiService));
serviceCollection.set(IRestoreService, this.instantiationService.createInstance(RestoreService)); serviceCollection.set(IRestoreService, this.instantiationService.createInstance(RestoreService));

View File

@@ -57,7 +57,7 @@ import { INotificationService, Severity } from 'vs/platform/notification/common/
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement'; import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
import { IObjectExplorerService } from 'sql/parts/registeredServer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService'; import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
@@ -494,7 +494,7 @@ export class GlobalNewUntitledFileAction extends Action {
) { ) {
super(id, label); super(id, label);
} }
public run(): TPromise<any> { public run(): TPromise<any> {
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
TaskUtilities.newQuery(undefined, this.connectionManagementService, this.queryEditorService, this._objectExplorerService, this.editorService); TaskUtilities.newQuery(undefined, this.connectionManagementService, this.queryEditorService, this._objectExplorerService, this.editorService);

View File

@@ -29,7 +29,7 @@ import { escape } from 'vs/base/common/strings';
import { QUICKOPEN_ACTION_ID } from 'vs/workbench/browser/parts/quickopen/quickopen'; import { QUICKOPEN_ACTION_ID } from 'vs/workbench/browser/parts/quickopen/quickopen';
// {{SQL CARBON EDIT}} // {{SQL CARBON EDIT}}
import { OpenConnectionsViewletAction } from 'sql/parts/registeredServer/common/registeredServer.contribution'; import { OpenConnectionsViewletAction } from 'sql/parts/objectExplorer/common/registeredServer.contribution';
interface WatermarkEntry { interface WatermarkEntry {

View File

@@ -140,15 +140,15 @@ import 'vs/workbench/parts/welcome/overlay/browser/welcomeOverlay';
import 'sql/parts/taskHistory/common/taskHistory.contribution'; import 'sql/parts/taskHistory/common/taskHistory.contribution';
import 'sql/parts/taskHistory/viewlet/taskHistoryViewlet'; import 'sql/parts/taskHistory/viewlet/taskHistoryViewlet';
import 'sql/parts/tasks/common/tasks.contribution'; import 'sql/parts/tasks/common/tasks.contribution';
import 'sql/parts/registeredServer/common/registeredServer.contribution'; import 'sql/parts/objectExplorer/common/registeredServer.contribution';
import 'sql/parts/registeredServer/viewlet/connectionViewlet'; import 'sql/parts/objectExplorer/viewlet/connectionViewlet';
import 'sql/workbench/api/node/sqlExtHost.contribution'; import 'sql/workbench/api/node/sqlExtHost.contribution';
import 'sql/parts/connection/common/connection.contribution'; import 'sql/parts/connection/common/connection.contribution';
import 'sql/parts/query/common/query.contribution'; import 'sql/parts/query/common/query.contribution';
import 'sql/parts/query/editor/resultsGridContribution'; import 'sql/parts/query/editor/resultsGridContribution';
import 'sql/parts/profiler/contrib/profiler.contribution'; import 'sql/parts/profiler/contrib/profiler.contribution';
import 'sql/parts/profiler/contrib/profilerActions.contribution'; import 'sql/parts/profiler/contrib/profilerActions.contribution';
import 'sql/parts/registeredServer/serverGroupDialog/serverGroup.contribution'; import 'sql/parts/objectExplorer/serverGroupDialog/serverGroup.contribution';
import 'sql/parts/accountManagement/common/accountManagement.contribution'; import 'sql/parts/accountManagement/common/accountManagement.contribution';
/* Insights */ /* Insights */
import 'sql/parts/dashboard/widgets/insights/views/charts/types/barChart.contribution'; import 'sql/parts/dashboard/widgets/insights/views/charts/types/barChart.contribution';