blob: 93dbe49fbacd2d9789a3e86251a177640814ad70 [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: XSNamespaceItem.cpp 568078 2007-08-21 11:43:25Z amassari $
*/
#include <xercesc/framework/psvi/XSNamespaceItem.hpp>
#include <xercesc/validators/schema/SchemaGrammar.hpp>
#include <xercesc/framework/psvi/XSModel.hpp>
#include <xercesc/framework/psvi/XSAnnotation.hpp>
#include <xercesc/validators/schema/XMLSchemaDescriptionImpl.hpp>
XERCES_CPP_NAMESPACE_BEGIN
// ---------------------------------------------------------------------------
// XSNamespaceItem: Constructors and Destructors
// ---------------------------------------------------------------------------
XSNamespaceItem::XSNamespaceItem(XSModel* const xsModel,
SchemaGrammar* const grammar,
MemoryManager* const manager)
: fMemoryManager(manager)
, fGrammar(grammar)
, fXSModel(xsModel)
, fXSAnnotationList(0)
, fSchemaNamespace(grammar->getTargetNamespace())
{
// Populate XSNamedMaps by going through the components
for (unsigned int i=0; i<XSConstants::MULTIVALUE_FACET; i++)
{
switch (i+1)
{
case XSConstants::ATTRIBUTE_DECLARATION:
case XSConstants::ELEMENT_DECLARATION:
case XSConstants::TYPE_DEFINITION:
case XSConstants::ATTRIBUTE_GROUP_DEFINITION:
case XSConstants::MODEL_GROUP_DEFINITION:
case XSConstants::NOTATION_DECLARATION:
fComponentMap[i] = new (fMemoryManager) XSNamedMap<XSObject>
(
20, // size
29, // modulus
fXSModel->getURIStringPool(),
false, // adoptElems
fMemoryManager
);
fHashMap[i] = new (fMemoryManager) RefHashTableOf<XSObject>
(
29,
false,
fMemoryManager
);
break;
default:
// ATTRIBUTE_USE
// MODEL_GROUP
// PARTICLE
// IDENTITY_CONSTRAINT
// WILDCARD
// ANNOTATION
// FACET
// MULTIVALUE
fComponentMap[i] = 0;
fHashMap[i] = 0;
break;
}
}
fXSAnnotationList = new (manager) RefVectorOf <XSAnnotation> (5, false, manager);
}
XSNamespaceItem::XSNamespaceItem(XSModel* const xsModel,
const XMLCh* const schemaNamespace,
MemoryManager* const manager)
: fMemoryManager(manager)
, fGrammar(0)
, fXSModel(xsModel)
, fXSAnnotationList(0)
, fSchemaNamespace(schemaNamespace)
{
// Populate XSNamedMaps by going through the components
for (unsigned int i=0; i<XSConstants::MULTIVALUE_FACET; i++)
{
switch (i+1)
{
case XSConstants::ATTRIBUTE_DECLARATION:
case XSConstants::ELEMENT_DECLARATION:
case XSConstants::TYPE_DEFINITION:
case XSConstants::ATTRIBUTE_GROUP_DEFINITION:
case XSConstants::MODEL_GROUP_DEFINITION:
case XSConstants::NOTATION_DECLARATION:
fComponentMap[i] = new (fMemoryManager) XSNamedMap<XSObject>
(
20, // size
29, // modulus
fXSModel->getURIStringPool(),
false, // adoptElems
fMemoryManager
);
fHashMap[i] = new (fMemoryManager) RefHashTableOf<XSObject>
(
29,
false,
fMemoryManager
);
break;
default:
// ATTRIBUTE_USE
// MODEL_GROUP
// PARTICLE
// IDENTITY_CONSTRAINT
// WILDCARD
// ANNOTATION
// FACET
// MULTIVALUE
fComponentMap[i] = 0;
fHashMap[i] = 0;
break;
}
}
fXSAnnotationList = new (manager) RefVectorOf <XSAnnotation> (5, false, manager);
}
XSNamespaceItem::~XSNamespaceItem()
{
for (unsigned int i=0; i<XSConstants::MULTIVALUE_FACET; i++)
{
switch (i+1)
{
case XSConstants::ATTRIBUTE_DECLARATION:
case XSConstants::ELEMENT_DECLARATION:
case XSConstants::TYPE_DEFINITION:
case XSConstants::ATTRIBUTE_GROUP_DEFINITION:
case XSConstants::MODEL_GROUP_DEFINITION:
case XSConstants::NOTATION_DECLARATION:
delete fComponentMap[i];
delete fHashMap[i];
break;
}
}
delete fXSAnnotationList;
}
// ---------------------------------------------------------------------------
// XSNamespaceItem: access methods
// ---------------------------------------------------------------------------
XSNamedMap<XSObject> *XSNamespaceItem::getComponents(XSConstants::COMPONENT_TYPE objectType)
{
return fComponentMap[objectType -1];
}
XSElementDeclaration *XSNamespaceItem::getElementDeclaration(const XMLCh *name)
{
if (name)
return (XSElementDeclaration*) fHashMap[XSConstants::ELEMENT_DECLARATION -1]->get(name);
return 0;
}
XSAttributeDeclaration *XSNamespaceItem::getAttributeDeclaration(const XMLCh *name)
{
if (name)
return (XSAttributeDeclaration*) fHashMap[XSConstants::ATTRIBUTE_DECLARATION -1]->get(name);
return 0;
}
XSTypeDefinition *XSNamespaceItem::getTypeDefinition(const XMLCh *name)
{
if (name)
return (XSTypeDefinition*) fHashMap[XSConstants::TYPE_DEFINITION -1]->get(name);
return 0;
}
XSAttributeGroupDefinition *XSNamespaceItem::getAttributeGroup(const XMLCh *name)
{
if (name)
return (XSAttributeGroupDefinition*) fHashMap[XSConstants::ATTRIBUTE_GROUP_DEFINITION -1]->get(name);
return 0;
}
XSModelGroupDefinition *XSNamespaceItem::getModelGroupDefinition(const XMLCh *name)
{
if (name)
return (XSModelGroupDefinition*) fHashMap[XSConstants::MODEL_GROUP_DEFINITION -1]->get(name);
return 0;
}
XSNotationDeclaration *XSNamespaceItem::getNotationDeclaration(const XMLCh *name)
{
if (name)
return (XSNotationDeclaration*) fHashMap[XSConstants::NOTATION_DECLARATION -1]->get(name);
return 0;
}
StringList *XSNamespaceItem::getDocumentLocations()
{
if (fGrammar)
return ((XMLSchemaDescriptionImpl*) fGrammar->getGrammarDescription())->getLocationHints();
return 0;
}
XERCES_CPP_NAMESPACE_END