diff options
Diffstat (limited to 'configmgr/source/backend/mergedcomponentdata.cxx')
-rw-r--r-- | configmgr/source/backend/mergedcomponentdata.cxx | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/configmgr/source/backend/mergedcomponentdata.cxx b/configmgr/source/backend/mergedcomponentdata.cxx new file mode 100644 index 000000000000..92d9971a32ed --- /dev/null +++ b/configmgr/source/backend/mergedcomponentdata.cxx @@ -0,0 +1,176 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: mergedcomponentdata.cxx,v $ + * $Revision: 1.8 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_configmgr.hxx" + +#include "mergedcomponentdata.hxx" +#include "treenodefactory.hxx" + +namespace configmgr +{ +// ----------------------------------------------------------------------------- + namespace backend + { +// ----------------------------------------------------------------------------- + +MergedComponentData::MergedComponentData( ) +: m_pSchemaTree() +, m_pTemplatesTree() +{ + +} +// ----------------------------------------------------------------------------- + +MergedComponentData::~MergedComponentData( ) +{ + +} +// ----------------------------------------------------------------------------- + +void MergedComponentData::clear( ) +{ + m_pTemplatesTree.reset(); + m_pSchemaTree.reset(); +} +// ----------------------------------------------------------------------------- + +bool MergedComponentData::hasSchema()const +{ + return m_pSchemaTree.get() != NULL; +} +// ----------------------------------------------------------------------------- + + +bool MergedComponentData::hasTemplates() const +{ + return m_pTemplatesTree.get() != NULL; +} +// ----------------------------------------------------------------------------- + +rtl::OUString MergedComponentData::getTemplateAccessor (backenduno::TemplateIdentifier const & _aTemplateName) const +{ + return _aTemplateName.Name; +} +// ----------------------------------------------------------------------------- + +bool MergedComponentData::hasTemplate(rtl::OUString const & _aTemplateName) const +{ + return m_pTemplatesTree.get() != NULL && + m_pTemplatesTree->getChild( _aTemplateName ) != NULL; +} +// ----------------------------------------------------------------------------- + +std::auto_ptr<ISubtree> MergedComponentData::extractSchemaTree() +{ + return m_pSchemaTree; +} +// ----------------------------------------------------------------------------- + +std::auto_ptr<ISubtree> MergedComponentData::extractTemplatesTree() +{ + return m_pTemplatesTree; +} +// ----------------------------------------------------------------------------- + +std::auto_ptr<INode> MergedComponentData::extractTemplateNode(rtl::OUString const & _aTemplateName) +{ + if (m_pTemplatesTree.get() == NULL) + return std::auto_ptr<INode>(); + + return m_pTemplatesTree->removeChild(_aTemplateName); +} +// ----------------------------------------------------------------------------- + +ISubtree const * MergedComponentData::findTemplate(rtl::OUString const & _aTemplateName) const +{ + INode const * pTemplateNode = m_pTemplatesTree->getChild(_aTemplateName); + + ISubtree const * pTemplateTree = pTemplateNode ? pTemplateNode->asISubtree() : NULL; + + OSL_ENSURE(pTemplateTree || !pTemplateNode, "ERROR: Template is not a subtree"); + + return pTemplateTree; +} +// ----------------------------------------------------------------------------- + +std::auto_ptr<INode> MergedComponentData::instantiateTemplate(rtl::OUString const & _aName, rtl::OUString const & _aTemplateName) const +{ + if (INode const * pTemplateNode = m_pTemplatesTree->getChild(_aTemplateName)) + { + std::auto_ptr<INode> aResult = pTemplateNode->clone(); + aResult->setName(_aName); + return aResult; + } + else + { + return std::auto_ptr<INode>(); + } +} +// ----------------------------------------------------------------------------- + +ISubtree * MergedComponentData::setSchemaRoot(std::auto_ptr<ISubtree> _aSchemaRoot) +{ + OSL_PRECOND(_aSchemaRoot.get(),"ERROR: Setting a NULL schema root."); + OSL_PRECOND(!hasSchema(),"ERROR: Schema root already set"); + + m_pSchemaTree = _aSchemaRoot; + + return m_pSchemaTree.get(); +} +// ----------------------------------------------------------------------------- +void MergedComponentData::setTemplatesTree(std::auto_ptr<ISubtree> _aTemplateTree) +{ + OSL_PRECOND(!hasTemplates(),"ERROR: Template Tree already set"); + m_pTemplatesTree = _aTemplateTree; +} +// ----------------------------------------------------------------------------- +ISubtree * MergedComponentData::addTemplate(std::auto_ptr<ISubtree> _aNode, backenduno::TemplateIdentifier const & aTemplate) +{ + OSL_PRECOND(_aNode.get(), "ERROR: Adding a NULL template"); + + if (!m_pTemplatesTree.get()) + { + m_pTemplatesTree = getDefaultTreeNodeFactory().createGroupNode( aTemplate.Component, node::Attributes() ); + } + else + { + OSL_ENSURE(m_pTemplatesTree->getName().equals(aTemplate.Component), + "Template Component names do not match"); + } + + return m_pTemplatesTree->addChild( base_ptr(_aNode) )->asISubtree(); +} +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- + } // namespace backend + +// ------------------------------------------------------------------------- +} // namespace configmgr |