diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Contracts/NodeInfo.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Contracts/NodeInfo.cs index f37cec6b..1fe09604 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Contracts/NodeInfo.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Contracts/NodeInfo.cs @@ -142,7 +142,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Contracts /// /// The name of the filter property /// - public string DisplayName { get; set; } + public string Name { get; set; } /// /// The operator of the filter property diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoChildFactoryBase.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoChildFactoryBase.cs index 47eb3380..f3d25e49 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoChildFactoryBase.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoChildFactoryBase.cs @@ -147,7 +147,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel { foreach (var f in appliedFilters) { - NodeFilterProperty filterProperty = filterDefinitions.FirstOrDefault(x => x.DisplayName == f.DisplayName); + NodeFilterProperty filterProperty = filterDefinitions.FirstOrDefault(x => x.Name == f.Name); filters.Add(ObjectExplorerUtils.ConvertExpandNodeFilterToNodeFilter(f, filterProperty)); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.cs index a3a512e7..397dbfcb 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.cs @@ -29,6 +29,26 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel NodeValue = string.Empty; this.NodeType = "Database"; this.NodeTypeId = NodeTypes.Database; + if(WorkspaceService.Instance.CurrentSettings.SqlTools.ObjectExplorer.GroupBySchema) + { + this.FilterProperties = new NodeFilterProperty[] + { + new NodeFilterProperty + { + Name = "Name", + DisplayName = SR.FilterName, + Type = NodeFilterPropertyDataType.String, + Description = SR.FilterNameDescription, + }, + new NodeFilterProperty + { + Name = "Owner", + DisplayName = SR.FilterOwner, + Type = NodeFilterPropertyDataType.String, + Description = SR.FilterOwnerDescription, + }, + }; + } OnInitialize(); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.tt b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.tt index 128579b9..09ed4604 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.tt +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodes.tt @@ -86,6 +86,69 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel WriteLine(" NodeValue = string.Empty;"); WriteLine(" this.NodeType = \"{0}\";", type.Replace("TreeNode", string.Empty)); WriteLine(" this.NodeTypeId = NodeTypes.{0};", name.Replace("TreeNode", string.Empty)); + List filterProperties = GetFilterProperties(xmlFile, type.Replace("TreeNode", string.Empty)); + string settingsFlag = GetFilterSettingsFlag(xmlFile, type.Replace("TreeNode", string.Empty)); + if(!String.IsNullOrEmpty(settingsFlag)) + { + WriteLine(" if({0})", GetSettingsString(settingsFlag)); + WriteLine(" {"); + } + if(filterProperties.Count > 0){ + WriteLine(" this.FilterProperties = new NodeFilterProperty[]"); + WriteLine(" {"); + foreach (var filterDef in filterProperties) + { + var filterName = filterDef.GetAttribute("Name"); + var filterDisplayName = filterDef.GetAttribute("LocLabel"); + var filterType = filterDef.GetAttribute("Type"); + var enumString = "NodeFilterPropertyDataType"; + switch (filterType) + { + case "string": + enumString += ".String"; + break; + case "bool": + enumString += ".Boolean"; + break; + case "date": + enumString += ".Date"; + break; + case "choice": + enumString += ".Choice"; + break; + } + var filterDescription = filterDef.GetAttribute("Description"); + WriteLine(" new NodeFilterProperty"); + WriteLine(" {"); + WriteLine(" Name = \"{0}\",", filterName); + WriteLine(" DisplayName = {0},", filterDisplayName); + WriteLine(" Type = {0},", enumString); + WriteLine(" Description = {0},", filterDescription); + if(filterType == "choice") + { + var choiceValues = filterDef.ChildNodes; + WriteLine(" Choices = new NodeFilterPropertyChoice[] {"); + foreach (XmlElement choice in choiceValues) + { + var choiceName = choice.GetAttribute("LocLabel"); + var choiceValue = choice.GetAttribute("Value"); + WriteLine(" new NodeFilterPropertyChoice {"); + WriteLine(" DisplayName = {0},", choiceName); + WriteLine(" Value = \"{0}\",", choiceValue); + WriteLine(" },"); + + } + WriteLine(" }"); + } + WriteLine(" },"); + + } + WriteLine(" };"); + } + if(!String.IsNullOrEmpty(settingsFlag)) + { + WriteLine(" }"); + } WriteLine(" OnInitialize();"); WriteLine(" }"); WriteLine(" }"); @@ -636,6 +699,18 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel return retElements; } + public static string GetFilterSettingsFlag(string xmlFile, string nodeType) + { + XmlDocument doc = new XmlDocument(); + doc.Load(xmlFile); + XmlNodeList nodeList = doc.SelectNodes(string.Format("/ServerExplorerTree/FilterProperties[@NodeName='{0}']", nodeType)); + if(nodeList.Count > 0) + { + return (nodeList[0] as XmlElement).Attributes["SettingsFlag"].Value; + } + return String.Empty; + } + public static List GetFilterProperties(string xmlFile, string nodeType) { diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodesDefinition.xml b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodesDefinition.xml index a177bcb7..81d1dd72 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodesDefinition.xml +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/SmoModel/SmoTreeNodesDefinition.xml @@ -661,6 +661,11 @@ InPrimaryKey + + Name + Owner + +