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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }