[mapguide-commits] r7050 - in trunk/Tools/Maestro: Maestro.Base Maestro.Base/Commands Maestro.Base/UI/Packaging Maestro.Packaging

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Sep 27 09:50:27 PDT 2012


Author: jng
Date: 2012-09-27 09:50:27 -0700 (Thu, 27 Sep 2012)
New Revision: 7050

Modified:
   trunk/Tools/Maestro/Maestro.Base/Commands/CreatePackageCommand.cs
   trunk/Tools/Maestro/Maestro.Base/Strings.Designer.cs
   trunk/Tools/Maestro/Maestro.Base/Strings.resx
   trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs
   trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.cs
   trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.resx
   trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs
   trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs
Log:
#2133: Refactor the packaging code to support creating packages with a list of resource ids.

Modified: trunk/Tools/Maestro/Maestro.Base/Commands/CreatePackageCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Commands/CreatePackageCommand.cs	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Base/Commands/CreatePackageCommand.cs	2012-09-27 16:50:27 UTC (rev 7050)
@@ -49,15 +49,28 @@
 
                 if (dlg.ShowDialog(wb) == System.Windows.Forms.DialogResult.OK)
                 {
-                    //Begin!
-                    PackageProgress.CreatePackage(
-                        wb,
-                        conn,
-                        dlg.FolderToPackage,
-                        dlg.OutputFileName,
-                        dlg.SelectedTypes,
-                        dlg.RemoveTargetFolderOnRestore,
-                        dlg.RestorePath);
+                    if (dlg.Source == CreatePackageDialog.PackageSource.Folder)
+                    {
+                        PackageProgress.CreatePackage(
+                            wb,
+                            conn,
+                            dlg.FolderToPackage,
+                            dlg.OutputFileName,
+                            dlg.SelectedTypes,
+                            dlg.RemoveTargetFolderOnRestore,
+                            dlg.RestorePath);
+                    }
+                    else //Resource id list
+                    {
+                        PackageProgress.CreatePackage(
+                            wb,
+                            conn,
+                            dlg.ResourceIds,
+                            dlg.OutputFileName,
+                            dlg.SelectedTypes,
+                            dlg.RemoveTargetFolderOnRestore,
+                            dlg.RestorePath);
+                    }
                 }
             }
         }

Modified: trunk/Tools/Maestro/Maestro.Base/Strings.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Strings.Designer.cs	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Base/Strings.Designer.cs	2012-09-27 16:50:27 UTC (rev 7050)
@@ -1970,7 +1970,7 @@
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Package folder.
+        ///   Looks up a localized string similar to Create Package.
         /// </summary>
         internal static string SiteExplorer_SelectedFolder_CreatePackage {
             get {

Modified: trunk/Tools/Maestro/Maestro.Base/Strings.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Strings.resx	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Base/Strings.resx	2012-09-27 16:50:27 UTC (rev 7050)
@@ -759,7 +759,7 @@
     <value>Save Resource XML</value>
   </data>
   <data name="SiteExplorer_SelectedFolder_CreatePackage" xml:space="preserve">
-    <value>Package folder</value>
+    <value>Create Package</value>
   </data>
   <data name="SiteExplorer_SelectedFolder_Paste" xml:space="preserve">
     <value>Paste into this folder</value>

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.Designer.cs	2012-09-27 16:50:27 UTC (rev 7050)
@@ -42,29 +42,25 @@
             this.chkRemoveTargetFolderOnRestore = new System.Windows.Forms.CheckBox();
             this.BrowseResourcePath = new System.Windows.Forms.Button();
             this.txtResourcePath = new System.Windows.Forms.TextBox();
-            this.label1 = new System.Windows.Forms.Label();
             this.panel2 = new System.Windows.Forms.Panel();
             this.btnCancel = new System.Windows.Forms.Button();
             this.btnOK = new System.Windows.Forms.Button();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.rdPackageFolder = new System.Windows.Forms.RadioButton();
+            this.rdResourceList = new System.Windows.Forms.RadioButton();
+            this.txtResourceIdList = new System.Windows.Forms.TextBox();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.label1 = new System.Windows.Forms.Label();
             this.panel1.SuspendLayout();
             this.panel2.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            this.groupBox2.SuspendLayout();
             this.SuspendLayout();
             // 
             // panel1
             // 
-            this.panel1.Controls.Add(this.btnBrowseRestorePath);
-            this.panel1.Controls.Add(this.lnkAll);
-            this.panel1.Controls.Add(this.BrowseTargetFilename);
-            this.panel1.Controls.Add(this.txtPackageFilename);
-            this.panel1.Controls.Add(this.label3);
-            this.panel1.Controls.Add(this.chkAllowedTypes);
-            this.panel1.Controls.Add(this.label2);
-            this.panel1.Controls.Add(this.txtRestorePath);
-            this.panel1.Controls.Add(this.chkRestorePath);
-            this.panel1.Controls.Add(this.chkRemoveTargetFolderOnRestore);
-            this.panel1.Controls.Add(this.BrowseResourcePath);
-            this.panel1.Controls.Add(this.txtResourcePath);
-            this.panel1.Controls.Add(this.label1);
+            this.panel1.Controls.Add(this.groupBox2);
+            this.panel1.Controls.Add(this.groupBox1);
             resources.ApplyResources(this.panel1, "panel1");
             this.panel1.Name = "panel1";
             // 
@@ -142,11 +138,6 @@
             this.txtResourcePath.Name = "txtResourcePath";
             this.txtResourcePath.ReadOnly = true;
             // 
-            // label1
-            // 
-            resources.ApplyResources(this.label1, "label1");
-            this.label1.Name = "label1";
-            // 
             // panel2
             // 
             this.panel2.Controls.Add(this.btnCancel);
@@ -169,6 +160,58 @@
             this.btnOK.UseVisualStyleBackColor = true;
             this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
             // 
+            // groupBox1
+            // 
+            resources.ApplyResources(this.groupBox1, "groupBox1");
+            this.groupBox1.Controls.Add(this.txtPackageFilename);
+            this.groupBox1.Controls.Add(this.btnBrowseRestorePath);
+            this.groupBox1.Controls.Add(this.chkRemoveTargetFolderOnRestore);
+            this.groupBox1.Controls.Add(this.lnkAll);
+            this.groupBox1.Controls.Add(this.chkRestorePath);
+            this.groupBox1.Controls.Add(this.BrowseTargetFilename);
+            this.groupBox1.Controls.Add(this.txtRestorePath);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.chkAllowedTypes);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.TabStop = false;
+            // 
+            // rdPackageFolder
+            // 
+            resources.ApplyResources(this.rdPackageFolder, "rdPackageFolder");
+            this.rdPackageFolder.Checked = true;
+            this.rdPackageFolder.Name = "rdPackageFolder";
+            this.rdPackageFolder.TabStop = true;
+            this.rdPackageFolder.UseVisualStyleBackColor = true;
+            // 
+            // rdResourceList
+            // 
+            resources.ApplyResources(this.rdResourceList, "rdResourceList");
+            this.rdResourceList.Name = "rdResourceList";
+            this.rdResourceList.UseVisualStyleBackColor = true;
+            // 
+            // txtResourceIdList
+            // 
+            resources.ApplyResources(this.txtResourceIdList, "txtResourceIdList");
+            this.txtResourceIdList.Name = "txtResourceIdList";
+            // 
+            // groupBox2
+            // 
+            resources.ApplyResources(this.groupBox2, "groupBox2");
+            this.groupBox2.Controls.Add(this.label1);
+            this.groupBox2.Controls.Add(this.txtResourcePath);
+            this.groupBox2.Controls.Add(this.txtResourceIdList);
+            this.groupBox2.Controls.Add(this.BrowseResourcePath);
+            this.groupBox2.Controls.Add(this.rdResourceList);
+            this.groupBox2.Controls.Add(this.rdPackageFolder);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.TabStop = false;
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
             // CreatePackageDialog
             // 
             this.AcceptButton = this.btnOK;
@@ -180,8 +223,11 @@
             this.Controls.Add(this.panel2);
             this.Name = "CreatePackageDialog";
             this.panel1.ResumeLayout(false);
-            this.panel1.PerformLayout();
             this.panel2.ResumeLayout(false);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
             this.ResumeLayout(false);
 
         }
