Example #1
0
 bool Plugin::load()
 {
   if(DynamicLibrary::load())
     if (loadMetadata())
     {
       return loadFactories();
     }
   return false;
 }
Example #2
0
  QList<Extension *> PluginManager::extensions(QObject *parent)
  {
    loadFactories();
    if(d->extensionsLoaded)
      return d->extensions;

    foreach(PluginFactory *factory, factories(Plugin::ExtensionType)) {
      Extension *extension = static_cast<Extension *>(factory->createInstance(parent));
      d->extensions.append(extension);
    }
Example #3
0
void QOrganizerManagerData::createEngine(const QString& managerName, const QMap<QString, QString>& parameters)
{
    m_engine = 0;

    QString builtManagerName = managerName.isEmpty() ? QOrganizerManager::availableManagers().value(0) : managerName;
    if (builtManagerName == QLatin1String("memory")) {
        m_engine = new QOrganizerManagerEngineV2Wrapper(
            QOrganizerItemMemoryEngine::createMemoryEngine(parameters));
    } else {
        int implementationVersion = parameterValue(parameters, QTORGANIZER_IMPLEMENTATION_VERSION_NAME, -1);

        bool found = false;
        bool loadedDynamic = false;

        /* First check static factories */
        loadStaticFactories();

        /* See if we got a fast hit */
        QList<QOrganizerManagerEngineFactory*> factories = m_engines.values(builtManagerName);
        m_lastError = QOrganizerManager::NoError;

        while(!found) {
            foreach (QOrganizerManagerEngineFactory* f, factories) {
                QList<int> versions = f->supportedImplementationVersions();
                if (implementationVersion == -1 ||//no given implementation version required
                        versions.isEmpty() || //the manager engine factory does not report any version
                        versions.contains(implementationVersion)) {
                    QOrganizerManagerEngine* engine = f->engine(parameters, &m_lastError);
                    // if it's a V2, use it
                    m_engine = qobject_cast<QOrganizerManagerEngineV2*>(engine);
                    if (!m_engine && engine) {
                        // Nope, v1, so wrap it
                        m_engine = new QOrganizerManagerEngineV2Wrapper(engine);
                    }
                    found = true;
                    break;
                }
            }

            // Break if found or if this is the second time through
            if (loadedDynamic || found)
                break;

            // otherwise load dynamic factories and reloop
            loadFactories();
            factories = m_engines.values(builtManagerName);
            loadedDynamic = true;
        }

        // XXX remove this
        // the engine factory could lie to us, so check the real implementation version
        if (m_engine && (implementationVersion != -1 && m_engine->managerVersion() != implementationVersion)) {
            m_lastError = QOrganizerManager::VersionMismatchError;
            m_engine = 0;
        }

        if (!m_engine) {
            if (m_lastError == QOrganizerManager::NoError)
                m_lastError = QOrganizerManager::DoesNotExistError;
            m_engine = new QOrganizerItemInvalidEngine();
        }
    }