version 1.2, 2003/08/20 20:08:26
|
version 1.3, 2003/10/16 23:15:47
|
|
|
#include <Pegasus/Common/Destroyer.h> | #include <Pegasus/Common/Destroyer.h> |
#include <Pegasus/Common/FileSystem.h> | #include <Pegasus/Common/FileSystem.h> |
#include <Pegasus/Common/MessageLoader.h> //l10n | #include <Pegasus/Common/MessageLoader.h> //l10n |
#include <Pegasus/Config/ConfigManager.h> |
|
| |
PEGASUS_NAMESPACE_BEGIN |
#ifdef PEGASUS_OS_OS400 |
|
#include "CreateProviderOS400SystemState.h" |
|
#endif |
// added support to re-activate ProviderAdapter ( A Schuur ) |
|
| |
/* |
PEGASUS_NAMESPACE_BEGIN |
ProviderModule::ProviderModule(const String & fileName) |
|
: _fileName(fileName), |
|
_ref_count(0), |
|
_library(0) |
|
{ |
|
_interfaceFileName=String::EMPTY; |
|
_library = System::loadDynamicLibrary((const char *)_fileName.getCString()); |
|
} |
|
*/ |
|
| |
ProviderModule::ProviderModule(const String & fileName, const String & interfaceName) | ProviderModule::ProviderModule(const String & fileName, const String & interfaceName) |
: _fileName(fileName), | : _fileName(fileName), |
|
|
} | } |
} | } |
| |
/* |
|
ProviderModule::ProviderModule(const String & fileName, |
|
const String & providerName) |
|
: _fileName(fileName), |
|
_library(0), |
|
_providerName(providerName), |
|
_provider(0) |
|
{ |
|
} |
|
*/ |
|
|
|
ProviderModule::ProviderModule(const String & fileName, | ProviderModule::ProviderModule(const String & fileName, |
const String & providerName, | const String & providerName, |
const String & interfaceName, | const String & interfaceName, |
|
|
| |
ProviderModule::~ProviderModule(void) | ProviderModule::~ProviderModule(void) |
{ | { |
|
|
} | } |
| |
CIMProvider *ProviderModule::load(const String & providerName) | CIMProvider *ProviderModule::load(const String & providerName) |
{ | { |
// get the interface adapter library first |
|
CIMProvider *provider = 0; | CIMProvider *provider = 0; |
| |
/* |
|
if (_interfaceFileName.size()>0) { |
|
_adapter=ProviderAdapterManager::get_pamgr()->addAdapter( |
|
_interfaceName,_interfaceFileName,_fileName,providerName); |
|
provider=dynamic_cast<CIMProvider*>(_adapter); |
|
if (provider==NULL) { |
|
//l10n |
|
//throw Exception("ProviderLoadFailure ("+providerName+ |
|
//"Provider is not a BaseProvider"); |
|
String s0 = "ProviderLoadFailure"; |
|
String s2 = "Provider"; |
|
String s3 = "BaseProvider"; |
|
throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.IS_NOT_A" |
|
"$0 ($1$2 is not a $3)", |
|
s0, |
|
providerName, |
|
s2, |
|
s3)); |
|
} |
|
_ref_count++; |
|
return provider; |
|
} |
|
*/ |
|
|
|
// dynamically load the provider library | // dynamically load the provider library |
if(_library == 0) | if(_library == 0) |
{ | { |
|
|
//l10n | //l10n |
//String errorString = "Cannot load library, error: " + System::dynamicLoadError(); | //String errorString = "Cannot load library, error: " + System::dynamicLoadError(); |
//throw Exception("ProviderLoadFailure (" + _fileName + ":" + providerName + "):" + errorString); | //throw Exception("ProviderLoadFailure (" + _fileName + ":" + providerName + "):" + errorString); |
String s0 = "ProviderLoadFailure"; |
|
throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.CANNOT_LOAD_LIBRARY", | throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.CANNOT_LOAD_LIBRARY", |
"$0 ($1:$2):Cannot load library, error: $3", |
"ProviderLoadFailure ($0:$1):Cannot load library, error: $2", |
s0, |
|
_fileName, | _fileName, |
providerName, | providerName, |
System::dynamicLoadError())); | System::dynamicLoadError())); |
|
|
//l10n | //l10n |
//String errorString = "entry point not found."; | //String errorString = "entry point not found."; |
//throw Exception("ProviderLoadFailure (" + _fileName + ":" + providerName + "):" + errorString); | //throw Exception("ProviderLoadFailure (" + _fileName + ":" + providerName + "):" + errorString); |
String s0 = "ProviderLoadFailure"; |
|
throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.ENTRY_POINT_NOT_FOUND", | throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.ENTRY_POINT_NOT_FOUND", |
"$0 ($1:$2):entry point not found.", |
"ProviderLoadFailure ($0:$1):entry point not found.", |
s0, |
|
_fileName, | _fileName, |
providerName)); | providerName)); |
} | } |
| |
// invoke the provider entry point | // invoke the provider entry point |
|
#ifndef PEGASUS_OS_OS400 |
provider = createProvider(providerName); | provider = createProvider(providerName); |
|
#else |
|
// On OS/400, need to call a layer of code that does platform-specific |
|
// checks before calling the provider |
|
provider = OS400_CreateProvider(providerName.getCString(), createProvider, _fileName); |
|
#endif |
|
|
| |
// test for the appropriate interface | // test for the appropriate interface |
if(dynamic_cast<CIMProvider *>(provider) == 0) | if(dynamic_cast<CIMProvider *>(provider) == 0) |
|
|
//l10n | //l10n |
//String errorString = "provider is not a CIMProvider."; | //String errorString = "provider is not a CIMProvider."; |
//throw Exception("ProviderLoadFailure (" + _fileName + ":" + providerName + "):" + errorString); | //throw Exception("ProviderLoadFailure (" + _fileName + ":" + providerName + "):" + errorString); |
String s0 = "ProviderLoadFailure"; |
|
String s3 = "CIMProvider"; |
|
throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.PROVIDER_IS_NOT_A", | throw Exception(MessageLoaderParms("ProviderManager.ProviderModule.PROVIDER_IS_NOT_A", |
"$0 ($1:$2):provider is not a $3.", |
"ProviderLoadFailure ($0:$1):provider is not a CIMProvider.", |
s0, |
|
_fileName, | _fileName, |
providerName, |
providerName)); |
s3)); |
|
} | } |
|
|
_ref_count++; | _ref_count++; |
|
|
return(provider); | return(provider); |
} | } |
| |
void ProviderModule::unloadModule(void) | void ProviderModule::unloadModule(void) |
{ | { |
_ref_count--; | _ref_count--; |
|
|
if(_ref_count.value() > 0) | if(_ref_count.value() > 0) |
return; | return; |
|
|
_ref_count = 0; | _ref_count = 0; |
|
|
if(_library != 0) | if(_library != 0) |
{ | { |
System::unloadDynamicLibrary(_library); | System::unloadDynamicLibrary(_library); |
|
|
Boolean ProviderModule::operator == (const void *key) const | Boolean ProviderModule::operator == (const void *key) const |
{ | { |
String *prov = reinterpret_cast<String *>(const_cast<void *>(key)); | String *prov = reinterpret_cast<String *>(const_cast<void *>(key)); |
|
|
if(String::equalNoCase(_fileName, *prov)) | if(String::equalNoCase(_fileName, *prov)) |
return(true); | return(true); |
|
|
return(false); | return(false); |
} | } |
| |
|
|
{ | { |
if(String::equalNoCase(_fileName, pm._fileName)) | if(String::equalNoCase(_fileName, pm._fileName)) |
return(true); | return(true); |
|
|
return(false); | return(false); |
} | } |
| |