diff -r c739008478cc -r 5d243a69bdda contentstorage/caclient/src/cahandlerproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/src/cahandlerproxy.cpp Fri May 28 16:17:03 2010 +0300 @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ + +#include + +#include "cahandler.h" +#include "cahandlerproxy.h" +#include "cahandlerloader.h" +#include "caobjectadapter.h" + +/*! + \class CaHandlerProxy + \ingroup + \brief Forwards execute request to an implemenation provided by specific handler loader. + + \sa CaHandlerLoader +*/ + +/*! + Destructor. +*/ +CaHandlerProxy::~CaHandlerProxy() +{ +} + + +/*! + Constructs handler proxy. + \param loader Provides handler implementations. It has to be pointer to a valid object. +*/ +CaHandlerProxy::CaHandlerProxy(const QSharedPointer &loader): + mLoader(loader) +{ + Q_ASSERT(!mLoader.isNull()); +} + +/*! + Forwards execute request to an appropriate handler if found otherwise ignores the request. + \param entry Subject for the requested command. + \param commandName Name of the command to be executed. + \return KErrNone (i.e. 0) on succes, error code otherwise. + \sa e32err.h for KErrNone definition. +*/ +ErrorCode CaHandlerProxy::execute(const CaEntry &entry, const QString &commandName) +{ + CaHandler *const handler = getHandler(entry, commandName); + ErrorCode result = NotFoundErrorCode; + + if (handler) { + result = CaObjectAdapter::convertErrorCode( + handler->execute(entry, commandName)); + } + return result; +} + +/*! + Looks for handler implementation in local cache or if not found, request it from + handler loader. + \param entry The entry being a subject for the requested command. + \param commandName Name of the command to be executed. + \return Pointer to a handler instance if available, NULL otherwise. +*/ +CaHandler *CaHandlerProxy::getHandler(const CaEntry &entry, + const QString &commandName) +{ + CaHandler *implementation(0); + + const QString entryTypeName(entry.entryTypeName()); + + const ImplementationMapIterator it( + mImplementationMap.find(entryTypeName)); + + if (it != mImplementationMap.end()) { + implementation = it->data(); + } else { + implementation = mLoader->loadHandler(entryTypeName, commandName); + mImplementationMap[entryTypeName] = QSharedPointer(implementation); + } + + return implementation; +}