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); }