#include "project/SourceGroupFactory.h" #include "project/SourceGroup.h" #include "project/SourceGroupFactoryModule.h" #include "settings/SourceGroupSettings.h" std::shared_ptr SourceGroupFactory::getInstance() { if (!s_instance) { s_instance = std::shared_ptr(new SourceGroupFactory()); } return s_instance; } void SourceGroupFactory::addModule(std::shared_ptr module) { m_modules.push_back(module); } std::vector> SourceGroupFactory::createSourceGroups(std::vector> allSourceGroupSettings) { std::vector> sourceGroups; for (const std::shared_ptr& sourceGroupSettings: allSourceGroupSettings) { std::shared_ptr sourceGroup = createSourceGroup(sourceGroupSettings); if (sourceGroup) { sourceGroups.push_back(sourceGroup); } } return sourceGroups; } std::shared_ptr SourceGroupFactory::createSourceGroup(std::shared_ptr settings) { std::shared_ptr sourceGroup; for (const std::shared_ptr& module: m_modules) { if (module->supports(settings->getType())) { sourceGroup = module->createSourceGroup(settings); break; } } return sourceGroup; } std::shared_ptr SourceGroupFactory::s_instance; SourceGroupFactory::SourceGroupFactory() { }