//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
using System;
using System.Collections.Generic;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes;
namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel
{
///
/// Status for triggers
///
internal partial class TriggersChildFactory : SmoChildFactoryBase
{
public static readonly Lazy> SmoPropertiesLazy = new Lazy>(() => new List
{
new NodeSmoProperty
{
Name = "IsEnabled",
ValidFor = ValidForFlag.All
}
});
public override string GetNodeStatus(object smoObject, SmoQueryContext smoContext)
{
return TriggersCustomeNodeHelper.GetStatus(smoObject);
}
public override IEnumerable SmoProperties => SmoPropertiesLazy.Value;
}
internal partial class ServerLevelServerTriggersChildFactory : SmoChildFactoryBase
{
public override string GetNodeStatus(object smoObject, SmoQueryContext smoContext)
{
return TriggersCustomeNodeHelper.GetStatus(smoObject);
}
public override IEnumerable SmoProperties
{
get
{
return TriggersChildFactory.SmoPropertiesLazy.Value;
}
}
}
internal partial class DatabaseTriggersChildFactory : SmoChildFactoryBase
{
public override string GetNodeStatus(object smoObject, SmoQueryContext smoContext)
{
return TriggersCustomeNodeHelper.GetStatus(smoObject);
}
public override IEnumerable SmoProperties
{
get
{
return TriggersChildFactory.SmoPropertiesLazy.Value;
}
}
}
internal static class TriggersCustomeNodeHelper
{
internal static string GetStatus(object context)
{
Trigger trigger = context as Trigger;
if (trigger != null)
{
if (!trigger.IsEnabled)
{
return "Disabled";
}
}
ServerDdlTrigger serverDdlTrigger = context as ServerDdlTrigger;
if (serverDdlTrigger != null)
{
if (!serverDdlTrigger.IsEnabled)
{
return "Disabled";
}
}
DatabaseDdlTrigger databaseDdlTrigger = context as DatabaseDdlTrigger;
if (databaseDdlTrigger != null)
{
if (!databaseDdlTrigger.IsEnabled)
{
return "Disabled";
}
}
return string.Empty;
}
}
}