[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