blob: 5447c5f5025077c2fe904124ac37592c26c20b48 [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: XSElementDeclaration.cpp 568078 2007-08-21 11:43:25Z amassari $
*/
#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
#include <xercesc/framework/psvi/XSSimpleTypeDefinition.hpp>
#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
#include <xercesc/framework/psvi/XSIDCDefinition.hpp>
#include <xercesc/framework/psvi/XSModel.hpp>
#include <xercesc/validators/schema/SchemaElementDecl.hpp>
#include <xercesc/util/StringPool.hpp>
XERCES_CPP_NAMESPACE_BEGIN
// ---------------------------------------------------------------------------
// XSElementDeclaration: Constructors and Destructor
// ---------------------------------------------------------------------------
XSElementDeclaration::XSElementDeclaration
(
SchemaElementDecl* const schemaElementDecl
, XSTypeDefinition* const typeDefinition
, XSElementDeclaration* const substitutionGroupAffiliation
, XSAnnotation* const annot
, XSNamedMap<XSIDCDefinition>* const identityConstraints
, XSModel* const xsModel
, XSConstants::SCOPE elemScope
, XSComplexTypeDefinition* const enclosingTypeDefinition
, MemoryManager* const manager
)
: XSObject(XSConstants::ELEMENT_DECLARATION, xsModel, manager)
, fDisallowedSubstitutions(0)
, fSubstitutionGroupExclusions(0)
, fScope(elemScope)
, fSchemaElementDecl(schemaElementDecl)
, fTypeDefinition(typeDefinition)
, fEnclosingTypeDefinition(enclosingTypeDefinition)
, fSubstitutionGroupAffiliation(substitutionGroupAffiliation)
, fAnnotation(annot)
, fIdentityConstraints(identityConstraints)
{
// set block and final information
// NOTE: rest of setup will be taken care of in construct()
int blockFinalSet = fSchemaElementDecl->getBlockSet();
if (blockFinalSet)
{
if (blockFinalSet & SchemaSymbols::XSD_EXTENSION)
fDisallowedSubstitutions |= XSConstants::DERIVATION_EXTENSION;
if (blockFinalSet & SchemaSymbols::XSD_RESTRICTION)
fDisallowedSubstitutions |= XSConstants::DERIVATION_RESTRICTION;
if (blockFinalSet & SchemaSymbols::XSD_SUBSTITUTION)
fDisallowedSubstitutions |= XSConstants::DERIVATION_SUBSTITUTION;
}
if (0 != (blockFinalSet = fSchemaElementDecl->getFinalSet()))
{
if (blockFinalSet & SchemaSymbols::XSD_EXTENSION)
fSubstitutionGroupExclusions |= XSConstants::DERIVATION_EXTENSION;
if (blockFinalSet & SchemaSymbols::XSD_RESTRICTION)
fSubstitutionGroupExclusions |= XSConstants::DERIVATION_RESTRICTION;
}
}
XSElementDeclaration::~XSElementDeclaration()
{
// don't delete fTypeDefinition - deleted by XSModel
// don't delete fSubstitutionGroupAffiliation - deleted by XSModel
if (fIdentityConstraints)
delete fIdentityConstraints;
}
// ---------------------------------------------------------------------------
// XSElementDeclaration: XSObject virtual methods
// ---------------------------------------------------------------------------
const XMLCh *XSElementDeclaration::getName()
{
return fSchemaElementDecl->getElementName()->getLocalPart();
}
const XMLCh *XSElementDeclaration::getNamespace()
{
return fXSModel->getURIStringPool()->getValueForId(fSchemaElementDecl->getURI());
}
XSNamespaceItem *XSElementDeclaration::getNamespaceItem()
{
return fXSModel->getNamespaceItem(getNamespace());
}
// ---------------------------------------------------------------------------
// XSElementDeclaration: access methods
// ---------------------------------------------------------------------------
XSConstants::VALUE_CONSTRAINT XSElementDeclaration::getConstraintType() const
{
if (fSchemaElementDecl->getMiscFlags() & SchemaSymbols::XSD_FIXED)
return XSConstants::VALUE_CONSTRAINT_FIXED;
if (fSchemaElementDecl->getDefaultValue())
return XSConstants::VALUE_CONSTRAINT_DEFAULT;
return XSConstants::VALUE_CONSTRAINT_NONE;
}
const XMLCh *XSElementDeclaration::getConstraintValue()
{
return fSchemaElementDecl->getDefaultValue();
}
bool XSElementDeclaration::getNillable() const
{
if (fSchemaElementDecl->getMiscFlags() & SchemaSymbols::XSD_NILLABLE)
return true;
return false;
}
bool XSElementDeclaration::isSubstitutionGroupExclusion(XSConstants::DERIVATION_TYPE exclusion)
{
if (fSubstitutionGroupExclusions & exclusion)
return true;
return false;
}
bool XSElementDeclaration::isDisallowedSubstitution(XSConstants::DERIVATION_TYPE disallowed)
{
if (fDisallowedSubstitutions & disallowed)
return true;
return false;
}
bool XSElementDeclaration::getAbstract() const
{
if (fSchemaElementDecl->getMiscFlags() & SchemaSymbols::XSD_ABSTRACT)
return true;
return false;
}
XERCES_CPP_NAMESPACE_END