public FileProcessingModel DataMaskingFileProcessing(DataSet dsConfigSource, string FileNameWithPath, string MetaFileNameWithPath, FileProcessingModel model) { try { if (model.FileExtensionType == Enums.FileExtnType.PrintImageSD) { PrintImageSD_FileProcessing(dsConfigSource, FileNameWithPath, MetaFileNameWithPath, model); } } catch (Exception Ex) { model = null; throw Ex; } return(model); }
private void PrintImageSD_FileProcessing(DataSet Dsconfigurations, string FileNameWithPath, string MetaFileNameWithPath, FileProcessingModel model) { bool isFileValid = true; string ReordType = string.Empty, FileExtensionTargets = string.Empty; (string workflowGroup, string productNum, string subType) = GetXmlNodesValue(MetaFileNameWithPath); DataTable GetDataTable = new DataTable(); GetDataTable.Clear(); GetDataTable = GetConsolidatedConfiguration(Dsconfigurations); if (model.FileExtension.ToString().ToUpper() == Enums.FileExtn.TXT.ToString()) { FileExtensionTargets = Enums.FileExtn.TXT.ToString(); ReordType = (GetDataTable.AsEnumerable().Where(p => p.Field <string>("FileExtensionTargets") == Enums.FileExtn.TXT.ToString() ).Select(p => p.Field <string>("RecordType"))).FirstOrDefault(); } StringBuilder sbText = new StringBuilder(); string countValue = GetDelimiterCount(FileNameWithPath); string[] countVal = countValue.Split(' '); int[] printImageIdentifierPosition = new int[Convert.ToInt32(countVal[0])]; int[] specialCharacterArray = new int[Convert.ToInt32(countVal[1])]; List <ClientDataPageWise> clientDataList = new List <ClientDataPageWise>(); recordRepeatlist.Clear(); using (StreamReader file = new StreamReader(new FileStream(FileNameWithPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.Default)) { List <string> fileRows = new List <string>(); int counter = 0; string ln; dicMaskedVariable.Clear(); int indexval = 0; int specialcharacterIndexVal = 0; int linesCount = 0; //Getting the Index of Mail_to_Address and special character while ((ln = file.ReadLine()) != null) { fileRows.Add(ln.TrimEnd()); int linenumber = GetIndexValue(printImageIdentifier, ln); counter++; if (linenumber != -1) { printImageIdentifierPosition[indexval] = counter; indexval++; } int specialCharacterLineNumber = GetIndexValue(printImageSDRecDelimiter, ln); if (specialCharacterLineNumber != -1) { specialCharacterArray[specialcharacterIndexVal] = counter; specialcharacterIndexVal++; } linesCount++; } //splliting the page client wise if (linesCount != 0 && indexval != 0 && printImageIdentifierPosition.Length != 0) { List <List <string> > clientRecord = new List <List <string> >(); string[] clientArray = new string[printImageIdentifierPosition.Length + 1]; int ther = 0; for (int count = 0; count <= printImageIdentifierPosition.Length + 1; count++) { if (count == (int)Enums.RecordType.Initial) { clientRecord.Add(fileRows.GetRange(count + 1, printImageIdentifierPosition[0] - 14)); } else if (count == printImageIdentifierPosition.Length) { int loc = ((specialCharacterArray[specialCharacterArray.Length - 1]) - (printImageIdentifierPosition[count - 1] - 14)); clientRecord.Add(fileRows.GetRange(printImageIdentifierPosition[count - 1] - 14, loc - 1)); } else if (count == printImageIdentifierPosition.Length + 1) { int loc = ((linesCount) - (specialCharacterArray[specialCharacterArray.Length - 1])); clientRecord.Add(fileRows.GetRange(specialCharacterArray[specialCharacterArray.Length - 1], loc)); } else { int loc = ((printImageIdentifierPosition[count] - 14) - (printImageIdentifierPosition[count - 1] - 14)); clientRecord.Add(fileRows.GetRange(printImageIdentifierPosition[count - 1] - 14, loc)); } ther += clientRecord[count].Count; } int clientRecordCount = 0; int clientcount = 0; foreach (List <string> clientRec in clientRecord) { ClientDataPageWise ObjClientDataPageWise = new ClientDataPageWise(); string outPut = string.Join(Environment.NewLine, clientRec.ToArray()); string[] pages = outPut.Split(Convert.ToChar(printImageSDRecDelimiter)); int count = 0; for (int i = 0; i < pages.Length; i++) { if ((clientcount == 0 && i == 0)) { pages[i] = printImageSDRecDelimiter + "\r" + pages[i]; } else if (clientcount == clientRecord.Count - 1) { pages[i] = printImageSDRecDelimiter + "\r\n" + pages[i]; } else if (pages[i].Trim() != "") { pages[i] = printImageSDRecDelimiter + pages[i];//.Replace("�", ""); } if (pages[i].Trim() != "") { ObjClientDataPageWise.Pages.Add(pages[i]); } count++; clientRecordCount++; } clientcount++; clientDataList.Add(ObjClientDataPageWise); } } else { isFileValid = false; } bool isDescreptionPages = false; int customerRecordNo = 1; int isAccountValid = 0; if (isFileValid) { foreach (var page in clientDataList) { if (!isFileValid) { break; } if (customerRecordNo == (int)Enums.RecordType.First) { isDescreptionPages = true; } else { isDescreptionPages = false; } customerRecordNo++; int customerPageCount = 1; foreach (var row in page.Pages) { int totalPageLines = CountLinesInFile(row.ToString()); StringBuilder maskedLine = new StringBuilder(); var tempread = new StringReader(row); if (isDescreptionPages) { sbText.AppendLine(row.ToString().TrimEnd()); } else { for (int currentRowofPage = 1; currentRowofPage <= totalPageLines; currentRowofPage++) { string unMaskedLine = tempread.ReadLine(); maskedLine = GeneratePrintImageSDMaskedData(unMaskedLine, Dsconfigurations, MetaFileNameWithPath, customerPageCount, Convert.ToString(currentRowofPage), ref isAccountValid); sbText.AppendLine(maskedLine.ToString().TrimEnd()); } } customerPageCount++; } } file.Close(); } if (customerRecordNo - 3 == isAccountValid) { isFileValid = false; } } // Full Scanning the document for repeated string StringBuilder sbFinal = new StringBuilder(); sbFinal.Clear(); if (isFileValid) { int linesss = sbText.Length; String[] arrFinal = sbText.ToString().TrimEnd().Split('\n'); bool isDescrptionPageExists = true; foreach (string finalRow in arrFinal) { if (!isDescrptionPageExists) { StringBuilder scanLine = new StringBuilder(finalRow); List <string> dicPreMasked = recordRepeatlist.OrderByDescending(s => s.Length).ToList(); Parallel.ForEach(dicPreMasked, record => { string[] repeatString = record.Split(new[] { ' ', ' ' }, StringSplitOptions.RemoveEmptyEntries); string[] lineCheck = finalRow.Trim('\r').Split(new Char[] { ' ', '-' }); StringBuilder stringMatched = new StringBuilder(); List <string> repeatLintMatch = new List <string>(); foreach (string dictionay in repeatString) { if (finalRow.Contains(dictionay)) { foreach (string currentScanWord in lineCheck) { if (currentScanWord == dictionay) { repeatLintMatch.Add(dictionay); } } } else { break; } } foreach (string value in repeatLintMatch) { stringMatched.Append(value + ' '); } string finalMatch = stringMatched.ToString().TrimEnd().TrimStart(); string originalArray = ConvertStringArrayToString(repeatString).TrimEnd(); if (finalMatch.Length == originalArray.Length) { string finalMaskedString = GetMaskedFieldValue(originalArray); string[] maskedarray = finalMaskedString.Split(' '); Dictionary <string, string> unMaskedAndMaskedDict = new Dictionary <string, string>(); for (int unm = 0; unm < repeatString.Length; unm++) { unMaskedAndMaskedDict.Add(repeatString[unm], maskedarray[unm]); } foreach (string final in finalMatch.Split(' ')) { scanLine.Replace(final, unMaskedAndMaskedDict[final]); } } else if (finalMatch.Length > originalArray.Length) { scanLine.Replace(originalArray, GetMaskedFieldValue(originalArray)); } }); sbFinal.AppendLine(scanLine.ToString().TrimEnd()); } else { if (finalRow.Contains(printImageIdentifier)) { isDescrptionPageExists = false; } sbFinal.AppendLine(finalRow.TrimEnd()); } } } else { sbFinal = null; } if (!isFileValid) { sbFinal = null; } using (MemoryStream fileStream = new MemoryStream()) { fileStream.Write(Encoding.Default.GetBytes(sbFinal.ToString()), 0, Encoding.Default.GetBytes(sbFinal.ToString()).Length); model.OutputDataFileBytes = fileStream.ToArray(); } using (MemoryStream metaStream = new MemoryStream()) { metaStream.Write(Encoding.Default.GetBytes(sbFinal.ToString()), 0, Encoding.Default.GetBytes(sbFinal.ToString()).Length); model.OutputMetaDataFileBytes = metaStream.ToArray(); } model.HasOutputErrors = (model.OutputDataFileBytes == null || model.OutputMetaDataFileBytes == null ? true : false); model.HasOutputFileDetails = (model.OutputDataFileBytes == null || model.OutputMetaDataFileBytes == null ? false : true); }
private bool CheckAndCreateMaskedFile(string _FileName, string _MetaFileName) { bool _return = false; Logger.Trace("STARTED: CheckAndCreateMaskedFile Method."); try { FileProcessingModel _fileProcessingModel = null; bool IsProcessed = false; try { FileExtn _fileExt = new FileExtn(); FileExtnType _fileExtTyp = new FileExtnType(); if (_FileName.ToUpper().Trim().Contains(Nbs_East)) { _fileExt = FileExtn.TXT; } else { _fileExt = (FileExtn)Enum.Parse(typeof(FileExtn), FileIOService.GetFileExtension(_FileName).Split('.')[1].ToUpper()); } if (_fileExt.ToString().ToUpper() == Convert.ToString(FileExtn.TXT)) { _fileExtTyp = (FileExtnType)GetFileExtensionAndTypeDictionary() .FirstOrDefault(x => x.Key == Convert.ToString(_fileExt)).Value.Key; } _fileProcessingModel = new FileProcessingModel { InputFileName = FileIOService.GetFileName(_FileName), InputFileNameExtension = FileIOService.GetFileExtension(_FileName), InputFileStream = FileIOService.GetFileStream(_FileName), InputMetadataFileName = FileIOService.GetFileName(_MetaFileName), InputMetadataFileNameExtension = FileIOService.GetFileExtension(_MetaFileName), InputMetaDataFileStream = FileIOService.GetFileStream(_MetaFileName), FileExtensionType = _fileExtTyp, FileExtension = _fileExt }; IsProcessed = true; Logger.Trace(string.Format("STARTED: Processing of file: {0}", _FileName)); } catch (Exception e) { IsProcessed = false; } if (IsProcessed) { //DataMasking *****Started**** Logger.Trace("STARTED: DataMasking Process"); DataSet dsMaskingSource = new DataSet(); dsMaskingSource.Clear(); dsMaskingSource = FileIOService.GetMaskingSourceDataSet(); FileProcessingModel model = DataMaskingService.DataMaskingFileProcessing(dsMaskingSource, _FileName, _MetaFileName, _fileProcessingModel); _fileProcessingModel.HasOutputFileDetails = (model == null ? false : model.HasOutputFileDetails); _fileProcessingModel.HasOutputErrors = (model == null ? true : model.HasOutputErrors); Logger.Trace("ENDED: DataMasking Process"); //DataMasking *****Ended**** if (!_fileProcessingModel.HasOutputErrors && _fileProcessingModel.HasOutputFileDetails) { _fileProcessingModel.OutputFileName = "Masked_" + _fileProcessingModel.InputFileName; _fileProcessingModel.OutputFileNameExtension = _fileProcessingModel.InputFileNameExtension; _fileProcessingModel.OutputMetadataFileName = "Masked_" + _fileProcessingModel.InputMetadataFileName; _fileProcessingModel.OutputMetadataFileNameExtension = _fileProcessingModel.InputMetadataFileNameExtension; string outputFileName = ConfigHelper.Model.OutputFilePathLocation_Local + Path.DirectorySeparatorChar + _fileProcessingModel.OutputFileName + _fileProcessingModel.OutputFileNameExtension; string outputMetadataFileName = ConfigHelper.Model.OutputFilePathLocation_Local + Path.DirectorySeparatorChar + _fileProcessingModel.OutputMetadataFileName + _fileProcessingModel.OutputMetadataFileNameExtension; bool retOutputFile = FileIOService.CreateFileFromFileStream(outputFileName, _fileProcessingModel.OutputDataFileBytes); bool retOutputMetaFile = FileIOService.CopyFile(_MetaFileName, outputMetadataFileName); Logger.Trace(string.Format("ENDED: Processing of file: {0}", _FileName)); if (retOutputFile && retOutputMetaFile) { _ = RemoveInputFiles(_FileName, _MetaFileName); Logger.Trace(string.Format("SUCCESS: Output file generated successfully - {0}", outputFileName)); _return = true; } else { Logger.Trace("DISCARDED: Output Error"); _return = false; _ = MoveFilesToOutputDiscarded(_FileName, _MetaFileName); } } else { Logger.Trace("DISCARDED: Output Error"); _return = false; _ = MoveFilesToOutputDiscarded(_FileName, _MetaFileName); } } else { Logger.Trace("DISCARDED: INPUT Error"); _return = false; _ = MoveFilesToInputDiscarded(_FileName, _MetaFileName); } } catch (Exception ex) { _return = false; Logger.Error(ex, "CheckAndCreateMaskedFile"); Logger.Trace("DISCARDED: Output Error"); _ = MoveFilesToOutputDiscarded(_FileName, _MetaFileName); } Logger.Trace("ENDED: CheckAndCreateMaskedFile Method"); return(_return); }