[mapguide-commits] r5723 - in trunk/Tools/Maestro/Maestro.Base: . Commands Commands/SiteExplorer Properties

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Apr 28 06:46:26 EDT 2011


Author: jng
Date: 2011-04-28 03:46:25 -0700 (Thu, 28 Apr 2011)
New Revision: 5723

Added:
   trunk/Tools/Maestro/Maestro.Base/Commands/ValidateEditedResourceCommand.cs
Modified:
   trunk/Tools/Maestro/Maestro.Base/Commands/SiteExplorer/ValidateCommand.cs
   trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin
   trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj
   trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx
Log:
#1672: The validate command on the toolbar did not actually function as advertised. This submission fixes this command so that it does its originally intended function: To validate the resource of the active editor.


Modified: trunk/Tools/Maestro/Maestro.Base/Commands/SiteExplorer/ValidateCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Commands/SiteExplorer/ValidateCommand.cs	2011-04-26 13:59:16 UTC (rev 5722)
+++ trunk/Tools/Maestro/Maestro.Base/Commands/SiteExplorer/ValidateCommand.cs	2011-04-28 10:46:25 UTC (rev 5723)
@@ -33,10 +33,8 @@
 
 namespace Maestro.Base.Commands.SiteExplorer
 {
-    internal class ValidateCommand : AbstractMenuCommand
+    internal class ValidateCommand : BaseValidateCommand
     {
-        private IServerConnection _conn;
-
         public override void Run()
         {
             var wb = Workbench.Instance;
@@ -55,96 +53,10 @@
                     args[i] = items[i].ResourceId;
                 }
 
-                var issues = (ValidationIssue[])pdlg.RunOperationAsync(wb, new ProgressDialog.DoBackgroundWork(BackgroundValidate), items[0].ResourceId);
+                var issues = (ValidationIssue[])pdlg.RunOperationAsync(wb, new ProgressDialog.DoBackgroundWork(BackgroundValidate), args);
 
-                if (issues != null)
-                {
-                    if (issues.Length > 0)
-                    {
-                        //Sigh! LINQ would've made this code so simple...
-
-                        var sort = new Dictionary<string, List<ValidationIssue>>();
-                        foreach (var issue in issues)
-                        {
-                            string resId = issue.Resource.ResourceID;
-                            if (!sort.ContainsKey(resId))
-                                sort[resId] = new List<ValidationIssue>();
-
-                            sort[resId].Add(issue);
-                        }
-
-                        var groupedIssues = new List<KeyValuePair<string, ValidationIssue[]>>();
-                        foreach (var kvp in sort)
-                        {
-                            groupedIssues.Add(
-                                new KeyValuePair<string, ValidationIssue[]>(
-                                    kvp.Key,
-                                    kvp.Value.ToArray()));
-                        }
-
-                        var resDlg = new ValidationResultsDialog(groupedIssues);
-                        resDlg.Show();
-                    }
-                    else
-                    {
-                        MessageService.ShowMessage(Properties.Resources.ValidationNoIssues);
-                    }
-                }
+                CollectAndDisplayIssues(issues);
             }
         }
-
-        private object BackgroundValidate(BackgroundWorker worker, DoWorkEventArgs e, params object[] args)
-        {
-            //Collect all documents to be validated. Some of these selected items
-            //may be folders.
-            var documents = new List<string>();
-            foreach (object a in args)
-            {
-                string rid = a.ToString();
-                if (ResourceIdentifier.Validate(rid))
-                {
-                    var resId = new ResourceIdentifier(rid);
-                    if (resId.IsFolder)
-                    {
-                        foreach (IRepositoryItem o in _conn.ResourceService.GetRepositoryResources((string)args[0]).Children)
-                        {
-                            if (!o.IsFolder)
-                            {
-                                documents.Add(o.ResourceId);
-                            }
-                        }
-                    }
-                    else
-                    {
-                        documents.Add(rid);
-                    }
-                }
-            }
-
-            worker.ReportProgress(0);
-            var context = new ResourceValidationContext(_conn.ResourceService, _conn.FeatureService);
-
-            var set = new ValidationResultSet();
-            int i = 0;
-            foreach (string s in documents)
-            {
-                worker.ReportProgress((int)((i / (double)documents.Count) * 100), s);
-                IResource item = null;
-                try
-                {
-                    item = _conn.ResourceService.GetResource(s);
-                    set.AddIssues(ResourceValidatorSet.Validate(context, item, true));
-                }
-                catch (Exception ex)
-                {
-                    string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
-                    set.AddIssue(new ValidationIssue(item, ValidationStatus.Error, ValidationStatusCode.Error_General_ValidationError, string.Format(Properties.Resources.ValidationResourceLoadFailed, msg)));
-                }
-                i++;
-                worker.ReportProgress((int)((i / (double)documents.Count) * 100), s);
-            }
-
-            return set.GetAllIssues();
-        }
     }
 }

