Example #1
0
        public static EDIValidationResult ValidateEdi(string ediData, string ediFileName, string certFileFullName,
                                                      IDocumentPlug documentPlug, out IFatpipeDocument fatpipeDocument)
        {
            if (string.IsNullOrWhiteSpace(ediData))
            {
                throw new ArgumentNullException("ediData", "Edi file content cannot be empty");
            }

            if (string.IsNullOrWhiteSpace(certFileFullName))
            {
                throw new ArgumentNullException("certFileFullName", "certFileFullName cannot be empty");
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata = new TradingPartnerSpecCertMetadata();

            // Purposely ignoring Initialize function return type (errors) since I don't expect errors here.
            // Spec cert is uploaded only after validation.
            tradingPartnerSpecCertMetadata.Initialize(certFileFullName, null, DateTime.MinValue);

            return(ValidateEdi(ediData, ediFileName, tradingPartnerSpecCertMetadata.SchemaFileName, tradingPartnerSpecCertMetadata.GetCertFileDisplayName(),
                               tradingPartnerSpecCertMetadata.Type, (SpecCertFileType)tradingPartnerSpecCertMetadata.FileType, documentPlug, out fatpipeDocument));
        }
Example #2
0
        public bool SaveTradingPartnerSpecCertMetadata(TradingPartnerSpecCertMetadata tradingPartnerSpecCert)
        {
            this.tableClient = account.CreateCloudTableClient();
            this.tableClient.CreateTableIfNotExist(TradingPartnerSpecCertTableName);
            this.tableContext = tableClient.GetDataServiceContext();

            tradingPartnerSpecCert.PartitionKey = tradingPartnerSpecCert.TradingPartnerName;
            tradingPartnerSpecCert.RowKey       = string.Format("{0}_{1}", tradingPartnerSpecCert.DocumentType, tradingPartnerSpecCert.Direction);
            tradingPartnerSpecCert.Timestamp    = DateTime.UtcNow;

            if (TradingPartnerSpecCerts.FirstOrDefault(t => t.PartitionKey == tradingPartnerSpecCert.PartitionKey && t.RowKey == tradingPartnerSpecCert.RowKey) == null)
            {
                TradingPartnerSpecCerts.Add(tradingPartnerSpecCert);
            }

            // We need upsert functionality here, hence removing AddObject call and adding UpdateObject
            // this.tableContext.AddObject(TradingPartnerSpecCertTableName, tradingPartnerSpecCert);
            // http://social.msdn.microsoft.com/Forums/windowsazure/en-US/892340f1-bfe1-4433-9246-b617abe6078c/upsert-operation-in-the-table
            // http://msdn.microsoft.com/en-us/library/windowsazure/hh452242.aspx
            // http://www.windowsazure.com/en-us/develop/net/how-to-guides/table-services/#replace-entity
            tableContext.AttachTo(TradingPartnerSpecCertTableName, tradingPartnerSpecCert);
            tableContext.UpdateObject(tradingPartnerSpecCert);

            DataServiceResponse response = this.tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate);

            return(response.BatchStatusCode == Http200 || response.BatchStatusCode == Http201 || response.BatchStatusCode == Http202);
        }
        private static DocumentPlugValidationInfo GetDocumentPlugValidationInfo(ZipFileEntry fileEntry, IDalManager dalManager)
        {
            string specCertName = Path.ChangeExtension(fileEntry.FileName, "xlsx");

            DocumentPlugValidationInfo documentPlugValidationInfo = new DocumentPlugValidationInfo()
            {
                SpecCertName = specCertName,
                FileContents = fileEntry.Content,
                FileName     = fileEntry.FileName,
            };

            TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata = new TradingPartnerSpecCertMetadata();
            List <string> errors = tradingPartnerSpecCertMetadata.Initialize(specCertName);

            if (errors == null || errors.Count == 0)
            {
                try
                {
                    documentPlugValidationInfo.DocumentPlug = SchemaCache.GetDocumentPlug(tradingPartnerSpecCertMetadata, dalManager);
                }
                catch (Exception)
                {
                    // Ignore error here as we want to add EdiValidationResult error during ValidateEdi call.
                }
            }

            return(documentPlugValidationInfo);
        }
        public void DeleteTradingPartnerSpecCert(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata)
        {
            CloudBlobClient client = this.storageAccount.CreateCloudBlobClient();
            CloudBlob       blob   = client.GetBlobReference(string.Format(CultureInfo.InvariantCulture, "{0}/{1}",
                                                                           this.container.Name, tradingPartnerSpecCertMetadata.SchemaFileName));

            blob.DeleteIfExists();
        }
Example #5
0
        /// <summary> Wrapper over EDIReader for GC validation feature (Based on spec cert). </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="dalManager">To retrieve schema</param>
        /// <returns></returns>
        public static EDIValidationResult ValidateEdi(string ediData, string ediFileName, string certFileFullName, IDalManager dalManager)
        {
            if (string.IsNullOrWhiteSpace(ediData))
            {
                throw new ArgumentNullException("ediData", "Edi file content cannot be empty");
            }

            if (string.IsNullOrWhiteSpace(certFileFullName))
            {
                throw new ArgumentNullException("certFileFullName", "certFileFullName cannot be empty");
            }

            if (dalManager == null)
            {
                throw new ArgumentNullException("dalManager", "dalManager cannot be null");
            }

            TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata = new TradingPartnerSpecCertMetadata();

            // Purposely ignoring Initialize function return type (errors) since I don't expect errors here.
            // Spec cert is uploaded only after validation.
            tradingPartnerSpecCertMetadata.Initialize(certFileFullName, null, DateTime.MinValue);

            EDIValidationResult ediValidationResult = new EDIValidationResult()
            {
                FileName   = ediFileName,
                SchemaName = tradingPartnerSpecCertMetadata.SchemaFileName,
                SegmentValidationResults = new List <SegmentValidationResult>(),
                TransactionNumbers       = new List <string>(),
                DisplayName = tradingPartnerSpecCertMetadata.GetCertFileDisplayName(),
                Type        = tradingPartnerSpecCertMetadata.Type,
            };

            try
            {
                IDocumentPlug documentPlug = SchemaCache.GetDocumentPlug(tradingPartnerSpecCertMetadata, dalManager);

                IFatpipeDocument fatpipeDocument;
                ediValidationResult = ValidateEdi(ediData, ediFileName, certFileFullName, 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 #6
0
        public static void DeleteTradingPartnerSpecCertWithMetadata(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata, IDalManager dalManager)
        {
            // TODO: Ideally we should keep audit trail of delete
            // Following function will remove the table entry altogether.
            dalManager.DeleteTradingPartnerSpecCertMetadata(tradingPartnerSpecCertMetadata);

            dalManager.DeleteTradingPartnerSpecCert(tradingPartnerSpecCertMetadata);

            SchemaCache.RemoveDocumentPlug(tradingPartnerSpecCertMetadata.SchemaFileName);
        }
        public Stream GetTradingPartnerSpecCert(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata)
        {
            CloudBlobClient client = this.storageAccount.CreateCloudBlobClient();
            CloudBlob       blob   = client.GetBlobReference(string.Format(CultureInfo.InvariantCulture, "{0}/{1}", this.container.Name, tradingPartnerSpecCertMetadata.SchemaFileName));

            MemoryStream ms = new MemoryStream();

            blob.DownloadToStream(ms);
            ms.Position = 0;

            return(ms);
        }
Example #8
0
        // Should we always overwrite the existing one?
        public static void UploadSpecCert(string certFileName, Stream certFileStream, string userName, IDalManager dalManager)
        {
            TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata = new TradingPartnerSpecCertMetadata();

            // Purposely ignoring Initialize function return type (errors) since I don't expect errors here.
            tradingPartnerSpecCertMetadata.Initialize(certFileName, userName, DateTime.UtcNow);

            dalManager.SaveTradingPartnerSpecCert(certFileStream, tradingPartnerSpecCertMetadata);

            dalManager.SaveTradingPartnerSpecCertMetadata(tradingPartnerSpecCertMetadata);

            SchemaCache.RemoveDocumentPlug(tradingPartnerSpecCertMetadata.SchemaFileName);
        }
        private static List <EDIValidationResult> ValidateEdi(List <DocumentPlugValidationInfo> documentPlugValidationInfoList)
        {
            if (documentPlugValidationInfoList == null || documentPlugValidationInfoList.Count <= 1)
            {
                throw new ArgumentNullException("documentPlugValidationInfoList", "documentPlugValidationInfoList cannot be null and should have > 1 entries");
            }

            List <EDIValidationResult> ediValidationResults = new List <EDIValidationResult>();
            EDIValidationResult        ediValidationResult;

            foreach (DocumentPlugValidationInfo documentPlugValidationInfo in documentPlugValidationInfoList)
            {
                if (documentPlugValidationInfo.DocumentPlug == null)
                {
                    TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata = new TradingPartnerSpecCertMetadata();
                    tradingPartnerSpecCertMetadata.Initialize(documentPlugValidationInfo.SpecCertName);

                    ediValidationResult = new EDIValidationResult();
                    ediValidationResult.BeautifiedOriginalPayload = EdiValidator.FormatEDIData(documentPlugValidationInfo.FileContents);
                    ediValidationResult.FileName    = tradingPartnerSpecCertMetadata.SchemaFileName;
                    ediValidationResult.SchemaName  = tradingPartnerSpecCertMetadata.SchemaFileName;
                    ediValidationResult.DisplayName = tradingPartnerSpecCertMetadata.GetCertFileDisplayName();
                    ediValidationResult.Type        = tradingPartnerSpecCertMetadata.Type;
                    ediValidationResult.SegmentValidationResults = new List <SegmentValidationResult>();
                    ediValidationResult.SegmentValidationResults.Add(new SegmentValidationResult()
                    {
                        Description    = tradingPartnerSpecCertMetadata.SchemaFileName + " Spec cert does not exist",
                        EndIndex       = -1,
                        Name           = "N/A",
                        SequenceNumber = -1,
                        StartIndex     = -1,
                        Type           = ResultType.Error
                    });
                }
                else
                {
                    IFatpipeDocument fatpipeDocument;

                    ediValidationResult = EdiValidator.ValidateEdi(documentPlugValidationInfo.FileContents, documentPlugValidationInfo.FileName,
                                                                   documentPlugValidationInfo.SpecCertName, documentPlugValidationInfo.DocumentPlug, out fatpipeDocument);

                    documentPlugValidationInfo.FatpipeDocument = fatpipeDocument;
                }

                ediValidationResults.Add(ediValidationResult);
            }

            return(ediValidationResults);
        }
Example #10
0
        public bool DeleteTradingPartnerSpecCertMetadata(TradingPartnerSpecCertMetadata tradingPartnerSpecCert)
        {
            this.tableClient = account.CreateCloudTableClient();
            this.tableClient.CreateTableIfNotExist(TradingPartnerSpecCertTableName);
            this.tableContext = tableClient.GetDataServiceContext();

            tradingPartnerSpecCert.PartitionKey = tradingPartnerSpecCert.TradingPartnerName;
            tradingPartnerSpecCert.RowKey       = string.Format("{0}_{1}", tradingPartnerSpecCert.DocumentType, tradingPartnerSpecCert.Direction);
            tradingPartnerSpecCert.Timestamp    = DateTime.UtcNow;

            TradingPartnerSpecCerts.Remove(tradingPartnerSpecCert);

            tableContext.AttachTo(TradingPartnerSpecCertTableName, tradingPartnerSpecCert, "*");
            tableContext.DeleteObject(tradingPartnerSpecCert);

            DataServiceResponse response = this.tableContext.SaveChangesWithRetries(SaveChangesOptions.Batch | SaveChangesOptions.ReplaceOnUpdate);

            return(response.BatchStatusCode == Http200 || response.BatchStatusCode == Http201 || response.BatchStatusCode == Http202);
        }
        public static IDocumentPlug GetDocumentPlug(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata, IDalManager dalManager)
        {
            IDocumentPlug documentPlug = gcSpecCertCache.GetObject(tradingPartnerSpecCertMetadata.SchemaFileName) as IDocumentPlug;

            if (documentPlug == null)
            {
                Stream schemaStream = dalManager.GetTradingPartnerSpecCert(tradingPartnerSpecCertMetadata);

                if (schemaStream == null)
                {
                    throw new GCEdiValidatorException(string.Format("{0} Schema not found.", tradingPartnerSpecCertMetadata.SchemaFileName));
                }

                GCExcelToDocumentPlug gcExcelToDocumentPlug = GCExcelToDocumentPlug.CreateInstance((SpecCertFileType)tradingPartnerSpecCertMetadata.FileType);

                documentPlug = gcExcelToDocumentPlug.GenerateDocumentPlug(schemaStream, tradingPartnerSpecCertMetadata.TradingPartnerName,
                                                                          tradingPartnerSpecCertMetadata.DocumentType, tradingPartnerSpecCertMetadata.Direction, (SpecCertFileType)tradingPartnerSpecCertMetadata.FileType);

                gcSpecCertCache.AddObject(tradingPartnerSpecCertMetadata.SchemaFileName, documentPlug);
            }

            return(documentPlug);
        }
Example #12
0
        public Stream GetTradingPartnerSpecCert(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata)
        {
            DALTradingPartnerSpecCert dal = new DALTradingPartnerSpecCert(this.storageAccount, this.container);

            return(dal.GetTradingPartnerSpecCert(tradingPartnerSpecCertMetadata));
        }
Example #13
0
        public void DeleteTradingPartnerSpecCert(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata)
        {
            DALTradingPartnerSpecCert dal = new DALTradingPartnerSpecCert(this.storageAccount, this.container);

            dal.DeleteTradingPartnerSpecCert(tradingPartnerSpecCertMetadata);
        }
Example #14
0
        public bool DeleteTradingPartnerSpecCertMetadata(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata)
        {
            DALTradingPartnerSpecCertMetadata dal = new DALTradingPartnerSpecCertMetadata(this.storageAccount);

            return(dal.DeleteTradingPartnerSpecCertMetadata(tradingPartnerSpecCertMetadata));
        }
Example #15
0
        public void SaveTradingPartnerSpecCert(Stream tradingPartnerSpecCertStream, TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata)
        {
            DALTradingPartnerSpecCert dal = new DALTradingPartnerSpecCert(this.storageAccount, this.container);

            dal.SaveTradingPartnerSpecCert(tradingPartnerSpecCertStream, tradingPartnerSpecCertMetadata);
        }
Example #16
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);
        }
Example #17
0
        private static int ValidateInstanceFile(Parameters parameters)
        {
            string specCertFullPath = parameters.SpecCertName;
            string specCertFileName = Path.GetFileName(specCertFullPath);
            string instanceFilePath = parameters.InstanceFileName;
            string instanceFileName = Path.GetFileName(instanceFilePath);

            if (File.Exists(specCertFullPath) == false)
            {
                ConsoleExtensions.WriteError("{0} does not exist.", specCertFullPath);
                return(1);
            }

            if (Path.GetExtension(specCertFullPath) != ".xlsx")
            {
                ConsoleExtensions.WriteError("{0} is not a zip file.", specCertFullPath);
                return(1);
            }

            if (File.Exists(instanceFilePath) == false)
            {
                ConsoleExtensions.WriteError("{0} does not exist.", instanceFilePath);
                return(1);
            }

            string logFileName = Path.ChangeExtension(instanceFileName, "log");

            ConsoleExtensions.WriteInfo("Log file for this processing: {0}", logFileName);

            string instanceFileData = File.ReadAllText(instanceFilePath);

            using (StreamWriter logFile = new StreamWriter(logFileName))
            {
                try
                {
                    TradingPartnerSpecCertMetadata metadata = new TradingPartnerSpecCertMetadata();
                    metadata.Initialize(specCertFileName);

                    GCExcelToDocumentPlug excelToDocumentPlug;
                    switch ((SpecCertFileType)metadata.FileType)
                    {
                    case SpecCertFileType.X12:
                        excelToDocumentPlug = new X12GCExcelToDocumentPlug();
                        break;

                    case SpecCertFileType.Xml:
                        excelToDocumentPlug = new XmlGCExcelToDocumentPlug();
                        break;

                    case SpecCertFileType.FlatFile:
                        excelToDocumentPlug = new FlatFileGCExcelToDocumentPlug();
                        break;

                    default:
                        throw new NotSupportedException(string.Format("Spec cert type {0} is not supported", (SpecCertFileType)metadata.FileType));
                        break;
                    }

                    LogInformation(logFile, string.Format("Generating document plug from spec cert {0}", specCertFileName));

                    TradingPartnerSpecCertMetadata specCertMetadata = new TradingPartnerSpecCertMetadata();
                    specCertMetadata.Initialize(specCertFileName);

                    IDocumentPlug documentPlug = null;
                    using (StreamReader stream = new StreamReader(specCertFullPath))
                        documentPlug = excelToDocumentPlug.GenerateDocumentPlug(
                            stream.BaseStream, specCertMetadata.TradingPartnerName, specCertMetadata.DocumentType,
                            specCertMetadata.Direction, Maarg.Contracts.GCValidate.SpecCertFileType.X12);

                    if (documentPlug == null)
                    {
                        LogError(logFile, "Document plug generation failed");
                        return(-1);
                    }
                    else
                    {
                        LogInformation(logFile, "Document plug generated successfully");
                    }
                    LogInformation(logFile, "Validating instance file");

                    IFatpipeDocument    fatpipeDocument;
                    EDIValidationResult result = EdiValidator.ValidateEdi(instanceFileData, instanceFileName, specCertFileName, documentPlug, out fatpipeDocument);

                    LogValidationResult(result, logFile);
                }
                catch (Exception ex)
                {
                    LogError(logFile, string.Format("Error encountered during validating {0} file. Error: {1}", instanceFileName, ex.ToString()));
                }
            }

            return(0);
        }
Example #18
0
 public static Stream DownloadTradingPartnerSpecCert(TradingPartnerSpecCertMetadata tradingPartnerSpecCertMetadata, IDalManager dalManager)
 {
     return(dalManager.GetTradingPartnerSpecCert(tradingPartnerSpecCertMetadata));
 }