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]