diff -r 5ef31a21fdd5 -r e7325f632549 appfoundation/appruntimemodel/src/hsruntimefactory.cpp --- a/appfoundation/appruntimemodel/src/hsruntimefactory.cpp Fri Jun 11 16:25:06 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -/* -* 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: HsRuntime factory. -* -*/ - - -#include "hsruntimefactory.h" -#include "hsruntimefactory_p.h" -#include "hsruntimeprovidermanifest.h" -#include "hstest_global.h" - -#include -#include -#include - - -HsRuntimeFactoryPrivate::HsRuntimeFactoryPrivate(HsRuntimeFactory* aPublic) - : QObject(aPublic), - mQ(aPublic) -{ - -} - - -HsRuntimeFactoryPrivate::~HsRuntimeFactoryPrivate() -{ - -} - -QList HsRuntimeFactoryPrivate::runtimes() -{ - QStringList pluginPaths; - - //Check plugin dirs from root of different drives - QFileInfoList drives = QDir::drives(); - for(int i=0; i < drives.count(); i++) - { - QFileInfo drive = drives.at(i); - QString driveLetter = drive.absolutePath(); - QString path = driveLetter + mPluginManifestDirectory; - if(QDir(path).exists()) - { - pluginPaths << path; - } - } - - //Check plugin dir relative to current dir - if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginManifestDirectory).absolutePath())) - { - pluginPaths << mPluginManifestDirectory; - } - - QList runtimes; - - for(int h=0; h < pluginPaths.count(); h++) - { - QString path = pluginPaths.at(h); - QDir dir(path); - QStringList filters("*.manifest"); - - for(int i=0; i < dir.entryList(filters, QDir::Files).count(); ++i) - { - QString fileName = dir.entryList(filters, QDir::Files).at(i); - - HsRuntimeProviderManifest manifest; - manifest.loadFromXml(dir.absoluteFilePath(fileName)); - - if(manifest.loadOnQuery()) - { - QList tokens = manifest.runtimes(); - for(int j=0; j < tokens.count(); ++j) - { - HsRuntimeToken token = tokens.at(j); - IHsRuntimeProvider* provider = loadProviderFromPlugin(token.mLibrary); - if(provider) - { - runtimes << provider->runtimes(); - delete provider; - } - } - } - else - { - runtimes << manifest.runtimes(); - } - } - } - return runtimes; -} - -HsRuntime* HsRuntimeFactoryPrivate::createRuntime(const HsRuntimeToken& aToken) -{ - IHsRuntimeProvider* provider = loadProviderFromPlugin(aToken.mLibrary); - if(!provider) - { - HSDEBUG("Runtime creation failed - No provider.") - return 0; - } - - HsRuntime* runtime = provider->createRuntime(aToken); - delete provider; - if(!runtime) - { - HSDEBUG("Runtime creation failed.") - } - return runtime; -} - -IHsRuntimeProvider* HsRuntimeFactoryPrivate::loadProviderFromPlugin(const QString& aPluginName) -{ - QStringList pluginPaths; - - //Check plugin dirs from root of different drives - QFileInfoList drives = QDir::drives(); - for(int i=0; i < drives.count(); i++) - { - QFileInfo drive = drives.at(i); - QString driveLetter = drive.absolutePath(); - QString path = driveLetter + mPluginDirectory; - if(QDir(path).exists()) - { - pluginPaths << path; - } - } - - - //Check plugin dir relative to current dir - if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginDirectory).absolutePath())) - { - pluginPaths << mPluginDirectory; - } - - IHsRuntimeProvider* provider = 0; - QPluginLoader loader; - QObject* plugin = 0; - - for(int i=0; i < pluginPaths.count(); i++) - { - QString path = pluginPaths.at(i); - QString fileName = QDir(path).absoluteFilePath(aPluginName); - - loader.setFileName(fileName); - plugin = loader.instance(); - provider = qobject_cast(plugin); - if(provider) - { - return provider; - } - - //Don't leak memory if provider not IHsRuntimeProvider - if(plugin) - { - HSDEBUG("Runtime provider load - !provider, deleting plugin.") - delete plugin; - } - } - - HSDEBUG("Runtime provider load failed - Not found.") - return 0; -} - -/*! - \class HsRuntimeFactory - \ingroup group_hsruntimemodel - \brief Finds and creates home screen runtimes. - - HsRuntime factory finds home screen runtimes from HsRuntime provider - plugins. The search is done based on given plugin manifest - and plugin binary directories. Found runtimes are returned as - a list of HsRuntime tokens. HsRuntime factory creates an instance of - a HsRuntime base on a HsRuntime token that is given to it. -*/ - -/*! - Constructor. - - \a aPluginManifestDirectory Directory that contains plugin manifests. - \a aPluginDirectory Directory that contains plugin binaries. - \a aParent Parent object. -*/ -HsRuntimeFactory::HsRuntimeFactory(const QString& aPluginManifestDirectory, - const QString& aPluginDirectory, - QObject* aParent) - : QObject(aParent) -{ - mD = new HsRuntimeFactoryPrivate(this); - mD->mPluginManifestDirectory = aPluginManifestDirectory; - mD->mPluginDirectory = aPluginDirectory; -} - -/*! - Destructor. -*/ -HsRuntimeFactory::~HsRuntimeFactory() -{ - -} - -/*! - Returns found runtimes as a list of HsRuntime tokens. -*/ -QList HsRuntimeFactory::runtimes() -{ - return mD->runtimes(); -} - -/*! - Creates and returns a HsRuntime based on the given token. - \a aToken Identifies the HsRuntime to be created. - - Return The created HsRuntime. -*/ -HsRuntime* HsRuntimeFactory::createRuntime(const HsRuntimeToken& aToken) -{ - return mD->createRuntime(aToken); -}