blob: 2f41722e9fa43de6af8fc5018308d4d653892980 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: XSObjectFactory.hpp 568078 2007-08-21 11:43:25Z amassari $
*/
#if !defined(XSOBJECTFACTORY_HPP)
#define XSOBJECTFACTORY_HPP
#include <xercesc/framework/psvi/XSConstants.hpp>
#include <xercesc/util/RefHashTableOf.hpp>
XERCES_CPP_NAMESPACE_BEGIN
class XSObject;
class XSAttributeUse;
class XSAttributeDeclaration;
class XSModel;
class XSElementDeclaration;
class XSSimpleTypeDefinition;
class XSComplexTypeDefinition;
class XSModelGroupDefinition;
class XSAttributeGroupDefinition;
class XSWildcard;
class XSParticle;
class XSAnnotation;
class XSNamespaceItem;
class XSNotationDeclaration;
class SchemaAttDef;
class SchemaElementDecl;
class DatatypeValidator;
class ContentSpecNode;
class ComplexTypeInfo;
class XercesGroupInfo;
class XercesAttGroupInfo;
class XSIDCDefinition;
class IdentityConstraint;
class XMLNotationDecl;
/**
* Factory class to create various XSObject(s)
* Used by XSModel
*/
class XMLPARSER_EXPORT XSObjectFactory : public XMemory
{
public:
// -----------------------------------------------------------------------
// Constructors and Destructor
// -----------------------------------------------------------------------
XSObjectFactory(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
~XSObjectFactory();
private:
// -----------------------------------------------------------------------
// Unimplemented constructors and destructor
// -----------------------------------------------------------------------
XSObjectFactory(const XSObjectFactory&);
XSObjectFactory& operator=(const XSObjectFactory&);
// -----------------------------------------------------------------------
// factory methods
// -----------------------------------------------------------------------
XSParticle* createModelGroupParticle
(
const ContentSpecNode* const node
, XSModel* const xsModel
);
XSAttributeDeclaration* addOrFind
(
SchemaAttDef* const attDef
, XSModel* const xsModel
, XSComplexTypeDefinition* const enclosingTypeDef = 0
);
XSSimpleTypeDefinition* addOrFind
(
DatatypeValidator* const validator
, XSModel* const xsModel
, bool isAnySimpleType = false
);
XSElementDeclaration* addOrFind
(
SchemaElementDecl* const elemDecl
, XSModel* const xsModel
, XSComplexTypeDefinition* const enclosingTypeDef = 0
);
XSComplexTypeDefinition* addOrFind
(
ComplexTypeInfo* const typeInfo
, XSModel* const xsModel
);
XSIDCDefinition* addOrFind
(
IdentityConstraint* const ic
, XSModel* const xsModel
);
XSNotationDeclaration* addOrFind
(
XMLNotationDecl* const notDecl
, XSModel* const xsModel
);
XSAttributeUse* createXSAttributeUse
(
XSAttributeDeclaration* const xsAttDecl
, XSModel* const xsModel
);
XSWildcard* createXSWildcard
(
SchemaAttDef* const attDef
, XSModel* const xsModel
);
XSWildcard* createXSWildcard
(
const ContentSpecNode* const rootNode
, XSModel* const xsModel
);
XSModelGroupDefinition* createXSModelGroupDefinition
(
XercesGroupInfo* const groupInfo
, XSModel* const xsModel
);
XSAttributeGroupDefinition* createXSAttGroupDefinition
(
XercesAttGroupInfo* const attGroupInfo
, XSModel* const xsModel
);
// -----------------------------------------------------------------------
// Helper methods
// -----------------------------------------------------------------------
// creates a particle corresponding to an element
XSParticle* createElementParticle
(
const ContentSpecNode* const rootNode
, XSModel* const xsModel
);
// creates a particle corresponding to a wildcard
XSParticle* createWildcardParticle
(
const ContentSpecNode* const rootNode
, XSModel* const xsModel
);
XSAnnotation* getAnnotationFromModel
(
XSModel* const xsModel
, const void* const key
);
void buildAllParticles
(
const ContentSpecNode* const rootNode
, XSParticleList* const particleList
, XSModel* const xsModel
);
void buildChoiceSequenceParticles
(
const ContentSpecNode* const rootNode
, XSParticleList* const particleList
, XSModel* const xsModel
);
void putObjectInMap
(
void* key
, XSObject* const object
);
XSObject* getObjectFromMap
(
void* key
);
void processFacets
(
DatatypeValidator* const dv
, XSModel* const xsModel
, XSSimpleTypeDefinition* const xsST
);
void processAttUse
(
SchemaAttDef* const attDef
, XSAttributeUse* const xsAttUse
);
bool isMultiValueFacetDefined(DatatypeValidator* const dv);
// make XSModel our friend
friend class XSModel;
// -----------------------------------------------------------------------
// Private Data Members
//
// fMemoryManager
// The memory manager used to create various XSObject(s).
// -----------------------------------------------------------------------
MemoryManager* fMemoryManager;
RefHashTableOf<XSObject>* fXercesToXSMap;
RefVectorOf<XSObject>* fDeleteVector;
};
inline XSObject* XSObjectFactory::getObjectFromMap(void* key)
{
return fXercesToXSMap->get(key);
}
XERCES_CPP_NAMESPACE_END
#endif