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 T, typename Params> class PluginManager
+ template <class T, class Key, typename Params> class PluginManager
{
public:
PluginManager() {}
/**
* 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;
}
/**
* 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);
}
* 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<std::string, typename PluginManager::Factory*>::const_iterator i=m_map.find(type);
+ T* newPlugin(const typename Key& type, const Params& p) {
+ typename std::map<typename Key, typename PluginManager::Factory*>::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<std::string, typename PluginManager::Factory*> m_map;
+ std::map<typename Key, typename PluginManager::Factory*> m_map;
};
};
/**
* Manages factories for KeyInfoResolver plugins.
*/
- PluginManager<KeyInfoResolver,const xercesc::DOMElement*> KeyInfoResolverManager;
+ PluginManager<KeyInfoResolver,std::string,const xercesc::DOMElement*> KeyInfoResolverManager;
/**
* Manages factories for CredentialResolver plugins.
*/
- PluginManager<CredentialResolver,const xercesc::DOMElement*> CredentialResolverManager;
+ PluginManager<CredentialResolver,std::string,const xercesc::DOMElement*> CredentialResolverManager;
/**
* Manages factories for TrustEngine plugins.
*/
- PluginManager<TrustEngine,const xercesc::DOMElement*> TrustEngineManager;
+ PluginManager<TrustEngine,std::string,const xercesc::DOMElement*> TrustEngineManager;
/**
* Maps an XML Signature/Encryption algorithm identifier to a library-specific
*
* <p>The factory interface takes a peer name/endpoint pair.
*/
- PluginManager<SOAPTransport,std::pair<const char*,const char*> > SOAPTransportManager;
+ PluginManager<SOAPTransport,std::string,std::pair<const char*,const char*> > SOAPTransportManager;
/**
* Manages factories for StorageService plugins.
*/
- PluginManager<StorageService,const xercesc::DOMElement*> StorageServiceManager;
+ PluginManager<StorageService,std::string,const xercesc::DOMElement*> StorageServiceManager;
};
};
using namespace xmltooling;
namespace xmltooling {
- XMLTOOL_DLLLOCAL PluginManager<CredentialResolver,const DOMElement*>::Factory FilesystemCredentialResolverFactory;
+ XMLTOOL_DLLLOCAL PluginManager<CredentialResolver,std::string,const DOMElement*>::Factory FilesystemCredentialResolverFactory;
};
void XMLTOOL_API xmltooling::registerCredentialResolvers()
using namespace std;
namespace xmltooling {
- XMLTOOL_DLLLOCAL PluginManager<KeyInfoResolver,const DOMElement*>::Factory InlineKeyInfoResolverFactory;
+ XMLTOOL_DLLLOCAL PluginManager<KeyInfoResolver,string,const DOMElement*>::Factory InlineKeyInfoResolverFactory;
};
void XMLTOOL_API xmltooling::registerKeyInfoResolvers()
using namespace std;
namespace xmltooling {
- XMLTOOL_DLLLOCAL PluginManager<TrustEngine,const DOMElement*>::Factory ExplicitKeyTrustEngineFactory;
- XMLTOOL_DLLLOCAL PluginManager<TrustEngine,const DOMElement*>::Factory ChainingTrustEngineFactory;
+ XMLTOOL_DLLLOCAL PluginManager<TrustEngine,string,const DOMElement*>::Factory ExplicitKeyTrustEngineFactory;
+ XMLTOOL_DLLLOCAL PluginManager<TrustEngine,string,const DOMElement*>::Factory ChainingTrustEngineFactory;
};
void XMLTOOL_API xmltooling::registerTrustEngines()
using namespace std;
namespace xmltooling {
- XMLTOOL_DLLLOCAL PluginManager<StorageService,const DOMElement*>::Factory MemoryStorageServiceFactory;
+ XMLTOOL_DLLLOCAL PluginManager<StorageService,string,const DOMElement*>::Factory MemoryStorageServiceFactory;
};
void XMLTOOL_API xmltooling::registerStorageServices()