Пример #1
0
        /// <summary>
        /// Generates an XML file (either generates the full XML or an incremental file).
        /// </summary>
        /// <param name="nextTransactionId">Indicates if a full XML file should be generated
        /// or just a partial incremental file.</param>
        /// <returns>Returns an XML stream of the file content.</returns>
        public ParsePollRequestResult GenerateRecordEnsemble(string nextTransactionId)
        {
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "Begin - SyncManager - GenerateRecordEnsemble transaction ID :" + nextTransactionId);
            ParsePollRequestResult pollResult = new ParsePollRequestResult();
            XmlDocument            xmldoc     = null;

            // get data from azure tables
            NextTransactionID reqTransId = this.dalcDbSync.GetRequestorTransactionId(nextTransactionId);

            // Bad Request
            if (reqTransId == null)
            {
                pollResult.RTResponseCode = PollStatus.BadRequest;
            }
            else if (reqTransId.Timestamp.AddHours(72) >= DateTime.Now)
            {
                // Transaction ID not older than 72 hour - ok
                try
                {
                    xmldoc = this.BuildRecordEnsumble(DbSyncScope.INC, reqTransId, "External");
                }
                catch
                {
                    throw;
                }

                xmldoc = XmlCryptography.SignXmlDcoument(Utils.GetFilePathForConfigKey("SignCertificate"), xmldoc);
                pollResult.ResponseData = xmldoc.OuterXml;
                XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmldoc.NameTable);
                namespaceManager.AddNamespace("ren", xmldoc.DocumentElement.NamespaceURI);

                XmlNodeList nodelist = xmldoc.SelectNodes("//ren:Registration", namespaceManager);
                if (nodelist != null && nodelist.Count > 0)
                {
                    this.VerifyRecordEnsembleGenerated(xmldoc);

                    pollResult.RTResponseCode    = PollStatus.Success;
                    pollResult.ResponseData      = xmldoc.OuterXml;
                    pollResult.NextTransactionId = xmldoc.SelectSingleNode("//ren:NextTransactionID", namespaceManager).InnerXml;
                }
                else
                {
                    pollResult.RTResponseCode    = PollStatus.NoNewRecords;
                    pollResult.NextTransactionId = xmldoc.SelectSingleNode("//ren:NextTransactionID", namespaceManager).InnerXml;
                }
            }
            else if (reqTransId.Timestamp.AddHours(72) < DateTime.Now)
            {
                // Transaction ID Stale > 72 hours
                pollResult.RTResponseCode = PollStatus.TransactionIDStale;
            }

            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "End - SyncManager - GenerateRecordEnsemble transaction ID :" + nextTransactionId);
            return(pollResult);
        }
