void ConnectionPoolConfig::GetOptions(SfxItemSet& _rFillItems)
{ // the config node where all pooling relevant info are stored under
OConfigurationTreeRoot aConnectionPoolRoot = OConfigurationTreeRoot::createWithComponentContext(
::comphelper::getProcessComponentContext(), CONNECTIONPOOL_NODENAME, -1, OConfigurationTreeRoot::CM_READONLY);
// the global "enabled" flag
Any aEnabled = aConnectionPoolRoot.getNodeValue(ENABLE_POOLING); bool bEnabled = true;
aEnabled >>= bEnabled;
_rFillItems.Put(SfxBoolItem(SID_SB_POOLING_ENABLED, bEnabled));
// the settings for the single drivers
DriverPoolingSettings aSettings; // first get all the drivers register at the driver manager
ODriverEnumeration aEnumDrivers; for (autoconst& elem : aEnumDrivers)
{
aSettings.push_back(DriverPooling(elem));
}
// then look for which of them settings are stored in the configuration
OConfigurationNode aDriverSettings = aConnectionPoolRoot.openNode(DRIVER_SETTINGS);
for (auto& driverKey : aDriverSettings.getNodeNames())
{ // the name of the driver in this round
OConfigurationNode aThisDriverSettings = aDriverSettings.openNode(driverKey);
OUString sThisDriverName;
aThisDriverSettings.getNodeValue(DRIVER_NAME) >>= sThisDriverName;
// look if we (resp. the driver manager) know this driver // doing O(n) search here, which is expensive, but this doesn't matter in this small case ...
DriverPoolingSettings::iterator aLookup; for ( aLookup = aSettings.begin();
aLookup != aSettings.end();
++aLookup
) if (sThisDriverName == aLookup->sName) break;
if (aLookup == aSettings.end())
{ // do not know the driver - add it
aSettings.push_back(DriverPooling(sThisDriverName));
// and the position of the new entry
aLookup = aSettings.end();
--aLookup;
}
// now fill this entry with the settings from the configuration
aThisDriverSettings.getNodeValue(ENABLE) >>= aLookup->bEnabled;
aThisDriverSettings.getNodeValue(TIMEOUT) >>= aLookup->nTimeoutSeconds;
}
void ConnectionPoolConfig::SetOptions(const SfxItemSet& _rSourceItems)
{ // the config node where all pooling relevant info are stored under
OConfigurationTreeRoot aConnectionPoolRoot = OConfigurationTreeRoot::createWithComponentContext(
::comphelper::getProcessComponentContext(), CONNECTIONPOOL_NODENAME);
if (!aConnectionPoolRoot.isValid()) // already asserted by the OConfigurationTreeRoot return;
bool bNeedCommit = false;
// the global "enabled" flag const SfxBoolItem* pEnabled = _rSourceItems.GetItem<SfxBoolItem>(SID_SB_POOLING_ENABLED); if (pEnabled)
{ bool bEnabled = pEnabled->GetValue();
aConnectionPoolRoot.setNodeValue(ENABLE_POOLING, Any(bEnabled));
bNeedCommit = true;
}
// the settings for the single drivers const DriverPoolingSettingsItem* pDriverSettings = _rSourceItems.GetItem<DriverPoolingSettingsItem>(SID_SB_DRIVER_TIMEOUTS); if (pDriverSettings)
{
OConfigurationNode aDriverSettings = aConnectionPoolRoot.openNode(DRIVER_SETTINGS); if (!aDriverSettings.isValid()) return;
const DriverPoolingSettings& rNewSettings = pDriverSettings->getSettings(); for (autoconst& newSetting : rNewSettings)
{ // need the name as OUString
sThisDriverName = newSetting.sName;
// the sub-node for this driver if (aDriverSettings.hasByName(newSetting.sName))
aThisDriverSettings = aDriverSettings.openNode(newSetting.sName); else
aThisDriverSettings = aDriverSettings.createNode(newSetting.sName);
// set the values
aThisDriverSettings.setNodeValue(DRIVER_NAME, Any(sThisDriverName));
aThisDriverSettings.setNodeValue(ENABLE, Any(newSetting.bEnabled));
aThisDriverSettings.setNodeValue(TIMEOUT, Any(newSetting.nTimeoutSeconds));
}
bNeedCommit = true;
} if (bNeedCommit)
aConnectionPoolRoot.commit();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.