public void CheckRemovals()
        {
            var ds = new DicomDataset(new DicomShortString(DicomTag.PerformedProcedureStepID, "123"));

            var cp = new ConfidentialityProfile();

            var anonymizer = new AnonymizeEngine(Mode.blank);

            anonymizer.RegisterHandler(cp);
            var nds_blank = anonymizer.Anonymize(ds);

            Assert.IsFalse(nds_blank.Contains(DicomTag.PerformedProcedureStepID));
            Assert.AreEqual("123", ds.GetSingleValue <string>(DicomTag.PerformedProcedureStepID));

            anonymizer = new AnonymizeEngine(Mode.clone);
            anonymizer.RegisterHandler(cp);
            var nds_clone = anonymizer.Anonymize(ds);

            Assert.IsFalse(nds_clone.Contains(DicomTag.PerformedProcedureStepID));
            Assert.AreEqual("123", ds.GetSingleValue <string>(DicomTag.PerformedProcedureStepID));

            anonymizer = new AnonymizeEngine(Mode.inplace);
            anonymizer.RegisterHandler(cp);
            anonymizer.Anonymize(ds);
            Assert.IsFalse(ds.Contains(DicomTag.PerformedProcedureStepID));
        }
        public void CheckWhitelistTags()
        {
            var cp = new ConfidentialityProfile(SecurityProfileOptions.BasicProfile | SecurityProfileOptions.RetainUIDs);

            var ds = new DicomDataset(new DicomUniqueIdentifier(DicomTag.RequestedSOPInstanceUID, "123"));

            var anonymizer = new AnonymizeEngine(Mode.blank);

            anonymizer.RegisterHandler(cp);
            var nds_blank = anonymizer.Anonymize(ds);

            Assert.AreEqual("123", ds.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));
            Assert.AreEqual("123", nds_blank.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));

            anonymizer = new AnonymizeEngine(Mode.clone);
            anonymizer.RegisterHandler(cp);
            var nds_clone = anonymizer.Anonymize(ds);

            Assert.AreEqual("123", ds.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));
            Assert.AreEqual("123", nds_clone.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));

            anonymizer = new AnonymizeEngine(Mode.inplace);
            anonymizer.RegisterHandler(cp);
            anonymizer.Anonymize(ds);
            Assert.AreEqual("123", ds.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));
        }
        public void IgnoreNullReturnsInActions()
        {
            var anon = new AnonymizeEngine(Mode.inplace);
            var th   = new TestHandler(null, null);

            anon.RegisterHandler(th);
            anon.ForceRegisterHandler(th);
        }
        /// <summary>
        /// Anonymizes a single Dicom file.
        /// </summary>
        /// <param name="dicomFile">The Dicom file to anonymize.</param>
        /// <param name="anonymisationEngine">The anonymisation engine.</param>
        /// <returns>The aonymized Dicom file.</returns>
        private static DicomFile AnonymizeDicomFile(DicomFile dicomFile, AnonymizeEngine anonymisationEngine)
        {
            if (dicomFile == null)
            {
                throw new ArgumentNullException(nameof(dicomFile));
            }

            return(anonymisationEngine.Anonymize(dicomFile));
        }
        /// <summary>
        /// Gets the anonymisation engine for the input protocol. If the input protocol is null we will fallback
        /// to using the segmentation service anonymisation protocol.
        /// </summary>
        /// <param name="anonymisationProtocolId">The anonymisation protocol unqiue identifier.</param>
        /// <param name="anonymisationProtocol">The anonymisation protocol.</param>
        /// <returns>The anonymisation engine.</returns>
        private static AnonymizeEngine GetAnonymisationEngine(Guid anonymisationProtocolId, IEnumerable <DicomTagAnonymisation> anonymisationProtocol)
        {
            var anonymisationEngine = new AnonymizeEngine(Mode.blank);
            var tagHandler          = new AnonymisationTagHandler(anonymisationProtocolId, anonymisationProtocol);

            anonymisationEngine.RegisterHandler(tagHandler);

            Trace.TraceInformation(string.Join(Environment.NewLine, anonymisationEngine.ReportRegisteredHandlers()));

            return(anonymisationEngine);
        }
        public void TestDescriptionIsRequired()
        {
            var      anon = new AnonymizeEngine(Mode.clone);
            AnonFunc f    = (o, s, i) => { return(null); };
            var      th   = new TestHandler(new Dictionary <DicomTag, AnonFunc>()
            {
                { DicomTag.SOPInstanceUID, f }
            }, null);

            anon.RegisterHandler(th);
        }
        public void RegistreredHandlersReport()
        {
            var anon = new AnonymizeEngine(Mode.clone);
            var cp   = new ConfidentialityProfile();

            anon.RegisterHandler(cp);

            var report = anon.ReportRegisteredHandlers();

            Assert.AreEqual(336, report.Count);
        }
        public void CheckEmptyStringComparison()
        {
            var engine = new AnonymizeEngine(Mode.clone);

            var profileOpts = SecurityProfileOptions.BasicProfile
                              | SecurityProfileOptions.RetainLongModifDates
                              | SecurityProfileOptions.CleanDesc;

            var cp = new ConfidentialityProfile(profileOpts);

            engine.RegisterHandler(cp);
        }
        public void AnonymizeInPlace_Dataset_PatientDataEmpty()
        {
            var dataset = DicomFile.Open(@"TestData/CT1_J2KI").Dataset;

            var anonymizer = new AnonymizeEngine(Mode.inplace);
            var cp         = new ConfidentialityProfile();

            anonymizer.RegisterHandler(cp);

            anonymizer.Anonymize(dataset);

            Assert.AreEqual(0, dataset.GetValues <string>(DicomTag.PatientName).Length);
            Assert.AreEqual(0, dataset.GetValues <string>(DicomTag.PatientID).Length);
            Assert.AreEqual(0, dataset.GetValues <string>(DicomTag.PatientSex).Length);
        }
        public void Anonymize_Dataset_OriginalDatasetNotModified()
        {
            var dataset  = DicomFile.Open(@"TestData/CT-MONO2-16-ankle").Dataset;
            var expected = dataset.GetSingleValue <DicomUID>(DicomTag.StudyInstanceUID);

            var anonymizer = new AnonymizeEngine(Mode.clone);
            var cp         = new ConfidentialityProfile();

            anonymizer.RegisterHandler(cp);

            var newDataset = anonymizer.Anonymize(dataset);

            var actual    = dataset.GetSingleValue <DicomUID>(DicomTag.StudyInstanceUID);
            var actualNew = newDataset.GetSingleValue <DicomUID>(DicomTag.StudyInstanceUID);

            Assert.AreEqual(expected, actual);
            Assert.AreNotEqual(expected, actualNew);
        }
        public void AnonymizeInPlace_File_ImplementationVersionNameNotMaintained()
        {
            var file     = DicomFile.Open(@"TestData/CT1_J2KI");
            var expected = file.FileMetaInfo.ImplementationVersionName;

            Assert.IsFalse(string.IsNullOrEmpty(expected));

            var anonymizer = new AnonymizeEngine(Mode.inplace);
            var cp         = new ConfidentialityProfile();

            anonymizer.RegisterHandler(cp);

            file = anonymizer.Anonymize(file);

            var actual = file.FileMetaInfo.ImplementationVersionName;

            Assert.IsNull(actual);
        }
        public void AnonymizeInPlace_File_SopInstanceUidTransferredToMetaInfo()
        {
            var file = DicomFile.Open(@"TestData/CT1_J2KI");
            var old  = file.Dataset.GetSingleValue <DicomUID>(DicomTag.SOPInstanceUID);

            var anonymizer = new AnonymizeEngine(Mode.inplace);
            var cp         = new ConfidentialityProfile();

            anonymizer.RegisterHandler(cp);

            file = anonymizer.Anonymize(file);

            var expected = file.Dataset.GetSingleValue <DicomUID>(DicomTag.SOPInstanceUID);
            var actual   = file.FileMetaInfo.MediaStorageSOPInstanceUID;

            Assert.AreNotEqual(expected, old);
            Assert.AreEqual(expected, actual);
        }
        public void CheckThereIsNoGlobalCachedState()
        {
            var anonymizer = new AnonymizeEngine(Mode.inplace);
            var cp         = new ConfidentialityProfile(SecurityProfileOptions.BasicProfile);

            anonymizer.RegisterHandler(cp);

            var ds = new DicomDataset(new DicomUniqueIdentifier(DicomTag.RequestedSOPInstanceUID, "123"));

            anonymizer.Anonymize(ds);
            Assert.AreNotEqual("123", ds.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));

            cp = new ConfidentialityProfile(SecurityProfileOptions.BasicProfile | SecurityProfileOptions.RetainUIDs);
            anonymizer.ForceRegisterHandler(cp);

            ds = new DicomDataset(new DicomUniqueIdentifier(DicomTag.RequestedSOPInstanceUID, "123"));

            anonymizer.Anonymize(ds);
            Assert.AreEqual("123", ds.GetSingleValue <string>(DicomTag.RequestedSOPInstanceUID));
        }