diff --git a/src/xercesc/internal/XSObjectFactory.cpp b/src/xercesc/internal/XSObjectFactory.cpp index 18c9b8a1eca80925d4158c7484d222bfe4e79808..44fed0e28ce0eab96f97808d0e89eafb33463bd3 100644 --- a/src/xercesc/internal/XSObjectFactory.cpp +++ b/src/xercesc/internal/XSObjectFactory.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/11/23 16:21:40 knoaman + * PSVI: create local elements of complex types + * * Revision 1.2 2003/11/21 22:34:46 neilg * More schema component model implementation, thanks to David Cargill. * In particular, this cleans up and completes the XSModel, XSNamespaceItem, @@ -342,7 +345,8 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, XSElementDeclaration* XSObjectFactory::addOrFind(SchemaElementDecl* const elemDecl, - XSModel* const xsModel) + XSModel* const xsModel, + XSComplexTypeDefinition* enclosingTypeDef) { XSElementDeclaration* xsObj = (XSElementDeclaration*) getObjectFromMap(elemDecl, xsModel); if (!xsObj) @@ -391,6 +395,13 @@ XSObjectFactory::addOrFind(SchemaElementDecl* const elemDecl, } } + XSConstants::SCOPE elemScope = XSConstants::SCOPE_ABSENT; + + if (enclosingTypeDef) + elemScope = XSConstants::SCOPE_LOCAL; + else if (elemDecl->getEnclosingScope() == Grammar::TOP_LEVEL_SCOPE) + elemScope = XSConstants::SCOPE_GLOBAL; + xsObj = new (fMemoryManager) XSElementDeclaration ( elemDecl @@ -399,6 +410,8 @@ XSObjectFactory::addOrFind(SchemaElementDecl* const elemDecl, , getAnnotationFromModel(xsModel, elemDecl) , icMap , xsModel + , elemScope + , enclosingTypeDef , fMemoryManager ); putObjectInMap(elemDecl, xsObj, xsModel); @@ -467,8 +480,15 @@ XSObjectFactory::addOrFind(ComplexTypeInfo* const typeInfo, ); putObjectInMap(typeInfo, xsObj, xsModel); - // REVISIT - // process elements + // process local elements + unsigned int elemCount = typeInfo->elementCount(); + for (unsigned int j=0; j<elemCount; j++) + { + SchemaElementDecl* elemDecl = typeInfo->elementAt(j); + + if (elemDecl->getEnclosingScope() == typeInfo->getScopeDefined()) + addOrFind(elemDecl, xsModel, xsObj); + } } return xsObj; diff --git a/src/xercesc/internal/XSObjectFactory.hpp b/src/xercesc/internal/XSObjectFactory.hpp index 67f9e9621d21d4911c5d425aba805253efad9dec..fd305dbe80bc3af5f532ad31eaee4a72c959d29c 100644 --- a/src/xercesc/internal/XSObjectFactory.hpp +++ b/src/xercesc/internal/XSObjectFactory.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.2 2003/11/23 16:21:40 knoaman + * PSVI: create local elements of complex types + * * Revision 1.1 2003/11/21 17:11:24 knoaman * Initial revision * @@ -139,6 +142,7 @@ private: ( SchemaElementDecl* const elemDecl , XSModel* const xsModel + , XSComplexTypeDefinition* const enclosingTypeDef = 0 ); XSComplexTypeDefinition* addOrFind