[mapguide-commits] r6134 - in trunk/Tools/Maestro: Maestro.AddIn.Local Maestro.Base/Commands Maestro.Base/Services/DragDropHandlers Maestro.Packaging Maestro.Packaging/Properties OSGeo.MapGuide.MaestroAPI.Native

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Sep 15 14:02:38 EDT 2011


Author: jng
Date: 2011-09-15 11:02:38 -0700 (Thu, 15 Sep 2011)
New Revision: 6134

Added:
   trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.Designer.cs
   trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.cs
   trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.resx
Modified:
   trunk/Tools/Maestro/Maestro.AddIn.Local/ACE.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/GEOS.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MapGuideDesktopUnmanagedApi.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgDesktop.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgFoundation.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgGeometry.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgGwsCommon.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgGwsQueryEngine.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgGwsResource.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgMdfModel.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgMdfParser.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgPlatformBase.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgRenderers.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/MgStylization.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/OSGeo.MapGuide.Desktop.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/OSGeo.MapGuide.Viewer.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/gd.dll
   trunk/Tools/Maestro/Maestro.AddIn.Local/xerces-c_3_1mg.dll
   trunk/Tools/Maestro/Maestro.Base/Commands/LoadPackageCommand.cs
   trunk/Tools/Maestro/Maestro.Base/Services/DragDropHandlers/PackageFileHandler.cs
   trunk/Tools/Maestro/Maestro.Packaging/Maestro.Packaging.csproj
   trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs
   trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs
   trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.designer.cs
   trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.resx
   trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.resx
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native/
Log:
This submission updates the mg-desktop binaries (revision 68a19b6c5d) and implements non-transactional package loading (#1623)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/ACE.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/GEOS.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MapGuideDesktopUnmanagedApi.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgDesktop.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgFoundation.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgGeometry.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgGwsCommon.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgGwsQueryEngine.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgGwsResource.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgMdfModel.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgMdfParser.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgPlatformBase.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgRenderers.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/MgStylization.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/OSGeo.MapGuide.Desktop.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/OSGeo.MapGuide.Viewer.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/gd.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.AddIn.Local/xerces-c_3_1mg.dll
===================================================================
(Binary files differ)

Modified: trunk/Tools/Maestro/Maestro.Base/Commands/LoadPackageCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Commands/LoadPackageCommand.cs	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Base/Commands/LoadPackageCommand.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -24,6 +24,7 @@
 using Maestro.Base.Services;
 using Maestro.Shared.UI;
 using Maestro.Packaging;
+using System.Windows.Forms;
 
 namespace Maestro.Base.Commands
 {
@@ -41,11 +42,21 @@
                 open.Filter = Properties.Resources.Filter_Mgp_Files;
                 if (open.ShowDialog(wb) == System.Windows.Forms.DialogResult.OK)
                 {
-                    var res = PackageProgress.UploadPackage(
-                        wb,
-                        conn,
-                        open.FileName);
-
+                    var optDiag = new PackageUploadOptionDialog();
+                    optDiag.ShowDialog();
+                    DialogResult res;
+                    if (optDiag.Method == PackageUploadMethod.Transactional)
+                    {
+                        res = PackageProgress.UploadPackage(wb,
+                                                            conn,
+                                                            open.FileName);
+                    }
+                    else
+                    {
+                        res = PackageProgress.UploadPackageNonTransactional(wb,
+                                                                            conn,
+                                                                            open.FileName);
+                    }
                     if (res == System.Windows.Forms.DialogResult.OK)
                     {
                         exp.RefreshModel(conn.DisplayName);

Modified: trunk/Tools/Maestro/Maestro.Base/Services/DragDropHandlers/PackageFileHandler.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Services/DragDropHandlers/PackageFileHandler.cs	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Base/Services/DragDropHandlers/PackageFileHandler.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -25,6 +25,7 @@
 using Maestro.Packaging;
 using Maestro.Shared.UI;
 using OSGeo.MapGuide.MaestroAPI;
+using System.Windows.Forms;
 
 namespace Maestro.Base.Services.DragDropHandlers
 {
@@ -51,11 +52,21 @@
 
                 var wb = Workbench.Instance;
                 var exp = wb.ActiveSiteExplorer;
-                var res = PackageProgress.UploadPackage(
-                        wb,
-                        conn,
-                        file);
-
+                var optDiag = new PackageUploadOptionDialog();
+                optDiag.ShowDialog();
+                DialogResult res;
+                if (optDiag.Method == PackageUploadMethod.Transactional)
+                {
+                    res = PackageProgress.UploadPackage(wb,
+                                                        conn,
+                                                        file);
+                }
+                else
+                {
+                    res = PackageProgress.UploadPackageNonTransactional(wb,
+                                                                        conn,
+                                                                        file);
+                }
                 if (res == System.Windows.Forms.DialogResult.OK)
                 {
                     exp.RefreshModel(conn.DisplayName);

Modified: trunk/Tools/Maestro/Maestro.Packaging/Maestro.Packaging.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/Maestro.Packaging.csproj	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/Maestro.Packaging.csproj	2011-09-15 18:02:38 UTC (rev 6134)
@@ -39,6 +39,7 @@
       <HintPath>..\Thirdparty\SharpZipLib\ICSharpCode.SharpZipLib.dll</HintPath>
     </Reference>
     <Reference Include="System" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
@@ -58,6 +59,12 @@
     <Compile Include="PackageProgress.designer.cs">
       <DependentUpon>PackageProgress.cs</DependentUpon>
     </Compile>
+    <Compile Include="PackageUploadOptionDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="PackageUploadOptionDialog.Designer.cs">
+      <DependentUpon>PackageUploadOptionDialog.cs</DependentUpon>
+    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
@@ -71,6 +78,9 @@
     <EmbeddedResource Include="PackageProgress.resx">
       <DependentUpon>PackageProgress.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="PackageUploadOptionDialog.resx">
+      <DependentUpon>PackageUploadOptionDialog.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>

Modified: trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageBuilder.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -23,6 +23,11 @@
 using OSGeo.MapGuide.ObjectModels.Common;
 using OSGeo.MapGuide.MaestroAPI;
 using OSGeo.MapGuide.MaestroAPI.Resource;
+using OSGeo.MapGuide.MaestroAPI.Services;
+using ICSharpCode.SharpZipLib.Zip;
+using System.Xml;
+using System.Collections.Specialized;
+using System.IO;
 
 namespace Maestro.Packaging
 {
@@ -58,7 +63,15 @@
         /// <summary>
         /// Extracting filenames from package
         /// </summary>
-        ListingFiles
+        ListingFiles,
+        /// <summary>
+        /// Setting resource content
+        /// </summary>
+        SetResource,
+        /// <summary>
+        /// Setting resource data
+        /// </summary>
+        SetResourceData
     }
 
     /// <summary>
@@ -87,7 +100,7 @@
     /// <param name="maxValue">The max value, meaning that when value equals maxValue, progress is equal to 100%</param>
     /// <param name="value">The current item being progressed</param>
     /// <param name="resourceId">The name of the resource being processed, if any</param>
-    public delegate void ProgressDelegate(ProgressType type, string resourceId, int maxValue, int value);
+    public delegate void ProgressDelegate(ProgressType type, string resourceId, int maxValue, double value);
 
     /// <summary>
     /// A class to create MapGuide data packages
@@ -136,6 +149,172 @@
                 Progress(ProgressType.Uploading, sourceFile, 100, 100);
         }
 
+        /// <summary>
+        /// Uploads a package to the server in a non-transactional fashion. Resources which fail to load are added to the specified list of 
+        /// failed resources. The upload is non-transactional in the sense that it can partially fail. Failed operations are logged.
+        /// </summary>
+        /// <param name="sourceFile">The source package file</param>
+        /// <param name="skipResourceIds">The list of resource ids in the package to skip</param>
+        /// <param name="failedResourceIds">The list of resources ids that failed to load</param>
+        public void UploadPackageNonTransactional(string sourceFile, ICollection<PackageOperation> skipResourceIds, ICollection<PackageOperation> failedResourceIds)
+        {
+            Dictionary<PackageOperation, PackageOperation> skipOps = new Dictionary<PackageOperation, PackageOperation>();
+            if (skipResourceIds != null)
+            {
+                foreach (var op in skipResourceIds)
+                {
+                    skipOps[op] = op;
+                }
+            }
+
+            ProgressDelegate progress = this.Progress;
+            if (progress == null)
+                progress = (type, file, a, b) => { };
+
+            double step = 0.0;
+            progress(ProgressType.ListingFiles, sourceFile, 100, step);
+            
+            //Process overview:
+            //
+            // 1. Extract the package to a temp directory
+            // 2. Read the package manifest
+            // 3. For each resource id in the manifest, if it is in the list of resource ids to skip 
+            //    then skip it. Otherwise process the directive that uses this id.
+
+            ZipFile package = new ZipFile(sourceFile);
+            ZipEntry manifestEntry = package.GetEntry("MgResourcePackageManifest.xml");
+            XmlDocument doc = new XmlDocument();
+            using (var s = package.GetInputStream(manifestEntry))
+            {
+                doc.Load(s);
+            }
+            XmlNodeList opNodes = doc.GetElementsByTagName("Operation");
+            double unit = (100.0 / (double)opNodes.Count);
+            foreach (XmlNode opNode in opNodes)
+            {
+                step += unit;
+                string name = opNode["Name"].InnerText.ToUpper();
+
+                PackageOperation op = ParseOperation(opNode);
+                //TODO: A DELETERESOURCE would cause a null operation. Should we bother to support it?
+                if (op == null)
+                    continue;
+
+                //Is a skipped operation?
+                if (skipOps.ContainsKey(op))
+                {
+                    System.Diagnostics.Trace.TraceInformation("Skipping " + op.OperationName + " on " + op.ResourceId);
+                    continue;
+                }
+
+                switch (name)
+                {
+                    case "SETRESOURCE":
+                        {
+                            SetResourcePackageOperation sop = (SetResourcePackageOperation)op;
+                            ZipEntry contentEntry = package.GetEntry(sop.Content);
+                            ZipEntry headerEntry = null;
+
+                            if (!string.IsNullOrEmpty(sop.Header))
+                                headerEntry = package.GetEntry(sop.Header);
+
+                            try
+                            {
+                                using (var s = package.GetInputStream(contentEntry))
+                                {
+                                    m_connection.ResourceService.SetResourceXmlData(op.ResourceId, s);
+                                    progress(ProgressType.SetResource, op.ResourceId, 100, step);
+                                }
+
+                                if (headerEntry != null)
+                                {
+                                    using (var s = package.GetInputStream(headerEntry))
+                                    {
+                                        using (var sr = new StreamReader(s))
+                                        {
+                                            ResourceDocumentHeaderType header = ResourceDocumentHeaderType.Deserialize(sr.ReadToEnd());
+                                            m_connection.ResourceService.SetResourceHeader(op.ResourceId, header);
+                                            progress(ProgressType.SetResource, op.ResourceId, 100, step);
+                                        }
+                                    }
+                                }
+                            }
+                            catch (Exception)
+                            {
+                                //We don't really care about the header. We consider failure if the
+                                //content upload did not succeed
+                                if (!m_connection.ResourceService.ResourceExists(op.ResourceId))
+                                    failedResourceIds.Add(op);
+                            }
+                        }
+                        break;
+                    case "SETRESOURCEDATA":
+                        {
+                            SetResourceDataPackageOperation sop = (SetResourceDataPackageOperation)op;
+                            ZipEntry dataEntry = package.GetEntry(sop.Data);
+
+                            try
+                            {
+                                using (var s = package.GetInputStream(dataEntry))
+                                {
+                                    m_connection.ResourceService.SetResourceData(sop.ResourceId, sop.DataName, sop.DataType, s);
+                                    progress(ProgressType.SetResourceData, sop.ResourceId, 100, step);
+                                }
+                            }
+                            catch (Exception)
+                            {
+                                var resData = m_connection.ResourceService.EnumerateResourceData(sop.ResourceId);
+                                bool found = false;
+
+                                foreach (var data in resData.ResourceData)
+                                {
+                                    if (data.Name == sop.DataName)
+                                    {
+                                        found = true;
+                                        break;
+                                    }
+                                }
+
+                                if (!found)
+                                    failedResourceIds.Add(sop);
+                            }
+                        }
+                        break;
+                }
+            }
+        }
+
+        private static PackageOperation ParseOperation(XmlNode opNode)
+        {
+            PackageOperation op = null;
+            NameValueCollection p = new NameValueCollection();
+            foreach (XmlNode paramNode in opNode["Parameters"].ChildNodes)
+            {
+                p[paramNode["Name"].InnerText] = paramNode["Value"].InnerText;
+            }
+            string resourceId = p["RESOURCEID"];
+            switch (opNode["Name"].InnerText)
+            {
+                case "SETRESOURCE":
+                    {
+                        op = new SetResourcePackageOperation(resourceId, p["CONTENT"], p["HEADER"]);
+                    }
+                    break;
+                case "SETRESOURCEDATA":
+                    {
+                        ResourceDataType rdt;
+                        try
+                        {
+                            rdt = (ResourceDataType)Enum.Parse(typeof(ResourceDataType), p["DATATYPE"], true);
+                        }
+                        catch { rdt = ResourceDataType.File; }
+                        op = new SetResourceDataPackageOperation(resourceId, p["DATA"], p["DATANAME"], rdt);
+                    }
+                    break;
+            }
+            return op;
+        }
+
         private void ProgressCallback_Upload(long copied, long remain, long total)
         {
             if (Progress != null)
@@ -930,4 +1109,141 @@
             return resourceList;
         }
     }
+
+    public abstract class PackageOperation
+    {
+        public string ResourceId { get; set; }
+
+        public string OperationName { get; set; }
+
+        protected PackageOperation(string resId) { this.ResourceId = resId; }
+    }
+
+    public class SetResourcePackageOperation : PackageOperation
+    {
+        public SetResourcePackageOperation(string resId, string content, string header)
+            : base(resId)
+        {
+            this.OperationName = "SETRESOURCE";
+            this.Content = content;
+            this.Header = header;
+        }
+
+        public string Content { get; set; }
+
+        public string Header { get; set; }
+
+        /// <summary>
+        /// Determines whether the specified <see cref="System.Object"/> is equal to this instance.
+        /// </summary>
+        /// <param name="obj">The <see cref="System.Object"/> to compare with this instance.</param>
+        /// <returns>
+        /// 	<c>true</c> if the specified <see cref="System.Object"/> is equal to this instance; otherwise, <c>false</c>.
+        /// </returns>
+        /// <exception cref="T:System.NullReferenceException">
+        /// The <paramref name="obj"/> parameter is null.
+        /// </exception>
+        public override bool Equals(object obj)
+        {
+            if (obj == null)
+                return false;
+
+            if (!typeof(SetResourcePackageOperation).IsAssignableFrom(obj.GetType()))
+                return false;
+
+            SetResourcePackageOperation vi = (SetResourcePackageOperation)obj;
+            return string.Compare(this.Content, vi.Content) == 0 &&
+                   string.Compare(this.Header, vi.Header) == 0 &&
+                   string.Compare(this.OperationName, vi.OperationName) == 0 &&
+                   string.Compare(this.ResourceId, vi.ResourceId) == 0;
+        }
+
+        /// <summary>
+        /// Returns a hash code for this instance.
+        /// </summary>
+        /// <returns>
+        /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
+        /// </returns>
+        public override int GetHashCode()
+        {
+            //http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-systemobjectgethashcode
+            unchecked
+            {
+                int hash = 17;
+                hash = hash * 23 + this.Content.GetHashCode();
+                if (this.Header != null)
+                    hash = hash * 23 + this.Header.GetHashCode();
+                hash = hash * 23 + this.OperationName.GetHashCode();
+                hash = hash * 23 + this.ResourceId.GetHashCode();
+
+                return hash;
+            }
+        }
+    }
+
+    public class SetResourceDataPackageOperation : PackageOperation
+    {
+        public SetResourceDataPackageOperation(string resId, string data, string dataName, ResourceDataType dataType)
+            : base(resId)
+        {
+            this.OperationName = "SETRESOURCEDATA";
+            this.Data = data;
+            this.DataName = dataName;
+            this.DataType = dataType;
+        }
+
+        public string Data { get; set; }
+
+        public string DataName { get; set; }
+
+        public ResourceDataType DataType { get; set; }
+
+        /// <summary>
+        /// Determines whether the specified <see cref="System.Object"/> is equal to this instance.
+        /// </summary>
+        /// <param name="obj">The <see cref="System.Object"/> to compare with this instance.</param>
+        /// <returns>
+        /// 	<c>true</c> if the specified <see cref="System.Object"/> is equal to this instance; otherwise, <c>false</c>.
+        /// </returns>
+        /// <exception cref="T:System.NullReferenceException">
+        /// The <paramref name="obj"/> parameter is null.
+        /// </exception>
+        public override bool Equals(object obj)
+        {
+            if (obj == null)
+                return false;
+
+            if (!typeof(SetResourceDataPackageOperation).IsAssignableFrom(obj.GetType()))
+                return false;
+
+            SetResourceDataPackageOperation vi = (SetResourceDataPackageOperation)obj;
+            return this.Data.Equals(vi.Data) &&
+                   this.DataName.Equals(vi.DataName) &&
+                   this.OperationName.Equals(vi.OperationName) &&
+                   this.ResourceId.Equals(vi.ResourceId) &&
+                   this.DataType == vi.DataType;
+        }
+
+        /// <summary>
+        /// Returns a hash code for this instance.
+        /// </summary>
+        /// <returns>
+        /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
+        /// </returns>
+        public override int GetHashCode()
+        {
+            //http://stackoverflow.com/questions/263400/what-is-the-best-algorithm-for-an-overridden-systemobjectgethashcode
+            unchecked
+            {
+                int hash = 17;
+                hash = hash * 23 + this.Data.GetHashCode();
+                hash = hash * 23 + this.DataName.GetHashCode();
+                hash = hash * 23 + this.OperationName.GetHashCode();
+                hash = hash * 23 + this.ResourceId.GetHashCode();
+                hash = hash * 23 + this.DataType.GetHashCode();
+
+                return hash;
+            }
+        }
+    }
 }

Modified: trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -25,6 +25,7 @@
 using System.Windows.Forms;
 using OSGeo.MapGuide.MaestroAPI.Services;
 using OSGeo.MapGuide.MaestroAPI;
+using Maestro.Shared.UI;
 
 namespace Maestro.Packaging
 {
@@ -79,7 +80,12 @@
 
             if (dlg.ShowDialog(owner) == DialogResult.OK)
             {
-                return UploadPackage(owner, con, dlg.FileName);
+                var optDiag = new PackageUploadOptionDialog();
+                optDiag.ShowDialog();
+                if (optDiag.Method == PackageUploadMethod.Transactional)
+                    return UploadPackage(owner, con, dlg.FileName);
+                else
+                    return UploadPackageNonTransactional(owner, con, dlg.FileName);
             }
             else
                 return DialogResult.Cancel;
@@ -124,6 +130,24 @@
         }
 
         /// <summary>
+        ///  Uploads a package file to the server in a non-transactional fashion
+        /// </summary>
+        /// <param name="owner">The owner form</param>
+        /// <param name="connection">The connection used to upload the package</param>
+        /// <param name="packageFile">The package file to upload</param>
+        /// <returns>A DialogResult object that indicates the result of the operation</returns>
+        public static DialogResult UploadPackageNonTransactional(Form owner, IServerConnection connection, string packageFile)
+        {
+            PackageProgress pkgp = new PackageProgress();
+            pkgp.Text = Properties.Resources.TitleUploading;
+            pkgp.m_invokeArgs = new object[] { packageFile, new List<PackageOperation>(), new List<PackageOperation>() };
+            pkgp.m_invokeObj = new PackageBuilder(connection);
+            pkgp.m_invokeMethod = pkgp.m_invokeObj.GetType().GetMethod("UploadPackageNonTransactional");
+
+            return pkgp.ShowDialog(owner);
+        }
+
+        /// <summary>
         /// Rebuilds a package
         /// </summary>
         /// <param name="owner">The owner form</param>
@@ -190,8 +214,8 @@
             }
         }
 
-        private delegate void SetCurrentProgressDelegate(ProgressType type, string resource, int total, int pg);
-        private void SetCurrentProgress(ProgressType type, string resource, int total, int pg)
+        private delegate void SetCurrentProgressDelegate(ProgressType type, string resource, int total, double pg);
+        private void SetCurrentProgress(ProgressType type, string resource, int total, double pg)
         {
             if (this.InvokeRequired)
                 this.Invoke(new SetCurrentProgressDelegate(SetCurrentProgress), new object[] { type, resource, total, pg });
@@ -209,7 +233,7 @@
                     this.TotalProgress.Minimum = 0;
 
                     double tick = 100 / BUILD_STAGES.Length;
-                    double lv = (tick * largePg) + (tick * ((double)pg / total));
+                    double lv = (tick * largePg) + (tick * (pg / total));
 
                     this.TotalProgress.Value = (int)Math.Max(Math.Min((int)lv, this.TotalProgress.Maximum), this.TotalProgress.Minimum);
                 }
@@ -246,7 +270,20 @@
                 {
                     OperationLabel.Text = resource;
                 }
-
+                else if (type == ProgressType.SetResource)
+                {
+                    CurrentProgress.Style = ProgressBarStyle.Continuous;
+                    CurrentProgress.Maximum = 100;
+                    CurrentProgress.Value = Convert.ToInt32(Math.Min(100.0, pg));
+                    OperationLabel.Text = string.Format(Properties.Resources.ProgressSetResource, resource, pg);
+                }
+                else if (type == ProgressType.SetResourceData)
+                {
+                    CurrentProgress.Style = ProgressBarStyle.Continuous;
+                    CurrentProgress.Maximum = 100;
+                    CurrentProgress.Value = Convert.ToInt32(Math.Min(100.0, pg));
+                    OperationLabel.Text = string.Format(Properties.Resources.ProgressSetResourceData, resource, pg);
+                }
             }
         }
 
