Ejemplo n.º 1
0
        /// <summary>
        /// Inserts a WebDeleteStudy request for a specific Study
        /// </summary>
        /// <param name="updateContext">The database context to insert under.</param>
        /// <param name="location">The StudyStorageLocation of the study to delete.</param>
        /// <param name="requestDescription">A description of the reason for the delete.</param>
        /// <param name="externalRequest">An optional external request that triggered this deletion</param>
        /// <returns>The inserted WorkQueue entry</returns>
        public static WorkQueue InsertDeleteStudyRequest(IUpdateContext updateContext, StudyStorageLocation location, string requestDescription, ExternalRequestQueue externalRequest = null)
        {
            var extendedData = new WebDeleteStudyLevelQueueData
            {
                Level    = DeletionLevel.Study,
                Reason   = requestDescription,
                UserId   = ServerHelper.CurrentUserId,
                UserName = ServerHelper.CurrentUserName
            };

            var insertParms = new InsertWorkQueueParameters
            {
                WorkQueueTypeEnum  = WorkQueueTypeEnum.WebDeleteStudy,
                ServerPartitionKey = location.ServerPartitionKey,
                StudyStorageKey    = location.Key,
                ScheduledTime      = Platform.Time,
                WorkQueueData      = XmlUtils.SerializeAsXmlDoc(extendedData)
            };

            if (externalRequest != null)
            {
                insertParms.ExternalRequestQueueKey = externalRequest.Key;
            }

            var insertWorkQueue = updateContext.GetBroker <IInsertWorkQueue>();

            return(insertWorkQueue.FindOne(insertParms));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Inserts a WebDeleteStudy request for a specific Study
        /// </summary>
        /// <param name="updateContext">The database context to insert under.</param>
        /// <param name="location">The StudyStorageLocation of the study to delete.</param>
        /// <param name="requestDescription">A description of the reason for the delete.</param>
        /// <param name="externalRequest">An optional external request that triggered this deletion</param>
        /// <returns>The inserted WorkQueue entry</returns>
        public static WorkQueue InsertDeleteStudyRequest(IUpdateContext updateContext, StudyStorageLocation location, string requestDescription, ExternalRequestQueue externalRequest = null)
        {
            var extendedData = new WebDeleteStudyLevelQueueData
            {
                Level = DeletionLevel.Study,
                Reason = requestDescription,
                UserId = ServerHelper.CurrentUserId,
                UserName = ServerHelper.CurrentUserName
            };

            var insertParms = new InsertWorkQueueParameters
                {
                    WorkQueueTypeEnum = WorkQueueTypeEnum.WebDeleteStudy,
                    ServerPartitionKey = location.ServerPartitionKey,
                    StudyStorageKey = location.Key,
                    ScheduledTime = Platform.Time,
                    WorkQueueData = XmlUtils.SerializeAsXmlDoc(extendedData)
                };

            if (externalRequest != null)
                insertParms.ExternalRequestQueueKey = externalRequest.Key;
   
            var insertWorkQueue = updateContext.GetBroker<IInsertWorkQueue>();

            return insertWorkQueue.FindOne(insertParms);
        }
Ejemplo n.º 3
0
		/// <summary>
		/// Delete a Study.
		/// </summary>
		public void DeleteStudy(ServerEntityKey studyKey, string reason)
        {
			StudySummary study = StudySummaryAssembler.CreateStudySummary(HttpContextData.Current.ReadContext, Study.Load(HttpContextData.Current.ReadContext, studyKey));
			if (study.IsReconcileRequired)
			{
				throw new ApplicationException(
					String.Format("Deleting the study is not allowed at this time : there are items to be reconciled."));

				// NOTE: another check will occur when the delete is actually processed
			}
			

			using (IUpdateContext ctx = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
			{
                LockStudyParameters lockParms = new LockStudyParameters
                                                	{
                                                		QueueStudyStateEnum = QueueStudyStateEnum.WebDeleteScheduled,
                                                		StudyStorageKey = study.TheStudyStorage.Key
                                                	};
				ILockStudy broker = ctx.GetBroker<ILockStudy>();
				broker.Execute(lockParms);
				if (!lockParms.Successful)
				{
				    throw new ApplicationException(String.Format("Unable to lock the study : {0}", lockParms.FailureReason));
				}
				

				InsertWorkQueueParameters insertParms = new InsertWorkQueueParameters
				                                        	{
				                                        		WorkQueueTypeEnum = WorkQueueTypeEnum.WebDeleteStudy,
				                                        		ServerPartitionKey = study.ThePartition.Key,
				                                        		StudyStorageKey = study.TheStudyStorage.Key,
				                                        		ScheduledTime = Platform.Time
				                                        	};

				WebDeleteStudyLevelQueueData extendedData = new WebDeleteStudyLevelQueueData
			                                                	{
			                                                		Level = DeletionLevel.Study,
			                                                		Reason = reason,
			                                                		UserId = ServerHelper.CurrentUserId,
			                                                		UserName = ServerHelper.CurrentUserName
			                                                	};
				insertParms.WorkQueueData = XmlUtils.SerializeAsXmlDoc(extendedData);
				IInsertWorkQueue insertWorkQueue = ctx.GetBroker<IInsertWorkQueue>();
				
                if (insertWorkQueue.FindOne(insertParms)==null)
                {
                    throw new ApplicationException("DeleteStudy failed");
                }


				ctx.Commit();
			}
        }