[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