summaryrefslogtreecommitdiff
path: root/configmgr/source/backend/updatedispatch.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/backend/updatedispatch.cxx')
-rw-r--r--configmgr/source/backend/updatedispatch.cxx499
1 files changed, 0 insertions, 499 deletions
diff --git a/configmgr/source/backend/updatedispatch.cxx b/configmgr/source/backend/updatedispatch.cxx
deleted file mode 100644
index 6e805308c7a9..000000000000
--- a/configmgr/source/backend/updatedispatch.cxx
+++ /dev/null
@@ -1,499 +0,0 @@
-/*************************************************************************
- *
- * 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: updatedispatch.cxx,v $
- * $Revision: 1.12 $
- *
- * 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 "treefragment.hxx"
-#include "updatedispatch.hxx"
-#include "configpath.hxx"
-#include "node.hxx"
-#include "matchlocale.hxx"
-
-#include <com/sun/star/configuration/backend/XUpdateHandler.hpp>
-#include <com/sun/star/configuration/backend/NodeAttribute.hpp>
-
-namespace configmgr
-{
-// -----------------------------------------------------------------------------
- namespace backend
- {
-// -----------------------------------------------------------------------------
-
-UpdateDispatcher::UpdateDispatcher(uno::Reference< backenduno::XUpdateHandler > const & _xUpdateHandler, rtl::OUString const & _aLocale)
-: m_pContextPath(NULL)
-, m_xUpdateHandler(_xUpdateHandler)
-, m_aLocale(_aLocale)
-, m_aElementName()
-, m_bInValueSet(false)
-, m_bInLocalizedValues(false)
-{
-}
-// -----------------------------------------------------------------------------
-
-UpdateDispatcher::~UpdateDispatcher()
-{
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::dispatchUpdate(configuration::AbsolutePath const & _aRootPath, SubtreeChange const& _anUpdate)
-{
- if (!m_xUpdateHandler.is())
- {
- rtl::OUString sMsg( RTL_CONSTASCII_USTRINGPARAM("ERROR: Cannot dispatch update - no handler found") );
- throw uno::RuntimeException(sMsg,NULL);
- }
-
- OSL_PRECOND( !_aRootPath.isRoot(), "Cannot apply update, where root is outside a component" );
-
- OSL_PRECOND( m_pContextPath == NULL, "Update Dispatcher already has a context path" );
- if (!_aRootPath.getParentPath().isRoot())
- {
- OSL_ENSURE(false,"Obsolete functionality used: starting update with non-empty context");
- m_pContextPath = &_aRootPath;
- }
-
- this->startUpdate();
- this->applyToChange(_anUpdate);
- this->endUpdate();
-
- m_pContextPath = NULL;
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::startUpdate()
-{
- m_xUpdateHandler->startUpdate();
- m_bInValueSet = false;
- m_bInLocalizedValues = false;
- m_aElementName = rtl::OUString();
-
- if (m_pContextPath)
- {
- std::vector<configuration::Path::Component>::const_reverse_iterator it = m_pContextPath->begin();
- std::vector<configuration::Path::Component>::const_reverse_iterator stop = m_pContextPath->end();
-
- OSL_ASSERT(it != stop);
- --stop;
-
- for ( ; it != stop; ++it)
- {
- m_xUpdateHandler->modifyNode(it->getName(),0,0,false);
- }
- }
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::endUpdate()
-{
- if (m_pContextPath)
- {
- std::vector<configuration::Path::Component>::const_reverse_iterator it = m_pContextPath->begin();
- std::vector<configuration::Path::Component>::const_reverse_iterator stop = m_pContextPath->end();
-
- OSL_ASSERT(it != stop);
- --stop;
-
- for ( ; it != stop; ++it)
- {
- m_xUpdateHandler->endNode();
- }
- }
- m_xUpdateHandler->endUpdate();
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::handle(ValueChange const& aValueNode)
-{
- // special case: doing members of a localized property (as set)
- if (m_bInLocalizedValues)
- {
- rtl::OUString aLocale = aValueNode.getNodeName();
-
- if (aLocale.getLength())
- {
- if ( aValueNode.isToDefault() )
- m_xUpdateHandler->resetPropertyValueForLocale( aLocale );
- else
- m_xUpdateHandler->setPropertyValueForLocale( aValueNode.getNewValue(), aLocale );
- }
- else
- {
- if ( aValueNode.isToDefault() )
- m_xUpdateHandler->resetPropertyValue( );
- else
- m_xUpdateHandler->setPropertyValue( aValueNode.getNewValue() );
- }
- return;
- }
-
- // normal case: updating a single property
- switch (aValueNode.getMode())
- {
- case ValueChange::wasDefault:
- if (aValueNode.isReplacedValue())
- {
-
- OSL_ENSURE(m_bInValueSet, "UpdateDispatcher: Cannot add/replace a value in a nonextensible node");
- OSL_ENSURE(!aValueNode.isLocalizedValue(), "UpdateDispatcher: Cannot add a localized value in a layer");
-
- sal_Int16 nAttr = getUpdateAttributes(aValueNode.getAttributes(),true);
-
- if (aValueNode.getNewValue().hasValue())
- {
- m_xUpdateHandler->addOrReplacePropertyWithValue( aValueNode.getNodeName(),
- nAttr,
- aValueNode.getNewValue());
- }
- else
- {
- m_xUpdateHandler->addOrReplaceProperty( aValueNode.getNodeName(),
- nAttr,
- aValueNode.getValueType());
- }
-
- break;
- }
- // else fall thru to changeValue case
-
- case ValueChange::changeValue:
- {
- sal_Int16 nAttr = getUpdateAttributes(aValueNode.getAttributes(),false);
- sal_Int16 nAttrMask = getUpdateAttributeMask(aValueNode.getAttributes());
-
- m_xUpdateHandler->modifyProperty( aValueNode.getNodeName(),
- nAttr, nAttrMask,
- aValueNode.getValueType() );
-
- if (aValueNode.isLocalizedValue() && m_aLocale.getLength())
- {
- m_xUpdateHandler->setPropertyValueForLocale( aValueNode.getNewValue(), m_aLocale );
- }
- else
- {
- m_xUpdateHandler->setPropertyValue( aValueNode.getNewValue() );
- }
-
- m_xUpdateHandler->endProperty();
- }
- break;
-
- case ValueChange::setToDefault:
- m_xUpdateHandler->resetProperty( aValueNode.getNodeName() );
- break;
-
- case ValueChange::changeDefault:
- OSL_ENSURE(false, "Illegal mode in ValueChange");
- break;
-
- default:
- OSL_ENSURE(false, "Illegal mode in ValueChange");
- break;
- };
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::handle(AddNode const& aAddNode)
-{
- rtl::Reference< data::TreeSegment > aAddedTree = aAddNode.getNewTree();
-
- OSL_ENSURE(aAddedTree.is(), "AddNode has no new data -> cannot add anything");
-
- OSL_ENSURE( ((m_bInValueSet||m_bInLocalizedValues) == aAddedTree->fragment->nodes[0].isValue()),
- "Found added subtree in value set (extensible group)\n" );
-
- this->visitTree(aAddedTree->fragment);
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::handle(RemoveNode const& aRemoveNode)
-{
- OSL_ENSURE( !m_bInLocalizedValues, "UpdateDispatcher: Removing values for a specific locale is currently not supported");
-
- rtl::Reference< data::TreeSegment > aRemovedTree = aRemoveNode.getRemovedTree();
-
- OSL_ENSURE( !aRemovedTree.is() ||
- ((m_bInValueSet||m_bInLocalizedValues) == aRemovedTree->fragment->nodes[0].isValue()),
- "Found removed subtree in value set (extensible group)\n" );
-
- if (m_bInLocalizedValues)
- OSL_TRACE("configmgr: UpdateDispatcher - Removing value for locale ignored");
-
- else if (m_bInValueSet)
- m_xUpdateHandler->removeProperty( aRemoveNode.getNodeName() );
-
- else
- m_xUpdateHandler->removeNode( aRemoveNode.getNodeName() );
-}
-// -----------------------------------------------------------------------------
-
-void UpdateDispatcher::handle(SubtreeChange const& aSubtree)
-{
- OSL_ENSURE( !m_bInLocalizedValues, "UpdateDispatcher: A localized value cannot be a complete subtree");
- OSL_ENSURE( !m_bInValueSet, "UpdateDispatcher: A dynamic property cannot be a complete subtree");
-
- sal_Int16 nAttr = getUpdateAttributes(aSubtree.getAttributes(),false);
- sal_Int16 nAttrMask = getUpdateAttributeMask(aSubtree.getAttributes());
-
- if (isLocalizedValueSet(aSubtree))
- {
- m_xUpdateHandler->modifyProperty( aSubtree.getNodeName(),
- nAttr, nAttrMask,
- uno::Type() );
-
- m_bInLocalizedValues = true;
- this->applyToChildren(aSubtree);
- m_bInLocalizedValues = false;
-
- m_xUpdateHandler->endProperty();
- }
-
- else
- {
- m_xUpdateHandler->modifyNode( aSubtree.getNodeName(),
- nAttr, nAttrMask,
- aSubtree.isToDefault() );
-
- m_bInValueSet = isValueSet(aSubtree);
- this->applyToChildren(aSubtree);
- m_bInValueSet = false;
-
- m_xUpdateHandler->endNode();
- }
-}
-// -----------------------------------------------------------------------------
-
-bool UpdateDispatcher::handle(sharable::ValueNode * node)
-{
- rtl::OUString aName;
-
- // special case: doing members of a localized property (as set)
- if (m_bInLocalizedValues)
- {
- // the node name is the locale
- rtl::OUString aLocale;
- OSL_VERIFY(testReplacedAndGetName(sharable::node(node), aLocale)); // "Adding a localized subvalue but not as root of element tree"
-
- if (aLocale.getLength() && ! localehelper::isDefaultLanguage(aLocale))
- {
- m_xUpdateHandler->setPropertyValueForLocale(node->getValue(), aLocale);
- }
- else
- {
- m_xUpdateHandler->setPropertyValue(node->getValue());
- }
- }
- else if (testReplacedAndGetName(sharable::node(node), aName) && sharable::node(node)->getAttributes().isRemovable()) // we must be inside a set of values
- {
-
- OSL_ENSURE(!node->info.isLocalized(), "UpdateDispatcher: Cannot add a localized value in a layer .");
-
- sal_Int16 nAttr = getUpdateAttributes(sharable::node(node)->getAttributes(),true);
-
- if (!node->isNull())
- {
- m_xUpdateHandler->addOrReplacePropertyWithValue( aName,
- nAttr,
- node->getValue());
- }
- else
- {
- m_xUpdateHandler->addOrReplaceProperty( aName,
- nAttr,
- node->getValueType());
- }
- }
- else // normal case: updating a single property //Inserting set
- {
- sal_Int16 nAttr = getUpdateAttributes(sharable::node(node)->getAttributes(),false);
- sal_Int16 nAttrMask = getUpdateAttributeMask(sharable::node(node)->getAttributes());
-
- m_xUpdateHandler->modifyProperty( aName, nAttr, nAttrMask, node->getValueType() );
-
- if (node->info.isLocalized() && m_aLocale.getLength())
- {
- m_xUpdateHandler->setPropertyValueForLocale(node->getValue(), m_aLocale);
- }
- else
- {
- m_xUpdateHandler->setPropertyValue(node->getValue());
- }
-
- m_xUpdateHandler->endProperty();
- }
- return false;
-}
-// -----------------------------------------------------------------------------
-
-bool UpdateDispatcher::handle(sharable::GroupNode * node)
-{
- OSL_ENSURE( !m_bInLocalizedValues, "UpdateDispatcher: A localized value cannot be a complete group");
-
- rtl::OUString aName;
-
- if ( testReplacedAndGetName(sharable::node(node), aName) )
- {
- sal_Int16 nAttr = getUpdateAttributes(sharable::node(node)->getAttributes(),true);
-
- m_xUpdateHandler->addOrReplaceNode( aName, nAttr );
-
- this->visitChildren(node);
-
- m_xUpdateHandler->endNode();
- }
- else
- {
- sal_Int16 nAttr = getUpdateAttributes(sharable::node(node)->getAttributes(),false);
- sal_Int16 nAttrMask = getUpdateAttributeMask(sharable::node(node)->getAttributes());
-
- m_xUpdateHandler->modifyNode( aName, nAttr, nAttrMask, false );
-
- this->visitChildren(node);
-
- m_xUpdateHandler->endNode();
- }
- return false;
-}
-// -----------------------------------------------------------------------------
-
-bool UpdateDispatcher::handle(sharable::SetNode * node)
-{
- OSL_ENSURE( !m_bInLocalizedValues, "UpdateDispatcher: A localized value cannot be a complete set");
-
- rtl::OUString aName;
-
- if ( testReplacedAndGetName(sharable::node(node), aName) )
- {
- OSL_ENSURE( !node->info.isLocalized(), "UpdateDispatcher: Cannot add a localized value in a layer." );
-
- sal_Int16 nAttr = getUpdateAttributes(sharable::node(node)->getAttributes(),true);
-
- m_xUpdateHandler->addOrReplaceNode( aName, nAttr );
-
- this->visitElements(node);
-
- m_xUpdateHandler->endNode();
- }
- else
- {
- sal_Int16 nAttr = getUpdateAttributes(sharable::node(node)->getAttributes(),false);
- sal_Int16 nAttrMask = getUpdateAttributeMask(sharable::node(node)->getAttributes());
-
- if (node->info.isLocalized())
- {
- m_xUpdateHandler->modifyProperty( aName, nAttr, nAttrMask, uno::Type() );
-
- m_bInLocalizedValues = true;
- this->visitElements(node);
- m_bInLocalizedValues = false;
-
- m_xUpdateHandler->endProperty();
- }
-
- else
- {
- m_xUpdateHandler->modifyNode( aName, nAttr, nAttrMask, false );
-
- this->visitElements(node);
-
- m_xUpdateHandler->endNode();
- }
- }
- return false;
-}
-// -----------------------------------------------------------------------------
-
-bool UpdateDispatcher::testReplacedAndGetName(sharable::Node * node, rtl::OUString & _aName)
-{
- if (m_aElementName.getLength())
- {
- OSL_ENSURE( node->isFragmentRoot(), "ERROR - UpdateDispatcher: Found orphaned 'element' name for inner node");
- _aName = m_aElementName;
- m_aElementName = rtl::OUString();
- return true;
- }
- else
- {
- OSL_ENSURE(!node->isFragmentRoot(), "ERROR - UpdateDispatcher: Found no 'element' name for fragment root node");
- _aName = node->getName();
- return false;
- }
-}
-// -----------------------------------------------------------------------------
-
-bool UpdateDispatcher::handle(sharable::TreeFragment * tree)
-{
- m_aElementName = tree->getName();
- bool done = SetVisitor::handle(tree); // dispatch to root node
- m_aElementName = rtl::OUString(); // clear - just to be safe
- return done;
-}
-// -----------------------------------------------------------------------------
-
-sal_Int16 UpdateDispatcher::getUpdateAttributes(node::Attributes const & _aAttributes, bool bAdded)
-{
- namespace NodeAttribute = backenduno::NodeAttribute;
-
- // no support for post-creation attribute changes yet
- if (!bAdded)
- {
- OSL_ENSURE( getUpdateAttributeMask(_aAttributes) == 0,
- "Incomplete support for attribute changes" );
- return 0;
- }
-
- sal_Int16 nResult = 0;
-
- if (_aAttributes.isReadonly())
- nResult = NodeAttribute::READONLY;
-
- if (_aAttributes.isFinalized())
- nResult |= NodeAttribute::FINALIZED;
-
- if (!_aAttributes.isNullable())
- nResult |= NodeAttribute::MANDATORY;
-
- return nResult;
-}
-// -----------------------------------------------------------------------------
-
-sal_Int16 UpdateDispatcher::getUpdateAttributeMask(node::Attributes const & /*_aAttributes*/)
-{
- // no support for post-creation attribute changes yet
- return 0;
-}
-// -----------------------------------------------------------------------------
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
- } // namespace backend
-
-// -------------------------------------------------------------------------
-} // namespace configmgr