// Copyright (c) 2005 DMTF.  All rights reserved.
// <change cr="SysDevCR00711.001" type ="change">Update of
// descriptions based on Tech Edit review.</
// <change cr="ArchCR00066.004" type="add">Add UmlPackagePath
// qualifier values to CIM Schema.</change>
// <change cr="ArchCR00089.003" type="add">Add PUnit qualifier values
// to Units qualifier values.</change>
// ==================================================================
//  CIM_Job
// ==================================================================
   [Abstract, Version ( "2.10.0" ), 
    UMLPackagePath ( "CIM::Core::CoreElements" ), 
    Description ( 
       "A Job is a LogicalElement that represents an executing unit of "
       "work, such as a script or a print job. A Job is distinct from "
       "a Process in that a Job can be scheduled or queued, and its "
       "execution is not limited to a single system." )]
class CIM_Job : CIM_LogicalElement {

      [Description ( 
          "A free-form string that represents the status of the "
          "job. The primary status is reflected in the inherited "
          "OperationalStatus property. JobStatus provides "
          "additional, implementation-specific details." ), 
       ModelCorrespondence { 
          "CIM_ManagedSystemElement.OperationalStatus" }]
   string JobStatus;

      [Description ( 
          "The time that the Job was submitted to execute. A value "
          "of all zeroes indicates that the owning element is not "
          "capable of reporting a date and time. Therefore, the "
          "ScheduledStartTime and StartTime are reported as "
          "intervals relative to the time their values are "
          "requested." )]
   datetime TimeSubmitted;

      [Deprecated { "CIM_Job.RunMonth", "CIM_Job.RunDay", 
          "CIM_Job.RunDayOfWeek", "CIM_Job.RunStartInterval" }, 
       Write, Description ( 
          "The time that the current Job is scheduled to start. "
          "This time can be represented by the actual date and "
          "time, or an interval relative to the time that this "
          "property is requested. A value of all zeroes indicates "
          "that the Job is already executing. The property is "
          "deprecated in lieu of the more expressive scheduling "
          "properties, RunMonth, RunDay, RunDayOfWeek, and "
          "RunStartInterval." )]
   datetime ScheduledStartTime;

      [Description ( 
          "The time that the Job was actually started. This time "
          "can be represented by an actual date and time, or by an "
          "interval relative to the time that this property is "
          "requested. Note that this property is also present in "
          "the JobProcessingStatistics class. This class is "
          "necessary to capture the processing information for "
          "recurring Jobs, because only the \'last\' run time can "
          "be stored in this single-valued property." )]
   datetime StartTime;

      [Description ( 
          "The time interval that the Job has been executing or the "
          "total execution time if the Job is complete. Note that "
          "this property is also present in the "
          "JobProcessingStatistics class. This class is necessary "
          "to capture the processing information for recurring "
          "Jobs, because only the \'last\' run time can be stored "
          "in this single-valued property." )]
   datetime ElapsedTime;

      [Write, Description ( 
          "The number of times that the Job should be run. A value "
          "of 1 indicates that the Job is not recurring, while any "
          "non-zero value indicates a limit to the number of times "
          "that the Job will recur. Zero indicates that there is no "
          "limit to the number of times that the Job can be "
          "processed, but that it is terminated either after the "
          "UntilTime or by manual intervention. By default, a Job "
          "is processed once." )]
   uint32 JobRunTimes = 1;

      [Write, Description ( 
          "The month during which the Job should be processed. "
          "Specify 0 for January, 1 for February, and so on." ), 
       ValueMap { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", 
          "10", "11" }, 
       Values { "January", "February", "March", "April", "May", 
          "June", "July", "August", "September", "October", 
          "November", "December" }, 
       ModelCorrespondence { "CIM_Job.RunDay", 
          "CIM_Job.RunDayOfWeek", "CIM_Job.RunStartInterval" }]
   uint8 RunMonth;

