[fdo-internals] RE: [fdo-commits] r5557 - in trunk/Providers: ArcSDE/Src/Provider OGR PostGIS/Src/Provider SDF/Src/Provider SDF/Src/UnitTest SHP/Src/Provider SHP/Src/UnitTest SQLite/Src/Provider SQLite/Src/UnitTest

Jason Birch jason at jasonbirch.com
Wed Jul 21 01:46:41 EDT 2010


Yes, I think adoption should require confirmation by a PSC member
(please feel free to poke the mover if they forget). I'm not going to
get uptight about this though.


On 2010-07-20, Leaf Li <leaf.li at autodesk.com> wrote:
> All,
>
> Changes proposed in FDO RFC 48 was submitted inadvertently before RFC 48 is
> formally approved. I apologize for it.
>
> I think I misunderstand the process of FDO RFC. There are the following
> statement in FDO PSC page (http://fdo.osgeo.org/psc.html) to introduce the
> process.
>
> If the motion is made on the mailing list a deadline of 48 hours is assumed.
> The PSC member may request a longer time frame if they deem it necessary.
>
> When I submitted code, it already passes 48 hours and nobody objects to it.
> So I assume it is already adopted automatically. After checking it with
> Orest and Greg, they told me that RFC isn't adopted until PSC send a message
> to state it is adopted.
>
> So please check whether PSC send a message to state whether it is adopted
> even if it is already voted when you submit changes proposed in RFC. The
> message is the sign of adoption. If not, please hold on.
>
> Thanks,
> Leaf Li
>
> -----Original Message-----
> From: fdo-commits-bounces at lists.osgeo.org
> [mailto:fdo-commits-bounces at lists.osgeo.org] On Behalf Of Orest Halustchak
> Sent: Monday, July 19, 2010 8:39 PM
> To: FDO Commits Mail List
> Subject: RE: [fdo-commits] r5557 - in trunk/Providers: ArcSDE/Src/Provider
> OGR PostGIS/Src/Provider SDF/Src/Provider SDF/Src/UnitTest SHP/Src/Provider
> SHP/Src/UnitTest SQLite/Src/Provider SQLite/Src/UnitTest
>
> Hi Leaf,
>
> You can't drop changes against an RFC that has not been approved formally.
> This RFC is has not been approved yet.
>
> Thanks,
> Orest.
>
> -----Original Message-----
> From: fdo-commits-bounces at lists.osgeo.org
> [mailto:fdo-commits-bounces at lists.osgeo.org] On Behalf Of svn_fdo at osgeo.org
> Sent: Monday, July 19, 2010 12:28 AM
> To: fdo-commits at lists.osgeo.org
> Subject: [fdo-commits] r5557 - in trunk/Providers: ArcSDE/Src/Provider OGR
> PostGIS/Src/Provider SDF/Src/Provider SDF/Src/UnitTest SHP/Src/Provider
> SHP/Src/UnitTest SQLite/Src/Provider SQLite/Src/UnitTest
>
> Author: leaf
> Date: 2010-07-19 04:27:51 +0000 (Mon, 19 Jul 2010) New Revision: 5557
>
> Modified:
>    trunk/Providers/ArcSDE/Src/Provider/ArcSDEDescribeSchemaCommand.cpp
>    trunk/Providers/OGR/OgrFdoUtil.cpp
>    trunk/Providers/OGR/OgrFdoUtil.h
>    trunk/Providers/OGR/OgrProvider.cpp
>    trunk/Providers/PostGIS/Src/Provider/SchemaDescription.cpp
>    trunk/Providers/SDF/Src/Provider/SchemaDb.cpp
>    trunk/Providers/SDF/Src/UnitTest/UnitTestUtil.cpp
>    trunk/Providers/SHP/Src/Provider/ShpLpClassDefinition.cpp
>    trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp
>    trunk/Providers/SQLite/Src/Provider/SltMetadata.cpp
>    trunk/Providers/SQLite/Src/UnitTest/UnitTestUtil.cpp
> Log:
> This submission is to implement FDO RFC 48 - Polygon Vertex Order.
> http://trac.osgeo.org/fdo/wiki/FDORfc48
>
> In the previous submission, I implemented FDO RFC 48 in FDO API level. This
> submission is to implement it for FDO Providers. In this submission, I
> finish adding class capabilities for ArcSDE, OGR, PostGIS, SDF, SHP and
> SQLite providers. I will add class capabilities for other providers later.
>
> PostGIS FDO provider doesn't set class capabilities for FdoClassDefinition
> instance before this submission. So it means
> FdoClassDefinition::GetClassCapabilities(...) will return null when you call
> it. It is a small bug of PostGIS provider. When implementing polygon vertex
> order, we will return polygon vertex order rule through feature class
> capabilities. In this case, we have to fix it and set feature class'
> capabilities.
>
> The capabilities for FDO providers are as follows.
>
> Provider         Vertex Order   Strictness
> WFS            CCW          Not enforced
> SQLite         CCW          Not enforced
> SHP            CW               Enforced
> SDF            CCW          Not enforced
> ArcSDE         CCW          Not enforced
> ODBC           None         Not enforced
> MySQL          CCW          Not enforced
> PostGIS        CCW          Not enforced
> Oracle         CCW          Enforced
> SQLSpatial
>   Geometry     CCW          Not enforced
>   Geography    CCW          Enforced
> OGR
>   SHP          CW           Enforced
>   Others       CCW          Not enforced
>
> Modified:
> trunk/Providers/ArcSDE/Src/Provider/ArcSDEDescribeSchemaCommand.cpp
> ===================================================================
> --- trunk/Providers/ArcSDE/Src/Provider/ArcSDEDescribeSchemaCommand.cpp
> 2010-07-19 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/ArcSDE/Src/Provider/ArcSDEDescribeSchemaCommand.cpp
> +++ 2010-07-19 04:27:51 UTC (rev 5557)
> @@ -350,6 +350,10 @@
>                  ((FdoFeatureClass*)newFdoClass.p)->SetGeometryProperty
> (geometry_definition);
>                  properties = newFdoClass->GetProperties ();
>                  properties->Add (geometry_definition);
> +
> +                // Set vertex order and strictness rule for geometry
> property
> +
> classCapabilities->SetPolygonVertexOrderRule(fdoPropertyName,
> FdoPolygonVertexOrderRule_CCW);
> +
> + classCapabilities->SetPolygonVertexOrderStrictness(fdoPropertyName,
> + false);
>              }
>              else  // not a shape column
>              {
>
> Modified: trunk/Providers/OGR/OgrFdoUtil.cpp
> ===================================================================
> --- trunk/Providers/OGR/OgrFdoUtil.cpp  2010-07-19 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/OGR/OgrFdoUtil.cpp  2010-07-19 04:27:51 UTC (rev
> +++ 5557)
> @@ -18,6 +18,7 @@
>
>  #include "stdafx.h"
>  #include "OgrFdoUtil.h"
> +#include "OgrProvider.h"
>
>  void tilde2dot(std::string& mbfc)
>  {
> @@ -39,7 +40,7 @@
>      }
>  }
>
> -FdoClassDefinition* OgrFdoUtil::ConvertClass(OGRLayer* layer,
> FdoIdentifierCollection* requestedProps)
> +FdoClassDefinition* OgrFdoUtil::ConvertClass(OgrConnection* connection,
> +OGRLayer* layer, FdoIdentifierCollection* requestedProps)
>  {
>      OGRFeatureDefn* fdefn = layer->GetLayerDefn();
>
> @@ -52,7 +53,33 @@
>      printf ("Feature class name: %s\n", name);  #endif
>      FdoPtr<FdoFeatureClass> fc = FdoFeatureClass::Create(wname.c_str(),
> L"");
> +    FdoPtr<FdoClassCapabilities> classCapabilities =
> FdoClassCapabilities::Create(*fc.p);
> +    classCapabilities->SetSupportsLocking(false);
> +    classCapabilities->SetSupportsLongTransactions(false);
> +    classCapabilities->SetSupportsWrite(false);
> +    fc->SetCapabilities(classCapabilities);
>
> +    FdoPolygonVertexOrderRule vertexOrderRule =
> FdoPolygonVertexOrderRule_CCW;
> +    bool bStrictness = false;
> +    OGRDataSource* dataStore = connection->GetOGRDataSource();
> +    if (NULL != dataStore)
> +    {
> +        OGRSFDriver* driver = dataStore->GetDriver();
> +        if (NULL != driver)
> +        {
> +            const char* name = driver->GetName();
> +
> +            // As far as I know, ESRI Shapefile is the only feature source
> that uses
> +            // clockwise vertex order. I assume other feature sources use
> counterclockwise
> +            // vertex order.
> +            if (strcmp(name, "ESRI Shapefile") == 0)
> +            {
> +                vertexOrderRule = FdoPolygonVertexOrderRule_CW;
> +                bStrictness = true;
> +            }
> +        }
> +    }
> +
>      FdoPtr<FdoPropertyDefinitionCollection> pdc = fc->GetProperties();
>
>      //data properties (attributes)
> @@ -137,8 +164,11 @@
>              gpd->SetSpatialContextAssociation(wname.c_str());
>              pdc->Add(gpd);
>              fc->SetGeometryProperty(gpd);
> +
> +            // Set vertex order and strictness rule for geometry property
> +            classCapabilities->SetPolygonVertexOrderRule(gpd->GetName(),
> vertexOrderRule);
> +
> + classCapabilities->SetPolygonVertexOrderStrictness(gpd->GetName(),
> + bStrictness);
>          }
> -
>      }
>
>      //identity property
> @@ -170,7 +200,7 @@
>          //set the ID property of the feature class
>          FdoPtr<FdoDataPropertyDefinitionCollection> idpdc =
> fc->GetIdentityProperties();
>          idpdc->Add(fid);
> -    }
> +    }
>
>      return FDO_SAFE_ADDREF(fc.p);
>  }
>
> Modified: trunk/Providers/OGR/OgrFdoUtil.h
> ===================================================================
> --- trunk/Providers/OGR/OgrFdoUtil.h    2010-07-19 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/OGR/OgrFdoUtil.h    2010-07-19 04:27:51 UTC (rev 5557)
> @@ -17,20 +17,18 @@
>  //
>
>  class OGRLayer;
> +class OgrConnection;
>
>
>  //Utility functions for conversion between FDO and OGR data  class
> OgrFdoUtil  {
>  public:
> -
> -
> -    static FdoClassDefinition* ConvertClass(OGRLayer* layer,
> FdoIdentifierCollection* requestedProps = NULL);
> +    static FdoClassDefinition* ConvertClass(OgrConnection* connection,
> + OGRLayer* layer, FdoIdentifierCollection* requestedProps = NULL);
>      static void ConvertFeature(FdoPropertyValueCollection* src, OGRFeature*
> dst, OGRLayer* layer);
>      static void ApplyFilter(OGRLayer* layer, FdoFilter* filter);
>      static int Fgf2Wkb(const unsigned char* fgf, unsigned char* wkb);
>      static int Wkb2Fgf(const unsigned char* wkb, unsigned char* fgf);
> -
>  };
>
>
>
> Modified: trunk/Providers/OGR/OgrProvider.cpp
> ===================================================================
> --- trunk/Providers/OGR/OgrProvider.cpp 2010-07-19 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/OGR/OgrProvider.cpp 2010-07-19 04:27:51 UTC (rev
> +++ 5557)
> @@ -365,7 +365,7 @@
>              for (int i=0; i<count; i++)
>              {
>                  OGRLayer* layer = m_poDS->GetLayer(i);
> -                FdoPtr<FdoClassDefinition> fc =
> OgrFdoUtil::ConvertClass(layer);
> +                FdoPtr<FdoClassDefinition> fc =
> + OgrFdoUtil::ConvertClass(this, layer);
>                  classes->Add(fc);
>              }
>          }
> @@ -761,7 +761,7 @@
>      //TODO: cache the result of this
>      //also this always returns all properties regardless
>      //of what was given in the select command
> -    return OgrFdoUtil::ConvertClass(m_poLayer, m_props);
> +    return OgrFdoUtil::ConvertClass(m_connection, m_poLayer, m_props);
>  }
>
>  FdoInt32 OgrFeatureReader::GetDepth()
>
> Modified: trunk/Providers/PostGIS/Src/Provider/SchemaDescription.cpp
> ===================================================================
> --- trunk/Providers/PostGIS/Src/Provider/SchemaDescription.cpp  2010-07-19
> 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/PostGIS/Src/Provider/SchemaDescription.cpp
> +++ 2010-07-19 04:27:51 UTC (rev 5557)
> @@ -199,6 +199,10 @@
>      PgTablesReader::Ptr stReader(new PgTablesReader(mConn.p));
>      stReader->Open();
>
> +    FdoPtr<FdoIConnectionCapabilities> connCaps =
> conn->GetConnectionCapabilities();
> +    FdoInt32 lockTypeCount;
> +    const FdoLockType* lockTypes = connCaps->GetLockTypes(
> + lockTypeCount );
> +
>      while (stReader->ReadNext())
>      {
>          ////////////////// CALCULATE SPATIAL EXTENT ////////////////// @@
> -230,6 +234,12 @@
>                FDOLOG_WRITE(L"Created class: %ls",
> static_cast<FdoString*>(fdoClassName));
>            }
>
> +          FdoPtr<FdoClassCapabilities> caps =
> FdoClassCapabilities::Create(*xClass);
> +          caps->SetSupportsLocking(connCaps->SupportsLocking());
> +
> caps->SetSupportsLongTransactions(connCaps->SupportsLongTransactions());
> +          caps->SetSupportsWrite(connCaps->SupportsWrite());
> +          caps->SetLockTypes( lockTypes, lockTypeCount );
> +          xClass->SetCapabilities(caps);
>
>            FdoPtr<FdoPropertyDefinitionCollection> pdc =
> xClass->GetProperties();
>
> @@ -302,6 +312,9 @@
>              FDOLOG_WRITE(L"+ geometric property: %ls",
>                  static_cast<FdoString*>(geomColumn->GetName()));
>
> +            // Set vertex order and strictness rule for geometry property
> +            caps->SetPolygonVertexOrderRule(geomPropDef->GetName(),
> FdoPolygonVertexOrderRule_CCW);
> +
> + caps->SetPolygonVertexOrderStrictness(geomPropDef->GetName(), false);
>            } //if stReader->IsSpatialTable()
>
>            ////////////////// CREATE DATA PROPERTIES //////////////////
>
> Modified: trunk/Providers/SDF/Src/Provider/SchemaDb.cpp
> ===================================================================
> --- trunk/Providers/SDF/Src/Provider/SchemaDb.cpp       2010-07-19 03:25:23
> UTC (rev 5556)
> +++ trunk/Providers/SDF/Src/Provider/SchemaDb.cpp       2010-07-19 04:27:51
> UTC (rev 5557)
> @@ -587,6 +587,10 @@
>              //property. FDO makes this a little ugly...
>              pd =
> dynamic_cast<FdoGeometricPropertyDefinition*>(pdc->FindItem(geomname));
>
> +            // Set vertex order and strictness rule for geometry property
> +            classcaps->SetPolygonVertexOrderRule(geomname,
> FdoPolygonVertexOrderRule_CCW);
> +            classcaps->SetPolygonVertexOrderStrictness(geomname,
> + false);
> +
>              //if we could not find it in the class properties, look in the
> inherited properties
>              //if it's not there, the class does not have a geometry
> property
>              if (pd == NULL)
>
> Modified: trunk/Providers/SDF/Src/UnitTest/UnitTestUtil.cpp
> ===================================================================
> --- trunk/Providers/SDF/Src/UnitTest/UnitTestUtil.cpp   2010-07-19 03:25:23
> UTC (rev 5556)
> +++ trunk/Providers/SDF/Src/UnitTest/UnitTestUtil.cpp   2010-07-19 04:27:51
> UTC (rev 5557)
> @@ -362,6 +362,10 @@
>      FdoPtr<FdoClassCapabilities> caps = cdef->GetCapabilities();
>      CPPUNIT_ASSERT(caps->SupportsLocking() == false);
>      CPPUNIT_ASSERT(caps->SupportsLongTransactions() == false);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderRule (L"Data") ==
> FdoPolygonVertexOrderRule_CCW);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderStrictness (L"Data") ==
> false);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderRule (L"Data2") ==
> FdoPolygonVertexOrderRule_CCW);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderStrictness (L"Data2") ==
> + false);
>
>         FdoPtr<FdoPropertyDefinition> gpd = pdc->GetItem(L"Data2");
>      CPPUNIT_ASSERT_MESSAGE("Expected a geometry property type",
> gpd->GetPropertyType() == FdoPropertyType_GeometricProperty );
>
> Modified: trunk/Providers/SHP/Src/Provider/ShpLpClassDefinition.cpp
> ===================================================================
> --- trunk/Providers/SHP/Src/Provider/ShpLpClassDefinition.cpp   2010-07-19
> 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/SHP/Src/Provider/ShpLpClassDefinition.cpp   2010-07-19
> 04:27:51 UTC (rev 5557)
> @@ -152,6 +152,10 @@
>              FdoFeatureClass *logicalFeatureClass =
> static_cast<FdoFeatureClass*>(m_logicalClassDefinition.p);
>              logicalFeatureClass->SetGeometryProperty(logicalGeomProp);
>          }
> +
> +        // Set vertex order and strictness rule for geometry property
> +
> classCapabilities->SetPolygonVertexOrderRule(logicalGeomProp->GetName(),
> FdoPolygonVertexOrderRule_CW);
> +
> + classCapabilities->SetPolygonVertexOrderStrictness(logicalGeomProp->Ge
> + tName(), true);
>      }
>
>      // Create & add the identity property (always exactly one identity
> property):
>
> Modified: trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp
> ===================================================================
> --- trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp    2010-07-19 03:25:23
> UTC (rev 5556)
> +++ trunk/Providers/SHP/Src/UnitTest/SelectTests.cpp    2010-07-19 04:27:51
> UTC (rev 5557)
> @@ -462,6 +462,8 @@
>          FdoPtr<FdoClassCapabilities> caps = definition->GetCapabilities
> ();
>          CPPUNIT_ASSERT_MESSAGE ("supports locking?", !caps->SupportsLocking
> ());
>          CPPUNIT_ASSERT_MESSAGE ("supports long transactions?",
> !caps->SupportsLongTransactions ());
> +        CPPUNIT_ASSERT_MESSAGE ("wrong polygon vertex order rule",
> caps->GetPolygonVertexOrderRule (L"Geometry") ==
> FdoPolygonVertexOrderRule_CW);
> +        CPPUNIT_ASSERT_MESSAGE ("wrong polygon vertex order strictness
> + rule", caps->GetPolygonVertexOrderStrictness (L"Geometry") == true);
>          FdoPtr<FdoDataPropertyDefinitionCollection> identities =
> definition->GetIdentityProperties ();
>          CPPUNIT_ASSERT_MESSAGE ("too many id properties", 1 ==
> identities->GetCount ());
>          FdoPtr<FdoDataPropertyDefinition> id = identities->GetItem (0);
>
> Modified: trunk/Providers/SQLite/Src/Provider/SltMetadata.cpp
> ===================================================================
> --- trunk/Providers/SQLite/Src/Provider/SltMetadata.cpp 2010-07-19 03:25:23
> UTC (rev 5556)
> +++ trunk/Providers/SQLite/Src/Provider/SltMetadata.cpp 2010-07-19
> +++ 04:27:51 UTC (rev 5557)
> @@ -288,6 +288,10 @@
>              }
>
>              pdc->Add(gpd);
> +
> +            // Set vertex order and strictness rule for geometry property
> +            caps->SetPolygonVertexOrderRule(gpd->GetName(),
> FdoPolygonVertexOrderRule_CCW);
> +            caps->SetPolygonVertexOrderStrictness(gpd->GetName(),
> + false);
>          }
>          else
>          {
>
> Modified: trunk/Providers/SQLite/Src/UnitTest/UnitTestUtil.cpp
> ===================================================================
> --- trunk/Providers/SQLite/Src/UnitTest/UnitTestUtil.cpp        2010-07-19
> 03:25:23 UTC (rev 5556)
> +++ trunk/Providers/SQLite/Src/UnitTest/UnitTestUtil.cpp        2010-07-19
> 04:27:51 UTC (rev 5557)
> @@ -379,6 +379,10 @@
>      FdoPtr<FdoClassCapabilities> caps = cdef->GetCapabilities();
>      CPPUNIT_ASSERT(caps->SupportsLocking() == false);
>      CPPUNIT_ASSERT(caps->SupportsLongTransactions() == false);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderRule (L"Data") ==
> FdoPolygonVertexOrderRule_CCW);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderStrictness (L"Data") ==
> false);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderRule (L"Data2") ==
> FdoPolygonVertexOrderRule_CCW);
> +    CPPUNIT_ASSERT (caps->GetPolygonVertexOrderStrictness (L"Data2") ==
> + false);
>
>         FdoPtr<FdoPropertyDefinition> gpd = pdc->GetItem(L"Data2");
>      CPPUNIT_ASSERT_MESSAGE("Expected a geometry property type",
> gpd->GetPropertyType() == FdoPropertyType_GeometricProperty );
>
> _______________________________________________
> fdo-commits mailing list
> fdo-commits at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/fdo-commits
>


More information about the fdo-internals mailing list