#98489# Add layer writing service
This commit is contained in:
parent
fd60beea79
commit
490cc59a48
7 changed files with 1552 additions and 2 deletions
403
configmgr/source/xml/elementformatter.cxx
Normal file
403
configmgr/source/xml/elementformatter.cxx
Normal file
|
@ -0,0 +1,403 @@
|
|||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: elementformatter.cxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2002 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include "elementformatter.hxx"
|
||||
|
||||
#ifndef CONFIGMGR_XML_STRINGS_HXX_
|
||||
#include "xmlstrings.hxx"
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGMGR_TYPECONVERTER_HXX
|
||||
#include "typeconverter.hxx"
|
||||
#endif
|
||||
#ifndef CONFIGMGR_MISC_ATTRIBUTELIST_HXX
|
||||
#include "attributelist.hxx"
|
||||
#endif
|
||||
|
||||
#ifndef _RTL_USTRBUF_HXX_
|
||||
#include <rtl/ustrbuf.hxx>
|
||||
#endif
|
||||
|
||||
#include <drafts/com/sun/star/configuration/backend/SchemaAttribute.hpp>
|
||||
#include <drafts/com/sun/star/configuration/backend/NodeAttribute.hpp>
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
namespace configmgr
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace xml
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace uno = ::com::sun::star::uno;
|
||||
namespace sax = ::com::sun::star::xml::sax;
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
ElementFormatter::ElementFormatter()
|
||||
: m_aElementType(ElementType::unknown)
|
||||
, m_xAttributes()
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
ElementFormatter::~ElementFormatter()
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::reset()
|
||||
{
|
||||
m_aElementType = ElementType::unknown;
|
||||
m_xAttributes.clear();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addAttribute(OUString const & _anAttributeName, OUString const & _aValue)
|
||||
{
|
||||
OSL_PRECOND(m_xAttributes.is(),"Trying to add an attribute to a non-existing list");
|
||||
|
||||
m_xAttributes->addAttribute(_anAttributeName,
|
||||
XML_ATTRTYPE_CDATA,
|
||||
_aValue);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addAttribute(OUString const & _anAttributeName, bool _bValue)
|
||||
{
|
||||
OSL_PRECOND(m_xAttributes.is(),"Trying to add an attribute to a non-existing list");
|
||||
|
||||
m_xAttributes->addAttribute(_anAttributeName,
|
||||
XML_ATTRTYPE_CDATA,
|
||||
_bValue ? ATTR_VALUE_TRUE : ATTR_VALUE_FALSE);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addNamespaces()
|
||||
{
|
||||
static OUString const sNamespaceDecl( RTL_CONSTASCII_USTRINGPARAM("xmlns:") );
|
||||
|
||||
addAttribute( sNamespaceDecl.concat(NS_PREFIX_OOR), NS_URI_OOR);
|
||||
addAttribute( sNamespaceDecl.concat(NS_PREFIX_XS ), NS_URI_XS );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::prepareElement(ElementInfo const& _aInfo)
|
||||
{
|
||||
if (!m_xAttributes.is())
|
||||
{
|
||||
m_xAttributes.set( new AttributeListImpl() );
|
||||
addNamespaces();
|
||||
}
|
||||
else
|
||||
m_xAttributes->clear();
|
||||
|
||||
m_aElementType = _aInfo.type;
|
||||
|
||||
addName(_aInfo.name);
|
||||
addNodeFlags(_aInfo.flags);
|
||||
addOperation(_aInfo.op);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addName(OUString const & _aName)
|
||||
{
|
||||
// TODO: split off package part to ATTR_CONTEXT (?)
|
||||
|
||||
if (_aName.getLength()) addAttribute(ATTR_NAME, _aName);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
inline
|
||||
void ElementFormatter::maybeAddFlag(FlagsType _eFlags, FlagsType _eSelect, OUString const & _anAttributeName, bool _bValue)
|
||||
{
|
||||
if (_eFlags & _eSelect) addAttribute(_anAttributeName,_bValue);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addNodeFlags(FlagsType _eFlags)
|
||||
{
|
||||
using namespace drafts::com::sun::star::configuration::backend;;
|
||||
|
||||
maybeAddFlag(_eFlags,SchemaAttribute::REQUIRED, ATTR_FLAG_NULLABLE, false);
|
||||
maybeAddFlag(_eFlags,SchemaAttribute::LOCALIZED, ATTR_FLAG_LOCALIZED);
|
||||
maybeAddFlag(_eFlags,SchemaAttribute::EXTENSIBLE, ATTR_FLAG_EXTENSIBLE);
|
||||
|
||||
maybeAddFlag(_eFlags,NodeAttribute::FINALIZED, ATTR_FLAG_FINALIZED);
|
||||
maybeAddFlag(_eFlags,NodeAttribute::MANDATORY, ATTR_FLAG_MANDATORY);
|
||||
maybeAddFlag(_eFlags,NodeAttribute::READONLY, ATTR_FLAG_READONLY);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addOperation(Operation::Enum _eOp)
|
||||
{
|
||||
switch (_eOp)
|
||||
{
|
||||
case Operation::none: break;
|
||||
case Operation::modify: addAttribute(ATTR_OPERATION, OPERATION_MODIFY); break;
|
||||
case Operation::replace: addAttribute(ATTR_OPERATION, OPERATION_REPLACE); break;
|
||||
case Operation::remove: addAttribute(ATTR_OPERATION, OPERATION_REMOVE); break;
|
||||
|
||||
case Operation::unknown:
|
||||
OSL_ENSURE(false, "ElementFormatter: Trying to add attribute for 'unknown' operation");
|
||||
break;
|
||||
default:
|
||||
OSL_ENSURE(false, "ElementFormatter: Trying to add attribute for invalid operation");
|
||||
break;
|
||||
}
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addInstanceType(OUString const & _aElementType, OUString const & _aElementTypeModule)
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addPropertyValueType(uno::Type const& _aType)
|
||||
{
|
||||
if (_aType == uno::Type()) return;
|
||||
|
||||
bool bList = false;
|
||||
uno::Type aSimpleType = getBasicType(_aType, bList);
|
||||
uno::TypeClass aSimpleTypeClass = aSimpleType.getTypeClass();
|
||||
OUString aSimpleTypeName = toTypeName(aSimpleTypeClass);
|
||||
|
||||
OUString sNsPrefix = (bList || aSimpleTypeClass == uno::TypeClass_ANY) ? NS_PREFIX_OOR : NS_PREFIX_XS;
|
||||
|
||||
rtl::OUStringBuffer aTypeNameBuf(sNsPrefix);
|
||||
|
||||
if (sNsPrefix.getLength())
|
||||
aTypeNameBuf. append(k_NS_SEPARATOR);
|
||||
|
||||
aTypeNameBuf. append(aSimpleTypeName);
|
||||
|
||||
if (bList)
|
||||
aTypeNameBuf. append(VALUETYPE_LIST_SUFFIX);
|
||||
|
||||
addAttribute( ATTR_VALUETYPE, aTypeNameBuf.makeStringAndClear());
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addLanguage(OUString const & _sLanguage)
|
||||
{
|
||||
OSL_ENSURE(_sLanguage.getLength(), "ElementFormatter: Trying to add empty language attribute");
|
||||
addAttribute(EXT_ATTR_LANGUAGE, _sLanguage);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addIsNull(bool _bIsNull)
|
||||
{
|
||||
addAttribute( EXT_ATTR_NULL, _bIsNull);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void ElementFormatter::addSeparator(OUString const& _sSeparator)
|
||||
{
|
||||
addAttribute( ATTR_VALUESEPARATOR, _sSeparator);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
OUString ElementFormatter::getElementTag() const
|
||||
{
|
||||
switch (m_aElementType)
|
||||
{
|
||||
case ElementType::schema: return TAG_SCHEMA;
|
||||
|
||||
case ElementType::component: return TAG_COMPONENT;
|
||||
case ElementType::templates: return TAG_TEMPLATES;
|
||||
|
||||
case ElementType::property: return TAG_PROP;
|
||||
case ElementType::node: return TAG_NODE;
|
||||
case ElementType::group: return TAG_GROUP;
|
||||
case ElementType::set: return TAG_SET;
|
||||
|
||||
case ElementType::import: return TAG_IMPORT;
|
||||
case ElementType::instance: return TAG_INSTANCE;
|
||||
case ElementType::item_type: return TAG_ITEMTYPE;
|
||||
case ElementType::value: return TAG_VALUE;
|
||||
|
||||
case ElementType::unknown:
|
||||
OSL_ENSURE(false, "ElementFormatter: Trying to get Tag for 'unknown' element type");
|
||||
break;
|
||||
case ElementType::other:
|
||||
OSL_ENSURE(false, "ElementFormatter: Trying to get Tag for 'other' element type");
|
||||
break;
|
||||
default:
|
||||
OSL_ENSURE(false, "ElementFormatter: Trying to get Tag for invalid element type");
|
||||
break;
|
||||
}
|
||||
return OUString();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
uno::Reference< sax::XAttributeList > ElementFormatter::getElementAttributes() const
|
||||
{
|
||||
return m_xAttributes.get();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
#if 0
|
||||
/// retrieve data type of a property,
|
||||
uno::Type ElementParser::getPropertyValueType(SaxAttributeList const& xAttribs) const
|
||||
{
|
||||
OUString sTypeName;
|
||||
if (!this->maybeGetAttribute(xAttribs, ATTR_VALUETYPE, sTypeName))
|
||||
return uno::Type(); // => VOID
|
||||
|
||||
uno::Type aType;
|
||||
|
||||
if (matchSuffix(sTypeName,VALUETYPE_LIST_SUFFIX))
|
||||
{
|
||||
OUString sBasicName = stripTypeName( stripSuffix(sTypeName,VALUETYPE_LIST_SUFFIX), NS_PREFIX_OOR );
|
||||
|
||||
aType = toListType(sBasicName);
|
||||
}
|
||||
else
|
||||
{
|
||||
OUString sBasicName = stripTypeName( sTypeName, NS_PREFIX_OOR );
|
||||
|
||||
aType = toType(sBasicName);
|
||||
}
|
||||
|
||||
if (aType == uno::Type())
|
||||
badValueType("Unknown type name: ", sTypeName);
|
||||
|
||||
return aType;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
/// retrieve element type and associated module name of a set,
|
||||
bool ElementParser::getSetElementType(SaxAttributeList const& xAttribs, OUString& aElementType, OUString& aElementTypeModule) const
|
||||
{
|
||||
if (!this->maybeGetAttribute(xAttribs, ATTR_ITEMTYPE, aElementType))
|
||||
return false;
|
||||
|
||||
maybeGetAttribute(xAttribs, ATTR_ITEMTYPECOMPONENT, aElementTypeModule);
|
||||
|
||||
return true;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
/// retrieve instance type and associated module name of a set,
|
||||
bool ElementParser::getInstanceType(SaxAttributeList const& xAttribs, OUString& aElementType, OUString& aElementTypeModule) const
|
||||
{
|
||||
if (!this->maybeGetAttribute(xAttribs, ATTR_ITEMTYPE, aElementType))
|
||||
return false;
|
||||
|
||||
maybeGetAttribute(xAttribs, ATTR_ITEMTYPECOMPONENT, aElementTypeModule);
|
||||
|
||||
return true;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
/// retrieve the component for an import or uses element,
|
||||
bool ElementParser::getImportComponent(SaxAttributeList const& xAttribs, OUString& _rsComponent) const
|
||||
{
|
||||
return this->maybeGetAttribute(xAttribs, ATTR_COMPONENT, _rsComponent);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// low-level internal methods
|
||||
/// checks for presence of a boolean attribute and assigns its value if it exists (and is a bool)
|
||||
bool ElementParser::maybeGetAttribute(SaxAttributeList const& xAttribs, OUString const& aAttributeName, bool& rAttributeValue) const
|
||||
{
|
||||
OUString sAttribute;
|
||||
|
||||
if ( !this->maybeGetAttribute(xAttribs, aAttributeName, sAttribute) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
else if (sAttribute.equals(ATTR_VALUE_TRUE))
|
||||
rAttributeValue = true; // will return true
|
||||
|
||||
else if (sAttribute.equals(ATTR_VALUE_FALSE))
|
||||
rAttributeValue = false; // will return true
|
||||
|
||||
else
|
||||
{
|
||||
OSL_ENSURE(sAttribute.getLength() == 0, "Invalid text found in boolean attribute");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
/// checks for presence of an attribute and assigns its value if it exists
|
||||
bool ElementParser::maybeGetAttribute(SaxAttributeList const& xAttribs, OUString const& aAttributeName, OUString& rAttributeValue) const
|
||||
{
|
||||
return xAttribs.is() && impl_maybeGetAttribute(xAttribs, aAttributeName, rAttributeValue);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
/// assigns an attribute value or an empty string if it doesn't exist
|
||||
void ElementParser::alwaysGetAttribute(SaxAttributeList const& xAttribs, OUString const& aAttributeName, OUString& rAttributeValue) const
|
||||
{
|
||||
if (xAttribs.is())
|
||||
rAttributeValue = xAttribs->getValueByName(aAttributeName);
|
||||
else
|
||||
rAttributeValue = OUString();
|
||||
}
|
||||
#endif
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
154
configmgr/source/xml/elementformatter.hxx
Normal file
154
configmgr/source/xml/elementformatter.hxx
Normal file
|
@ -0,0 +1,154 @@
|
|||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: elementformatter.hxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2002 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#ifndef CONFIGMGR_XML_ELEMENTFORMATTER_HXX
|
||||
#define CONFIGMGR_XML_ELEMENTFORMATTER_HXX
|
||||
|
||||
#ifndef CONFIGMGR_XML_ELEMENTINFO_HXX
|
||||
#include "elementinfo.hxx"
|
||||
#endif
|
||||
|
||||
#ifndef _COM_SUN_STAR_XML_SAX_XATTRIBUTELIST_HPP_
|
||||
#include <com/sun/star/xml/sax/XAttributeList.hpp>
|
||||
#endif
|
||||
|
||||
#include <rtl/ref.hxx>
|
||||
|
||||
namespace configmgr
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
class AttributeListImpl;
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace xml
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace uno = ::com::sun::star::uno;
|
||||
namespace sax = ::com::sun::star::xml::sax;
|
||||
|
||||
using rtl::OUString;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
class ElementFormatter
|
||||
{
|
||||
public:
|
||||
typedef uno::Reference< sax::XAttributeList > SaxAttributeList;
|
||||
typedef ElementInfo::FlagsType FlagsType;
|
||||
public:
|
||||
ElementFormatter();
|
||||
~ElementFormatter();
|
||||
|
||||
/// reset the formatter for a new document
|
||||
void reset();
|
||||
|
||||
/// resets the formatter for a new element type
|
||||
void prepareElement(ElementInfo const& _aInfo);
|
||||
|
||||
/// sets the instantiated type of a set item,
|
||||
void addInstanceType(OUString const & _aElementType, OUString const & _aElementTypeModule);
|
||||
|
||||
/// retrieve element type and associated module name of a set,
|
||||
void addPropertyValueType(uno::Type const& _aType);
|
||||
|
||||
/// add a language for the current element
|
||||
void addLanguage(OUString const & _sLanguage);
|
||||
|
||||
/// adds a value attribute to the attribute list
|
||||
void addIsNull(bool _bIsNull = true);
|
||||
|
||||
/// adds a value attribute to the attribute list
|
||||
void addSeparator(OUString const& _sSeparator);
|
||||
|
||||
/// retrieve the tag to use for the current element
|
||||
OUString getElementTag() const;
|
||||
|
||||
/// retrieve the attributes to use for the current element
|
||||
SaxAttributeList getElementAttributes() const;
|
||||
|
||||
/// retrieve the attributes to use for an element with associated component
|
||||
private:
|
||||
void addNamespaces();
|
||||
/// sets an attributes for a node
|
||||
void addName(OUString const & _aName);
|
||||
/// sets attributes for nodes from the flags
|
||||
void addNodeFlags(FlagsType _eFlags);
|
||||
/// sets attributes for nodes from the flags
|
||||
void addOperation(Operation::Enum _eOp);
|
||||
/// sets attributes for nodes from the flags
|
||||
void maybeAddFlag(FlagsType _eFlags, FlagsType _eSelect,
|
||||
OUString const & _anAttributeName, bool _bValue = true);
|
||||
|
||||
/// sets attributes for nodes
|
||||
void addAttribute(OUString const & _anAttributeName, OUString const & _aValue);
|
||||
void addAttribute(OUString const & _anAttributeName, bool _bValue);
|
||||
|
||||
private:
|
||||
ElementType::Enum m_aElementType;
|
||||
rtl::Reference<AttributeListImpl> m_xAttributes;
|
||||
};
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace xml
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace configmgr
|
||||
|
||||
#endif
|
||||
|
347
configmgr/source/xml/layerwriter.cxx
Normal file
347
configmgr/source/xml/layerwriter.cxx
Normal file
|
@ -0,0 +1,347 @@
|
|||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: layerwriter.cxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2002 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include "layerwriter.hxx"
|
||||
|
||||
#ifndef CONFIGMGR_API_FACTORY_HXX_
|
||||
#include "confapifactory.hxx"
|
||||
#endif
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
namespace configmgr
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace xml
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace uno = ::com::sun::star::uno;
|
||||
namespace sax = ::com::sun::star::xml::sax;
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
uno::Reference< uno::XInterface > SAL_CALL instantiateLayerWriter
|
||||
( CreationContext const& rServiceManager )
|
||||
{
|
||||
return * new LayerWriter(rServiceManager);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
LayerWriter::LayerWriter(ServiceFactory const & _xSvcFactory)
|
||||
: LayerWriterService_Base(_xSvcFactory)
|
||||
, m_bInProperty(false)
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
LayerWriter::~LayerWriter()
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::startLayer( )
|
||||
throw (backenduno::MalformedDataException, uno::RuntimeException)
|
||||
{
|
||||
m_aFormatter.reset();
|
||||
m_bInProperty = false;
|
||||
|
||||
checkInElement(false);
|
||||
|
||||
getWriteHandler()->startDocument();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::endLayer( )
|
||||
throw (backenduno::MalformedDataException, lang::IllegalAccessException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(false);
|
||||
|
||||
getWriteHandler()->endDocument();
|
||||
m_aFormatter.reset();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::overrideNode( const OUString& aName, sal_Int16 aAttributes )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
ElementInfo aInfo(aName, ElementType::node);
|
||||
aInfo.flags = aAttributes;
|
||||
aInfo.op = Operation::modify;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
|
||||
this->startNode();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::addOrReplaceNode( const OUString& aName, sal_Int16 aAttributes )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
|
||||
ElementInfo aInfo(aName, ElementType::node);
|
||||
aInfo.flags = aAttributes;
|
||||
aInfo.op = Operation::replace;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
|
||||
this->startNode();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::addOrReplaceNodeFromTemplate( const OUString& aName, const backenduno::TemplateIdentifier& aTemplate, sal_Int16 aAttributes )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, beans::IllegalTypeException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
|
||||
ElementInfo aInfo(aName, ElementType::node);
|
||||
aInfo.flags = aAttributes;
|
||||
aInfo.op = Operation::replace;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
m_aFormatter.addInstanceType(aTemplate.Name,aTemplate.Component);
|
||||
|
||||
this->startNode();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::endNode( )
|
||||
throw (backenduno::MalformedDataException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
this->endElement();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::dropNode( const OUString& aName )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
|
||||
ElementInfo aInfo(aName, ElementType::node);
|
||||
aInfo.flags = 0;
|
||||
aInfo.op = Operation::remove;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
|
||||
this->startNode();
|
||||
this->endElement();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::addProperty( const OUString& aName, sal_Int16 aAttributes, const uno::Type& aType )
|
||||
throw (backenduno::MalformedDataException, beans::PropertyExistException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
|
||||
ElementInfo aInfo(aName, ElementType::property);
|
||||
aInfo.flags = aAttributes;
|
||||
aInfo.op = Operation::replace;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
|
||||
this->startProp(aType, true);
|
||||
this->writeValue(uno::Any());
|
||||
this->endElement();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::addPropertyWithValue( const OUString& aName, sal_Int16 aAttributes, const uno::Any& aValue )
|
||||
throw (backenduno::MalformedDataException, beans::PropertyExistException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
|
||||
ElementInfo aInfo(aName, ElementType::property);
|
||||
aInfo.flags = aAttributes;
|
||||
aInfo.op = Operation::replace;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
|
||||
this->startProp(aValue.getValueType(), true);
|
||||
this->writeValue(aValue);
|
||||
this->endElement();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::overrideProperty( const OUString& aName, sal_Int16 aAttributes, const uno::Type& aType )
|
||||
throw (backenduno::MalformedDataException, beans::UnknownPropertyException, beans::IllegalTypeException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true);
|
||||
|
||||
ElementInfo aInfo(aName, ElementType::property);
|
||||
aInfo.flags = aAttributes;
|
||||
aInfo.op = Operation::modify;
|
||||
|
||||
m_aFormatter.prepareElement(aInfo);
|
||||
|
||||
this->startProp(aType, false);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::endProperty( )
|
||||
throw (backenduno::MalformedDataException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true,true);
|
||||
this->endElement();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::setPropertyValue( const uno::Any& aValue )
|
||||
throw (backenduno::MalformedDataException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true,true);
|
||||
this->writeValue(aValue);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SAL_CALL LayerWriter::setPropertyValueForLocale( const uno::Any& aValue, const OUString& aLocale )
|
||||
throw (backenduno::MalformedDataException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException)
|
||||
{
|
||||
checkInElement(true,true);
|
||||
this->writeValue(aValue,aLocale);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::raiseMalformedDataException(sal_Char const * pMsg)
|
||||
{
|
||||
OSL_ASSERT(pMsg);
|
||||
OUString sMsg = OUString::createFromAscii(pMsg);
|
||||
|
||||
throw backenduno::MalformedDataException( sMsg, *this );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::raiseIllegalTypeException(sal_Char const * pMsg)
|
||||
{
|
||||
OSL_ASSERT(pMsg);
|
||||
OUString sMsg = OUString::createFromAscii(pMsg);
|
||||
|
||||
throw beans::IllegalTypeException( sMsg, *this );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::checkInElement(bool bInElement, bool bInProperty)
|
||||
{
|
||||
if (bInElement != m_aTagStack.empty())
|
||||
{
|
||||
sal_Char const * pMsg = bInElement ?
|
||||
"LayerWriter: Illegal Data: Operation requires a started node" :
|
||||
"LayerWriter: Illegal Data: There is a started node already" ;
|
||||
raiseMalformedDataException(pMsg);
|
||||
}
|
||||
|
||||
if (bInProperty != m_bInProperty)
|
||||
{
|
||||
sal_Char const * pMsg = bInProperty ?
|
||||
"LayerWriter: Illegal Data: Operation requires a started property" :
|
||||
"LayerWriter: Illegal Data: There is a started property already" ;
|
||||
raiseMalformedDataException(pMsg);
|
||||
}
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::startNode()
|
||||
{
|
||||
OUString sTag = m_aFormatter.getElementTag();
|
||||
getWriteHandler()->startElement(sTag,m_aFormatter.getElementAttributes());
|
||||
m_aTagStack.push(sTag);
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::startProp(uno::Type const & _aType, bool bNeedType)
|
||||
{
|
||||
if (bNeedType && _aType == uno::Type())
|
||||
raiseIllegalTypeException("LayerWriter: Illegal Data: Cannot add VOID property");
|
||||
|
||||
m_aFormatter.addPropertyValueType(_aType);
|
||||
|
||||
startNode();
|
||||
|
||||
m_aPropertyType = _aType;
|
||||
m_bInProperty = true;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::endElement()
|
||||
{
|
||||
OSL_ASSERT(!m_aTagStack.empty()); // checks done elsewhere
|
||||
|
||||
getWriteHandler()->endElement(m_aTagStack.top());
|
||||
m_aTagStack.pop();
|
||||
m_bInProperty = false;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::writeValue(uno::Any const & _aValue)
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void LayerWriter::writeValue(uno::Any const & _aValue, OUString const & _aLocale)
|
||||
{
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace
|
||||
|
187
configmgr/source/xml/layerwriter.hxx
Normal file
187
configmgr/source/xml/layerwriter.hxx
Normal file
|
@ -0,0 +1,187 @@
|
|||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: layerwriter.hxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2000 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#ifndef CONFIGMGR_XML_LAYERWRITER_HXX
|
||||
#define CONFIGMGR_XML_LAYERWRITER_HXX
|
||||
|
||||
#ifndef CONFIGMGR_XML_WRITERSVC_HXX
|
||||
#include "writersvc.hxx"
|
||||
#endif
|
||||
|
||||
#ifndef CONFIGMGR_XML_ELEMENTFORMATTER_HXX
|
||||
#include "elementformatter.hxx"
|
||||
#endif
|
||||
|
||||
#include <drafts/com/sun/star/configuration/backend/XLayerHandler.hpp>
|
||||
|
||||
#ifndef INCLUDED_STACK
|
||||
#include <stack>
|
||||
#define INCLUDED_STACK
|
||||
#endif
|
||||
|
||||
namespace configmgr
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace xml
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace uno = ::com::sun::star::uno;
|
||||
namespace lang = ::com::sun::star::lang;
|
||||
namespace beans = ::com::sun::star::beans;
|
||||
namespace container = ::com::sun::star::container;
|
||||
|
||||
namespace sax = ::com::sun::star::xml::sax;
|
||||
namespace backenduno = ::drafts::com::sun::star::configuration::backend;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
class LayerWriter : public LayerWriterService_Base
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
LayerWriter(ServiceFactory const & _xSvcFactory);
|
||||
virtual ~LayerWriter();
|
||||
|
||||
// XLayerHandler
|
||||
public:
|
||||
virtual void SAL_CALL
|
||||
startLayer( )
|
||||
throw (backenduno::MalformedDataException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
endLayer( )
|
||||
throw (backenduno::MalformedDataException, lang::IllegalAccessException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
overrideNode( const OUString& aName, sal_Int16 aAttributes )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
addOrReplaceNode( const OUString& aName, sal_Int16 aAttributes )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
addOrReplaceNodeFromTemplate( const OUString& aName, const backenduno::TemplateIdentifier& aTemplate, sal_Int16 aAttributes )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, beans::IllegalTypeException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
endNode( )
|
||||
throw (backenduno::MalformedDataException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
dropNode( const OUString& aName )
|
||||
throw (backenduno::MalformedDataException, container::NoSuchElementException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
overrideProperty( const OUString& aName, sal_Int16 aAttributes, const uno::Type& aType )
|
||||
throw (backenduno::MalformedDataException, beans::UnknownPropertyException, beans::IllegalTypeException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
addProperty( const OUString& aName, sal_Int16 aAttributes, const uno::Type& aType )
|
||||
throw (backenduno::MalformedDataException, beans::PropertyExistException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
addPropertyWithValue( const OUString& aName, sal_Int16 aAttributes, const uno::Any& aValue )
|
||||
throw (backenduno::MalformedDataException, beans::PropertyExistException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
endProperty( )
|
||||
throw (backenduno::MalformedDataException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
setPropertyValue( const uno::Any& aValue )
|
||||
throw (backenduno::MalformedDataException, beans::IllegalTypeException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
virtual void SAL_CALL
|
||||
setPropertyValueForLocale( const uno::Any& aValue, const OUString& aLocale )
|
||||
throw (backenduno::MalformedDataException, beans::IllegalTypeException, lang::IllegalAccessException, lang::IllegalArgumentException, uno::RuntimeException);
|
||||
|
||||
private:
|
||||
void checkInElement(bool bInElement, bool bInProperty = false);
|
||||
|
||||
void startNode();
|
||||
void startProp(uno::Type const & _aType, bool bNeedType);
|
||||
|
||||
void endElement();
|
||||
|
||||
void writeValue(uno::Any const & _aValue);
|
||||
void writeValue(uno::Any const & _aValue, OUString const & _aLocale);
|
||||
|
||||
void raiseMalformedDataException(sal_Char const * pMsg);
|
||||
void raiseIllegalTypeException(sal_Char const * pMsg);
|
||||
private:
|
||||
typedef std::stack< OUString > TagStack;
|
||||
TagStack m_aTagStack;
|
||||
ElementFormatter m_aFormatter;
|
||||
uno::Type m_aPropertyType;
|
||||
bool m_bInProperty;
|
||||
};
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace xml
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
} // namespace configmgr
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
@ -2,9 +2,9 @@
|
|||
#
|
||||
# $RCSfile: makefile.mk,v $
|
||||
#
|
||||
# $Revision: 1.16 $
|
||||
# $Revision: 1.17 $
|
||||
#
|
||||
# last change: $Author: jb $ $Date: 2002-05-16 11:00:29 $
|
||||
# last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
#
|
||||
# The Contents of this file are made available subject to the terms of
|
||||
# either of the following licenses
|
||||
|
@ -100,10 +100,13 @@ SLOFILES=\
|
|||
$(SLO)$/binarybasereader.obj \
|
||||
$(SLO)$/generatecache.obj \
|
||||
$(SLO)$/elementparser.obj \
|
||||
$(SLO)$/elementformatter.obj \
|
||||
$(SLO)$/basicparser.obj \
|
||||
$(SLO)$/layerparser.obj \
|
||||
$(SLO)$/schemaparser.obj \
|
||||
$(SLO)$/parsersvc.obj \
|
||||
$(SLO)$/writersvc.obj \
|
||||
$(SLO)$/layerwriter.obj \
|
||||
$(SLO)$/xmlstrings.obj \
|
||||
|
||||
# --- Targets ---
|
||||
|
|
279
configmgr/source/xml/writersvc.cxx
Normal file
279
configmgr/source/xml/writersvc.cxx
Normal file
|
@ -0,0 +1,279 @@
|
|||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: writersvc.cxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2002 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include "writersvc.hxx"
|
||||
|
||||
#ifndef CONFIGMGR_API_FACTORY_HXX_
|
||||
#include "confapifactory.hxx"
|
||||
#endif
|
||||
|
||||
#include <drafts/com/sun/star/configuration/backend/XLayerHandler.hpp>
|
||||
#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
namespace configmgr
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace xml
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace uno = ::com::sun::star::uno;
|
||||
namespace lang = ::com::sun::star::lang;
|
||||
namespace io = ::com::sun::star::io;
|
||||
namespace sax = ::com::sun::star::xml::sax;
|
||||
namespace backenduno = drafts::com::sun::star::configuration::backend;
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
struct WriterServiceTraits;
|
||||
// -----------------------------------------------------------------------------
|
||||
static inline void clear(OUString & _rs) { _rs = OUString(); }
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
template <class BackendInterface>
|
||||
WriterService<BackendInterface>::WriterService(CreationArg _xServiceFactory)
|
||||
: m_xServiceFactory(_xServiceFactory)
|
||||
, m_xWriter()
|
||||
{
|
||||
if (!m_xServiceFactory.is())
|
||||
{
|
||||
OUString sMessage( RTL_CONSTASCII_USTRINGPARAM("Configuration XML Writer: Unexpected NULL context"));
|
||||
throw uno::RuntimeException(sMessage,NULL);
|
||||
}
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// XInitialization
|
||||
template <class BackendInterface>
|
||||
void SAL_CALL
|
||||
WriterService<BackendInterface>::initialize( const uno::Sequence< uno::Any >& aArguments )
|
||||
throw (uno::Exception, uno::RuntimeException)
|
||||
{
|
||||
switch(aArguments.getLength())
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
case 1:
|
||||
{
|
||||
if (aArguments[0] >>= m_xWriter)
|
||||
break;
|
||||
|
||||
uno::Reference< io::XOutputStream > xStream;
|
||||
|
||||
if (aArguments[0] >>= xStream)
|
||||
{
|
||||
this->setOutputStream(xStream);
|
||||
break;
|
||||
}
|
||||
|
||||
OUString sMessage( RTL_CONSTASCII_USTRINGPARAM("Cannot use argument to initialize a Configuration XML Writer"
|
||||
"- SAX XDocumentHandler or XOutputStream expected"));
|
||||
throw lang::IllegalArgumentException(sMessage,*this,1);
|
||||
}
|
||||
default:
|
||||
{
|
||||
OUString sMessage( RTL_CONSTASCII_USTRINGPARAM("Too many arguments to initialize a Configuration Parser"));
|
||||
throw lang::IllegalArgumentException(sMessage,*this,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
inline
|
||||
ServiceInfoHelper WriterService<BackendInterface>::getServiceInfo()
|
||||
{
|
||||
return WriterServiceTraits<BackendInterface>::getServiceInfo();
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// XServiceInfo
|
||||
template <class BackendInterface>
|
||||
::rtl::OUString SAL_CALL
|
||||
WriterService<BackendInterface>::getImplementationName( )
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
return getServiceInfo().getImplementationName( );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
sal_Bool SAL_CALL
|
||||
WriterService<BackendInterface>::supportsService( const ::rtl::OUString& ServiceName )
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
return getServiceInfo().supportsService( ServiceName );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
uno::Sequence< ::rtl::OUString > SAL_CALL
|
||||
WriterService<BackendInterface>::getSupportedServiceNames( )
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
return getServiceInfo().getSupportedServiceNames( );
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
void SAL_CALL
|
||||
WriterService<BackendInterface>::setOutputStream( const uno::Reference< io::XOutputStream >& aStream )
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
uno::Reference< io::XActiveDataSource > xDS( m_xWriter, uno::UNO_QUERY );
|
||||
|
||||
if (xDS.is())
|
||||
{
|
||||
xDS->setOutputStream(aStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
SaxHandler xNewHandler = this->createHandler();
|
||||
|
||||
xDS.set( xNewHandler, uno::UNO_QUERY );
|
||||
if (!xDS.is())
|
||||
{
|
||||
OUString sMessage( RTL_CONSTASCII_USTRINGPARAM("Configuration XML Writer: Cannot set output stream to sax.Writer - missing interface XActiveDataSource."));
|
||||
throw uno::RuntimeException(sMessage,*this);
|
||||
}
|
||||
xDS->setOutputStream(aStream);
|
||||
|
||||
m_xWriter = xNewHandler;
|
||||
}
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
uno::Reference< io::XOutputStream > SAL_CALL
|
||||
WriterService<BackendInterface>::getOutputStream( )
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
uno::Reference< io::XActiveDataSource > xDS( m_xWriter, uno::UNO_QUERY );
|
||||
|
||||
return xDS.is()? xDS->getOutputStream() : NULL;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
uno::Reference< sax::XDocumentHandler > WriterService<BackendInterface>::getWriteHandler()
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
if (!m_xWriter.is())
|
||||
m_xWriter = this->createHandler();
|
||||
|
||||
return m_xWriter;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
uno::Reference< sax::XDocumentHandler > WriterService<BackendInterface>::createHandler() const
|
||||
throw (uno::RuntimeException)
|
||||
{
|
||||
static rtl::OUString const k_sSaxWriterSvc( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Writer") );
|
||||
|
||||
return SaxHandler::query( getServiceFactory()->createInstance(k_sSaxWriterSvc) );
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
AsciiServiceName const aLayerWriterServices[] =
|
||||
{
|
||||
"com.sun.star.configuration.backend.xml.LayerWriter",
|
||||
0
|
||||
};
|
||||
const ServiceInfo aLayerWriterSI =
|
||||
{
|
||||
"com.sun.star.comp.configuration.backend.xml.LayerWriter",
|
||||
aLayerWriterServices
|
||||
};
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
template <>
|
||||
struct WriterServiceTraits< backenduno::XLayerHandler >
|
||||
{
|
||||
typedef backenduno::XLayerHandler Handler;
|
||||
|
||||
static ServiceInfo const * getServiceInfo()
|
||||
{ return & aLayerWriterSI; }
|
||||
};
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
const ServiceInfo* getLayerWriterServiceInfo()
|
||||
{ return & aLayerWriterSI; }
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// instantiate here !
|
||||
template class WriterService< backenduno::XLayerHandler >;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace
|
||||
|
177
configmgr/source/xml/writersvc.hxx
Normal file
177
configmgr/source/xml/writersvc.hxx
Normal file
|
@ -0,0 +1,177 @@
|
|||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: writersvc.hxx,v $
|
||||
*
|
||||
* $Revision: 1.1 $
|
||||
*
|
||||
* last change: $Author: jb $ $Date: 2002-05-27 10:39:04 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2002 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#ifndef CONFIGMGR_XML_WRITERSVC_HXX
|
||||
#define CONFIGMGR_XML_WRITERSVC_HXX
|
||||
|
||||
#ifndef CONFIGMGR_SERVICEINFOHELPER_HXX_
|
||||
#include "serviceinfohelper.hxx"
|
||||
#endif
|
||||
|
||||
#ifndef _CPPUHELPER_IMPLBASE4_HXX_
|
||||
#include <cppuhelper/implbase4.hxx>
|
||||
#endif
|
||||
|
||||
#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
|
||||
#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||
#endif
|
||||
#ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_
|
||||
#include <com/sun/star/lang/XInitialization.hpp>
|
||||
#endif
|
||||
#ifndef _COM_SUN_STAR_IO_XACTIVEDATASOURCE_HPP_
|
||||
#include <com/sun/star/io/XActiveDataSource.hpp>
|
||||
#endif
|
||||
#ifndef _COM_SUN_STAR_XML_SAX_XDOCUMENTHANDLER_HPP_
|
||||
#include <com/sun/star/xml/sax/XDocumenthandler.hpp>
|
||||
#endif
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace drafts {
|
||||
namespace com { namespace sun { namespace star { namespace configuration { namespace backend {
|
||||
class XLayerHandler;
|
||||
} } } } }
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
namespace configmgr
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
namespace xml
|
||||
{
|
||||
// -----------------------------------------------------------------------------
|
||||
using rtl::OUString;
|
||||
namespace uno = ::com::sun::star::uno;
|
||||
namespace lang = ::com::sun::star::lang;
|
||||
namespace io = ::com::sun::star::io;
|
||||
namespace sax = ::com::sun::star::xml::sax;
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <class BackendInterface>
|
||||
class WriterService : public ::cppu::WeakImplHelper4<
|
||||
lang::XInitialization,
|
||||
lang::XServiceInfo,
|
||||
io::XActiveDataSource,
|
||||
BackendInterface
|
||||
>
|
||||
{
|
||||
public:
|
||||
typedef uno::Reference< lang::XMultiServiceFactory > const & CreationArg;
|
||||
|
||||
explicit
|
||||
WriterService(CreationArg _xServiceFactory);
|
||||
|
||||
// XInitialization
|
||||
virtual void SAL_CALL
|
||||
initialize( const uno::Sequence< uno::Any >& aArguments )
|
||||
throw (uno::Exception, uno::RuntimeException);
|
||||
|
||||
// XServiceInfo
|
||||
virtual ::rtl::OUString SAL_CALL
|
||||
getImplementationName( )
|
||||
throw (uno::RuntimeException);
|
||||
|
||||
virtual sal_Bool SAL_CALL
|
||||
supportsService( const ::rtl::OUString& ServiceName )
|
||||
throw (uno::RuntimeException);
|
||||
|
||||
virtual uno::Sequence< ::rtl::OUString > SAL_CALL
|
||||
getSupportedServiceNames( )
|
||||
throw (uno::RuntimeException);
|
||||
|
||||
// XActiveDataSink
|
||||
virtual void SAL_CALL
|
||||
setOutputStream( const uno::Reference< io::XOutputStream >& aStream )
|
||||
throw (uno::RuntimeException);
|
||||
|
||||
virtual uno::Reference< io::XOutputStream > SAL_CALL
|
||||
getOutputStream( )
|
||||
throw (uno::RuntimeException);
|
||||
|
||||
protected:
|
||||
typedef uno::Reference< sax::XDocumentHandler > SaxHandler;
|
||||
typedef uno::Reference< lang::XMultiServiceFactory > ServiceFactory;
|
||||
|
||||
ServiceFactory getServiceFactory() const
|
||||
{ return m_xServiceFactory; }
|
||||
|
||||
SaxHandler getWriteHandler() throw (uno::RuntimeException);
|
||||
private:
|
||||
ServiceFactory m_xServiceFactory;
|
||||
SaxHandler m_xWriter;
|
||||
|
||||
SaxHandler createHandler() const throw (uno::RuntimeException);
|
||||
|
||||
static ServiceInfoHelper getServiceInfo();
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
typedef WriterService< drafts::com::sun::star::configuration::backend::XLayerHandler >
|
||||
LayerWriterService_Base;
|
||||
// -----------------------------------------------------------------------------
|
||||
} // namespace xml
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
} // namespace configmgr
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue