/// <summary> /// Copy Image Files /// </summary> /// <param name="documentDetail">documentDetail</param> /// <param name="errorMessage">errorMessage</param> /// <returns></returns> private bool CopyImageFiles(ExportDocumentDetail documentDetail, out string errorMessage) { #region assertion documentDetail.ShouldNotBe(null); #endregion var result = true; var imageErrorBuilder = new StringBuilder(); try { var pageCount = 0; if (documentDetail.ImageFiles != null && documentDetail.ImageFiles.Count > 0) { var imageFieldId = DocumentBO.GetFieldIdByNameForExportJob(_dataset, _fieldImageFileName, false); var fieldValue = DocumentBO.GetFieldValueForExportJob(Convert.ToInt64(_exportLoadJobDetailBeo.MatterId), _dataset.CollectionId, documentDetail.DocumentId, imageFieldId); var imageFileName = (!string.IsNullOrEmpty(fieldValue)) ?fieldValue: string.Empty; imageFileName = Regex.Replace(imageFileName, Constants.FileSpecialCharactersRegex, string.Empty); //Remove the illegal character in the filename if (string.IsNullOrEmpty(imageFileName)) { imageErrorBuilder.Append(Constants.ExportImageNoValueCopyErrorMessage); errorMessage = imageErrorBuilder.ToString(); return(false); } Int64 noOfImageFiles = documentDetail.ImageFiles.Count; var imgFileNames = new List <string>(); if (_lstBatesAndDpnFieldTypes.Contains(_imageNameFieldType) && imageFileName.Contains(','))//if field value contains , then it means field is bates field { imgFileNames = GetFileNamesForCommaSeperatedFields(imageFileName, noOfImageFiles, imgFileNames); } else { bool status = GetFileNamesWithStatus(ref imgFileNames, noOfImageFiles, imageFileName, out errorMessage); if (!status) { return(false); } } CopyFilesToTargetPath(documentDetail, ref result, imageErrorBuilder, ref pageCount, imgFileNames); } else { imageErrorBuilder.Append(Constants.ExportImageNoValueCopyErrorMessage); errorMessage = imageErrorBuilder.ToString(); return(false); } } catch (Exception ex) { ex.AddUsrMsg("Export File Copy Worker: Unable to copy image files for job run id: {0}", PipelineId).Trace().Swallow(); result = false; } errorMessage = imageErrorBuilder.ToString(); return(result); }
private bool CopyTextFiles(ExportDocumentDetail documentDetail, out string errorMessage) { var result = true; var textErrorBuilder = new StringBuilder(); try { if (documentDetail.TextFiles != null && documentDetail.TextFiles.Count > 0) { foreach (var file in documentDetail.TextFiles) { var targetPath = string.Empty; GetFileName(documentDetail, ref result, textErrorBuilder, file, ref targetPath); if (!result) { continue; } bool retry; do { try { if (file.IsTextFieldExportEnabled) { var contentFieldValue = string.Empty; var textFieldId = DocumentBO.GetFieldIdByNameForExportJob(_dataset, _exportDocumentCollection.ExportOption.TextFieldToExport, false); var field = _dataset.DatasetFieldList.FirstOrDefault(f => f.Name.ToLower().Equals(_exportDocumentCollection.ExportOption.TextFieldToExport.ToLower())); if (field != null && field.FieldType != null) { if (field.FieldType.DataTypeId == ContentFieldTypeID) { contentFieldValue = DocumentBO.GetDocumentContentFieldsForExportJob(Convert.ToInt64(_exportLoadJobDetailBeo.MatterId), _dataset.CollectionId, documentDetail.DocumentId); contentFieldValue = DocumentBO.Base64DecodeForExportJob(contentFieldValue); //Decode the content field } else { contentFieldValue = DocumentBO.GetFieldValueForExportJob(Convert.ToInt64(_exportLoadJobDetailBeo.MatterId), _dataset.CollectionId, documentDetail.DocumentId, textFieldId); } } File.WriteAllText(targetPath, contentFieldValue, _encodingType); } else { File.Copy(file.SourceFilePath, targetPath); } retry = false; } catch (IOException ioEx) { result = false; var hResult = System.Runtime.InteropServices.Marshal.GetHRForException(ioEx); if (hResult == ExceptionHr) //Capture "File already exists" exception only and generate the new filename and retry to copy it again { var fileName = GetFileNameForDuplicates(Path.GetFileName(targetPath), file.DestinationFolder); targetPath = Path.Combine(file.DestinationFolder, fileName); retry = true; } else { textErrorBuilder.Append(Constants.ExportNativeTextCopyErrorMessage); textErrorBuilder.Append(file.SourceFilePath); textErrorBuilder.Append(Constants.ExportBreakMessage); retry = false; } } catch (Exception) { result = false; textErrorBuilder.Append(Constants.ExportNativeTextCopyErrorMessage); textErrorBuilder.Append(file.SourceFilePath); textErrorBuilder.Append(Constants.ExportBreakMessage); retry = false; } } while (retry); file.DestinationFolder = targetPath; } } else if (_isIncludeText) { textErrorBuilder.Append(TextFileError); result = false; } } catch (Exception ex) { ex.AddUsrMsg("Export File Copy Worker: Unable to copy text files for job run id: {0}", PipelineId).Trace().Swallow(); result = false; } errorMessage = textErrorBuilder.ToString(); return(result); }
private ExportDocumentDetail ConstructDocumentData(ExportDocumentCollection exportDocumentCollection, string documentId, string correlationId, out JobWorkerLog <ExportMetadataLogInfo> metadataLog) { var exportDocument = new ExportDocumentDetail(); try { exportDocument.DocumentId = documentId; exportDocument.CorrelationId = correlationId; bool isError; bool isErrorInTag = false; var document = DocumentBO.GetDocumentDataForExportJob(matterId, _dataset.CollectionId, documentId, out isError); if (document != null) { exportDocument.DCN = document.DocumentControlNumber; if (!String.IsNullOrEmpty(exportDocumentCollection.ExportOption.FieldForTextFileName)) { var textFieldId = DocumentBO.GetFieldIdByNameForExportJob(_dataset, exportDocumentCollection.ExportOption.FieldForTextFileName, false); exportDocument.TextFileName = DocumentBO.GetFieldValueForExportJob(matterId, _dataset.CollectionId, documentId, textFieldId); } if (!String.IsNullOrEmpty(exportDocumentCollection.ExportOption.FieldForNativeFileName)) { var nativeFieldId = DocumentBO.GetFieldIdByNameForExportJob(_dataset, exportDocumentCollection.ExportOption.FieldForNativeFileName, false); exportDocument.NativeFileName = DocumentBO.GetFieldValueForExportJob(matterId, _dataset.CollectionId, documentId, nativeFieldId); } #region "Recreate family group" //2)Attachment Range if (_beginsEnds != null) { Tuple <string, string> beginEnd; _beginsEnds.TryGetValue(document.Id.ToString(), out beginEnd); if (beginEnd != null) { exportDocument.BeginDoc = beginEnd.Item1; exportDocument.EndDoc = beginEnd.Item2; } } #endregion //3) File Path (Native File & Text) if (document.DocumentBinary.FileList != null) { if (exportDocumentCollection.ExportOption.IsNative) { //Get the tag name to check the tag exists for the document. If exists then export the native files. string tagNameToIncludeNative = exportDocumentCollection.ExportOption.IncludeNativeTagName; if (!string.IsNullOrEmpty(tagNameToIncludeNative)) //If "Include native for tagged document only" option is selected { //Check whether the document tagged with the selected tag. If yes, set the IsNativeTagExists property as true and get all native files to export out. exportDocument.IsNativeTagExists = CheckTagExistsToIncludeNative(document.CollectionId, document.DocumentId, tagNameToIncludeNative); if (exportDocument.IsNativeTagExists) //If document tagged then get the native files list to export. { exportDocument.NativeFiles = GetFileList(document.DocumentBinary.FileList.Where(f => f.Type == Constants.NativeFileTypeId).ToList()); } } else //If "Include native for tagged document only" option not selected, get native files to export out. { exportDocument.NativeFiles = GetFileList(document.DocumentBinary.FileList.Where(f => f.Type == Constants.NativeFileTypeId).ToList()); } } if (exportDocumentCollection.ExportOption.IsText) { if (exportDocumentCollection.ExportOption.IsTextFieldToExportSelected && !string.IsNullOrEmpty(exportDocumentCollection.ExportOption.TextFieldToExport)) { var fileList = new List <ExportFileInformation> { new ExportFileInformation() { IsTextFieldExportEnabled = true } }; exportDocument.TextFiles = fileList; } else { if (exportDocumentCollection.ExportOption.IsProduction && !string.IsNullOrEmpty(exportDocumentCollection.ExportOption.ProductionSetCollectionId)) { string[] lstOfProductionSets = exportDocumentCollection.ExportOption.ProductionSetCollectionId.Split(','); foreach (string productionSetId in lstOfProductionSets) { var productionDocumentData = GetDocumentData(documentId, productionSetId, out isError); if (exportDocumentCollection.ExportOption.TextOption1 == Constants.ScrubbedText) //If Text Prority 1 is Printed/Scrubbed text { //Get the scrubbed text files for one or more productions... if (exportDocument.TextFiles == null) { //Get the scrubbed text files for the first time.... exportDocument.TextFiles = GetFileList(productionDocumentData.DocumentBinary.FileList.Where(f => f.Type == Constants.ScrubbedFileTypeId).ToList()); } else { //Appnd to existing text files in case user chooses more than one production exportDocument.TextFiles.AddRange(GetFileList(productionDocumentData.DocumentBinary.FileList.Where(f => f.Type == Constants.ScrubbedFileTypeId).ToList())); } if ((exportDocument.TextFiles == null || exportDocument.TextFiles.Count == 0 || !File.Exists(exportDocument.TextFiles.FirstOrDefault().SourceFilePath)) && exportDocumentCollection.ExportOption.TextOption2 == Constants.ExtractedText) //If scrubbed text not exists for this document then get the Extracted text { exportDocument.TextFiles = GetFileList(document.DocumentBinary.FileList.Where(f => f.Type == Constants.TextFileTypeId).ToList()); exportDocument.TextFiles.SafeForEach(x => x.SourceFilePath = x.SourceFilePath.Contains(Constants.QuestionMark) ? x.SourceFilePath.Substring(0, x.SourceFilePath.LastIndexOf(Constants.QuestionMark)) : x.SourceFilePath); } else { exportDocument.TextFiles.ForEach(s => s.IsScrubbedText = true); } } else //Else If Text Prority 1 is Extracted text { //Get the extracted text files exportDocument.TextFiles = GetFileList(document.DocumentBinary.FileList.Where(f => f.Type == Constants.TextFileTypeId).ToList()); exportDocument.TextFiles.SafeForEach(x => x.SourceFilePath = x.SourceFilePath.Contains(Constants.QuestionMark) ? x.SourceFilePath.Substring(0, x.SourceFilePath.LastIndexOf(Constants.QuestionMark)) : x.SourceFilePath); //Remove the querystring if ((exportDocument.TextFiles == null || exportDocument.TextFiles.Count == 0 || !File.Exists(exportDocument.TextFiles.FirstOrDefault().SourceFilePath)) && exportDocumentCollection.ExportOption.TextOption2 == Constants.ScrubbedText) //If extracted text not exists for this document then get the Scrubbed text if exists { exportDocument.TextFiles = GetFileList(productionDocumentData.DocumentBinary.FileList.Where(f => f.Type == Constants.ScrubbedFileTypeId).ToList()); exportDocument.TextFiles.ForEach(s => s.IsScrubbedText = true); } } } } else { exportDocument.TextFiles = GetFileList(document.DocumentBinary.FileList.Where(f => f.Type == Constants.TextFileTypeId).ToList()); exportDocument.TextFiles.SafeForEach(x => x.SourceFilePath = x.SourceFilePath.Contains(Constants.QuestionMark) ? x.SourceFilePath.Substring(0, x.SourceFilePath.LastIndexOf(Constants.QuestionMark)) : x.SourceFilePath); //Remove the querystring } } } } //2.1) File Path (Images for Imageset or Production Set) exportDocument.ImageFiles = new List <ExportFileInformation>(); } //3) Tag if (exportDocumentCollection.ExportOption.IsTag && exportDocumentCollection.ExportOption.TagList != null && exportDocumentCollection.ExportOption.TagList.Count > 0) { var tag = GetDocumentTags(documentId, out isErrorInTag); if (tag != null && tag.Count > 0) { exportDocument.Tags = tag.Where(t => exportDocumentCollection.ExportOption.TagList.Contains(t.TagId.ToString(CultureInfo.InvariantCulture)) && t.Status).ToList(); } } #region Log metadataLog = ConstructLog(correlationId, (!isError), (!string.IsNullOrEmpty(exportDocument.DCN) ? exportDocument.DCN : string.Empty), isError, isErrorInTag, string.Empty); #endregion } catch (Exception ex) { ex.Trace().Swallow(); metadataLog = ConstructLog(correlationId, false, string.Empty, true, true, "Error in get Metadata."); } return(exportDocument); }