Enhance plugin manager template with alternate type keys.
authorScott Cantor <cantor.2@osu.edu>
Sat, 28 Apr 2007 19:27:16 +0000 (19:27 +0000)
committerScott Cantor <cantor.2@osu.edu>
Sat, 28 Apr 2007 19:27:16 +0000 (19:27 +0000)
xmltooling/PluginManager.h
xmltooling/XMLToolingConfig.h
xmltooling/security/impl/CredentialResolver.cpp
xmltooling/security/impl/KeyInfoResolver.cpp
xmltooling/security/impl/TrustEngine.cpp
xmltooling/util/StorageService.cpp

index 213771e..40d072f 100644 (file)
 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() {}
@@ -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<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;
     };
 
 };
index 2a99b1c..f9f1946 100644 (file)
@@ -240,17 +240,17 @@ namespace xmltooling {
         /**
          * 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
@@ -277,12 +277,12 @@ namespace xmltooling {
          * 
          * <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;
     };
 
 };
index 5cafddd..c0de4ce 100644 (file)
@@ -26,7 +26,7 @@
 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()
index dda9367..6b182f8 100644 (file)
@@ -30,7 +30,7 @@ using namespace xmltooling;
 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()
index adc2c2e..9884f46 100644 (file)
@@ -31,8 +31,8 @@ using namespace xmltooling;
 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()
index 4cfe7a0..b5b5782 100644 (file)
@@ -27,7 +27,7 @@ using namespace xmltooling;
 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()