@@ -292,7 +329,9 @@
                 return;
             }
             else if (e.Error != null)
-                throw e.Error;
+            {
+                ErrorDialog.Show(e.Error);
+            }
 
             m_invokeResult = e.Result;
             this.DialogResult = DialogResult.OK;

Modified: trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.designer.cs	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.designer.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -85,8 +85,8 @@
             // 
             // PackageProgress
             // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
             resources.ApplyResources(this, "$this");
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
             this.Controls.Add(this.CancelBtn);
             this.Controls.Add(this.OperationLabel);
             this.Controls.Add(this.label3);

Modified: trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.resx	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageProgress.resx	2011-09-15 18:02:38 UTC (rev 6134)
@@ -119,7 +119,7 @@
   </resheader>
   <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="CurrentProgress.Location" type="System.Drawing.Point, System.Drawing">
-    <value>88, 40</value>
+    <value>88, 87</value>
   </data>
   <data name="CurrentProgress.Size" type="System.Drawing.Size, System.Drawing">
     <value>384, 23</value>
@@ -141,7 +141,7 @@
     <value>6</value>
   </data>
   <data name="TotalProgress.Location" type="System.Drawing.Point, System.Drawing">
-    <value>88, 72</value>
+    <value>88, 119</value>
   </data>
   <data name="TotalProgress.Size" type="System.Drawing.Size, System.Drawing">
     <value>384, 23</value>
