[mapguide-commits] r5212 - in trunk/MgDev:
Common/MapGuideCommon/Services Common/PlatformBase/Services
Server/src/Services/Feature Web/src/HttpHandler
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Wed Sep 29 08:23:23 EDT 2010
Author: liuar
Date: 2010-09-29 12:23:23 +0000 (Wed, 29 Sep 2010)
New Revision: 5212
Modified:
trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.cpp
trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.h
trunk/MgDev/Common/PlatformBase/Services/FeatureService.h
trunk/MgDev/Server/src/Services/Feature/OpGetWfsFeature.cpp
trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp
trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h
trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp
trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h
trunk/MgDev/Web/src/HttpHandler/HttpWfsGetFeature.cpp
trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.cpp
trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.h
Log:
Ticket #1421 OGC WFS 1.1.0 Support
14. Test wfs:wfs-1.1.0-Basic-GetFeature-tc50.1 (s0002/d1e35137_1/d1e740_1/d1e25217_1/d1e6264_1)
Assertion: When the SortBy parameter is used the resulting feature set must be properly sorted according to the sort criteria.
MapGuide WFS didn't support sortby parameter, I extend the GetWfsFeature API to accept a sortCriteria parameter to sort the feature set base on FDO OrderBy filter.
Note: not all FDO providers support OrderBy.
Modified: trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.cpp
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.cpp 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.cpp 2010-09-29 12:23:23 UTC (rev 5212)
@@ -1406,13 +1406,14 @@
CREFSTRING filter,
INT32 maxFeatures,
CREFSTRING wfsVersion,
- CREFSTRING outputFormat)
+ CREFSTRING outputFormat,
+ CREFSTRING sortCriteria)
{
MgCommand cmd;
cmd.ExecuteCommand(m_connProp, // Connection
MgCommand::knObject, // Return type expected
MgFeatureServiceOpId::GetWfsFeature_Id, // Command Code
- 8, // No of arguments
+ 9, // No of arguments
Feature_Service, // Service Id
BUILD_VERSION(2,3,0), // Operation version
MgCommand::knObject, featureSourceId, // Argument#1
@@ -1423,6 +1424,7 @@
MgCommand::knInt32, maxFeatures, // Argument#6
MgCommand::knString, &wfsVersion, // Argument#7
MgCommand::knString, &outputFormat, // Argument#8
+ MgCommand::knString, &sortCriteria, // Argument#9
MgCommand::knNone); // End of argument
SetWarning(cmd.GetWarningObject());
Modified: trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.h 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Common/MapGuideCommon/Services/ProxyFeatureService.h 2010-09-29 12:23:23 UTC (rev 5212)
@@ -1106,13 +1106,13 @@
///
/// <!-- Syntax in .Net, Java, and PHP -->
/// \htmlinclude DotNetSyntaxTop.html
- /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat);
+ /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
/// \htmlinclude JavaSyntaxTop.html
- /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, String featureClass, MgStringCollection requiredProperties, String srs, String filter, int maxFeatures, string wfsVersion, string outputFormat);
+ /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
/// \htmlinclude PHPSyntaxTop.html
- /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat);
+ /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
///
/// \param featureSourceId (MgResourceIdentifier)
@@ -1138,6 +1138,8 @@
/// the retrieved feature information.
/// The supported values of output format are specified in OpenGIS Web Feature Service (WFS) Implementation Specification - section 9.2
/// http://portal.opengeospatial.org/files/?artifact_id=8339
+ /// \param sortCriteria (String/string)
+ /// A string identifying the sort criteria
///
/// \return
/// Returns an MgByteReader containing the requested feature information.
@@ -1146,7 +1148,7 @@
/// \exception MgInvalidArgumentException
///
MgByteReader* GetWfsFeature(MgResourceIdentifier* featureSourceId, CREFSTRING featureClass,
- MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures,CREFSTRING wfsVersion, CREFSTRING outputFormat);
+ MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures,CREFSTRING wfsVersion, CREFSTRING outputFormat, CREFSTRING sortCriteria);
////////////////////////////////////////////////////////////////////////////////
/// \brief
Modified: trunk/MgDev/Common/PlatformBase/Services/FeatureService.h
===================================================================
--- trunk/MgDev/Common/PlatformBase/Services/FeatureService.h 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Common/PlatformBase/Services/FeatureService.h 2010-09-29 12:23:23 UTC (rev 5212)
@@ -1610,13 +1610,13 @@
///
/// <!-- Syntax in .Net, Java, and PHP -->
/// \htmlinclude DotNetSyntaxTop.html
- /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat);
+ /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
/// \htmlinclude JavaSyntaxTop.html
- /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, String featureClass, MgStringCollection requiredProperties, String srs, String filter, int maxFeatures, string wfsVersion, string outputFormat);
+ /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
/// \htmlinclude PHPSyntaxTop.html
- /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat);
+ /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
///
/// \param featureSourceId (MgResourceIdentifier)
@@ -1642,14 +1642,16 @@
/// the retrieved feature information.
/// The supported values of output format are specified in OpenGIS Web Feature Service (WFS) Implementation Specification - section 9.2
/// http://portal.opengeospatial.org/files/?artifact_id=8339
- ///
+ /// \param sortCriteria (String/string)
+ /// A string identifying the sort criteria
+ ///
/// \return
/// Returns an MgByteReader containing the requested feature information.
///
/// \exception MgInvalidArgumentException
///
virtual MgByteReader* GetWfsFeature(MgResourceIdentifier* featureSourceId, CREFSTRING featureClass,
- MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures,CREFSTRING wfsVersion, CREFSTRING outputFormat) = 0;
+ MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures,CREFSTRING wfsVersion, CREFSTRING outputFormat, CREFSTRING sortCriteria) = 0;
////////////////////////////////////////////////////////////////////////////////
/// \brief
Modified: trunk/MgDev/Server/src/Services/Feature/OpGetWfsFeature.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/OpGetWfsFeature.cpp 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Server/src/Services/Feature/OpGetWfsFeature.cpp 2010-09-29 12:23:23 UTC (rev 5212)
@@ -111,7 +111,7 @@
// Write the response
EndExecution(byteReader);
}
- else if (8 == m_packet.m_NumArguments)
+ else if (9 == m_packet.m_NumArguments)
{
// Get the feature source
Ptr<MgResourceIdentifier> featureSourceId = (MgResourceIdentifier*)m_stream->GetObject();
@@ -143,6 +143,10 @@
STRING outputFormat;
m_stream->GetString(outputFormat);
+ // Get the sort criteria
+ STRING sortCriteria;
+ m_stream->GetString(sortCriteria);
+
BeginExecution();
MG_LOG_OPERATION_MESSAGE_PARAMETERS_START();
@@ -161,13 +165,15 @@
MG_LOG_OPERATION_MESSAGE_ADD_STRING(wfsVersion.c_str());
MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
MG_LOG_OPERATION_MESSAGE_ADD_STRING(outputFormat.c_str());
+ MG_LOG_OPERATION_MESSAGE_ADD_SEPARATOR();
+ MG_LOG_OPERATION_MESSAGE_ADD_STRING(sortCriteria.c_str());
MG_LOG_OPERATION_MESSAGE_PARAMETERS_END();
Validate();
// Execute the operation
Ptr<MgByteReader> byteReader = m_service->GetWfsFeature(featureSourceId, featureClass,
- requiredProperties, srs, filter, maxFeatures, wfsVersion, outputFormat);
+ requiredProperties, srs, filter, maxFeatures, wfsVersion, outputFormat, sortCriteria);
// Write the response
EndExecution(byteReader);
Modified: trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp 2010-09-29 12:23:23 UTC (rev 5212)
@@ -1700,13 +1700,13 @@
///
/// <!-- Syntax in .Net, Java, and PHP -->
/// \htmlinclude DotNetSyntaxTop.html
-/// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string outputFormat);
+/// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
/// \htmlinclude JavaSyntaxTop.html
-/// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, String featureClass, MgStringCollection requiredProperties, String srs, String filter, int maxFeatures, string outputFormat);
+/// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
/// \htmlinclude PHPSyntaxTop.html
-/// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string outputFormat);
+/// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string wfsVersion, string outputFormat, string sortCriteria);
/// \htmlinclude SyntaxBottom.html
///
/// \param featureSourceId (MgResourceIdentifier)
@@ -1732,6 +1732,8 @@
/// the retrieved feature information.
/// The supported values of output format are specified in OpenGIS Web Feature Service (WFS) Implementation Specification - section 9.2
/// http://portal.opengeospatial.org/files/?artifact_id=8339
+/// \param sortCriteria (String/string)
+/// A string identifying the sort criteria
///
/// \return
/// Returns an MgByteReader containing the requested feature information.
@@ -1745,7 +1747,8 @@
CREFSTRING wfsFilter,
INT32 maxFeatures,
CREFSTRING wfsVersion,
- CREFSTRING outputFormat)
+ CREFSTRING outputFormat,
+ CREFSTRING sortCriteria)
{
MG_LOG_TRACE_ENTRY(L"MgServerFeatureService::GetWfsFeature()");
@@ -1834,6 +1837,31 @@
options->SetFilter(fdoFilterString);
}
+ if(!sortCriteria.empty())
+ {
+ Ptr<MgStringCollection> orderByProperties = new MgStringCollection();
+ int orderOption = MgOrderingOption::Ascending;
+
+ STRING sSortCriteria = sortCriteria;
+ STRING::size_type pos = sSortCriteria.find_last_of(L" ");
+ if(pos != STRING::npos)
+ {
+ STRING sSortByProperty = sSortCriteria.substr(0, pos);
+ orderByProperties->Add(sSortByProperty);
+
+ STRING sSortOption = MgUtil::ToUpper(sSortCriteria.substr(pos+1));
+ if(sSortOption == L"D")
+ {
+ orderOption = MgOrderingOption::Descending;
+ }
+ }
+ else
+ {
+ orderByProperties->Add(sortCriteria);
+ }
+
+ options->SetOrderingFilter(orderByProperties,orderOption);
+ }
// TODO: can FeatureName be an extension name rather than a FeatureClass?
Ptr<MgFeatureReader> mgfReader = SelectFeatures(fs, lfeatureName, options);
@@ -1932,7 +1960,7 @@
CREFSTRING wfsFilter,
INT32 maxFeatures)
{
- return GetWfsFeature(fs, featureClass, propNames, srs, wfsFilter, maxFeatures, L"1.0.0", L"2.1.2");
+ return GetWfsFeature(fs, featureClass, propNames, srs, wfsFilter, maxFeatures, L"1.0.0", L"text/xml; subtype=gml/2.1.2",L"");
}
Modified: trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h 2010-09-29 12:23:23 UTC (rev 5212)
@@ -912,6 +912,9 @@
/// The supported values of output format are specified in OpenGIS Web Feature Service (WFS) Implementation Specification - section 9.2
/// http://portal.opengeospatial.org/files/?artifact_id=8339
/// </param>
+ /// <param name="sortCriteria">Input
+ /// A string identifying the sort criteria
+ /// </param>
/// <returns>
/// Returns an MgByteReader containing the requested feature information.
/// </returns>
@@ -919,7 +922,7 @@
/// EXCEPTIONS:
/// MgInvalidArgumentException
MgByteReader* GetWfsFeature(MgResourceIdentifier* featureSourceId, CREFSTRING featureClass,
- MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures, CREFSTRING wfsVersion, CREFSTRING outputFormat);
+ MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures, CREFSTRING wfsVersion, CREFSTRING outputFormat, CREFSTRING sortCriteria);
///////////////////////////////////////////////////////////////////////////
/// This method has been deprecated. Use the above method.
Modified: trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.cpp 2010-09-29 12:23:23 UTC (rev 5212)
@@ -311,6 +311,7 @@
const STRING MgHttpResourceStrings::reqWfsFilter = L"FILTER";
const STRING MgHttpResourceStrings::reqWfsBbox = L"BBOX";
const STRING MgHttpResourceStrings::reqWfsOutputFormat = L"OUTPUTFORMAT";
+const STRING MgHttpResourceStrings::reqWfsSortBy = L"SORTBY";
// Web Application Parameters
const STRING MgHttpResourceStrings::reqFormat = L"FORMAT";
Modified: trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Web/src/HttpHandler/HttpResourceStrings.h 2010-09-29 12:23:23 UTC (rev 5212)
@@ -223,6 +223,7 @@
static const STRING reqWfsFilter;
static const STRING reqWfsBbox;
static const STRING reqWfsOutputFormat;
+ static const STRING reqWfsSortBy;
// PREDEFINED WEB APPLICATION REQUEST PARAMETERS
static const STRING reqFormat;
Modified: trunk/MgDev/Web/src/HttpHandler/HttpWfsGetFeature.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/HttpWfsGetFeature.cpp 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Web/src/HttpHandler/HttpWfsGetFeature.cpp 2010-09-29 12:23:23 UTC (rev 5212)
@@ -228,9 +228,16 @@
}
}
+ STRING sSortCriteria = m_getFeatureParams->GetSortCriteria();
+ if(!sSortCriteria.empty())
+ {
+ STRING::size_type pos = sSortCriteria.find_first_of(L":");
+ sSortCriteria = sSortCriteria.substr(pos+1);
+ }
+
// Call the C++ API
Ptr<MgByteReader> resultReader = featureService->GetWfsFeature(featureSourceId, ((sSchemaHash.size()==0) ? sClass : sSchemaHash + _(":") + sClass),
- requiredProperties, m_getFeatureParams->GetSrs(), filter, numFeaturesToRetrieve, sVersion, sOutputFormat);
+ requiredProperties, m_getFeatureParams->GetSrs(), filter, numFeaturesToRetrieve, sVersion, sOutputFormat,sSortCriteria);
// TODO How to determine number of features retrieved...?
// Note: for now, maxFeatures is managed by the MgWfsFeatures object. - TMT 2006-3-20
Modified: trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.cpp
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.cpp 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.cpp 2010-09-29 12:23:23 UTC (rev 5212)
@@ -68,6 +68,10 @@
// Get the requested SRS value
m_srs = GetRequestParameter(oServer,MgHttpResourceStrings::reqWfsSrsName);
+ if(m_srs.empty())
+ {
+ m_srs = GetSRSFromBbox(bbox);
+ }
// Get the SRS in WKT form
STRING srsWkt;
@@ -98,6 +102,9 @@
// Get the wfs version
m_version = GetRequestParameter(oServer,MgHttpResourceStrings::reqWfsVersion);
+ // Get the sortby property name
+ m_sortCriteria = GetRequestParameter(oServer,MgHttpResourceStrings::reqWfsSortBy);
+
}
WfsGetFeatureParams::~WfsGetFeatureParams()
@@ -281,6 +288,23 @@
}
}
+
+// Get SRS from BBOX parameter
+STRING WfsGetFeatureParams::GetSRSFromBbox(CREFSTRING bbox)
+{
+ if(bbox.length() > 0)
+ {
+ // Build a filter from the bounding box
+ Ptr<MgStringCollection> bboxCoords = MgStringCollection::ParseCollection(bbox, L",");
+ if(bboxCoords->GetCount() >= 5)
+ {
+ return MgUtil::Trim(bboxCoords->GetItem(4));
+ }
+ }
+
+ return L"";
+}
+
/// <summary>
/// Retrieves the requested feature types
/// </summary>
@@ -359,6 +383,17 @@
}
/// <summary>
+/// Retrieves the property name which is used sort the GetFeature result
+/// </summary>
+/// <returns>
+/// A STRING defining the property name which is used sort the GetFeature result
+/// </returns>
+STRING WfsGetFeatureParams::GetSortCriteria()
+{
+ return m_sortCriteria;
+}
+
+/// <summary>
/// Performs a minimum amount of request parsing in order to determine
/// whether this class can handle the specified XML request
/// </summary>
Modified: trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.h
===================================================================
--- trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.h 2010-09-29 10:46:47 UTC (rev 5211)
+++ trunk/MgDev/Web/src/HttpHandler/WfsGetFeatureParams.h 2010-09-29 12:23:23 UTC (rev 5212)
@@ -118,6 +118,14 @@
STRING GetVersion();
/// <summary>
+ /// Retrieves the sort criteria
+ /// </summary>
+ /// <returns>
+ /// A STRING defining the sort criteria
+ /// </returns>
+ STRING GetSortCriteria();
+
+ /// <summary>
/// Performs a minimum amount of request parsing in order to determine
/// whether this class can handle the specified XML request
/// </summary>
@@ -147,6 +155,7 @@
MgStringCollection* GetParenthesisedList(CREFSTRING sourceString);
void BuildFilterStrings(CREFSTRING filters, CREFSTRING featureIds, CREFSTRING bbox);
+ STRING GetSRSFromBbox(CREFSTRING bbox);
bool ParseQueryElement(MgOgcWfsServer& oServer,MgXmlParser& parser,MgXmlNamespaceManager& oNamespaces);
bool ParseFilterElement(MgOgcWfsServer& oServer,MgXmlParser& parser,MgXmlNamespaceManager& oNamespaces);
@@ -173,6 +182,7 @@
STRING m_srs;
STRING m_outputFormat;
STRING m_version;
+ STRING m_sortCriteria;
};
#endif // _FS_WFS_GET_FEATURE_PARAMS_H
More information about the mapguide-commits
mailing list