00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef OW_PerlPROVIDERIFC_HPP_
00031 #define OW_PerlPROVIDERIFC_HPP_
00032 #include "OW_config.h"
00033 #include "OW_SharedLibrary.hpp"
00034 #include "OW_ProviderIFCBaseIFC.hpp"
00035 #include "OW_Map.hpp"
00036 #include "OW_MutexLock.hpp"
00037 #include "OW_FTABLERef.hpp"
00038 
00039 namespace OW_NAMESPACE
00040 {
00041 
00046 class PerlProviderIFC : public ProviderIFCBaseIFC
00047 {
00048 public:
00049    static const char * const CREATIONFUNC;
00050    PerlProviderIFC();
00051    ~PerlProviderIFC();
00052 protected:
00053    virtual const char* getName() const { return "perl"; }
00054    virtual void doInit(const ProviderEnvironmentIFCRef& env,
00055       InstanceProviderInfoArray& i,
00056       SecondaryInstanceProviderInfoArray& si,
00057 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00058       AssociatorProviderInfoArray& a,
00059 #endif
00060       MethodProviderInfoArray& m,
00061       IndicationProviderInfoArray& ind);
00062    virtual InstanceProviderIFCRef doGetInstanceProvider(
00063       const ProviderEnvironmentIFCRef& env,
00064       const char* provIdString);
00065    virtual MethodProviderIFCRef doGetMethodProvider(
00066       const ProviderEnvironmentIFCRef& env,
00067       const char* provIdString);
00068 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00069    virtual AssociatorProviderIFCRef doGetAssociatorProvider(
00070       const ProviderEnvironmentIFCRef& env,
00071       const char* provIdString);
00072 #endif
00073    virtual IndicationProviderIFCRef doGetIndicationProvider(
00074       const ProviderEnvironmentIFCRef& env,
00075       const char* provIdString);
00076    virtual IndicationExportProviderIFCRefArray doGetIndicationExportProviders(
00077       const ProviderEnvironmentIFCRef& env
00078       );
00079    virtual PolledProviderIFCRefArray doGetPolledProviders(
00080       const ProviderEnvironmentIFCRef& env
00081       );
00082    void loadProviders(const ProviderEnvironmentIFCRef& env,
00083       InstanceProviderInfoArray& i,
00084 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00085       AssociatorProviderInfoArray& a,
00086 #endif
00087       MethodProviderInfoArray& m,
00088       IndicationProviderInfoArray& ind);
00089    virtual void doUnloadProviders(const ProviderEnvironmentIFCRef& env)
00090    {
00091       
00092    }
00093 private:
00094    typedef Map<String, FTABLERef> ProviderMap;
00095    
00096    typedef Array<FTABLERef > LoadedProviderArray;
00097    FTABLERef getProvider(const ProviderEnvironmentIFCRef& env,
00098       const char* provIdString);
00099    void loadNoIdProviders(const ProviderEnvironmentIFCRef& env);
00100    ProviderMap m_provs;
00101    Mutex m_guard;
00102    LoadedProviderArray m_noidProviders;
00103    bool m_loadDone;
00104 };
00105 typedef SharedLibraryReference< Reference<PerlProviderIFC> > PerlProviderIFCRef;
00106 
00107 } 
00108 
00109 #endif