@@ -202,8 +248,13 @@
         private System.Windows.Forms.CheckBox chkRemoveTargetFolderOnRestore;
         private System.Windows.Forms.Button BrowseResourcePath;
         private System.Windows.Forms.TextBox txtResourcePath;
-        private System.Windows.Forms.Label label1;
         private System.Windows.Forms.LinkLabel lnkAll;
         private System.Windows.Forms.Button btnBrowseRestorePath;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.TextBox txtResourceIdList;
+        private System.Windows.Forms.RadioButton rdResourceList;
+        private System.Windows.Forms.RadioButton rdPackageFolder;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Label label1;
     }
 }
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.cs	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.cs	2012-09-27 16:50:27 UTC (rev 7050)
@@ -18,6 +18,7 @@
 // 
 #endregion
 using System;
+using System.Linq;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
@@ -27,6 +28,7 @@
 using OSGeo.MapGuide.MaestroAPI;
 using Maestro.Editors.Generic;
 using Maestro.Shared.UI;
+using OSGeo.MapGuide.MaestroAPI.Resource;
 
 namespace Maestro.Base.UI.Packaging
 {
@@ -37,6 +39,22 @@
             InitializeComponent();
         }
 
+        public enum PackageSource
+        {
+            Folder,
+            ResourceIdList
+        }
+
+        public PackageSource Source
+        {
+            get
+            {
+                if (rdPackageFolder.Checked)
+                    return PackageSource.Folder;
+                return PackageSource.ResourceIdList;
+            }
+        }
+
         private IServerConnection _conn;
 
         public CreatePackageDialog(IServerConnection conn)
@@ -60,6 +78,11 @@
             CheckSubmitState();
         }
 
