00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #if !defined(XSCOMPLEXTYPEDEFINITION_HPP)
00022 #define XSCOMPLEXTYPEDEFINITION_HPP
00023 
00024 #include <xercesc/framework/psvi/XSTypeDefinition.hpp>
00025 
00026 XERCES_CPP_NAMESPACE_BEGIN
00027 
00036 
00037 class XSAnnotation;
00038 class XSAttributeUse;
00039 class XSSimpleTypeDefinition;
00040 class XSParticle;
00041 class XSWildcard;
00042 class ComplexTypeInfo;
00043 
00044 class  XSComplexTypeDefinition : public XSTypeDefinition
00045 {
00046 public:
00047 
00048     
00049     enum CONTENT_TYPE {
00055          CONTENTTYPE_EMPTY         = 0,
00060          CONTENTTYPE_SIMPLE        = 1,
00066          CONTENTTYPE_ELEMENT       = 2,
00070          CONTENTTYPE_MIXED         = 3
00071     };
00072 
00073     
00074     
00077 
00091     XSComplexTypeDefinition
00092     (
00093         ComplexTypeInfo* const          complexTypeInfo
00094         , XSWildcard* const             xsWildcard
00095         , XSSimpleTypeDefinition* const xsSimpleType
00096         , XSAttributeUseList* const     xsAttList
00097         , XSTypeDefinition* const       xsBaseType
00098         , XSParticle* const             xsParticle
00099         , XSAnnotation* const           headAnnot
00100         , XSModel* const                xsModel
00101         , MemoryManager* const          manager = XMLPlatformUtils::fgMemoryManager
00102     );
00103 
00105 
00108     ~XSComplexTypeDefinition();
00110 
00111     
00115 
00121     XSConstants::DERIVATION_TYPE getDerivationMethod() const;
00122 
00128     bool getAbstract() const;
00129 
00133     XSAttributeUseList *getAttributeUses();
00134 
00138     XSWildcard *getAttributeWildcard() const;
00139 
00146     CONTENT_TYPE getContentType() const;
00147 
00152     XSSimpleTypeDefinition *getSimpleType() const;
00153 
00158     XSParticle *getParticle() const;
00159 
00167     bool isProhibitedSubstitution(XSConstants::DERIVATION_TYPE toTest);
00168 
00174     short getProhibitedSubstitutions() const;
00175 
00179     XSAnnotationList *getAnnotations();
00180     
00185     const XMLCh* getName();
00186 
00191     const XMLCh* getNamespace();
00192 
00198     XSNamespaceItem *getNamespaceItem();
00199 
00204     bool getAnonymous() const;
00205 
00210     XSTypeDefinition *getBaseType();
00211 
00219     bool derivedFromType(const XSTypeDefinition* const ancestorType);
00220 
00222 
00223     
00227 
00228 
00230 
00231 private:
00232 
00236     void setBaseType(XSTypeDefinition* const xsBaseType);
00237     friend class XSObjectFactory;
00238 
00239     
00240     
00241     
00242     XSComplexTypeDefinition(const XSComplexTypeDefinition&);
00243     XSComplexTypeDefinition & operator=(const XSComplexTypeDefinition &);
00244 
00245 protected:
00246 
00247     
00248     
00249     
00250     ComplexTypeInfo*        fComplexTypeInfo;
00251     XSWildcard*             fXSWildcard;
00252     XSAttributeUseList*     fXSAttributeUseList;
00253     XSSimpleTypeDefinition* fXSSimpleTypeDefinition;
00254     XSAnnotationList*       fXSAnnotationList;
00255     XSParticle*             fParticle;
00256     short                   fProhibitedSubstitution;
00257 };
00258 
00259 
00260 inline XSAttributeUseList* XSComplexTypeDefinition::getAttributeUses()
00261 {
00262     return fXSAttributeUseList;
00263 }
00264 
00265 inline XSWildcard* XSComplexTypeDefinition::getAttributeWildcard() const
00266 {
00267     return fXSWildcard;
00268 }
00269 
00270 inline XSSimpleTypeDefinition* XSComplexTypeDefinition::getSimpleType() const
00271 {
00272     return fXSSimpleTypeDefinition;
00273 }
00274 
00275 inline short XSComplexTypeDefinition::getProhibitedSubstitutions() const
00276 {
00277     return fProhibitedSubstitution;
00278 }
00279 
00280 inline XSParticle *XSComplexTypeDefinition::getParticle() const
00281 {
00282     return fParticle;
00283 }
00284 
00285 inline void
00286 XSComplexTypeDefinition::setBaseType(XSTypeDefinition* const xsBaseType)
00287 {
00288     fBaseType = xsBaseType;
00289 }
00290 
00291 XERCES_CPP_NAMESPACE_END
00292 
00293 #endif