/*************************************************************************** * Copyright (C) 2015 by gempa GmbH * * * * All Rights Reserved. * * * * NOTICE: All information contained herein is, and remains * * the property of gempa GmbH and its suppliers, if any. The intellectual * * and technical concepts contained herein are proprietary to gempa GmbH * * and its suppliers. * * Dissemination of this information or reproduction of this material * * is strictly forbidden unless prior written permission is obtained * * from gempa GmbH. * ***************************************************************************/ #ifndef GEMPA_CAPS_APPLICATION_H #define GEMPA_CAPS_APPLICATION_H #include namespace Gempa { namespace CAPS { class SC_GEMPA_CAPS_API Application { public: Application(int argc, char **argv); virtual ~Application() {} /** * Exit the application and set the returnCode. * @param returnCode The value returned from exec() */ virtual void exit(int returnCode); /** * @brief Conventient function to simplify usage * @return The value returned from exec() */ int operator()() { return exec(); } /** * @brief In case of an interrupt this method can be used to * forward the signal to the internal signal handling. * @param signal */ static void Interrupt(int signal); protected: /** * @brief Cleanup method called before exec() returns. */ virtual void done(); /** * Execs the mainloop and waits until exit() is called * or a appropriate signal has been fired (e.g. SIGTERM). * @return The value that was set with to exit() */ int exec(); /** * @brief This method can be used to implement custom * signal handling. * @param signal The emitted signal */ virtual void handleInterrupt(int signal); /** * @brief Initialization method. This method calls the initCommandLine * initConfiguration and validateParameters function */ virtual bool init(); /** * @brief Handles commandline arguments */ virtual bool initCommandLine(); /** * @brief Handles configuration files */ virtual bool initConfiguration(); /** * @brief This method must be implemented in the inherited class to * execute the plugin specific code. */ virtual bool run(); /** * @brief This method can be used to verify custom configuration or commandline parameters */ virtual bool validateParameters(); protected: bool _exitRequested; int _argc; char **_argv; private: int _returnCode; static Application *_app; }; } } #endif