+        public string[] ResourceIds
+        {
+            get { return txtResourceIdList.Lines.ToArray(); }
+        }
+
         public string FolderToPackage
         {
             get { return txtResourcePath.Text; }

Modified: trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.resx	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Base/UI/Packaging/CreatePackageDialog.resx	2012-09-27 16:50:27 UTC (rev 7050)
@@ -112,109 +112,214 @@
     <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" />
-  <data name="btnBrowseRestorePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="groupBox2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
   </data>
-  <data name="btnBrowseRestorePath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="btnBrowseRestorePath.Location" type="System.Drawing.Point, System.Drawing">
-    <value>451, 66</value>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>32, 64</value>
   </data>
-  <data name="btnBrowseRestorePath.Size" type="System.Drawing.Size, System.Drawing">
-    <value>24, 20</value>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>68, 13</value>
   </data>
-  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="btnBrowseRestorePath.TabIndex" type="System.Int32, mscorlib">
-    <value>38</value>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>43</value>
   </data>
-  <data name="btnBrowseRestorePath.Text" xml:space="preserve">
-    <value>...</value>
+  <data name="label1.Text" xml:space="preserve">
+    <value>(one per line)</value>
   </data>
-  <data name=">>btnBrowseRestorePath.Name" xml:space="preserve">
-    <value>btnBrowseRestorePath</value>
+  <data name=">>label1.Name" xml:space="preserve">
+    <value>label1</value>
   </data>
-  <data name=">>btnBrowseRestorePath.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>label1.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=">>btnBrowseRestorePath.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>label1.Parent" xml:space="preserve">
+    <value>groupBox2</value>
   </data>
-  <data name=">>btnBrowseRestorePath.ZOrder" xml:space="preserve">
+  <data name=">>label1.ZOrder" xml:space="preserve">
     <value>0</value>
   </data>
-  <data name="lnkAll.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="txtResourcePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
   </data>
-  <data name="lnkAll.Location" type="System.Drawing.Point, System.Drawing">
-    <value>190, 124</value>
+  <data name="txtResourcePath.Location" type="System.Drawing.Point, System.Drawing">
+    <value>155, 19</value>
   </data>
-  <data name="lnkAll.Size" type="System.Drawing.Size, System.Drawing">
-    <value>51, 13</value>
+  <data name="txtResourcePath.Size" type="System.Drawing.Size, System.Drawing">
+    <value>210, 20</value>
   </data>
-  <data name="lnkAll.TabIndex" type="System.Int32, mscorlib">
-    <value>37</value>
+  <data name="txtResourcePath.TabIndex" type="System.Int32, mscorlib">
+    <value>26</value>
   </data>
-  <data name="lnkAll.Text" xml:space="preserve">
-    <value>Select All</value>
+  <data name=">>txtResourcePath.Name" xml:space="preserve">
+    <value>txtResourcePath</value>
   </data>
-  <data name=">>lnkAll.Name" xml:space="preserve">
-    <value>lnkAll</value>
+  <data name=">>txtResourcePath.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=">>lnkAll.Type" xml:space="preserve">
-    <value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>txtResourcePath.Parent" xml:space="preserve">
+    <value>groupBox2</value>
   </data>
-  <data name=">>lnkAll.Parent" xml:space="preserve">
-    <value>panel1</value>
-  </data>
-  <data name=">>lnkAll.ZOrder" xml:space="preserve">
+  <data name=">>txtResourcePath.ZOrder" xml:space="preserve">
     <value>1</value>
   </data>
-  <data name="BrowseTargetFilename.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+  <data name="txtResourceIdList.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="txtResourceIdList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>155, 44</value>
+  </data>
+  <data name="txtResourceIdList.Multiline" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="txtResourceIdList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>240, 118</value>
+  </data>
+  <data name="txtResourceIdList.TabIndex" type="System.Int32, mscorlib">
+    <value>42</value>
+  </data>
+  <data name=">>txtResourceIdList.Name" xml:space="preserve">
+    <value>txtResourceIdList</value>
+  </data>
+  <data name=">>txtResourceIdList.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=">>txtResourceIdList.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>txtResourceIdList.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="BrowseResourcePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Right</value>
   </data>
-  <data name="BrowseTargetFilename.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="BrowseResourcePath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="BrowseTargetFilename.Location" type="System.Drawing.Point, System.Drawing">
-    <value>451, 36</value>
+  <data name="BrowseResourcePath.Location" type="System.Drawing.Point, System.Drawing">
+    <value>371, 19</value>
   </data>
-  <data name="BrowseTargetFilename.Size" type="System.Drawing.Size, System.Drawing">
+  <data name="BrowseResourcePath.Size" type="System.Drawing.Size, System.Drawing">
     <value>24, 20</value>
   </data>
-  <data name="BrowseTargetFilename.TabIndex" type="System.Int32, mscorlib">
-    <value>35</value>
+  <data name="BrowseResourcePath.TabIndex" type="System.Int32, mscorlib">
+    <value>27</value>
   </data>
-  <data name="BrowseTargetFilename.Text" xml:space="preserve">
+  <data name="BrowseResourcePath.Text" xml:space="preserve">
     <value>...</value>
   </data>
-  <data name=">>BrowseTargetFilename.Name" xml:space="preserve">
-    <value>BrowseTargetFilename</value>
+  <data name=">>BrowseResourcePath.Name" xml:space="preserve">
+    <value>BrowseResourcePath</value>
   </data>
-  <data name=">>BrowseTargetFilename.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>BrowseResourcePath.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=">>BrowseTargetFilename.Parent" xml:space="preserve">
+  <data name=">>BrowseResourcePath.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>BrowseResourcePath.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="rdResourceList.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="rdResourceList.Location" type="System.Drawing.Point, System.Drawing">
+    <value>10, 44</value>
+  </data>
+  <data name="rdResourceList.Size" type="System.Drawing.Size, System.Drawing">
+    <value>139, 17</value>
+  </data>
+  <data name="rdResourceList.TabIndex" type="System.Int32, mscorlib">
+    <value>41</value>
+  </data>
+  <data name="rdResourceList.Text" xml:space="preserve">
+    <value>Specific list of resources</value>
+  </data>
+  <data name=">>rdResourceList.Name" xml:space="preserve">
+    <value>rdResourceList</value>
+  </data>
+  <data name=">>rdResourceList.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>rdResourceList.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>rdResourceList.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="rdPackageFolder.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="rdPackageFolder.Location" type="System.Drawing.Point, System.Drawing">
+    <value>10, 21</value>
+  </data>
+  <data name="rdPackageFolder.Size" type="System.Drawing.Size, System.Drawing">
+    <value>54, 17</value>
+  </data>
+  <data name="rdPackageFolder.TabIndex" type="System.Int32, mscorlib">
+    <value>40</value>
+  </data>
+  <data name="rdPackageFolder.Text" xml:space="preserve">
+    <value>Folder</value>
+  </data>
+  <data name=">>rdPackageFolder.Name" xml:space="preserve">
+    <value>rdPackageFolder</value>
+  </data>
+  <data name=">>rdPackageFolder.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>rdPackageFolder.Parent" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>rdPackageFolder.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <data name="groupBox2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 12</value>
+  </data>
+  <data name="groupBox2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>412, 168</value>
+  </data>
+  <data name="groupBox2.TabIndex" type="System.Int32, mscorlib">
+    <value>43</value>
+  </data>
+  <data name="groupBox2.Text" xml:space="preserve">
+    <value>What to package</value>
+  </data>
+  <data name=">>groupBox2.Name" xml:space="preserve">
+    <value>groupBox2</value>
+  </data>
+  <data name=">>groupBox2.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=">>groupBox2.Parent" xml:space="preserve">
     <value>panel1</value>
   </data>
-  <data name=">>BrowseTargetFilename.ZOrder" xml:space="preserve">
-    <value>2</value>
+  <data name=">>groupBox2.ZOrder" xml:space="preserve">
+    <value>0</value>
   </data>
+  <data name="groupBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
   <data name="txtPackageFilename.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
     <value>Top, Left, Right</value>
   </data>
   <data name="txtPackageFilename.Location" type="System.Drawing.Point, System.Drawing">
-    <value>123, 36</value>
+    <value>106, 23</value>
   </data>
   <data name="txtPackageFilename.Size" type="System.Drawing.Size, System.Drawing">
-    <value>322, 20</value>
+    <value>259, 20</value>
   </data>
   <data name="txtPackageFilename.TabIndex" type="System.Int32, mscorlib">
     <value>34</value>
@@ -223,124 +328,100 @@
     <value>txtPackageFilename</value>
   </data>
   <data name=">>txtPackageFilename.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=">>txtPackageFilename.Parent" xml:space="preserve">
-    <value>panel1</value>
+    <value>groupBox1</value>
   </data>
   <data name=">>txtPackageFilename.ZOrder" xml:space="preserve">
-    <value>3</value>
+    <value>0</value>
   </data>
-  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="btnBrowseRestorePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
   </data>
-  <data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="btnBrowseRestorePath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 43</value>
+  <data name="btnBrowseRestorePath.Location" type="System.Drawing.Point, System.Drawing">
+    <value>371, 53</value>
   </data>
-  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
-    <value>89, 13</value>
+  <data name="btnBrowseRestorePath.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 20</value>
   </data>
-  <data name="label3.TabIndex" type="System.Int32, mscorlib">
-    <value>33</value>
+  <data name="btnBrowseRestorePath.TabIndex" type="System.Int32, mscorlib">
+    <value>38</value>
   </data>
-  <data name="label3.Text" xml:space="preserve">
-    <value>Output File Name</value>
+  <data name="btnBrowseRestorePath.Text" xml:space="preserve">
+    <value>...</value>
   </data>
-  <data name=">>label3.Name" xml:space="preserve">
-    <value>label3</value>
+  <data name=">>btnBrowseRestorePath.Name" xml:space="preserve">
+    <value>btnBrowseRestorePath</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 name=">>btnBrowseRestorePath.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=">>label3.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>btnBrowseRestorePath.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name=">>label3.ZOrder" xml:space="preserve">
-    <value>4</value>
+  <data name=">>btnBrowseRestorePath.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
-  <data name="chkAllowedTypes.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Bottom, Left, Right</value>
-  </data>
-  <data name="chkAllowedTypes.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 140</value>
-  </data>
-  <data name="chkAllowedTypes.Size" type="System.Drawing.Size, System.Drawing">
-    <value>464, 94</value>
-  </data>
-  <data name="chkAllowedTypes.TabIndex" type="System.Int32, mscorlib">
-    <value>32</value>
-  </data>
-  <data name=">>chkAllowedTypes.Name" xml:space="preserve">
-    <value>chkAllowedTypes</value>
-  </data>
-  <data name=">>chkAllowedTypes.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </data>
-  <data name=">>chkAllowedTypes.Parent" xml:space="preserve">
-    <value>panel1</value>
-  </data>
-  <data name=">>chkAllowedTypes.ZOrder" xml:space="preserve">
-    <value>5</value>
-  </data>
-  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+  <data name="chkRemoveTargetFolderOnRestore.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="chkRemoveTargetFolderOnRestore.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 124</value>
+  <data name="chkRemoveTargetFolderOnRestore.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 79</value>
   </data>
-  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>173, 13</value>
+  <data name="chkRemoveTargetFolderOnRestore.Size" type="System.Drawing.Size, System.Drawing">
+    <value>197, 17</value>
   </data>
-  <data name="label2.TabIndex" type="System.Int32, mscorlib">
-    <value>31</value>
+  <data name="chkRemoveTargetFolderOnRestore.TabIndex" type="System.Int32, mscorlib">
+    <value>28</value>
   </data>
-  <data name="label2.Text" xml:space="preserve">
-    <value>Include these types in the package</value>
+  <data name="chkRemoveTargetFolderOnRestore.Text" xml:space="preserve">
+    <value>Remove target folder when restoring</value>
   </data>
-  <data name=">>label2.Name" xml:space="preserve">
-    <value>label2</value>
+  <data name=">>chkRemoveTargetFolderOnRestore.Name" xml:space="preserve">
+    <value>chkRemoveTargetFolderOnRestore</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 name=">>chkRemoveTargetFolderOnRestore.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
-  <data name=">>label2.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>chkRemoveTargetFolderOnRestore.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name=">>label2.ZOrder" xml:space="preserve">
-    <value>6</value>
+  <data name=">>chkRemoveTargetFolderOnRestore.ZOrder" xml:space="preserve">
+    <value>2</value>
   </data>
-  <data name="txtRestorePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
+  <data name="lnkAll.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="txtRestorePath.Enabled" type="System.Boolean, mscorlib">
-    <value>False</value>
+  <data name="lnkAll.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 133</value>
   </data>
-  <data name="txtRestorePath.Location" type="System.Drawing.Point, System.Drawing">
-    <value>123, 66</value>
+  <data name="lnkAll.Size" type="System.Drawing.Size, System.Drawing">
+    <value>51, 13</value>
   </data>
-  <data name="txtRestorePath.Size" type="System.Drawing.Size, System.Drawing">
-    <value>322, 20</value>
+  <data name="lnkAll.TabIndex" type="System.Int32, mscorlib">
+    <value>37</value>
   </data>
-  <data name="txtRestorePath.TabIndex" type="System.Int32, mscorlib">
-    <value>30</value>
+  <data name="lnkAll.Text" xml:space="preserve">
+    <value>Select All</value>
   </data>
-  <data name=">>txtRestorePath.Name" xml:space="preserve">
-    <value>txtRestorePath</value>
+  <data name=">>lnkAll.Name" xml:space="preserve">
+    <value>lnkAll</value>
   </data>
-  <data name=">>txtRestorePath.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>lnkAll.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=">>txtRestorePath.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>lnkAll.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name=">>txtRestorePath.ZOrder" xml:space="preserve">
-    <value>7</value>
+  <data name=">>lnkAll.ZOrder" xml:space="preserve">
+    <value>3</value>
   </data>
   <data name="chkRestorePath.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
@@ -349,7 +430,7 @@
     <value>NoControl</value>
   </data>
   <data name="chkRestorePath.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 68</value>
+    <value>13, 55</value>
   </data>
   <data name="chkRestorePath.Size" type="System.Drawing.Size, System.Drawing">
     <value>87, 17</value>
@@ -364,127 +445,178 @@
     <value>chkRestorePath</value>
   </data>
   <data name=">>chkRestorePath.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
   <data name=">>chkRestorePath.Parent" xml:space="preserve">
-    <value>panel1</value>
+    <value>groupBox1</value>
   </data>
   <data name=">>chkRestorePath.ZOrder" xml:space="preserve">
-    <value>8</value>
+    <value>4</value>
   </data>
-  <data name="chkRemoveTargetFolderOnRestore.AutoSize" type="System.Boolean, mscorlib">
-    <value>True</value>
+  <data name="BrowseTargetFilename.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
   </data>
-  <data name="chkRemoveTargetFolderOnRestore.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="BrowseTargetFilename.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="chkRemoveTargetFolderOnRestore.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 92</value>
+  <data name="BrowseTargetFilename.Location" type="System.Drawing.Point, System.Drawing">
+    <value>371, 23</value>
   </data>
-  <data name="chkRemoveTargetFolderOnRestore.Size" type="System.Drawing.Size, System.Drawing">
-    <value>197, 17</value>
+  <data name="BrowseTargetFilename.Size" type="System.Drawing.Size, System.Drawing">
+    <value>24, 20</value>
   </data>
-  <data name="chkRemoveTargetFolderOnRestore.TabIndex" type="System.Int32, mscorlib">
-    <value>28</value>
+  <data name="BrowseTargetFilename.TabIndex" type="System.Int32, mscorlib">
+    <value>35</value>
   </data>
-  <data name="chkRemoveTargetFolderOnRestore.Text" xml:space="preserve">
-    <value>Remove target folder when restoring</value>
+  <data name="BrowseTargetFilename.Text" xml:space="preserve">
+    <value>...</value>
   </data>
-  <data name=">>chkRemoveTargetFolderOnRestore.Name" xml:space="preserve">
-    <value>chkRemoveTargetFolderOnRestore</value>
+  <data name=">>BrowseTargetFilename.Name" xml:space="preserve">
+    <value>BrowseTargetFilename</value>
   </data>
-  <data name=">>chkRemoveTargetFolderOnRestore.Type" xml:space="preserve">
-    <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>BrowseTargetFilename.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=">>chkRemoveTargetFolderOnRestore.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>BrowseTargetFilename.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name=">>chkRemoveTargetFolderOnRestore.ZOrder" xml:space="preserve">
-    <value>9</value>
+  <data name=">>BrowseTargetFilename.ZOrder" xml:space="preserve">
+    <value>5</value>
   </data>
-  <data name="BrowseResourcePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Right</value>
+  <data name="txtRestorePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
   </data>
-  <data name="BrowseResourcePath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
-    <value>NoControl</value>
+  <data name="txtRestorePath.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
   </data>
-  <data name="BrowseResourcePath.Location" type="System.Drawing.Point, System.Drawing">
-    <value>451, 12</value>
+  <data name="txtRestorePath.Location" type="System.Drawing.Point, System.Drawing">
+    <value>106, 53</value>
   </data>
-  <data name="BrowseResourcePath.Size" type="System.Drawing.Size, System.Drawing">
-    <value>24, 20</value>
+  <data name="txtRestorePath.Size" type="System.Drawing.Size, System.Drawing">
+    <value>259, 20</value>
   </data>
-  <data name="BrowseResourcePath.TabIndex" type="System.Int32, mscorlib">
-    <value>27</value>
+  <data name="txtRestorePath.TabIndex" type="System.Int32, mscorlib">
+    <value>30</value>
   </data>
-  <data name="BrowseResourcePath.Text" xml:space="preserve">
-    <value>...</value>
+  <data name=">>txtRestorePath.Name" xml:space="preserve">
+    <value>txtRestorePath</value>
   </data>
-  <data name=">>BrowseResourcePath.Name" xml:space="preserve">
-    <value>BrowseResourcePath</value>
+  <data name=">>txtRestorePath.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=">>BrowseResourcePath.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>txtRestorePath.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name=">>BrowseResourcePath.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>txtRestorePath.ZOrder" xml:space="preserve">
+    <value>6</value>
   </data>
-  <data name=">>BrowseResourcePath.ZOrder" xml:space="preserve">
-    <value>10</value>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
   </data>
-  <data name="txtResourcePath.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
-    <value>Top, Left, Right</value>
+  <data name="label2.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
   </data>
-  <data name="txtResourcePath.Location" type="System.Drawing.Point, System.Drawing">
-    <value>123, 12</value>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 111</value>
   </data>
-  <data name="txtResourcePath.Size" type="System.Drawing.Size, System.Drawing">
-    <value>322, 20</value>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>173, 13</value>
   </data>
-  <data name="txtResourcePath.TabIndex" type="System.Int32, mscorlib">
-    <value>26</value>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>31</value>
   </data>
-  <data name=">>txtResourcePath.Name" xml:space="preserve">
-    <value>txtResourcePath</value>
+  <data name="label2.Text" xml:space="preserve">
+    <value>Include these types in the package</value>
   </data>
-  <data name=">>txtResourcePath.Type" xml:space="preserve">
-    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  <data name=">>label2.Name" xml:space="preserve">
+    <value>label2</value>
   </data>
-  <data name=">>txtResourcePath.Parent" xml:space="preserve">
-    <value>panel1</value>
+  <data name=">>label2.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=">>txtResourcePath.ZOrder" xml:space="preserve">
-    <value>11</value>
+  <data name=">>label2.Parent" xml:space="preserve">
+    <value>groupBox1</value>
   </data>
-  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+  <data name=">>label2.ZOrder" xml:space="preserve">
+    <value>7</value>
+  </data>
+  <data name="label3.AutoSize" type="System.Boolean, mscorlib">
     <value>True</value>
   </data>
-  <data name="label1.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+  <data name="label3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
     <value>NoControl</value>
   </data>
-  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>11, 16</value>
+  <data name="label3.Location" type="System.Drawing.Point, System.Drawing">
+    <value>11, 26</value>
   </data>
-  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>93, 13</value>
+  <data name="label3.Size" type="System.Drawing.Size, System.Drawing">
+    <value>89, 13</value>
   </data>
-  <data name="label1.TabIndex" type="System.Int32, mscorlib">
-    <value>25</value>
+  <data name="label3.TabIndex" type="System.Int32, mscorlib">
+    <value>33</value>
   </data>
-  <data name="label1.Text" xml:space="preserve">
-    <value>Folder to package</value>
+  <data name="label3.Text" xml:space="preserve">
+    <value>Output File Name</value>
   </data>
-  <data name=">>label1.Name" xml:space="preserve">
-    <value>label1</value>
+  <data name=">>label3.Name" xml:space="preserve">
+    <value>label3</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 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=">>label1.Parent" xml:space="preserve">
+  <data name=">>label3.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name=">>label3.ZOrder" xml:space="preserve">
+    <value>8</value>
+  </data>
+  <data name="chkAllowedTypes.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Bottom, Left, Right</value>
+  </data>
+  <data name="chkAllowedTypes.Location" type="System.Drawing.Point, System.Drawing">
+    <value>204, 111</value>
+  </data>
+  <data name="chkAllowedTypes.Size" type="System.Drawing.Size, System.Drawing">
+    <value>191, 124</value>
+  </data>
+  <data name="chkAllowedTypes.TabIndex" type="System.Int32, mscorlib">
+    <value>32</value>
+  </data>
+  <data name=">>chkAllowedTypes.Name" xml:space="preserve">
+    <value>chkAllowedTypes</value>
+  </data>
+  <data name=">>chkAllowedTypes.Type" xml:space="preserve">
+    <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>chkAllowedTypes.Parent" xml:space="preserve">
+    <value>groupBox1</value>
+  </data>
+  <data name=">>chkAllowedTypes.ZOrder" xml:space="preserve">
+    <value>9</value>
+  </data>
+  <data name="groupBox1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 186</value>
+  </data>
+  <data name="groupBox1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>412, 246</value>
+  </data>
+  <data name="groupBox1.TabIndex" type="System.Int32, mscorlib">
+    <value>39</value>
+  </data>
+  <data name="groupBox1.Text" xml:space="preserve">
+    <value>Packaging Options</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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name=">>groupBox1.Parent" xml:space="preserve">
     <value>panel1</value>
   </data>
-  <data name=">>label1.ZOrder" xml:space="preserve">
-    <value>12</value>
+  <data name=">>groupBox1.ZOrder" xml:space="preserve">
+    <value>1</value>
   </data>
   <data name="panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
     <value>Fill</value>
@@ -493,7 +625,7 @@
     <value>0, 0</value>
   </data>
   <data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
-    <value>487, 250</value>
+    <value>435, 449</value>
   </data>
   <data name="panel1.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -502,7 +634,7 @@
     <value>panel1</value>
   </data>
   <data name=">>panel1.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=">>panel1.Parent" xml:space="preserve">
     <value>$this</value>
@@ -514,7 +646,7 @@
     <value>Bottom, Right</value>
   </data>
   <data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
-    <value>400, 12</value>
+    <value>348, 12</value>
   </data>
   <data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
     <value>75, 23</value>
@@ -529,7 +661,7 @@
     <value>btnCancel</value>
   </data>
   <data name=">>btnCancel.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=">>btnCancel.Parent" xml:space="preserve">
     <value>panel2</value>
@@ -541,7 +673,7 @@
     <value>Bottom, Right</value>
   </data>
   <data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
-    <value>319, 12</value>
+    <value>267, 12</value>
   </data>
   <data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
     <value>75, 23</value>
@@ -556,7 +688,7 @@
     <value>btnOK</value>
   </data>
   <data name=">>btnOK.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=">>btnOK.Parent" xml:space="preserve">
     <value>panel2</value>
@@ -568,10 +700,10 @@
     <value>Bottom</value>
   </data>
   <data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
-    <value>0, 250</value>
+    <value>0, 449</value>
   </data>
   <data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
-    <value>487, 47</value>
+    <value>435, 47</value>
   </data>
   <data name="panel2.TabIndex" type="System.Int32, mscorlib">
     <value>1</value>
@@ -580,7 +712,7 @@
     <value>panel2</value>
   </data>
   <data name=">>panel2.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=">>panel2.Parent" xml:space="preserve">
     <value>$this</value>
@@ -588,12 +720,15 @@
   <data name=">>panel2.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">
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
   <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
-    <value>487, 297</value>
+    <value>435, 496</value>
   </data>
+  <data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
+    <value>NoControl</value>
+  </data>
   <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
     <value>CenterParent</value>
   </data>
@@ -604,6 +739,6 @@
     <value>CreatePackageDialog</value>
   </data>
   <data name=">>$this.Type" xml:space="preserve">
-    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
 </root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs	2012-09-27 16:50:27 UTC (rev 7050)
@@ -18,6 +18,7 @@
 // 
 #endregion
 using System;
+using System.Linq;
 using System.Collections.Generic;
 using System.Text;
 using OSGeo.MapGuide.ObjectModels.Common;
@@ -337,7 +338,6 @@
             }
         }
 