@@ -165,7 +165,7 @@
     <value>True</value>
   </data>
   <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
-    <value>16, 40</value>
+    <value>16, 87</value>
   </data>
   <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
     <value>23, 13</value>
@@ -192,7 +192,7 @@
     <value>True</value>
   </data>
   <data name="TotalLabel.Location" type="System.Drawing.Point, System.Drawing">
-    <value>16, 72</value>
+    <value>16, 119</value>
   </data>
   <data name="TotalLabel.Size" type="System.Drawing.Size, System.Drawing">
     <value>31, 13</value>
@@ -250,7 +250,7 @@
     <value>88, 8</value>
   </data>
   <data name="OperationLabel.Size" type="System.Drawing.Size, System.Drawing">
-    <value>384, 13</value>
+    <value>384, 76</value>
   </data>
   <data name="OperationLabel.TabIndex" type="System.Int32, mscorlib">
     <value>5</value>
@@ -274,7 +274,7 @@
     <value>Bottom</value>
   </data>
   <data name="CancelBtn.Location" type="System.Drawing.Point, System.Drawing">
-    <value>184, 112</value>
+    <value>184, 148</value>
   </data>
   <data name="CancelBtn.Size" type="System.Drawing.Size, System.Drawing">
     <value>112, 24</value>
@@ -303,12 +303,12 @@
   <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
