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