-
         /// <summary>
         /// Creates a package
         /// </summary>
@@ -353,37 +353,107 @@
 
             ResourceList items = m_connection.ResourceService.GetRepositoryResources(folderResourceId);
 
-            var allowed = new List<ResourceTypes>(allowedExtensions);
-            List<ResourceListResourceDocument> files = new List<ResourceListResourceDocument>();
-            List<ResourceListResourceFolder> folders = new List<ResourceListResourceFolder>();
-            Dictionary<string, List<ResourceDataListResourceData>> resourceData = new Dictionary<string, List<ResourceDataListResourceData>>();
+            CreatePackageInternal(folderResourceId, zipfilename, allowedExtensions, removeExistingFiles, alternateTargetResourceId, items.Children.Select(x => x.ResourceId));
+        }
+
+        /// <summary>
+        /// Creates a package
+        /// </summary>
+        /// <param name="resourceIdsToPack">The list of resource ids to include into the package</param>
+        /// <param name="zipfilename">The name of the output file to create</param>
+        /// <param name="allowedExtensions">A list of allowed extensions without leading dot, or null to include all file types. The special item "*" matches all unknown types.</param>
+        /// <param name="removeExistingFiles">A value indicating if a delete operation is included in the package to remove existing files before restoring the package</param>
+        /// <param name="alternateTargetResourceId">An optional target folder resourceId, use null or an empty string to restore the files at the original locations</param>
+        public void CreatePackage(IEnumerable<string> resourceIdsToPack, string zipfilename, IEnumerable<ResourceTypes> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
+        {
+            if (Progress != null)
+                Progress(ProgressType.ReadingFileList, string.Empty, 100, 0);
+
+            var resourceIds = new List<string>(resourceIdsToPack);
+            string folderId = GetCommonParent(resourceIds);
+
+            CreatePackageInternal(folderId, zipfilename, allowedExtensions, removeExistingFiles, alternateTargetResourceId, resourceIds);
+        }
+
+        private static string GetCommonParent(ICollection<string> data)
+        {
+            if (data.Count > 0)
+            {
+                var firstResId = new ResourceIdentifier(data.ElementAt(0));
+                if (data.Count == 1)
+                {
+                    if (firstResId.IsFolder)
+                        return firstResId.ResourceId.ToString();
+                    else
+                        return firstResId.ParentFolder;
+                }
+                else
+                {
+                    int matches = 0;
+                    string[] parts = firstResId.ResourceId.ToString()
+                                               .Substring(StringConstants.RootIdentifier.Length)
+                                               .Split('/'); //NOXLATE
+                    string test = StringConstants.RootIdentifier;
+                    string parent = test;
+                    int partIndex = 0;
+                    //Use first one as a sample to see how far we can go. Keep going until we have
+                    //a parent that doesn't match all of them. The one we recorded before then will
+                    //be the common parent
+                    while (matches == data.Count)
+                    {
+                        parent = test;
+                        partIndex++;
+                        if (partIndex < parts.Length) //Shouldn't happen, but just in case
+                            break;
+
+                        test = test + parts[partIndex];
+                        matches = data.Where(x => x.StartsWith(test)).Count();
+                    }
+                    return parent;
+                }
+            }
+            else
+            {
+                return StringConstants.RootIdentifier;
+            }
+        }
+
+        private void CreatePackageInternal(string folderResourceId, string zipfilename, IEnumerable<ResourceTypes> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId, IEnumerable<string> resourceIds)
+        {
             ResourcePackageManifest manifest = new ResourcePackageManifest();
             manifest.Description = "MapGuide Package created with Maestro"; //NOXLATE
             manifest.Operations = new ResourcePackageManifestOperations();
             manifest.Operations.Operation = new System.ComponentModel.BindingList<ResourcePackageManifestOperationsOperation>();
-            //System.Collections.Hashtable knownTypes = ((ServerConnectionBase)m_connection).ResourceTypeLookup;
 
-            foreach (object o in items.Items)
+            var allowed = new List<ResourceTypes>(allowedExtensions);
+            var files = new List<string>();
+            var folders = new List<string>();
+            var resourceData = new Dictionary<string, List<ResourceDataListResourceData>>();
+
+            foreach (var resId in resourceIds)
             {
-                if (o as ResourceListResourceDocument != null)
+                if (!ResourceIdentifier.Validate(resId))
+                    continue;
+
+                var r = new ResourceIdentifier(resId);
+                if (r.IsFolder)
                 {
-                    ResourceListResourceDocument doc = o as ResourceListResourceDocument;
-                    var extension = ResourceIdentifier.GetResourceType(doc.ResourceId);
+                    folders.Add(resId);
+                }
+                else
+                {
+                    var extension = r.ResourceType;
                     if (allowedExtensions == null || allowed.Count == 0)
-                        files.Add(doc);
+                        files.Add(resId);
                     else if (m_connection.Capabilities.IsSupportedResourceType(extension) && allowed.Contains(extension))
-                        files.Add(doc);
+                        files.Add(resId);
                 }
-                else if (o as ResourceListResourceFolder != null)
-                {
-                    folders.Add(o as ResourceListResourceFolder);
-                }
             }
 
             if (Progress != null)
             {
                 Progress(ProgressType.ReadingFileList, folderResourceId, 100, 100);
-                Progress(ProgressType.PreparingFolder, "", files.Count + folders.Count + 1, 0);
+                Progress(ProgressType.PreparingFolder, string.Empty, files.Count + folders.Count + 1, 0);
             }
 
             string temppath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), System.IO.Path.GetRandomFileName());
