diff -r 885c2596c964 -r 5d007b20cfd0 qtmobileextensions/src/settingsmanager/xqcentralrepositoryutils_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtmobileextensions/src/settingsmanager/xqcentralrepositoryutils_p.cpp Tue Aug 31 16:02:37 2010 +0300 @@ -0,0 +1,307 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, version 2.1 of the License. +* +* This program 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 program. If not, +* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". +* +* Description: +* +*/ + +#include "xqcentralrepositoryutils_p.h" +#include "xqsettingsmanager.h" +#include "xqsettingsmanager_p.h" +#include "ccentralrepositoryhandler.h" +#include "xqcentralrepositorysearchcriteria.h" + +XQCentralRepositoryUtilsPrivate::XQCentralRepositoryUtilsPrivate(XQSettingsManager& settingsManager) + : m_settingsManagerPrivate(*settingsManager.d) +{ +} + +XQCentralRepositoryUtilsPrivate::~XQCentralRepositoryUtilsPrivate() +{ +} + +#ifdef XQSETTINGSMANAGER_NO_CENREPKEY_CREATION_DELETION +bool XQCentralRepositoryUtilsPrivate::createKey(const XQCentralRepositorySettingsKey& /*key*/, const QVariant& /*value*/) +{ + m_settingsManagerPrivate.iError = KErrNotSupported; + return false; +} +#else +bool XQCentralRepositoryUtilsPrivate::createKey(const XQCentralRepositorySettingsKey& key, const QVariant& value) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(key.uid()); + + if (handler) + { + switch (value.type()) + { + case QVariant::Int: + { + m_settingsManagerPrivate.iError = handler->createKey(key.key(), value.toInt()); + break; + } + case QVariant::Double: + { + m_settingsManagerPrivate.iError = handler->createKey(key.key(), value.toDouble()); + break; + } + case QVariant::String: + { + m_settingsManagerPrivate.iError = handler->createKey(key.key(), TPtrC16(reinterpret_cast(value.toString().utf16()))); + break; + } + case QVariant::ByteArray: + { + m_settingsManagerPrivate.iError = handler->createKey(key.key(), TPtrC8((TUint8*)(value.toByteArray().constData()))); + break; + } + default: + { + m_settingsManagerPrivate.iError = KErrArgument; + break; + } + } + } + else + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + } + return m_settingsManagerPrivate.iError == KErrNone; +} +#endif + +#ifdef XQSETTINGSMANAGER_NO_CENREPKEY_CREATION_DELETION +bool XQCentralRepositoryUtilsPrivate::deleteKey(const XQCentralRepositorySettingsKey& /*key*/) +{ + m_settingsManagerPrivate.iError = KErrNotSupported; + return false; +} +#else +bool XQCentralRepositoryUtilsPrivate::deleteKey(const XQCentralRepositorySettingsKey& key) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(key.uid()); + + if (handler) + { + m_settingsManagerPrivate.iError = handler->deleteKey(key.key()); + } + else + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + } + return m_settingsManagerPrivate.iError == KErrNone; +} +#endif + +bool XQCentralRepositoryUtilsPrivate::resetKey(const XQCentralRepositorySettingsKey& key) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(key.uid()); + + if (handler) + { + m_settingsManagerPrivate.iError = handler->resetKey(key.key()); + } + else + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + } + return m_settingsManagerPrivate.iError == KErrNone; +} + +bool XQCentralRepositoryUtilsPrivate::resetRepository(long int repositoryUid) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + + if (handler) + { + m_settingsManagerPrivate.iError = handler->resetRepository(); + } + else + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + } + return m_settingsManagerPrivate.iError == KErrNone; +} + +QList XQCentralRepositoryUtilsPrivate::findKeys(const XQCentralRepositorySearchCriteria& criteria) +{ + long int repositoryUid = criteria.repositoryUid(); + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + if (!handler) + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + return QList(); + } + + QList keys; + + TRAP(m_settingsManagerPrivate.iError, + RArray foundKeys; + CleanupClosePushL(foundKeys); + if (criteria.value().isNull()) + { + User::LeaveIfError(handler->findKeyL(criteria.partialKey(), criteria.bitMask(), + foundKeys)); + } + else + { + switch (criteria.value().type()) + { + case QVariant::Int: + { + User::LeaveIfError(handler->findKeyL(criteria.partialKey(), criteria.bitMask(), + criteria.value().toInt(), criteria.negativeCriteria(), foundKeys)); + break; + } + case QVariant::Double: + { + User::LeaveIfError(handler->findKeyL(criteria.partialKey(), criteria.bitMask(), + criteria.value().toDouble(), criteria.negativeCriteria(), foundKeys)); + break; + } + case QVariant::String: + { + TPtrC16 stringValue(reinterpret_cast(criteria.value().toString().utf16())); + User::LeaveIfError(handler->findKeyL(criteria.partialKey(), criteria.bitMask(), + stringValue, criteria.negativeCriteria(), foundKeys)); + break; + } + case QVariant::ByteArray: + { + TPtrC8 byteArrayValue((TUint8*)(criteria.value().toByteArray().constData())); + User::LeaveIfError(handler->findKeyL(criteria.partialKey(), criteria.bitMask(), + byteArrayValue, criteria.negativeCriteria(), foundKeys)); + break; + } + default: + { + User::Leave(KErrArgument); + break; + } + } + } + for (int i = 0; i < foundKeys.Count(); ++i) + { + XQCentralRepositorySettingsKey key(repositoryUid, foundKeys[i]); + keys.append(key); + } + + CleanupStack::PopAndDestroy(&foundKeys); + ) + return keys; +} + +bool XQCentralRepositoryUtilsPrivate::startTransaction(long int repositoryUid, XQCentralRepositoryUtils::TransactionMode transactionMode) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + + if (handler) + { + CRepository::TTransactionMode mode = CRepository::EConcurrentReadWriteTransaction; + switch (transactionMode) + { + case XQCentralRepositoryUtils::ConcurrentReadWriteTransaction: + { + mode = CRepository::EConcurrentReadWriteTransaction; + break; + } + case XQCentralRepositoryUtils::ReadTransaction: + { + mode = CRepository::EReadTransaction; + break; + } + case XQCentralRepositoryUtils::ReadWriteTransaction: + { + mode = CRepository::EReadWriteTransaction; + break; + } + default: + { + m_settingsManagerPrivate.iError = KErrArgument; + return false; + } + } + m_settingsManagerPrivate.iError = handler->startTransaction(mode); + } + else + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + } + return m_settingsManagerPrivate.iError == KErrNone; +} + +bool XQCentralRepositoryUtilsPrivate::commitTransaction(long int repositoryUid) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + + if (handler) + { + m_settingsManagerPrivate.iError = handler->commitTransaction(); + } + else + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + } + return m_settingsManagerPrivate.iError == KErrNone; +} + +void XQCentralRepositoryUtilsPrivate::cancelTransaction(long int repositoryUid) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + if (!handler) + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + return; + } + m_settingsManagerPrivate.iError = XQSettingsManager::NoError; + handler->cancelTransaction(); +} + +void XQCentralRepositoryUtilsPrivate::failTransaction(long int repositoryUid) +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + if (!handler) + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + return; + } + m_settingsManagerPrivate.iError = XQSettingsManager::NoError; + handler->failTransaction(); +} + +XQCentralRepositoryUtils::TransactionState XQCentralRepositoryUtilsPrivate::transactionState(long int repositoryUid) const +{ + CCentralRepositoryHandler* handler = m_settingsManagerPrivate.cenRepHandlerInstance(repositoryUid); + if (!handler) + { + m_settingsManagerPrivate.iError = XQSettingsManager::UnknownError; + return XQCentralRepositoryUtils::UnknownTransaction; + } + + m_settingsManagerPrivate.iError = XQSettingsManager::NoError; + switch (handler->transactionState()) + { + case 0: return XQCentralRepositoryUtils::NotInTransaction; + case 2: return XQCentralRepositoryUtils::ActiveTransaction; + case 6: return XQCentralRepositoryUtils::FailedTransaction; + default: + { + break; + } + } + return XQCentralRepositoryUtils::UnknownTransaction; +}