// Copyright (c) 2005 DMTF.  All rights reserved.
   [Version ( "2.7.0" ), 
    UMLPackagePath ( "CIM::Policy" ), 
    Description ( 
       "This class provides a means of representing the time periods "
       "during which a PolicySet is valid, i.e., active. At all times "
       "that fall outside these time periods, the PolicySet has no "
       "effect. A PolicySet is treated as valid at ALL times, if it "
       "does not specify a PolicyTimePeriodCondition. \n"
       "\n"
       "In some cases a Policy Consumer may need to perform certain "
       "setup / cleanup actions when a PolicySet becomes active / "
       "inactive. For example, sessions that were established while a "
       "PolicySet was active might need to be taken down when the "
       "PolicySet becomes inactive. In other cases, however, such "
       "sessions might be left up. In this case, the effect of "
       "deactivating the PolicySet would just be to prevent the "
       "establishment of new sessions. \n"
       "\n"
       "Setup / cleanup behaviors on validity period transitions are "
       "not currently addressed by the Policy Model, and must be "
       "specified in \'guideline\' documents or via subclasses of "
       "CIM_PolicySet, CIM_PolicyTimePeriod Condition or other "
       "concrete subclasses of CIM_Policy. If such behaviors need to "
       "be under the control of the policy administrator, then a "
       "mechanism to allow this control must also be specified in the "
       "subclasses. \n"
       "\n"
       "PolicyTimePeriodCondition is defined as a subclass of "
       "PolicyCondition. This is to allow the inclusion of time-based "
       "criteria in the AND/OR condition definitions for a PolicyRule. \n"
       "\n"
       "Instances of this class may have up to five properties "
       "identifying time periods at different levels. The values of "
       "all the properties present in an instance are ANDed together "
       "to determine the validity period(s) for the instance. For "
       "example, an instance with an overall validity range of January "
       "1, 2000 through December 31, 2000; a month mask that selects "
       "March and April; a day-of-the-week mask that selects Fridays; "
       "and a time of day range of 0800 through 1600 would be "
       "represented using the following time periods: \n"
       "Friday, March 5, 2000, from 0800 through 1600; \n"
       "Friday, March 12, 2000, from 0800 through 1600; \n"
       "Friday, March 19, 2000, from 0800 through 1600; \n"
       "Friday, March 26, 2000, from 0800 through 1600; \n"
       "Friday, April 2, 2000, from 0800 through 1600; \n"
       "Friday, April 9, 2000, from 0800 through 1600; \n"
       "Friday, April 16, 2000, from 0800 through 1600; \n"
       "Friday, April 23, 2000, from 0800 through 1600; \n"
       "Friday, April 30, 2000, from 0800 through 1600. \n"
       "\n"
       "Properties not present in an instance of "
       "PolicyTimePeriodCondition are implicitly treated as having "
       "their value \'always enabled\'. Thus, in the example above, "
       "the day-of-the-month mask is not present, and so the validity "
       "period for the instance implicitly includes a day-of-the-month "
       "mask that selects all days of the month. If this \'missing "
       "property\' rule is applied to its fullest, we see that there "
       "is a second way to indicate that a PolicySet is always "
       "enabled: associate with it an instance of "
       "PolicyTimePeriodCondition whose only properties with specific "
       "values are its key properties." )]
class CIM_PolicyTimePeriodCondition : CIM_PolicyCondition {

      [Description ( 
          "This property identifies an overall range of calendar "
          "dates and times over which a PolicySet is valid. It is "
          "formatted as a string representing a start date and "
          "time, in which the character \'T\' indicates the "
          "beginning of the time portion, followed by the solidus "
          "character \'/\', followed by a similar string "
          "representing an end date and time. The first date "
          "indicates the beginning of the range, while the second "
          "date indicates the end. Thus, the second date and time "
          "must be later than the first. Date/times are expressed "
          "as substrings of the form yyyymmddThhmmss. For example: \n"
          "20000101T080000/20000131T120000 defines \n"
          "January 1, 2000, 0800 through January 31, 2000, noon \n"
          "\n"
          "There are also two special cases in which one of the "
          "date/time strings is replaced with a special string "
          "defined in RFC 2445. \n"
          "o If the first date/time is replaced with the string "
          "\'THISANDPRIOR\', then the property indicates that a "
          "PolicySet is valid [from now] until the date/time that "
          "appears after the \'/\'. \n"
          "o If the second date/time is replaced with the string "
          "\'THISANDFUTURE\', then the property indicates that a "
          "PolicySet becomes valid on the date/time that appears "
          "before the \'/\', and remains valid from that point on." ), 
       ModelCorrespondence { 
          "CIM_PolicyTimePeriodCondition.MonthOfYearMask", 
          "CIM_PolicyTimePeriodCondition.DayOfMonthMask", 
          "CIM_PolicyTimePeriodCondition.DayOfWeekMask", 
          "CIM_PolicyTimePeriodCondition.TimeOfDayMask", 
          "CIM_PolicyTimePeriodCondition.LocalOrUtcTime" }]
   string TimePeriod;

