summaryrefslogtreecommitdiffabout
path: root/microkde/kresources/factory.cpp
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /microkde/kresources/factory.cpp
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'microkde/kresources/factory.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kresources/factory.cpp216
1 files changed, 216 insertions, 0 deletions
diff --git a/microkde/kresources/factory.cpp b/microkde/kresources/factory.cpp
new file mode 100644
index 0000000..709cd4a
--- a/dev/null
+++ b/microkde/kresources/factory.cpp
@@ -0,0 +1,216 @@
+/*
+ This file is part of libkresources.
+
+ Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
+ Copyright (c) 2002 Jan-Pascal van Best <janpascal@vanbest.org>
+ Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <kdebug.h>
+#include <klocale.h>
+#include <ksimpleconfig.h>
+#include <kstandarddirs.h>
+#include <kstaticdeleter.h>
+
+#include <qfile.h>
+
+#include <plugins/file/resourcefile.h>
+#include <plugins/file/resourcefileconfig.h>
+#include <plugins/dir/resourcedir.h>
+#include <plugins/dir/resourcedirconfig.h>
+//#include <plugins/ldap/resourceldap.h>
+//#include <plugins/ldap/resourceldapconfig.h>
+
+
+#include "resource.h"
+#include "factory.h"
+
+using namespace KRES;
+
+QDict<Factory> *Factory::mSelves = 0;
+static KStaticDeleter< QDict<Factory> > staticDeleter;
+
+Factory *Factory::self( const QString& resourceFamily )
+{
+ kdDebug(5650) << "Factory::self()" << endl;
+
+ Factory *factory = 0;
+ if ( !mSelves )
+ {
+ mSelves = staticDeleter.setObject( new QDict<Factory> );
+ }
+
+ factory = mSelves->find( resourceFamily );
+
+ if ( !factory ) {
+ factory = new Factory( resourceFamily );
+ mSelves->insert( resourceFamily, factory );
+ }
+
+ return factory;
+}
+
+Factory::Factory( const QString& resourceFamily ) :
+ mResourceFamily( resourceFamily )
+{
+//US so far we have three types available for resourceFamily "contact"
+// and that are "file", "dir", "ldap"
+/*US
+
+ KTrader::OfferList plugins = KTrader::self()->query( "KResources/Plugin", QString( "[X-KDE-ResourceFamily] == '%1'" )
+ .arg( resourceFamily ) );
+ KTrader::OfferList::ConstIterator it;
+ for ( it = plugins.begin(); it != plugins.end(); ++it ) {
+ QVariant type = (*it)->property( "X-KDE-ResourceType" );
+ if ( !type.toString().isEmpty() )
+ mTypeMap.insert( type.toString(), *it );
+ }
+*/
+
+//US !!!!!!!!!!!!!!!
+ KRES::PluginFactoryBase* pf = (KRES::PluginFactoryBase*)new KRES::PluginFactory<KABC::ResourceFile,KABC::ResourceFileConfig>();
+ mTypeMap.insert( "file", pf );
+
+ pf = (KRES::PluginFactoryBase*)new KRES::PluginFactory<KABC::ResourceDir,KABC::ResourceDirConfig>();
+ mTypeMap.insert( "dir", pf );
+ /*
+ pf = (KRES::PluginFactoryBase*)new KRES::PluginFactory<KABC::ResourceLDAP,KABC::ResourceLDAPConfig>();
+ mTypeMap.insert( "ldap", pf );
+ */
+}
+
+Factory::~Factory()
+{
+}
+
+QStringList Factory::typeNames() const
+{
+//US method QMap::keys() not available yet. SO collect the data manually
+//US return mTypeMap.keys();
+
+ QStringList result;
+
+ QMap<QString, PluginFactoryBase*>::ConstIterator it;
+ for( it = mTypeMap.begin(); it != mTypeMap.end(); ++it ) {
+ result << it.key().latin1();
+// qDebug("Factory::typeNames() : %s ", it.key().latin1());
+
+ }
+ return result;
+}
+
+ConfigWidget *Factory::configWidget( const QString& type, QWidget *parent )
+{
+ if ( type.isEmpty() || !mTypeMap.contains( type ) )
+ return 0;
+
+/*US load the lib not dynamically. !!
+ KService::Ptr ptr = mTypeMap[ type ];
+ KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
+ if ( !factory ) {
+ kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl;
+ return 0;
+ }
+*/
+ PluginFactoryBase *factory = mTypeMap[ type ];
+ if ( !factory ) {
+ kdDebug() << "KRES::Factory::configWidget(): Factory creation failed" << endl;
+ return 0;
+ }
+
+
+ PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
+
+ if ( !pluginFactory ) {
+ kdDebug() << "KRES::Factory::configWidget(): no plugin factory." << endl;
+ return 0;
+ }
+
+ ConfigWidget *wdg = pluginFactory->configWidget( parent );
+ if ( !wdg ) {
+//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
+ kdDebug() << " is not a " + mResourceFamily + " plugin." << endl;
+ return 0;
+ }
+ return wdg;
+
+}
+
+QString Factory::typeName( const QString &type ) const
+{
+ if ( type.isEmpty() || !mTypeMap.contains( type ) )
+ return QString();
+
+//US KService::Ptr ptr = mTypeMap[ type ];
+//US return ptr->name();
+//US I guess this is correct since we loaded the factory staticly.
+ return type;
+
+}
+
+QString Factory::typeDescription( const QString &type ) const
+{
+ if ( type.isEmpty() || !mTypeMap.contains( type ) )
+ return QString();
+
+//US KService::Ptr ptr = mTypeMap[ type ];
+//US return ptr->comment();
+//US I guess this is correct since we loaded the factory staticly.
+ return type;
+
+}
+
+Resource *Factory::resource( const QString& type, const KConfig *config )
+{
+ kdDebug() << "Factory::resource( " << type << ", config)" << endl;
+
+ if ( type.isEmpty() || !mTypeMap.contains( type ) )
+ return 0;
+
+/*US load the lib not dynamicly. !!
+ KService::Ptr ptr = mTypeMap[ type ];
+ KLibFactory *factory = KLibLoader::self()->factory( ptr->library().latin1() );
+ if ( !factory ) {
+ kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl;
+ return 0;
+ }
+*/
+ PluginFactoryBase *factory = mTypeMap[ type ];
+ if ( !factory ) {
+ kdDebug() << "KRES::Factory::resource(): Factory creation failed" << endl;
+ return 0;
+ }
+
+ PluginFactoryBase *pluginFactory = static_cast<PluginFactoryBase *>( factory );
+
+ if ( !pluginFactory ) {
+ kdDebug() << "KRES::Factory::resource(): no plugin factory." << endl;
+ return 0;
+ }
+
+ Resource *resource = pluginFactory->resource( config );
+ if ( !resource ) {
+//US kdDebug() << "'" << ptr->library() << "' is not a " + mResourceFamily + " plugin." << endl;
+ kdDebug() << " is not a " + mResourceFamily + " plugin." << endl;
+ return 0;
+ }
+
+ resource->setType( type );
+
+ return resource;
+}