knoaman     2003/11/24 07:45:36

  Modified:    c/src/xercesc/framework/psvi XSSimpleTypeDefinition.cpp
                        XSSimpleTypeDefinition.hpp
               c/src/xercesc/internal XSObjectFactory.cpp
                        XSObjectFactory.hpp
               c/src/xercesc/validators/datatype DatatypeValidator.hpp
  Log:
  PSVI: finish construction of XSSimpleTypeDefinition
  
  Revision  Changes    Path
  1.6       +33 -197   
xml-xerces/c/src/xercesc/framework/psvi/XSSimpleTypeDefinition.cpp
  
  Index: XSSimpleTypeDefinition.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSSimpleTypeDefinition.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XSSimpleTypeDefinition.cpp        21 Nov 2003 17:34:04 -0000      1.5
  +++ XSSimpleTypeDefinition.cpp        24 Nov 2003 15:45:36 -0000      1.6
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.6  2003/11/24 15:45:36  knoaman
  + * PSVI: finish construction of XSSimpleTypeDefinition
  + *
    * Revision 1.5  2003/11/21 17:34:04  knoaman
    * PSVI update
    *
  @@ -102,20 +105,27 @@
   // ---------------------------------------------------------------------------
   //  XSSimpleTypeDefinition: Constructors and Destructors
   // ---------------------------------------------------------------------------
  -XSSimpleTypeDefinition::XSSimpleTypeDefinition(DatatypeValidator* const 
datatypeValidator,
  -                                               XSAnnotation* const      headAnnot,
  -                                               XSModel* const           xsModel,
  -                                               MemoryManager* const     manager)
  -    : XSTypeDefinition(SIMPLE_TYPE, 0, xsModel, manager)
  +XSSimpleTypeDefinition::XSSimpleTypeDefinition
  +(
  +    DatatypeValidator* const            datatypeValidator
  +    , VARIETY                           stVariety
  +    , XSTypeDefinition* const           xsBaseType
  +    , XSSimpleTypeDefinition* const     primitiveOrItemType
  +    , XSSimpleTypeDefinitionList* const memberTypes
  +    , XSAnnotation*                     headAnnot
  +    , XSModel* const                    xsModel
  +    , MemoryManager* const              manager
  +)
  +    : XSTypeDefinition(SIMPLE_TYPE, xsBaseType, xsModel, manager)
       , fDefinedFacets(0)
       , fFixedFacets(0)
  -    , fVariety(VARIETY_ABSENT)
  +    , fVariety(stVariety)
       , fDatatypeValidator(datatypeValidator)
       , fXSFacetList(0)
       , fXSMultiValueFacetList(0)
       , fPatternList(0)
  -    , fPrimitiveOrItemType(0)
  -    , fMemberTypes(0)
  +    , fPrimitiveOrItemType(primitiveOrItemType)
  +    , fMemberTypes(memberTypes)
       , fXSAnnotationList(0)
   {
       if (int finalset = fDatatypeValidator->getFinalSet()) 
  @@ -271,197 +281,23 @@
   }
   
   // ---------------------------------------------------------------------------
  -//  XSSimpleTypeDefinition: initialization methods
  +//  XSSimpleTypeDefinition: helper methods
   // ---------------------------------------------------------------------------
  -void XSSimpleTypeDefinition::construct()
  -{
  -    //REVISIT
  -/*    // compute fBaseType
  -    if (fDatatypeValidator->getBaseValidator())
  -        fBaseType = PSVIUtil::addOrFind(fDatatypeValidator->getBaseValidator(), 
fXSModel, fMemoryManager);
  -    
  -    //REVISIT: the getFixed method is protected so added friend 
XSSimpleTypeDefinition
  -    //         to DatatypeValidator class... 
  -    if (fDatatypeValidator->getType() == DatatypeValidator::Union)
  -    {
  -        fVariety = VARIETY_UNION;
  -        RefVectorOf<DatatypeValidator>* memberTypeValidators = 
((UnionDatatypeValidator*)fDatatypeValidator)->getMemberTypeValidators();
  -        unsigned int size = memberTypeValidators->size();
  -        if (size)
  -        {
  -            fMemberTypes = new (fMemoryManager) 
RefVectorOf<XSSimpleTypeDefinition>(size, false, fMemoryManager);
  -            for (unsigned int i=0; i<size; i++)
  -            {
  -                fMemberTypes->addElement(
  -                    PSVIUtil::addOrFind(memberTypeValidators->elementAt(i), 
fXSModel, fMemoryManager)
  -                );
  -            }
  -        }
  -    } 
  -    else if (fDatatypeValidator->getType() == DatatypeValidator::List)
  -    {
  -        fVariety = VARIETY_LIST;
  -
  -        DatatypeValidator* dv = fDatatypeValidator->getBaseValidator();
  -        while (dv->getType() == DatatypeValidator::List)
  -        {
  -            PSVIUtil::addOrFind(dv, fXSModel, fMemoryManager);
  -            dv = dv->getBaseValidator();
  -        }
  -        fPrimitiveOrItemType = PSVIUtil::addOrFind(dv, fXSModel, fMemoryManager);
  -    }
  -    else
  -    {
  -        // REVISIT: assume ATOMIC but what about VARIETY_ABSENT?
  -        fVariety = VARIETY_ATOMIC;
  -        
  -        DatatypeValidator* dv = fDatatypeValidator->getBaseValidator();
  -        while (dv)
  -        {
  -            fPrimitiveOrItemType = PSVIUtil::addOrFind(dv, fXSModel, 
fMemoryManager);
  -            dv = dv->getBaseValidator();
  -        }
  -    }
  -
  -    if (fDatatypeValidator->getFacetsDefined())
  -        processFacets();*/
  -}
  -
  -void XSSimpleTypeDefinition::processFacets()
  -{
  -    // REVISIT
  -/*    bool isFixed = false;
  -    int facetsDefined = fDatatypeValidator->getFacetsDefined();
  -
  -    fFixedFacets = fDatatypeValidator->getFixed();
  -
  -    // NOTE: XSMultiValueFacetList is not owned by XSModel!
  -    if ((facetsDefined & DatatypeValidator::FACET_PATTERN)
  -        || (facetsDefined & DatatypeValidator::FACET_ENUMERATION))
  -        fXSMultiValueFacetList = new (fMemoryManager) 
RefVectorOf<XSMultiValueFacet>(2, true, fMemoryManager);
  -
  -    if (facetsDefined & DatatypeValidator::FACET_ENUMERATION)
  -    {
  -        RefArrayVectorOf<XMLCh>* enumList = (RefArrayVectorOf<XMLCh>*)
  -            fDatatypeValidator->getEnumString();
  -        isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_ENUMERATION);
  -
  -        // NOTE: Don't need to add multivaluefacet to "ObjectMap -> 
getObjectFromMap/putObjectInMap);
  -        fXSMultiValueFacetList->addElement(
  -            new (fMemoryManager) XSMultiValueFacet(
  -                FACET_ENUMERATION , enumList , isFixed
  -                , PSVIUtil::getAnnotationFromModel(fXSModel, enumList)
  -                , fXSModel, fMemoryManager)
  -        );
  -        fDefinedFacets |= FACET_ENUMERATION;
  -        if (isFixed)
  -            fFixedFacets |= FACET_ENUMERATION;
  -    }
  -
  -    RefHashTableOf<KVStringPair>* facets = fDatatypeValidator->getFacets();
  -    if (!facets)
  -        return;
  -
  -    // NOTE: XSFacetList is not owned by XSModel!
  -    fXSFacetList = new (fMemoryManager) RefVectorOf<XSFacet>(10, true, 
fMemoryManager);
  -
  -    // NOTE: Don't need to add facet to "ObjectMap -> 
getObjectFromMap/putObjectInMap);
  -    RefHashTableOfEnumerator<KVStringPair> e(facets);
  -    while (e.hasMoreElements())
  -    {
  -        KVStringPair& pair = e.nextElement();
  -        XMLCh* key = pair.getKey();
  -        FACET facetType = FACET_NONE;
  -        XSAnnotation* annot = PSVIUtil::getAnnotationFromModel(fXSModel, &pair);
  -
  -        if (XMLString::equals(key, SchemaSymbols::fgELT_MAXINCLUSIVE))
  -        {
  -            facetType = FACET_MAXINCLUSIVE;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_MAXINCLUSIVE);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXEXCLUSIVE))
  -        {
  -            facetType = FACET_MAXEXCLUSIVE;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_MAXEXCLUSIVE);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_MININCLUSIVE))
  -        {            
  -            facetType = FACET_MININCLUSIVE;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_MININCLUSIVE);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_MINEXCLUSIVE))
  -        {
  -            facetType = FACET_MINEXCLUSIVE;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_MINEXCLUSIVE);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_LENGTH))
  -        {
  -            facetType = FACET_LENGTH;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_LENGTH);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_MINLENGTH))
  -        {
  -            facetType = FACET_MINLENGTH;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_MINLENGTH);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXLENGTH))
  -        {
  -            facetType = FACET_MAXLENGTH;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_MAXLENGTH);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_TOTALDIGITS))
  -        {
  -            facetType = FACET_TOTALDIGITS;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_TOTALDIGITS);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_FRACTIONDIGITS))
  -        {
  -            facetType = FACET_FRACTIONDIGITS;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_FRACTIONDIGITS);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_WHITESPACE))
  -        {
  -            facetType = FACET_WHITESPACE;
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_WHITESPACE);
  -        }
  -        else if (XMLString::equals(key, SchemaSymbols::fgELT_PATTERN))
  -        {
  -            XMLStringTokenizer tokenizer(fDatatypeValidator->getPattern(), &chPipe, 
fMemoryManager);
  -            fPatternList = new (fMemoryManager) 
RefArrayVectorOf<XMLCh>(tokenizer.countTokens(), true, fMemoryManager);
  -                
  -            while (tokenizer.hasMoreTokens())
  -                
fPatternList->addElement(XMLString::replicate(tokenizer.nextToken(), fMemoryManager));
  -
  -            isFixed = XSSimpleTypeDefinitionTestFlag(fFixedFacets & 
DatatypeValidator::FACET_PATTERN);
  -            // NOTE: Don't need to add multivaluefacet to "ObjectMap -> 
getObjectFromMap/putObjectInMap);
  -            fXSMultiValueFacetList->addElement(
  -                new (fMemoryManager) XSMultiValueFacet(
  -                    FACET_PATTERN, fPatternList, isFixed, annot, fXSModel, 
fMemoryManager)
  -             );
  -            fDefinedFacets |= FACET_PATTERN;
  -            if (isFixed) 
  -                fFixedFacets |= FACET_PATTERN;
  -            continue;
  -        }
  -        else
  -        {
  -            // REVISIT: hmm... what about XSSimpleTypeDefinition::FACET_NONE
  -            // don't think I need to create an empty Facet?
  -            continue;
  -        }
  -
  -        fXSFacetList->addElement(
  -            new (fMemoryManager) XSFacet(
  -                facetType, pair.getValue(), isFixed, annot, fXSModel, 
fMemoryManager)
  -        );
  -
  -        fDefinedFacets |= facetType;
  -        if (isFixed) 
  -            fFixedFacets |= facetType;
  -    }*/
  +void XSSimpleTypeDefinition::setFacetInfo
  +(
  +    int                            definedFacets
  +    , int                          fixedFacets
  +    , XSFacetList* const           xsFacetList
  +    , XSMultiValueFacetList* const xsMultiValueFacetList
  +    , StringList* const            patternList
  +)
  +{
  +    fDefinedFacets = definedFacets;
  +    fFixedFacets = fixedFacets;
  +    fXSFacetList = xsFacetList;
  +    fXSMultiValueFacetList = xsMultiValueFacetList;
  +    fPatternList = patternList;
   }
   
   
   XERCES_CPP_NAMESPACE_END
  -
  -
  
  
  
  1.7       +27 -15    
xml-xerces/c/src/xercesc/framework/psvi/XSSimpleTypeDefinition.hpp
  
  Index: XSSimpleTypeDefinition.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSSimpleTypeDefinition.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XSSimpleTypeDefinition.hpp        21 Nov 2003 17:34:04 -0000      1.6
  +++ XSSimpleTypeDefinition.hpp        24 Nov 2003 15:45:36 -0000      1.7
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.7  2003/11/24 15:45:36  knoaman
  + * PSVI: finish construction of XSSimpleTypeDefinition
  + *
    * Revision 1.6  2003/11/21 17:34:04  knoaman
    * PSVI update
    *
  @@ -209,10 +212,14 @@
         */
       XSSimpleTypeDefinition
       (
  -        DatatypeValidator* const datatypeValidator
  -        , XSAnnotation*          headAnnot
  -        , XSModel* const         xsModel
  -        , MemoryManager* const   manager = XMLPlatformUtils::fgMemoryManager
  +        DatatypeValidator* const            datatypeValidator
  +        , VARIETY                           stVariety
  +        , XSTypeDefinition* const           xsBaseType
  +        , XSSimpleTypeDefinition* const     primitiveOrItemType
  +        , XSSimpleTypeDefinitionList* const memberTypes
  +        , XSAnnotation*                     headAnnot
  +        , XSModel* const                    xsModel
  +        , MemoryManager* const              manager = 
XMLPlatformUtils::fgMemoryManager
       );
   
       //@};
  @@ -257,7 +264,7 @@
        * [facets]: get all facets defined on this type. The value is a bit 
        * combination of FACET_XXX constants of all defined facets. 
        */
  -    short getDefinedFacets() const;
  +    int getDefinedFacets() const;
   
       /**
        * Convenience method. [Facets]: check whether a facet is defined on this 
  @@ -270,7 +277,7 @@
       /**
        * [facets]: get all facets defined and fixed on this type.
        */
  -    short getFixedFacets() const;
  +    int getFixedFacets() const;
   
       /**
        * Convenience method. [Facets]: check whether a facet is defined and 
  @@ -391,10 +398,6 @@
   
       //@{
   
  -    /**
  -     * Complete the construction of the <code>XSComplexTypeDeclaration</code>.
  -     */
  -    void construct();
   
       //@}
   
  @@ -409,15 +412,24 @@
       /**
         * Helper method for construct
         */
  -    void processFacets();
  +    void setFacetInfo
  +    (
  +        int                            definedFacets
  +        , int                          fixedFacets
  +        , XSFacetList* const           xsFacetList
  +        , XSMultiValueFacetList* const xsMultiValueFacetList
  +        , StringList* const            patternList
  +    );
  +
  +    friend class XSObjectFactory;
   
   protected:
   
       // -----------------------------------------------------------------------
       //  data members
       // -----------------------------------------------------------------------
  -    short                       fDefinedFacets;
  -    short                       fFixedFacets;
  +    int                         fDefinedFacets;
  +    int                         fFixedFacets;
       VARIETY                     fVariety;
       DatatypeValidator*          fDatatypeValidator;
       XSFacetList*                fXSFacetList;
  @@ -454,12 +466,12 @@
       return fMemberTypes;
   }
   
  -inline short XSSimpleTypeDefinition::getDefinedFacets() const
  +inline int XSSimpleTypeDefinition::getDefinedFacets() const
   {
       return fDefinedFacets;
   }
   
  -inline short XSSimpleTypeDefinition::getFixedFacets() const
  +inline int XSSimpleTypeDefinition::getFixedFacets() const
   {
       return fFixedFacets;
   }
  
  
  
  1.5       +209 -1    xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp
  
  Index: XSObjectFactory.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSObjectFactory.cpp       23 Nov 2003 16:49:26 -0000      1.4
  +++ XSObjectFactory.cpp       24 Nov 2003 15:45:36 -0000      1.5
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.5  2003/11/24 15:45:36  knoaman
  + * PSVI: finish construction of XSSimpleTypeDefinition
  + *
    * Revision 1.4  2003/11/23 16:49:26  knoaman
    * PSVI: create local elements of groups
    *
  @@ -91,6 +94,8 @@
   #include <xercesc/framework/psvi/XSAttributeUse.hpp>
   #include <xercesc/framework/psvi/XSAttributeDeclaration.hpp>
   #include <xercesc/framework/psvi/XSNotationDeclaration.hpp>
  +#include <xercesc/framework/psvi/XSFacet.hpp>
  +#include <xercesc/framework/psvi/XSMultiValueFacet.hpp>
   #include <xercesc/validators/common/ContentSpecNode.hpp>
   #include <xercesc/validators/datatype/DatatypeValidator.hpp>
   #include <xercesc/validators/schema/SchemaAttDefList.hpp>
  @@ -101,6 +106,7 @@
   #include <xercesc/validators/schema/identity/IC_KeyRef.hpp>
   #include <xercesc/validators/schema/identity/XercesXPath.hpp>
   #include <xercesc/util/HashPtr.hpp>
  +#include <xercesc/util/XMLStringTokenizer.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -340,7 +346,68 @@
   
       if (!xsObj)
       {
  -        //REVISIT
  +        XSSimpleTypeDefinition* baseType = 0;
  +        XSSimpleTypeDefinitionList* memberTypes = 0;
  +        XSSimpleTypeDefinition* primitiveOrItemType = 0;
  +        XSSimpleTypeDefinition::VARIETY typeVariety = 
XSSimpleTypeDefinition::VARIETY_ATOMIC;
  +
  +        // compute fBaseType
  +        DatatypeValidator* baseDV = validator->getBaseValidator();
  +        if (baseDV)
  +            baseType = addOrFind(baseDV, xsModel);
  +    
  +        //REVISIT: the getFixed method is protected so added friend XSObjectFactory
  +        //         to DatatypeValidator class... 
  +        DatatypeValidator::ValidatorType dvType = validator->getType();
  +        if (dvType == DatatypeValidator::Union)
  +        {
  +            typeVariety = XSSimpleTypeDefinition::VARIETY_UNION;
  +            RefVectorOf<DatatypeValidator>* membersDV = 
((UnionDatatypeValidator*)validator)->getMemberTypeValidators();
  +            unsigned int size = membersDV->size();
  +            if (size)
  +            {
  +                memberTypes = new (fMemoryManager) 
RefVectorOf<XSSimpleTypeDefinition>(size, false, fMemoryManager);
  +                for (unsigned int i=0; i<size; i++)
  +                    memberTypes->addElement(addOrFind(membersDV->elementAt(i), 
xsModel));
  +            }
  +        } 
  +        else if (dvType == DatatypeValidator::List)
  +        {
  +            typeVariety = XSSimpleTypeDefinition::VARIETY_LIST;
  +
  +            while (baseDV->getType() == DatatypeValidator::List)
  +            {
  +                addOrFind(baseDV, xsModel);
  +                baseDV = baseDV->getBaseValidator();
  +            }
  +            primitiveOrItemType = addOrFind(baseDV, xsModel);
  +        }
  +        else
  +        {
  +            // REVISIT: assume ATOMIC but what about VARIETY_ABSENT?
  +            while (baseDV)
  +            {
  +                primitiveOrItemType = addOrFind(baseDV, xsModel);
  +                baseDV = baseDV->getBaseValidator();
  +            }
  +        }
  +
  +        xsObj = new (fMemoryManager) XSSimpleTypeDefinition
  +        (
  +            validator
  +            , typeVariety
  +            , baseType
  +            , primitiveOrItemType
  +            , memberTypes
  +            , getAnnotationFromModel(xsModel, validator)
  +            , xsModel
  +            , fMemoryManager
  +        );
  +        putObjectInMap(validator, xsObj, xsModel);
  +
  +        // process facets
  +        if (validator->getFacetsDefined())
  +            processFacets(validator, xsModel, xsObj);
       }
   
       return xsObj;
  @@ -707,5 +774,146 @@
        fDeleteVector->addElement(object);
   }
   
  +
  +void XSObjectFactory::processFacets(DatatypeValidator* const dv,
  +                                    XSModel* const xsModel,
  +                                    XSSimpleTypeDefinition* const xsST)
  +{
  +    // NOTE: XSMultiValueFacetList is not owned by XSModel!
  +    // NOTE: XSFacetList is not owned by XSModel!
  +    int definedFacets = 0;
  +    int fixedFacets = 0;
  +    XSFacetList* xsFacetList = 0;
  +    XSMultiValueFacetList* xsMultiFacetList = 0;
  +    StringList* patternList = 0;
  +    bool isFixed = false;
  +    int dvFacetsDefined = dv->getFacetsDefined();
  +    int dvFixedFacets = dv->getFixed();
  +
  +    if ((dvFacetsDefined & DatatypeValidator::FACET_PATTERN)
  +        || (dvFacetsDefined & DatatypeValidator::FACET_ENUMERATION))
  +        xsMultiFacetList = new (fMemoryManager) RefVectorOf<XSMultiValueFacet>(2, 
true, fMemoryManager);
  +
  +    if (dvFacetsDefined & DatatypeValidator::FACET_ENUMERATION)
  +    {
  +        RefArrayVectorOf<XMLCh>* enumList = (RefArrayVectorOf<XMLCh>*) 
dv->getEnumString();
  +        isFixed = ((dvFixedFacets & DatatypeValidator::FACET_ENUMERATION) != 0);
  +
  +        // NOTE: Don't need to add multivaluefacet to "ObjectMap -> 
getObjectFromMap/putObjectInMap);
  +        xsMultiFacetList->addElement(
  +            new (fMemoryManager) XSMultiValueFacet(
  +                XSSimpleTypeDefinition::FACET_ENUMERATION , enumList, isFixed
  +                , getAnnotationFromModel(xsModel, enumList)
  +                , xsModel, fMemoryManager)
  +        );
  +        definedFacets |= XSSimpleTypeDefinition::FACET_ENUMERATION;
  +        if (isFixed)
  +            fixedFacets |= XSSimpleTypeDefinition::FACET_ENUMERATION;
  +    }
  +
  +    RefHashTableOf<KVStringPair>* facets = dv->getFacets();
  +    if (facets)
  +    {
  +        xsFacetList = new (fMemoryManager) RefVectorOf<XSFacet>(10, true, 
fMemoryManager);
  +
  +        // NOTE: Don't need to add facet to "ObjectMap -> 
getObjectFromMap/putObjectInMap);
  +        RefHashTableOfEnumerator<KVStringPair> e(facets);
  +        while (e.hasMoreElements())
  +        {
  +            KVStringPair& pair = e.nextElement();
  +            XMLCh* key = pair.getKey();
  +            XSSimpleTypeDefinition::FACET facetType = 
XSSimpleTypeDefinition::FACET_NONE;
  +            XSAnnotation* annot = getAnnotationFromModel(xsModel, &pair);
  +
  +            if (XMLString::equals(key, SchemaSymbols::fgELT_MAXINCLUSIVE))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_MAXINCLUSIVE;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MAXINCLUSIVE) 
