// Copyright (c) 2005 DMTF.  All rights reserved.
   [Abstract, Version ( "2.8.0" ), 
    UMLPackagePath ( "CIM::Policy" ), 
    Description ( 
       "PolicySet is an abstract class that represents a set of "
       "policies that form a coherent set. The set of contained "
       "policies has a common decision strategy and a common set of "
       "policy roles (defined via the PolicySetInRole Collection "
       "association). Subclasses include PolicyGroup and PolicyRule." )]
class CIM_PolicySet : CIM_Policy {

      [Description ( 
          "PolicyDecisionStrategy defines the evaluation method "
          "used for policies contained in the PolicySet. There are "
          "two values currently defined: \n"
          "- \'First Matching\' (1) executes the actions of the "
          "first rule whose conditions evaluate to TRUE. The "
          "concept of \'first\' is determined by examining the "
          "priority of the rule within the policy set (i.e., by "
          "examining the property, PolicySetComponent.Priority). "
          "Note that this ordering property MUST be maintained when "
          "processing the PolicyDecisionStrategy. \n"
          "- \'All\' (2) executes the actions of ALL rules whose "
          "conditions evaluate to TRUE, in the set. As noted above, "
          "the order of processing of the rules is defined by the "
          "property, PolicySetComponent.Priority (and within a "
          "rule, the ordering of the actions is defined by the "
          "property, PolicyActionStructure.ActionOrder). Note that "
          "when this strategy is defined, processing MUST be "
          "completed of ALL rules whose conditions evaluate to "
          "TRUE, regardless of errors in the execution of the rule "
          "actions." ), 
       ValueMap { "1", "2" }, 
       Values { "First Matching", "All" }]
   uint16 PolicyDecisionStrategy;

      [Deprecated { "CIM_PolicySetInRoleCollection" }, 
       Description ( 
          "The PolicyRoles property represents the roles associated "
          "with a PolicySet. All contained PolicySet instances "
          "inherit the values of the PolicyRoles of the aggregating "
          "PolicySet but the values are not copied. A contained "
          "PolicySet instance may, however, add additional "
          "PolicyRoles to those it inherits from its aggregating "
          "PolicySet(s). Each value in PolicyRoles multi-valued "
          "property represents a role for which the PolicySet "
          "applies, i.e., the PolicySet should be used by any "
          "enforcement point that assumes any of the listed "
          "PolicyRoles values. \n"
          "\n"
          "Although not officially designated as \'role "
          "combinations\', multiple roles may be specified using "
          "the form: \n"
          "<RoleName>[&&<RoleName>]* \n"
          "where the individual role names appear in alphabetical "
          "order (according to the collating sequence for UCS-2). "
          "Implementations may treat PolicyRoles values that are "
          "specified as \'role combinations\' as simple strings. \n"
          "\n"
          "This property is deprecated in lieu of the use of an "
          "association, CIM_PolicySetInRoleCollection. The latter "
          "is a more explicit and less error-prone approach to "
          "modeling that a PolicySet has one or more PolicyRoles." )]
   string PolicyRoles[];

      [Description ( 
          "Indicates whether this PolicySet is administratively "
          "enabled, administratively disabled, or enabled for "
          "debug. The \"EnabledForDebug\" property value is "
          "deprecated and, when it or any value not understood by "
          "the receiver is specified, the receiving enforcement "
          "point treats the PolicySet as \"Disabled\". To determine "
          "if a PolicySet is \"Enabled\", the containment hierarchy "
          "specified by the PolicySetComponent aggregation is "
          "examined and the Enabled property values of the "
          "hierarchy are ANDed together. Thus, for example, "
          "everything aggregated by a PolicyGroup may be disabled "
          "by setting the Enabled property in the PolicyGroup "
          "instance to \"Disabled\" without changing the Enabled "
          "property values of any of the aggregated instances. The "
          "default value is 1 (\"Enabled\")." ), 
       ValueMap { "1", "2", "3" }, 
       Values { "Enabled", "Disabled", "Enabled For Debug" }]
   uint16 Enabled = 1;


};
