[mapguide-commits] r6889 - in trunk/Tools/Maestro: Maestro.Base/Editor Maestro.Base/Services Maestro.Editors Maestro.Editors/FeatureSource/Providers/Rdbms Maestro.Editors/FeatureSource/Providers/Wms Maestro.Editors/Properties Maestro.Editors/SymbolDefinition OSGeo.MapGuide.MaestroAPI/ObjectModels OSGeo.MapGuide.MaestroAPI/Resource

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Jul 11 05:55:07 PDT 2012


Author: jng
Date: 2012-07-11 05:55:06 -0700 (Wed, 11 Jul 2012)
New Revision: 6889

Modified:
   trunk/Tools/Maestro/Maestro.Base/Editor/EditorContentBase.cs
   trunk/Tools/Maestro/Maestro.Base/Services/ResourcePreviewerFactory.cs
   trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs
   trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx
   trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs
   trunk/Tools/Maestro/Maestro.Editors/IEditorService.cs
   trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.resx
   trunk/Tools/Maestro/Maestro.Editors/ResourceEditorServiceBase.cs
   trunk/Tools/Maestro/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs
Log:
#2071: Add secured credential support for the following Feature Source editors:
 - WMS
 - RDBMS providers (SQL Server, MySQL, PostgreSQL)

