Beispiel #1
0
        /// <summary>
        /// Creates a root document in the CDA package.
        /// </summary>
        /// <param name="fileContent">The content of the file.</param>
        public void CreateRootDocument(byte[] fileContent)
        {
            // Validation
            var vb = new ValidationBuilder();

            vb.ArgumentRequiredCheck("fileContent", fileContent);

            if (vb.Messages.Count > 0)
            {
                throw new ValidationException(vb.Messages);
            }

            var file = new CDAPackageFile();

            // Indicate that this is the root document
            file.CDAPackageFileType = CDAPackageFile.FileType.RootDocument;

            // Set file content
            file.FileContent = fileContent;

            // Known fields
            file.FileName = "CDA_ROOT.XML";

            CDADocumentRoot = file;
        }
Beispiel #2
0
        /// <summary>
        /// Adds an attachment to the CDA Package.
        /// </summary>
        /// <param name="fileName">The name of the file.</param>
        /// <param name="fileContent">The content of the file.</param>
        public void AddDocumentAttachment(
            string fileName,
            byte[] fileContent)
        {
            // Validation
            var vb = new ValidationBuilder();

            vb.ArgumentRequiredCheck("fileName", fileName);
            vb.ArgumentRequiredCheck("fileContent", fileContent);

            if (vb.Messages.Count > 0)
            {
                throw new ValidationException(vb.Messages);
            }

            var file = new CDAPackageFile();

            // Indicate that this is a document attachment
            file.CDAPackageFileType = CDAPackageFile.FileType.Attachment;

            // User specified fields
            file.FileName    = fileName;
            file.FileContent = fileContent;

            if (CDADocumentAttachments == null)
            {
                CDADocumentAttachments = new List <CDAPackageFile>();
            }

            CDADocumentAttachments.Add(file);
        }
Beispiel #3
0
        /// <summary>
        /// Extracts a CDA package zip file without verifying the signature.
        /// </summary>
        /// <param name="package">A byte array of a CDA package zip file.</param>
        /// <returns>A CDAPackage instance constructed from the CDA package zip file.</returns>
        public static CDAPackage ExtractAndIgnoreSignatureVerification(byte[] package)
        {
            CDAPackage extractedPackage = null;

            // Validation on package
            Validation.ValidateArgumentRequired("package", package);

            // Get zip entries in zip package
            var inputStream = new MemoryStream(package);
            Dictionary <string, byte[]> entries = GetZipEntriesFromZipStream(new ZipArchive(inputStream));

            // Check to ensure that there is only one submission set folder
            string submissionPath = null;

            foreach (var name in entries.Keys)
            {
                var m = Regex.Match(name, @"^([^/\\]+[/\\][^/\\]+[/\\])[^/\\]+$", RegexOptions.IgnoreCase);
                if (m.Success)
                {
                    if (submissionPath == null)
                    {
                        submissionPath = m.Groups[1].Value;
                    }
                    else if (submissionPath != m.Groups[1].Value)
                    {
                        throw new ArgumentException("More than one submission set folder found.");
                    }
                }
            }

            // Get root document
            var rootDoc = entries.FirstOrDefault(a => Regex.IsMatch(a.Key, @"^[^/\\]+[/\\][^/\\]+[/\\]CDA_ROOT.XML$", RegexOptions.IgnoreCase));

            if (string.IsNullOrEmpty(rootDoc.Key))
            {
                throw new ArgumentException("CDA_ROOT.XML not found.");
            }

            // Get submission set folder
            string submissionSetPath = Regex.Match(rootDoc.Key, @"^([^/\\]+[/\\][^/\\]+[/\\])CDA_ROOT.XML$", RegexOptions.IgnoreCase).Groups[1].Value;

            var newPackage = new CDAPackage();

            newPackage.CDADocumentRoot = new CDAPackageFile();
            newPackage.CDADocumentRoot.CDAPackageFileType = CDAPackageFile.FileType.RootDocument;
            newPackage.CDADocumentRoot.FileName           = rootDoc.Key.Replace(submissionPath, "");
            newPackage.CDADocumentRoot.FileContent        = rootDoc.Value;

            foreach (var entry in entries)
            {
                if (entry.Key == rootDoc.Key)
                {
                    continue;
                }
                else if (entry.Key.Equals(submissionPath + "CDA_SIGN.XML", StringComparison.InvariantCultureIgnoreCase))
                {
                    var signature = new CDAPackageFile();
                    signature.CDAPackageFileType = CDAPackageFile.FileType.Signature;
                    signature.FileName           = entry.Key.Replace(submissionPath, "");
                    signature.FileContent        = entry.Value;

                    newPackage.CDASignature = signature;
                }
                else if (entry.Key.StartsWith(submissionPath, true, CultureInfo.InvariantCulture))
                {
                    var attachment = new CDAPackageFile();
                    attachment.CDAPackageFileType = CDAPackageFile.FileType.Attachment;
                    attachment.FileName           = entry.Key.Replace(submissionPath, "");
                    attachment.FileContent        = entry.Value;

                    if (newPackage.CDADocumentAttachments == null)
                    {
                        newPackage.CDADocumentAttachments = new List <CDAPackageFile>();
                    }

                    newPackage.CDADocumentAttachments.Add(attachment);
                }
            }

            extractedPackage = newPackage;

            return(extractedPackage);
        }