@@ -396,33 +466,33 @@
                 System.IO.Directory.CreateDirectory(temppath);
                 int opno = 1;
 
-                foreach (ResourceListResourceFolder folder in folders)
+                foreach (var folder in folders)
                 {
 
                     if (Progress != null)
-                        Progress(ProgressType.PreparingFolder, folder.ResourceId, files.Count + folders.Count + 1, opno);
+                        Progress(ProgressType.PreparingFolder, folder, files.Count + folders.Count + 1, opno);
                     AddFolderResource(manifest, temppath, folder, removeExistingFiles, m_connection, filemap);
                     if (Progress != null)
-                        Progress(ProgressType.PreparingFolder, folder.ResourceId, files.Count + folders.Count + 1, opno++);
+                        Progress(ProgressType.PreparingFolder, folder, files.Count + folders.Count + 1, opno++);
                 }
 
-                foreach (ResourceListResourceDocument doc in files)
+                foreach (var doc in files)
                 {
                     if (Progress != null)
-                        Progress(ProgressType.PreparingFolder, doc.ResourceId, files.Count + folders.Count + 1, opno);
-                    string filebase = CreateFolderForResource(doc.ResourceId, temppath);
+                        Progress(ProgressType.PreparingFolder, doc, files.Count + folders.Count + 1, opno);
+                    string filebase = CreateFolderForResource(doc, temppath);
 
-                    resourceData[doc.ResourceId] = new List<ResourceDataListResourceData>();
-                    ResourceDataList rdl = m_connection.ResourceService.EnumerateResourceData(doc.ResourceId);
+                    resourceData[doc] = new List<ResourceDataListResourceData>();
+                    ResourceDataList rdl = m_connection.ResourceService.EnumerateResourceData(doc);
                     foreach (ResourceDataListResourceData rd in rdl.ResourceData)
-                        resourceData[doc.ResourceId].Add(rd);
+                        resourceData[doc].Add(rd);
 
-                    int itemCount = resourceData[doc.ResourceId].Count + 1;
+                    int itemCount = resourceData[doc].Count + 1;
 
                     filemap.Add(new KeyValuePair<string, string>(filebase + "_CONTENT.xml", System.IO.Path.Combine(temppath, Guid.NewGuid().ToString()))); //NOXLATE
                     using (System.IO.FileStream fs = new System.IO.FileStream(filemap[filemap.Count - 1].Value, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None))
                     {
-                        using (var s = m_connection.ResourceService.GetResourceXmlData(doc.ResourceId))
+                        using (var s = m_connection.ResourceService.GetResourceXmlData(doc))
                         {
                             var data = Utility.StreamAsArray(s);
                             fs.Write(data, 0, data.Length);
@@ -437,14 +507,14 @@
                         System.IO.FileInfo fi = new System.IO.FileInfo(filemap[filemap.Count - 1].Value);
                         using (System.IO.FileStream fs = new System.IO.FileStream(fi.FullName, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None))
                         {
-                            Utility.CopyStream(m_connection.ResourceService.GetResourceData(doc.ResourceId, rd.Name), fs);
+                            Utility.CopyStream(m_connection.ResourceService.GetResourceData(doc, rd.Name), fs);
                         }
 
                         AddResourceData(manifest, temppath, doc, fi, filemap[filemap.Count - 1].Key, rd, m_connection);
                     }
 
                     if (Progress != null)
-                        Progress(ProgressType.PreparingFolder, doc.ResourceId, files.Count + folders.Count + 1, opno++);
+                        Progress(ProgressType.PreparingFolder, doc, files.Count + folders.Count + 1, opno++);
                 }
 
                 if (Progress != null)
@@ -488,23 +558,13 @@
             }
         }
 