Modified: trunk/Tools/Maestro/Maestro.Base/Editor/EditorContentBase.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Editor/EditorContentBase.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Base/Editor/EditorContentBase.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -305,6 +305,7 @@
         public virtual void Preview()
         {
             var conn = this.Resource.CurrentConnection;
+            _svc.PrePreviewProcess();
             var previewer = ResourcePreviewerFactory.GetPreviewer(conn.ProviderName);
             if (previewer != null)
                 previewer.Preview(this.Resource, this.EditorService);

Modified: trunk/Tools/Maestro/Maestro.Base/Services/ResourcePreviewerFactory.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Services/ResourcePreviewerFactory.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Base/Services/ResourcePreviewerFactory.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -43,12 +43,11 @@
             BusyWaitDialog.Run(Properties.Resources.PrgPreparingResourcePreview, () => {
                 string mapguideRootUrl = (string)conn.GetCustomProperty("BaseUrl");
                 //Save the current resource to another session copy
-                string resId = "Session:" + edSvc.SessionID + "//" + Guid.NewGuid() + "." + res.ResourceType.ToString();
-                edSvc.ResourceService.SetResourceXmlData(resId, ResourceTypeRegistry.Serialize(res));
-    
-                //Copy any resource data
+                string resId = "Session:" + edSvc.SessionID + "//" + res.ResourceType.ToString() + "Preview" + Guid.NewGuid() + "." + res.ResourceType.ToString();
+                
+                edSvc.ResourceService.SaveResourceAs(res, resId);
+                edSvc.ResourceService.CopyResource(res.ResourceID, resId, true);
                 var previewCopy = edSvc.ResourceService.GetResource(resId);
-                res.CopyResourceDataTo(previewCopy);
     
                 //Now feed it to the preview engine
                 return new ResourcePreviewEngine(mapguideRootUrl, edSvc).GeneratePreviewUrl(previewCopy);

Modified: trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -36,9 +36,9 @@
             this.txtPassword = new System.Windows.Forms.TextBox();
             this.label3 = new System.Windows.Forms.Label();
             this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.btnConnect = new System.Windows.Forms.Button();
             this.groupBox2 = new System.Windows.Forms.GroupBox();
-            this.cmbDataStore = new System.Windows.Forms.ComboBox();
+            this.btnBrowseDataStore = new System.Windows.Forms.Button();
+            this.txtDataStore = new System.Windows.Forms.TextBox();
             this.label4 = new System.Windows.Forms.Label();
             this.txtStatus = new System.Windows.Forms.TextBox();
             this.btnTest = new System.Windows.Forms.Button();
@@ -88,7 +88,6 @@
             // groupBox1
             // 
             resources.ApplyResources(this.groupBox1, "groupBox1");
-            this.groupBox1.Controls.Add(this.btnConnect);
             this.groupBox1.Controls.Add(this.txtService);
             this.groupBox1.Controls.Add(this.txtPassword);
             this.groupBox1.Controls.Add(this.label1);
@@ -98,28 +97,28 @@
             this.groupBox1.Name = "groupBox1";
             this.groupBox1.TabStop = false;
             // 
-            // btnConnect
-            // 
-            resources.ApplyResources(this.btnConnect, "btnConnect");
-            this.btnConnect.Name = "btnConnect";
-            this.btnConnect.UseVisualStyleBackColor = true;
-            this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
-            // 
             // groupBox2
             // 
             resources.ApplyResources(this.groupBox2, "groupBox2");
-            this.groupBox2.Controls.Add(this.cmbDataStore);
+            this.groupBox2.Controls.Add(this.btnBrowseDataStore);
+            this.groupBox2.Controls.Add(this.txtDataStore);
             this.groupBox2.Controls.Add(this.label4);
             this.groupBox2.Name = "groupBox2";
             this.groupBox2.TabStop = false;
             // 
-            // cmbDataStore
+            // btnBrowseDataStore
             // 
-            resources.ApplyResources(this.cmbDataStore, "cmbDataStore");
-            this.cmbDataStore.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-            this.cmbDataStore.FormattingEnabled = true;
-            this.cmbDataStore.Name = "cmbDataStore";
+            resources.ApplyResources(this.btnBrowseDataStore, "btnBrowseDataStore");
+            this.btnBrowseDataStore.Name = "btnBrowseDataStore";
+            this.btnBrowseDataStore.UseVisualStyleBackColor = true;
+            this.btnBrowseDataStore.Click += new System.EventHandler(this.btnBrowseDataStore_Click);
             // 
+            // txtDataStore
+            // 
+            resources.ApplyResources(this.txtDataStore, "txtDataStore");
+            this.txtDataStore.Name = "txtDataStore";
+            this.txtDataStore.ReadOnly = true;
+            // 
             // label4
             // 
             resources.ApplyResources(this.label4, "label4");
@@ -157,7 +156,6 @@
 
         private System.Windows.Forms.Label label1;
         private System.Windows.Forms.GroupBox groupBox2;
-        private System.Windows.Forms.ComboBox cmbDataStore;
         private System.Windows.Forms.Label label4;
         private System.Windows.Forms.GroupBox groupBox1;
         private System.Windows.Forms.TextBox txtService;
@@ -165,8 +163,9 @@
         private System.Windows.Forms.Label label3;
         private System.Windows.Forms.Label label2;
         private System.Windows.Forms.TextBox txtUsername;
-        private System.Windows.Forms.Button btnConnect;
         private System.Windows.Forms.TextBox txtStatus;
         private System.Windows.Forms.Button btnTest;
+        private System.Windows.Forms.Button btnBrowseDataStore;
+        private System.Windows.Forms.TextBox txtDataStore;
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -28,6 +28,7 @@
 using OSGeo.MapGuide.ObjectModels.FeatureSource;
 using Maestro.Shared.UI;
 using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.MaestroAPI.Resource;
 using Maestro.Editors.FeatureSource.Providers.Odbc;
 
 namespace Maestro.Editors.FeatureSource.Providers.Rdbms
@@ -45,30 +46,38 @@
             this.HeaderText = this.Title;
         }
 
+        protected override void UnsubscribeEventHandlers()
+        {
+            _service.BeforeSave -= OnBeforeSave;
+            _service.BeforePreview -= OnBeforePreview;
+        }
+
         private IEditorService _service;
         private IFeatureSource _fs;
 
         public override void Bind(IEditorService service)
         {
             _service = service;
+            _service.BeforeSave += OnBeforeSave;
+            _service.BeforePreview += OnBeforePreview;
             _service.RegisterCustomNotifier(this);
             _fs = _service.GetEditedResource() as IFeatureSource;
 
             //Set the field values
             txtService.Text = _fs.GetConnectionProperty("Service");
-            txtUsername.Text = _fs.GetConnectionProperty("Username");
-            txtPassword.Text = _fs.GetConnectionProperty("Password");
 
-            UpdateDataStoreValues(true);
+            //We're gonna follow MG Studio behaviour here which is: Never load the password
+            //and auto trigger dirty state.
+            if (!_service.IsNew)
+            {
+                txtUsername.Text = _fs.GetEncryptedUsername() ?? _fs.GetConnectionProperty("Username");
+                //txtPassword.Text = _fs.GetConnectionProperty("Password");
+                OnResourceChanged();
+            }
 
             //Set initial value of data store if possible
             var dstore = _fs.GetConnectionProperty("DataStore");
-            if (!string.IsNullOrEmpty(dstore) && cmbDataStore.Items.Count > 0)
-            {
-                var idx = cmbDataStore.Items.IndexOf(dstore);
-                if (idx >= 0)
-                    cmbDataStore.SelectedIndex = idx;
-            }
+            txtDataStore.Text = dstore;
 
             //As our connection properties are not CLR properties, 
             //"manually" bind these fields
@@ -79,21 +88,65 @@
 
             txtUsername.TextChanged += (s, e) =>
             {
-                _fs.SetConnectionProperty("Username", txtUsername.Text);
+                if (string.IsNullOrEmpty(txtUsername.Text))
+                    _fs.SetConnectionProperty("Username", null);
+                else
+                    _fs.SetConnectionProperty("Username", txtUsername.Text);
             };
             
             txtPassword.TextChanged += (s, e) =>
             {
-                _fs.SetConnectionProperty("Password", txtPassword.Text);
+                if (string.IsNullOrEmpty(txtPassword.Text))
+                    _fs.SetConnectionProperty("Password", null);
+                else
+                    _fs.SetConnectionProperty("Password", txtPassword.Text);
             };
 
-            cmbDataStore.SelectedIndexChanged += (s, e) =>
+            txtDataStore.TextChanged += (s, e) =>
             {
-                if (cmbDataStore.SelectedItem != null)
-                    _fs.SetConnectionProperty("DataStore", cmbDataStore.SelectedItem.ToString());
+                _fs.SetConnectionProperty("DataStore", txtDataStore.Text);
             };
+
         }
 
+        void OnBeforePreview(object sender, EventArgs e)
+        {
+            WriteEncryptedCredentials();
+        }
+
+        void OnBeforeSave(object sender, CancelEventArgs e)
+        {
+            WriteEncryptedCredentials();
+        }
+
+        private void WriteEncryptedCredentials()
+        {
+            string username = txtUsername.Text;
+            string password = txtPassword.Text;
+
+            if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
+            {
+                if (username != "%MG_USERNAME%" && password != "%MG_PASSWORD%")
+                {
+                    _fs.SetConnectionProperty("Username", "%MG_USERNAME%");
+                    _fs.SetConnectionProperty("Password", "%MG_PASSWORD%");
+                    _fs.SetEncryptedCredentials(username, password);
+                    _service.SyncSessionCopy();
+                }
+            }
+            else if (string.IsNullOrEmpty(username) && string.IsNullOrEmpty(password))
+            {
+                _fs.SetConnectionProperty("Username", null);
+                _fs.SetConnectionProperty("Password", null);
+                try
+                {
+                    _fs.DeleteResourceData("MG_USER_CREDENTIALS");
+                }
+                catch { }
+                _service.SyncSessionCopy();
+            }
+        }
+
         public virtual string Title
         {
             get { return Properties.Resources.RdbmsFeatureSource; }
@@ -105,46 +158,20 @@
             get { throw new NotImplementedException(); }
         }
 
-        private string GetPartialConnectionString()
+        private string GetPartialConnectionStringForDataStoreEnumeration()
         {
             var builder = new System.Data.Common.DbConnectionStringBuilder();
             builder["Service"] = _fs.GetConnectionProperty("Service");
-            builder["Username"] = _fs.GetConnectionProperty("Username");
-            builder["Password"] = _fs.GetConnectionProperty("Password");
+            builder["Username"] = txtUsername.Text; //_fs.GetConnectionProperty("Username");
+            builder["Password"] = txtPassword.Text; //_fs.GetConnectionProperty("Password");
             return builder.ToString();
         }
 
         private void btnConnect_Click(object sender, EventArgs e)
         {
-            UpdateDataStoreValues(false);
+            WriteEncryptedCredentials();
         }
 
-        private void UpdateDataStoreValues(bool silent)
-        {
-            using (new WaitCursor(this))
-            {
-                string[] values = null;
-                string reason = string.Empty;
-                try
-                {
-                    var dstore = _service.FeatureService.EnumerateDataStores(this.Provider, GetPartialConnectionString());
-                    values = ConvertToArray(dstore);
-                }
-                catch (Exception ex) { reason = ex.ToString(); }
-                if (values != null && values.Length > 0)
-                {
-                    cmbDataStore.DataSource = values;
-                }
-                else
-                {
-                    if (!silent)
-                        MessageBox.Show(string.Format(Properties.Resources.FailEnumDataStores, reason));
-
-                    cmbDataStore.DataSource = null;
-                }
-            }
-        }
-
         private static string[] ConvertToArray(OSGeo.MapGuide.ObjectModels.Common.DataStoreList dstore)
         {
             List<string> values = new List<string>();
@@ -160,9 +187,27 @@
             txtStatus.Text = string.Empty;
             using (new WaitCursor(this))
             {
-                _service.SyncSessionCopy();
+                WriteEncryptedCredentials();
                 txtStatus.Text = string.Format(Properties.Resources.FdoConnectionStatus, _fs.TestConnection());
             }
         }
+
+        private void btnBrowseDataStore_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                var dstore = _service.FeatureService.EnumerateDataStores(this.Provider, GetPartialConnectionStringForDataStoreEnumeration());
+                var values = ConvertToArray(dstore);
+                string item = GenericItemSelectionDialog.SelectItem(Properties.Resources.TextSelectDataStore, Properties.Resources.TextSelectDataStore, values);
+                if (item != null)
+                {
+                    txtDataStore.Text = item;
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(string.Format(Properties.Resources.FailEnumDataStores, ex.Message));
+            }
+        }
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx	2012-07-11 12:55:06 UTC (rev 6889)
@@ -112,20 +112,20 @@
     <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   <data name="txtStatus.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="txtStatus.Location" type="System.Drawing.Point, System.Drawing">
-    <value>130, 202</value>
+    <value>130, 178</value>
   </data>
-  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   <data name="txtStatus.Multiline" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -133,7 +133,7 @@
     <value>Vertical</value>
   </data>
   <data name="txtStatus.Size" type="System.Drawing.Size, System.Drawing">
-    <value>303, 38</value>
+    <value>303, 62</value>
   </data>
   <data name="txtStatus.TabIndex" type="System.Int32, mscorlib">
     <value>12</value>
@@ -142,7 +142,7 @@
     <value>txtStatus</value>
   </data>
   <data name=">>txtStatus.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>txtStatus.Parent" xml:space="preserve">
     <value>contentPanel</value>
@@ -154,7 +154,7 @@
     <value>NoControl</value>
   </data>
   <data name="btnTest.Location" type="System.Drawing.Point, System.Drawing">
-    <value>17, 202</value>
+    <value>17, 178</value>
   </data>
   <data name="btnTest.Size" type="System.Drawing.Size, System.Drawing">
     <value>105, 23</value>
@@ -169,7 +169,7 @@
     <value>btnTest</value>
   </data>
   <data name=">>btnTest.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>btnTest.Parent" xml:space="preserve">
     <value>contentPanel</value>
@@ -180,32 +180,86 @@
   <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
-  <data name=">>cmbDataStore.Name" xml:space="preserve">
-    <value>cmbDataStore</value>
+  <data name="btnBrowseDataStore.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
   </data>
-  <data name=">>cmbDataStore.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="btnBrowseDataStore.Location" type="System.Drawing.Point, System.Drawing">
+    <value>363, 22</value>
   </data>
-  <data name=">>cmbDataStore.Parent" xml:space="preserve">
+  <data name="btnBrowseDataStore.Size" type="System.Drawing.Size, System.Drawing">
+    <value>27, 23</value>
+  </data>
+  <data name="btnBrowseDataStore.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="btnBrowseDataStore.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name=">>btnBrowseDataStore.Name" xml:space="preserve">
+    <value>btnBrowseDataStore</value>
+  </data>
+  <data name=">>btnBrowseDataStore.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>btnBrowseDataStore.Parent" xml:space="preserve">
     <value>groupBox2</value>
   </data>
-  <data name=">>cmbDataStore.ZOrder" xml:space="preserve">
+  <data name=">>btnBrowseDataStore.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
+  <data name="txtDataStore.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtDataStore.Location" type="System.Drawing.Point, System.Drawing">
+    <value>80, 24</value>
+  </data>
+  <data name="txtDataStore.Size" type="System.Drawing.Size, System.Drawing">
+    <value>277, 20</value>
+  </data>
+  <data name="txtDataStore.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name=">>txtDataStore.Name" xml:space="preserve">
+    <value>txtDataStore</value>
+  </data>
+  <data name=">>txtDataStore.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>txtDataStore.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>txtDataStore.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 27</value>
+  </data>
+  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
+    <value>58, 13</value>
+  </data>
+  <data name="label4.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label4.Text" xml:space="preserve">
+    <value>Data Store</value>
+  </data>
   <data name=">>label4.Name" xml:space="preserve">
     <value>label4</value>
   </data>
   <data name=">>label4.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>label4.Parent" xml:space="preserve">
     <value>groupBox2</value>
   </data>
   <data name=">>label4.ZOrder" xml:space="preserve">
-    <value>1</value>
+    <value>2</value>
   </data>
   <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>17, 140</value>
+    <value>17, 116</value>
   </data>
   <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
     <value>416, 56</value>
@@ -220,7 +274,7 @@
     <value>groupBox2</value>
   </data>
   <data name=">>groupBox2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>groupBox2.Parent" xml:space="preserve">
     <value>contentPanel</value>
@@ -231,129 +285,57 @@
   <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
-  <data name=">>btnConnect.Name" xml:space="preserve">
-    <value>btnConnect</value>
+  <data name="txtService.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
   </data>
-  <data name=">>btnConnect.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="txtService.Location" type="System.Drawing.Point, System.Drawing">
+    <value>80, 19</value>
   </data>
-  <data name=">>btnConnect.Parent" xml:space="preserve">
-    <value>groupBox1</value>
+  <data name="txtService.Size" type="System.Drawing.Size, System.Drawing">
+    <value>310, 20</value>
   </data>
-  <data name=">>btnConnect.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name="txtService.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
   </data>
   <data name=">>txtService.Name" xml:space="preserve">
     <value>txtService</value>
   </data>
   <data name=">>txtService.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>txtService.Parent" xml:space="preserve">
     <value>groupBox1</value>
   </data>
   <data name=">>txtService.ZOrder" xml:space="preserve">
-    <value>1</value>
+    <value>0</value>
   </data>
-  <data name=">>txtPassword.Name" xml:space="preserve">
-    <value>txtPassword</value>
+  <data name="txtPassword.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
   </data>
-  <data name=">>txtPassword.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name="txtPassword.Location" type="System.Drawing.Point, System.Drawing">
+    <value>80, 71</value>
   </data>
-  <data name=">>txtPassword.Parent" xml:space="preserve">
-    <value>groupBox1</value>
+  <data name="txtPassword.PasswordChar" type="System.Char, mscorlib" xml:space="preserve">
+    <value>*</value>
   </data>
-  <data name=">>txtPassword.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name="txtPassword.Size" type="System.Drawing.Size, System.Drawing">
+    <value>310, 20</value>
   </data>
-  <data name=">>label1.Name" xml:space="preserve">
-    <value>label1</value>
-  </data>
-  <data name=">>label1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label1.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label1.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name=">>label3.Name" xml:space="preserve">
-    <value>label3</value>
-  </data>
-  <data name=">>label3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label3.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label3.ZOrder" xml:space="preserve">
-    <value>4</value>
-  </data>
-  <data name=">>label2.Name" xml:space="preserve">
-    <value>label2</value>
-  </data>
-  <data name=">>label2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label2.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label2.ZOrder" xml:space="preserve">
+  <data name="txtPassword.TabIndex" type="System.Int32, mscorlib">
     <value>5</value>
   </data>
-  <data name=">>txtUsername.Name" xml:space="preserve">
-    <value>txtUsername</value>
+  <data name=">>txtPassword.Name" xml:space="preserve">
+    <value>txtPassword</value>
   </data>
-  <data name=">>txtUsername.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>txtPassword.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>txtUsername.Parent" xml:space="preserve">
+  <data name=">>txtPassword.Parent" xml:space="preserve">
     <value>groupBox1</value>
   </data>
-  <data name=">>txtUsername.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name=">>txtPassword.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>17, 6</value>
-  </data>
-  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>416, 128</value>
-  </data>
-  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
-    <value>6</value>
-  </data>
-  <data name="groupBox1.Text" xml:space="preserve">
-    <value>Connection Properties</value>
-  </data>
-  <data name=">>groupBox1.Name" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>groupBox1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>groupBox1.Parent" xml:space="preserve">
-    <value>contentPanel</value>
-  </data>
-  <data name=">>groupBox1.ZOrder" xml:space="preserve">
-    <value>3</value>
-  </data>
-  <data name="contentPanel.Size" type="System.Drawing.Size, System.Drawing">
-    <value>449, 255</value>
-  </data>
-  <data name=">>contentPanel.Name" xml:space="preserve">
-    <value>contentPanel</value>
-  </data>
-  <data name=">>contentPanel.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>contentPanel.Parent" xml:space="preserve">
-    <value>$this</value>
-  </data>
-  <data name=">>contentPanel.ZOrder" xml:space="preserve">
-    <value>0</value>
-  </data>
   <data name="label1.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -373,62 +355,41 @@
     <value>label1</value>
   </data>
   <data name=">>label1.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>label1.Parent" xml:space="preserve">
     <value>groupBox1</value>
   </data>
   <data name=">>label1.ZOrder" xml:space="preserve">
-    <value>3</value>
+    <value>2</value>
   </data>
-  <data name="txtService.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="txtService.Location" type="System.Drawing.Point, System.Drawing">
-    <value>80, 19</value>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 74</value>
   </data>
-  <data name="txtService.Size" type="System.Drawing.Size, System.Drawing">
-    <value>310, 20</value>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>53, 13</value>
   </data>
-  <data name="txtService.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
   </data>
-  <data name=">>txtService.Name" xml:space="preserve">
-    <value>txtService</value>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Password</value>
   </data>
-  <data name=">>txtService.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>label3.Name" xml:space="preserve">
+    <value>label3</value>
   </data>
-  <data name=">>txtService.Parent" xml:space="preserve">
+  <data name=">>label3.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>label3.Parent" xml:space="preserve">
     <value>groupBox1</value>
   </data>
-  <data name=">>txtService.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <data name="txtUsername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
-  </data>
-  <data name="txtUsername.Location" type="System.Drawing.Point, System.Drawing">
-    <value>80, 45</value>
-  </data>
-  <data name="txtUsername.Size" type="System.Drawing.Size, System.Drawing">
-    <value>310, 20</value>
-  </data>
-  <data name="txtUsername.TabIndex" type="System.Int32, mscorlib">
+  <data name=">>label3.ZOrder" xml:space="preserve">
     <value>3</value>
   </data>
-  <data name=">>txtUsername.Name" xml:space="preserve">
-    <value>txtUsername</value>
-  </data>
-  <data name=">>txtUsername.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>txtUsername.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>txtUsername.ZOrder" xml:space="preserve">
-    <value>6</value>
-  </data>
   <data name="label2.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
@@ -448,145 +409,79 @@
     <value>label2</value>
   </data>
   <data name=">>label2.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>label2.Parent" xml:space="preserve">
     <value>groupBox1</value>
   </data>
   <data name=">>label2.ZOrder" xml:space="preserve">
-    <value>5</value>
+    <value>4</value>
   </data>
-  <data name="txtPassword.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+  <data name="txtUsername.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
-  <data name="txtPassword.Location" type="System.Drawing.Point, System.Drawing">
-    <value>80, 71</value>
+  <data name="txtUsername.Location" type="System.Drawing.Point, System.Drawing">
+    <value>80, 45</value>
   </data>
-  <data name="txtPassword.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="txtUsername.Size" type="System.Drawing.Size, System.Drawing">
     <value>310, 20</value>
   </data>
-  <data name="txtPassword.TabIndex" type="System.Int32, mscorlib">
-    <value>5</value>
+  <data name="txtUsername.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
   </data>
-  <data name=">>txtPassword.Name" xml:space="preserve">
-    <value>txtPassword</value>
+  <data name=">>txtUsername.Name" xml:space="preserve">
+    <value>txtUsername</value>
   </data>
-  <data name=">>txtPassword.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>txtUsername.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>txtPassword.Parent" xml:space="preserve">
+  <data name=">>txtUsername.Parent" xml:space="preserve">
     <value>groupBox1</value>
   </data>
-  <data name=">>txtPassword.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name=">>txtUsername.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>17, 6</value>
   </data>
-  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>13, 74</value>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>416, 104</value>
   </data>
-  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>53, 13</value>
-  </data>
-  <data name="label3.TabIndex" type="System.Int32, mscorlib">
-    <value>4</value>
-  </data>
-  <data name="label3.Text" xml:space="preserve">
-    <value>Password</value>
-  </data>
-  <data name=">>label3.Name" xml:space="preserve">
-    <value>label3</value>
-  </data>
-  <data name=">>label3.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label3.Parent" xml:space="preserve">
-    <value>groupBox1</value>
-  </data>
-  <data name=">>label3.ZOrder" xml:space="preserve">
-    <value>4</value>
-  </data>
-  <data name="btnConnect.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Bottom, Right</value>
-  </data>
-  <data name="btnConnect.Location" type="System.Drawing.Point, System.Drawing">
-    <value>315, 97</value>
-  </data>
-  <data name="btnConnect.Size" type="System.Drawing.Size, System.Drawing">
-    <value>75, 23</value>
-  </data>
-  <data name="btnConnect.TabIndex" type="System.Int32, mscorlib">
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
     <value>6</value>
   </data>
-  <data name="btnConnect.Text" xml:space="preserve">
-    <value>Connect</value>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Connection Properties</value>
   </data>
-  <data name=">>btnConnect.Name" xml:space="preserve">
-    <value>btnConnect</value>
-  </data>
-  <data name=">>btnConnect.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>btnConnect.Parent" xml:space="preserve">
+  <data name=">>groupBox1.Name" xml:space="preserve">
     <value>groupBox1</value>
   </data>
-  <data name=">>btnConnect.ZOrder" xml:space="preserve">
-    <value>0</value>
+  <data name=">>groupBox1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name="cmbDataStore.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
+  <data name=">>groupBox1.Parent" xml:space="preserve">
+    <value>contentPanel</value>
   </data>
-  <data name="cmbDataStore.Location" type="System.Drawing.Point, System.Drawing">
-    <value>80, 24</value>
+  <data name=">>groupBox1.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
-  <data name="cmbDataStore.Size" type="System.Drawing.Size, System.Drawing">
-    <value>310, 21</value>
+  <data name="contentPanel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>449, 255</value>
   </data>
-  <data name="cmbDataStore.TabIndex" type="System.Int32, mscorlib">
-    <value>1</value>
+  <data name=">>contentPanel.Name" xml:space="preserve">
+    <value>contentPanel</value>
   </data>
-  <data name=">>cmbDataStore.Name" xml:space="preserve">
-    <value>cmbDataStore</value>
+  <data name=">>contentPanel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>cmbDataStore.Type" xml:space="preserve">
-    <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>contentPanel.Parent" xml:space="preserve">
+    <value>$this</value>
   </data>
-  <data name=">>cmbDataStore.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>cmbDataStore.ZOrder" xml:space="preserve">
+  <data name=">>contentPanel.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="label4.AutoSize" type="System.Boolean, mscorlib">
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
-  </data>
-  <data name="label4.Location" type="System.Drawing.Point, System.Drawing">
-    <value>13, 27</value>
-  </data>
-  <data name="label4.Size" type="System.Drawing.Size, System.Drawing">
-    <value>58, 13</value>
-  </data>
-  <data name="label4.TabIndex" type="System.Int32, mscorlib">
-    <value>0</value>
-  </data>
-  <data name="label4.Text" xml:space="preserve">
-    <value>Data Store</value>
-  </data>
-  <data name=">>label4.Name" xml:space="preserve">
-    <value>label4</value>
-  </data>
-  <data name=">>label4.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>label4.Parent" xml:space="preserve">
-    <value>groupBox2</value>
-  </data>
-  <data name=">>label4.ZOrder" xml:space="preserve">
-    <value>1</value>
-  </data>
-  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
   </metadata>
   <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
     <value>449, 282</value>
@@ -595,6 +490,6 @@
     <value>RdbmsBaseCtrl</value>
   </data>
   <data name=">>$this.Type" xml:space="preserve">
-    <value>Maestro.Editors.Common.EditorBindableCollapsiblePanel, Maestro.Editors, Version=3.0.0.5610, Culture=neutral, PublicKeyToken=null</value>
+    <value>Maestro.Editors.Common.EditorBindableCollapsiblePanel, Maestro.Editors, Version=5.0.0.6640, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
   </data>
 </root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -25,6 +25,8 @@
 using System.Text;
 using System.Windows.Forms;
 using Maestro.Editors.Common;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.MaestroAPI.Resource;
 using OSGeo.MapGuide.ObjectModels.FeatureSource;
 using Maestro.Shared.UI;
 
@@ -72,14 +74,20 @@
         {
             if (_init)
                 return;
-            _fs.SetConnectionProperty("Username", txtUsername.Text);
+            if (string.IsNullOrEmpty(txtUsername.Text))
+                _fs.SetConnectionProperty("Username", null);
+            else
+                _fs.SetConnectionProperty("Username", txtUsername.Text);
         }
 
         private void txtPassword_TextChanged(object sender, EventArgs e)
         {
             if (_init)
                 return;
-            _fs.SetConnectionProperty("Password", txtPassword.Text);
+            if (string.IsNullOrEmpty(txtPassword.Text))
+                _fs.SetConnectionProperty("Password", null);
+            else
+                _fs.SetConnectionProperty("Password", txtPassword.Text);
         }
 
         private void btnTest_Click(object sender, EventArgs e)
@@ -87,14 +95,42 @@
             txtStatus.Text = string.Empty;
             using (new WaitCursor(this))
             {
-                _service.SyncSessionCopy();
+                WriteEncryptedCredentials();
                 txtStatus.Text = string.Format(Properties.Resources.FdoConnectionStatus, _fs.TestConnection());
             }
         }
 