      [Description ( 
          "The purpose of this property is to refine the valid time "
          "period that is defined by the TimePeriod property, by "
          "explicitly specifying in which months the PolicySet is "
          "valid. These properties work together, with the "
          "TimePeriod used to specify the overall time period in "
          "which the PolicySet is valid, and the MonthOfYearMask "
          "used to pick out the months during which the PolicySet "
          "is valid. \n"
          "\n"
          "This property is formatted as an octet string, "
          "structured as follows: \n"
          "o a 4-octet length field, indicating the length of the "
          "entire octet string; this field is always set to "
          "0x00000006 for this property; \n"
          "o a 2-octet field consisting of 12 bits identifying the "
          "12 months of the year, beginning with January and ending "
          "with December, followed by 4 bits that are always set to "
          "\'0\'. For each month, the value \'1\' indicates that "
          "the policy is valid for that month, and the value \'0\' "
          "indicates that it is not valid. \n"
          "\n"
          "The value 0x000000060830, for example, indicates that a "
          "PolicySet is valid only in the months May, November, and "
          "December. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "PolicySet is treated as valid for all twelve months, and "
          "only restricted by its TimePeriod property value and the "
          "other Mask properties." ), 
       OctetString, ModelCorrespondence { 
          "CIM_PolicyTimePeriodCondition.TimePeriod", 
          "CIM_PolicyTimePeriodCondition.LocalOrUtcTime" }]
   uint8 MonthOfYearMask[];

      [Description ( 
          "The purpose of this property is to refine the valid time "
          "period that is defined by the TimePeriod property, by "
          "explicitly specifying in which days of the month the "
          "PolicySet is valid. These properties work together, with "
          "the TimePeriod used to specify the overall time period "
          "in which the PolicySet is valid, and the DayOfMonthMask "
          "used to pick out the days of the month during which the "
          "PolicySet is valid. \n"
          "\n"
          "This property is formatted as an octet string, "
          "structured as follows: \n"
          "o a 4-octet length field, indicating the length of the "
          "entire octet string; this field is always set to "
          "0x0000000C for this property; \n"
          "o an 8-octet field consisting of 31 bits identifying the "
          "days of the month counting from the beginning, followed "
          "by 31 more bits identifying the days of the month "
          "counting from the end, followed by 2 bits that are "
          "always set to \'0\'. For each day, the value \'1\' "
          "indicates that the PolicySet is valid for that day, and "
          "the value \'0\' indicates that it is not valid. \n"
          "\n"
          "The value 0x0000000C8000000100000000, for example, "
          "indicates that a PolicySet is valid on the first and "
          "last days of the month. \n"
          "\n"
          "For months with fewer than 31 days, the digits "
          "corresponding to days that the months do not have "
          "(counting in both directions) are ignored. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "PolicySet is treated as valid for all days of the month, "
          "and only restricted by its TimePeriod property value and "
          "the other Mask properties." ), 
       OctetString, ModelCorrespondence { 
          "CIM_PolicyTimePeriodCondition.TimePeriod", 
          "CIM_PolicyTimePeriodCondition.LocalOrUtcTime" }]
   uint8 DayOfMonthMask[];

