private static ValidationRule Create(ValidationRuleDefinition definition, RoleEntry roleEntry)
        {
            ExTraceGlobals.PublicCreationAPITracer.TraceDebug <string, string>((long)definition.GetHashCode(), "Entering ValidationRuleFactory.GetValidationRule({0}) - Creating ValidationRule. Name: '{1}'", (null == roleEntry) ? "<NULL>" : roleEntry.ToString(), definition.Name);
            OrganizationValidationRuleDefinition organizationValidationRuleDefinition = definition as OrganizationValidationRuleDefinition;

            if (organizationValidationRuleDefinition != null)
            {
                return(new OrganizationValidationRule(organizationValidationRuleDefinition, roleEntry));
            }
            IEnumerable <Capability>             restrictedCapabilities = definition.RestrictedCapabilities;
            List <CapabilityIdentifierEvaluator> list = new List <CapabilityIdentifierEvaluator>();

            foreach (Capability capability in restrictedCapabilities)
            {
                list.Add(CapabilityIdentifierEvaluatorFactory.Create(capability));
            }
            IEnumerable <Capability>             overridingAllowCapabilities = definition.OverridingAllowCapabilities;
            List <CapabilityIdentifierEvaluator> list2 = new List <CapabilityIdentifierEvaluator>();

            foreach (Capability capability2 in overridingAllowCapabilities)
            {
                list2.Add(CapabilityIdentifierEvaluatorFactory.Create(capability2));
            }
            if (definition.Expressions == null)
            {
                return(new RestrictedValidationRule(definition, list, list2, roleEntry));
            }
            return(new ExpressionFilterValidationRule(definition, list, list2, roleEntry));
        }
 private void Initialize(IEnumerable <ValidationRuleDefinition> rules)
 {
     if (rules == null)
     {
         throw new ArgumentNullException("rules");
     }
     if (this.featuresToRules != null && this.cmdletToRules != null)
     {
         return;
     }
     lock (this.listLock)
     {
         if (this.featuresToRules == null || this.cmdletToRules == null)
         {
             this.cmdletToRules   = new Dictionary <string, List <ValidationRuleDefinition> >();
             this.featuresToRules = new Dictionary <string, List <ValidationRuleDefinition> >();
             foreach (ValidationRuleDefinition validationRuleDefinition in rules)
             {
                 if (validationRuleDefinition.Expressions != null && validationRuleDefinition.Expressions.Count > 0)
                 {
                     foreach (ValidationRuleExpression validationRuleExpression in validationRuleDefinition.Expressions)
                     {
                         MonadFilter monadFilter = new MonadFilter(validationRuleExpression.QueryString, null, validationRuleExpression.Schema);
                         validationRuleExpression.QueryFilter = monadFilter.InnerFilter;
                     }
                 }
                 OrganizationValidationRuleDefinition organizationValidationRuleDefinition = validationRuleDefinition as OrganizationValidationRuleDefinition;
                 if (organizationValidationRuleDefinition != null)
                 {
                     if (organizationValidationRuleDefinition.OverridingAllowExpressions != null && organizationValidationRuleDefinition.OverridingAllowExpressions.Count > 0)
                     {
                         foreach (ValidationRuleExpression validationRuleExpression2 in organizationValidationRuleDefinition.OverridingAllowExpressions)
                         {
                             MonadFilter monadFilter2 = new MonadFilter(validationRuleExpression2.QueryString, null, validationRuleExpression2.Schema);
                             validationRuleExpression2.QueryFilter = monadFilter2.InnerFilter;
                         }
                     }
                     if (organizationValidationRuleDefinition.RestrictionExpressions != null && organizationValidationRuleDefinition.RestrictionExpressions.Count > 0)
                     {
                         foreach (ValidationRuleExpression validationRuleExpression3 in organizationValidationRuleDefinition.RestrictionExpressions)
                         {
                             MonadFilter monadFilter3 = new MonadFilter(validationRuleExpression3.QueryString, null, validationRuleExpression3.Schema);
                             validationRuleExpression3.QueryFilter = monadFilter3.InnerFilter;
                         }
                     }
                 }
                 foreach (RoleEntry roleEntry in validationRuleDefinition.ApplicableRoleEntries)
                 {
                     string key = roleEntry.Name;
                     if (roleEntry is CmdletRoleEntry)
                     {
                         key = ((CmdletRoleEntry)roleEntry).FullName;
                     }
                     RBACHelper.AddValueToDictionaryList <ValidationRuleDefinition>(this.cmdletToRules, key, validationRuleDefinition);
                 }
                 RBACHelper.AddValueToDictionaryList <ValidationRuleDefinition>(this.featuresToRules, validationRuleDefinition.Feature, validationRuleDefinition);
             }
         }
     }
 }