gareth 2003/02/06 05:51:55 Modified: c/src/xercesc/internal IGXMLScanner2.cpp SGXMLScanner.cpp c/src/xercesc/validators/datatype UnionDatatypeValidator.cpp UnionDatatypeValidator.hpp c/src/xercesc/validators/schema SchemaAttDef.cpp SchemaAttDef.hpp SchemaValidator.cpp Log: fixed bug with multiple attributes being validated by the same union type. Revision Changes Path 1.14 +6 -4 xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp Index: IGXMLScanner2.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- IGXMLScanner2.cpp 5 Feb 2003 17:08:42 -0000 1.13 +++ IGXMLScanner2.cpp 6 Feb 2003 13:51:54 -0000 1.14 @@ -384,11 +384,13 @@ // Save the type for later use attType = attDefForWildCard->getType(); - - - if(fGrammarType == Grammar::SchemaGrammarType) + if(fGrammarType == Grammar::SchemaGrammarType) { ((SchemaElementDecl *)(elemDecl))->updateValidityFromAttribute((SchemaAttDef *)attDef); + DatatypeValidator* tempDV = ((SchemaAttDef*) attDefForWildCard)->getDatatypeValidator(); + if(tempDV && tempDV->getType() == DatatypeValidator::Union) + ((SchemaAttDef*)attDef)->setMembertypeValidator(((UnionDatatypeValidator *)tempDV)->getMemberTypeValidator()); + } } else { normalizeAttValue 1.18 +4 -2 xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp Index: SGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- SGXMLScanner.cpp 5 Feb 2003 17:08:42 -0000 1.17 +++ SGXMLScanner.cpp 6 Feb 2003 13:51:54 -0000 1.18 @@ -2190,12 +2190,14 @@ , elemDecl ); } - // Save the type for later use attType = attDefForWildCard->getType(); ((SchemaElementDecl *)(elemDecl))->updateValidityFromAttribute((SchemaAttDef *)attDef); + DatatypeValidator* tempDV = ((SchemaAttDef*) attDefForWildCard)->getDatatypeValidator(); + if(tempDV && tempDV->getType() == DatatypeValidator::Union) + ((SchemaAttDef*)attDef)->setMembertypeValidator(((UnionDatatypeValidator *)tempDV)->getMemberTypeValidator()); } else { normalizeAttValue 1.8 +5 -2 xml-xerces/c/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp Index: UnionDatatypeValidator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- UnionDatatypeValidator.cpp 29 Jan 2003 19:53:35 -0000 1.7 +++ UnionDatatypeValidator.cpp 6 Feb 2003 13:51:55 -0000 1.8 @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.8 2003/02/06 13:51:55 gareth + * fixed bug with multiple attributes being validated by the same union type. + * * Revision 1.7 2003/01/29 19:53:35 gareth * we now store information about which validator was used to validate. * @@ -310,7 +313,7 @@ fMemberTypeValidators->elementAt(i)->validate(content); memTypeValid = true; - //set the name of the type actually used to validate the content + //set the validator of the type actually used to validate the content DatatypeValidator *dtv = fMemberTypeValidators->elementAt(i); fValidatedDatatype = dtv; } 1.8 +15 -1 xml-xerces/c/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp Index: UnionDatatypeValidator.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- UnionDatatypeValidator.hpp 29 Jan 2003 19:55:19 -0000 1.7 +++ UnionDatatypeValidator.hpp 6 Feb 2003 13:51:55 -0000 1.8 @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.8 2003/02/06 13:51:55 gareth + * fixed bug with multiple attributes being validated by the same union type. + * * Revision 1.7 2003/01/29 19:55:19 gareth * updated to deal with null pointer issue with fValidatedDatatype. * @@ -241,6 +244,13 @@ */ bool getMemberTypeAnonymous() const; + + /** + * Returns the member DatatypeValidator used to validate the content the last time validate + * was called + */ + const DatatypeValidator* getMemberTypeValidator() const; + /** * Called inbetween uses of this validator to reset PSVI information */ @@ -396,6 +406,10 @@ return fValidatedDatatype->getAnonymous(); } return 0; +} + +inline const DatatypeValidator* UnionDatatypeValidator::getMemberTypeValidator() const { + return fValidatedDatatype; } inline void UnionDatatypeValidator::reset() { 1.4 +7 -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.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SchemaAttDef.cpp 29 Jan 2003 19:47:16 -0000 1.3 +++ SchemaAttDef.cpp 6 Feb 2003 13:51:55 -0000 1.4 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/02/06 13:51:55 gareth + * fixed bug with multiple attributes being validated by the same union type. + * * Revision 1.3 2003/01/29 19:47:16 gareth * added DOMTypeInfo and some PSVI methods * @@ -104,6 +107,7 @@ , fAttName(0) , fDatatypeValidator(0) , fAnyDatatypeValidator(0) + , fMemberTypeValidator(0) , fNamespaceList(0) , fValidity(PSVIDefs::UNKNOWN) , fValidation(PSVIDefs::NONE) @@ -118,6 +122,7 @@ XMLAttDef(type, defType) , fElemId(XMLElementDecl::fgInvalidElemId) , fDatatypeValidator(0) + , fMemberTypeValidator(0) , fAnyDatatypeValidator(0) , fNamespaceList(0) , fValidity(PSVIDefs::UNKNOWN) @@ -138,6 +143,7 @@ , fElemId(XMLElementDecl::fgInvalidElemId) , fDatatypeValidator(0) , fAnyDatatypeValidator(0) + , fMemberTypeValidator(0) , fNamespaceList(0) , fValidity(PSVIDefs::UNKNOWN) , fValidation(PSVIDefs::NONE) @@ -153,6 +159,7 @@ , fAttName(0) , fDatatypeValidator(other->fDatatypeValidator) , fAnyDatatypeValidator(other->fAnyDatatypeValidator) + , fMemberTypeValidator(other->fMemberTypeValidator) , fNamespaceList(0) , fValidity(other->fValidity) , fValidation(other->fValidation) 1.4 +26 -21 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.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SchemaAttDef.hpp 29 Jan 2003 19:47:16 -0000 1.3 +++ SchemaAttDef.hpp 6 Feb 2003 13:51:55 -0000 1.4 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/02/06 13:51:55 gareth + * fixed bug with multiple attributes being validated by the same union type. + * * Revision 1.3 2003/01/29 19:47:16 gareth * added DOMTypeInfo and some PSVI methods * @@ -93,7 +96,6 @@ #include <xercesc/validators/datatype/DatatypeValidator.hpp> #include <xercesc/validators/datatype/UnionDatatypeValidator.hpp> #include <xercesc/validators/schema/PSVIDefs.hpp> - XERCES_CPP_NAMESPACE_BEGIN class DatatypeValidator; @@ -236,6 +238,7 @@ ); void setDatatypeValidator(DatatypeValidator* newDatatypeValidator); void setAnyDatatypeValidator(DatatypeValidator* newDatatypeValidator); + void setMembertypeValidator(const DatatypeValidator* newDatatypeValidator); void setNamespaceList(const ValueVectorOf<unsigned int>* const toSet); void resetNamespaceList(); void setValidity(PSVIDefs::Validity valid); @@ -257,9 +260,13 @@ // fDatatypeValidator // The DatatypeValidator used to validate this attribute type. // - // fAnyDatatypeValidator + // fAnyDatatypeValidator // Tempory storage for the DatatypeValidator used to validate an any // + // fMemberTypeValidator + // Tempory storage used when the validator being used is of union type. + // This stores the actual member validator used to validate. + // // fNamespaceList // The list of namespace values for a wildcard attribute // @@ -274,6 +281,7 @@ QName* fAttName; DatatypeValidator* fDatatypeValidator; DatatypeValidator* fAnyDatatypeValidator; + const DatatypeValidator* fMemberTypeValidator; ValueVectorOf<unsigned int>* fNamespaceList; PSVIDefs::Validity fValidity; PSVIDefs::Validation fValidation; @@ -341,18 +349,14 @@ inline const XMLCh* SchemaAttDef::getMemberTypeName() const { - if(fAnyDatatypeValidator && fAnyDatatypeValidator->getType() == DatatypeValidator::Union) - return ((UnionDatatypeValidator*)fAnyDatatypeValidator)->getMemberTypeName(); - else if(fDatatypeValidator && fDatatypeValidator->getType() == DatatypeValidator::Union) - return ((UnionDatatypeValidator*)fDatatypeValidator)->getMemberTypeName(); + if(fMemberTypeValidator) + return fMemberTypeValidator->getTypeLocalName(); return 0; } inline const XMLCh* SchemaAttDef::getMemberTypeUri() const { - if(fAnyDatatypeValidator && fAnyDatatypeValidator->getType() == DatatypeValidator::Union) - return ((UnionDatatypeValidator*)fAnyDatatypeValidator)->getMemberTypeUri(); - else if(fDatatypeValidator && fDatatypeValidator->getType() == DatatypeValidator::Union) - return ((UnionDatatypeValidator*)fDatatypeValidator)->getMemberTypeUri(); + if(fMemberTypeValidator) + return fMemberTypeValidator->getTypeUri(); return 0; } @@ -369,11 +373,9 @@ return SchemaSymbols::fgDT_ANYSIMPLETYPE; if(getTypeAnonymous() || getMemberTypeAnonymous()) return 0; - - if(fDatatypeValidator && fDatatypeValidator->getType() == DatatypeValidator::Union || - fAnyDatatypeValidator && fAnyDatatypeValidator->getType() == DatatypeValidator::Union) { + if(fMemberTypeValidator) return getMemberTypeName(); - } + return getTypeName(); } @@ -382,8 +384,7 @@ return SchemaSymbols::fgURI_SCHEMAFORSCHEMA; if(getTypeAnonymous() || getMemberTypeAnonymous()) return 0; - if(fDatatypeValidator && fDatatypeValidator->getType() == DatatypeValidator::Union || - fAnyDatatypeValidator && fAnyDatatypeValidator->getType() == DatatypeValidator::Union) + if(fMemberTypeValidator) return getMemberTypeUri(); return getTypeUri(); } @@ -398,10 +399,9 @@ } inline bool SchemaAttDef::getMemberTypeAnonymous() const { - if(fAnyDatatypeValidator && fAnyDatatypeValidator->getType() == DatatypeValidator::Union) - return ((UnionDatatypeValidator*)fAnyDatatypeValidator)->getMemberTypeAnonymous(); - else if(fDatatypeValidator && fDatatypeValidator->getType() == DatatypeValidator::Union) - return ((UnionDatatypeValidator*)fDatatypeValidator)->getMemberTypeAnonymous(); + if(fMemberTypeValidator) + return fMemberTypeValidator->getAnonymous(); + return false; } @@ -436,6 +436,11 @@ fAnyDatatypeValidator = newDatatypeValidator; } +inline void SchemaAttDef::setMembertypeValidator(const DatatypeValidator* newDatatypeValidator) +{ + fMemberTypeValidator = newDatatypeValidator; +} + inline void SchemaAttDef::resetNamespaceList() { if (fNamespaceList && fNamespaceList->size()) { @@ -464,8 +469,8 @@ ((UnionDatatypeValidator *)fAnyDatatypeValidator)->reset(); else if(fDatatypeValidator && fDatatypeValidator->getType() == DatatypeValidator::Union) ((UnionDatatypeValidator *)fDatatypeValidator)->reset(); - fAnyDatatypeValidator = 0; + fMemberTypeValidator = 0; fValidity = PSVIDefs::UNKNOWN; fValidation = PSVIDefs::NONE; } 1.28 +7 -3 xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp Index: SchemaValidator.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- SchemaValidator.cpp 29 Jan 2003 20:01:20 -0000 1.27 +++ SchemaValidator.cpp 6 Feb 2003 13:51:55 -0000 1.28 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.28 2003/02/06 13:51:55 gareth + * fixed bug with multiple attributes being validated by the same union type. + * * Revision 1.27 2003/01/29 20:01:20 gareth * We now detect when elements/attributes are validated and the result of the validation is stored. * @@ -731,16 +734,17 @@ catch (...) { emitError(XMLValid::GenericError); ((SchemaElementDecl *)(elemDecl))->setValidity(PSVIDefs::INVALID); - ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::INVALID); + ((SchemaAttDef *)attDef)->setValidity(PSVIDefs::INVALID); throw; } } if(!valid) { ((SchemaElementDecl *)(elemDecl))->setValidity(PSVIDefs::INVALID); - ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::INVALID); + ((SchemaAttDef *)attDef)->setValidity(PSVIDefs::INVALID); } - + else if(attDefDV && attDefDV->getType() == DatatypeValidator::Union) + ((SchemaAttDef *)attDef)->setMembertypeValidator(((UnionDatatypeValidator *)attDefDV)->getMemberTypeValidator()); fTrailing = false;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]