Example #1
0
        public void SavePendingUpdates(Stream stream, int ddpUpdateId)
        {
            XmlDocument newdoc = new XmlDocument();

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

            var pendingUpdates = new List <PendingDDPUpdate>();

            //Recorrer inmediata si hubiese
            foreach (XmlNode inmediate in newdoc.SelectNodes("/lr:DataDistributionPlan-IncrementalUpdate/lr:Immediate", nsmanager))
            {
                var update = new PendingDDPUpdate();
                update.baseVersion        = inmediate.Attributes["baseImmediateVersionNum"].Value;
                update.ddpUpdateId        = ddpUpdateId;
                update.implementationTime = DateTime.Parse(inmediate.Attributes["targetImplementationAt"].Value);
                update.targetVersion      = inmediate.Attributes["targetImmediateVersionNum"].Value;
                update.type = 0;

                pendingUpdates.Add(update);
            }

            //Recorrer regulares si hubiese
            foreach (XmlNode inmediate in newdoc.SelectNodes("/lr:DataDistributionPlan-IncrementalUpdate/lr:Regular", nsmanager))
            {
                var update = new PendingDDPUpdate();
                update.baseVersion        = inmediate.Attributes["baseRegularVersionNum"].Value;
                update.ddpUpdateId        = ddpUpdateId;
                update.implementationTime = DateTime.Parse(inmediate.Attributes["targetImplementationAt"].Value);
                update.targetVersion      = inmediate.Attributes["targetRegularVersionNum"].Value;
                update.type = 1;

                pendingUpdates.Add(update);
            }

            PendingUpdateManager.Insert(pendingUpdates);
        }
Example #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();
        }