      [Write, Description ( 
          "The day in the month on which the Job should be "
          "processed. There are two different interpretations for "
          "this property, depending on the value of DayOfWeek. In "
          "one case, RunDay defines the day-in-month on which the "
          "Job is processed. This interpretation is used when the "
          "DayOfWeek is 0. A positive or negative integer indicates "
          "whether the RunDay should be calculated from the "
          "beginning or end of the month. For example, 5 indicates "
          "the fifth day in the RunMonth and -1 indicates the last "
          "day in the RunMonth. \n"
          "\n"
          "When RunDayOfWeek is not 0, RunDay is the day-in-month "
          "on which the Job is processed, defined in conjunction "
          "with RunDayOfWeek. For example, if RunDay is 15 and "
          "RunDayOfWeek is Saturday, then the Job is processed on "
          "the first Saturday on or after the 15th day in the "
          "RunMonth (for example, the third Saturday in the month). "
          "If RunDay is 20 and RunDayOfWeek is -Saturday, then this "
          "indicates the first Saturday on or before the 20th day "
          "in the RunMonth. If RunDay is -1 and RunDayOfWeek is "
          "-Sunday, then this indicates the last Sunday in the "
          "RunMonth." ), 
       MinValue ( -31 ), 
       MaxValue ( 31 ), 
       ModelCorrespondence { "CIM_Job.RunMonth", 
          "CIM_Job.RunDayOfWeek", "CIM_Job.RunStartInterval" }]
   sint8 RunDay;

      [Write, Description ( 
          "A positive or negative integer used in conjunction with "
          "RunDay to indicate the day of the week on which the Job "
          "is processed. RunDayOfWeek is set to 0 to indicate an "
          "exact day of the month, such as March 1. A positive "
          "integer (representing Sunday, Monday, ..., Saturday) "
          "means that the day of week is found on or after the "
          "specified RunDay. A negative integer (representing "
          "-Sunday, -Monday, ..., -Saturday) means that the day of "
          "week is found on or BEFORE the RunDay." ), 
       ValueMap { "-7", "-6", "-5", "-4", "-3", "-2", "-1", "0", 
          "1", "2", "3", "4", "5", "6", "7" }, 
       Values { "-Saturday", "-Friday", "-Thursday", "-Wednesday", 
          "-Tuesday", "-Monday", "-Sunday", "ExactDayOfMonth", 
          "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", 
          "Friday", "Saturday" }, 
       ModelCorrespondence { "CIM_Job.RunMonth", "CIM_Job.RunDay", 
          "CIM_Job.RunStartInterval" }]
   sint8 RunDayOfWeek;

      [Write, Description ( 
          "The time interval after midnight when the Job should be "
          "processed. For example, \n"
          "00000000020000.000000:000 \n"
          "indicates that the Job should be run on or after two "
          "o\'clock, local time or UTC time (distinguished using "
          "the LocalOrUtcTime property." ), 
       ModelCorrespondence { "CIM_Job.RunMonth", "CIM_Job.RunDay", 
          "CIM_Job.RunDayOfWeek", "CIM_Job.RunStartInterval" }]
   datetime RunStartInterval;

      [Write, Description ( 
          "This property indicates whether the times represented in "
          "the RunStartInterval and UntilTime properties represent "
          "local times or UTC times. Time values are synchronized "
          "worldwide by using the enumeration value 2, \"UTC Time\"." ), 
       ValueMap { "1", "2" }, 
       Values { "Local Time", "UTC Time" }]
   uint16 LocalOrUtcTime;

      [Write, Description ( 
          "The time after which the Job is invalid or should be "
          "stopped. This time can be represented by an actual date "
          "and time, or by an interval relative to the time that "
          "this property is requested. A value of all nines "
          "indicates that the Job can run indefinitely." ), 
       ModelCorrespondence { "CIM_Job.LocalOrUtcTime" }]
   datetime UntilTime;

      [Write, Description ( 
          "The User who is to be notified upon the Job completion or failure."
           )]
   string Notify;

      [Description ( 
          "The User that submitted the Job, or the Service or "
          "method name that caused the job to be created." ), 
       ModelCorrespondence { "CIM_OwningJobElement" }]
   string Owner;

      [Write, Description ( 
          "Indicates the urgency or importance of execution of the "
          "Job. The lower the number, the higher the priority. Note "
          "that this property is also present in the "
          "JobProcessingStatistics class. This class is necessary "
          "to capture the setting information that would influence "
          "the results of a job." )]
   uint32 Priority;

