public ProcessTimedOut(string tenantId, ProcessId processId, int totalRetriesPermitted, int retryCount)
        {
            this.TenantId = tenantId;
            this.ProcessId = processId;
            this.TotalRetriesPermitted = totalRetriesPermitted;
            this.RetryCount = retryCount;

            this.EventVersion = 1;
            this.OccurredOn = DateTime.Now;
        }
        protected AbstractProcess(string tenantId, ProcessId processId, string description)
        {
            AssertionConcern.NotNull(processId, "Process id must be provided.");
            AssertionConcern.NotEmpty(tenantId, "Tenant id must be provided.");

            this.TenantId = tenantId;
            this.ProcessId = processId;
            this.Description = description;

            this.StartTime = DateTime.Now;
            this.ProcessCompletionType = ProcessCompletionType.NotCompleted;
        }
        public TimeConstrainedProcessTracker(string tenantId, ProcessId processId, string description,
            DateTime originalStartTime, long allowableDuration, int totalRetriesPermitted,
            string processTimedOutEventType)
        {
            AssertionConcern.NotEmpty(tenantId, "TenantId is required.");
                AssertionConcern.NotNull(processId, "ProcessId is required.");
                AssertionConcern.NotEmpty(description, "Description is required.");
                AssertionConcern.Length(description, 1, 100, "Description must be 1 to 100 characters in length.");
                AssertionConcern.True(allowableDuration > 0, "The allowable duration must be greater than zero.");
                AssertionConcern.True(totalRetriesPermitted > 0, "Total retries must be greater than or equal to zero.");
                AssertionConcern.NotEmpty(processTimedOutEventType, "ProcessTimedOutEventType is required.");

            this.TenantId = tenantId;
            this.ProcessId = processId;
            this.Description = description;
            this.AllowableDuration = allowableDuration;
            this.TotalRetriesPermitted = totalRetriesPermitted;
            this.ProcessTimedOutEventType = processTimedOutEventType;

            this.ProcessInformedOfTimeout = false;
            this.TimeConstrainedProcessTrackerId = -1L;

            this.SetTimeoutOccursOn(originalStartTime.Ticks + allowableDuration);
        }
 public ProductDiscussionRequestTimedOut(string tenantId, ProcessId processId, int totalRetriesPermitted,
     int retryCount)
     : base(tenantId, processId, totalRetriesPermitted, retryCount)
 {
 }
 protected AbstractProcess(string tenantId, ProcessId processId, string description, long allowableDuration, int totalRetriesPermitted)
     : this(tenantId, processId, description, allowableDuration)
 {
     this.TotalRetriesPermitted = totalRetriesPermitted;
 }
 protected AbstractProcess(string tenantId, ProcessId processId, string description, long allowableDuration)
     : this(tenantId, processId, description)
 {
     AssertionConcern.True(allowableDuration > 0, "The allowable duration must be greater than zero.");
     this.AllowableDuration = allowableDuration;
 }
 public TestableTimeConstrainedProcess(string tenantId, ProcessId processId, string description,
     long allowableDuration)
     : base(tenantId, processId, description, allowableDuration)
 {
 }
 public TestableTimeConstrainedProcessTimedOut(string tenantId, ProcessId processId, int totalRetriesPermitted,
     int retryCount)
     : base(tenantId, processId, totalRetriesPermitted, retryCount)
 {
 }
 public TestableTimeConstrainedProcessTimedOut(string tenantId, ProcessId processId)
     : base(tenantId, processId, 0, 0)
 {
 }