You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
8.1 KiB
225 lines
8.1 KiB
15 years ago
|
//
|
||
|
// C++ Implementation: kmfpluginfactory
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
//
|
||
|
// Author: Christian Hubinger <chubinger@irrsinnig.org>, (C) 2004
|
||
|
//
|
||
|
// Copyright: See COPYING file that comes with this distribution
|
||
|
//
|
||
|
// License: GPL
|
||
|
//
|
||
|
#include "kmfpluginfactory.h"
|
||
|
|
||
|
// QT includes
|
||
|
#include <qobject.h>
|
||
|
|
||
|
|
||
|
// KDE includes
|
||
|
#include <kparts/part.h>
|
||
|
#include <kparts/plugin.h>
|
||
|
#include <kparts/factory.h>
|
||
|
#include <kmessagebox.h>
|
||
|
#include <kdebug.h>
|
||
|
#include <ktrader.h>
|
||
|
#include <klibloader.h>
|
||
|
#include <klocale.h>
|
||
|
#include <kapplication.h>
|
||
|
// project includes
|
||
|
#include "kmfcompilerinterface.h"
|
||
|
#include "kmfruleoptioneditinterface.h"
|
||
|
#include "kmfruletargetoptioneditinterface.h"
|
||
|
#include "kmfinstallerinterface.h"
|
||
|
#include "kmftarget.h"
|
||
|
#include "kmftargetconfig.h"
|
||
|
#include "kmferror.h"
|
||
|
#include "kmfconfig.h"
|
||
|
|
||
|
namespace KMF {
|
||
|
|
||
|
KMFPluginFactory::KMFPluginFactory() {}
|
||
|
KMFPluginFactory::~KMFPluginFactory() {}
|
||
|
|
||
|
|
||
|
KParts::ReadWritePart* KMFPluginFactory::KMFMainView( KParts::MainWindow* parent, KMFError* err ) {
|
||
|
err->setErrType( KMFError::OK );
|
||
|
QString libName;
|
||
|
if ( KMFConfig::useGenericInterface() ) {
|
||
|
kdDebug() << "Loading generic GUI" << endl;
|
||
|
libName = "libkmfgenericinterfacepart";
|
||
|
} else {
|
||
|
kdDebug() << "Loading iptables GUI" << endl;
|
||
|
libName = "libkmfipteditorpart";
|
||
|
}
|
||
|
|
||
|
KLibFactory * factory = KLibLoader::self() ->factory( libName.latin1() );
|
||
|
if ( factory ) {
|
||
|
KParts::ReadWritePart * m_ruleeditpart = static_cast<KParts::ReadWritePart *>( factory->create( parent,
|
||
|
libName.latin1() , "KParts::ReadWritePart" ) );
|
||
|
|
||
|
if ( m_ruleeditpart ) {
|
||
|
return m_ruleeditpart;
|
||
|
}
|
||
|
err->setErrType( KMFError::FATAL );
|
||
|
err->setErrMsg( i18n( "Could not cast plugin to type: KParts::ReadWritePart." ) );
|
||
|
return 0;
|
||
|
} else {
|
||
|
err->setErrType( KMFError::FATAL );
|
||
|
err->setErrMsg( i18n( "Could not find %1 in the library search path." ).arg( libName ) );
|
||
|
return 0;
|
||
|
}
|
||
|
err->setErrType( KMFError::FATAL );
|
||
|
err->setErrMsg( i18n( "Could not find libkmfgenericinterfacepart in the library search path." ) );
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
QValueList<KMFCompilerInterface*>* KMFPluginFactory::CompilersForInstaller( const QString& osName ) {
|
||
|
QValueList<KMFCompilerInterface*> *list = new QValueList<KMFCompilerInterface*>();
|
||
|
kdDebug() << "Query: KMyFirewall/Compiler [X-KMyFirewall-Platform] == '" << osName.lower() << "'" << endl;
|
||
|
KTrader::OfferList offers = KTrader::self()->query( "KMyFirewall/Compiler", "[X-KMyFirewall-Platform] == '" + osName.lower() + "'");
|
||
|
KTrader::OfferList::iterator it;
|
||
|
if ( offers.empty() ) {
|
||
|
kdDebug() << "NO MATCHING PLUGIN FOUND - KMyFirewall/Compiler" << endl;
|
||
|
}
|
||
|
for ( it = offers.begin(); it != offers.end(); ++it ) {
|
||
|
KService::Ptr ptr = *it;
|
||
|
KLibFactory *factory = KLibLoader::self()->factory( ptr->library().local8Bit().data() );
|
||
|
kdDebug() << KLibLoader::self()->lastErrorMessage() << endl;
|
||
|
|
||
|
if ( !factory ) {
|
||
|
kdDebug() << "Couldn't load plugin: " << ptr->name() << endl;
|
||
|
}
|
||
|
|
||
|
if ( KMFCompilerInterface *part = dynamic_cast<KMFCompilerInterface*> ( factory->create( 0 , "KMFCompilerInterface") ) ) {
|
||
|
list->append ( part );
|
||
|
|
||
|
}
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
QPtrList<KMFRuleOptionEditInterface>* KMFPluginFactory::KMFRuleOptionEditors( QObject *parent ){
|
||
|
QPtrList<KMFRuleOptionEditInterface> *list = new QPtrList<KMFRuleOptionEditInterface>;
|
||
|
KTrader::OfferList offers = KTrader::self()->query( "KMyFirewall/RuleOptionEdit");
|
||
|
kdDebug() << "Query performed" << endl;
|
||
|
|
||
|
KTrader::OfferList::iterator it;
|
||
|
for ( it = offers.begin(); it != offers.end(); ++it ) {
|
||
|
KService::Ptr ptr = *it;
|
||
|
kdDebug() << "Found KMFRuleOptionEdit Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
|
||
|
KLibFactory *factory = KLibLoader::self()->factory( ptr->library().local8Bit().data() );
|
||
|
kdDebug() << "KLibLoader::self()->lastErrorMessage() " << KLibLoader::self()->lastErrorMessage() << endl;
|
||
|
if ( !factory ) {
|
||
|
kdDebug() << "Couldn't load plugin: " << ptr->name() << endl;
|
||
|
}
|
||
|
if ( KMFRuleOptionEditInterface *part = dynamic_cast<KMFRuleOptionEditInterface*> ( factory->create( parent , "KMFRuleOptionEditInterface") ) ) {
|
||
|
if ( ! part ) {
|
||
|
KMessageBox::error(0, "Couldn't load plugin");
|
||
|
}
|
||
|
list->append( part );
|
||
|
kdDebug() << "Initialiesed Plugin." << endl;
|
||
|
}
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
QPtrList<KMFRuleTargetOptionEditInterface>* KMFPluginFactory::KMFRuleTargetOptionEditors( QObject *parent ) {
|
||
|
QPtrList<KMFRuleTargetOptionEditInterface> *list = new QPtrList<KMFRuleTargetOptionEditInterface>;
|
||
|
KTrader::OfferList offers = KTrader::self()->query( "KMyFirewall/RuleTargetOptionEdit");
|
||
|
kdDebug() << "Query performed" << endl;
|
||
|
|
||
|
KTrader::OfferList::iterator it;
|
||
|
for ( it = offers.begin(); it != offers.end(); ++it ) {
|
||
|
KService::Ptr ptr = *it;
|
||
|
kdDebug() << "Found KMFRuleTargetOptionEdit Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
|
||
|
KLibFactory *factory = KLibLoader::self()->factory( ptr->library().local8Bit().data() );
|
||
|
kdDebug() << "KLibLoader::self()->lastErrorMessage(): " << KLibLoader::self()->lastErrorMessage() << endl;
|
||
|
if ( !factory ) {
|
||
|
kdDebug() << "Couldn't load plugin: " << ptr->name() << endl;
|
||
|
}
|
||
|
if ( KMFRuleTargetOptionEditInterface *part = dynamic_cast<KMFRuleTargetOptionEditInterface*> ( factory->create( parent , "KMFRuleTargetOptionEditInterface") ) ) {
|
||
|
if ( ! part ) {
|
||
|
KMessageBox::error(0, "Couldn't load plugin");
|
||
|
}
|
||
|
list->append( part );
|
||
|
kdDebug() << "Initialiesed Plugin." << endl;
|
||
|
}
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
KMFInstallerInterface* KMFPluginFactory::KMFInstaller( KMFTarget* target ) {
|
||
|
|
||
|
KTrader::OfferList offers = KTrader::self()->query( "KMyFirewall/Installer", " [X-KMyFirewall-Platform] == '"+ target->config()->oS().lower() +"'" );
|
||
|
kdDebug() << "Query performed" << endl;
|
||
|
KService::Ptr ptr = offers.first();
|
||
|
KTrader::OfferList::iterator it;
|
||
|
if ( offers.empty() ) {
|
||
|
kdDebug() << "NO MATCHING PLUGIN FOUND" << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
kdDebug() << "KMFPluginFactory found Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
|
||
|
KLibFactory *factory = KLibLoader::self()->factory( ptr->library().local8Bit().data() );
|
||
|
kdDebug() << "KLibLoader::self()->lastErrorMessage(): " << KLibLoader::self()->lastErrorMessage() << endl;
|
||
|
|
||
|
if ( !factory ) {
|
||
|
kdDebug() << "Couldn't load plugin: " << ptr->name() << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
if ( KMFInstallerInterface *part = dynamic_cast<KMFInstallerInterface*> ( factory->create( KApplication::kApplication() , "KMFInstallerInterface") )
|
||
|
) {
|
||
|
if ( ! part ) {
|
||
|
KMessageBox::error(0, "Couldn't load plugin");
|
||
|
return 0;
|
||
|
}
|
||
|
// kdDebug() << "Returning KMFInstallerInterface" << endl;
|
||
|
return part;
|
||
|
}
|
||
|
kdDebug() << "Returning 0-Pointer" << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
KMFCompilerInterface* KMFPluginFactory::KMFCompiler( KMFTarget* target ) {
|
||
|
kdDebug() << "KMFCompilerInterface* KMFGenericDoc::compiler()" << endl;
|
||
|
kdDebug() << "Start query" << endl;
|
||
|
KTrader::OfferList offers = KTrader::self()->query( "KMyFirewall/Compiler", "[X-KMyFirewall-Language] == '" + target->config()->backend().lower() +"' and [X-KMyFirewall-Platform] == '" + target->config()->oS().lower() + "'" );
|
||
|
kdDebug() << "Query performed" << endl;
|
||
|
KService::Ptr ptr = offers.first();
|
||
|
KTrader::OfferList::iterator it;
|
||
|
if ( offers.empty() ) {
|
||
|
KMessageBox::error(0, i18n("<qt><b>Could not find a matching compiler plugin.</b></qt>") );
|
||
|
kdDebug() << "NO MATCHING PLUGIN FOUND" << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
kdDebug() << "KMFGenericDoc found Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
|
||
|
KLibFactory *factory = KLibLoader::self()->factory( ptr->library().local8Bit().data() );
|
||
|
kdDebug() << "KLibLoader::self()->lastErrorMessage(): " << KLibLoader::self()->lastErrorMessage() << endl;
|
||
|
|
||
|
if ( !factory ) {
|
||
|
KMessageBox::error( 0, i18n("<qt><b>Compiler plugin could not be loaded.</b></qt>") );
|
||
|
kdDebug() << "Couldn't load plugin: " << ptr->name() << endl;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if ( KMFCompilerInterface *part = dynamic_cast<KMFCompilerInterface*> ( factory->create( KApplication::kApplication() , "KMFCompilerInterface" ) ) ) {
|
||
|
kdDebug() << "Returning Compiler Plugin." << endl;
|
||
|
return part;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|