[mapguide-commits] r9004 - trunk/MgDev/Web/src/mapviewerjava

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Jul 27 06:40:45 PDT 2016


Author: jng
Date: 2016-07-27 06:40:44 -0700 (Wed, 27 Jul 2016)
New Revision: 9004

Modified:
   trunk/MgDev/Web/src/mapviewerjava/buffer.jsp
   trunk/MgDev/Web/src/mapviewerjava/common.jsp
   trunk/MgDev/Web/src/mapviewerjava/search.jsp
   trunk/MgDev/Web/src/mapviewerjava/selectwithin.jsp
Log:
#2732: Use explicit property lists where MgFeatureQueryOptions is used.

This is to ensure that a "select * from featureclass" query from relational FDO providers will have its column list bounded to what is recognized in the class definition returned by the provider. Some providers are known to produce "select * from table" queries that "leak" out column types that the provider does not know how to process. Using an explicit property list from its class definition will allow us to avoid such issues.

This is for the Java implementation of the AJAX viewer

Modified: trunk/MgDev/Web/src/mapviewerjava/buffer.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/buffer.jsp	2016-07-26 16:55:20 UTC (rev 9003)
+++ trunk/MgDev/Web/src/mapviewerjava/buffer.jsp	2016-07-27 13:40:44 UTC (rev 9004)
@@ -274,7 +274,8 @@
             if(filter == null || filter.length() == 0)
                 continue;
 
-            MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+            MgClassDefinition clsDef = selLayer.GetClassDefinition();
+            MgFeatureQueryOptions query = BuildFeatureQueryOptions(clsDef);
             query.SetFilter(filter);
 
             MgResourceIdentifier featureSource = new MgResourceIdentifier(selLayer.GetFeatureSourceId());

Modified: trunk/MgDev/Web/src/mapviewerjava/common.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/common.jsp	2016-07-26 16:55:20 UTC (rev 9003)
+++ trunk/MgDev/Web/src/mapviewerjava/common.jsp	2016-07-27 13:40:44 UTC (rev 9004)
@@ -300,4 +300,54 @@
     return validColorString;
 }
 
+MgFeatureQueryOptions BuildFeatureQueryOptions(MgClassDefinition classDef) throws MgException
+{
+    MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+    String geomPropName = classDef.GetDefaultGeometryPropertyName();
+    MgPropertyDefinitionCollection propertyList = classDef.GetProperties();
+    for (int i = 0; i < propertyList.GetCount(); i++)
+    {
+        MgPropertyDefinition propertyDef = propertyList.GetItem(i);
+        String property = propertyDef.GetName();
+
+        if ((!property.equals(geomPropName)) && (propertyDef.GetPropertyType() == MgFeaturePropertyType.DataProperty)) 
+        {
+            MgDataPropertyDefinition dp = (MgDataPropertyDefinition)propertyDef;
+            int propertyType = dp.GetDataType();
+            switch (propertyType) {
+                case MgPropertyType.Boolean:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Byte:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.DateTime:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Single:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Double:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Int16:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Int32:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.Int64:
+                    query.AddFeatureProperty(property);
+                    break;
+                case MgPropertyType.String:
+                    query.AddFeatureProperty(property);
+                    break;
+            }
+        } else if (property.equals(geomPropName)) { 
+            query.AddFeatureProperty(property);
+        } 
+    }
+    return query;
+}
+
 %>

Modified: trunk/MgDev/Web/src/mapviewerjava/search.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/search.jsp	2016-07-26 16:55:20 UTC (rev 9003)
+++ trunk/MgDev/Web/src/mapviewerjava/search.jsp	2016-07-27 13:40:44 UTC (rev 9004)
@@ -114,10 +114,11 @@
         boolean displayAll = (resProps.size() == 0);
 
         //query the features
-        MgFeatureQueryOptions opts = new MgFeatureQueryOptions();
+        MgClassDefinition clsDef = layer.GetClassDefinition();
+        MgFeatureQueryOptions opts = BuildFeatureQueryOptions(clsDef);
         opts.SetFilter(filter);
         String featureClassName = layer.GetFeatureClassName();
-        features = layer.SelectFeatures( opts);
+        features = layer.SelectFeatures(opts);
         boolean hasResult = features.ReadNext();
 
         if(hasResult)

Modified: trunk/MgDev/Web/src/mapviewerjava/selectwithin.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/selectwithin.jsp	2016-07-26 16:55:20 UTC (rev 9003)
+++ trunk/MgDev/Web/src/mapviewerjava/selectwithin.jsp	2016-07-27 13:40:44 UTC (rev 9004)
@@ -116,7 +116,8 @@
         MgLayer layer = (MgLayer) selLayers.GetItem(i);
         String filter = sel.GenerateFilter(layer, layer.GetFeatureClassName());
 
-        MgFeatureQueryOptions query = new MgFeatureQueryOptions();
+        MgClassDefinition clsDef = layer.GetClassDefinition();
+        MgFeatureQueryOptions query = BuildFeatureQueryOptions(clsDef);
         query.SetFilter(filter);
         MgResourceIdentifier featureSource = new MgResourceIdentifier(layer.GetFeatureSourceId());
         MgFeatureReader features = featureSrvc.SelectFeatures(featureSource, layer.GetFeatureClassName(), query);



More information about the mapguide-commits mailing list