Added: trunk/Tools/Maestro/Maestro.Base/Commands/ValidateEditedResourceCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Commands/ValidateEditedResourceCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.Base/Commands/ValidateEditedResourceCommand.cs	2011-04-28 10:46:25 UTC (rev 5723)
@@ -0,0 +1,153 @@
+#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.Text;
+using ICSharpCode.Core;
+using OSGeo.MapGuide.MaestroAPI.Resource;
+using OSGeo.MapGuide.ObjectModels.Common;
+using System.ComponentModel;
+using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
+using OSGeo.MapGuide.MaestroAPI.Resource.Validation;
+using Maestro.Shared.UI;
+using Maestro.Base.Services;
+
+namespace Maestro.Base.Commands
+{
+    internal abstract class BaseValidateCommand : AbstractMenuCommand
+    {
+        protected IServerConnection _conn;
+
+        protected object BackgroundValidate(BackgroundWorker worker, DoWorkEventArgs e, params object[] args)
+        {
+            //Collect all documents to be validated. Some of these selected items
+            //may be folders.
+            var documents = new List<string>();
+            foreach (object a in args)
+            {
+                string rid = a.ToString();
+                if (ResourceIdentifier.Validate(rid))
+                {
+                    var resId = new ResourceIdentifier(rid);
+                    if (resId.IsFolder)
+                    {
+                        foreach (IRepositoryItem o in _conn.ResourceService.GetRepositoryResources((string)args[0]).Children)
+                        {
+                            if (!o.IsFolder)
+                            {
+                                documents.Add(o.ResourceId);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        documents.Add(rid);
+                    }
+                }
+            }
+
+            worker.ReportProgress(0);
+            var context = new ResourceValidationContext(_conn.ResourceService, _conn.FeatureService);
+
+            var set = new ValidationResultSet();
+            int i = 0;
+            foreach (string s in documents)
+            {
+                worker.ReportProgress((int)((i / (double)documents.Count) * 100), s);
+                IResource item = null;
+                try
+                {
+                    item = _conn.ResourceService.GetResource(s);
+                    set.AddIssues(ResourceValidatorSet.Validate(context, item, true));
+                }
+                catch (Exception ex)
+                {
+                    string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                    set.AddIssue(new ValidationIssue(item, ValidationStatus.Error, ValidationStatusCode.Error_General_ValidationError, string.Format(Properties.Resources.ValidationResourceLoadFailed, msg)));
+                }
+                i++;
+                worker.ReportProgress((int)((i / (double)documents.Count) * 100), s);
+            }
+
+            return set.GetAllIssues();
+        }
+
+        protected static void CollectAndDisplayIssues(ValidationIssue[] issues)
+        {
+            if (issues != null)
+            {
+                if (issues.Length > 0)
+                {
+                    //Sigh! LINQ would've made this code so simple...
+
+                    var sort = new Dictionary<string, List<ValidationIssue>>();
+                    foreach (var issue in issues)
+                    {
+                        string resId = issue.Resource.ResourceID;
+                        if (!sort.ContainsKey(resId))
+                            sort[resId] = new List<ValidationIssue>();
+
+                        sort[resId].Add(issue);
+                    }
+
+                    var groupedIssues = new List<KeyValuePair<string, ValidationIssue[]>>();
+                    foreach (var kvp in sort)
+                    {
+                        groupedIssues.Add(
+                            new KeyValuePair<string, ValidationIssue[]>(
+                                kvp.Key,
+                                kvp.Value.ToArray()));
+                    }
+
+                    var resDlg = new ValidationResultsDialog(groupedIssues);
+                    resDlg.Show();
+                }
+                else
+                {
+                    MessageService.ShowMessage(Properties.Resources.ValidationNoIssues);
+                }
+            }
+        }
+    }
+
+    internal class ValidateEditedResourceCommand : BaseValidateCommand
+    {
+        public override void Run()
+        {
+            var wb = Workbench.Instance;
+            var ed = wb.ActiveEditor;
+
+            if (ed != null)
+            {
+                _conn = ed.EditorService.GetEditedResource().CurrentConnection;
+
+                ed.EditorService.SyncSessionCopy();
+
+                var pdlg = new ProgressDialog();
+                pdlg.CancelAbortsThread = true;
+
+                var issues = (ValidationIssue[])pdlg.RunOperationAsync(wb, new ProgressDialog.DoBackgroundWork(BackgroundValidate), ed.EditorService.EditedResourceID);
+
+                CollectAndDisplayIssues(issues);
+            }
+        }
+    }
+}

Modified: trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin	2011-04-26 13:59:16 UTC (rev 5722)
+++ trunk/Tools/Maestro/Maestro.Base/Maestro.Base.addin	2011-04-28 10:46:25 UTC (rev 5723)
@@ -353,8 +353,8 @@
             <ToolbarItem id="Validate"
                          icon="tick"
                          label="${res:Toolbar_Validate}"
-                         tooltip="${res:Menu_File_ValidateResource}"
-                         class="Maestro.Base.Commands.SiteExplorer.ValidateCommand" />
+                         tooltip="${res:Menu_File_ValidateEditedResource}"
+                         class="Maestro.Base.Commands.ValidateEditedResourceCommand" />
         </Condition>
         <!-- 
         Only needed if our custom drawn close buttons don't appear on document

Modified: trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj	2011-04-26 13:59:16 UTC (rev 5722)
+++ trunk/Tools/Maestro/Maestro.Base/Maestro.Base.csproj	2011-04-28 10:46:25 UTC (rev 5723)
@@ -126,6 +126,7 @@
     <Compile Include="Commands\Test\OpenUnmanagedResourceCommand.cs" />
     <Compile Include="Commands\Test\SelectFdoProviderCommand.cs" />
     <Compile Include="Commands\Test\TestCommands.cs" />
+    <Compile Include="Commands\ValidateEditedResourceCommand.cs" />
     <Compile Include="Commands\XmlEditCommand.cs" />
     <Compile Include="Editor\DrawingSourceEditor.cs">
       <SubType>UserControl</SubType>

Modified: trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs	2011-04-26 13:59:16 UTC (rev 5722)
+++ trunk/Tools/Maestro/Maestro.Base/Properties/Resources.Designer.cs	2011-04-28 10:46:25 UTC (rev 5723)
@@ -1011,6 +1011,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to Validate Edited Resource.
+        /// </summary>
+        internal static string Menu_File_ValidateEditedResource {
+            get {
+                return ResourceManager.GetString("Menu_File_ValidateEditedResource", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to Validate Resource.
         /// </summary>
         internal static string Menu_File_ValidateResource {

Modified: trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx	2011-04-26 13:59:16 UTC (rev 5722)
+++ trunk/Tools/Maestro/Maestro.Base/Properties/Resources.resx	2011-04-28 10:46:25 UTC (rev 5723)
@@ -1004,4 +1004,7 @@
   <data name="SiteExplorer_FindReplaceXml" xml:space="preserve">
     <value>Find and Replace XML content</value>
   </data>
+  <data name="Menu_File_ValidateEditedResource" xml:space="preserve">
+    <value>Validate Edited Resource</value>
+  </data>
 </root>
\ No newline at end of file



More information about the mapguide-commits mailing list