public DeployBatchRequest UpdateBatchDeploymentStatus(string deployBatchRequestId, EnumDeployStatus status, Exception err = null, string statusMessage = null, bool addToMessageHistory = true)
 {
     lock(_fileLocker)
     {
         var batchRequest = _deploymentRun.DeployBatchRequest;
         var oldStatus = batchRequest.Status;
         batchRequest.Status = status;
         switch (status)
         {
             case EnumDeployStatus.Success:
             case EnumDeployStatus.Error:
                 batchRequest.CompleteDateTimeUtc = DateTime.UtcNow;
                 break;
             case EnumDeployStatus.InProcess:
                 batchRequest.ResumeRequested = false;
                 break;
             case EnumDeployStatus.Cancelled:
                 batchRequest.CancelRequested = false;
                 break;
         }
         if (err != null)
         {
             batchRequest.ErrorDetails = err.ToString();
         }
         if (addToMessageHistory)
         {
             batchRequest.MessageList.Add(statusMessage);
         }
         batchRequest.LastStatusMessage = statusMessage;
         batchRequest.UpdatedDateTimeUtc = DateTime.UtcNow;
         batchRequest.UpdatedByUserName = _userIdentity.UserName;
         this.SaveRunToFile();
     }
     return _deploymentRun.DeployBatchRequest;
 }
 public void SetStatus(EnumDeployStatus status)
 {
     this.StatusDisplayValue = EnumHelper.GetDisplayValue(status);
     switch(status)
     {
         case EnumDeployStatus.NotStarted:
             this.StatusIconImage = Properties.Resources.StatusAnnotations_Help_and_inconclusive_32xSM_color;
             break;
         case EnumDeployStatus.InProcess:
             this.StatusIconImage = Properties.Resources.StatusAnnotations_Play_32xSM_color;
             break;
         case EnumDeployStatus.Error:
             this.StatusIconImage = Properties.Resources.StatusAnnotations_Critical_32xSM_color;
             break;
         case EnumDeployStatus.Success:
             this.StatusIconImage = Properties.Resources.StatusAnnotations_Complete_and_ok_32xSM_color;
             break;
         default:
             this.StatusIconImage = Properties.Resources.StatusAnnotations_Alert_32xSM_color;
             break;
     }
 }
        public DeployBatchRequest CreateBatchRequest(List<DeployBatchRequestItem> itemList, EnumDeployStatus status, string deploymentLabel)
        {
            if(itemList == null || itemList.Count == 0)
            {
                throw new ArgumentNullException("itemList");
            }
            foreach (var item in itemList)
            {
                if(string.IsNullOrEmpty(item.Id))
                {
                    item.Id = Guid.NewGuid().ToString();
                }
            }
            if(status == EnumDeployStatus.Unknown)
            {
                status = EnumDeployStatus.NotStarted;
            }
            string message = string.Format("{0} created deployment request with status of {1} at {2} UTC.", _userIdentity.UserName, EnumHelper.GetDisplayValue(status), DateTime.UtcNow);
            var request = new DeployBatchRequest
            {
                Id = Guid.NewGuid().ToString(),
                SubmittedDateTimeUtc = DateTime.UtcNow,
                SubmittedByUserName = _userIdentity.UserName,
                DeploymentLabel = deploymentLabel,
                ItemList = itemList,
                LastStatusMessage = message,
                Status = status,
                CreatedDateTimeUtc = DateTime.UtcNow,
                CreatedByUserName = _userIdentity.UserName,
                UpdatedDateTimeUtc = DateTime.UtcNow,
                UpdatedByUserName = _userIdentity.UserName

            };
            request.MessageList.Add(message);
            _documentSession.StoreSaveEvict(request);
            return request;
        }
		public DeployBatchRequest CreateDeployBatchRequest(List<DeployBatchRequestItem> itemList, EnumDeployStatus initialStatus, string deploymentLabel)
		{
            switch (initialStatus)
            {
                case EnumDeployStatus.Unknown:
                    initialStatus = EnumDeployStatus.NotStarted;
                    break;
                case EnumDeployStatus.NotStarted:
                case EnumDeployStatus.Requested:
                case EnumDeployStatus.OfflineRequested:
                    //OK
                    break;
                case EnumDeployStatus.Error:
                case EnumDeployStatus.InProcess:
                case EnumDeployStatus.Success:
                case EnumDeployStatus.Warning:
                    throw new ArgumentException(EnumHelper.GetDisplayValue(initialStatus) + " is not a valid initial status for a batch deployment request");
                default:
                    throw new UnknownEnumValueException(initialStatus);
            }
            var request = _deployRepository.CreateBatchRequest(itemList, initialStatus, deploymentLabel);
			_projectNotifier.SendDeployRequestedNotification(request);
			return request;
		}
 public DeployBatchRequest RequeueDeployment(string deployBatchRequestId, EnumDeployStatus enumDeployStatus, string statusMessage)
 {
     throw new NotSupportedException();
 }
 public DeployBatchRequest UpdateBatchDeploymentStatus(string deployBatchRequestId, EnumDeployStatus status, Exception err = null, string statusMessage = null, bool addToMessageHistory = true)
 {
     return _offlineDataProvider.UpdateBatchDeploymentStatus(deployBatchRequestId, status, err, statusMessage, addToMessageHistory);
 }
 public DeployBatchRequest CreateBatchRequest(List<DeployBatchRequestItem> itemList, EnumDeployStatus status, string deploymentLabel)
 {
     throw new NotSupportedException();
 }
		private string BuildStatusChangeMessage(EnumDeployStatus newStatus, string userMessage)
		{
			string message = string.Format("{0} changed status to {1} at {2} UTC.", _userIdentity.UserName, EnumHelper.GetDisplayValue(newStatus), DateTime.UtcNow);
			if (!string.IsNullOrEmpty(userMessage) && userMessage != "null")
			{
				message += "  Notes: " + userMessage;
			}
			return message;
		}
		public DeployBatchRequest UpdateDeployBatchStatus(string deployBatchRequestId, EnumDeployStatus newStatus, string userMessage)
		{
			var item = _deployRepository.GetBatchRequest(deployBatchRequestId);
			_validator.ValidateStatusTransition(item.Status, newStatus);
			switch(newStatus)
			{
				case EnumDeployStatus.Approved:
					_projectNotifier.SendDeployApprovedNotification(item);
					break;
				case EnumDeployStatus.Rejected:
					_projectNotifier.SendDeployRejectedNotification(item);
					break;
			}
			string statusMessage = BuildStatusChangeMessage(newStatus, userMessage);
			return _deployRepository.UpdateBatchDeploymentStatus(deployBatchRequestId, newStatus, statusMessage:statusMessage);
		}
 public DeployState UpdateDeploymentStatus(string deployStateId, EnumDeployStatus status, Exception err = null)
 {
     var state = _documentSession.LoadEnsure<DeployState>(deployStateId);
     if (state.MessageList == null || state.MessageList.Count == 0)
     {
         _documentSession.Advanced.Evict(state);
         state = _documentSession.LoadEnsure<DeployState>(deployStateId);
     }
     state.Status = status;
     switch (status)
     {
         case EnumDeployStatus.InProcess:
             if(state.Status == EnumDeployStatus.NotStarted || state.Status == EnumDeployStatus.Cancelled 
                     || state.DeploymentStartedDateTimeUtc.HasValue)
             {
                 state.DeploymentStartedDateTimeUtc = DateTime.UtcNow;
             }
             break;
         case EnumDeployStatus.Success:
         case EnumDeployStatus.Error:
             if(!state.DeploymentCompleteDateTimeUtc.HasValue)
             {
                 state.DeploymentCompleteDateTimeUtc = DateTime.UtcNow;
             }
             break;
     }
     if (err != null)
     {
         state.ErrorDetails = err.ToString();
     }
     state.UpdatedDateTimeUtc = DateTime.UtcNow;
     state.UpdatedByUserName = _userIdentity.UserName;
     this._documentSession.SaveEvict(state);
     return state;
 }
 public DeployState UpdateDeploymentStatus(string deployStateId, EnumDeployStatus status, Exception err = null)
 {
     var state = _offlineDataProvider.GetDeployState(deployStateId);
     state.Status = status;
     if (err != null)
     {
         var message = new DeployStateMessage
         {
             Id = Guid.NewGuid().ToString(),
             DateTimeUtc = DateTime.UtcNow,
             DeployStateId = state.Id,
             Message = "ERROR: " + err.ToString(),
             MessageUserName = _userIdentity.UserName
         };
         state.MessageList.Add(message);
         state.ErrorDetails = err.ToString();
     }
     state.UpdatedDateTimeUtc = DateTime.UtcNow;
     state.UpdatedByUserName = _userIdentity.UserName;
     _offlineDataProvider.SaveDeployState(state);
     return state;
 }
 public DeployState UpdateDeploymentStatus(string deployStateId, EnumDeployStatus status, Exception err = null)
 {
     VerifyDeployStateExists(deployStateId);
     using(var db = _sqlConnectionInfo.GetDB())
     {
         var sql = PetaPoco.Sql.Builder
                         .Append("UPDATE DeployState")
                         .Append("SET EnumDeployStatusID=@0, UpdatedByUserName=@1, UpdatedDateTimeUtc=@2", (int)status, _userIdentity.UserName, DateTime.UtcNow);
         if(err != null)
         {
             sql = sql.Append(", ErrorDetails=@0", err.ToString());
         }
         switch (status)
         {
             case EnumDeployStatus.Success:
             case EnumDeployStatus.Error:
                 sql = sql.Append(", DeploymentCompleteDateTimeUtc=ISNULL(DeploymentCompleteDateTimeUtc, @0)", DateTime.UtcNow);
                 break;
         }
         sql = sql.Append("WHERE ID=@0", deployStateId);
         db.Execute(sql);
     }
     return GetDeployState(deployStateId);
 }
		public void ValidateStatusTransition(EnumDeployStatus oldStatus, EnumDeployStatus newStatus)
		{
			//OK
		}
		public DeployBatchRequest RequeueDeployment(string deployBatchRequestId, EnumDeployStatus newStatus, string userMessage)
		{
			var batchRequest = _documentSession.LoadEnsure<DeployBatchRequest>(deployBatchRequestId);
            string statusMessage = string.Format("{0} requested deployment to be requeued at {1} UTC", _userIdentity.UserName, DateTime.UtcNow);
            if (!string.IsNullOrEmpty(userMessage))
            {
                statusMessage += ". Notes: " + userMessage;
            }
            batchRequest.Status = newStatus;
			batchRequest.StartedDateTimeUtc = null;
			batchRequest.LastStatusMessage = statusMessage;
			batchRequest.UpdatedDateTimeUtc = DateTime.UtcNow;
			batchRequest.UpdatedByUserName = _userIdentity.UserName;
            batchRequest.MessageList.Add(batchRequest.LastStatusMessage);
			this._documentSession.SaveEvict(batchRequest);
			return batchRequest;
		}