-  <data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
-    <value>6, 13</value>
-  </data>
   <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
-    <value>489, 146</value>
+    <value>489, 182</value>
   </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
   <data name="$this.Text" xml:space="preserve">
     <value>Building package</value>
   </data>

Added: trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.Designer.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -0,0 +1,78 @@
+namespace Maestro.Packaging
+{
+    partial class PackageUploadOptionDialog
+    {
+        /// <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()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PackageUploadOptionDialog));
+            this.btnOK = new System.Windows.Forms.Button();
+            this.rdTransactional = new System.Windows.Forms.RadioButton();
+            this.rdNonTransactional = new System.Windows.Forms.RadioButton();
+            this.SuspendLayout();
+            // 
+            // btnOK
+            // 
+            resources.ApplyResources(this.btnOK, "btnOK");
+            this.btnOK.Name = "btnOK";
+            this.btnOK.UseVisualStyleBackColor = true;
+            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
+            // 
+            // rdTransactional
+            // 
+            resources.ApplyResources(this.rdTransactional, "rdTransactional");
+            this.rdTransactional.Checked = true;
+            this.rdTransactional.Name = "rdTransactional";
+            this.rdTransactional.TabStop = true;
+            this.rdTransactional.UseVisualStyleBackColor = true;
+            // 
+            // rdNonTransactional
+            // 
+            resources.ApplyResources(this.rdNonTransactional, "rdNonTransactional");
+            this.rdNonTransactional.Name = "rdNonTransactional";
+            this.rdNonTransactional.UseVisualStyleBackColor = true;
+            // 
+            // PackageUploadOptionDialog
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            resources.ApplyResources(this, "$this");
+            this.ControlBox = false;
+            this.Controls.Add(this.rdNonTransactional);
+            this.Controls.Add(this.rdTransactional);
+            this.Controls.Add(this.btnOK);
+            this.Name = "PackageUploadOptionDialog";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button btnOK;
+        private System.Windows.Forms.RadioButton rdTransactional;
+        private System.Windows.Forms.RadioButton rdNonTransactional;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -0,0 +1,76 @@
+#region Disclaimer / License
+// Copyright (C) 2011, 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;
+
+namespace Maestro.Packaging
+{
+    /// <summary>
+    /// The method of package uploading
+    /// </summary>
+    public enum PackageUploadMethod
+    {
+        /// <summary>
+        /// The offical method. Uses the ApplyResourcePackage API. This will wholly succeed or fail. This may
+        /// have issues with certain packages due to size and encrypted content.
+        /// </summary>
+        Transactional,
+        /// <summary>
+        /// This method can partially succeed and/or partially fail. Failed operations are logged. This method
+        /// can have its progress measured and is generally unaffected by size and encryption issues. This method
+        /// is recommended for large packages or for packages that fail to load in transactional mode.
+        /// </summary>
+        NonTransactional
+    }
+
+    public partial class PackageUploadOptionDialog : Form
+    {
+        public PackageUploadOptionDialog()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// Gets the selected upload method
+        /// </summary>
+        public PackageUploadMethod Method
+        {
+            get
+            {
+                PackageUploadMethod method = PackageUploadMethod.Transactional;
+                if (rdTransactional.Checked)
+                    method = PackageUploadMethod.Transactional;
+                else if (rdNonTransactional.Checked)
+                    method = PackageUploadMethod.NonTransactional;
+                return method;
+            }
+        }
+
+        private void btnOK_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.OK;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Packaging/PackageUploadOptionDialog.resx	2011-09-15 18:02:38 UTC (rev 6134)
@@ -0,0 +1,222 @@
+<?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=2.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>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="btnOK.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Bottom, Right</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
+    <value>362, 72</value>
+  </data>
+  <data name="btnOK.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="btnOK.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="btnOK.Text" xml:space="preserve">
+    <value>OK</value>
+  </data>
+  <data name="&gt;&gt;btnOK.Name" xml:space="preserve">
+    <value>btnOK</value>
+  </data>
+  <data name="&gt;&gt;btnOK.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="&gt;&gt;btnOK.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="rdTransactional.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="rdTransactional.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 12</value>
+  </data>
+  <data name="rdTransactional.Size" type="System.Drawing.Size, System.Drawing">
+    <value>379, 17</value>
+  </data>
+  <data name="rdTransactional.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="rdTransactional.Text" xml:space="preserve">
+    <value>Transactional method: Will wholly succeed or fail. This is the official method</value>
+  </data>
+  <data name="&gt;&gt;rdTransactional.Name" xml:space="preserve">
+    <value>rdTransactional</value>
+  </data>
+  <data name="&gt;&gt;rdTransactional.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;rdTransactional.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;rdTransactional.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="rdNonTransactional.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="rdNonTransactional.Location" type="System.Drawing.Point, System.Drawing">
+    <value>12, 36</value>
+  </data>
+  <data name="rdNonTransactional.Size" type="System.Drawing.Size, System.Drawing">
+    <value>379, 17</value>
+  </data>
+  <data name="rdNonTransactional.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="rdNonTransactional.Text" xml:space="preserve">
+    <value>Non-transactional method. Can partially fail, but failed operations are logged</value>
+  </data>
+  <data name="&gt;&gt;rdNonTransactional.Name" xml:space="preserve">
+    <value>rdNonTransactional</value>
+  </data>
+  <data name="&gt;&gt;rdNonTransactional.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;rdNonTransactional.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;rdNonTransactional.ZOrder" xml:space="preserve">
+    <value>0</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.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>449, 107</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Choose Package Upload Method</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>PackageUploadOptionDialog</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.Designer.cs	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.Designer.cs	2011-09-15 18:02:38 UTC (rev 6134)
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.4952
+//     Runtime Version:2.0.50727.4959
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -142,6 +142,24 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Set Resource: {0} ({1:0.00}%).
+        /// </summary>
+        internal static string ProgressSetResource {
+            get {
+                return ResourceManager.GetString("ProgressSetResource", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Set Resource Data: {0} ({1:0.00}%).
+        /// </summary>
+        internal static string ProgressSetResourceData {
+            get {
+                return ResourceManager.GetString("ProgressSetResourceData", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Updated references.
         /// </summary>
         internal static string ProgressUpdatedReferences {

Modified: trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.resx	2011-09-15 07:58:37 UTC (rev 6133)
+++ trunk/Tools/Maestro/Maestro.Packaging/Properties/Resources.resx	2011-09-15 18:02:38 UTC (rev 6134)
@@ -153,6 +153,12 @@
     <value>Reading package contents ...</value>
     <comment>A message that is displayed while reading the package contents</comment>
   </data>
+  <data name="ProgressSetResource" xml:space="preserve">
+    <value>Set Resource: {0} ({1:0.00}%)</value>
+  </data>
+  <data name="ProgressSetResourceData" xml:space="preserve">
+    <value>Set Resource Data: {0} ({1:0.00}%)</value>
+  </data>
   <data name="ProgressUpdatedReferences" xml:space="preserve">
     <value>Updated references</value>
     <comment>A progress message that is displayed when references are updated</comment>


Property changes on: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI.Native
___________________________________________________________________
Modified: svn:ignore
   - bin
obj

   + bin
obj
*.user




More information about the mapguide-commits mailing list