summaryrefslogtreecommitdiff
path: root/configmgr/source/tree/localizedtreeactions.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/tree/localizedtreeactions.cxx')
-rw-r--r--configmgr/source/tree/localizedtreeactions.cxx546
1 files changed, 0 insertions, 546 deletions
diff --git a/configmgr/source/tree/localizedtreeactions.cxx b/configmgr/source/tree/localizedtreeactions.cxx
deleted file mode 100644
index b2ed23a730b3..000000000000
--- a/configmgr/source/tree/localizedtreeactions.cxx
+++ /dev/null
@@ -1,546 +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: localizedtreeactions.cxx,v $
- * $Revision: 1.19 $
- *
- * 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 <stdio.h>
-
-#include "localizedtreeactions.hxx"
-#include "treeactions.hxx"
-#include "builddata.hxx"
-#include "subtree.hxx"
-#include "matchlocale.hxx"
-#include "typeconverter.hxx"
-#include "change.hxx"
-#include "treechangefactory.hxx"
-#include "treenodefactory.hxx"
-#include "strdecl.hxx"
-#include <osl/diagnose.h>
-
-
-//..........................................................................
-namespace configmgr
-{
-
-//--------------------------------------------------------------------------
-namespace
-{
-//--------------------------------------------------------------------------
- //==========================================================================
- //= OCloneForLocale
- //==========================================================================
- //= clones a subtree , in the process selecting only the best match locale
- //= from the set representation of localized values
- //==========================================================================
- class OCloneForLocale : public NodeAction
- {
- rtl::OUString m_sTargetLocale;
- std::auto_ptr<INode> m_pClone;
- public:
- OCloneForLocale(rtl::OUString const& aLocale) : m_sTargetLocale(aLocale) {}
- std::auto_ptr<INode> getResult() { return m_pClone; }
-
- private:
- void handle(ValueNode const& _aValue);
- void handle(ISubtree const& _aSubtree);
- };
-//--------------------------------------------------------------------------
- struct OCloneChildrenForLocale : NodeAction
- {
- ISubtree& m_rParent;
- localehelper::FindBestLocale& m_rLocaleMatcher;
- public:
- OCloneChildrenForLocale(ISubtree& _rParent, localehelper::FindBestLocale& _rLocaleMatcher)
- : m_rParent(_rParent)
- , m_rLocaleMatcher(_rLocaleMatcher)
- {}
-
- virtual void handle(ValueNode const& _aValue);
- virtual void handle(ISubtree const& _aSubtree);
- };
-
-//--------------------------------------------------------------------------
- struct OSelectForLocale : NodeAction
- {
- ValueNode const* m_pFound;
- localehelper::FindBestLocale& m_rLocaleMatcher;
- public:
- OSelectForLocale(localehelper::FindBestLocale& _rLocaleMatcher)
- : m_pFound(NULL)
- , m_rLocaleMatcher(_rLocaleMatcher)
- {}
-
-
- bool hasResult() const
- { return m_pFound != NULL; }
-
- ValueNode const* getResult() const
- { return m_pFound; }
-
- private:
- virtual void handle(ValueNode const& _aValue);
- virtual void handle(ISubtree const& _aSubtree);
-
- void maybeSelect(ValueNode const& _aNode);
- };
-
-//--------------------------------------------------------------------------
-//--------------------------------------------------------------------------
- void OSelectForLocale::handle(ValueNode const& _aValue)
- {
- maybeSelect(_aValue);
- }
-//--------------------------------------------------------------------------
- void OSelectForLocale::handle(ISubtree const& /*_aSubtree*/)
- {
- OSL_ENSURE(false, "INTERNAL ERROR: Inconsistent data: Found a Subtree in a set of localized values");
- }
-//--------------------------------------------------------------------------
- void OSelectForLocale::maybeSelect(ValueNode const& _aNode)
- {
- if (m_rLocaleMatcher.accept( localehelper::makeLocale(_aNode.getName()) ) )
- m_pFound = &_aNode;
-
- else
- OSL_ENSURE(m_pFound, "WARNING: Node Locale wasn't accepted, but no node had been found before");
- }
-
-//--------------------------------------------------------------------------
-//--------------------------------------------------------------------------
- std::auto_ptr< INode > implReduceLocalizedSet(ISubtree const& _aSubtree, localehelper::FindBestLocale& _rLocaleMatcher)
- {
- // -- find the best-match locale -----------------------------
- _rLocaleMatcher.reset();
-
- OSelectForLocale aSelector(_rLocaleMatcher);
-
- aSelector.applyToChildren(_aSubtree);
-
- std::auto_ptr< INode > pResult;
-
- // -- look for a non-NULL value -----------------------------
- uno::Type aValueType;
- if (aSelector.hasResult())
- {
- ValueNode const& rSelected = *aSelector.getResult();
-
- aValueType = rSelected.getValueType();
-
- if (!rSelected.isNull()) // values are present - clone it from the values
- {
- pResult.reset ( new ValueNode( _aSubtree.getName(),
- rSelected.getValue(), rSelected.getDefault(),
- _aSubtree.getAttributes()
- ) );
-
- }
- }
- else // no entry - exract the type to be used from the template name
- aValueType = parseTemplateName(_aSubtree.getElementTemplateName());
-
- // -- create NULL value, if none was found -----------------------------
- // create a NULL of the found type
- if (pResult.get() == NULL)
- {
- pResult.reset( new ValueNode( _aSubtree.getName(),
- aValueType,
- _aSubtree.getAttributes()
- ) );
- }
-
- // -- -----------------------------
- OSL_ENSURE( aValueType != uno::Type(), "VOID result type found");
-#if OSL_DEBUG_LEVEL > 0
- uno::Type aTemplateType = parseTemplateName( _aSubtree.getElementTemplateName() );
- OSL_ENSURE( ( aValueType == aTemplateType ) || ( aTemplateType.getTypeClass() == uno::TypeClass_ANY ),
- "ERROR: Found Value Type doesn't match encoded value type in pseudo template name");
-#endif
- OSL_POSTCOND( static_cast<ValueNode&>(*pResult).getValueType() == aValueType,
- "ERROR: Resulting Value Type doesn't match original value type" );
-
- return pResult;
- }
-//--------------------------------------------------------------------------
- std::auto_ptr< INode > implCloneForLocale(ISubtree const& _aSubtree, localehelper::FindBestLocale& _rLocaleMatcher)
- {
- std::auto_ptr< INode > pClone;
-
- if (isLocalizedValueSet(_aSubtree))
- {
- pClone = implReduceLocalizedSet(_aSubtree, _rLocaleMatcher);
- }
- else
- {
- // ISubtree should get a clone(NoChildCopy) member ...
- std::auto_ptr< Subtree > pCloneTree( new Subtree(_aSubtree, treeop::NoChildCopy()) );
-
- OCloneChildrenForLocale aSubCloner(*pCloneTree,_rLocaleMatcher);
-
- aSubCloner.applyToChildren(_aSubtree);
-
- pClone.reset( pCloneTree.release() );
- }
-
- return pClone;
- }
-//--------------------------------------------------------------------------
-//--- OCloneChildrenForLocale:-----------------------------------------------------------------------
-
- void OCloneChildrenForLocale::handle(ValueNode const& _aValue)
- {
- // just a single value - nothing to do
- std::auto_ptr< INode > pClone( _aValue.clone() );
-
- m_rParent.addChild(pClone);
-
- }
-//--------------------------------------------------------------------------
- void OCloneChildrenForLocale::handle(ISubtree const& _aSubtree)
- {
- std::auto_ptr< INode > pClone = implCloneForLocale(_aSubtree,m_rLocaleMatcher);
-
- m_rParent.addChild(pClone);
- }
-
- //--------------------------------------------------------------------------
- //= OCloneForLocale
-
- // rtl::OUString m_sTargetLocale;
- // std::auto_ptr<INode> m_pClone;
-
- void OCloneForLocale::handle(ValueNode const& _aValue)
- {
- // just a single value - nothing to do
- std::auto_ptr< INode > pClone( _aValue.clone() );
-
- m_pClone = pClone;
- }
- //--------------------------------------------------------------------------
- void OCloneForLocale::handle(ISubtree const& _aSubtree)
- {
- localehelper::FindBestLocale aLocaleMatcher( localehelper::makeLocale(m_sTargetLocale) );
-
- m_pClone = implCloneForLocale(_aSubtree,aLocaleMatcher);
- }
- //--------------------------------------------------------------------------
-
-//--------------------------------------------------------------------------
-} // anonymous namespace
-
-//==========================================================================
-// Helper function to invoke the previous ones properly
-
-// convert to the given locale format, assuming the original representation was expanded
-static std::auto_ptr<INode> impl_cloneExpandedForLocale(INode const* _pNode, rtl::OUString const& _sLocale)
-{
- OSL_ASSERT(_pNode != NULL);
-
- if ( localehelper::designatesAllLocales(localehelper::makeLocale(_sLocale)) ) // from expanded to expanded
- {
- return _pNode->clone();
- }
-
- else // needs reduction
- {
- OCloneForLocale aCloner(_sLocale);
- aCloner.applyToNode(*_pNode);
- return aCloner.getResult();
- }
-}
-//--------------------------------------------------------------------------
-
-// convert to the given locale format, assuming the original representation was expanded
-static rtl::Reference< data::TreeSegment > old_cloneExpandedForLocale(rtl::OUString const& _sName, INode const* _pNode, rtl::OUString const& _sLocale)
-{
- if (_pNode == NULL)
- return rtl::Reference< data::TreeSegment >();
-
- std::auto_ptr<INode> aResult;
- if (dynamic_cast< ISubtree const * >(_pNode) == 0) // simple value - nothing to reduce
- aResult = _pNode->clone();
-
- else
- aResult = impl_cloneExpandedForLocale(_pNode,_sLocale);
-
- return data::TreeSegment::create(_sName,aResult);
-}
-//--------------------------------------------------------------------------
-
-// -----------------------------------------------------------------------------
-//--------------------------------------------------------------------------
-rtl::Reference< data::TreeSegment > cloneExpandedForLocale(sharable::TreeFragment * tree, rtl::OUString const& _sLocale)
-{
- std::auto_ptr<INode> aOldTree = data::convertTree(tree, true);
-
- return old_cloneExpandedForLocale(tree->getName(), aOldTree.get(), _sLocale);
-}
-//--------------------------------------------------------------------------
-// convert to the given locale format, assuming the original representation was expanded
-std::auto_ptr<INode> reduceExpandedForLocale(std::auto_ptr<ISubtree> _pNode, rtl::OUString const& _sLocale)
-{
- std::auto_ptr<INode> aResult;
-
- if ( _pNode.get() == NULL || // nothing to reduce
- localehelper::designatesAllLocales(localehelper::makeLocale(_sLocale)) ) // from expanded to expanded
- {
- aResult.reset( _pNode.release() );
- }
-
- else // needs reduction
- {
- OCloneForLocale aCloner(_sLocale);
- aCloner.applyToNode(*_pNode);
- aResult = aCloner.getResult();
-
- OSL_ENSURE(aResult.get(),"Cloning a tree for a locale unexpectedly produced NOTHING");
- }
- return aResult;
-}
-//--------------------------------------------------------------------------
-namespace
-{
-//--------------------------------------------------------------------------
- class ExpandTreeForLocale : NodeModification
- {
- ISubtree & m_rParent;
- rtl::OUString const & m_aSourceLocale;
-
- ExpandTreeForLocale(ISubtree & _rParent,rtl::OUString const & _aSourceLocale)
- : m_rParent(_rParent)
- , m_aSourceLocale(_aSourceLocale)
- {}
-
- void handle(ISubtree& _rNode);
- void handle(ValueNode& _rNode);
-
- void substitute(std::auto_ptr<INode> _aExpanded);
- public:
- static void expand(ISubtree& _rTree, rtl::OUString const & _aSourceLocale)
- {
- ExpandTreeForLocale(_rTree,_aSourceLocale).applyToChildren(_rTree);
- }
-
- // returns NULL, if not a localized value
- static std::auto_ptr<ISubtree> expanded(ValueNode const& _aNode, rtl::OUString const & _aSourceLocale);
- };
-
-//--------------------------------------------------------------------------
- class ExpandChangesForLocale : ChangeTreeModification
- {
- SubtreeChange & m_rParent;
- rtl::OUString const & m_aSourceLocale;
-
- ExpandChangesForLocale(SubtreeChange & _rParent,rtl::OUString const & _aSourceLocale)
- : m_rParent(_rParent)
- , m_aSourceLocale(_aSourceLocale)
- {}
-
- void handle(SubtreeChange& _rNode);
- void handle(ValueChange& _rNode);
-
- void handle(AddNode& _rNode);
- void handle(RemoveNode& _rNode);
-
- void substitute(std::auto_ptr<Change> _aExpanded);
- public:
- static void expand(SubtreeChange& _rTree, rtl::OUString const & _aSourceLocale)
- {
- ExpandChangesForLocale(_rTree,_aSourceLocale).applyToChildren(_rTree);
- }
-
- // returns NULL, if not a localized value
- static std::auto_ptr<SubtreeChange> expanded(ValueChange const& _aNode, rtl::OUString const & _aSourceLocale);
- };
-//--------------------------------------------------------------------------
-inline
-void ExpandTreeForLocale::substitute(std::auto_ptr<INode> _aExpanded)
-{
- m_rParent.removeChild(_aExpanded->getName());
- m_rParent.addChild(_aExpanded);
-}
-
-//--------------------------------------------------------------------------
-void ExpandTreeForLocale::handle(ISubtree& _rNode)
-{
- expand(_rNode,m_aSourceLocale);
-}
-
-//--------------------------------------------------------------------------
-void ExpandTreeForLocale::handle(ValueNode& _rNode)
-{
- std::auto_ptr<ISubtree> aExpanded = expanded(_rNode,m_aSourceLocale);
-
- if (aExpanded.get())
- substitute( base_ptr(aExpanded) );
-}
-
-//--------------------------------------------------------------------------
-
-std::auto_ptr<ISubtree> ExpandTreeForLocale::expanded(ValueNode const& _aNode, rtl::OUString const & _aSourceLocale)
-{
- if (!_aNode.isLocalized()) return std::auto_ptr<ISubtree>();
-
- OTreeNodeFactory & rFactory = getDefaultTreeNodeFactory();
-
- node::Attributes aValueAttributes = _aNode.getAttributes();
-
- aValueAttributes.setLocalized(false);
- if (aValueAttributes.state() == node::isMerged)
- aValueAttributes.setState( node::isReplaced );
-
-
- std::auto_ptr<ValueNode> aValue = _aNode.isNull()
- ? rFactory.createNullValueNode(_aSourceLocale,_aNode.getValueType(),aValueAttributes)
- : rFactory.createValueNode(_aSourceLocale,_aNode.getValue(),aValueAttributes);
-
- std::auto_ptr<ISubtree> aRet = rFactory.createSetNode( _aNode.getName(),
- toTemplateName(_aNode.getValueType()),
- TEMPLATE_MODULE_LOCALIZED_VALUE,
- _aNode.getAttributes() );
-
- aRet->addChild(base_ptr(aValue));
-
- return aRet;
-}
-
-//--------------------------------------------------------------------------
-//--------------------------------------------------------------------------
-inline
-void ExpandChangesForLocale::substitute(std::auto_ptr<Change> _aExpanded)
-{
- m_rParent.removeChange(_aExpanded->getNodeName());
- m_rParent.addChange(_aExpanded);
-}
-
-//--------------------------------------------------------------------------
-
-void ExpandChangesForLocale::handle(SubtreeChange& _rNode)
-{
- expand(_rNode,m_aSourceLocale);
-}
-
-//--------------------------------------------------------------------------
-void ExpandChangesForLocale::handle(ValueChange& _rNode)
-{
- std::auto_ptr<SubtreeChange> aExpanded = expanded(_rNode,m_aSourceLocale);
-
- if (aExpanded.get())
- substitute( base_ptr( aExpanded ) );
-}
-
-//--------------------------------------------------------------------------
-void ExpandChangesForLocale::handle(AddNode& _rNode)
-{
- rtl::Reference< data::TreeSegment > seg(_rNode.getNewTree());
- std::auto_ptr<INode> pAdded(data::convertTree(seg.is() ? seg->fragment : 0, false));
- if (pAdded.get() != NULL)
- {
- std::auto_ptr<INode> pExpanded;
- if (ISubtree * pAddedTree = pAdded->asISubtree())
- {
- ExpandTreeForLocale::expand(*pAddedTree,m_aSourceLocale);
- pExpanded = pAdded;
- }
- else if(ValueNode * pAddedValue = pAdded->asValueNode())
- {
- pExpanded = base_ptr(ExpandTreeForLocale::expanded(*pAddedValue,m_aSourceLocale));
- }
- else
- OSL_ENSURE(false, "Cannot expand unknown Node type (found in AddNode)");
-
-
- if (pExpanded.get())
- {
- rtl::Reference< data::TreeSegment > aExpanded = data::TreeSegment::create( _rNode.getNodeName(),pExpanded);
- std::auto_ptr<AddNode> aExpandedAdd( new AddNode( aExpanded, _rNode.getNodeName(), _rNode.isToDefault() ) );
-
- if (_rNode.isReplacing()) aExpandedAdd->setReplacing();
-
- substitute( base_ptr( aExpandedAdd ) );
- }
- }
- else
- OSL_ENSURE(false, "Cannot expand AddNode without content");
-}
-
-//--------------------------------------------------------------------------
-void ExpandChangesForLocale::handle(RemoveNode& )
-{
- // nothing to do
-}
-
-//--------------------------------------------------------------------------
-std::auto_ptr<SubtreeChange> ExpandChangesForLocale::expanded(ValueChange const& _aNode, rtl::OUString const & _aSourceLocale)
-{
- std::auto_ptr<SubtreeChange> aRet;
- if (_aNode.isLocalizedValue())
- {
- OTreeNodeFactory & rNodeFactory = getDefaultTreeNodeFactory();
- OTreeChangeFactory & rFactory = getDefaultTreeChangeFactory();
-
- node::Attributes aValueAttributes = _aNode.getAttributes();
-
- aValueAttributes.setLocalized(false);
- if (aValueAttributes.state() == node::isMerged)
- aValueAttributes.setState( node::isReplaced );
-
-
- rtl::OUString const sTemplateName = toTemplateName(_aNode.getValueType());
-
- std::auto_ptr<ValueNode> aValue = _aNode.getNewValue().hasValue()
- ? rNodeFactory.createValueNode(sTemplateName,_aNode.getNewValue(),aValueAttributes)
- : rNodeFactory.createNullValueNode(sTemplateName,_aNode.getValueType(),aValueAttributes);
-
- rtl::Reference< data::TreeSegment > aValueSegment = data::TreeSegment::create(_aSourceLocale, base_ptr(aValue));
-
- std::auto_ptr<AddNode> aAddValue = rFactory.createAddNodeChange(aValueSegment,_aSourceLocale,_aNode.isToDefault());
- aAddValue->setReplacing();
-
- aRet = rFactory.createSetNodeChange( _aNode.getNodeName(),
- sTemplateName,
- TEMPLATE_MODULE_LOCALIZED_VALUE,
- _aNode.getAttributes() );
-
- aRet->addChange(base_ptr(aAddValue));
- }
- return aRet;
-}
-
-//--------------------------------------------------------------------------
-} // anonymous namespace
-//--------------------------------------------------------------------------
-
-//--------------------------------------------------------------------------
-//..........................................................................
-} // namespace configmgr
-//..........................................................................
-
-