[mapguide-commits] r6006 - in trunk/Tools/Maestro: ExtendedModels/MapDefinition-2.3.0 OSGeo.MapGuide.ExtendedObjectModels OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/Resource/Validation

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Jul 26 10:28:56 EDT 2011


Author: jng
Date: 2011-07-26 07:28:56 -0700 (Tue, 26 Jul 2011)
New Revision: 6006

Added:
   trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/MapDefinitionValidator.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs
Modified:
   trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/OSGeo.MapGuide.ObjectModels.MapDefinition-2.3.0.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
   trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/MapDefinitionValidator.cs
Log:
Add base validator support for Layer and Map Definitions v2.3.0


Added: trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/MapDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/MapDefinitionValidator.cs	                        (rev 0)
+++ trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/MapDefinitionValidator.cs	2011-07-26 14:28:56 UTC (rev 6006)
@@ -0,0 +1,35 @@
+#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 OSGeo.MapGuide.MaestroAPI.Resource.Validation;
+using OSGeo.MapGuide.MaestroAPI.Resource;
+
+namespace OSGeo.MapGuide.ObjectModels.MapDefinition_2_3_0
+{
+    public class MapDefinitionValidator : BaseMapDefinitionValidator
+    {
+        public override OSGeo.MapGuide.MaestroAPI.Resource.ResourceTypeDescriptor SupportedResourceAndVersion
+        {
+            get { return new ResourceTypeDescriptor(OSGeo.MapGuide.MaestroAPI.ResourceTypes.MapDefinition, "2.3.0"); }
+        }
+    }
+}

Modified: trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/OSGeo.MapGuide.ObjectModels.MapDefinition-2.3.0.csproj
===================================================================
--- trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/OSGeo.MapGuide.ObjectModels.MapDefinition-2.3.0.csproj	2011-07-26 13:25:58 UTC (rev 6005)
+++ trunk/Tools/Maestro/ExtendedModels/MapDefinition-2.3.0/OSGeo.MapGuide.ObjectModels.MapDefinition-2.3.0.csproj	2011-07-26 14:28:56 UTC (rev 6006)
@@ -52,6 +52,7 @@
     <Compile Include="..\..\Properties\SignedAssemblyInfo.cs">
       <Link>SignedAssemblyInfo.cs</Link>
     </Compile>
+    <Compile Include="MapDefinitionValidator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs	2011-07-26 13:25:58 UTC (rev 6005)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs	2011-07-26 14:28:56 UTC (rev 6006)
@@ -93,8 +93,8 @@
                 new ResourceDeserializationCallback(Ldf130.LdfEntryPoint.Deserialize));
             ObjectFactory.RegisterLayerFactoryMethod(new Version(1, 3, 0), new LayerCreatorFunc(Ldf130.LdfEntryPoint.CreateDefault));
 
-            //Layer Definition 1.3.0
-            ResourceValidatorSet.RegisterValidator(new Ldf130.LayerDefinitionValidator());
+            //Layer Definition 2.3.0
+            ResourceValidatorSet.RegisterValidator(new Ldf230.LayerDefinitionValidator());
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.LayerDefinition, "2.3.0"),
                 new ResourceSerializationCallback(Ldf230.LdfEntryPoint.Serialize),
@@ -136,6 +136,7 @@
             ObjectFactory.RegisterSimpleSymbolFactoryMethod(new Version(1, 1, 0), new SimpleSymbolDefCreatorFunc(Sym110.SymbolDefEntryPoint.CreateDefaultSimple));
 
             //Map Definition 2.3.0