+        private void WriteEncryptedCredentials()
+        {
+            string username = txtUsername.Text;
+            string password = txtPassword.Text;
+
+            if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
+            {
+                if (username != "%MG_USERNAME%" && password != "%MG_PASSWORD%")
+                {
+                    _fs.SetConnectionProperty("Username", "%MG_USERNAME%");
+                    _fs.SetConnectionProperty("Password", "%MG_PASSWORD%");
+                    _fs.SetEncryptedCredentials(username, password);
+                    _service.SyncSessionCopy();
+                }
+            }
+            else
+            {
+                _fs.SetConnectionProperty("Username", null);
+                _fs.SetConnectionProperty("Password", null);
+                try
+                {
+                    _fs.DeleteResourceData("MG_USER_CREDENTIALS");
+                }
+                catch { }
+                _service.SyncSessionCopy();
+            }
+        }
+
         private void btnAdvanced_Click(object sender, EventArgs e)
         {
-            _service.SyncSessionCopy();
+            WriteEncryptedCredentials();
             var diag = new WmsAdvancedConfigurationDialog(_service);
             if (diag.ShowDialog() == DialogResult.OK)
             {

Modified: trunk/Tools/Maestro/Maestro.Editors/IEditorService.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/IEditorService.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/IEditorService.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -140,6 +140,17 @@
         IResource GetEditedResource();
 
         /// <summary>
+        /// Raises the <see cref="E:Maestro.Editors.IEditorService.BeforePreview"/> event and performs any other pre-preview
+        /// processing tasks
+        /// </summary>
+        void PrePreviewProcess();
+
+        /// <summary>
+        /// Raised before a preview occurs
+        /// </summary>
+        event EventHandler BeforePreview;
+
+        /// <summary>
         /// Raised before a save operation commences
         /// </summary>
         event CancelEventHandler BeforeSave;

Modified: trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.Designer.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.Designer.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -3307,6 +3307,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Select Data Store.
+        /// </summary>
+        internal static string TextSelectDataStore {
+            get {
+                return ResourceManager.GetString("TextSelectDataStore", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to (Selection Only).
         /// </summary>
         internal static string TextSelectionOnly {

Modified: trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.resx	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/Properties/Resources.resx	2012-07-11 12:55:06 UTC (rev 6889)
@@ -5704,4 +5704,7 @@
   <data name="water" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\water.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="TextSelectDataStore" xml:space="preserve">
+    <value>Select Data Store</value>
+  </data>
 </root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Editors/ResourceEditorServiceBase.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/ResourceEditorServiceBase.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/ResourceEditorServiceBase.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -243,9 +243,8 @@
 
             if (!OnBeforeSave())
             {
-                _conn.ResourceService.SaveResourceAs(_editCopy, resourceID);
-                //Don't forget to copy attached resource data!
-                _editCopy.CopyResourceDataTo(resourceID);
+                //_conn.ResourceService.SaveResourceAs(_editCopy, resourceID);
+                _conn.ResourceService.CopyResource(_editCopy.ResourceID, resourceID, true);
                 this.ResourceID = resourceID;
                 this.IsNew = false;
                 this.IsDirty = false;
@@ -484,5 +483,15 @@
         }
 
         public abstract void RunProcess(string processName, params string[] args);
+
+        public void PrePreviewProcess()
+        {
+            SyncSessionCopy();
+            var handler = this.BeforePreview;
+            if (handler != null)
+                handler(this, EventArgs.Empty);
+        }
+
+        public event EventHandler BeforePreview;
     }
 }

Modified: trunk/Tools/Maestro/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -225,5 +225,14 @@
         {
             throw new NotImplementedException();
         }
+
+        public void PrePreviewProcess()
+        {
+            var handler = this.BeforePreview;
+            if (handler != null)
+                handler(this, EventArgs.Empty);
+        }
+
+        public event EventHandler BeforePreview;
     }
 }

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -147,15 +147,26 @@
                 }
             }
 
