[mapguide-commits] r6065 - in trunk/Tools/Maestro:
ExtendedModels/SymbolDefinition-1.1.0 MaestroAPITests
OSGeo.MapGuide.ExtendedObjectModels OSGeo.MapGuide.MaestroAPI
OSGeo.MapGuide.MaestroAPI/ObjectModels
OSGeo.MapGuide.MaestroAPI/Properties
OSGeo.MapGuide.MaestroAPI/Resource/Validation
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Sun Aug 14 11:26:59 EDT 2011
Author: jng
Date: 2011-08-14 08:26:59 -0700 (Sun, 14 Aug 2011)
New Revision: 6065
Added:
trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/SymbolDefinitionValidator.cs
trunk/Tools/Maestro/MaestroAPITests/HttpSiteTests.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseSymbolDefinitionValidator.cs
Modified:
trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/OSGeo.MapGuide.ObjectModels.SymbolDefinition-1.1.0.csproj
trunk/Tools/Maestro/MaestroAPITests/CapabilityTests.cs
trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj
trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs
trunk/Tools/Maestro/MaestroAPITests/ValidationTests.cs
trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/CommonTypes.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.Designer.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.resx
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ResourceValidationContext.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/SymbolDefinitionValidator.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ValidationStatusCode.cs
Log:
#1717: Add symbol definition validation rules. Also add unit tests for some resource validators
Modified: trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/OSGeo.MapGuide.ObjectModels.SymbolDefinition-1.1.0.csproj
===================================================================
--- trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/OSGeo.MapGuide.ObjectModels.SymbolDefinition-1.1.0.csproj 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/OSGeo.MapGuide.ObjectModels.SymbolDefinition-1.1.0.csproj 2011-08-14 15:26:59 UTC (rev 6065)
@@ -55,6 +55,7 @@
<Link>SignedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="SymbolDefinitionValidator.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\OSGeo.MapGuide.MaestroAPI\OSGeo.MapGuide.MaestroAPI.csproj">
Added: trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/SymbolDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/SymbolDefinitionValidator.cs (rev 0)
+++ trunk/Tools/Maestro/ExtendedModels/SymbolDefinition-1.1.0/SymbolDefinitionValidator.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -0,0 +1,36 @@
+#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;
+using OSGeo.MapGuide.MaestroAPI;
+
+namespace OSGeo.MapGuide.ObjectModels.SymbolDefinition_1_1_0
+{
+ public class SymbolDefinitionValidator : BaseSymbolDefinitionValidator
+ {
+ public override ResourceTypeDescriptor SupportedResourceAndVersion
+ {
+ get { return new ResourceTypeDescriptor(ResourceTypes.SymbolDefinition, "1.1.0"); }
+ }
+ }
+}
Modified: trunk/Tools/Maestro/MaestroAPITests/CapabilityTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/CapabilityTests.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/MaestroAPITests/CapabilityTests.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -865,6 +865,12 @@
Assert.AreEqual(version, new Version(1, 1, 0));
}
break;
+ case ResourceTypes.WatermarkDefinition:
+ {
+ var version = caps.GetMaxSupportedResourceVersion(type);
+ Assert.AreEqual(version, new Version(2, 3, 0));
+ }
+ break;
case ResourceTypes.WebLayout:
{
var version = caps.GetMaxSupportedResourceVersion(type);
Added: trunk/Tools/Maestro/MaestroAPITests/HttpSiteTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/HttpSiteTests.cs (rev 0)
+++ trunk/Tools/Maestro/MaestroAPITests/HttpSiteTests.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -0,0 +1,116 @@
+#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.Linq;
+using System.Collections.Generic;
+using System.Text;
+using OSGeo.MapGuide.MaestroAPI;
+using NUnit.Framework;
+using OSGeo.MapGuide.ObjectModels;
+using OSGeo.MapGuide.MaestroAPI.Resource.Validation;
+using System.IO;
+
+namespace MaestroAPITests
+{
+ [TestFixture(Ignore = false)]
+ public class HttpSiteTests
+ {
+ private IServerConnection CreateTestConnection()
+ {
+ return ConnectionProviderRegistry.CreateConnection("Maestro.Http",
+ "Url", "http://" + Environment.MachineName + "/mapguide/mapagent/mapagent.fcgi",
+ "Username", "Administrator",
+ "Password", "admin");
+ }
+
+ [Test]
+ public void TestMapDefinitionValidation()
+ {
+ var conn = CreateTestConnection();
+ var mdf = ObjectFactory.CreateMapDefinition(conn, "Test");
+ mdf.ResourceID = "Library://UnitTests/Test.MapDefinition";
+
+ var context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ var issues = ResourceValidatorSet.Validate(context, mdf, false);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Warning_MapDefinition_MissingCoordinateSystem));
+
+ conn.ResourceService.SetResourceXmlData("Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition", File.OpenRead("TestData/MappingService/UT_HydrographicPolygons.ldf"));
+
+ mdf.AddLayer("foo", "bar", "Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+ context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ issues = ResourceValidatorSet.Validate(context, mdf, false);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Error_MapDefinition_LayerWithNonExistentGroup));
+
+ mdf.AddLayer(null, "bar", "Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition");
+ context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ issues = ResourceValidatorSet.Validate(context, mdf, false);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Error_MapDefinition_DuplicateLayerName));
+
+ var group = mdf.AddGroup("foo");
+ group.Group = "bar";
+
+ context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ issues = ResourceValidatorSet.Validate(context, mdf, false);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Error_MapDefinition_GroupWithNonExistentGroup));
+ }
+
+ [Test]
+ public void TestSymbolDefinitionValidation()
+ {
+ var conn = CreateTestConnection();
+ var ssym = ObjectFactory.CreateSimpleSymbol(conn, "Test", "Test");
+ ssym.ResourceID = "Library://UnitTests/Test.SymbolDefinition";
+
+ var context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ var issues = ResourceValidatorSet.Validate(context, ssym, true);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Error_SymbolDefinition_NoGeometryUsageContexts));
+
+ var param = ssym.CreateParameter();
+ param.Identifier = "TEST";
+ ssym.ParameterDefinition.AddParameter(param);
+
+ context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ issues = ResourceValidatorSet.Validate(context, ssym, true);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Warning_SymbolDefinition_SymbolParameterNotUsed));
+
+ var imgRef = ssym.CreateImageReference("Library://UnitTest/IDontExist.LayerDefinition", "Foo.png");
+ var img = ssym.CreateImageGraphics();
+ img.Item = imgRef;
+
+ ssym.AddGraphics(img);
+
+ context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ issues = ResourceValidatorSet.Validate(context, ssym, true);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Error_SymbolDefinition_ImageGraphicReferenceResourceIdNotFound));
+
+ conn.ResourceService.SetResourceXmlData("Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition", File.OpenRead("TestData/MappingService/UT_HydrographicPolygons.ldf"));
+
+ imgRef = ssym.CreateImageReference("Library://UnitTests/Layers/HydrographicPolygons.LayerDefinition", "Foo.png");
+ img = ssym.CreateImageGraphics();
+ img.Item = imgRef;
+
+ ssym.AddGraphics(img);
+
+ context = new ResourceValidationContext(conn.ResourceService, conn.FeatureService);
+ issues = ResourceValidatorSet.Validate(context, ssym, true);
+ Assert.True(issues.Any(x => x.StatusCode == ValidationStatusCode.Error_SymbolDefinition_ImageGraphicReferenceResourceDataNotFound));
+ }
+ }
+}
Modified: trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/MaestroAPITests/MaestroAPITests.csproj 2011-08-14 15:26:59 UTC (rev 6065)
@@ -75,6 +75,7 @@
<Compile Include="ExpressionTests.cs" />
<Compile Include="FeatureReaderTests.cs" />
<Compile Include="HttpConnectionTests.cs" />
+ <Compile Include="HttpSiteTests.cs" />
<Compile Include="ObjectTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
Modified: trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -41,6 +41,7 @@
using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
using OSGeo.MapGuide.ObjectModels.SymbolLibrary;
using OSGeo.MapGuide.ObjectModels.WebLayout;
+using System.Diagnostics;
namespace MaestroAPITests
{
@@ -476,7 +477,7 @@
found = true;
}
}
- Console.WriteLine("Found command (" + cmdName.ToString() + "): " + found);
+ Trace.TraceInformation("Found command (" + cmdName.ToString() + "): " + found);
Assert.IsTrue(found);
}
}
Modified: trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/MaestroAPITests/RuntimeMapTests.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -50,6 +50,7 @@
{
if (!_registered)
{
+ ResourceValidatorLoader.LoadStockValidators();
ModelSetup.Initialize();
_registered = true;
}
Modified: trunk/Tools/Maestro/MaestroAPITests/ValidationTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/ValidationTests.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/MaestroAPITests/ValidationTests.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -38,12 +38,6 @@
[TestFixture]
public class ValidationTests
{
- [TestFixtureSetUp]
- public void FixtureSetup()
- {
- ResourceValidatorLoader.LoadStockValidators();
- }
-
[Test]
public void TestUniqueIssues()
{
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.ExtendedObjectModels/ModelSetup.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -128,6 +128,7 @@
ObjectFactory.RegisterWebLayoutFactoryMethod(new Version(1, 1, 0), new WebLayoutCreatorFunc(WL110.WebLayoutEntryPoint.CreateDefault));
//Symbol Definition 1.1.0
+ ResourceValidatorSet.RegisterValidator(new Sym110.SymbolDefinitionValidator());
ResourceTypeRegistry.RegisterResource(
new ResourceTypeDescriptor(ResourceTypes.SymbolDefinition, "1.1.0"),
new ResourceSerializationCallback(Sym110.SymbolDefEntryPoint.Serialize),
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/OSGeo.MapGuide.MaestroAPI.csproj 2011-08-14 15:26:59 UTC (rev 6065)
@@ -225,6 +225,7 @@
<Compile Include="Resource\Conversion\NsDoc.cs" />
<Compile Include="Resource\NsDoc.cs" />
<Compile Include="Resource\Validation\BaseMapDefinitionValidator.cs" />
+ <Compile Include="Resource\Validation\BaseSymbolDefinitionValidator.cs" />
<Compile Include="Resource\Validation\NsDoc.cs" />
<Compile Include="Resource\Validation\ValidationStatusCode.cs" />
<Compile Include="SchemaOverrides\GdalConfigurationDocument.cs" />
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/CommonTypes.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/CommonTypes.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/CommonTypes.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -271,10 +271,19 @@
public interface IExpressionPropertySource
{
+ /// <summary>
+ /// Gets the name
+ /// </summary>
string Name { get; }
+ /// <summary>
+ /// Gets the description
+ /// </summary>
string Description { get; }
+ /// <summary>
+ /// Gets the expression data type
+ /// </summary>
ExpressionDataType ExpressionType { get; }
}
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.Designer.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.Designer.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -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.
@@ -854,6 +854,15 @@
}
/// <summary>
+ /// Looks up a localized string similar to Map Definition has no coordinate system.
+ /// </summary>
+ internal static string MDF_NoCoordinateSystem {
+ get {
+ return ResourceManager.GetString("MDF_NoCoordinateSystem", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to The Map Definition contains tiled layers but has no finite display scales defined.
/// </summary>
internal static string MDF_NoFiniteDisplayScalesSpecified {
@@ -962,6 +971,42 @@
}
/// <summary>
+ /// Looks up a localized string similar to The simple symbol definition contains an image graphic that references a resource id {0} with a non-existent resource data {1}.
+ /// </summary>
+ internal static string SSDF_ImageGraphicReferenceResourceDataNotFound {
+ get {
+ return ResourceManager.GetString("SSDF_ImageGraphicReferenceResourceDataNotFound", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to The simple symbol definition contains an image graphic that references a non-existent resource id.
+ /// </summary>
+ internal static string SSDF_ImageGraphicReferenceResourceIdNotFound {
+ get {
+ return ResourceManager.GetString("SSDF_ImageGraphicReferenceResourceIdNotFound", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to The Simple Symbol Definition has no geometry usage contexts specified..
+ /// </summary>
+ internal static string SSDF_NoGeometryUsageContext {
+ get {
+ return ResourceManager.GetString("SSDF_NoGeometryUsageContext", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to The simple symbol definition contains a symbol parameter {0} that is not referenced anywhere within the definition.
+ /// </summary>
+ internal static string SSDF_SymbolParameterNotUsed {
+ get {
+ return ResourceManager.GetString("SSDF_SymbolParameterNotUsed", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Could not find template url for template: .
/// </summary>
internal static string TemplateUrlNotFound {
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.resx 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Properties/Resources.resx 2011-08-14 15:26:59 UTC (rev 6065)
@@ -515,4 +515,19 @@
<data name="UnknownWatermarkDefinitionVersion" xml:space="preserve">
<value>Unknown Watermark Definition version: </value>
</data>
+ <data name="SSDF_ImageGraphicReferenceResourceDataNotFound" xml:space="preserve">
+ <value>The simple symbol definition contains an image graphic that references a resource id {0} with a non-existent resource data {1}</value>
+ </data>
+ <data name="SSDF_ImageGraphicReferenceResourceIdNotFound" xml:space="preserve">
+ <value>The simple symbol definition contains an image graphic that references a non-existent resource id</value>
+ </data>
+ <data name="SSDF_NoGeometryUsageContext" xml:space="preserve">
+ <value>The Simple Symbol Definition has no geometry usage contexts specified.</value>
+ </data>
+ <data name="SSDF_SymbolParameterNotUsed" xml:space="preserve">
+ <value>The simple symbol definition contains a symbol parameter {0} that is not referenced anywhere within the definition</value>
+ </data>
+ <data name="MDF_NoCoordinateSystem" xml:space="preserve">
+ <value>Map Definition has no coordinate system</value>
+ </data>
</root>
\ No newline at end of file
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseMapDefinitionValidator.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -77,6 +77,11 @@
IMapDefinition mdef = resource as IMapDefinition;
+ if (string.IsNullOrEmpty(mdef.CoordinateSystem))
+ {
+ issues.Add(new ValidationIssue(mdef, ValidationStatus.Warning, ValidationStatusCode.Warning_MapDefinition_MissingCoordinateSystem, Properties.Resources.MDF_NoCoordinateSystem));
+ }
+
foreach (IMapLayerGroup g in mdef.MapLayerGroup)
{
if (g.ShowInLegend && (g.LegendLabel == null || g.LegendLabel.Trim().Length == 0))
Added: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseSymbolDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseSymbolDefinitionValidator.cs (rev 0)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/BaseSymbolDefinitionValidator.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -0,0 +1,150 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
+
+namespace OSGeo.MapGuide.MaestroAPI.Resource.Validation
+{
+ public abstract class BaseSymbolDefinitionValidator : 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>
+ /// 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>
+ 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.SymbolDefinition)
+ return null;
+
+ var issues = new List<ValidationIssue>();
+ var symDef = (ISymbolDefinitionBase)resource;
+ if (symDef.Type == SymbolDefinitionType.Simple)
+ {
+ var ssym = (ISimpleSymbolDefinition)symDef;
+ issues.AddRange(ValidateSimpleSymbolDefinition(ssym, context));
+ }
+ else if (symDef.Type == SymbolDefinitionType.Compound)
+ {
+ var csym = (ICompoundSymbolDefinition)symDef;
+ foreach (var sym in csym.SimpleSymbol)
+ {
+ if (sym.Type == SimpleSymbolReferenceType.Inline)
+ {
+ var inline = (ISimpleSymbolInlineReference)sym;
+ issues.AddRange(ValidateSimpleSymbolDefinition(inline.SimpleSymbolDefinition, context));
+ }
+ else if (sym.Type == SimpleSymbolReferenceType.Library)
+ {
+ var res = context.GetResource(((ISimpleSymbolLibraryReference)sym).ResourceId);
+ issues.AddRange(ValidateBase(context, res, false));
+ }
+ }
+ }
+
+ context.MarkValidated(resource.ResourceID);
+ return issues.ToArray();
+ }
+
+ protected static IEnumerable<ValidationIssue> ValidateSimpleSymbolDefinition(ISimpleSymbolDefinition ssym, ResourceValidationContext context)
+ {
+ //Check that one geometry usage context has been specified
+ if (ssym.AreaUsage == null &&
+ ssym.LineUsage == null &&
+ ssym.PointUsage == null)
+ {
+ yield return new ValidationIssue(ssym, ValidationStatus.Error, ValidationStatusCode.Error_SymbolDefinition_NoGeometryUsageContexts, Properties.Resources.SSDF_NoGeometryUsageContext);
+ }
+
+ //Validate image graphics
+ foreach (var graphic in ssym.Graphics)
+ {
+ if (graphic.Type == GraphicElementType.Image)
+ {
+ IImageGraphic image = (IImageGraphic)graphic;
+ if (image.Item != null)
+ {
+ if (image.Item.Type == ImageType.Reference)
+ {
+ IImageReference imgRef = (IImageReference)image.Item;
+ if (!context.ResourceExists(imgRef.ResourceId))
+ {
+ yield return new ValidationIssue(ssym, ValidationStatus.Error, ValidationStatusCode.Error_SymbolDefinition_ImageGraphicReferenceResourceIdNotFound, Properties.Resources.SSDF_ImageGraphicReferenceResourceIdNotFound);
+ }
+ else
+ {
+ var res = context.GetResource(imgRef.ResourceId);
+ var resData = res.EnumerateResourceData();
+ bool found = false;
+ foreach (var item in resData)
+ {
+ if (item.Name == imgRef.LibraryItemName)
+ found = true;
+ }
+
+ if (!found)
+ {
+ yield return new ValidationIssue(ssym,
+ ValidationStatus.Error,
+ ValidationStatusCode.Error_SymbolDefinition_ImageGraphicReferenceResourceDataNotFound,
+ string.Format(Properties.Resources.SSDF_ImageGraphicReferenceResourceDataNotFound,
+ imgRef.ResourceId,
+ imgRef.LibraryItemName));
+ }
+ }
+ }
+ else //inline
+ {
+ //TODO: Validate inline image content
+ }
+ }
+ }
+ }
+
+ string xml = ResourceTypeRegistry.SerializeAsString(ssym);
+
+ //Check non existent symbol parameters
+ foreach (var paramDef in ssym.ParameterDefinition.Parameter)
+ {
+ string name = "%" + paramDef.Identifier + "%";
+ if (!xml.Contains(name) && string.IsNullOrEmpty(paramDef.DefaultValue))
+ {
+ yield return new ValidationIssue(ssym, ValidationStatus.Warning, ValidationStatusCode.Warning_SymbolDefinition_SymbolParameterNotUsed,
+ string.Format(Properties.Resources.SSDF_SymbolParameterNotUsed, paramDef.Identifier));
+ }
+ }
+
+ //TODO: Do the reverse check. Placeholders not pointing to a symbol parameter
+ }
+ }
+}
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ResourceValidationContext.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ResourceValidationContext.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ResourceValidationContext.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -120,5 +120,10 @@
Trace.TraceInformation("Validated: " + resourceId);
}
+
+ public bool ResourceExists(string resourceId)
+ {
+ return _resSvc.ResourceExists(resourceId);
+ }
}
}
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/SymbolDefinitionValidator.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/SymbolDefinitionValidator.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/SymbolDefinitionValidator.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -22,46 +22,22 @@
using System.Text;
using OSGeo.MapGuide.MaestroAPI.Resource;
using OSGeo.MapGuide.MaestroAPI;
+using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
namespace OSGeo.MapGuide.MaestroAPI.Resource.Validation
{
/// <summary>
/// Resource validator for Symbol Definitions
/// </summary>
- public class SymbolDefinitionValidator : IResourceValidator
+ public class SymbolDefinitionValidator : BaseSymbolDefinitionValidator
{
/// <summary>
/// Gets the resource type and version this validator supports
/// </summary>
/// <value></value>
- public ResourceTypeDescriptor SupportedResourceAndVersion
+ public override ResourceTypeDescriptor SupportedResourceAndVersion
{
- get { return ResourceTypeDescriptor.SymbolDefinition; }
+ get { return new ResourceTypeDescriptor(ResourceTypes.SymbolDefinition, "1.0.0"); }
}
-
- /// <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.SymbolDefinition)
- return null;
-
- //TODO: What problems could there possibly be?
-
- context.MarkValidated(resource.ResourceID);
-
- return new ValidationIssue[0];
- }
}
}
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ValidationStatusCode.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ValidationStatusCode.cs 2011-08-14 13:09:25 UTC (rev 6064)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Resource/Validation/ValidationStatusCode.cs 2011-08-14 15:26:59 UTC (rev 6065)
@@ -146,7 +146,9 @@
/// to manually pan outside the extents to see this data.
/// </summary>
Warning_MapDefinition_DataOutsideMapBounds,
-
+
+ Warning_MapDefinition_MissingCoordinateSystem,
+
/// <summary>
/// The specified initial view parameters lie outside the referenced Map Definition's extents. Usually means you will see nothing when the Fusion viewer loads.
/// </summary>
@@ -171,6 +173,12 @@
/// The web layout's initial view lies outside the referenced map definition's extents. Usually means you will see nothing when the AJAX viewer loads.
/// </summary>
Warning_WebLayout_InitialViewOutsideMapExtents = 3601,
+
+ /// <summary>
+ /// The simple symbol definition contains a symbol parameter that is not referenced
+ /// anywhere within the definition
+ /// </summary>
+ Warning_SymbolDefinition_SymbolParameterNotUsed = 3701,
#endregion
#region errors
@@ -354,6 +362,23 @@
/// Source DWF file not specified
/// </summary>
Error_DrawingSource_NoSourceDwf = 5601,
+
+ /// <summary>
+ /// The simple symbol definition has no geometry usage contexts
+ /// </summary>
+ Error_SymbolDefinition_NoGeometryUsageContexts = 5701,
+
+ /// <summary>
+ /// The simple symbol definition contains an image graphic that references
+ /// a non-existent resource id
+ /// </summary>
+ Error_SymbolDefinition_ImageGraphicReferenceResourceIdNotFound,
+
+ /// <summary>
+ /// The simple symbol definition contains an image graphic that references
+ /// a non-existent resource data item
+ /// </summary>
+ Error_SymbolDefinition_ImageGraphicReferenceResourceDataNotFound,
#endregion
}
}
More information about the mapguide-commits
mailing list