knoaman     2003/12/17 12:50:36

  Modified:    c/src/xercesc/framework/psvi XSAttributeUse.cpp
                        XSAttributeUse.hpp
               c/src/xercesc/internal XSObjectFactory.cpp
                        XSObjectFactory.hpp
               c/src/xercesc/validators/schema SchemaAttDef.cpp
                        SchemaAttDef.hpp TraverseSchema.cpp
                        XercesAttGroupInfo.hpp
  Log:
  PSVI: fix for annotation of attributes in attributeGroup/derived types
  
  Revision  Changes    Path
  1.6       +13 -15    xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.cpp
  
  Index: XSAttributeUse.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.cpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XSAttributeUse.cpp        21 Nov 2003 17:19:30 -0000      1.5
  +++ XSAttributeUse.cpp        17 Dec 2003 20:50:34 -0000      1.6
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.6  2003/12/17 20:50:34  knoaman
  + * PSVI: fix for annotation of attributes in attributeGroup/derived types
  + *
    * Revision 1.5  2003/11/21 17:19:30  knoaman
    * PSVI update.
    *
  @@ -77,7 +80,6 @@
    */
   
   #include <xercesc/framework/psvi/XSAttributeUse.hpp>
  -#include <xercesc/framework/psvi/XSAttributeDeclaration.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -88,6 +90,9 @@
                                  XSModel* const xsModel,
                                  MemoryManager* const manager)
       : XSObject(XSConstants::ATTRIBUTE_USE, xsModel, manager)
  +    , fRequired(false)
  +    , fConstraintType(XSConstants::VC_NONE)
  +    , fConstraintValue(0)
       , fXSAttributeDeclaration(xsAttDecl)
   {
   }
  @@ -97,25 +102,18 @@
   {
       // don't delete fXSAttributeDeclaration - deleted by XSModel
   }
  -// XSAttributeUse methods
   
   
   // ---------------------------------------------------------------------------
  -//  XSAttributeUse: access methods
  +//  XSAttributeUse: helper methods
   // ---------------------------------------------------------------------------
  -bool XSAttributeUse::getRequired() const
  -{
  -    return fXSAttributeDeclaration->getRequired();
  -}
  -
  -XSConstants::VALUE_CONSTRAINT XSAttributeUse::getConstraintType() const
  -{
  -    return fXSAttributeDeclaration->getConstraintType();
  -}
  -
  -const XMLCh *XSAttributeUse::getConstraintValue()
  +void XSAttributeUse::set(const bool isRequired,
  +                         XSConstants::VALUE_CONSTRAINT constraintType,
  +                         const XMLCh* const constraintValue)
   {
  -    return fXSAttributeDeclaration->getConstraintValue();
  +    fRequired = isRequired;
  +    fConstraintType = constraintType;
  +    fConstraintValue = constraintValue;
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.6       +31 -1     xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.hpp
  
  Index: XSAttributeUse.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAttributeUse.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XSAttributeUse.hpp        21 Nov 2003 17:19:30 -0000      1.5
  +++ XSAttributeUse.hpp        17 Dec 2003 20:50:34 -0000      1.6
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.6  2003/12/17 20:50:34  knoaman
  + * PSVI: fix for annotation of attributes in attributeGroup/derived types
  + *
    * Revision 1.5  2003/11/21 17:19:30  knoaman
    * PSVI update.
    *
  @@ -160,6 +163,16 @@
   
   private:
   
  +    // set data
  +    void set
  +    (
  +        const bool isRequired
  +        , XSConstants::VALUE_CONSTRAINT constraintType
  +        , const XMLCh* const constraintValue
  +    );
  +
  +    friend class XSObjectFactory;
  +    
       // -----------------------------------------------------------------------
       //  Unimplemented constructors and operators
       // -----------------------------------------------------------------------
  @@ -171,7 +184,10 @@
       // -----------------------------------------------------------------------
       //  data members
       // -----------------------------------------------------------------------
  -    XSAttributeDeclaration* fXSAttributeDeclaration;
  +    bool                          fRequired;
  +    XSConstants::VALUE_CONSTRAINT fConstraintType;   
  +    const XMLCh*                  fConstraintValue;
  +    XSAttributeDeclaration*       fXSAttributeDeclaration;
   };
   
   inline XSAttributeDeclaration *XSAttributeUse::getAttrDeclaration() const
  @@ -179,6 +195,20 @@
       return fXSAttributeDeclaration;
   }
   
  +inline bool XSAttributeUse::getRequired() const
  +{
  +    return fRequired;
  +}
  +
  +inline XSConstants::VALUE_CONSTRAINT XSAttributeUse::getConstraintType() const
  +{
  +    return fConstraintType;
  +}
  +
  +const inline XMLCh *XSAttributeUse::getConstraintValue()
  +{
  +    return fConstraintValue;
  +}
   
   XERCES_CPP_NAMESPACE_END
   
  
  
  
  1.12      +49 -4     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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XSObjectFactory.cpp       17 Dec 2003 19:58:25 -0000      1.11
  +++ XSObjectFactory.cpp       17 Dec 2003 20:50:35 -0000      1.12
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.12  2003/12/17 20:50:35  knoaman
  + * PSVI: fix for annotation of attributes in attributeGroup/derived types
  + *
    * Revision 1.11  2003/12/17 19:58:25  knoaman
    * Check for NULL when building XSParticle
    *
  @@ -580,10 +583,17 @@
               SchemaAttDefList& attDefList = (SchemaAttDefList&) 