!= 0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXEXCLUSIVE))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_MAXEXCLUSIVE;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MAXEXCLUSIVE) 
!=0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_MININCLUSIVE))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_MININCLUSIVE;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MININCLUSIVE) 
!=0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_MINEXCLUSIVE))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_MINEXCLUSIVE;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MINEXCLUSIVE) 
!= 0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_LENGTH))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_LENGTH;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_LENGTH) != 0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_MINLENGTH))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_MINLENGTH;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MINLENGTH) != 
0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_MAXLENGTH))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_MAXLENGTH;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_MAXLENGTH) != 
0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_TOTALDIGITS))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_TOTALDIGITS;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_TOTALDIGITS) 
!= 0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_FRACTIONDIGITS))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_FRACTIONDIGITS;
  +                isFixed = ((dvFixedFacets & 
DatatypeValidator::FACET_FRACTIONDIGITS) != 0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_WHITESPACE))
  +            {
  +                facetType = XSSimpleTypeDefinition::FACET_WHITESPACE;
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_WHITESPACE) != 
0);
  +            }
  +            else if (XMLString::equals(key, SchemaSymbols::fgELT_PATTERN))
  +            {
  +                XMLStringTokenizer tokenizer(dv->getPattern(), &chPipe, 
fMemoryManager);
  +                patternList = new (fMemoryManager) 
RefArrayVectorOf<XMLCh>(tokenizer.countTokens(), true, fMemoryManager);
  +                
  +                while (tokenizer.hasMoreTokens())
  +                    
patternList->addElement(XMLString::replicate(tokenizer.nextToken(), fMemoryManager));
  +
  +                isFixed = ((dvFixedFacets & DatatypeValidator::FACET_PATTERN) != 0);
  +                // NOTE: Don't need to add multivaluefacet to "ObjectMap -> 
getObjectFromMap/putObjectInMap);
  +                xsMultiFacetList->addElement(
  +                    new (fMemoryManager) XSMultiValueFacet(
  +                        XSSimpleTypeDefinition::FACET_PATTERN, patternList
  +                        , isFixed, annot, xsModel, fMemoryManager)
  +                 );
  +                definedFacets |= XSSimpleTypeDefinition::FACET_PATTERN;
  +                if (isFixed) 
  +                    fixedFacets |= XSSimpleTypeDefinition::FACET_PATTERN;
  +                continue;
  +            }
  +            else
  +            {
  +                // REVISIT: hmm... what about XSSimpleTypeDefinition::FACET_NONE
  +                // don't think I need to create an empty Facet?
  +                continue;
  +            }
  +
  +            xsFacetList->addElement(
  +                new (fMemoryManager) XSFacet(
  +                    facetType, pair.getValue(), isFixed, annot, xsModel, 
fMemoryManager)
  +            );
  +
  +            definedFacets |= facetType;
  +            if (isFixed) 
  +                fixedFacets |= facetType;
  +        }
  +    }
  +
  +    xsST->setFacetInfo(definedFacets, fixedFacets, xsFacetList, xsMultiFacetList, 
patternList);
  +}
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.3       +10 -0     xml-xerces/c/src/xercesc/internal/XSObjectFactory.hpp
  
  Index: XSObjectFactory.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSObjectFactory.hpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XSObjectFactory.hpp       23 Nov 2003 16:21:40 -0000      1.2
  +++ XSObjectFactory.hpp       24 Nov 2003 15:45:36 -0000      1.3
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.3  2003/11/24 15:45:36  knoaman
  + * PSVI: finish construction of XSSimpleTypeDefinition
  + *
    * Revision 1.2  2003/11/23 16:21:40  knoaman
    * PSVI: create local elements of complex types
    *
  @@ -240,6 +243,13 @@
       (
           void* key
           , XSModel* const xsModel
  +    );
  +
  +    void processFacets
  +    (
  +        DatatypeValidator* const dv
  +        , XSModel* const xsModel
  +        , XSSimpleTypeDefinition* const xsST
       );
   
       // make XSModel our friend
  
  
  
  1.20      +2 -2      
xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidator.hpp
  
  Index: DatatypeValidator.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidator.hpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- DatatypeValidator.hpp     12 Nov 2003 20:32:03 -0000      1.19
  +++ DatatypeValidator.hpp     24 Nov 2003 15:45:36 -0000      1.20
  @@ -400,7 +400,7 @@
   
   
        friend class DatatypeValidatorFactory;
  -    friend class XSSimpleTypeDefinition;
  +    friend class XSObjectFactory;
   
       /**
         * facetDefined
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to