-        private void AddResourceData(ResourcePackageManifest manifest, string temppath, ResourceListResourceDocument doc, System.IO.FileInfo fi, string resourcePath, ResourceDataListResourceData rd, IServerConnection connection)
+        private void AddResourceData(ResourcePackageManifest manifest, string temppath, string docResourceId, System.IO.FileInfo fi, string resourcePath, ResourceDataListResourceData rd, IServerConnection connection)
         {
             string contentType = "application/octet-stream"; //NOXLATE
 
-            /*
-            try
-            {
-                if (connection as HttpServerConnection != null)
-                    contentType = (connection as HttpServerConnection).LastResponseHeaders[System.Net.HttpResponseHeader.ContentType];
-            }
-            catch
-            {
-            }
-             */
             string name = rd.Name;
             string type = rd.Type.ToString();
-            string resourceId = doc.ResourceId;
+            string resourceId = docResourceId;
             string filename = RelativeName(resourcePath, temppath).Replace('\\', '/'); //NOXLATE
             long size = fi.Length;
 
@@ -549,17 +609,17 @@
             manifest.Operations.Operation.Add(op);
         }
 
-        private void AddFileResource(ResourcePackageManifest manifest, string temppath, ResourceListResourceDocument doc, string contentfilename, bool eraseFirst, IServerConnection connection, List<KeyValuePair<string, string>> filemap)
+        private void AddFileResource(ResourcePackageManifest manifest, string temppath, string docResourceId, string contentfilename, bool eraseFirst, IServerConnection connection, List<KeyValuePair<string, string>> filemap)
         {
-            string filebase = CreateFolderForResource(doc.ResourceId, temppath);
+            string filebase = CreateFolderForResource(docResourceId, temppath);
 
             filemap.Add(new KeyValuePair<string, string>(filebase + "_HEADER.xml", System.IO.Path.Combine(temppath, Guid.NewGuid().ToString()))); //NOXLATE
             using (System.IO.FileStream fs = new System.IO.FileStream(filemap[filemap.Count - 1].Value, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None))
-                connection.ResourceService.SerializeObject(connection.ResourceService.GetResourceHeader(doc.ResourceId), fs);
+                connection.ResourceService.SerializeObject(connection.ResourceService.GetResourceHeader(docResourceId), fs);
 
             string headerpath = RelativeName(filemap[filemap.Count - 1].Key, temppath).Replace('\\', '/'); //NOXLATE
             string contentpath = RelativeName(contentfilename, temppath).Replace('\\', '/'); //NOXLATE
-            AddFileResource(manifest, doc.ResourceId, headerpath, contentpath, eraseFirst);
+            AddFileResource(manifest, docResourceId, headerpath, contentpath, eraseFirst);
         }
 
         private void AddFileResource(ResourcePackageManifest manifest, string resourceId, string headerpath, string contentpath, bool eraseFirst)
