1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* 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.
*
************************************************************************/
#ifndef CONFIGMGR_VALUECONVERTER_HXX
#define CONFIGMGR_VALUECONVERTER_HXX
#include "utility.hxx"
#include <com/sun/star/script/XTypeConverter.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/uno/Type.hxx>
#ifndef INCLUDED_VECTOR
#include <vector>
#define INCLUDED_VECTOR
#endif
namespace configmgr
{
namespace uno = ::com::sun::star::uno;
namespace script = ::com::sun::star::script;
// -----------------------------------------------------------------------------
class ValueConverter
{
/// TypeConverter is used for converting type from string values
uno::Reference< script::XTypeConverter > m_xTypeConverter;
/// Value info
uno::Type m_aType;
rtl::OUString m_sSeparator;
bool m_bNull;
public:
/// construct a value converter with no initial type info
ValueConverter(const uno::Reference< script::XTypeConverter > & _xTC)
: m_xTypeConverter(_xTC)
, m_aType()
{
implReset();
}
/// construct a value converter with a type
ValueConverter(uno::Type const& _aType, const uno::Reference< script::XTypeConverter > & _xTC)
: m_xTypeConverter(_xTC)
, m_aType(_aType)
{
implReset();
}
/// provide access to the TypeConverter that is used for converting string format
uno::Reference< script::XTypeConverter > const& getTypeConverter() const SAL_THROW(())
{
return m_xTypeConverter;
}
/// (re)start the converter with the current type
void restart()
{
implReset();
}
/// (re)start the converter with a new type info (or none)
void reset(uno::Type const & _aType = uno::Type())
{
m_aType = _aType;
implReset();
}
/// set the NULL state of this converter
void setIsNull(bool bNull = true)
{
m_bNull = bNull;
}
/// set the separator of this converter
void setSeparator(rtl::OUString const & _aSeparator)
{
m_sSeparator = _aSeparator;
}
/// get the (UNO) type
bool isTypeSet() const { return m_aType.getTypeClass() != uno::TypeClass_VOID; }
/// get the (UNO) type
uno::Type getType() const { return m_aType; }
/// is this marked null
bool isNull() const { return m_bNull; }
/// does this have a list type
bool isList() const;
/// does this have a separator set
bool hasSeparator() const { return m_sSeparator.getLength() != 0; }
/// converting a value
uno::Any convertToAny(rtl::OUString const& aContent) const
SAL_THROW((script::CannotConvertException , com::sun::star::uno::RuntimeException));
/// converting a list
uno::Any convertListToAny(uno::Sequence< rtl::OUString > const& aContentList) const
SAL_THROW((script::CannotConvertException , com::sun::star::uno::RuntimeException));
/// converting a binary value
uno::Sequence<sal_Int8> parseBinary(rtl::OUString const& aBinaryString) const
SAL_THROW((script::CannotConvertException , com::sun::star::uno::RuntimeException));
/// splits a string list
uno::Sequence< rtl::OUString > splitStringList(rtl::OUString const& aContent) const;
private:
/// converting a list
bool convertListToAny(std::vector< rtl::OUString > const& aContentList, uno::Any& rValue) const
SAL_THROW((script::CannotConvertException , com::sun::star::uno::RuntimeException));
/// converting a scalar value
bool convertScalarToAny(rtl::OUString const& aContent, uno::Any& rValue) const
SAL_THROW((script::CannotConvertException , com::sun::star::uno::RuntimeException));
/// splitting a string list
void splitListData(rtl::OUString const& aContent, std::vector< rtl::OUString >& rContentList) const
SAL_THROW(());
private:
void implReset() SAL_THROW(())
{
m_sSeparator = rtl::OUString();
m_bNull = false;
}
};
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
} // namespace
#endif
|