public static GCExcelToDocumentPlug CreateInstance(SpecCertFileType certFileType) { GCExcelToDocumentPlug gcExcelToDocumentPlug = null; switch (certFileType) { case SpecCertFileType.X12: gcExcelToDocumentPlug = new X12GCExcelToDocumentPlug(); break; case SpecCertFileType.FlatFile: gcExcelToDocumentPlug = new FlatFileGCExcelToDocumentPlug(); break; case SpecCertFileType.Xml: gcExcelToDocumentPlug = new XmlGCExcelToDocumentPlug(); break; default: throw new NotSupportedException(string.Format("{0} cert file type is not supported", certFileType)); } return(gcExcelToDocumentPlug); }
public IDocumentPlug GenerateDocumentPlug(Stream stream, string tradingPartnerName, int documentType, string direction, SpecCertFileType certFileType) { if (stream == null) { throw new ArgumentNullException("stream"); } DocumentPlug documentPlug = null; using (ExcelPackage pck = new ExcelPackage(stream)) { ExcelWorkbook workBook = pck.Workbook; // TODO: Add more validation ExcelWorksheet schemaWorksheet; string worksheetName = string.Format("{0} {1} Spec Worksheet", documentType, direction); // Special case for 'super spec' if (string.IsNullOrWhiteSpace(tradingPartnerName) == false && string.Equals(tradingPartnerName, "Super Spec", StringComparison.InvariantCultureIgnoreCase) == true) { worksheetName = "Segment & Element List"; if (workBook.Worksheets[worksheetName] == null) { worksheetName = "Specification Worksheet"; } } schemaWorksheet = workBook.Worksheets[worksheetName]; if (schemaWorksheet == null) { AddValidationResult(ResultType.Error, -1, "N/A", string.Format("'{0}' worksheet doesn't exist", worksheetName)); return(null); } InitializeColumnIndexes(direction); int row = GetStartRow(schemaWorksheet); documentPlug = ConstructDocumentPlug(schemaWorksheet, row); // TODO: Try to get source contingency row here instead of specifying -1 foreach (int contingencyRow in PendingContingencies.Keys) { AddValidationResult(ResultType.Error, -1, "N/A", string.Format("Unresolved contingency. Row '{0}' does not exist", contingencyRow)); } } return(documentPlug); }
/// <summary>Wrapper over EDIReader for GC validation feature (based on Bts assembly file). </summary> /// <param name="ediData">EDI text data (edi file content)</param> /// <param name="ediFileName">This is for record keeping only, not used by EDIReader</param> /// <param name="certFileFullName">Spec cert file (relative path)</param> /// <param name="documentPlug">Document plug</param> /// <returns></returns> public static EDIValidationResult ValidateEdi(string ediData, string ediFileName, string schemaFileName, string certFileDisplayName, string type, SpecCertFileType fileType, IDocumentPlug documentPlug) { if (string.IsNullOrWhiteSpace(ediData)) { throw new ArgumentNullException("ediData", "Edi file content cannot be empty"); } if (documentPlug == null) { throw new ArgumentNullException("documentPlug", "documentPlug cannot be null"); } EDIValidationResult ediValidationResult = new EDIValidationResult() { FileName = ediFileName, SchemaName = schemaFileName, SegmentValidationResults = new List <SegmentValidationResult>(), TransactionNumbers = new List <string>(), DisplayName = certFileDisplayName, Type = type, }; try { IFatpipeDocument fatpipeDocument; ediValidationResult = ValidateEdi(ediData, ediFileName, schemaFileName, certFileDisplayName, type, fileType, documentPlug, out fatpipeDocument); } catch (Exception ex) { ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", Description = "Internal error occurred", //ex.Message, StartIndex = -1, EndIndex = -1, } ); } return(ediValidationResult); }
public static EDIValidationResult ValidateEdi(string ediData, string ediFileName, string schemaFileName, string certFileDisplayName, string type, SpecCertFileType fileType, IDocumentPlug documentPlug, out IFatpipeDocument fatpipeDocument) { Stopwatch sw = new Stopwatch(); sw.Start(); EDIValidationResult ediValidationResult = new EDIValidationResult() { FileName = ediFileName, SchemaName = schemaFileName, SegmentValidationResults = new List <SegmentValidationResult>(), TransactionNumbers = new List <string>(), DisplayName = certFileDisplayName, Type = type, }; fatpipeDocument = null; try { ediValidationResult.SegmentValidationResults.Clear(); string endHeader = string.Empty; switch (fileType) { case SpecCertFileType.X12: EDIReader ediReader = new EDIReader(); if (ediReader.Initialize(new MemoryStream(Encoding.UTF8.GetBytes(ediData)), null, documentPlug) == true) { try { IFatpipeDocument currentFatpipeDocument = null; while ((currentFatpipeDocument = ediReader.GetNextTransactionSet()) != null) { if (string.IsNullOrWhiteSpace(ediValidationResult.BeautifiedOriginalPayload)) { ediValidationResult.BeautifiedOriginalPayload = currentFatpipeDocument.BeautifiedOriginalPayloadStartHeader; endHeader = currentFatpipeDocument.BeautifiedOriginalPayloadEndHeader; } ediValidationResult.BeautifiedOriginalPayload += currentFatpipeDocument.BeautifiedOriginalPayloadBody; ediValidationResult.TransactionNumbers.Add(currentFatpipeDocument.TransactionNumber); ediValidationResult.SegmentValidationResults.AddRange(ediReader.Errors.GetSegmentValidationResults()); fatpipeDocument = currentFatpipeDocument; } ediValidationResult.BeautifiedOriginalPayload += endHeader; } catch (EDIReaderException ediReaderException) { // Add whatever errors we accumulated ediValidationResult.SegmentValidationResults.AddRange(ediReader.Errors.GetSegmentValidationResults()); ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", Description = ediReaderException.Message, StartIndex = -1, EndIndex = -1, }); } } //ediValidationResult.SegmentValidationResults.AddRange(ediReader.Errors.GetSegmentValidationResults()); break; case SpecCertFileType.FlatFile: FlatFileReader flatFileReader = new FlatFileReader(); fatpipeDocument = flatFileReader.ReadFile(new MemoryStream(Encoding.UTF8.GetBytes(ediData)), documentPlug); ediValidationResult.BeautifiedOriginalPayload = fatpipeDocument.BeautifiedOriginalPayloadBody; ediValidationResult.SegmentValidationResults.AddRange(flatFileReader.Errors.GetSegmentValidationResults()); break; case SpecCertFileType.Xml: XmlFileReader xmlFileReader = new XmlFileReader(); fatpipeDocument = xmlFileReader.ReadFile(new MemoryStream(Encoding.UTF8.GetBytes(ediData)), documentPlug); ediValidationResult.BeautifiedOriginalPayload = fatpipeDocument.BeautifiedOriginalPayloadBody; ediValidationResult.SegmentValidationResults.AddRange(xmlFileReader.Errors.GetSegmentValidationResults()); break; default: ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", Description = "Invalid cert file type (only EDI and FaltFile is supported)", //ex.Message, StartIndex = -1, EndIndex = -1, }); break; } } catch (Exception ex) { ediValidationResult.SegmentValidationResults.Add( new SegmentValidationResult() { Type = ResultType.Error, SequenceNumber = -1, Name = "N/A", //Description = "Internal error occurred",//ex.Message, Description = "Internal error occurred. " + ex.ToString(), StartIndex = -1, EndIndex = -1, }); } sw.Stop(); ediValidationResult.ExecutionTime = sw.Elapsed; return(ediValidationResult); }
public static SpecCertValidationResult ValidateSpecCert(string certFileName, Stream certFileStream, IDalManager dalManager, out SpecCertFileType certFileType) { // For error reporting lets create X12 instance of GCExcelToDocumentPlug // Once TradingPartnerSpecCertMetadata is created we will change it to appropriate instance GCExcelToDocumentPlug gcExcelToDocumentPlug = new X12GCExcelToDocumentPlug(); certFileType = SpecCertFileType.X12; try { TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata = new TradingPartnerSpecCertMetadata(); List <string> errors = tradingPartnerSpecCertMetadata.Initialize(certFileName); certFileType = (SpecCertFileType)tradingPartnerSpecCertMetadata.FileType; gcExcelToDocumentPlug = GCExcelToDocumentPlug.CreateInstance(certFileType); if (errors.Count == 0) { // Check if this cert file already exist List <TradingPartnerSpecCertMetadata> tradingPartnerSpecCertMetadataList = dalManager.GetTradingPartnerList(tradingPartnerSpecCertMetadata.DocumentType, string.Empty); if (tradingPartnerSpecCertMetadataList.Any(t => t.TradingPartnerName == tradingPartnerSpecCertMetadata.TradingPartnerName && t.DocumentType == tradingPartnerSpecCertMetadata.DocumentType && t.Direction == tradingPartnerSpecCertMetadata.Direction)) { gcExcelToDocumentPlug.SpecCertValidationResult.SegmentDefinitionValidationResults.Add(new SegmentDefinitionValidationResult() { ColumnIndex = "N/A", RowIndex = -1, Type = ResultType.Warning, Description = "Cert file already exist." }); } gcExcelToDocumentPlug.GenerateDocumentPlug(certFileStream, tradingPartnerSpecCertMetadata.TradingPartnerName, tradingPartnerSpecCertMetadata.DocumentType, tradingPartnerSpecCertMetadata.Direction, (SpecCertFileType)tradingPartnerSpecCertMetadata.FileType); } else { foreach (string error in errors) { gcExcelToDocumentPlug.SpecCertValidationResult.SegmentDefinitionValidationResults.Add(new SegmentDefinitionValidationResult() { ColumnIndex = "N/A", RowIndex = -1, Type = ResultType.Error, Description = string.Format("Cert file name error: {0}", error) }); } } } catch (Exception ex) { gcExcelToDocumentPlug.SpecCertValidationResult.SegmentDefinitionValidationResults.Add(new SegmentDefinitionValidationResult() { ColumnIndex = "N/A", RowIndex = -1, Type = ResultType.Error, Description = string.Format("Unknown error occured ({0}), please contact Maarg", ex.Message) }); } return(gcExcelToDocumentPlug.SpecCertValidationResult); }