// Copyright (c) 2005 DMTF.  All rights reserved.
   [Association, Abstract, Aggregation, Version ( "2.6.0" ), 
    UMLPackagePath ( "CIM::Policy" ), 
    Description ( 
       "PolicyActions may be aggregated into rules and into compound "
       "actions. PolicyActionStructure is the abstract aggregation "
       "class for the structuring of policy actions." )]
class CIM_PolicyActionStructure : CIM_PolicyComponent {

      [Aggregate, Override ( "GroupComponent" ), 
       Description ( 
          "PolicyAction instances may be aggregated into either "
          "PolicyRule instances or CompoundPolicyAction instances." )]
   CIM_Policy REF GroupComponent;

      [Override ( "PartComponent" ), 
       Description ( 
          "A PolicyAction aggregated by a PolicyRule or CompoundPolicyAction."
           )]
   CIM_PolicyAction REF PartComponent;

      [Description ( 
          "ActionOrder is an unsigned integer \'n\' that indicates "
          "the relative position of a PolicyAction in the sequence "
          "of actions associated with a PolicyRule or "
          "CompoundPolicyAction. When \'n\' is a positive integer, "
          "it indicates a place in the sequence of actions to be "
          "performed, with smaller integers indicating earlier "
          "positions in the sequence. The special value \'0\' "
          "indicates \'don\'t care\'. If two or more PolicyActions "
          "have the same non-zero sequence number, they may be "
          "performed in any order, but they must all be performed "
          "at the appropriate place in the overall action sequence. \n"
          "\n"
          "A series of examples will make ordering of PolicyActions "
          "clearer: \n"
          "o If all actions have the same sequence number, "
          "regardless of whether it is \'0\' or non-zero, any order "
          "is acceptable. \n"
          "o The values: \n"
          "1:ACTION A \n"
          "2:ACTION B \n"
          "1:ACTION C \n"
          "3:ACTION D \n"
          "indicate two acceptable orders: A,C,B,D or C,A,B,D, \n"
          "since A and C can be performed in either order, but only "
          "at the \'1\' position. \n"
          "o The values: \n"
          "0:ACTION A \n"
          "2:ACTION B \n"
          "3:ACTION C \n"
          "3:ACTION D \n"
          "require that B,C, and D occur either as B,C,D or as "
          "B,D,C. Action A may appear at any point relative to B, "
          "C, and D. Thus the complete set of acceptable orders is: "
          "A,B,C,D; B,A,C,D; B,C,A,D; B,C,D,A; A,B,D,C; B,A,D,C; "
          "B,D,A,C; B,D,C,A. \n"
          "\n"
          "Note that the non-zero sequence numbers need not start "
          "with \'1\', and they need not be consecutive. All that "
          "matters is their relative magnitude." )]
   uint16 ActionOrder;


};
