Example #1
0
        public void Save()
        {
            XmlDocument xmlDoc     = new XmlDocument();
            XmlNode     nodProject = xmlDoc.CreateElement("Project");

            xmlDoc.AppendChild(nodProject);

            // Create an XML declaration.
            XmlDeclaration xmldecl;

            xmldecl = xmlDoc.CreateXmlDeclaration("1.0", null, null);
            xmlDoc.InsertBefore(xmldecl, xmlDoc.DocumentElement);

            nodProject.AppendChild(xmlDoc.CreateElement("Name")).InnerText            = Name;
            nodProject.AppendChild(xmlDoc.CreateElement("DateTimeCreated")).InnerText = DateTimeCreated.ToString("o");
            nodProject.AppendChild(xmlDoc.CreateElement("GCDVersion")).InnerText      = GCDVersion;

            if (OnlineParams.Count > 0)
            {
                XmlNode nodUpload = nodProject.AppendChild(xmlDoc.CreateElement("Online"));
                foreach (KeyValuePair <string, string> kvp in OnlineParams)
                {
                    XmlNode kvpItem = nodUpload.AppendChild(xmlDoc.CreateElement(kvp.Key));
                    kvpItem.InnerText = kvp.Value;
                }
            }

            XmlNode nodDescription = nodProject.AppendChild(xmlDoc.CreateElement("Description"));

            if (!string.IsNullOrEmpty(Description))
            {
                nodDescription.InnerText = Description;
            }

            XmlNode nodUnits = nodProject.AppendChild(xmlDoc.CreateElement("Units"));

            nodUnits.AppendChild(xmlDoc.CreateElement("Horizontal")).InnerText = Units.HorizUnit.ToString();
            nodUnits.AppendChild(xmlDoc.CreateElement("Vertical")).InnerText   = Units.VertUnit.ToString();
            nodUnits.AppendChild(xmlDoc.CreateElement("Area")).InnerText       = Units.ArUnit.ToString();
            nodUnits.AppendChild(xmlDoc.CreateElement("Volume")).InnerText     = Units.VolUnit.ToString();

            XmlNode nodArea = nodProject.AppendChild(xmlDoc.CreateElement("CellArea"));

            if (CellArea.As(Units.ArUnit) > 0)
            {
                nodArea.InnerText = CellArea.As(Units.ArUnit).ToString("R", CultureInfo.InvariantCulture);
            }

            if (DEMSurveys.Count > 0)
            {
                XmlNode nodDEMs = nodProject.AppendChild(xmlDoc.CreateElement("DEMSurveys"));
                foreach (DEMSurvey dem in DEMSurveys)
                {
                    XmlNode nodItem = nodDEMs.AppendChild(xmlDoc.CreateElement("DEM"));
                    dem.Serialize(nodItem);
                }
            }

            if (ReferenceSurfaces.Count > 0)
            {
                XmlNode nodSurfaces = nodProject.AppendChild(xmlDoc.CreateElement("ReferenceSurfaces"));
                foreach (Surface surf in ReferenceSurfaces)
                {
                    XmlNode nodItem = nodSurfaces.AppendChild(xmlDoc.CreateElement("ReferenceSurface"));
                    surf.Serialize(nodItem);
                }
            }

            if (Masks.Count > 0)
            {
                XmlNode nodMasks = nodProject.AppendChild(xmlDoc.CreateElement("Masks"));
                Masks.ForEach(x => x.Serialize(nodMasks));
            }

            if (ProfileRoutes.Count > 0)
            {
                XmlNode nodRoutes = nodProject.AppendChild(xmlDoc.CreateElement("ProfileRoutes"));
                ProfileRoutes.ForEach(x => x.Serialize(nodRoutes));
            }

            if (DoDs.Count > 0)
            {
                XmlNode nodDoDs = nodProject.AppendChild(xmlDoc.CreateElement("DoDs"));
                foreach (DoDBase dod in DoDs)
                {
                    dod.Serialize(nodDoDs);
                }
            }

            if (InterComparisons.Count > 0)
            {
                XmlNode nodInter = nodProject.AppendChild(xmlDoc.CreateElement("InterComparisons"));
                InterComparisons.ForEach(x => x.Serialize(nodInter));
            }

            if (MetaData.Count > 0)
            {
                XmlNode nodMetaData = nodProject.AppendChild(xmlDoc.CreateElement("MetaData"));
                foreach (KeyValuePair <string, string> item in MetaData)
                {
                    XmlNode nodItem = nodMetaData.AppendChild(xmlDoc.CreateElement("Item"));
                    nodItem.AppendChild(xmlDoc.CreateElement("Key")).InnerText   = item.Key;
                    nodItem.AppendChild(xmlDoc.CreateElement("Value")).InnerText = item.Value;
                }
            }

            xmlDoc.Save(ProjectFile.FullName);

            try
            {
                SaveRiverscapesProject(ProjectFile);
            }
            catch (Exception ex)
            {
                // Fail silently
                Console.WriteLine("Error saving riverscapes project file.");
                Console.WriteLine(ex.Message);
            }
        }