00001 #ifndef ANALYSISSERVICE_H 00002 #define ANALYSISSERVICE_H 00003 #include <is/info.h> 00004 #include <is/inforeceiver.h> 00005 #include <ipc/object.h> 00006 #include <ipc/server.h> 00007 00008 #include <string> 00009 #include <boost/utility.hpp> 00010 #include <boost/thread.hpp> 00011 00012 #include "SctFitter/FitStrategy.h" 00013 #include "AnalysisServiceInterface.hh" 00014 #include "AnalysisArguments.h" 00015 00016 namespace SctConfiguration{ 00017 class Configuration; 00018 } 00019 namespace SctAnalysis { 00020 class DcsInterface; 00021 class AnalysisWorkerGroup; 00022 00023 class AnalysisService : 00024 public IPCNamedObject<POA_AnalysisServiceI::AnalysisServiceInterface>, 00025 private boost::noncopyable 00026 { 00027 private: 00028 void shutdown(); 00029 public: 00030 virtual ~AnalysisService(); 00034 void run(); 00038 static void generalCallback(ISCallbackInfo* isc); 00042 static void testDataCallback(ISCallbackInfo * isc); 00046 static void scanResultCallback(ISCallbackInfo * isc); 00050 void setFitStrategy(const string& name) throw(LogicError); 00054 SctFitter::FitStrategy& getFitStrategy() const throw(LogicError); 00058 static AnalysisService& instance(); 00059 00064 static AnalysisService& initialize(AnalysisArguments args); 00069 virtual void purge() throw(); 00074 virtual void analyze(const char* testname) throw(); 00080 virtual void analyzeModule(const char* testname, 00081 const char* modulename) throw(); 00085 virtual char* status() throw(); 00089 virtual CORBA::Short busy (); 00093 virtual CORBA::Short queueLength (); 00097 DcsInterface& getDcsInterface(); 00101 const std::string getOutputISServerName(); 00105 void recover(); 00106 00110 void setFifo(bool); 00114 bool isFifo(); 00115 00116 static IPCServer& getServer() throw(); 00117 00122 boost::shared_ptr<SctConfiguration::Configuration> getConfiguration(); 00126 AnalysisServiceI::StringList* listAlgorithms(); 00127 protected: 00131 AnalysisWorkerGroup* workergroup; 00132 DcsInterface* dcsinterface; 00133 private: 00134 boost::recursive_mutex m_status_access ; 00135 SctFitter::FitStrategy* fitStrategy; 00136 std::auto_ptr<ISInfoReceiver> infoReceiver; 00137 static AnalysisService* service; 00138 AnalysisService(AnalysisArguments args); 00139 AnalysisArguments m_args; 00140 boost::shared_ptr<SctConfiguration::Configuration> s_configuration; 00141 }; 00142 } 00143 00144 #endif //#ifndef ANALYSISSERVICE_H