[mapguide-commits] r6891 - in branches/maestro-4.0.x: Maestro.Base/Editor Maestro.Base/Services Maestro.Editors Maestro.Editors/FeatureSource/Providers Maestro.Editors/FeatureSource/Providers/Rdbms Maestro.Editors/FeatureSource/Providers/Wms Maestro.Editors/Properties Maestro.Editors/SymbolDefinition MaestroAPITests OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/ObjectModels OSGeo.MapGuide.MaestroAPI/Resource
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Wed Jul 11 06:48:29 PDT 2012
Author: jng
Date: 2012-07-11 06:48:29 -0700 (Wed, 11 Jul 2012)
New Revision: 6891
Added:
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.Designer.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.resx
branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/CredentialWriter.cs
Modified:
branches/maestro-4.0.x/Maestro.Base/Editor/EditorContentBase.cs
branches/maestro-4.0.x/Maestro.Base/Services/ResourcePreviewerFactory.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.Designer.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.resx
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx
branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs
branches/maestro-4.0.x/Maestro.Editors/IEditorService.cs
branches/maestro-4.0.x/Maestro.Editors/Maestro.Editors.csproj
branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.Designer.cs
branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.resx
branches/maestro-4.0.x/Maestro.Editors/ResourceEditorServiceBase.cs
branches/maestro-4.0.x/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs
branches/maestro-4.0.x/MaestroAPITests/HttpConnectionTests.cs
branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs
branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs
branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs
Log:
#2069, #2071: Backport these crucial changes to 4.0.x
Modified: branches/maestro-4.0.x/Maestro.Base/Editor/EditorContentBase.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Base/Editor/EditorContentBase.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Base/Editor/EditorContentBase.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -270,6 +270,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: branches/maestro-4.0.x/Maestro.Base/Services/ResourcePreviewerFactory.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Base/Services/ResourcePreviewerFactory.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Base/Services/ResourcePreviewerFactory.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -40,19 +40,16 @@
{
IServerConnection conn = res.CurrentConnection;
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
var url = new ResourcePreviewEngine(mapguideRootUrl, edSvc).GeneratePreviewUrl(previewCopy);
var launcher = ServiceRegistry.GetService<UrlLauncherService>();
-
launcher.OpenUrl(url);
}
Modified: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.Designer.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.Designer.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.Designer.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -47,6 +47,7 @@
this.pickAnAliasedFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pickAnAliasedDirectoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mGDATAFILEPATHToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.lnkSetCredentials = new System.Windows.Forms.LinkLabel();
this.contentPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grdConnectionParameters)).BeginInit();
this.ctxEnumerable.SuspendLayout();
@@ -55,6 +56,7 @@
//
// contentPanel
//
+ this.contentPanel.Controls.Add(this.lnkSetCredentials);
this.contentPanel.Controls.Add(this.txtTestResult);
this.contentPanel.Controls.Add(this.btnTest);
this.contentPanel.Controls.Add(this.cmbLongTransaction);
@@ -86,10 +88,10 @@
this.grdConnectionParameters.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.grdConnectionParameters.Name = "grdConnectionParameters";
this.grdConnectionParameters.RowHeadersVisible = false;
+ this.grdConnectionParameters.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.grdConnectionParameters_CellPainting);
this.grdConnectionParameters.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.grdConnectionParameters_CellValueChanged);
+ this.grdConnectionParameters.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.grdConnectionParameters_EditingControlShowing);
this.grdConnectionParameters.MouseClick += new System.Windows.Forms.MouseEventHandler(this.grdConnectionParameters_MouseClick);
- this.grdConnectionParameters.CellPainting += new System.Windows.Forms.DataGridViewCellPaintingEventHandler(this.grdConnectionParameters_CellPainting);
- this.grdConnectionParameters.EditingControlShowing += new System.Windows.Forms.DataGridViewEditingControlShowingEventHandler(this.grdConnectionParameters_EditingControlShowing);
//
// label2
//
@@ -180,12 +182,18 @@
resources.ApplyResources(this.mGDATAFILEPATHToolStripMenuItem, "mGDATAFILEPATHToolStripMenuItem");
this.mGDATAFILEPATHToolStripMenuItem.Click += new System.EventHandler(this.useActiveResourceDataFile_Click);
//
+ // lnkSetCredentials
+ //
+ resources.ApplyResources(this.lnkSetCredentials, "lnkSetCredentials");
+ this.lnkSetCredentials.Name = "lnkSetCredentials";
+ this.lnkSetCredentials.TabStop = true;
+ this.lnkSetCredentials.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnkSetCredentials_LinkClicked);
+ //
// GenericCtrl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
- this.HeaderText = "Feature Source (using Generic Editor)";
+ resources.ApplyResources(this, "$this");
this.Name = "GenericCtrl";
- resources.ApplyResources(this, "$this");
this.Controls.SetChildIndex(this.contentPanel, 0);
this.contentPanel.ResumeLayout(false);
this.contentPanel.PerformLayout();
@@ -215,5 +223,6 @@
private System.Windows.Forms.ToolStripMenuItem pickAnAliasedDirectoryToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem mGDATAFILEPATHToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem pickADataStoreFromListToolStripMenuItem;
+ private System.Windows.Forms.LinkLabel lnkSetCredentials;
}
}
Modified: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -78,6 +78,8 @@
private void InitGrid()
{
+ grdConnectionParameters.Rows.Clear();
+ grdConnectionParameters.Columns.Clear();
var prov = _service.FeatureService.GetFeatureProvider(_fs.Provider);
var colName = new DataGridViewColumn();
@@ -374,5 +376,28 @@
_fs.SetConnectionProperty(name, value == null ? string.Empty : value.ToString());
}
}
+
+ private void lnkSetCredentials_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ var prov = _service.FeatureService.GetFeatureProvider(_fs.Provider);
+ var connProps = new List<string>();
+ foreach (var p in prov.ConnectionProperties)
+ {
+ if (!p.Enumerable)
+ connProps.Add(p.Name);
+ }
+ using (var diag = new SetCredentialsDialog(connProps.ToArray()))
+ {
+ if (diag.ShowDialog() == DialogResult.OK)
+ {
+ _fs.SetConnectionProperty(diag.UserProperty, "%MG_USERNAME%");
+ _fs.SetConnectionProperty(diag.PasswordProperty, "%MG_PASSWORD%");
+ _fs.SetEncryptedCredentials(diag.Username, diag.Password);
+ _service.SyncSessionCopy();
+ InitGrid();
+ resDataCtrl.Init(_service);
+ }
+ }
+ }
}
}
Modified: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.resx
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.resx 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/GenericCtrl.resx 2012-07-11 13:48:29 UTC (rev 6891)
@@ -112,20 +112,47 @@
<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="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ <data name="lnkSetCredentials.AutoSize" type="System.Boolean, mscorlib">
+ <value>True</value>
+ </data>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="lnkSetCredentials.Location" type="System.Drawing.Point, System.Drawing">
+ <value>137, 46</value>
+ </data>
+ <data name="lnkSetCredentials.Size" type="System.Drawing.Size, System.Drawing">
+ <value>78, 13</value>
+ </data>
+ <data name="lnkSetCredentials.TabIndex" type="System.Int32, mscorlib">
+ <value>11</value>
+ </data>
+ <data name="lnkSetCredentials.Text" xml:space="preserve">
+ <value>Set Credentials</value>
+ </data>
+ <data name=">>lnkSetCredentials.Name" xml:space="preserve">
+ <value>lnkSetCredentials</value>
+ </data>
+ <data name=">>lnkSetCredentials.Type" xml:space="preserve">
+ <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name=">>lnkSetCredentials.Parent" xml:space="preserve">
+ <value>contentPanel</value>
+ </data>
+ <data name=">>lnkSetCredentials.ZOrder" xml:space="preserve">
+ <value>0</value>
+ </data>
+ <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtTestResult.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
- <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="txtTestResult.Location" type="System.Drawing.Point, System.Drawing">
<value>154, 326</value>
</data>
- <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="txtTestResult.Multiline" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -142,13 +169,13 @@
<value>txtTestResult</value>
</data>
<data name=">>txtTestResult.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=">>txtTestResult.Parent" xml:space="preserve">
<value>contentPanel</value>
</data>
<data name=">>txtTestResult.ZOrder" xml:space="preserve">
- <value>0</value>
+ <value>1</value>
</data>
<data name="btnTest.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -169,13 +196,13 @@
<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>
</data>
<data name=">>btnTest.ZOrder" xml:space="preserve">
- <value>1</value>
+ <value>2</value>
</data>
<data name="cmbLongTransaction.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
@@ -193,13 +220,13 @@
<value>cmbLongTransaction</value>
</data>
<data name=">>cmbLongTransaction.Type" xml:space="preserve">
- <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>cmbLongTransaction.Parent" xml:space="preserve">
<value>contentPanel</value>
</data>
<data name=">>cmbLongTransaction.ZOrder" xml:space="preserve">
- <value>2</value>
+ <value>3</value>
</data>
<data name="label4.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left</value>
@@ -223,13 +250,13 @@
<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>contentPanel</value>
</data>
<data name=">>label4.ZOrder" xml:space="preserve">
- <value>3</value>
+ <value>4</value>
</data>
<data name="resDataCtrl.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
@@ -247,13 +274,13 @@
<value>resDataCtrl</value>
</data>
<data name=">>resDataCtrl.Type" xml:space="preserve">
- <value>Maestro.Editors.Common.ResourceDataCtrl, Maestro.Editors, Version=3.0.0.5676, Culture=neutral, PublicKeyToken=null</value>
+ <value>Maestro.Editors.Common.ResourceDataCtrl, Maestro.Editors, Version=5.0.0.6640, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
</data>
<data name=">>resDataCtrl.Parent" xml:space="preserve">
<value>contentPanel</value>
</data>
<data name=">>resDataCtrl.ZOrder" xml:space="preserve">
- <value>4</value>
+ <value>5</value>
</data>
<data name="label3.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -274,13 +301,13 @@
<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>
+ <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>contentPanel</value>
</data>
<data name=">>label3.ZOrder" xml:space="preserve">
- <value>5</value>
+ <value>6</value>
</data>
<data name="label2.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -301,13 +328,13 @@
<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>contentPanel</value>
</data>
<data name=">>label2.ZOrder" xml:space="preserve">
- <value>6</value>
+ <value>7</value>
</data>
<data name="grdConnectionParameters.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left</value>
@@ -325,13 +352,13 @@
<value>grdConnectionParameters</value>
</data>
<data name=">>grdConnectionParameters.Type" xml:space="preserve">
- <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.DataGridView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>grdConnectionParameters.Parent" xml:space="preserve">
<value>contentPanel</value>
</data>
<data name=">>grdConnectionParameters.ZOrder" xml:space="preserve">
- <value>7</value>
+ <value>8</value>
</data>
<data name="txtProvider.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
@@ -349,13 +376,13 @@
<value>txtProvider</value>
</data>
<data name=">>txtProvider.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=">>txtProvider.Parent" xml:space="preserve">
<value>contentPanel</value>
</data>
<data name=">>txtProvider.ZOrder" xml:space="preserve">
- <value>8</value>
+ <value>9</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@@ -376,13 +403,13 @@
<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>contentPanel</value>
</data>
<data name=">>label1.ZOrder" xml:space="preserve">
- <value>9</value>
+ <value>10</value>
</data>
<data name="contentPanel.Size" type="System.Drawing.Size, System.Drawing">
<value>683, 372</value>
@@ -391,26 +418,17 @@
<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>
+ <value>System.Windows.Forms.Panel, System.Windows.Forms, Version=4.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>2</value>
+ <value>0</value>
</data>
- <metadata name="ctxEnumerable.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <metadata name="ctxEnumerable.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
- <data name="ctxEnumerable.Size" type="System.Drawing.Size, System.Drawing">
- <value>208, 48</value>
- </data>
- <data name=">>ctxEnumerable.Name" xml:space="preserve">
- <value>ctxEnumerable</value>
- </data>
- <data name=">>ctxEnumerable.Type" xml:space="preserve">
- <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
<data name="pickAValueToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>207, 22</value>
</data>
@@ -423,18 +441,18 @@
<data name="pickADataStoreFromListToolStripMenuItem.Text" xml:space="preserve">
<value>Pick a data store from list</value>
</data>
- <metadata name="ctxProperty.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
- <value>149, 17</value>
- </metadata>
- <data name="ctxProperty.Size" type="System.Drawing.Size, System.Drawing">
- <value>221, 70</value>
+ <data name="ctxEnumerable.Size" type="System.Drawing.Size, System.Drawing">
+ <value>208, 48</value>
</data>
- <data name=">>ctxProperty.Name" xml:space="preserve">
- <value>ctxProperty</value>
+ <data name=">>ctxEnumerable.Name" xml:space="preserve">
+ <value>ctxEnumerable</value>
</data>
- <data name=">>ctxProperty.Type" xml:space="preserve">
- <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <data name=">>ctxEnumerable.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
+ <metadata name="ctxProperty.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+ <value>149, 17</value>
+ </metadata>
<data name="pickAnAliasedFileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>220, 22</value>
</data>
@@ -453,9 +471,21 @@
<data name="mGDATAFILEPATHToolStripMenuItem.Text" xml:space="preserve">
<value>Use active resource data file</value>
</data>
- <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <data name="ctxProperty.Size" type="System.Drawing.Size, System.Drawing">
+ <value>221, 70</value>
+ </data>
+ <data name=">>ctxProperty.Name" xml:space="preserve">
+ <value>ctxProperty</value>
+ </data>
+ <data name=">>ctxProperty.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
+ <data name="$this.HeaderText" xml:space="preserve">
+ <value>Feature Source (using Generic Editor)</value>
+ </data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>683, 399</value>
</data>
@@ -463,36 +493,36 @@
<value>pickAValueToolStripMenuItem</value>
</data>
<data name=">>pickAValueToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>pickADataStoreFromListToolStripMenuItem.Name" xml:space="preserve">
<value>pickADataStoreFromListToolStripMenuItem</value>
</data>
<data name=">>pickADataStoreFromListToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>pickAnAliasedFileToolStripMenuItem.Name" xml:space="preserve">
<value>pickAnAliasedFileToolStripMenuItem</value>
</data>
<data name=">>pickAnAliasedFileToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>pickAnAliasedDirectoryToolStripMenuItem.Name" xml:space="preserve">
<value>pickAnAliasedDirectoryToolStripMenuItem</value>
</data>
<data name=">>pickAnAliasedDirectoryToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>mGDATAFILEPATHToolStripMenuItem.Name" xml:space="preserve">
<value>mGDATAFILEPATHToolStripMenuItem</value>
</data>
<data name=">>mGDATAFILEPATHToolStripMenuItem.Type" xml:space="preserve">
- <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name=">>$this.Name" xml:space="preserve">
<value>GenericCtrl</value>
</data>
<data name=">>$this.Type" xml:space="preserve">
- <value>Maestro.Editors.Common.EditorBindableCollapsiblePanel, Maestro.Editors, Version=3.0.0.5676, 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: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.Designer.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Rdbms/RdbmsBaseCtrl.resx 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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
Copied: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.Designer.cs (from rev 6890, trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.Designer.cs)
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.Designer.cs (rev 0)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.Designer.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -0,0 +1,190 @@
+namespace Maestro.Editors.FeatureSource.Providers
+{
+ partial class SetCredentialsDialog
+ {
+ /// <summary>
+ /// Required designer variable.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Clean up any resources being used.
+ /// </summary>
+ /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ /// <summary>
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txtUserProperty = new System.Windows.Forms.TextBox();
+ this.txtPasswordProperty = new System.Windows.Forms.TextBox();
+ this.txtPassword = new System.Windows.Forms.TextBox();
+ this.txtUsername = new System.Windows.Forms.TextBox();
+ this.btnUserProperty = new System.Windows.Forms.Button();
+ this.btnPasswordProperty = new System.Windows.Forms.Button();
+ this.btnOK = new System.Windows.Forms.Button();
+ this.btnCancel = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(13, 13);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(55, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Username";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(13, 87);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(53, 13);
+ this.label2.TabIndex = 1;
+ this.label2.Text = "Password";
+ //
+ // txtUserProperty
+ //
+ this.txtUserProperty.Location = new System.Drawing.Point(92, 10);
+ this.txtUserProperty.Name = "txtUserProperty";
+ this.txtUserProperty.ReadOnly = true;
+ this.txtUserProperty.Size = new System.Drawing.Size(132, 20);
+ this.txtUserProperty.TabIndex = 2;
+ //
+ // txtPasswordProperty
+ //
+ this.txtPasswordProperty.Location = new System.Drawing.Point(92, 84);
+ this.txtPasswordProperty.Name = "txtPasswordProperty";
+ this.txtPasswordProperty.ReadOnly = true;
+ this.txtPasswordProperty.Size = new System.Drawing.Size(132, 20);
+ this.txtPasswordProperty.TabIndex = 3;
+ //
+ // txtPassword
+ //
+ this.txtPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtPassword.Location = new System.Drawing.Point(92, 110);
+ this.txtPassword.Name = "txtPassword";
+ this.txtPassword.PasswordChar = '*';
+ this.txtPassword.Size = new System.Drawing.Size(351, 20);
+ this.txtPassword.TabIndex = 5;
+ this.txtPassword.TextChanged += new System.EventHandler(this.txtPassword_TextChanged);
+ //
+ // txtUsername
+ //
+ this.txtUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtUsername.Location = new System.Drawing.Point(92, 36);
+ this.txtUsername.Name = "txtUsername";
+ this.txtUsername.Size = new System.Drawing.Size(351, 20);
+ this.txtUsername.TabIndex = 4;
+ this.txtUsername.TextChanged += new System.EventHandler(this.txtUsername_TextChanged);
+ //
+ // btnUserProperty
+ //
+ this.btnUserProperty.Location = new System.Drawing.Point(230, 8);
+ this.btnUserProperty.Name = "btnUserProperty";
+ this.btnUserProperty.Size = new System.Drawing.Size(32, 23);
+ this.btnUserProperty.TabIndex = 6;
+ this.btnUserProperty.Text = "...";
+ this.btnUserProperty.UseVisualStyleBackColor = true;
+ this.btnUserProperty.Click += new System.EventHandler(this.btnUserProperty_Click);
+ //
+ // btnPasswordProperty
+ //
+ this.btnPasswordProperty.Location = new System.Drawing.Point(230, 82);
+ this.btnPasswordProperty.Name = "btnPasswordProperty";
+ this.btnPasswordProperty.Size = new System.Drawing.Size(32, 23);
+ this.btnPasswordProperty.TabIndex = 7;
+ this.btnPasswordProperty.Text = "...";
+ this.btnPasswordProperty.UseVisualStyleBackColor = true;
+ this.btnPasswordProperty.Click += new System.EventHandler(this.btnPasswordProperty_Click);
+ //
+ // btnOK
+ //
+ this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnOK.Enabled = false;
+ this.btnOK.Location = new System.Drawing.Point(287, 155);
+ this.btnOK.Name = "btnOK";
+ this.btnOK.Size = new System.Drawing.Size(75, 23);
+ this.btnOK.TabIndex = 8;
+ this.btnOK.Text = "OK";
+ this.btnOK.UseVisualStyleBackColor = true;
+ this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+ //
+ // btnCancel
+ //
+ this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnCancel.Location = new System.Drawing.Point(368, 155);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(75, 23);
+ this.btnCancel.TabIndex = 9;
+ this.btnCancel.Text = "Cancel";
+ this.btnCancel.UseVisualStyleBackColor = true;
+ this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+ //
+ // label3
+ //
+ this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.label3.Location = new System.Drawing.Point(16, 143);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(263, 40);
+ this.label3.TabIndex = 10;
+ this.label3.Text = "Select the username and password properties and specify their values";
+ //
+ // SetCredentialsDialog
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(455, 190);
+ this.ControlBox = false;
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.btnCancel);
+ this.Controls.Add(this.btnOK);
+ this.Controls.Add(this.btnPasswordProperty);
+ this.Controls.Add(this.btnUserProperty);
+ this.Controls.Add(this.txtPassword);
+ this.Controls.Add(this.txtUsername);
+ this.Controls.Add(this.txtPasswordProperty);
+ this.Controls.Add(this.txtUserProperty);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Name = "SetCredentialsDialog";
+ this.Text = "User Credentials";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtUserProperty;
+ private System.Windows.Forms.TextBox txtPasswordProperty;
+ private System.Windows.Forms.TextBox txtPassword;
+ private System.Windows.Forms.TextBox txtUsername;
+ private System.Windows.Forms.Button btnUserProperty;
+ private System.Windows.Forms.Button btnPasswordProperty;
+ private System.Windows.Forms.Button btnOK;
+ private System.Windows.Forms.Button btnCancel;
+ private System.Windows.Forms.Label label3;
+ }
+}
\ No newline at end of file
Copied: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.cs (from rev 6890, trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.cs)
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.cs (rev 0)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -0,0 +1,104 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using Maestro.Editors.Common;
+
+namespace Maestro.Editors.FeatureSource.Providers
+{
+ internal partial class SetCredentialsDialog : Form
+ {
+ private string[] _propertyNames;
+
+ public SetCredentialsDialog(string [] propertyNames)
+ {
+ InitializeComponent();
+ _propertyNames = propertyNames;
+ }
+
+ public string UserProperty { get { return txtUserProperty.Text; } }
+
+ public string PasswordProperty { get { return txtPasswordProperty.Text; } }
+
+ public string Username { get { return txtUsername.Text; } }
+
+ public string Password { get { return txtPassword.Text; } }
+
+ private void btnUserProperty_Click(object sender, EventArgs e)
+ {
+ var list = new List<string>(_propertyNames);
+ list.Remove(txtPasswordProperty.Text);
+
+ string item = GenericItemSelectionDialog.SelectItem(null, null, list.ToArray());
+ if (item != null)
+ {
+ txtUserProperty.Text = item;
+ CheckSubmissionState();
+ }
+ }
+
+ private void btnPasswordProperty_Click(object sender, EventArgs e)
+ {
+ var list = new List<string>(_propertyNames);
+ list.Remove(txtUserProperty.Text);
+
+ string item = GenericItemSelectionDialog.SelectItem(null, null, list.ToArray());
+ if (item != null)
+ {
+ txtPasswordProperty.Text = item;
+ CheckSubmissionState();
+ }
+ }
+
+ private void CheckSubmissionState()
+ {
+ btnOK.Enabled = !string.IsNullOrEmpty(txtUserProperty.Text) &&
+ !string.IsNullOrEmpty(txtPasswordProperty.Text) &&
+ !string.IsNullOrEmpty(txtUsername.Text) &&
+ !string.IsNullOrEmpty(txtPassword.Text) &&
+ txtUserProperty.Text != txtPasswordProperty.Text;
+ }
+
+ private void btnCancel_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ }
+
+ private void btnOK_Click(object sender, EventArgs e)
+ {
+ this.DialogResult = System.Windows.Forms.DialogResult.OK;
+ }
+
+ private void txtUsername_TextChanged(object sender, EventArgs e)
+ {
+ CheckSubmissionState();
+ }
+
+ private void txtPassword_TextChanged(object sender, EventArgs e)
+ {
+ CheckSubmissionState();
+ }
+ }
+}
Copied: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.resx (from rev 6890, trunk/Tools/Maestro/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.resx)
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.resx (rev 0)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/SetCredentialsDialog.resx 2012-07-11 13:48:29 UTC (rev 6891)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root>
\ No newline at end of file
Modified: branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/FeatureSource/Providers/Wms/WmsProviderCtrl.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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: branches/maestro-4.0.x/Maestro.Editors/IEditorService.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/IEditorService.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/IEditorService.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -139,6 +139,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: branches/maestro-4.0.x/Maestro.Editors/Maestro.Editors.csproj
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/Maestro.Editors.csproj 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/Maestro.Editors.csproj 2012-07-11 13:48:29 UTC (rev 6891)
@@ -348,6 +348,12 @@
<Compile Include="FeatureSource\Providers\Sdf\SdfFileCtrl.Designer.cs">
<DependentUpon>SdfFileCtrl.cs</DependentUpon>
</Compile>
+ <Compile Include="FeatureSource\Providers\SetCredentialsDialog.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="FeatureSource\Providers\SetCredentialsDialog.Designer.cs">
+ <DependentUpon>SetCredentialsDialog.cs</DependentUpon>
+ </Compile>
<Compile Include="FeatureSource\Providers\Shp\ShpFileCtrl.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -1340,6 +1346,9 @@
<DependentUpon>SdfFileCtrl.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
+ <EmbeddedResource Include="FeatureSource\Providers\SetCredentialsDialog.resx">
+ <DependentUpon>SetCredentialsDialog.cs</DependentUpon>
+ </EmbeddedResource>
<EmbeddedResource Include="FeatureSource\Providers\Shp\ShpFileCtrl.resx">
<DependentUpon>ShpFileCtrl.cs</DependentUpon>
<SubType>Designer</SubType>
Modified: branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.Designer.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.Designer.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.Designer.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -2925,6 +2925,15 @@
}
}
+ /// <summary>
+ /// Looks up a localized string similar to Select Data Store.
+ /// </summary>
+ internal static string TextSelectDataStore {
+ get {
+ return ResourceManager.GetString("TextSelectDataStore", resourceCulture);
+ }
+ }
+
internal static System.Drawing.Bitmap tick {
get {
object obj = ResourceManager.GetObject("tick", resourceCulture);
Modified: branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.resx
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.resx 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/Properties/Resources.resx 2012-07-11 13:48:29 UTC (rev 6891)
@@ -1331,4 +1331,7 @@
<data name="BaseLayerGroupConvertedToLayerGroup" xml:space="preserve">
<value>Base Layer Group ({0}) converted to Regular Group ({1})</value>
</data>
+ <data name="TextSelectDataStore" xml:space="preserve">
+ <value>Select Data Store</value>
+ </data>
</root>
\ No newline at end of file
Modified: branches/maestro-4.0.x/Maestro.Editors/ResourceEditorServiceBase.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/ResourceEditorServiceBase.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/ResourceEditorServiceBase.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -242,9 +242,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;
@@ -483,5 +482,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: branches/maestro-4.0.x/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs
===================================================================
--- branches/maestro-4.0.x/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/Maestro.Editors/SymbolDefinition/SymbolEditorService.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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: branches/maestro-4.0.x/MaestroAPITests/HttpConnectionTests.cs
===================================================================
--- branches/maestro-4.0.x/MaestroAPITests/HttpConnectionTests.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/MaestroAPITests/HttpConnectionTests.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -25,12 +25,101 @@
using OSGeo.MapGuide.MaestroAPI.Services;
using System.IO;
using OSGeo.MapGuide.ObjectModels.Common;
+using OSGeo.MapGuide.ObjectModels;
namespace MaestroAPITests
{
[TestFixture(Ignore = TestControl.IgnoreHttpConnectionTests)]
public class HttpConnectionTests
{
+ //[Test]
+ public void TestEncryptedFeatureSourceCredentials()
+ {
+ //Sensitive data redacted, nevertheless you can test and verify this by filling in the
+ //blanks here and uncommenting the above [Test] attribute. If the test passes, credential encryption is working
+ string server = "";
+ string database = "";
+ string actualUser = "";
+ string actualPass = "";
+ string bogusUser = "foo";
+ string bogusPass = "bar";
+
+ var conn = ConnectionUtil.CreateTestHttpConnection();
+ string fsId = "Library://UnitTests/EncryptedCredentials.FeatureSource";
+ var fs = ObjectFactory.CreateFeatureSource(conn, "OSGeo.SQLServerSpatial");
+ fs.SetConnectionProperty("Username", "%MG_USERNAME%");
+ fs.SetConnectionProperty("Password", "%MG_PASSWORD%");
+ fs.SetConnectionProperty("Service", server);
+ fs.SetConnectionProperty("DataStore", database);
+ fs.ResourceID = fsId;
+ conn.ResourceService.SaveResource(fs);
+
+ using (var ms = CredentialWriter.Write(actualUser, actualPass))
+ {
+ conn.ResourceService.SetResourceData(fsId, "MG_USER_CREDENTIALS", ResourceDataType.String, ms);
+ }
+
+ string result = conn.FeatureService.TestConnection(fsId);
+ Assert.AreEqual("TRUE", result.ToUpper());
+
+ //Test convenience method
+ fsId = "Library://UnitTests/EncryptedCredentials2.FeatureSource";
+ fs = ObjectFactory.CreateFeatureSource(conn, "OSGeo.SQLServerSpatial");
+ fs.SetConnectionProperty("Username", "%MG_USERNAME%");
+ fs.SetConnectionProperty("Password", "%MG_PASSWORD%");
+ fs.SetConnectionProperty("Service", server);
+ fs.SetConnectionProperty("DataStore", database);
+ fs.ResourceID = fsId;
+ conn.ResourceService.SaveResource(fs);
+ fs.SetEncryptedCredentials(actualUser, actualPass);
+
+ result = conn.FeatureService.TestConnection(fsId);
+ Assert.AreEqual("TRUE", result.ToUpper());
+ Assert.AreEqual(actualUser, fs.GetEncryptedUsername());
+
+ //Do not set encrypted credentials
+ fsId = "Library://UnitTests/EncryptedCredentials3.FeatureSource";
+ fs = ObjectFactory.CreateFeatureSource(conn, "OSGeo.SQLServerSpatial");
+ fs.SetConnectionProperty("Username", "%MG_USERNAME%");
+ fs.SetConnectionProperty("Password", "%MG_PASSWORD%");
+ fs.SetConnectionProperty("Service", server);
+ fs.SetConnectionProperty("DataStore", database);
+ fs.ResourceID = fsId;
+ conn.ResourceService.SaveResource(fs);
+
+ try
+ {
+ result = conn.FeatureService.TestConnection(fsId);
+ Assert.AreEqual("FALSE", result.ToUpper());
+ }
+ catch //Exception or false I can't remember, as long as the result is not "true"
+ {
+
+ }
+
+ //Encrypt credentials, but use bogus username/password
+ fsId = "Library://UnitTests/EncryptedCredentials4.FeatureSource";
+ fs = ObjectFactory.CreateFeatureSource(conn, "OSGeo.SQLServerSpatial");
+ fs.SetConnectionProperty("Username", "%MG_USERNAME%");
+ fs.SetConnectionProperty("Password", "%MG_PASSWORD%");
+ fs.SetConnectionProperty("Service", server);
+ fs.SetConnectionProperty("DataStore", database);
+ fs.ResourceID = fsId;
+ conn.ResourceService.SaveResource(fs);
+ fs.SetEncryptedCredentials(bogusUser, bogusPass);
+
+ try
+ {
+ result = conn.FeatureService.TestConnection(fsId);
+ Assert.AreEqual("FALSE", result.ToUpper());
+ }
+ catch
+ {
+ //Exception or false I can't remember, as long as the result is not "true"
+ }
+ Assert.AreEqual(bogusUser, fs.GetEncryptedUsername());
+ }
+
[Test]
public void TestConnectionString()
{
Copied: branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/CredentialWriter.cs (from rev 6890, trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/CredentialWriter.cs)
===================================================================
--- branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/CredentialWriter.cs (rev 0)
+++ branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/CredentialWriter.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -0,0 +1,240 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at gmail.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+//
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+using System.IO;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+
+namespace OSGeo.MapGuide.MaestroAPI
+{
+ using Resource;
+
+ public static class FeatureSourceCredentialExtensions
+ {
+ /// <summary>
+ /// Sets the encrypted credentials for this Feature Source, the credentials are referenced with the %MG_USERNAME%
+ /// and %MG_PASSWORD% placeholder tokens in the Feature Source content.
+ /// </summary>
+ /// <param name="fs"></param>
+ /// <param name="username"></param>
+ /// <param name="password"></param>
+ public static void SetEncryptedCredentials(this IFeatureSource fs, string username, string password)
+ {
+ Check.NotNull(fs, "fs");
+ if (string.IsNullOrEmpty(fs.ResourceID))
+ throw new ArgumentException("Feature Source has no resource ID attached"); //LOCALIZEME
+ using (var stream = CredentialWriter.Write(username, password))
+ {
+ fs.SetResourceData("MG_USER_CREDENTIALS", ObjectModels.Common.ResourceDataType.String, stream);
+ }
+ }
+
+ /// <summary>
+ /// Gets the encrypted username referenced by the %MG_USERNAME% placeholder token in the Feature Source content
+ /// </summary>
+ /// <param name="fs"></param>
+ /// <returns></returns>
+ public static string GetEncryptedUsername(this IFeatureSource fs)
+ {
+ Check.NotNull(fs, "fs");
+ var resData = fs.EnumerateResourceData();
+ foreach (var rd in resData)
+ {
+ if (rd.Name.ToUpper() == "MG_USER_CREDENTIALS")
+ {
+ using (var sr = new StreamReader(fs.GetResourceData("MG_USER_CREDENTIALS")))
+ {
+ return sr.ReadToEnd();
+ }
+ }
+ }
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// Utility class to create encrypted Feature Source credentials
+ /// </summary>
+ public class CredentialWriter
+ {
+ //NOTE: This is a verbatim copy of MgCryptographyUtil in MgDev\Common\Security to the best I can do in .net
+ //Only the encryption bits are implemented. Maestro has no need to decrypt MG_USER_CREDENTIALS
+
+ //I'm sure this particular key isn't meant to be made public, but being able to correctly
+ //write MG_USER_CREDENTIALS trumps this concern. Besides, if this key were to be truly private, it wouldn't be publicly visible
+ //in the source code of a publicly accessible repository now would it?
+ const string MG_CRYPTOGRAPHY_PRIVATE_KEY = "WutsokeedbA";
+
+ static readonly char[] MG_CRYPTOGRAPHY_DEC_CHARS = { '0','1','2','3','4','5','6','7','8','9' };
+ static readonly char[] MG_CRYPTOGRAPHY_HEX_CHARS = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
+ const int MG_CRYPTOGRAPHY_MAGIC_NUMBER_1 = 42;
+ const int MG_CRYPTOGRAPHY_MAGIC_NUMBER_2 = 3;
+ const int MG_CRYPTOGRAPHY_MIN_COLUMN_NUMBER = 5;
+
+ const int MIN_CIPHER_TEXT_LENGTH = 34;
+ const int MIN_KEY_LENGTH = 14;
+ const int MAX_KEY_LENGTH = 32;
+ const string STRING_DELIMITER = "\v";
+ const string RESERVED_CHARACTERS_STRINGS = "\v\f";
+ const string RESERVED_CHARACTERS_CREDENTIALS = "\t\r\n\v\f";
+
+ /// <summary>
+ /// Encrypts the specified credentials. For a feature source that uses %MG_USERNAME% and %MG_PASSWORD% placeholder tokens to
+ /// properly use these encrypted credentials, the encrypted string must be set as the MG_USER_CREDENTIALS resource data item
+ /// for that feature source
+ /// </summary>
+ /// <param name="username"></param>
+ /// <param name="password"></param>
+ /// <returns>A <see cref="T:System.IO.Stream"/> containing the encrypted credentials</returns>
+ public static Stream Write(string username, string password)
+ {
+ string credentials;
+ EncryptStrings(username, password, out credentials, RESERVED_CHARACTERS_CREDENTIALS);
+ return new MemoryStream(ASCIIEncoding.Default.GetBytes(credentials));
+ }
+
+ static void EncryptStrings(string plainText1, string plainText2, out string cipherText, string reservedCharacters)
+ {
+ var reservedChars = reservedCharacters.ToCharArray();
+ if (plainText1.IndexOfAny(reservedChars) >= 0)
+ {
+ throw new ArgumentException("plainText1 contains reserved characters");
+ }
+ if (plainText2.IndexOfAny(reservedChars) >= 0)
+ {
+ throw new ArgumentException("plainText2 contains reserved characters");
+ }
+
+ string publicKey;
+ GenerateCryptographKey(out publicKey);
+
+ string tmpStr1, tmpStr2;
+ CombineStrings(plainText1, plainText2, out tmpStr1);
+ EncryptStringWithKey(tmpStr1, out tmpStr2, publicKey);
+
+ CombineStrings(tmpStr2, publicKey, out tmpStr1);
+ EncryptStringWithKey(tmpStr1, out tmpStr2, MG_CRYPTOGRAPHY_PRIVATE_KEY);
+
+ EncryptStringByTransposition(tmpStr2, out cipherText);
+ }
+
+ static void EncryptStringByTransposition(string inStr, out string outStr)
+ {
+ string tmpStr;
+ int inStrLength = inStr.Length;
+
+ int numOfColumn = MG_CRYPTOGRAPHY_MIN_COLUMN_NUMBER;
+ EncryptStringByTransposition(inStr, out tmpStr, numOfColumn);
+
+ numOfColumn += inStrLength % 6;
+ EncryptStringByTransposition(tmpStr, out outStr, numOfColumn);
+ Debug.Assert(inStrLength == outStr.Length);
+ }
+
+ static void EncryptStringByTransposition(string inStr, out string outStr, int numOfColumn)
+ {
+ int inStrLen = inStr.Length;
+ int numOfRow = (int)Math.Ceiling((double)inStrLen / (double)numOfColumn);
+
+ StringBuilder sb = new StringBuilder();
+
+ for (int currColumn = 0; currColumn < numOfColumn; ++currColumn)
+ {
+ for (int currRow = 0; currRow < numOfRow; ++currRow)
+ {
+ int inIdx = currColumn + currRow * numOfColumn;
+
+ if (inIdx < inStrLen)
+ {
+ sb.Append(inStr[inIdx]);
+ }
+ }
+ }
+
+ outStr = sb.ToString();
+ }
+
+ static void GenerateCryptographKey(out string publicKey)
+ {
+ DateTime dt = DateTime.UtcNow;
+ publicKey = dt.ToString("yyyymmddHHmmss");
+ }
+
+ static void CombineStrings(string str1, string str2, out string outStr)
+ {
+ outStr = str1;
+ outStr += STRING_DELIMITER;
+ outStr += str2;
+ }
+
+ static void EncryptStringWithKey(string inStr, out string outStr, string key)
+ {
+ char prevChar = Convert.ToChar(MG_CRYPTOGRAPHY_MAGIC_NUMBER_1);
+ char currChar;
+ int keyIdx = 0;
+ int keyLen = key.Length;
+ int outStrLen = inStr.Length;
+ StringBuilder tmpStr = new StringBuilder();
+
+ for (int i = 0; i < outStrLen; ++i)
+ {
+ currChar = inStr[i];
+ char c = Convert.ToChar(currChar ^ key[keyIdx] ^ prevChar ^ ((i / MG_CRYPTOGRAPHY_MAGIC_NUMBER_2) % 255));
+ tmpStr.Append(c);
+ prevChar = currChar;
+
+ ++keyIdx;
+
+ if (keyIdx >= keyLen)
+ {
+ keyIdx = 0;
+ }
+ }
+
+ BinToHex(tmpStr.ToString(), out outStr);
+ Debug.Assert((inStr.Length * 2) == outStr.Length);
+ }
+
+ static void BinToHex(string binStr, out string hexStr)
+ {
+ int binStrLen = binStr.Length;
+
+ hexStr = "";
+
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 0; i < binStrLen; ++i)
+ {
+ int num = binStr[i];
+
+ for (int j = 1; j >= 0; --j)
+ {
+ char c = MG_CRYPTOGRAPHY_HEX_CHARS[(num >> j * 4) & 0xF];
+ sb.Append(c);
+ }
+ }
+
+ hexStr = sb.ToString();
+ }
+ }
+}
Modified: branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj 2012-07-11 13:48:29 UTC (rev 6891)
@@ -190,6 +190,7 @@
<Compile Include="CoordinateSystem\ISimpleTransform.cs" />
<Compile Include="CoordinateSystem\MeterBasedCoordinateSystem.cs" />
<Compile Include="CoordinateSystem\NsDoc.cs" />
+ <Compile Include="CredentialWriter.cs" />
<Compile Include="CrossConnection\NsDoc.cs" />
<Compile Include="CrossConnection\ResourceRebaser.cs" />
<Compile Include="Exceptions\CustomPropertyNotFoundException.cs" />
Modified: branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs
===================================================================
--- branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSource.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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: branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs
===================================================================
--- branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/ObjectModels/FeatureSourceInterfaces.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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: branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs
===================================================================
--- branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs 2012-07-11 13:28:37 UTC (rev 6890)
+++ branches/maestro-4.0.x/OSGeo.MapGuide.MaestroAPI/Resource/IResource.cs 2012-07-11 13:48:29 UTC (rev 6891)
@@ -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