// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // #nullable disable using Microsoft.SqlTools.ServiceLayer.Metadata.Contracts; using Newtonsoft.Json.Linq; namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Contracts { /// /// Information describing a Node in the Object Explorer tree. /// Contains information required to display the Node to the user and /// to know whether actions such as expanding children is possible /// the node /// public class NodeInfo { /// /// Path identifying this node: for example a table will be at ["server", "database", "tables", "tableName"]. /// This enables rapid navigation of the tree without the need for a global registry of elements. /// The path functions as a unique ID and is used to disambiguate the node when sending requests for expansion. /// A common ID is needed since processes do not share address space and need a unique identifier /// public string NodePath { get; set; } /// /// The path of the parent node. This is going to be used by the client side to determine the parent node. /// We are not referencing the parent node directly because the information needs to be passed between processes. /// public string ParentNodePath { get; set; } /// /// The type of the node - for example Server, Database, Folder, Table /// public string NodeType { get; set; } /// /// Label to display to the user, describing this node. /// public string Label { get; set; } /// /// Node Sub type - for example a key can have type as "Key" and sub type as "PrimaryKey" /// public string NodeSubType { get; set; } /// /// Node status - for example login can be disabled/enabled /// public string NodeStatus { get; set; } /// /// Is this a leaf node (in which case no children can be generated) or /// is it expandable? /// public bool IsLeaf { get; set; } /// /// Object Metadata for smo objects to be used for scripting /// public ObjectMetadata Metadata { get; set; } /// /// Error message returned from the engine for a object explorer node failure reason, if any. /// public string ErrorMessage { get; set; } /// /// The object type of the node. e.g. Database, Server, Tables... /// public string ObjectType { get; set; } /// /// Filterable properties that this node supports /// public NodeFilterProperty[] FilterableProperties { get; set; } } /// /// The filterable properties that a node supports /// public class NodeFilterProperty { /// /// The name of the filter property /// public string Name { get; set; } /// /// The name of the filter property displayed to the user /// public string DisplayName { get; set; } /// /// The description of the filter property /// public string Description { get; set; } /// /// The data type of the filter property /// public NodeFilterPropertyDataType Type { get; set; } /// /// The list of choices for the filter property if the type is choice /// public NodeFilterPropertyChoice[] Choices { get; set; } } /// /// The data type of the filter property. Matches NodeFilterPropertyDataType enum in ADS : https://github.com/microsoft/azuredatastudio/blob/main/src/sql/azdata.proposed.d.ts#L1847-L1853 /// public enum NodeFilterPropertyDataType { String = 0, Number = 1, Boolean = 2, Date = 3, Choice = 4 } /// /// The operator of the filter property. Matches NodeFilterOperator enum in ADS: https://github.com/microsoft/azuredatastudio/blob/main/src/sql/azdata.proposed.d.ts#L1855-L1868 /// public enum NodeFilterOperator { Equals = 0, NotEquals = 1, LessThan = 2, LessThanOrEquals = 3, GreaterThan = 4, GreaterThanOrEquals = 5, Between = 6, NotBetween = 7, Contains = 8, NotContains = 9, } /// /// The filters that can be used to filter the nodes in an expand request. /// public class NodeFilter { /// /// The name of the filter property /// public string Name { get; set; } /// /// The operator of the filter property /// public NodeFilterOperator Operator { get; set; } /// /// The applied values of the filter property /// public JToken Value { get; set; } } /// /// The choice for the filter property if the type is choice /// public class NodeFilterPropertyChoice { /// /// The dropdown display value for the choice /// /// public string DisplayName { get; set; } /// /// The value of the choice /// public string Value { get; set; } } }