typeInfo->getAttDefList();
               for(unsigned int i=0; i<attCount; i++)
               {
  +                XSAttributeDeclaration* xsAttDecl = 0;
                   SchemaAttDef& attDef = (SchemaAttDef&) attDefList.getAttDef(i);
  -                XSAttributeDeclaration* xsAttDecl = addOrFind(&attDef, xsModel);
  +
  +                if (attDef.getBaseAttDecl())
  +                    xsAttDecl = addOrFind(attDef.getBaseAttDecl(), xsModel);
  +                else
  +                    xsAttDecl = addOrFind(&attDef, xsModel);
  +
                   XSAttributeUse* attUse = createXSAttributeUse(xsAttDecl, xsModel);
                   xsAttList->addElement(attUse);
  +                processAttUse(&attDef, attUse);
               }
           }
   
  @@ -678,10 +688,14 @@
   XSObjectFactory::createXSWildcard(SchemaAttDef* const attDef,
                                     XSModel* const xsModel)
   {
  +    XSAnnotation* annot = (attDef->getBaseAttDecl())
  +        ? getAnnotationFromModel(xsModel, attDef->getBaseAttDecl())
  +        : getAnnotationFromModel(xsModel, attDef);
  +
       XSWildcard* xsWildcard = new (fMemoryManager) XSWildcard
       (
           attDef
  -        , getAnnotationFromModel(xsModel, attDef)
  +        , annot
           , xsModel
           , fMemoryManager
       );
  @@ -750,11 +764,19 @@
           xsAttList = new (fMemoryManager) RefVectorOf<XSAttributeUse>(attCount, 
false, fMemoryManager);
           for (unsigned int i=0; i < attCount; i++) 
           {
  -            XSAttributeDeclaration* xsAttDecl = 
addOrFind(attGroupInfo->attributeAt(i), xsModel);
  +            SchemaAttDef* attDef = attGroupInfo->attributeAt(i);
  +            XSAttributeDeclaration* xsAttDecl = 0;
  +
  +            if (attDef->getBaseAttDecl())
  +                xsAttDecl = addOrFind(attDef->getBaseAttDecl(), xsModel);
  +            else
  +                xsAttDecl = addOrFind(attDef, xsModel);
  +
               if (xsAttDecl) // just for sanity
               {
  -                             XSAttributeUse* attUse = 
createXSAttributeUse(xsAttDecl, xsModel);
  +                XSAttributeUse* attUse = createXSAttributeUse(xsAttDecl, xsModel);
                   xsAttList->addElement(attUse);
  +                processAttUse(attDef, attUse);
               }
           }
       }
  @@ -951,6 +973,29 @@
       }
   
       xsST->setFacetInfo(definedFacets, fixedFacets, xsFacetList, xsMultiFacetList, 
patternList);
  +}
  +
  +void XSObjectFactory::processAttUse(SchemaAttDef* const attDef,
  +                                    XSAttributeUse* const xsAttUse)
  +{
  +    bool isRequired = false;
  +    XSConstants::VALUE_CONSTRAINT constraintType = XSConstants::VC_NONE;
  +    
  +    if (attDef->getDefaultType() & XMLAttDef::Default)
  +    {
  +        constraintType = XSConstants::VC_DEFAULT;
  +    }
  +    else if (attDef->getDefaultType() & XMLAttDef::Fixed ||
  +             attDef->getDefaultType() & XMLAttDef::Required_And_Fixed)
  +    {
  +        constraintType = XSConstants::VC_FIXED;
  +    }
  +
  +    if (attDef->getDefaultType() == XMLAttDef::Required ||
  +        attDef->getDefaultType() == XMLAttDef::Required_And_Fixed)
  +        isRequired = true;
  +
  +    xsAttUse->set(isRequired, constraintType, attDef->getValue());
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.5       +9 -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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XSObjectFactory.hpp       25 Nov 2003 18:11:54 -0000      1.4
  +++ XSObjectFactory.hpp       17 Dec 2003 20:50:35 -0000      1.5
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.5  2003/12/17 20:50:35  knoaman
  + * PSVI: fix for annotation of attributes in attributeGroup/derived types
  + *
    * Revision 1.4  2003/11/25 18:11:54  knoaman
    * Make XSObjectFactory inherit from XMemory. Thanks to David Cargill.
    *
  @@ -253,6 +256,12 @@
           DatatypeValidator* const dv
           , XSModel* const xsModel
           , XSSimpleTypeDefinition* const xsST
  +    );
  +
  +    void processAttUse
  +    (
  +        SchemaAttDef* const attDef
  +        , XSAttributeUse* const xsAttUse
       );
   
       // make XSModel our friend
  
  
  
  1.11      +9 -0      xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.cpp
  
  Index: SchemaAttDef.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- SchemaAttDef.cpp  25 Nov 2003 18:15:00 -0000      1.10
  +++ SchemaAttDef.cpp  17 Dec 2003 20:50:35 -0000      1.11
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.11  2003/12/17 20:50:35  knoaman
  + * PSVI: fix for annotation of attributes in attributeGroup/derived types
  + *
    * Revision 1.10  2003/11/25 18:15:00  knoaman
    * Serialize enclosing complex type. Thanks to David Cargill.
    *
  @@ -135,6 +138,7 @@
       , fValidity(PSVIDefs::UNKNOWN)
       , fValidation(PSVIDefs::NONE)
       , fEnclosingCT(0)
  +    , fBaseAttDecl(0)
   {
   }
   
  @@ -153,6 +157,7 @@
       , fValidity(PSVIDefs::UNKNOWN)
       , fValidation(PSVIDefs::NONE)
       , fEnclosingCT(0)
  +    , fBaseAttDecl(0)
   {
       fAttName = new (manager) QName(prefix, localPart, uriId, manager);
   }
  @@ -175,6 +180,7 @@
       , fValidity(PSVIDefs::UNKNOWN)
       , fValidation(PSVIDefs::NONE)
       , fEnclosingCT(0)
  +    , fBaseAttDecl(0)
   {
       fAttName = new (manager) QName(prefix, localPart, uriId, manager);
   }
  @@ -193,6 +199,7 @@
       , fValidity(other->fValidity)
       , fValidation(other->fValidation)
       , fEnclosingCT(other->fEnclosingCT)
  +    , fBaseAttDecl(other->fBaseAttDecl)
   {
       QName* otherName = other->getAttName();
       fAttName = new (getMemoryManager()) QName(otherName->getPrefix(),
  @@ -248,6 +255,7 @@
           serEng<<(int)fValidity;
           serEng<<(int)fValidation;
           serEng<<fEnclosingCT;
  +        serEng<<fBaseAttDecl;
       }
       else
       {
  @@ -271,6 +279,7 @@
           fValidation = (PSVIDefs::Validation)i;
           
           serEng>>fEnclosingCT;
  +        serEng>>fBaseAttDecl;
       }
   }
   
  
  
  
  1.10      +31 -1     xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.hpp
  
  Index: SchemaAttDef.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaAttDef.hpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SchemaAttDef.hpp  24 Nov 2003 05:13:41 -0000      1.9
  +++ SchemaAttDef.hpp  17 Dec 2003 20:50:35 -0000      1.10
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.10  2003/12/17 20:50:35  knoaman
  + * PSVI: fix for annotation of attributes in attributeGroup/derived types
  + *
    * Revision 1.9  2003/11/24 05:13:41  neilg
    * update method documentation
    *
  @@ -262,6 +265,8 @@
       DatatypeValidator* getDatatypeValidator() const;
       ValueVectorOf<unsigned int>* getNamespaceList() const;
       ComplexTypeInfo* getEnclosingCT() const;
  +    const SchemaAttDef* getBaseAttDecl() const;
  +    SchemaAttDef* getBaseAttDecl();
   
       // -----------------------------------------------------------------------
       //  Setter methods
  @@ -275,6 +280,8 @@
       );
       void setDatatypeValidator(DatatypeValidator* newDatatypeValidator);
       void setAnyDatatypeValidator(DatatypeValidator* newDatatypeValidator);
  +    void setBaseAttDecl(SchemaAttDef* const attDef);
  +
       /*
        * @deprecated
        */
  @@ -327,6 +334,13 @@
       //  fValidation
       //      The type of validation that happened to this attr
       //
  +    //  fBaseAttDecl
  +    //      The base attribute declaration that this attribute is based on
  +    //      NOTE: we do not have a notion of attribute use, so in the case
  +    //      of ref'd attributes and inherited attributes, we make a copy
  +    //      of the actual attribute declaration. The fBaseAttDecl stores that
  +    //      declaration, and will be helpful when we build the XSModel (i.e
  +    //      easy access the XSAnnotation object).
       // -----------------------------------------------------------------------
       unsigned int                 fElemId;
       QName*                       fAttName;
  @@ -337,6 +351,7 @@
       PSVIDefs::Validity           fValidity;
       PSVIDefs::Validation         fValidation;
       ComplexTypeInfo*             fEnclosingCT;
  +    SchemaAttDef*                fBaseAttDecl;
   };
   
   
  @@ -474,6 +489,16 @@
       return fEnclosingCT;
   }
   
  +inline SchemaAttDef* SchemaAttDef::getBaseAttDecl()
  +{
  +    return fBaseAttDecl;
  +}
  +
  +inline const SchemaAttDef* SchemaAttDef::getBaseAttDecl() const
  +{
  +    return fBaseAttDecl;
  +}
  +
   // ---------------------------------------------------------------------------
   //  SchemaAttDef: Setter methods
   // ---------------------------------------------------------------------------
  @@ -534,6 +559,11 @@
   inline void SchemaAttDef::setEnclosingCT(ComplexTypeInfo* complexTypeInfo)
   {
       fEnclosingCT = complexTypeInfo;
  +}
  +
  +inline void SchemaAttDef::setBaseAttDecl(SchemaAttDef* const attDef)
  +{
  +    fBaseAttDecl = attDef;
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.102     +13 -2     xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
  
  Index: TraverseSchema.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
  retrieving revision 1.101
  retrieving revision 1.102
  diff -u -r1.101 -r1.102
  --- TraverseSchema.cpp        17 Dec 2003 00:18:40 -0000      1.101
  +++ TraverseSchema.cpp        17 Dec 2003 20:50:35 -0000      1.102
  @@ -5543,6 +5543,8 @@
                                               refAttDefType,
                                               0, fGrammarPoolMemoryManager);
   
  +    attDef->setBaseAttDecl(refAttDef);
  +
       if (refAttDefType == XMLAttDef::Fixed) {
           if (required && !invalidAttUse) {
               attDef->setDefaultType(XMLAttDef::Required_And_Fixed);
  @@ -6399,6 +6401,11 @@
   
                   newAttDef->setDatatypeValidator(attDef.getDatatypeValidator());
                   typeInfo->addAttDef(newAttDef);
  +
  +                if (attDef.getBaseAttDecl())
  +                    newAttDef->setBaseAttDecl(attDef.getBaseAttDecl());
  +                else
  +                    newAttDef->setBaseAttDecl(&attDef);
               }
           }
       }
  @@ -7069,7 +7076,11 @@
                   typeInfo->setAttWithTypeId(true);
               }
   
  -            typeInfo->addAttDef(new (fGrammarPoolMemoryManager) 
SchemaAttDef(attDef));
  +            SchemaAttDef* clonedAttDef = new (fGrammarPoolMemoryManager) 
