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
+
+