      [Description ( 
          "The percentage of the job that has completed at the time "
          "that this value is requested. Note that this property is "
          "also present in the JobProcessingStatistics class. This "
          "class is necessary to capture the processing information "
          "for recurring Jobs, because only the \'last\' run data "
          "can be stored in this single-valued property. \n"
          "Note that the value 101 is undefined and will be not be "
          "allowed in the next major revision of the specification." ), 
       Units ( "Percent" ), 
       MinValue ( 0 ), 
       MaxValue ( 101 ), 
       PUnit ( "percent" )]
   uint16 PercentComplete;

      [Write, Description ( 
          "Indicates whether or not the job should be automatically "
          "deleted upon completion. Note that the \'completion\' of "
          "a recurring job is defined by its JobRunTimes or "
          "UntilTime properties, or when the Job is terminated by "
          "manual intervention. If this property is set to false "
          "and the job completes, then the extrinsic method "
          "DeleteInstance must be used to delete the job instead of "
          "updating this property." )]
   boolean DeleteOnCompletion;

      [Description ( 
          "A vendor-specific error code. The value must be set to "
          "zero if the Job completed without error. Note that this "
          "property is also present in the JobProcessingStatistics "
          "class. This class is necessary to capture the processing "
          "information for recurring Jobs, because only the \'last\' "
          "run error can be stored in this single-valued property." ), 
       ModelCorrespondence { "CIM_Job.ErrorDescription" }]
   uint16 ErrorCode;

      [Description ( 
          "A free-form string that contains the vendor error "
          "description. Note that this property is also present in "
          "the JobProcessingStatistics class. This class is "
          "necessary to capture the processing information for "
          "recurring Jobs, because only the \'last\' run error can "
          "be stored in this single-valued property." ), 
       ModelCorrespondence { "CIM_Job.ErrorCode" }]
   string ErrorDescription;

      [Description ( 
          "Describes the recovery action to be taken for an "
          "unsuccessfully run Job. The possible values are: \n"
          "0 = \"Unknown\", meaning it is unknown as to what "
          "recovery action to take \n"
          "1 = \"Other\", indicating that the recovery action will "
          "be specified in the OtherRecoveryAction property \n"
          "2 = \"Do Not Continue\", meaning stop the execution of "
          "the job and appropriately update its status \n"
          "3 = \"Continue With Next Job\", meaning continue with "
          "the next job in the queue \n"
          "4 = \"Re-run Job\", indicating that the job should be "
          "re-run \n"
          "5 = \"Run Recovery Job\", meaning run the Job associated "
          "using the RecoveryJob relationship. Note that the "
          "recovery Job must already be in the queue from which it "
          "will run." ), 
       ValueMap { "0", "1", "2", "3", "4", "5" }, 
       Values { "Unknown", "Other", "Do Not Continue", 
          "Continue With Next Job", "Re-run Job", "Run Recovery Job" }, 
       ModelCorrespondence { "CIM_Job.OtherRecoveryAction" }]
   uint16 RecoveryAction;

      [Description ( 
          "A string describing the recovery action when the "
          "RecoveryAction property of the instance is 1 (\"Other\")." ), 
       ModelCorrespondence { "CIM_Job.RecoveryAction" }]
   string OtherRecoveryAction;


      [Deprecated { "CIM_ConcreteJob.RequestStateChange()" }, 
       Description ( 
          "KillJob is being deprecated because there is no "
          "distinction made between an orderly shutdown and an "
          "immediate kill. CIM_ConcreteJob.RequestStateChange() "
          "provides \'Terminate\' and \'Kill\' options to allow "
          "this distinction. \n"
          "A method to kill this job and any underlying processes, "
          "and to remove any \'dangling\' associations." ), 
       ValueMap { "0", "1", "2", "3", "4", "6", "7", "..", 
          "32768..65535" }, 
       Values { "Success", "Not Supported", "Unknown", "Timeout", 
          "Failed", "Access Denied", "Not Found", "DMTF Reserved", 
          "Vendor Specific" }]
   uint32 KillJob(
         [IN, Description ( 
             "Indicates whether or not the Job should be "
             "automatically deleted upon termination. This "
             "parameter takes precedence over the property, "
             "DeleteOnCompletion." )]
      boolean DeleteOnKill);

};
