/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include "ImportContextRegistryManager.h" #include namespace AZ { namespace SceneAPI { namespace SceneBuilder { ImportContextRegistryManager::ImportContextRegistryManager() = default; ImportContextRegistryManager::~ImportContextRegistryManager() = default; void ImportContextRegistryManager::RegisterContextProvider(ImportContextProvider* provider) { if (provider) { m_importContextProviders.push_back(AZStd::unique_ptr(provider)); } } void ImportContextRegistryManager::UnregisterContextProvider(ImportContextProvider* provider) { AZ_TracePrintf("SceneAPI", "Unregistered ImportContextProvider %s", provider->GetImporterName().data()); for (auto it = m_importContextProviders.begin(); it != m_importContextProviders.end(); ++it) { if (it->get() == provider) { m_importContextProviders.erase(it); break; // Assuming only one instance can be registered at a time } } } ImportContextProvider* ImportContextRegistryManager::SelectImportProvider(AZStd::string_view fileExtension) const { AZ_TracePrintf( "SceneAPI", "Matching ImportContextProvider (registered %d) suitable for extension: %.*s", m_importContextProviders.size(), static_cast(fileExtension.length()), fileExtension.data()); // search in reverse order since the default AssImp Provider can handle all extenstions for (auto it = m_importContextProviders.rbegin(); it != m_importContextProviders.rend(); ++it) { if (it->get()->CanHandleExtension(fileExtension)) { return it->get(); } AZ_TracePrintf( "SceneAPI", "Importer %s cannot handle %.*s, skipping", it->get()->GetImporterName().data(), static_cast(fileExtension.length()), fileExtension.data()); } return nullptr; // No provider found } } // namespace SceneBuilder } // namespace SceneAPI } // namespace AZ