protected override void OnExecute(CommandProcessor theProcessor, IUpdateContext updateContext)
        {
            var broker = updateContext.GetBroker <IInsertDuplicateSopReceivedQueue>();
            var parms  = new InsertDuplicateSopReceivedQueueParameters
            {
                GroupID            = _groupId,
                ServerPartitionKey = _studyLocation.ServerPartitionKey,
                StudyStorageKey    = _studyLocation.Key,
                StudyInstanceUid   = _file.DataSet[DicomTags.StudyInstanceUid].ToString(),
                SeriesDescription  = _file.DataSet[DicomTags.SeriesDescription].ToString(),
                SeriesInstanceUid  = _file.DataSet[DicomTags.SeriesInstanceUid].ToString(),
                SopInstanceUid     = _file.MediaStorageSopInstanceUid
            };
            ReconcileStudyQueueDescription queueDesc = CreateQueueEntryDescription(_file);

            parms.Description = queueDesc != null?queueDesc.ToString() : String.Empty;

            var queueData = new DuplicateSIQQueueData
            {
                StoragePath = _duplicateStoragePath,
                Details     = new ImageSetDetails(_file.DataSet),
                TimeStamp   = Platform.Time
            };

            if (_reasons != null && _reasons.Count > 0)
            {
                queueData.ComparisonResults = _reasons;
            }

            var imageSet = new ImageSetDescriptor(_file.DataSet);

            parms.StudyData       = XmlUtils.SerializeAsXmlDoc(imageSet);
            parms.Details         = XmlUtils.SerializeAsXmlDoc(queueData);
            parms.UidRelativePath = _relativePath;
            IList <DuplicateSopReceivedQueue> entries = broker.Find(parms);

            Platform.CheckForNullReference(entries, "entries");
            Platform.CheckTrue(entries.Count == 1, "entries.Count==1");

            DuplicateSopReceivedQueue queueEntry = entries[0];

            var data = XmlUtils.Deserialize <DuplicateSIQQueueData>(queueEntry.Details);

            data.Details.InsertFile(_file);

            queueEntry.Details = XmlUtils.SerializeAsXmlDoc(data);

            var siqBroker = updateContext.GetBroker <IStudyIntegrityQueueEntityBroker>();

            if (!siqBroker.Update(queueEntry))
            {
                throw new ApplicationException("Unable to update duplicate queue entry");
            }
        }
        private string GetSIQItemStorageFolder(StudyIntegrityQueue queue)
        {
            if (queue.StudyIntegrityReasonEnum.Equals(StudyIntegrityReasonEnum.InconsistentData))
            {
                ReconcileStudyWorkQueueData data = XmlUtils.Deserialize <ReconcileStudyWorkQueueData>(queue.Details);
                DirectoryInfo dir = new DirectoryInfo(data.StoragePath);
                return(dir.Parent.FullName);
            }

            if (queue.StudyIntegrityReasonEnum.Equals(StudyIntegrityReasonEnum.Duplicate))
            {
                DuplicateSIQQueueData data = XmlUtils.Deserialize <DuplicateSIQQueueData>(queue.Details);
                DirectoryInfo         dir  = new DirectoryInfo(data.StoragePath);
                return(dir.Parent.FullName);
            }

            return(null);
        }