// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "IUriManager.h" #include "Containers/Array.h" namespace UE::DatasmithImporter { class IUriResolver; struct FUriResolverRegisterInformation { FUriResolverRegisterInformation(FName InName, const TSharedRef& InUriResolver) : Name(InName) , UriResolver(InUriResolver) {} FName Name; TSharedRef UriResolver; }; class FUriManager : public IUriManager { public: // IUriManager interface begin virtual TSharedPtr GetOrCreateExternalSource(const FSourceUri& URI) const override; virtual bool CanResolveUri(const FSourceUri& URI) const override; virtual void RegisterResolver(FName ResolverName, const TSharedRef& UriResolver) override; virtual bool UnregisterResolver(FName ResolverName) override; virtual const TArray& GetSupportedSchemes() const override; #if WITH_EDITOR virtual TSharedPtr BrowseExternalSource(const FName& UriScheme, const FSourceUri& DefaultSourceUri) const override; #endif //WITH_EDITOR // IUriManager interface end private: TSharedPtr GetFirstCompatibleResolver(const FSourceUri& Uri) const; void InvalidateCache(); TArray RegisteredResolvers; mutable TArray CachedSchemes; }; }