예제 #1
0
        public void ProcessPendingUpdates()
        {
            DDPImportHelper helper = new DDPImportHelper();

            using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew, TimeSpan.FromMinutes(10)))
            {
                try
                {
                    var ddpvermgr = new DDPVersionManager();

                    var pendings = PendingUpdateManager.GetPendingUpdates();
                    foreach (var pending in pendings)
                    {
                        DDPVersion ver = null;
                        if (pending.type == 0)
                        {
                            ver = ddpvermgr.GetInmediateDDPVersion(pending.targetVersion);
                        }
                        else
                        {
                            ver = ddpvermgr.GetRegularDDPVersion(pending.targetVersion);
                        }

                        if (ver != null)
                        {
                            log.Info(string.Format("ProcessPendingUpdates: version {0} already exists skping ...", pending.targetVersion));
                            continue;
                        }

                        helper.UpdateIncrementalOrRegular(pending);
                    }

                    using (var d = new PendingUpdatesDataAccess())
                    {
                        d.Remove(pendings);
                    }
                }
                catch (Exception ex)
                {
                    log.Error("ProcessPendingUpdates: error!", ex);
                }
                ts.Complete();
            }
        }
예제 #2
0
        public void UpdateIncrementalOrRegular(PendingDDPUpdate pending)
        {
            XmlDocument newdoc = new XmlDocument();

            ICSharpCode.SharpZipLib.Zip.ZipFile zipFile = new ICSharpCode.SharpZipLib.Zip.ZipFile(new MemoryStream(pending.DDPUpdate.DDPFile.ToArray()));
            Stream stream = zipFile.GetInputStream(0);

            newdoc.Load(stream);

            //---------------------------------------------------
            XmlNamespaceManager nsmanager = new XmlNamespaceManager(newdoc.NameTable);

            nsmanager.AddNamespace("lr", "http://gisis.imo.org/XML/LRIT/ddp/2008");
            //---------------------------------------------------

            XmlNode root = newdoc.SelectSingleNode("/lr:DataDistributionPlan-IncrementalUpdate", nsmanager);

            //Get ddp to modify
            var verman = new DDPVersionManager();

            //Just get what is ready from the XML
            string qstr = string.Format("/lr:DataDistributionPlan-IncrementalUpdate/lr:{0}[@base{0}VersionNum='{1}' and @target{0}VersionNum='{2}']",
                                        pending.type == 0?"Immediate":"Regular", pending.baseVersion, pending.targetVersion);

            //Ontener el nodo "inmediate" o "regular"
            XmlNode inmediate = newdoc.SelectSingleNode(qstr, nsmanager);

            string   baseVer   = inmediate.Attributes[pending.type == 0 ? "baseImmediateVersionNum" : "baseRegularVersionNum"].Value;
            string   targetVer = inmediate.Attributes[pending.type == 0 ? "targetImmediateVersionNum" : "targetRegularVersionNum"].Value;
            DateTime targetImplementationAt = DateTime.Parse(inmediate.Attributes["targetImplementationAt"].Value);

            var ddpver = pending.type == 0 ? verman.GetInmediateDDPVersion(baseVer) : verman.GetRegularDDPVersion(baseVer);

            if (ddpver == null)
            {
                log.Error(string.Format("UpdateIncrementalOrRegular: Unable to get old DDP file with version {1} type:{0}--> aborting", baseVer, pending.type));
                return;
            }

            byte[]       rawbuffer = ddpver.DDPFile.ToArray();
            MemoryStream xms       = new MemoryStream(rawbuffer);
            XmlDocument  olddoc    = new XmlDocument();

            if (rawbuffer[0] == 0x50 && rawbuffer[1] == 0x4b)
            {
                ICSharpCode.SharpZipLib.Zip.ZipFile zipFile0 = new ICSharpCode.SharpZipLib.Zip.ZipFile(xms);
                Stream s = zipFile0.GetInputStream(0);
                olddoc.Load(s);
            }
            else
            {
                olddoc.Load(xms);
            }

            //Generar nueva version del xml mezclando los dos docuemtnos;
            var theNewXml = MixDocs(inmediate, olddoc, nsmanager);

            string newver = ddpver.regularVer + ":" + targetVer;

            if (pending.type != 0)
            {
                newver = targetVer + ":" + ddpver.inmediateVer;
            }

            var ms = new MemoryStream(300000);

            theNewXml.Save(ms);
            var raw = ms.ToArray();

            File.WriteAllBytes(@"c:\" + newver.Split(':')[0] + "x" + newver.Split(':')[1] + ".textos", raw);

            Import(theNewXml, DDPManager.InsertCompleteDDP(newver, targetImplementationAt, raw));
            log.Info("UpdateIncrementalOrRegular: New version ready => " + newver);

            stream.Close();
        }