[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