+            bool bRaise = false;
             if (pr != null)
             {
-                pr.Value = value;
+                if (value != null)
+                    pr.Value = value;
+                else
+                    this.Parameter.Remove(pr);
+                bRaise = true;
             }
             else
             {
-                this.Parameter.Add(new NameValuePairType() { Name = name, Value = value });
+                if (value != null)
+                {
+                    this.Parameter.Add(new NameValuePairType() { Name = name, Value = value });
+                    bRaise = true;
+                }
             }
-            OnPropertyChanged("Parameter");
+
+            if (bRaise)
+                OnPropertyChanged("Parameter");
         }
 
         protected void DetachChangeListeners()

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -62,7 +62,7 @@
         /// Sets the connection property.
         /// </summary>
         /// <param name="name">The name.</param>
-        /// <param name="value">The value.</param>
+        /// <param name="value">The value. If null, the matching parameter is removed from the feature source</param>
         void SetConnectionProperty(string name, string value);
 
         /// <summary>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs	2012-07-11 07:39:52 UTC (rev 6888)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs	2012-07-11 12:55:06 UTC (rev 6889)
@@ -102,6 +102,12 @@
         /// <summary>
         /// Copies the resource data to the specified resource
         /// </summary>
+        /// <remarks>
+        /// Avoid using this method if you are copying a IFeatureSource with MG_USER_CREDENTIALS resource data, as MapGuide will automatically return
+        /// the decrypted username for MG_USER_CREDENTIALS, rendering the resource data invalid for the target resource. Instead use the
+        /// <see cref="M:OSGeo.MapGuide.MaestroAPI.Services.IResourceService.CopyResource"/> method, which will copy the resource and its resource
+        /// data and keep any MG_USER_CREDENTIALS items intact
+        /// </remarks>
         /// <param name="source">The source.</param>
         /// <param name="target">The target.</param>
         public static void CopyResourceDataTo(this IResource source, IResource target)
@@ -125,6 +131,12 @@
         /// <summary>
         /// Copies the resource data to the specified resource
         /// </summary>
+        /// <remarks>
+        /// Avoid using this method if you are copying a IFeatureSource with MG_USER_CREDENTIALS resource data, as MapGuide will automatically return
+        /// the decrypted username for MG_USER_CREDENTIALS, rendering the resource data invalid for the target resource. Instead use the
+        /// <see cref="M:OSGeo.MapGuide.MaestroAPI.Services.IResourceService.CopyResource"/> method, which will copy the resource and its resource
+        /// data and keep any MG_USER_CREDENTIALS items intact
+        /// </remarks>
         /// <param name="source">The source.</param>
         /// <param name="targetID">The target ID.</param>
         public static void CopyResourceDataTo(this IResource source, string targetID)



More information about the mapguide-commits mailing list