From: Scott Cantor Date: Sat, 28 Apr 2007 19:27:16 +0000 (+0000) Subject: Enhance plugin manager template with alternate type keys. X-Git-Tag: 1.0-alpha1~53 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=commitdiff_plain;h=aef745549b689fcdde529319bc70b2823264aa2c Enhance plugin manager template with alternate type keys. --- diff --git a/xmltooling/PluginManager.h b/xmltooling/PluginManager.h index 213771e..40d072f 100644 --- a/xmltooling/PluginManager.h +++ b/xmltooling/PluginManager.h @@ -37,13 +37,14 @@ namespace xmltooling { /** - * Template for management/access to plugins constructed based on a string type + * Template for management/access to plugins constructed based on a Key type * and arbitrary parameters. * * @param T class of plugin to manage + * @param Key the key for type lookup * @param Params parameters for plugin construction */ - template class PluginManager + template class PluginManager { public: PluginManager() {} @@ -55,10 +56,10 @@ namespace xmltooling { /** * Registers the factory for a given type. * - * @param type the name of the plugin type + * @param type the key to the plugin type * @param factory the factory function for the plugin type */ - void registerFactory(const std::string& type, typename PluginManager::Factory* factory) { + void registerFactory(const typename Key& type, typename PluginManager::Factory* factory) { if (!type.empty() && factory) m_map[type]=factory; } @@ -66,9 +67,9 @@ namespace xmltooling { /** * Unregisters the factory for a given type. * - * @param type the name of the plugin type + * @param type the key to the plugin type */ - void deregisterFactory(const std::string& type) { + void deregisterFactory(const typename Key& type) { if (!type.empty()) m_map.erase(type); } @@ -84,19 +85,19 @@ namespace xmltooling { * Builds a new instance of a plugin of a given type, configuring it * with the supplied parameters. * - * @param type the name of the plugin type + * @param type the key to the plugin type * @param p parameters to configure plugin * @return the constructed plugin */ - T* newPlugin(const std::string& type, const Params& p) { - typename std::map::const_iterator i=m_map.find(type); + T* newPlugin(const typename Key& type, const Params& p) { + typename std::map::const_iterator i=m_map.find(type); if (i==m_map.end()) - throw UnknownExtensionException("Unknown plugin type ('$1')",params(1,type.c_str())); + throw UnknownExtensionException("Unknown plugin type."); return i->second(p); } private: - std::map m_map; + std::map m_map; }; }; diff --git a/xmltooling/XMLToolingConfig.h b/xmltooling/XMLToolingConfig.h index 2a99b1c..f9f1946 100644 --- a/xmltooling/XMLToolingConfig.h +++ b/xmltooling/XMLToolingConfig.h @@ -240,17 +240,17 @@ namespace xmltooling { /** * Manages factories for KeyInfoResolver plugins. */ - PluginManager KeyInfoResolverManager; + PluginManager KeyInfoResolverManager; /** * Manages factories for CredentialResolver plugins. */ - PluginManager CredentialResolverManager; + PluginManager CredentialResolverManager; /** * Manages factories for TrustEngine plugins. */ - PluginManager TrustEngineManager; + PluginManager TrustEngineManager; /** * Maps an XML Signature/Encryption algorithm identifier to a library-specific @@ -277,12 +277,12 @@ namespace xmltooling { * *

The factory interface takes a peer name/endpoint pair. */ - PluginManager > SOAPTransportManager; + PluginManager > SOAPTransportManager; /** * Manages factories for StorageService plugins. */ - PluginManager StorageServiceManager; + PluginManager StorageServiceManager; }; }; diff --git a/xmltooling/security/impl/CredentialResolver.cpp b/xmltooling/security/impl/CredentialResolver.cpp index 5cafddd..c0de4ce 100644 --- a/xmltooling/security/impl/CredentialResolver.cpp +++ b/xmltooling/security/impl/CredentialResolver.cpp @@ -26,7 +26,7 @@ using namespace xmltooling; namespace xmltooling { - XMLTOOL_DLLLOCAL PluginManager::Factory FilesystemCredentialResolverFactory; + XMLTOOL_DLLLOCAL PluginManager::Factory FilesystemCredentialResolverFactory; }; void XMLTOOL_API xmltooling::registerCredentialResolvers() diff --git a/xmltooling/security/impl/KeyInfoResolver.cpp b/xmltooling/security/impl/KeyInfoResolver.cpp index dda9367..6b182f8 100644 --- a/xmltooling/security/impl/KeyInfoResolver.cpp +++ b/xmltooling/security/impl/KeyInfoResolver.cpp @@ -30,7 +30,7 @@ using namespace xmltooling; using namespace std; namespace xmltooling { - XMLTOOL_DLLLOCAL PluginManager::Factory InlineKeyInfoResolverFactory; + XMLTOOL_DLLLOCAL PluginManager::Factory InlineKeyInfoResolverFactory; }; void XMLTOOL_API xmltooling::registerKeyInfoResolvers() diff --git a/xmltooling/security/impl/TrustEngine.cpp b/xmltooling/security/impl/TrustEngine.cpp index adc2c2e..9884f46 100644 --- a/xmltooling/security/impl/TrustEngine.cpp +++ b/xmltooling/security/impl/TrustEngine.cpp @@ -31,8 +31,8 @@ using namespace xmltooling; using namespace std; namespace xmltooling { - XMLTOOL_DLLLOCAL PluginManager::Factory ExplicitKeyTrustEngineFactory; - XMLTOOL_DLLLOCAL PluginManager::Factory ChainingTrustEngineFactory; + XMLTOOL_DLLLOCAL PluginManager::Factory ExplicitKeyTrustEngineFactory; + XMLTOOL_DLLLOCAL PluginManager::Factory ChainingTrustEngineFactory; }; void XMLTOOL_API xmltooling::registerTrustEngines() diff --git a/xmltooling/util/StorageService.cpp b/xmltooling/util/StorageService.cpp index 4cfe7a0..b5b5782 100644 --- a/xmltooling/util/StorageService.cpp +++ b/xmltooling/util/StorageService.cpp @@ -27,7 +27,7 @@ using namespace xmltooling; using namespace std; namespace xmltooling { - XMLTOOL_DLLLOCAL PluginManager::Factory MemoryStorageServiceFactory; + XMLTOOL_DLLLOCAL PluginManager::Factory MemoryStorageServiceFactory; }; void XMLTOOL_API xmltooling::registerStorageServices()