@@ -608,20 +668,20 @@
             manifest.Operations.Operation.Add(op);
         }
 
-        private void AddFolderResource(ResourcePackageManifest manifest, string temppath, ResourceListResourceFolder folder, bool eraseFirst, IServerConnection connection, List<KeyValuePair<string, string>> filemap)
+        private void AddFolderResource(ResourcePackageManifest manifest, string temppath, string folderResId, bool eraseFirst, IServerConnection connection, List<KeyValuePair<string, string>> filemap)
         {
-            string filebase = System.IO.Path.GetDirectoryName(CreateFolderForResource(folder.ResourceId + "dummy.xml", temppath)); //NOXLATE
+            string filebase = System.IO.Path.GetDirectoryName(CreateFolderForResource(folderResId + "dummy.xml", temppath)); //NOXLATE
 
             filemap.Add(new KeyValuePair<string, string>(System.IO.Path.Combine(filebase, "_HEADER.xml"), System.IO.Path.Combine(temppath, Guid.NewGuid().ToString()))); //NOXLATE
             using (System.IO.FileStream fs = new System.IO.FileStream(filemap[filemap.Count - 1].Value, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None))
-                connection.ResourceService.SerializeObject(connection.ResourceService.GetFolderHeader(folder.ResourceId), fs);
+                connection.ResourceService.SerializeObject(connection.ResourceService.GetFolderHeader(folderResId), fs);
 
             if (!filebase.EndsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
                 filebase += System.IO.Path.DirectorySeparatorChar;
 
             string headerpath = RelativeName(filebase + "_HEADER.xml", temppath).Replace('\\', '/'); //NOXLATE
 
-            AddFolderResource(manifest, folder.ResourceId, headerpath, eraseFirst);
+            AddFolderResource(manifest, folderResId, headerpath, eraseFirst);
         }
 
 

Modified: trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs	2012-09-27 16:39:39 UTC (rev 7049)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs	2012-09-27 16:50:27 UTC (rev 7050)
@@ -54,8 +54,7 @@
         private volatile System.Threading.Thread m_thread;
 
         private PackageBuilder m_invokeObj = null;
-        private object[] m_invokeArgs = null;
-        private System.Reflection.MethodInfo m_invokeMethod = null;
+        private Func<object> m_method = null;
         private object m_invokeResult = null;
 
         /// <summary>
@@ -148,9 +147,9 @@
         public static Dictionary<string, ResourceItem> ListPackageContents(Form owner, IServerConnection connection, string packageFile)
         {
             PackageProgress pkgp = new PackageProgress();
-            pkgp.m_invokeArgs = new object[] { packageFile };
-            pkgp.m_invokeObj = new PackageBuilder(connection);
-            pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("ListPackageContents"); //NOXLATE
+            var builder = new PackageBuilder(connection);
+            pkgp.m_invokeObj = builder;
+            pkgp.m_method = () => { return builder.ListPackageContents(packageFile); };
 
             if (pkgp.ShowDialog(owner) == DialogResult.OK)
                 return (Dictionary<string, ResourceItem>)pkgp.m_invokeResult;
@@ -169,10 +168,11 @@
         {
             PackageProgress pkgp = new PackageProgress();
             pkgp.Text = Strings.TitleUploading;
-            pkgp.m_invokeArgs = new object[] { packageFile };
-            pkgp.m_invokeObj = new PackageBuilder(connection);
-            pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("UploadPackage"); //NOXLATE
 
+            var builder = new PackageBuilder(connection);
+            pkgp.m_invokeObj = builder;
+            pkgp.m_method = () => { builder.UploadPackage(packageFile); return true; };
+
             return pkgp.ShowDialog(owner);
         }
 
@@ -188,10 +188,11 @@
         {
             PackageProgress pkgp = new PackageProgress();
             pkgp.Text = Strings.TitleUploading;
-            pkgp.m_invokeArgs = new object[] { packageFile, result };
-            pkgp.m_invokeObj = new PackageBuilder(connection);
-            pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("UploadPackageNonTransactional"); //NOXLATE
 
+            var builder = new PackageBuilder(connection);
+            pkgp.m_invokeObj = builder;
+            pkgp.m_method = () => { builder.UploadPackageNonTransactional(packageFile, result); return true; };
+
             return pkgp.ShowDialog(owner);
         }
 
@@ -208,10 +209,11 @@
         public static DialogResult RebuildPackage(Form owner, IServerConnection connection, string sourcePackageFile, List<ResourceItem> items, string targetfile, bool insertEraseCommands)
         {
             PackageProgress pkgp = new PackageProgress();
-            pkgp.m_invokeArgs = new object[] { sourcePackageFile, items, targetfile, insertEraseCommands };
-            pkgp.m_invokeObj = new PackageBuilder(connection);
-            pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("RebuildPackage"); //NOXLATE
 
+            var builder = new PackageBuilder(connection);
+            pkgp.m_invokeObj = builder;
+            pkgp.m_method = () => { builder.RebuildPackage(sourcePackageFile, items, targetfile, insertEraseCommands); return true; };
+
             return pkgp.ShowDialog(owner);
         }
 
@@ -229,13 +231,36 @@
         public static DialogResult CreatePackage(Form owner, IServerConnection connection, string folderResourceId, string zipfilename, IEnumerable<ResourceTypes> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
         {
             PackageProgress pkgp = new PackageProgress();
-            pkgp.m_invokeArgs = new object[] {folderResourceId, zipfilename, allowedExtensions, removeExistingFiles, alternateTargetResourceId };
-            pkgp.m_invokeObj = new PackageBuilder(connection);
-            pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("CreatePackage"); //NOXLATE
+            
+            var builder = new PackageBuilder(connection);
+            pkgp.m_invokeObj = builder;
+            pkgp.m_method = () => { builder.CreatePackage(folderResourceId, zipfilename, allowedExtensions, removeExistingFiles, alternateTargetResourceId); return true; };
 
             return pkgp.ShowDialog(owner);
         }
 
+        /// <summary>
+        /// Creates a new package from a server folder
+        /// </summary>
+        /// <param name="owner">The owner form</param>
+        /// <param name="connection">The connection used to retrieve the resources</param>
+        /// <param name="resourceIdList">The array of resource ids to create the package</param>
+        /// <param name="zipfilename">The name of the output package file</param>
+        /// <param name="allowedExtensions">A list of allowed extensions, set to null for all types. The special value "*" matches all unknown extensions.</param>
+        /// <param name="removeExistingFiles">A flag indicating if the package should contain a delete instruction to delete the target area before restore</param>
+        /// <param name="alternateTargetResourceId">The folder path where the package should be restore, set to null or empty string to use the source path</param>
+        /// <returns></returns>
+        public static DialogResult CreatePackage(Form owner, IServerConnection connection, string[] resourceIdList, string zipfilename, IEnumerable<ResourceTypes> allowedExtensions, bool removeExistingFiles, string alternateTargetResourceId)
+        {
+            PackageProgress pkgp = new PackageProgress();
+            
+            var builder = new PackageBuilder(connection);
+            pkgp.m_invokeObj = builder;
+            pkgp.m_method = () => { builder.CreatePackage(resourceIdList, zipfilename, allowedExtensions, removeExistingFiles, alternateTargetResourceId); return true; };
+
+            return pkgp.ShowDialog(owner);
+        }
+
         private PackageProgress()
         {
             InitializeComponent();
@@ -350,7 +375,7 @@
             try
             {
                 m_thread = System.Threading.Thread.CurrentThread;
-                e.Result = m_invokeMethod.Invoke(m_invokeObj, m_invokeArgs);
+                e.Result = m_method.Invoke();
             }
             catch (System.Threading.ThreadAbortException)
             {



More information about the mapguide-commits mailing list