00001 /***************************************************************************** 00002 * Copyright (C) 2011 by Benjamin Hadorn (b_hadorn@bluewin.ch) 00003 ***************************************************************************** 00004 * Project : Zeus Base Library 00005 * Module : Module 00006 * Package : Zeus.ZeusBase.MOM 00007 * Author : Benjamin Hadorn 00008 * Date : 27.12.2011 00009 * System : Zeus-Framework 00010 ***************************************************************************** 00011 * Licence: * 00012 * This library is free software; you can redistribute it and/or modify * 00013 * it under the terms of the GNU Lesser General Public License as * 00014 * published by the Free Software Foundation; either version * 00015 * 2.1 of the License, or (at your option) any later version. * 00016 * * 00017 * This library is distributed in the hope that it will be useful, * 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00020 * GNU Lesser General Public License for more details. * 00021 * * 00022 * You should have received a copy of the GNU Lesser General Public * 00023 * License along with this library; if not, write to the Free Software * 00024 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA * 00025 *****************************************************************************/ 00026 00027 /***************************************************************************** 00028 * Changes: 00029 * 27.12.2011 bha: created zeus 2.0 00030 *****************************************************************************/ 00031 00032 #ifndef ModuleH 00033 #define ModuleH 00034 00035 #include <zeusbase/MOM/Interfaces/IModule.hpp> 00036 #include <zeusbase/System/XObjectFactory.h> 00037 #include <zeusbase/System/XLoaderObject.h> 00038 00039 BEGIN_NAMESPACE_Zeus 00040 00041 class TZeusAPI; 00042 00043 /***************************************************************************/ 00046 /***************************************************************************/ 00047 zeusbase_class TModule : public TXLoaderObject, public IModule 00048 { 00049 public: 00050 TModule(IXMLNode& rNode); 00051 00052 //Methods of IModule 00053 virtual Uint MQUALIFIER getMode() const; 00054 virtual void MQUALIFIER activate(); 00055 virtual void MQUALIFIER deactivate(); 00056 virtual bool MQUALIFIER isActive(bool bGlobaly = false) const; 00057 virtual Retval MQUALIFIER getZeusAPI(IZeusAPI*& rpApi); 00058 virtual Retval MQUALIFIER getModule(const IString& rName, IModule*& rpModule); 00059 void MQUALIFIER getName(IString& rName) const; 00060 virtual Retval MQUALIFIER registerActiveModule(IModule& rModule); 00061 virtual Retval MQUALIFIER unregisterActiveModule(IModule& rModule); 00062 virtual Retval MQUALIFIER getActiveModule(IModule*& rpModule); 00063 virtual Retval MQUALIFIER getModuleSession(IModuleSession*& rpSession); 00064 virtual void MQUALIFIER getModuleSessionLibrary(IString& rName)const; 00065 00066 //Methods of IXLoaderObject 00067 virtual Retval MQUALIFIER load(); 00068 virtual Retval MQUALIFIER unload(); 00069 00070 //Methods of IXObject 00071 virtual bool MQUALIFIER freeze(); 00072 virtual bool MQUALIFIER unfreeze(); 00073 00074 //Methods of IZUnknown 00075 MEMORY_MANAGER_DECL 00076 00077 protected: 00078 REG_SUB_BEGIN(TModule) 00079 REG_SUB_ADD(TModule, L"TModule"); 00080 REG_SUB_END 00081 00083 TZeusAPI* m_pZeusAPI; 00085 IModuleSession* m_pSession; 00086 00087 virtual ~TModule(); 00088 virtual void createAPI(TZeusAPI*& rpAPI); 00089 00090 private: 00092 bool m_bActive; 00094 IModule* m_pActiveModule; 00096 TString m_strSessionLib; 00097 00098 void activateFirstChild(); 00099 00100 }; 00101 00102 //ININE METHODS 00103 /***************************************************************************/ 00106 /***************************************************************************/ 00107 inline void MQUALIFIER TModule::getName(IString& rName) const 00108 { 00109 TXObject::getName(rName); 00110 } 00111 00112 /***************************************************************************/ 00115 /***************************************************************************/ 00116 inline void MQUALIFIER TModule::getModuleSessionLibrary(IString& rName)const 00117 { 00118 rName.assignStr(m_strSessionLib); 00119 } 00120 00121 00122 00123 END_NAMESPACE_Zeus 00124 #endif