diff --git a/extensions/sql-database-projects/package.json b/extensions/sql-database-projects/package.json index 69fe47584c..468f46d20e 100644 --- a/extensions/sql-database-projects/package.json +++ b/extensions/sql-database-projects/package.json @@ -94,11 +94,6 @@ "title": "%sqlDatabaseProjects.deploy%", "category": "%sqlDatabaseProjects.displayName%" }, - { - "command": "sqlDatabaseProjects.import", - "title": "%sqlDatabaseProjects.import%", - "category": "%sqlDatabaseProjects.displayName%" - }, { "command": "sqlDatabaseProjects.properties", "title": "%sqlDatabaseProjects.properties%", @@ -164,10 +159,6 @@ "command": "sqlDatabaseProjects.deploy", "when": "false" }, - { - "command": "sqlDatabaseProjects.import", - "when": "false" - }, { "command": "sqlDatabaseProjects.properties", "when": "false" @@ -196,11 +187,6 @@ "when": "view == sqlDatabaseProjectsView", "group": "1_dbProjectsFirst@3" }, - { - "command": "sqlDatabaseProjects.import", - "when": "view == sqlDatabaseProjectsView", - "group": "1_dbProjectsFirst@4" - }, { "command": "sqlDatabaseProjects.newItem", "when": "view == sqlDatabaseProjectsView", @@ -263,7 +249,13 @@ "when": "" } ] - } + }, + "viewsWelcome": [ + { + "view": "sqlDatabaseProjectsView", + "contents": "%sqlDatabaseProjects.welcome%" + } + ] }, "dependencies": { "promisify-child-process": "^3.1.1", diff --git a/extensions/sql-database-projects/package.nls.json b/extensions/sql-database-projects/package.nls.json index 1e82ce98e9..3428c87620 100644 --- a/extensions/sql-database-projects/package.nls.json +++ b/extensions/sql-database-projects/package.nls.json @@ -8,7 +8,7 @@ "sqlDatabaseProjects.close": "Close Database Project", "sqlDatabaseProjects.build": "Build", "sqlDatabaseProjects.deploy": "Publish", - "sqlDatabaseProjects.import": "Import", + "sqlDatabaseProjects.importDatabase": "Import New Database Project", "sqlDatabaseProjects.properties": "Properties", "sqlDatabaseProjects.schemaCompare": "Schema Compare", @@ -19,10 +19,10 @@ "sqlDatabaseProjects.newItem": "Add Item...", "sqlDatabaseProjects.newFolder": "Add Folder", - "sqlDatabaseProjects.importDatabase": "Import New Database Project", "sqlDatabaseProjects.addDatabaseReference": "Add Database Reference", "sqlDatabaseProjects.Settings": "Database Projects", - "sqlDatabaseProjects.netCoreInstallLocation": "Full Path to .Net Core SDK on the machine." + "sqlDatabaseProjects.netCoreInstallLocation": "Full Path to .Net Core SDK on the machine.", + "sqlDatabaseProjects.welcome": "No database projects currently open.\n[New Project](command:sqlDatabaseProjects.new)\n[Open Project](command:sqlDatabaseProjects.open)\n[Import Project from Database](command:sqlDatabaseProjects.importDatabase)" } diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index b7efddddae..ffc17bc93b 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -24,7 +24,6 @@ export const databaseSchemaProvider = 'DatabaseSchemaProvider'; // UI Strings -export const noOpenProjectMessage = localize('noProjectOpenMessage', "No open database project"); export const projectNodeName = localize('projectNodeName', "Database Project"); export const dataSourcesNodeName = localize('dataSourcesNodeName', "Data Sources"); export const sqlConnectionStringFriendly = localize('sqlConnectionStringFriendly', "SQL connection string"); @@ -84,6 +83,7 @@ export const dacpacFileLocationRequired = localize('dacpacFileLocationRequired', export const databaseLocationRequired = localize('databaseLocation', "Database location is required for adding a reference to a database"); export const databaseNameRequired = localize('databaseNameRequired', "Database name is required for adding a reference to a different database"); export const invalidDataSchemaProvider = localize('invalidDataSchemaProvider', "Invalid DSP in .sqlproj file"); +export const databaseSelectionRequired = localize('databaseSelectionRequired', "Database selection is required to import a project"); export function projectAlreadyOpened(path: string) { return localize('projectAlreadyOpened', "Project '{0}' is already opened.", path); } export function projectAlreadyExists(name: string, path: string) { return localize('projectAlreadyExists', "A project named {0} already exists in {1}.", name, path); } export function noFileExist(fileName: string) { return localize('noFileExist', "File {0} doesn't exist", fileName); } diff --git a/extensions/sql-database-projects/src/controllers/databaseProjectTreeViewProvider.ts b/extensions/sql-database-projects/src/controllers/databaseProjectTreeViewProvider.ts index bf8a471396..70f2a573cf 100644 --- a/extensions/sql-database-projects/src/controllers/databaseProjectTreeViewProvider.ts +++ b/extensions/sql-database-projects/src/controllers/databaseProjectTreeViewProvider.ts @@ -4,9 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as constants from '../common/constants'; -import { BaseProjectTreeItem, MessageTreeItem, SpacerTreeItem } from '../models/tree/baseTreeItem'; +import { BaseProjectTreeItem, SpacerTreeItem } from '../models/tree/baseTreeItem'; import { ProjectRootTreeItem } from '../models/tree/projectTreeItem'; import { Project } from '../models/project'; @@ -25,7 +24,7 @@ export class SqlDatabaseProjectTreeViewProvider implements vscode.TreeDataProvid } private initialize() { - this.roots = [new MessageTreeItem(constants.noOpenProjectMessage)]; + this.roots = []; } public getTreeItem(element: BaseProjectTreeItem): vscode.TreeItem { diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index 939431834d..abf734bd65 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -518,6 +518,19 @@ export class ProjectsController { model.serverId = profile.id; model.database = profile.databaseName; } + else { + const connectionId = (await this.apiWrapper.openConnectionDialog()).connectionId; + + const databaseList = await this.apiWrapper.listDatabases(connectionId); + const database = (await this.apiWrapper.showQuickPick(databaseList.map(dbName => { return { label: dbName }; })))?.label; + + if (!database) { + throw new Error(constants.databaseSelectionRequired); + } + + model.serverId = connectionId; + model.database = database; + } // Get project name let newProjName = await this.getProjectName(model.database);