summaryrefslogtreecommitdiff
path: root/configmgr/source
diff options
context:
space:
mode:
authorJörg Barfurth <jb@openoffice.org>2000-12-19 10:14:08 +0000
committerJörg Barfurth <jb@openoffice.org>2000-12-19 10:14:08 +0000
commit1328e8fbfc26f44d1262c1c18d486b201bdc0ba3 (patch)
tree4e6aa0fba361b8ee17dd6c5d1773a86d6550d0dc /configmgr/source
parent94597e63999a851a4d69759ead1d3a544a6b411d (diff)
#82313# Added 'nocache' parameter to providers' createInstanceWithArguments()
Diffstat (limited to 'configmgr/source')
-rw-r--r--configmgr/source/api2/confproviderimpl2.cxx14
-rw-r--r--configmgr/source/api2/providerimpl.cxx45
-rw-r--r--configmgr/source/inc/options.hxx33
3 files changed, 75 insertions, 17 deletions
diff --git a/configmgr/source/api2/confproviderimpl2.cxx b/configmgr/source/api2/confproviderimpl2.cxx
index f7b29915d5da..a5e59b6f3526 100644
--- a/configmgr/source/api2/confproviderimpl2.cxx
+++ b/configmgr/source/api2/confproviderimpl2.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: confproviderimpl2.cxx,v $
*
- * $Revision: 1.14 $
+ * $Revision: 1.15 $
*
- * last change: $Author: jb $ $Date: 2000-12-11 11:06:37 $
+ * last change: $Author: jb $ $Date: 2000-12-19 11:14:07 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -115,11 +115,14 @@ namespace configmgr
// extract the args
::rtl::OUString sUser, sPath, sLocale;
sal_Int32 nLevels;
- OProviderImpl::FactoryArguments::extractArgs(aArgs, sPath, sUser, sLocale, nLevels);
+ bool bNoCache;
+
+ OProviderImpl::FactoryArguments::extractArgs(aArgs, sPath, sUser, sLocale, nLevels, bNoCache);
vos::ORef<OOptions> xOptions = new OOptions(getDefaultOptions());
xOptions->setUser(sUser);
xOptions->setLocale(sLocale);
+ xOptions->setNoCache(bNoCache);
CFG_TRACE_INFO_NI("config provider: node accessor extracted from the args is %s", OUSTRING2ASCII(sPath));
CFG_TRACE_INFO_NI("config provider: level depth extracted from the args is %i", nLevels);
@@ -159,11 +162,14 @@ namespace configmgr
// extract the args
::rtl::OUString sUser, sPath, sLocale;
sal_Int32 nLevels;
- OProviderImpl::FactoryArguments::extractArgs(aArgs, sPath, sUser, sLocale, nLevels);
+ bool bNoCache;
+
+ OProviderImpl::FactoryArguments::extractArgs(aArgs, sPath, sUser, sLocale, nLevels, bNoCache);
vos::ORef<OOptions> xOptions = new OOptions(getDefaultOptions());
xOptions->setUser(sUser);
xOptions->setLocale(sLocale);
+ xOptions->setNoCache(bNoCache);
CFG_TRACE_INFO_NI("config provider: node accessor extracted from the args is %s", OUSTRING2ASCII(sPath));
CFG_TRACE_INFO_NI("config provider: level depth extracted from the args is %i", nLevels);
diff --git a/configmgr/source/api2/providerimpl.cxx b/configmgr/source/api2/providerimpl.cxx
index 1e0651d0b710..ecd9a1c3c371 100644
--- a/configmgr/source/api2/providerimpl.cxx
+++ b/configmgr/source/api2/providerimpl.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: providerimpl.cxx,v $
*
- * $Revision: 1.14 $
+ * $Revision: 1.15 $
*
- * last change: $Author: jb $ $Date: 2000-12-14 16:12:44 $
+ * last change: $Author: jb $ $Date: 2000-12-19 11:12:51 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -60,10 +60,11 @@
************************************************************************/
#include <stdio.h>
+#include "providerimpl.hxx"
+#include "options.hxx"
#include "apifactoryimpl.hxx"
#include "apitreeimplobj.hxx"
#include "apitreeaccess.hxx"
-#include "providerimpl.hxx"
#include "roottree.hxx"
#include "noderef.hxx"
#include "objectregistry.hxx"
@@ -84,6 +85,7 @@
#ifndef _CONFIGMGR_TRACER_HXX_
#include "tracer.hxx"
#endif
+#include <osl/interlck.h>
#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
#include <com/sun/star/beans/PropertyValue.hpp>
@@ -434,6 +436,7 @@ namespace configmgr
rtl::OUString OProviderImpl::FactoryArguments::sNodePath(ASCII("nodepath"));
rtl::OUString OProviderImpl::FactoryArguments::sDepth(ASCII("depth"));
rtl::OUString OProviderImpl::FactoryArguments::sLocale(ASCII("locale"));
+ rtl::OUString OProviderImpl::FactoryArguments::sNoCache(ASCII("nocache"));
#ifdef DBG_UTIL
//-----------------------------------------------------------------------------
@@ -447,6 +450,7 @@ namespace configmgr
aArgs.insert(OProviderImpl::FactoryArguments::sNodePath);
aArgs.insert(OProviderImpl::FactoryArguments::sDepth);
aArgs.insert(OProviderImpl::FactoryArguments::sLocale);
+ aArgs.insert(OProviderImpl::FactoryArguments::sNoCache);
}
HashSet::const_iterator it = aArgs.find(rName);
@@ -492,7 +496,8 @@ namespace configmgr
OUString& /* [out] */ _rNodeAccessor,
OUString& /* [out] */ _rUser,
OUString& /* [out] */ _rLocale,
- sal_Int32& /* [out] */ _nLevels)
+ sal_Int32& /* [out] */ _nLevels,
+ bool& /* [out] */ _bNoCache)
throw (lang::IllegalArgumentException)
{
@@ -501,6 +506,7 @@ namespace configmgr
#endif
::rtl::OUString sUser, sPath, sLocale;
sal_Int32 nLevelDepth = ITreeProvider::ALL_LEVELS;
+ sal_Bool bNoCache = sal_False;
// the args have to be a sequence of property values, currently three property names are recognized
beans::PropertyValue aCurrent;
@@ -519,6 +525,8 @@ namespace configmgr
bExtractSuccess = (aCurrent.Value >>= nLevelDepth);
else if (aCurrent.Name.equalsIgnoreCase(OProviderImpl::FactoryArguments::sLocale))
bExtractSuccess = (aCurrent.Value >>= sLocale);
+ else if (aCurrent.Name.equalsIgnoreCase(OProviderImpl::FactoryArguments::sNoCache))
+ bExtractSuccess = (aCurrent.Value >>= bNoCache);
/*
#ifdef DBG_UTIL
else
@@ -567,6 +575,35 @@ namespace configmgr
_nLevels = nLevelDepth;
_rLocale = sLocale;
_rUser = sUser;
+ _bNoCache = (bNoCache != sal_False);
+ }
+// class OOptions
+ //..........................................................................
+ static sal_Int32 getNextCacheID()
+ {
+ static oslInterlockedCount nNextID = 0;
+
+ oslInterlockedCount nNewID = osl_incrementInterlockedCount(&nNextID);
+
+ if (nNewID == 0)
+ {
+ CFG_TRACE_WARNING("Cache ID overflow - restarting sequence !");
+ OSL_ENSURE(false, "Cache ID overflow - restarting sequence !");
+ }
+
+ return static_cast<sal_Int32>(nNewID);
+ }
+
+ void OOptions::setNoCache(bool _bNoCache)
+ {
+ if (_bNoCache)
+ {
+ m_nCacheID = getNextCacheID();
+ }
+ else
+ {
+ m_nCacheID = 0;
+ }
}
} // namespace configmgr
diff --git a/configmgr/source/inc/options.hxx b/configmgr/source/inc/options.hxx
index c89c845fffd8..863c93687341 100644
--- a/configmgr/source/inc/options.hxx
+++ b/configmgr/source/inc/options.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: options.hxx,v $
*
- * $Revision: 1.5 $
+ * $Revision: 1.6 $
*
- * last change: $Author: dg $ $Date: 2000-12-04 19:47:18 $
+ * last change: $Author: jb $ $Date: 2000-12-19 11:14:08 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -97,20 +97,28 @@ namespace configmgr
rtl::OUString m_sDefaultLocale; // default locale set for a user
rtl::OUString m_sUser; // user key used (could be empty)
rtl::OUString m_sDefaultUser; // user key used (could be empty)
-
+ sal_Int32 m_nCacheID; // set if data should not be fetched from the cache, but reloaded
public:
OOptions(const uno::Reference< script::XTypeConverter >& _xConverter)
- :m_xConverter(_xConverter) {}
+ :m_xConverter(_xConverter)
+ ,m_nCacheID(0)
+ {}
OOptions(const OOptions& _rOptions)
:m_xConverter(_rOptions.getTypeConverter())
,m_sDefaultLocale(_rOptions.getDefaultLocale())
,m_sDefaultUser(_rOptions.getDefaultUser())
,m_sLocale(_rOptions.m_sLocale)
- ,m_sUser(_rOptions.m_sUser){}
+ ,m_sUser(_rOptions.m_sUser)
+ ,m_nCacheID(0) // cache identity is not copied
+ {
+ if (!_rOptions.canUseCache()) this->setNoCache();
+ }
uno::Reference< script::XTypeConverter > getTypeConverter() const {return m_xConverter;}
+ bool canUseCache() const { return m_nCacheID != 0; }
+
rtl::OUString getLocale() const {return m_sLocale.getLength() ? m_sLocale : m_sDefaultLocale;}
const rtl::OUString& getDefaultLocale() const {return m_sDefaultLocale;}
sal_Bool hasDefaultLocale() const {return !m_sLocale.getLength() || m_sLocale == m_sDefaultLocale;}
@@ -119,10 +127,14 @@ namespace configmgr
const rtl::OUString& getDefaultUser() const {return m_sDefaultUser;}
sal_Bool hasDefaultUser() const {return !m_sUser.getLength() || m_sUser == m_sDefaultUser;}
+ void setNoCache(bool _bNoCache = true);
void setUser(const rtl::OUString& _rUser) {m_sUser = _rUser;}
void setDefaultUser(const rtl::OUString& _rUser) {m_sDefaultUser = _rUser;}
void setLocale(const rtl::OUString& _rLocale) {m_sLocale = _rLocale;}
void setDefaultLocale(const rtl::OUString& _rLocale) {m_sDefaultLocale = _rLocale;}
+
+ friend sal_Int32 compareCacheIdentity(OOptions const& lhs, OOptions const& rhs)
+ { return rhs.m_nCacheID - lhs.m_nCacheID; }
};
struct ltOptions
@@ -130,10 +142,13 @@ namespace configmgr
bool operator()(const ::vos::ORef<OOptions> &o1, const ::vos::ORef<OOptions> &o2) const
{
sal_Int32 nLt = o1->getUser().compareTo(o2->getUser());
- if (!nLt)
- return o1->getLocale().compareTo(o2->getLocale()) < 0 ? true : false;
- else
- return nLt < 0 ? true : false;
+ if (nLt == 0)
+ nLt = o1->getLocale().compareTo(o2->getLocale());
+
+ if (nLt == 0)
+ nLt = compareCacheIdentity(*o1,*o2);
+
+ return nLt < 0 ? true : false;
}
};
} // namespace