Пример #2
0
        /// <summary>
        /// Generate the XML file of Registrations
        /// </summary>
        /// <param name="scope">Scope of the registration (All/Increment)</param>
        /// <param name="requestedTransactionId">Next Transaction ID</param>
        ///  <param name="requester"> DB Sync requester component</param>
        /// <returns>Xml Document</returns>
        private XmlDocument BuildRecordEnsumble(DbSyncScope scope, NextTransactionID requestedTransactionId, string requester)
        {
            FixedTVBDRegistration[]     fixedTVBDRegistrations     = null;
            LPAuxRegistration[]         lpauxRegistrations         = null;
            MVPDRegistration[]          mvpdRegistrations          = null;
            TempBASRegistration[]       tempBasRegistrations       = null;
            TVReceiveSiteRegistration[] tvreceiveSiteRegistrations = null;
            string wsdbaNameForFile   = Utils.Configuration[Constants.ConfigSettingWSDBAName];
            string generationDateTime = null;
            string recordsFrom        = null;
            string recordsTo          = null;

            DateTime dt = DateTime.Now;

            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager BuildRecordEnsumble() Retrieving data Scope:" + scope + ", RequestedTransactionID:" + requestedTransactionId);
            if (scope == DbSyncScope.ALL)
            {
                // All File
                this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager get all registrations from Azure table");
                fixedTVBDRegistrations     = this.dalcDbSync.GetFixedTVBDRegistration(wsdbaNameForFile, null);
                mvpdRegistrations          = this.dalcDbSync.GetMVPDRegistration(wsdbaNameForFile, null);
                lpauxRegistrations         = this.dalcDbSync.GetLPAuxRegistration(wsdbaNameForFile, null);
                tempBasRegistrations       = this.dalcDbSync.GetTempBASRegistration(wsdbaNameForFile, null);
                tvreceiveSiteRegistrations = this.dalcDbSync.GetTVReceiveSiteRegistration(wsdbaNameForFile, null);
            }
            else
            {
                if (requestedTransactionId != null)
                {
                    this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager get Incrimental registrations from Azure table");
                    recordsFrom = this.BuildDateZ(requestedTransactionId.NextTransactionIdDateTime);
                    DateTime dtfrom = Convert.ToDateTime(requestedTransactionId.NextTransactionIdDateTime);
                    fixedTVBDRegistrations     = this.dalcDbSync.GetFixedTVBDRegistration(wsdbaNameForFile, dtfrom, dt);
                    mvpdRegistrations          = this.dalcDbSync.GetMVPDRegistration(wsdbaNameForFile, dtfrom, dt);
                    lpauxRegistrations         = this.dalcDbSync.GetLPAuxRegistration(wsdbaNameForFile, dtfrom, dt);
                    tempBasRegistrations       = this.dalcDbSync.GetTempBASRegistration(wsdbaNameForFile, dtfrom, dt);
                    tvreceiveSiteRegistrations = this.dalcDbSync.GetTVReceiveSiteRegistration(wsdbaNameForFile, dtfrom, dt);
                }
            }

            NextTransactionID nextTransactionId = new NextTransactionID();

            //// updating existing transactionid for file incemental update when called from Incremental File
            if ((scope == DbSyncScope.INC) && (requester == wsdbaNameForFile))
            {
                nextTransactionId = requestedTransactionId;
                requestedTransactionId.Timestamp                 = dt;
                requestedTransactionId.NextTransactionId         = Guid.NewGuid().ToString();
                requestedTransactionId.NextTransactionIdDateTime = dt;
                this.dalcDbSync.SaveNextTransactionIdInfo(nextTransactionId);
            }
            else
            {
                ////  create new transaction ID remaining cases like File All, Incremental Web Service.
                nextTransactionId.PartitionKey              = scope.ToString();
                nextTransactionId.RowKey                    = Guid.NewGuid().ToString();
                nextTransactionId.Timestamp                 = dt;
                nextTransactionId.NextTransactionId         = Guid.NewGuid().ToString();
                nextTransactionId.NextTransactionIdDateTime = dt;

                if (requester == wsdbaNameForFile)
                {
                    nextTransactionId.WSDBA = wsdbaNameForFile;
                }
                else
                {
                    nextTransactionId.WSDBA = string.Empty;
                }

                this.dalcDbSync.SaveNextTransactionIdInfo(nextTransactionId);
            }

            // ToDo: save value to azure table.
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager:BuildRecordEnsumble generating XML file.");

            // loading out bound XML template
            XmlDocument xmlDocTemplate = new XmlDocument();

            xmlDocTemplate.Load(Utils.GetFilePathForConfigKey("OutBoundXMLTemplate"));

            // Actual File to be generated with default root node
            XmlDocument xmlDocAll = new XmlDocument();

            xmlDocAll.Load(Utils.GetFilePathForConfigKey("RegistrationRecordEnsembleFile"));

            XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDocTemplate.NameTable);

            namespaceManager.AddNamespace("vcard", Constants.VCardXmlns);
            namespaceManager.AddNamespace("ical", Constants.ICalXmlns);
            namespaceManager.AddNamespace("gml", Constants.GMLXmlns);
            namespaceManager.AddNamespace("ren", xmlDocTemplate.DocumentElement.NamespaceURI);
            generationDateTime = this.BuildDateZ(DateTime.Now);

            if (scope == DbSyncScope.ALL)
            {
                recordsFrom = Utils.Configuration["RegistrationsStartDate"];
            }

            recordsTo = generationDateTime;

            // setting the Ensemble details
            XmlNode node = xmlDocAll.SelectSingleNode("//ren:EnsembleDescription", namespaceManager);

            node.SelectSingleNode("//ren:Registrar", namespaceManager).InnerText      = Utils.Configuration["Registrar"];
            node.SelectSingleNode("//ren:GenerationDate", namespaceManager).InnerText = generationDateTime;
            node.SelectSingleNode("//ren:Scope", namespaceManager).InnerText          = scope.ToString();
            node.SelectSingleNode("//ren:RecordsFrom", namespaceManager).InnerText    = recordsFrom;
            node.SelectSingleNode("//ren:RecordsTo", namespaceManager).InnerText      = recordsTo;

            // fixed tvbd registrations
            XmlNode xnode = null;

            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager:BuildRecordEnsumble add Fixed_TVBD registration information to XML file.");
            for (int index = 0; index < fixedTVBDRegistrations.Length; index++)
            {
                this.registrationExist = true;
                node = xmlDocTemplate.SelectSingleNode("//ren:Registration[ren:registrationType='Fixed_TVBD_Registration']", namespaceManager).CloneNode(true);
                RegistrationXmlNodeBuilder.BuildFixedTVBDRegistrationXmlNode(node, fixedTVBDRegistrations[index], namespaceManager);
                xnode          = xmlDocAll.CreateNode(XmlNodeType.Element, "n1:Registration", xmlDocAll.DocumentElement.NamespaceURI);
                xnode.InnerXml = node.InnerXml;
                xmlDocAll.DocumentElement.AppendChild(xnode);
            }

            // LPAux registrations
            xnode = null;
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager:BuildRecordEnsumble add LP-Aux registration information to XML file.");
            for (int index = 0; index < lpauxRegistrations.Length; index++)
            {
                this.registrationExist = true;
                node = xmlDocTemplate.SelectSingleNode("//ren:Registration[ren:registrationType='LP-Aux_Registration']", namespaceManager).CloneNode(true);
                RegistrationXmlNodeBuilder.BuildLPAUXRegistrationXmlNode(node, lpauxRegistrations[index], namespaceManager);
                xnode          = xmlDocAll.CreateNode(XmlNodeType.Element, "n1:Registration", xmlDocAll.DocumentElement.NamespaceURI);
                xnode.InnerXml = node.InnerXml;
                xmlDocAll.DocumentElement.AppendChild(xnode);
            }

            // MVPD registrations
            xnode = null;
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager:BuildRecordEnsumble add MVPD registration information to XML file.");
            for (int index = 0; index < mvpdRegistrations.Length; index++)
            {
                this.registrationExist = true;
                node = xmlDocTemplate.SelectSingleNode("//ren:Registration[ren:registrationType='MVPD_Registration']", namespaceManager).CloneNode(true);
                RegistrationXmlNodeBuilder.BuildMVPDRegistrationXmlNode(node, mvpdRegistrations[index], namespaceManager);
                xnode          = xmlDocAll.CreateNode(XmlNodeType.Element, "n1:Registration", xmlDocAll.DocumentElement.NamespaceURI);
                xnode.InnerXml = node.InnerXml;
                xmlDocAll.DocumentElement.AppendChild(xnode);
            }

            // Temp Bas registrations
            xnode = null;
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager:BuildRecordEnsumble add Temp_BAS registration information to XML file.");
            for (int index = 0; index < tempBasRegistrations.Length; index++)
            {
                this.registrationExist = true;
                node = xmlDocTemplate.SelectSingleNode("//ren:Registration[ren:registrationType='Temp_BAS_Registration']", namespaceManager).CloneNode(true);
                RegistrationXmlNodeBuilder.BuildTBasRegistrationXmlNode(node, tempBasRegistrations[index], namespaceManager);
                xnode          = xmlDocAll.CreateNode(XmlNodeType.Element, "n1:Registration", xmlDocAll.DocumentElement.NamespaceURI);
                xnode.InnerXml = node.InnerXml;
                xmlDocAll.DocumentElement.AppendChild(xnode);
            }

            // TV Receive Site registrations
            xnode = null;
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", Begin - dbSyncManager:BuildRecordEnsumble add TV_Receive_Site registration information to XML file.");
            for (int index = 0; index < tvreceiveSiteRegistrations.Length; index++)
            {
                this.registrationExist = true;
                node = xmlDocTemplate.SelectSingleNode("//ren:Registration[ren:registrationType='TV_Receive_Site_Registration']", namespaceManager).CloneNode(true);
                RegistrationXmlNodeBuilder.BuildTVReceiveSiteRegistrationXmlNode(node, tvreceiveSiteRegistrations[index], namespaceManager);
                xnode          = xmlDocAll.CreateNode(XmlNodeType.Element, "n1:Registration", xmlDocAll.DocumentElement.NamespaceURI);
                xnode.InnerXml = node.InnerXml;
                xmlDocAll.DocumentElement.AppendChild(xnode);
            }

            xnode          = xmlDocAll.CreateNode(XmlNodeType.Element, "n1:NextTransactionID", xmlDocAll.DocumentElement.NamespaceURI);
            xnode.InnerXml = nextTransactionId.NextTransactionId;
            xmlDocAll.DocumentElement.AppendChild(xnode);
            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "WSDBA:" + wsdbaNameForFile + ", End - dbSyncManager BuildRecordEnsumble()");

            return(xmlDocAll);
        }