+            ResourceValidatorSet.RegisterValidator(new Mdf230.MapDefinitionValidator());
             ResourceTypeRegistry.RegisterResource(
                 new ResourceTypeDescriptor(ResourceTypes.MapDefinition, "2.3.0"),
                 new ResourceSerializationCallback(Mdf230.MdfEntryPoint.Serialize),

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2011-07-26 13:25:58 UTC (rev 6005)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj	2011-07-26 14:28:56 UTC (rev 6006)
@@ -224,6 +224,7 @@
     <Compile Include="ObjectModels\WatermarkInterfaces.cs" />
     <Compile Include="Resource\Conversion\NsDoc.cs" />
     <Compile Include="Resource\NsDoc.cs" />
+    <Compile Include="Resource\Validation\BaseMapDefinitionValidator.cs" />
     <Compile Include="Resource\Validation\NsDoc.cs" />
     <Compile Include="Resource\Validation\ValidationStatusCode.cs" />
     <Compile Include="SchemaOverrides\GdalConfigurationDocument.cs" />

Added: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs	                        (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs	2011-07-26 14:28:56 UTC (rev 6006)
@@ -0,0 +1,220 @@
+#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 OSGeo.MapGuide.ObjectModels.MapDefinition;
+using OSGeo.MapGuide.ObjectModels;
+using OSGeo.MapGuide.ObjectModels.LayerDefinition;
+using OSGeo.MapGuide.ObjectModels.FeatureSource;
+using OSGeo.MapGuide.ObjectModels.Common;
+using OSGeo.MapGuide.MaestroAPI.Exceptions;
+
+namespace OSGeo.MapGuide.MaestroAPI.Resource.Validation
+{
+    /// <summary>
+    /// Resource validator for Map Definitions
+    /// </summary>
+    public abstract class BaseMapDefinitionValidator : IResourceValidator
+    {
+        /// <summary>
+        /// Gets the resource type and version this validator supports
+        /// </summary>
+        /// <value></value>
+        public abstract ResourceTypeDescriptor SupportedResourceAndVersion { get; }
+
+        /// <summary>
+        /// Validats the specified resources for common issues associated with this
+        /// resource type
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="resource"></param>
+        /// <param name="recurse"></param>
+        /// <returns></returns>
+        public virtual ValidationIssue[] Validate(ResourceValidationContext context, IResource resource, bool recurse)
+        {
+            if (!resource.GetResourceTypeDescriptor().Equals(this.SupportedResourceAndVersion))
+                return null;
+
+            return ValidateBase(context, resource, recurse);
+        }
+
+        /// <summary>
+        /// Performs base resource validation
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="resource"></param>
+        /// <param name="recurse"></param>
+        /// <returns></returns>
+        protected static ValidationIssue[] ValidateBase(ResourceValidationContext context, IResource resource, bool recurse)
+        {
+            Check.NotNull(context, "context");
+
+            if (context.IsAlreadyValidated(resource.ResourceID))
+                return null;
+
+            if (resource.ResourceType != ResourceTypes.MapDefinition)
+                return null;
+
+            List<ValidationIssue> issues = new List<ValidationIssue>();
+
+            IMapDefinition mdef = resource as IMapDefinition;
+
+            foreach (IMapLayerGroup g in mdef.MapLayerGroup)
+            {
+                if (g.ShowInLegend && (g.LegendLabel == null || g.LegendLabel.Trim().Length == 0))
+                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Information, ValidationStatusCode.Info_MapDefinition_GroupMissingLabelInformation, string.Format(Properties.Resources.MDF_GroupMissingLabelInformation, g.Name)));
+                else if (g.ShowInLegend && g.LegendLabel.Trim().ToLower() == "layer group")
+                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Information, ValidationStatusCode.Info_MapDefinition_GroupHasDefaultLabel, string.Format(Properties.Resources.MDF_GroupHasDefaultLabelInformation, g.Name)));
+
+                if (!string.IsNullOrEmpty(g.Group))
+                {
+                    var grp = mdef.GetGroupByName(g.Group);
+                    if (grp == null)
+                        issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_GroupWithNonExistentGroup, string.Format(Properties.Resources.MDF_GroupWithNonExistentGroup, g.Name, g.Group)));
+                }
+            }
+
+            List<IBaseMapLayer> layers = new List<IBaseMapLayer>();
+            foreach (IBaseMapLayer l in mdef.MapLayer)
+                layers.Add(l);
+
+            if (mdef.BaseMap != null && mdef.BaseMap.HasGroups())
+            {
+                if (mdef.BaseMap.ScaleCount == 0)
+                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_NoFiniteDisplayScales, Properties.Resources.MDF_NoFiniteDisplayScalesSpecified));
+
+                foreach (IBaseMapGroup g in mdef.BaseMap.BaseMapLayerGroup)
+                {
+                    foreach (IBaseMapLayer l in g.BaseMapLayer)
+                        layers.Add(l);
+                }
+            }
+            Dictionary<string, IBaseMapLayer> nameCounter = new Dictionary<string, IBaseMapLayer>();
+
+            foreach (IBaseMapLayer l in layers)
+            {
+                if (nameCounter.ContainsKey(l.Name))
+                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Warning, ValidationStatusCode.Error_MapDefinition_DuplicateLayerName, string.Format(Properties.Resources.MDF_LayerNameDuplicateWarning, l.Name, l.ResourceId, nameCounter[l.Name].ResourceId)));
+                else
+                    nameCounter.Add(l.Name, l);
+
+                var ml = l as IMapLayer;
+                if (ml != null && !string.IsNullOrEmpty(ml.Group))
+                {
+                    var grp = mdef.GetGroupByName(ml.Group);
+                    if (grp == null)
+                        issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_LayerWithNonExistentGroup, string.Format(Properties.Resources.MDF_LayerWithNonExistentGroup, ml.Name, ml.Group)));
+                }
+
+                if (l.ShowInLegend && (string.IsNullOrEmpty(l.LegendLabel) || l.LegendLabel.Trim().Length == 0))
+                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Information, ValidationStatusCode.Warning_MapDefinition_LayerMissingLegendLabel, string.Format(Properties.Resources.MDF_LayerMissingLabelInformation, l.Name)));
+
+                var mapEnv = ObjectFactory.CreateEnvelope(mdef.Extents.MinX, mdef.Extents.MinY, mdef.Extents.MaxX, mdef.Extents.MaxY);
+
+                try
+                {
+                    ILayerDefinition layer = null;
+                    IResource res = context.GetResource(l.ResourceId);
+                    if (!ResourceValidatorSet.HasValidator(res.ResourceType, res.ResourceVersion))
+                    {
+                        //Need to trap the no registered validator message
+                        issues.AddRange(ResourceValidatorSet.Validate(context, res, true));
+                        continue;
+                    }
+
+                    layer = (ILayerDefinition)res;
+                    if (recurse)
+                    {
+                        issues.AddRange(ResourceValidatorSet.Validate(context, layer, recurse));
+                    }
+
+                    IVectorLayerDefinition vl = null;
+                    if (layer.SubLayer.LayerType == LayerType.Vector)
+                        vl = (IVectorLayerDefinition)layer.SubLayer;
+
+                    if (vl != null)
+                    {
+                        try
+                        {
+                            IFeatureSource fs = (IFeatureSource)context.GetResource(vl.ResourceId);
+                            //The layer recurses on the FeatureSource
+                            //issues.AddRange(Validation.Validate(fs, true));
+
+                            try
+                            {
+                                FdoSpatialContextList scList = context.GetSpatialContexts(fs.ResourceID);
+
+                                if (scList.SpatialContext == null || scList.SpatialContext.Count == 0)
+                                    issues.Add(new ValidationIssue(fs, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_MissingSpatialContext, string.Format(Properties.Resources.MDF_MissingSpatialContextWarning, fs.ResourceID)));
+                                else
+                                {
+                                    if (scList.SpatialContext.Count > 1)
+                                        issues.Add(new ValidationIssue(fs, ValidationStatus.Information, ValidationStatusCode.Info_MapDefinition_MultipleSpatialContexts, string.Format(Properties.Resources.MDF_MultipleSpatialContextsInformation, fs.ResourceID)));
+
+
+                                    bool skipGeomCheck = false;
+
+                                    //TODO: Switch to the correct version (2.1), once released
+                                    if (scList.SpatialContext[0].CoordinateSystemWkt != mdef.CoordinateSystem)
+                                    {
+                                        if (layer.SubLayer.LayerType == LayerType.Raster && mdef.CurrentConnection.SiteVersion <= SiteVersions.GetVersion(OSGeo.MapGuide.MaestroAPI.KnownSiteVersions.MapGuideOS2_0_2))
+                                            issues.Add(new ValidationIssue(fs, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_RasterReprojection, string.Format(Properties.Resources.MDF_RasterReprojectionError, fs.ResourceID)));
+                                        else
+                                            issues.Add(new ValidationIssue(fs, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_LayerReprojection, string.Format(Properties.Resources.MDF_DataReprojectionWarning, fs.ResourceID)));
+
+                                        skipGeomCheck = true;
+                                    }
+
+                                    if (vl.Geometry != null && !skipGeomCheck)
+                                    {
+                                        var env = fs.GetSpatialExtent(vl.FeatureName, vl.Geometry);
+                                        if (!env.Intersects(mapEnv))
+                                            issues.Add(new ValidationIssue(fs, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_DataOutsideMapBounds, string.Format(Properties.Resources.MDF_DataOutsideMapWarning, fs.ResourceID)));
+                                    }
+                                }
+                            }
+                            catch (Exception ex)
+                            {
+                                string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                                issues.Add(new ValidationIssue(layer, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_ResourceRead, string.Format(Properties.Resources.MDF_ResourceReadError, fs.ResourceID, msg)));
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                            issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_FeatureSourceRead, string.Format(Properties.Resources.MDF_FeatureSourceReadError, l.ResourceId, msg)));
+                        }
+                    }
+
+                }
+                catch (Exception ex)
+                {
+                    string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
+                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_LayerRead, string.Format(Properties.Resources.MDF_LayerReadError, l.ResourceId, msg)));
+                }
+            }
+
+            context.MarkValidated(resource.ResourceID);
+
+            return issues.ToArray();
+        }
+    }
+}

Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/MapDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/MapDefinitionValidator.cs	2011-07-26 13:25:58 UTC (rev 6005)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/MapDefinitionValidator.cs	2011-07-26 14:28:56 UTC (rev 6006)
@@ -31,178 +31,13 @@
 
 namespace OSGeo.MapGuide.MaestroAPI.Resource.Validation
 {
-    /// <summary>
-    /// Resource validator for Map Definitions
-    /// </summary>
-    public class MapDefinitionValidator : IResourceValidator
+    public class MapDefinitionValidator : BaseMapDefinitionValidator 
     {
         /// <summary>
-        /// Validats the specified resources for common issues associated with this
-        /// resource type
-        /// </summary>
-        /// <param name="context"></param>
-        /// <param name="resource"></param>
-        /// <param name="recurse"></param>
-        /// <returns></returns>
-        public ValidationIssue[] Validate(ResourceValidationContext context, IResource resource, bool recurse)
-        {
-            Check.NotNull(context, "context");
-
-            if (context.IsAlreadyValidated(resource.ResourceID))
-                return null;
-
-            if (resource.ResourceType != ResourceTypes.MapDefinition)
-                return null;
-
-            List<ValidationIssue> issues = new List<ValidationIssue>();
-
-            IMapDefinition mdef = resource as IMapDefinition;
-
-            foreach (IMapLayerGroup g in mdef.MapLayerGroup)
-            {
-                if (g.ShowInLegend && (g.LegendLabel == null || g.LegendLabel.Trim().Length == 0))
-                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Information, ValidationStatusCode.Info_MapDefinition_GroupMissingLabelInformation, string.Format(Properties.Resources.MDF_GroupMissingLabelInformation, g.Name)));
-                else if (g.ShowInLegend && g.LegendLabel.Trim().ToLower() == "layer group")
-                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Information, ValidationStatusCode.Info_MapDefinition_GroupHasDefaultLabel, string.Format(Properties.Resources.MDF_GroupHasDefaultLabelInformation, g.Name)));
-
-                if (!string.IsNullOrEmpty(g.Group))
-                {
-                    var grp = mdef.GetGroupByName(g.Group);
-                    if (grp == null)
-                        issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_GroupWithNonExistentGroup, string.Format(Properties.Resources.MDF_GroupWithNonExistentGroup, g.Name, g.Group)));
-                }
-            }
-
-            List<IBaseMapLayer> layers = new List<IBaseMapLayer>();
-            foreach (IBaseMapLayer l in mdef.MapLayer)
-                layers.Add(l);
-
-            if (mdef.BaseMap != null && mdef.BaseMap.HasGroups())
-            {
-                if (mdef.BaseMap.ScaleCount == 0)
-                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_NoFiniteDisplayScales, Properties.Resources.MDF_NoFiniteDisplayScalesSpecified));
-
-                foreach (IBaseMapGroup g in mdef.BaseMap.BaseMapLayerGroup)
-                {
-                    foreach (IBaseMapLayer l in g.BaseMapLayer)
-                        layers.Add(l);
-                }
-            }
-            Dictionary<string, IBaseMapLayer> nameCounter = new Dictionary<string, IBaseMapLayer>();
-            
-            foreach (IBaseMapLayer l in layers)
-            {
-                if (nameCounter.ContainsKey(l.Name))
-                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Warning, ValidationStatusCode.Error_MapDefinition_DuplicateLayerName, string.Format(Properties.Resources.MDF_LayerNameDuplicateWarning, l.Name, l.ResourceId, nameCounter[l.Name].ResourceId)));
-                else
-                    nameCounter.Add(l.Name, l);
-
-                var ml = l as IMapLayer;
-                if (ml != null && !string.IsNullOrEmpty(ml.Group))
-                {
-                    var grp = mdef.GetGroupByName(ml.Group);
-                    if (grp == null)
-                        issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_LayerWithNonExistentGroup, string.Format(Properties.Resources.MDF_LayerWithNonExistentGroup, ml.Name, ml.Group)));
-                }
-
-                if (l.ShowInLegend && (string.IsNullOrEmpty(l.LegendLabel) || l.LegendLabel.Trim().Length == 0))
-                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Information, ValidationStatusCode.Warning_MapDefinition_LayerMissingLegendLabel, string.Format(Properties.Resources.MDF_LayerMissingLabelInformation, l.Name)));
-
-                var mapEnv = ObjectFactory.CreateEnvelope(mdef.Extents.MinX, mdef.Extents.MinY, mdef.Extents.MaxX, mdef.Extents.MaxY);
-
-                try
-                {
-                    ILayerDefinition layer = null;
-                    IResource res = context.GetResource(l.ResourceId);
-                    if (!ResourceValidatorSet.HasValidator(res.ResourceType, res.ResourceVersion))
-                    {
-                        //Need to trap the no registered validator message
-                        issues.AddRange(ResourceValidatorSet.Validate(context, res, true));
-                        continue;
-                    }
-
-                    layer = (ILayerDefinition)res;
-                    if (recurse)
-                    {
-                        issues.AddRange(ResourceValidatorSet.Validate(context, layer, recurse));
-                    }
-
-                    IVectorLayerDefinition vl = null;
-                    if (layer.SubLayer.LayerType == LayerType.Vector)
-                        vl = (IVectorLayerDefinition)layer.SubLayer;
-
-                    if (vl != null)
-                    {
-                        try
-                        {
-                            IFeatureSource fs = (IFeatureSource)context.GetResource(vl.ResourceId);
-                            //The layer recurses on the FeatureSource
-                            //issues.AddRange(Validation.Validate(fs, true));
-
-                            try
-                            {
-                                FdoSpatialContextList scList = context.GetSpatialContexts(fs.ResourceID);
-
-                                if (scList.SpatialContext == null || scList.SpatialContext.Count == 0)
-                                    issues.Add(new ValidationIssue(fs, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_MissingSpatialContext, string.Format(Properties.Resources.MDF_MissingSpatialContextWarning, fs.ResourceID)));
-                                else
-                                {
-                                    if (scList.SpatialContext.Count > 1)
-                                        issues.Add(new ValidationIssue(fs, ValidationStatus.Information, ValidationStatusCode.Info_MapDefinition_MultipleSpatialContexts, string.Format(Properties.Resources.MDF_MultipleSpatialContextsInformation, fs.ResourceID)));
-
-
-                                    bool skipGeomCheck = false;
-
-                                    //TODO: Switch to the correct version (2.1), once released
-                                    if (scList.SpatialContext[0].CoordinateSystemWkt != mdef.CoordinateSystem)
-                                    {
-                                        if (layer.SubLayer.LayerType == LayerType.Raster && mdef.CurrentConnection.SiteVersion <= SiteVersions.GetVersion(OSGeo.MapGuide.MaestroAPI.KnownSiteVersions.MapGuideOS2_0_2))
-                                            issues.Add(new ValidationIssue(fs, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_RasterReprojection, string.Format(Properties.Resources.MDF_RasterReprojectionError, fs.ResourceID)));
-                                        else
-                                            issues.Add(new ValidationIssue(fs, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_LayerReprojection, string.Format(Properties.Resources.MDF_DataReprojectionWarning, fs.ResourceID)));
-
-                                        skipGeomCheck = true;
-                                    }
-
-                                    if (vl.Geometry != null && !skipGeomCheck)
-                                    {
-                                        var env = fs.GetSpatialExtent(vl.FeatureName, vl.Geometry);
-                                        if (!env.Intersects(mapEnv))
-                                            issues.Add(new ValidationIssue(fs, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_DataOutsideMapBounds, string.Format(Properties.Resources.MDF_DataOutsideMapWarning, fs.ResourceID)));
-                                    }
-                                }
-                            }
-                            catch (Exception ex)
-                            {
-                                string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
-                                issues.Add(new ValidationIssue(layer, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_ResourceRead, string.Format(Properties.Resources.MDF_ResourceReadError, fs.ResourceID, msg)));
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
-                            issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_FeatureSourceRead, string.Format(Properties.Resources.MDF_FeatureSourceReadError, l.ResourceId, msg)));
-                        }
-                    }
-
-                }
-                catch (Exception ex)
-                {
-                    string msg = NestedExceptionMessageProcessor.GetFullMessage(ex);
-                    issues.Add(new ValidationIssue(mdef, ValidationStatus.Error, ValidationStatusCode.Error_MapDefinition_LayerRead, string.Format(Properties.Resources.MDF_LayerReadError, l.ResourceId, msg)));
-                }
-            }
-
-            context.MarkValidated(resource.ResourceID);
-
-            return issues.ToArray();
-        }
-
-        /// <summary>
         /// Gets the resource type and version this validator supports
         /// </summary>
         /// <value></value>
-        public ResourceTypeDescriptor SupportedResourceAndVersion
+        public override ResourceTypeDescriptor SupportedResourceAndVersion
         {
             get { return new ResourceTypeDescriptor(ResourceTypes.MapDefinition, "1.0.0"); }
         }



More information about the mapguide-commits mailing list