Author: apadilla
Date: Thu Jan  6 09:54:01 2011
New Revision: 1055807

URL: http://svn.apache.org/viewvc?rev=1055807&view=rev
Log:
[NPANDAY-239]
- revised writing of remote repository to settings.xml
- adding a maven repository will not strip off comments in settings.xml

Modified:
    
incubator/npanday/trunk/dotnet/assemblies/NPanday.Model.Settings/src/main/csharp/SettingsUtil.cs
    
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/AddArtifactsForm.cs

Modified: 
incubator/npanday/trunk/dotnet/assemblies/NPanday.Model.Settings/src/main/csharp/SettingsUtil.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.Model.Settings/src/main/csharp/SettingsUtil.cs?rev=1055807&r1=1055806&r2=1055807&view=diff
==============================================================================
--- 
incubator/npanday/trunk/dotnet/assemblies/NPanday.Model.Settings/src/main/csharp/SettingsUtil.cs
 (original)
+++ 
incubator/npanday/trunk/dotnet/assemblies/NPanday.Model.Settings/src/main/csharp/SettingsUtil.cs
 Thu Jan  6 09:54:01 2011
@@ -49,6 +49,8 @@ namespace NPanday.Model.Setting
 
     public static class SettingsUtil
     {
+        public static string defaultProfileID = "NPanday.id";
+
         #region GetDefaultSettingsPath()
         /// <summary>
         /// Gets the default settings path.
@@ -229,13 +231,92 @@ namespace NPanday.Model.Setting
         /// <param name="path">The settings path</param>
         public static void WriteSettings(Settings settings, string path)
         {
-            XmlSerializer serializer = new XmlSerializer(typeof(Settings));
-            TextWriter writer = new StreamWriter(path);
-            serializer.Serialize(writer, settings);
-            writer.Close();
+            // read original settings.xml
+            XmlDocument settingsXmlDoc = new XmlDocument();
+            settingsXmlDoc.Load(path);
+
+            Profile profile = GetProfile(settings, defaultProfileID);
+            //convert NPanday Profile to XmlNode
+            XmlNode newProfileNode = new XmlDocument();
+            ((XmlDocument) 
newProfileNode).LoadXml(SerializeProfileToXml(profile));
+
+            newProfileNode = newProfileNode.SelectSingleNode("//profile[id='" 
+ defaultProfileID + "']");
+            XmlNode importedNewProfileNode = 
settingsXmlDoc.ImportNode(newProfileNode, true);
+
+            // search for npanday profile in settings.xml
+            XmlNode oldProfileNode = 
settingsXmlDoc.SelectSingleNode("//profiles/profile[id='" + defaultProfileID + 
"']");
+            if (oldProfileNode != null)
+            {
+                oldProfileNode.ParentNode.ReplaceChild(importedNewProfileNode, 
oldProfileNode);
+            }
+            else
+            {
+                XmlNode profilesNode = 
settingsXmlDoc.SelectSingleNode("//profiles");
+                if (profilesNode == null)
+                {
+                    // create profiles
+                    profilesNode = settingsXmlDoc.CreateElement("", 
"profiles", "");
+                    settingsXmlDoc.DocumentElement.AppendChild(profilesNode);
+                }
+
+                profilesNode.AppendChild(importedNewProfileNode);
+            }
+
+            bool createActiveProfile = false;
+            XmlNode activeProfileNode;
+
+            // search for activeProfiles in settings.xml
+            XmlNode activeProfilesNode = 
settingsXmlDoc.SelectSingleNode("//activeProfiles");
+            if (activeProfilesNode == null)
+            {
+                activeProfilesNode = settingsXmlDoc.CreateElement("", 
"activeProfiles", "");
+                settingsXmlDoc.DocumentElement.AppendChild(activeProfilesNode);
+                createActiveProfile = true;
+            }
+            else
+            {
+                activeProfileNode = 
settingsXmlDoc.SelectSingleNode("//activeProfiles/activeProfile[.='" + 
defaultProfileID + "']");
+                if (activeProfileNode == null)
+                {
+                    createActiveProfile = true;
+                }
+            }
+
+            // add NPanday.id to <activeProfiles>
+            if (createActiveProfile)
+            {
+                activeProfileNode = settingsXmlDoc.CreateElement("", 
"activeProfile", "");
+                activeProfileNode.InnerText = defaultProfileID;
+                activeProfilesNode.AppendChild(activeProfileNode);
+            }
+
+            settingsXmlDoc.Save(path);
         }
         #endregion
 
+
+        private static string SerializeProfileToXml(Profile profile)
+        {
+            XmlRootAttribute profileRoot = new XmlRootAttribute("profile");
+
+            XmlAttributes attributes = new XmlAttributes();
+            attributes.XmlRoot = profileRoot;
+
+            XmlAttributeOverrides overrides = new XmlAttributeOverrides();
+            overrides.Add(profile.GetType(), attributes);
+
+            XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces();
+            xmlnsEmpty.Add("", "");
+
+            XmlSerializer xs = new XmlSerializer(profile.GetType(), overrides);
+            StringWriter xout = new StringWriter();
+            xs.Serialize(xout, profile, xmlnsEmpty);
+            String SerializedProfile = xout.ToString();
+            xout.Close();
+
+            return SerializedProfile;
+        }
+
         #region AddActiveProfile(Settings, string)
         /// <summary>
         /// Add a profile as active
@@ -487,4 +568,3 @@ namespace NPanday.Model.Setting
 
     #endregion
 }
-

Modified: 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/AddArtifactsForm.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/AddArtifactsForm.cs?rev=1055807&r1=1055806&r2=1055807&view=diff
==============================================================================
--- 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/AddArtifactsForm.cs
 (original)
+++ 
incubator/npanday/trunk/dotnet/assemblies/NPanday.VisualStudio.Addin/src/main/csharp/NPanday/VisualStudio/Addin/AddArtifactsForm.cs
 Thu Jan  6 09:54:01 2011
@@ -59,7 +59,6 @@ namespace NPanday.VisualStudio.Addin
 
         private string settingsPath;
         private Settings settings;
-        private string defaultProfileID = "NPanday.id";
         private NPanday.Model.Setting.Profile defaultProfile;
         private NPanday.Model.Setting.Repository selectedRepo;
         private string prevSelectedRepoUrl = string.Empty;
@@ -612,14 +611,14 @@ namespace NPanday.VisualStudio.Addin
                 if (defaultProfile == null)
                 {
                     defaultProfile = new NPanday.Model.Setting.Profile();
-                    defaultProfile.id = defaultProfileID;
+                    defaultProfile.id = SettingsUtil.defaultProfileID; ;
                 }
                 
                 // add repository to profile
                 selectedRepo = 
SettingsUtil.AddRepositoryToProfile(defaultProfile, selectedUrl, 
checkBoxRelease.Checked, checkBoxSnapshot.Checked, settings);
                 
                 // make NPanday.id profile active
-                SettingsUtil.AddActiveProfile(settings, defaultProfileID);
+                SettingsUtil.AddActiveProfile(settings, 
SettingsUtil.defaultProfileID);
 
                 // write to Settings.xml
                 SettingsUtil.WriteSettings(settings, settingsPath);
@@ -928,7 +927,7 @@ namespace NPanday.VisualStudio.Addin
                 loadSettings();
             }
 
-            return SettingsUtil.GetProfile(settings, defaultProfileID);
+            return SettingsUtil.GetProfile(settings, 
SettingsUtil.defaultProfileID);
         }
 
         private NPanday.Model.Setting.Repository getRepository(string url)


Reply via email to