Пример #3
0
        /// <summary>
        /// Generates an XML file (either generates the full XML).
        /// </summary>
        /// <param name="scope">Indicates if a full XML file should be generated
        /// or just a partial incremental file.</param>
        /// <returns>Returns an XML string of the file content.</returns>
        public string GenerateRecordEnsemble(DbSyncScope scope)
        {
            string wsdba = Utils.Configuration[Constants.ConfigSettingWSDBAName];

            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "Begin - SyncManager - GenerateRecordEnsemble scope :" + scope);
            XmlDocument xmlDocAll            = new XmlDocument();
            string      signedOutputFilePath = null;

            try
            {
                NextTransactionID reqTransId = this.dalcDbSync.GetRequestorTransactionId(wsdba, scope);

                // generating xml Doc
                xmlDocAll = this.BuildRecordEnsumble(scope, reqTransId, wsdba);

                // Registrations count check
                if (this.registrationExist)
                {
                    // Signing the XML
                    xmlDocAll = XmlCryptography.SignXmlDcoument(Utils.GetFilePathForConfigKey("SignCertificate"), xmlDocAll);
                    this.VerifyRecordEnsembleGenerated(xmlDocAll);

                    // <n1:NextTransactionID/>
                    string timeStamp            = "F" + DateTime.Now.ToFileTime() + "\\";
                    string signedOutPutFileName = Utils.Configuration["Registrar"] + ".V" + Utils.Configuration["DBSyncVersionNo"] + "." + scope.ToString() + "." + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + "T" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + "Z";
                    if (!Directory.Exists(Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp))
                    {
                        Directory.CreateDirectory(Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp);
                    }

                    signedOutputFilePath = Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp + signedOutPutFileName + ".xml";

                    XmlTextWriter writer = null;

                    // Saving signed xml to file
                    using (writer = new XmlTextWriter(signedOutputFilePath, null))
                    {
                        writer.Formatting = Formatting.Indented;
                        xmlDocAll.Save(writer);
                    }

                    // compressing the xml file
                    this.CreateZipFile(Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp + signedOutPutFileName + ".xml", Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp + signedOutPutFileName + ".zip", signedOutPutFileName + ".xml");
                    if (scope == DbSyncScope.ALL)
                    {
                        this.dalcDbSync.UploadAllRegistrationsFile(Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp + signedOutPutFileName + ".zip", Utils.Configuration["ALLFileBlobContainer"], signedOutPutFileName + ".zip");
                    }
                    else
                    {
                        this.dalcDbSync.UploadINCRegistrationsFile(Utils.GetOutputDirPathForConfigKey("SignedOutputFilePath") + timeStamp + signedOutPutFileName + ".zip", Utils.Configuration["INCFileBlobContainer"], signedOutPutFileName + ".zip");
                    }
                }
                else
                {
                    // No Records found case.
                    this.auditor.Audit(AuditId.DBSyncFileGenerated, AuditStatus.Success, 0, "File Service : No Records Found");
                    return("No Records Found");
                }
            }
            catch
            {
                throw;
            }

            this.logger.Log(TraceEventType.Information, LoggingMessageId.DBSyncPollerGenericMessage, "End - SyncManager - GenerateRecordEnsemble scope :" + scope);
            return(signedOutputFilePath);
        }