[mapguide-commits] r5969 - in trunk/Tools/Maestro: MaestroAPITests
OSGeo.MapGuide.MaestroAPI OSGeo.MapGuide.MaestroAPI/ObjectModels
OSGeo.MapGuide.MaestroAPI/Schema
OSGeo.MapGuide.MaestroAPI/SchemaOverrides
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Tue Jul 5 12:27:43 EDT 2011
Author: jng
Date: 2011-07-05 09:27:43 -0700 (Tue, 05 Jul 2011)
New Revision: 5969
Modified:
trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/IFdoSpatialContext.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/ClassDefinition.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/DataPropertyDefinition.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/SchemaOverrides/RasterWmsItem.cs
trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Utility.cs
Log:
#1680: Fix bad WMS configuration documents being created due to FDO class names not being properly encoded and other defects in the conversion to XML. The encoding method is a bit naive at the moment, but shall suffice. Also some unit tests broke due to recent work, these have been fixed up.
Modified: trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs
===================================================================
--- trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/MaestroAPITests/ResourceTests.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -55,6 +55,12 @@
//Generated classes have built in Clone() methods. Verify they check out
_mocks = new Mockery();
var conn = _mocks.NewMock<IServerConnection>();
+ var caps = _mocks.NewMock<IConnectionCapabilities>();
+ Stub.On(conn).GetProperty("Capabilities").Will(Return.Value(caps));
+ foreach (var rt in Enum.GetValues(typeof(ResourceTypes)))
+ {
+ Stub.On(caps).Method("GetMaxSupportedResourceVersion").With(rt).Will(Return.Value(new Version(1, 0, 0)));
+ }
var app = ObjectFactory.DeserializeEmbeddedFlexLayout();
var app2 = app.Clone();
@@ -97,7 +103,13 @@
public void TestValidResourceIdentifiers()
{
var conn = _mocks.NewMock<IServerConnection>();
-
+ var caps = _mocks.NewMock<IConnectionCapabilities>();
+ Stub.On(conn).GetProperty("Capabilities").Will(Return.Value(caps));
+ foreach (var rt in Enum.GetValues(typeof(ResourceTypes)))
+ {
+ Stub.On(caps).Method("GetMaxSupportedResourceVersion").With(rt).Will(Return.Value(new Version(1, 0, 0)));
+ }
+
//Verify that only valid resource identifiers can be assigned to certain resource types.
IResource res = ObjectFactory.CreateFeatureSource(conn, "OSGeo.SDF");
@@ -437,6 +449,12 @@
//Verify origial reference is returned if we're converting a resource to the same version
_mocks = new Mockery();
var conn = _mocks.NewMock<IServerConnection>();
+ var caps = _mocks.NewMock<IConnectionCapabilities>();
+ Stub.On(conn).GetProperty("Capabilities").Will(Return.Value(caps));
+ foreach (var rt in Enum.GetValues(typeof(ResourceTypes)))
+ {
+ Stub.On(caps).Method("GetMaxSupportedResourceVersion").With(rt).Will(Return.Value(new Version(1, 0, 0)));
+ }
var conv = new ResourceConverter(new List<IResourceConverter>());
var targetVer = new Version(1, 0, 0);
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/IFdoSpatialContext.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/IFdoSpatialContext.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/IFdoSpatialContext.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -101,7 +101,7 @@
var crs = doc.CreateElement("gml", "DerivedCRS", XmlNamespaces.GML);
{
- crs.SetAttribute("id", this.Name);
+ crs.SetAttribute("id", XmlNamespaces.GML, this.Name);
var meta = doc.CreateElement("gml", "metaDataProperty", XmlNamespaces.GML);
crs.AppendChild(meta);
{
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/ObjectModels/ObjectFactory.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -371,7 +371,9 @@
if (!_watermarkFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownWatermarkDefinitionVersion + version.ToString());
- return _watermarkFactories[version](type);
+ var wdf = _watermarkFactories[version](type);
+ wdf.CurrentConnection = owner;
+ return wdf;
}
/// <summary>
@@ -388,7 +390,9 @@
if (!_mapDefinitionFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownMapDefinitionVersion + version.ToString());
- return _mapDefinitionFactories[version]();
+ var mdf = _mapDefinitionFactories[version]();
+ mdf.CurrentConnection = owner;
+ return mdf;
}
/// <summary>
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/ClassDefinition.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/ClassDefinition.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/ClassDefinition.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -196,125 +196,6 @@
return removed;
}
- #region old impl
- /*
- private string m_name;
- private string m_schema;
- private FeatureSetColumn[] m_columns;
-
- internal ClassDefinition(XmlNode node, XmlNamespaceManager mgr)
- {
- XmlNode root = node.ParentNode;
- if (root.NodeType == XmlNodeType.XmlDeclaration)
- root = root.NextSibling;
- m_schema = root.Attributes["targetNamespace"] == null ? null : root.Attributes["targetNamespace"].Value;
- if (m_schema != null && m_schema.IndexOf("/") > 0)
- m_schema = m_schema.Substring(m_schema.LastIndexOf("/") + 1);
- m_name = node.Attributes["name"].Value;
- if (m_name.EndsWith("Type"))
- m_name = m_name.Substring(0, m_name.Length - "Type".Length);
-
- XmlNodeList lst;
- if (node.ChildNodes.Count == 0)
- {
- m_columns = new FeatureSetColumn[0];
- return;
- }
- else if (node.FirstChild.Name == "xs:sequence")
- lst = node.SelectNodes("xs:sequence/xs:element", mgr);
- else
- lst = node.SelectNodes("xs:complexContent/xs:extension/xs:sequence/xs:element", mgr);
-
-
- m_columns = new FeatureSetColumn[lst.Count];
- for (int i = 0; i < lst.Count; i++)
- m_columns[i] = new ClassPropertyColumn(lst[i]);
-
- XmlNode extension = node.SelectSingleNode("xs:complexContent/xs:extension", mgr);
- if (extension != null && extension.Attributes["base"] != null)
- {
- string extTypeName = extension.Attributes["base"].Value;
- extTypeName = extTypeName.Substring(extTypeName.IndexOf(":") + 1);
-
- XmlNode baseEl = node.ParentNode.SelectSingleNode("xs:complexType[@name='" + extTypeName + "']", mgr);
- if (baseEl != null)
- {
- ClassDefinition tmpScm = new ClassDefinition(baseEl, mgr);
- FeatureSetColumn[] tmpCol = new FeatureSetColumn[m_columns.Length + tmpScm.m_columns.Length];
- Array.Copy(m_columns, tmpCol, m_columns.Length);
- Array.Copy(tmpScm.m_columns, 0, tmpCol, m_columns.Length, tmpScm.m_columns.Length);
- m_columns = tmpCol;
- }
- }
- }
-
- /// <summary>
- /// Gets the name of this class definition
- /// </summary>
- public string Name { get { return m_name; } }
-
- /// <summary>
- /// Gets the name of the schema which this class definition belongs to
- /// </summary>
- public string SchemaName { get { return m_schema; } }
-
- /// <summary>
- /// Gets the fully qualified name of this class definition ([schema_name]:[name])
- /// </summary>
- public string QualifiedName { get { return m_schema == null ? m_name : m_schema + ":" + m_name; } }
-
- /// <summary>
- /// Gets the decoded fully qualified name of this class definition ([schema_name]:[name])
- /// </summary>
- public string QualifiedNameDecoded { get { return Utility.DecodeFDOName(this.QualifiedName); } }
-
- /// <summary>
- /// Gets an array of columns defining the properties in this class definition
- /// </summary>
- public FeatureSetColumn[] Columns { get { return m_columns; } }
-
- /// <summary>
- /// Returns a <see cref="System.String"/> that represents this instance.
- /// </summary>
- /// <returns>
- /// A <see cref="System.String"/> that represents this instance.
- /// </returns>
- public override string ToString()
- {
- return this.QualifiedName;
- }
-
- internal void MarkIdentityProperties(IEnumerable<string> keyFieldNames)
- {
- foreach (var name in keyFieldNames)
- {
- foreach (var col in m_columns)
- {
- if (col.Name.Equals(name))
- {
- col.IsIdentity = true;
- }
- }
- }
- }
-
- /// <summary>
- /// Gets an array of names of the identity properties
- /// </summary>
- /// <returns></returns>
- public string[] GetIdentityProperties()
- {
- List<string> keys = new List<string>();
- foreach (var col in m_columns)
- {
- if (col.IsIdentity)
- keys.Add(col.Name);
- }
- return keys.ToArray();
- }
- */
- #endregion
-
public FeatureSchema Parent { get; internal set; }
/// <summary>
@@ -344,16 +225,17 @@
if (_identity.Count > 0)
{
id = doc.CreateElement("xs", "element", XmlNamespaces.XS);
- id.SetAttribute("name", this.Name);
- id.SetAttribute("type", this.Parent.Name + ":" + this.Name + "Type");
+ var en = Utility.EncodeFDOName(this.Name);
+ id.SetAttribute("name", en); //TODO: May need encoding
+ id.SetAttribute("type", this.Parent.Name + ":" + en + "Type");
id.SetAttribute("abstract", this.IsAbstract.ToString().ToLower());
id.SetAttribute("substitutionGroup", "gml:_Feature");
var key = doc.CreateElement("xs", "key", XmlNamespaces.XS);
- key.SetAttribute("name", this.Name + "Key");
+ key.SetAttribute("name", en + "Key");
var selector = doc.CreateElement("xs", "selector", XmlNamespaces.XS);
- selector.SetAttribute("xpath", ".//" + this.Name);
+ selector.SetAttribute("xpath", ".//" + en);
key.AppendChild(selector);
@@ -379,6 +261,10 @@
ctype.SetAttribute("geometryName", XmlNamespaces.FDO, geom.Name);
}
}
+ else
+ {
+ ctype.SetAttribute("hasGeometry", XmlNamespaces.FDO, "false");
+ }
var cnt = doc.CreateElement("xs", "complexContent", XmlNamespaces.XS);
ctype.AppendChild(cnt);
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/DataPropertyDefinition.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/DataPropertyDefinition.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Schema/DataPropertyDefinition.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -183,6 +183,8 @@
{
var max = doc.CreateElement("xs", "maxLength", XmlNamespaces.XS);
max.SetAttribute("value", this.Length.ToString(CultureInfo.InvariantCulture));
+
+ rest.AppendChild(max);
}
currentNode.AppendChild(prop);
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/SchemaOverrides/RasterWmsItem.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/SchemaOverrides/RasterWmsItem.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/SchemaOverrides/RasterWmsItem.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -82,6 +82,26 @@
var format = doc.CreateElement("Format");
format.InnerText = this.ImageFormat;
+ var mimeType = doc.CreateElement("FormatType");
+ if (!string.IsNullOrEmpty(this.ImageFormat))
+ {
+ switch (this.ImageFormat)
+ {
+ case WmsImageFormat.GIF:
+ mimeType.InnerText = "image/gif";
+ break;
+ case WmsImageFormat.JPG:
+ mimeType.InnerText = "image/jpg";
+ break;
+ case WmsImageFormat.PNG:
+ mimeType.InnerText = "image/png";
+ break;
+ case WmsImageFormat.TIF:
+ mimeType.InnerText = "image/tif";
+ break;
+ }
+ }
+
var transparent = doc.CreateElement("Transparent");
transparent.InnerText = this.IsTransparent ? "true" : "false";
@@ -101,6 +121,7 @@
sc.InnerText = this.SpatialContextName;
rasterDef.AppendChild(format);
+ rasterDef.AppendChild(mimeType);
rasterDef.AppendChild(transparent);
rasterDef.AppendChild(useTileCache);
rasterDef.AppendChild(bgcolor);
Modified: trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Utility.cs
===================================================================
--- trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Utility.cs 2011-07-05 14:01:35 UTC (rev 5968)
+++ trunk/Tools/Maestro/OSGeo.MapGuide.MaestroAPI/Utility.cs 2011-07-05 16:27:43 UTC (rev 5969)
@@ -536,6 +536,21 @@
private static System.Text.RegularExpressions.Regex EncRegExp = new System.Text.RegularExpressions.Regex(@"(\-x([0-9]|[a-e]|[A-E])([0-9]|[a-e]|[A-E])\-)|(\-dot\-)|(\-colon\-)", System.Text.RegularExpressions.RegexOptions.Compiled);
/// <summary>
+ /// FDO encodes a string
+ /// </summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public static string EncodeFDOName(string name)
+ {
+ return name.Replace("\"", "-x22-")
+ .Replace("&", "-x26-")
+ .Replace("'", "-x27-")
+ .Replace("<", "-x3C-")
+ .Replace(">", "-x3E-")
+ .Replace(" ", "-x20-");
+ }
+
+ /// <summary>
/// Converts FDO encoded characters into their original character.
/// Encoded characters have the form -x00-.
/// </summary>
More information about the mapguide-commits
mailing list