//
// 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.Kusto.ServiceLayer.ObjectExplorer.Nodes;
using Microsoft.Kusto.ServiceLayer.DataSource;
using Microsoft.Kusto.ServiceLayer.DataSource.Metadata;
namespace Microsoft.Kusto.ServiceLayer.ObjectExplorer.DataSourceModel
{
///
/// A Node in the tree representing a SMO-based object
///
public class DataSourceTreeNode : TreeNode
{
public static int FolderSortPriority = 0;
private static int _nextSortPriority = FolderSortPriority + 1; // 0 is reserved for folders
protected QueryContext context;
public DataSourceTreeNode(IDataSource dataSource, DataSourceObjectMetadata objectMetadata)
: base(dataSource, objectMetadata)
{
}
///
/// Gets an incrementing sort priority value to assist in automatically sorting
/// elements in a tree
///
public static int NextSortPriority
{
get
{
return System.Threading.Interlocked.Increment(ref _nextSortPriority);
}
}
public virtual void CacheInfoFromModel(DataSourceObjectMetadata objectMetadata)
{
base.ObjectMetadata = objectMetadata;
NodeValue = objectMetadata.Name;
}
public virtual DataSourceObjectMetadata GetParentObjectMetadata()
{
if (ObjectMetadata != null)
{
return ObjectMetadata;
}
// Return the parent's object, or null if it's not set / not a OETreeNode
return ParentAs()?.GetParentObjectMetadata();
}
public override object GetContext()
{
EnsureContextInitialized();
return context;
}
protected virtual void EnsureContextInitialized()
{
if (context == null)
{
DataSourceObjectMetadata oeParent = GetParentObjectMetadata();
QueryContext parentContext = Parent?.GetContextAs();
if (oeParent != null && parentContext != null)
{
context = parentContext.CopyWithParent(oeParent);
}
}
}
}
}