      [Description ( 
          "The purpose of this property is to refine the valid time "
          "period that is defined by the TimePeriod property, by "
          "explicitly specifying in which days of the week the "
          "PolicySet is valid. These properties work together, with "
          "the TimePeriod used to specify the overall time period "
          "in which the PolicySet is valid, and the DayOfWeekMask "
          "used to pick out the days of the week during which the "
          "PolicySet is valid. \n"
          "\n"
          "This property is formatted as an octet string, "
          "structured as follows: \n"
          "o a 4-octet length field, indicating the length of the "
          "entire octet string; this field is always set to "
          "0x00000005 for this property; \n"
          "o a 1-octet field consisting of 7 bits identifying the 7 "
          "days of the week, beginning with Sunday and ending with "
          "Saturday, followed by 1 bit that is always set to \'0\'. "
          "For each day of the week, the value \'1\' indicates that "
          "the PolicySet is valid for that day, and the value \'0\' "
          "indicates that it is not valid. \n"
          "\n"
          "The value 0x000000057C, for example, indicates that a "
          "PolicySet is valid Monday through Friday. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "PolicySet is treated as valid for all days of the week, "
          "and only restricted by its TimePeriod property value and "
          "the other Mask properties." ), 
       OctetString, ModelCorrespondence { 
          "CIM_PolicyTimePeriodCondition.TimePeriod", 
          "CIM_PolicyTimePeriodCondition.LocalOrUtcTime" }]
   uint8 DayOfWeekMask[];

      [Description ( 
          "The purpose of this property is to refine the valid time "
          "period that is defined by the TimePeriod property, by "
          "explicitly specifying a range of times in a day during "
          "which the PolicySet is valid. These properties work "
          "together, with the TimePeriod used to specify the "
          "overall time period in which the PolicySet is valid, and "
          "the TimeOfDayMask used to pick out the range of time "
          "periods in a given day of during which the PolicySet is "
          "valid. \n"
          "\n"
          "This property is formatted in the style of RFC 2445: a "
          "time string beginning with the character \'T\', followed "
          "by the solidus character \'/\', followed by a second "
          "time string. The first time indicates the beginning of "
          "the range, while the second time indicates the end. "
          "Times are expressed as substrings of the form \'Thhmmss\'. \n"
          "\n"
          "The second substring always identifies a later time than "
          "the first substring. To allow for ranges that span "
          "midnight, however, the value of the second string may be "
          "smaller than the value of the first substring. Thus, "
          "\'T080000/T210000\' identifies the range from 0800 until "
          "2100, while \'T210000/T080000\' identifies the range "
          "from 2100 until 0800 of the following day. \n"
          "\n"
          "When a range spans midnight, it by definition includes "
          "parts of two successive days. When one of these days is "
          "also selected by either the MonthOfYearMask, "
          "DayOfMonthMask, and/or DayOfWeekMask, but the other day "
          "is not, then the PolicySet is active only during the "
          "portion of the range that falls on the selected day. For "
          "example, if the range extends from 2100 until 0800, and "
          "the day of week mask selects Monday and Tuesday, then "
          "the PolicySet is active during the following three "
          "intervals: \n"
          "From midnight Sunday until 0800 Monday; \n"
          "From 2100 Monday until 0800 Tuesday; \n"
          "From 2100 Tuesday until 23:59:59 Tuesday. \n"
          "\n"
          "If a value for this property is not provided, then the "
          "PolicySet is treated as valid for all hours of the day, "
          "and only restricted by its TimePeriod property value and "
          "the other Mask properties." ), 
       ModelCorrespondence { 
          "CIM_PolicyTimePeriodCondition.TimePeriod", 
          "CIM_PolicyTimePeriodCondition.LocalOrUtcTime" }]
   string TimeOfDayMask;

      [Description ( 
          "This property indicates whether the times represented in "
          "the TimePeriod property and in the various Mask "
          "properties represent local times or UTC times. There is "
          "no provision for mixing of local times and UTC times: "
          "the value of this property applies to all of the other "
          "time-related properties. TimePeriods are synchronized "
          "worldwide by using the enumeration value \'UTCTime\'. If "
          "the goal is to synchronize worldwide on a particular "
          "local time (such as 0300 - 0500 in New York), then if "
          "the TimePeriod property spans a Daylight Savings Time "
          "transition in New York, it will be necessary to create "
          "multiple instances of PolicyTimePeriodCondition, one "
          "based on the offset UTC-0500 for the part of each year "
          "when standard time is used in New York, and one based on "
          "the offset UTC-0400 for the part of each year when "
          "Daylight Savings Time is used there." ), 
       ValueMap { "1", "2" }, 
       Values { "Local Time", "UTC Time" }, 
       ModelCorrespondence { 
          "CIM_PolicyTimePeriodCondition.TimePeriod", 
          "CIM_PolicyTimePeriodCondition.MonthOfYearMask", 
          "CIM_PolicyTimePeriodCondition.DayOfMonthMask", 
          "CIM_PolicyTimePeriodCondition.DayOfWeekMask", 
          "CIM_PolicyTimePeriodCondition.TimeOfDayMask" }]
   uint16 LocalOrUtcTime;


};
