00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 #if !defined(XSMODEL_HPP)
00022 #define XSMODEL_HPP
00023 
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 #include <xercesc/framework/psvi/XSObject.hpp>
00026 #include <xercesc/framework/psvi/XSNamedMap.hpp>
00027 
00028 #include <xercesc/util/ValueVectorOf.hpp>
00029 #include <xercesc/validators/schema/SchemaElementDecl.hpp>
00030 
00031 XERCES_CPP_NAMESPACE_BEGIN
00032 
00045 
00046 class Grammar;
00047 class XMLGrammarPool;
00048 class XSAnnotation;
00049 class XSAttributeDeclaration;
00050 class XSAttributeGroupDefinition;
00051 class XSElementDeclaration;
00052 class XSModelGroupDefinition;
00053 class XSNamespaceItem;
00054 class XSNotationDeclaration;
00055 class XSTypeDefinition;
00056 class XSObjectFactory;
00057 
00058 class  XSModel : public XMemory
00059 {
00060 public:
00061 
00062     
00063     
00066 
00072     XSModel( XMLGrammarPool *grammarPool
00073                 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
00074 
00084     XSModel( XSModel *baseModel
00085                 , GrammarResolver *grammarResolver
00086                 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
00087 
00089 
00092     ~XSModel();
00094 
00095     
00099 
00106     StringList *getNamespaces();
00107 
00116     XSNamespaceItemList *getNamespaceItems();
00117 
00128     XSNamedMap<XSObject> *getComponents(XSConstants::COMPONENT_TYPE objectType);
00129 
00142     XSNamedMap<XSObject> *getComponentsByNamespace(XSConstants::COMPONENT_TYPE objectType, 
00143                                                const XMLCh *compNamespace);
00144 
00148     XSAnnotationList *getAnnotations();
00149 
00157     XSElementDeclaration *getElementDeclaration(const XMLCh *name
00158             , const XMLCh *compNamespace);
00159 
00167     XSAttributeDeclaration *getAttributeDeclaration(const XMLCh *name
00168             , const XMLCh *compNamespace);
00169 
00178     XSTypeDefinition *getTypeDefinition(const XMLCh *name
00179             , const XMLCh *compNamespace);
00180 
00188     XSAttributeGroupDefinition *getAttributeGroup(const XMLCh *name
00189             , const XMLCh *compNamespace);
00190 
00198     XSModelGroupDefinition *getModelGroupDefinition(const XMLCh *name
00199             , const XMLCh *compNamespace);
00200 
00208     XSNotationDeclaration *getNotationDeclaration(const XMLCh *name
00209             , const XMLCh *compNamespace);
00210 
00220     XSObject *getXSObjectById(unsigned int  compId
00221                 , XSConstants::COMPONENT_TYPE compType);
00222 
00224 
00225     
00229     XMLStringPool*  getURIStringPool();
00230 
00231     XSNamespaceItem* getNamespaceItem(const XMLCh* const key);
00232 
00240     XSObject* getXSObject(void* key);
00241 
00243 private:
00244 
00245     
00246     
00247     
00248     void addGrammarToXSModel
00249     (
00250         XSNamespaceItem* namespaceItem
00251     );
00252     void addS4SToXSModel
00253     (
00254         XSNamespaceItem* const namespaceItem
00255         , RefHashTableOf<DatatypeValidator>* const builtInDV
00256     );
00257     void addComponentToNamespace
00258     (
00259          XSNamespaceItem* const namespaceItem
00260          , XSObject* const component
00261          , int componentIndex
00262          , bool addToXSModel = true
00263     );
00264 
00265     void addComponentToIdVector
00266     (
00267         XSObject* const component
00268         , int componentIndex
00269     );
00270 
00271     
00272     
00273     
00274     XSModel(const XSModel&);
00275     XSModel & operator=(const XSModel &);
00276 
00277 protected:
00278     friend class XSObjectFactory;
00279     friend class XSObject;
00280 
00281     
00282     
00283     
00284     
00285     
00286     MemoryManager* const                    fMemoryManager;
00287  
00288     StringList*                             fNamespaceStringList;
00289     XSNamespaceItemList*                    fXSNamespaceItemList;
00290 
00291     RefVectorOf<XSObject>*                  fIdVector[XSConstants::MULTIVALUE_FACET];    
00292 
00293     
00294 
00295 
00296 
00297 
00298 
00299 
00300 
00301 
00302 
00303 
00304 
00305 
00306 
00307 
00308 
00309     XSNamedMap<XSObject>*                   fComponentMap[XSConstants::MULTIVALUE_FACET];
00310     XMLStringPool*                          fURIStringPool;
00311     XSAnnotationList*                       fXSAnnotationList;
00312     RefHashTableOf<XSNamespaceItem>*        fHashNamespace;
00313     XSObjectFactory*                        fObjFactory;
00314     RefVectorOf<XSNamespaceItem>*           fDeleteNamespace;
00315     XSModel*                                fParent;
00316     bool                                    fDeleteParent;
00317     bool                                    fAddedS4SGrammar;
00318 };
00319 
00320 inline XMLStringPool*  XSModel::getURIStringPool()
00321 {
00322     return fURIStringPool;
00323 }
00324 
00325 inline StringList *XSModel::getNamespaces()
00326 {
00327     return fNamespaceStringList;
00328 }
00329 
00330 inline XSNamespaceItemList *XSModel::getNamespaceItems()
00331 {
00332     return fXSNamespaceItemList;
00333 }
00334 
00335 XERCES_CPP_NAMESPACE_END
00336 
00337 #endif