#ifndef LREXPORTERSFACTORY_H
#define LREXPORTERSFACTORY_H

#include "lrattribsabstractfactory.h"
#include "lrexporterintf.h"

namespace LimeReport {

typedef ReportExporterInterface* (*CreateExporter)(ReportEnginePrivate* parent);

struct ExporterAttribs {
    QString m_alias;
    QString m_tag;
    ExporterAttribs() { }
    ExporterAttribs(const QString& alias, const QString& tag): m_alias(alias), m_tag(tag) { }
    bool operator==(const ExporterAttribs& right) const
    {
        return (m_alias == right.m_alias) && (m_tag == right.m_tag);
    }
};

class ExportersFactory:
    public AttribsAbstractFactory<LimeReport::ReportExporterInterface, QString, CreateExporter,
                                  ExporterAttribs> {
private:
    friend class Singleton<ExportersFactory>;

private:
    ExportersFactory() { }
    ~ExportersFactory() { }
    ExportersFactory(const ExportersFactory&) { }
    ExportersFactory& operator=(const ExportersFactory&) { return *this; }
};

} // namespace LimeReport

#endif // LREXPORTERSFACTORY_H