private static bool IsWebOrHigher(SkuType sku)
 {
     if (sku != SkuType.Web)
     {
         return(SkuUtil.IsStandardOrHigher(sku));
     }
     return(true);
 }
        public static bool IsFeatureEnabled(SkuType sku, RestrictedFeatures feature, out bool isFeatureExpected)
        {
            isFeatureExpected = true;
            switch (feature)
            {
            case RestrictedFeatures.CustomAuth:
                return(true);

            case RestrictedFeatures.ReportBuilder:
                return(SkuUtil.IsWorkgroupOrHigher(sku));

            case RestrictedFeatures.NoCpuThrottling:
            case RestrictedFeatures.NoMemoryThrottling:
                return(SkuUtil.IsDataCenterOrHigher(sku));

            case RestrictedFeatures.ScaleOut:
            case RestrictedFeatures.DataDrivenSubscriptions:
            case RestrictedFeatures.DataAlerting:
            case RestrictedFeatures.Crescent:
            case RestrictedFeatures.KpiItems:
            case RestrictedFeatures.MobileReportItems:
            case RestrictedFeatures.Branding:
                return(SkuUtil.IsEnterpriseOrHigher(sku));

            case RestrictedFeatures.NonSqlDataSources:
            case RestrictedFeatures.OtherSkuDatasources:
            case RestrictedFeatures.RemoteDataSources:
            case RestrictedFeatures.Caching:
            case RestrictedFeatures.ExecutionSnapshots:
            case RestrictedFeatures.History:
            case RestrictedFeatures.Delivery:
            case RestrictedFeatures.Scheduling:
            case RestrictedFeatures.Extensibility:
            case RestrictedFeatures.Sharepoint:
            case RestrictedFeatures.Subscriptions:
            case RestrictedFeatures.CustomRolesSecurity:
            case RestrictedFeatures.ModelItemSecurity:
            case RestrictedFeatures.DynamicDrillthrough:
            case RestrictedFeatures.EventGeneration:
            case RestrictedFeatures.ComponentLibrary:
            case RestrictedFeatures.SharedDataset:
            case RestrictedFeatures.PowerBI:
                return(SkuUtil.IsStandardOrHigher(sku));

            default:
                isFeatureExpected = false;
                return(false);
            }
        }
        public static List <SkuType> GetDatabaseSku(SkuType reportServerSku, out List <SkuType> restrictedSkus)
        {
            List <SkuType> list = new List <SkuType>();

            restrictedSkus = new List <SkuType>();
            switch (reportServerSku)
            {
            case SkuType.Express:
                list.Add(SkuType.Express);
                break;

            case SkuType.Web:
                list.Add(SkuType.Web);
                break;

            case SkuType.Workgroup:
                list.Add(SkuType.Workgroup);
                break;

            case SkuType.Standard:
            case SkuType.Enterprise:
            case SkuType.DataCenter:
            case SkuType.BusinessIntelligence:
            case SkuType.EnterpriseCore:
                restrictedSkus.Add(SkuType.Developer);
                restrictedSkus.Add(SkuType.Evaluation);
                break;

            case SkuType.Developer:
                restrictedSkus.Add(SkuType.Evaluation);
                break;

            case SkuType.Evaluation:
                restrictedSkus.Add(SkuType.Developer);
                break;
            }
            if (SkuUtil.IsStandardOrHigher(reportServerSku))
            {
                restrictedSkus.Add(SkuType.Workgroup);
                restrictedSkus.Add(SkuType.Express);
                restrictedSkus.Add(SkuType.Web);
            }
            return(list);
        }
        public static SkuVerificationErrorCode EnsureCorrectEdition(SkuType rsSku, SkuType sqlSku, string connectionString, LocalDbServerVerifier localDbServerVerifier, bool checkRestrictedSkus)
        {
            if (!SkuUtil.IsStandardOrHigher(rsSku) && !SkuUtil.IsLocal(connectionString, localDbServerVerifier))
            {
                return(SkuVerificationErrorCode.LocalConnectionRequired);
            }
            List <SkuType> list        = new List <SkuType>();
            List <SkuType> databaseSku = SkuUtil.GetDatabaseSku(rsSku, out list);

            if (databaseSku.Count > 0 && !databaseSku.Contains(sqlSku))
            {
                return(SkuVerificationErrorCode.DatabaseSkuRequired);
            }
            if (checkRestrictedSkus && list.Count > 0 && list.Contains(sqlSku))
            {
                return(SkuVerificationErrorCode.DatabaseSkuRestricted);
            }
            return(SkuVerificationErrorCode.Success);
        }