SchemaAttDef(attDef);
  +            typeInfo->addAttDef(clonedAttDef);
  +
  +            if (!clonedAttDef->getBaseAttDecl())
  +                clonedAttDef->setBaseAttDecl(attDef);
   
               if (toAttGroup) {
                   toAttGroup->addAttDef(attDef, true);
  
  
  
  1.8       +13 -3     
xml-xerces/c/src/xercesc/validators/schema/XercesAttGroupInfo.hpp
  
  Index: XercesAttGroupInfo.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/validators/schema/XercesAttGroupInfo.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XercesAttGroupInfo.hpp    20 Nov 2003 17:06:05 -0000      1.7
  +++ XercesAttGroupInfo.hpp    17 Dec 2003 20:50:35 -0000      1.8
  @@ -244,7 +244,12 @@
       }
   
       if (toClone) {
  -        fAttributes->addElement(new (fMemoryManager) SchemaAttDef(toAdd));
  +        SchemaAttDef* clonedAttDef = new (fMemoryManager) SchemaAttDef(toAdd);
  +
  +        if (!clonedAttDef->getBaseAttDecl())
  +            clonedAttDef->setBaseAttDecl(toAdd);
  +
  +        fAttributes->addElement(clonedAttDef);
       }
       else {
           fAttributes->addElement(toAdd);
  @@ -259,7 +264,12 @@
       }
   
       if (toClone) {
  -        fAnyAttributes->addElement(new (fMemoryManager) SchemaAttDef(toAdd));
  +        SchemaAttDef* clonedAttDef = new (fMemoryManager) SchemaAttDef(toAdd);
  +
  +        if (!clonedAttDef->getBaseAttDecl())
  +            clonedAttDef->setBaseAttDecl(toAdd);
  +
  +        fAnyAttributes->addElement(clonedAttDef);
       }
       else {
           fAnyAttributes->addElement(toAdd);
  
  
  

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

Reply via email to