1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: addxmltostorageoptions.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svtools.hxx"
36 //_________________________________________________________________________________________________________________
38 //_________________________________________________________________________________________________________________
40 #include <svtools/addxmltostorageoptions.hxx>
41 #include <unotools/configmgr.hxx>
42 #include <unotools/configitem.hxx>
43 #include <tools/debug.hxx>
44 #include <tools/string.hxx>
45 #include <com/sun/star/uno/Any.hxx>
46 #include <com/sun/star/uno/Sequence.hxx>
48 #include <rtl/logfile.hxx>
49 #include "itemholder1.hxx"
51 //_________________________________________________________________________________________________________________
53 //_________________________________________________________________________________________________________________
55 using namespace ::utl
;
56 using namespace ::rtl
;
57 using namespace ::osl
;
58 using namespace ::com::sun::star::uno
;
60 //*****************************************************************************************************************
61 // initialize static member
62 // DON'T DO IT IN YOUR HEADER!
63 // see definition for further informations
64 //*****************************************************************************************************************
65 SvtAddXMLToStorageOptions_Impl
* SvtAddXMLToStorageOptions::m_pDataContainer
= 0;
66 sal_Int32
SvtAddXMLToStorageOptions::m_nRefCount
= 0;
69 //_________________________________________________________________________________________________________________
70 // private declarations!
71 //_________________________________________________________________________________________________________________
73 class SvtAddXMLToStorageOptions_Impl
: public ConfigItem
75 //-------------------------------------------------------------------------------------------------------------
77 //-------------------------------------------------------------------------------------------------------------
81 //---------------------------------------------------------------------------------------------------------
82 // constructor / destructor
83 //---------------------------------------------------------------------------------------------------------
85 SvtAddXMLToStorageOptions_Impl();
87 //---------------------------------------------------------------------------------------------------------
88 // overloaded methods of baseclass
89 //---------------------------------------------------------------------------------------------------------
91 //---------------------------------------------------------------------------------------------------------
93 //---------------------------------------------------------------------------------------------------------
95 /*-****************************************************************************************************//**
96 @short access method to get internal values
97 @descr These method give us a chance to regulate acces to ouer internal values.
98 It's not used in the moment - but it's possible for the feature!
106 *//*-*****************************************************************************************************/
108 sal_Bool
IsWriter_Add_XML_to_Storage() const { return bAddXmlToStg_Writer
; }
109 sal_Bool
IsCalc_Add_XML_to_Storage() const { return bAddXmlToStg_Calc
; }
110 sal_Bool
IsImpress_Add_XML_to_Storage() const { return bAddXmlToStg_Impress
; }
111 sal_Bool
IsDraw_Add_XML_to_Storage() const { return bAddXmlToStg_Draw
; }
113 //-------------------------------------------------------------------------------------------------------------
115 //-------------------------------------------------------------------------------------------------------------
119 /*-****************************************************************************************************//**
120 @short return list of key names of ouer configuration management which represent oue module tree
121 @descr These methods return a static const list of key names. We need it to get needed values from our
122 configuration management.
127 @return A list of needed configuration keys is returned.
130 *//*-*****************************************************************************************************/
132 static Sequence
< OUString
> GetPropertyNames();
134 //-------------------------------------------------------------------------------------------------------------
136 //-------------------------------------------------------------------------------------------------------------
140 sal_Bool bAddXmlToStg_Writer
,
142 bAddXmlToStg_Impress
,
146 //_________________________________________________________________________________________________________________
148 //_________________________________________________________________________________________________________________
151 //*****************************************************************************************************************
153 //*****************************************************************************************************************
154 SvtAddXMLToStorageOptions_Impl::SvtAddXMLToStorageOptions_Impl()
155 // Init baseclasses first
156 : ConfigItem( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM(
157 "Office.Common/AddXMLToStorage"))),
159 bAddXmlToStg_Writer( FALSE
),
160 bAddXmlToStg_Calc( FALSE
),
161 bAddXmlToStg_Impress( FALSE
),
162 bAddXmlToStg_Draw( FALSE
)
164 // Use our static list of configuration keys to get his values.
165 Sequence
< OUString
> seqNames
= GetPropertyNames();
166 Sequence
< Any
> seqValues
= GetProperties( seqNames
);
168 // Copy values from list in right order to ouer internal member.
169 sal_Int32 nPropertyCount
= seqValues
.getLength();
170 const Any
* pValue
= seqValues
.getConstArray();
171 for( sal_Int32 nProperty
=0; nProperty
<nPropertyCount
; ++nProperty
, ++pValue
)
172 if( pValue
->hasValue() )
177 *pValue
>>= bAddXmlToStg_Writer
;
180 *pValue
>>= bAddXmlToStg_Calc
;
183 *pValue
>>= bAddXmlToStg_Impress
;
186 *pValue
>>= bAddXmlToStg_Draw
;
191 //*****************************************************************************************************************
193 //*****************************************************************************************************************
194 Sequence
< OUString
> SvtAddXMLToStorageOptions_Impl::GetPropertyNames()
196 // Build static list of configuration key names.
197 static const sal_Char
* pProperties
[] =
205 const sal_uInt16 nCnt
= sizeof(pProperties
) / sizeof( pProperties
[0] );
206 Sequence
<OUString
> aNames( nCnt
);
207 OUString
* pNames
= aNames
.getArray();
208 for( sal_uInt16 n
= 0; n
< nCnt
; ++n
)
209 pNames
[ n
] = OUString::createFromAscii( pProperties
[ n
] );
214 //*****************************************************************************************************************
216 //*****************************************************************************************************************
217 SvtAddXMLToStorageOptions::SvtAddXMLToStorageOptions()
219 // Global access, must be guarded (multithreading!).
220 MutexGuard
aGuard( GetOwnStaticMutex() );
221 // Increase ouer refcount ...
223 // ... and initialize ouer data container only if it not already exist!
224 if( !m_pDataContainer
)
226 RTL_LOGFILE_CONTEXT(aLog
, "svtools ( ??? ) ::SvtAddXMLToStorageOptions_Impl::ctor()");
227 m_pDataContainer
= new SvtAddXMLToStorageOptions_Impl
;
229 ItemHolder1::holdConfigItem(E_ADDXMLTOSTORAGEOPTIONS
);
233 //*****************************************************************************************************************
235 //*****************************************************************************************************************
236 SvtAddXMLToStorageOptions::~SvtAddXMLToStorageOptions()
238 // Global access, must be guarded (multithreading!)
239 MutexGuard
aGuard( GetOwnStaticMutex() );
240 // Decrease ouer refcount.
241 // If last instance was deleted ...
242 // we must destroy ouer static data container!
244 delete m_pDataContainer
, m_pDataContainer
= 0;
247 sal_Bool
SvtAddXMLToStorageOptions::IsWriter_Add_XML_to_Storage() const
249 MutexGuard
aGuard( GetOwnStaticMutex() );
250 return m_pDataContainer
->IsWriter_Add_XML_to_Storage();
252 sal_Bool
SvtAddXMLToStorageOptions::IsCalc_Add_XML_to_Storage() const
254 MutexGuard
aGuard( GetOwnStaticMutex() );
255 return m_pDataContainer
->IsCalc_Add_XML_to_Storage();
257 sal_Bool
SvtAddXMLToStorageOptions::IsImpress_Add_XML_to_Storage() const
259 MutexGuard
aGuard( GetOwnStaticMutex() );
260 return m_pDataContainer
->IsImpress_Add_XML_to_Storage();
262 sal_Bool
SvtAddXMLToStorageOptions::IsDraw_Add_XML_to_Storage() const
264 MutexGuard
aGuard( GetOwnStaticMutex() );
265 return m_pDataContainer
->IsDraw_Add_XML_to_Storage();
268 //*****************************************************************************************************************
270 //*****************************************************************************************************************
271 Mutex
& SvtAddXMLToStorageOptions::GetOwnStaticMutex()
273 // Initialize static mutex only for one time!
274 static Mutex
* pMutex
= NULL
;
275 // If these method first called (Mutex not already exist!) ...
278 // ... we must create a new one. Protect follow code with the global mutex -
279 // It must be - we create a static variable!
280 MutexGuard
aGuard( Mutex::getGlobalMutex() );
281 // We must check our pointer again - because it can be that another instance of ouer class will be fastr then these!
284 // Create the new mutex and set it for return on static variable.
289 // Return new created or already existing mutex object.