00001 #ifndef ANALYSISSERVICE_H
00002 #define ANALYSISSERVICE_H
00003 #include <is/isinfo.h>
00004 #include <ipc/object.h>
00005 #include <ipc/server.h>
00006
00007 #include <string>
00008 #include <boost/utility.hpp>
00009 #include <boost/thread.hpp>
00010
00011 #include "SctFitter/FitStrategy.h"
00012 #include "AnalysisServiceInterface.hh"
00013 #include "AnalysisArguments.h"
00014
00015 namespace SctAnalysis {
00016 class DcsInterface;
00017 class AnalysisWorkerGroup;
00018
00019 class AnalysisService :
00020 public IPCNamedObject<POA_AnalysisServiceI::AnalysisServiceInterface>,
00021 private boost::noncopyable
00022 {
00023 private:
00024 void shutdown();
00025 public:
00026 virtual ~AnalysisService();
00030 void run();
00034 static void generalCallback(ISCallbackInfo* isc);
00038 static void testDataCallback(ISCallbackInfo * isc);
00042 static void scanResultCallback(ISCallbackInfo * isc);
00046 void setFitStrategy(const string& name) throw(LogicError);
00050 SctFitter::FitStrategy& getFitStrategy() const throw(LogicError);
00054 static AnalysisService& instance();
00055
00060 static AnalysisService& initialize(AnalysisArguments args);
00065 virtual void purge() throw();
00070 virtual void analyze(const char* testname) throw();
00076 virtual void analyzeModule(const char* testname,
00077 const char* modulename) throw();
00081 virtual char* status() throw();
00085 virtual CORBA::Short busy ();
00089 virtual CORBA::Short queueLength ();
00093 DcsInterface& getDcsInterface();
00097 const std::string getOutputISServerName();
00101 void recover();
00102
00103 static IPCServer& getServer() throw();
00104
00105 protected:
00109 AnalysisWorkerGroup* workergroup;
00110 DcsInterface* dcsinterface;
00111 private:
00112 boost::recursive_mutex m_status_access ;
00113 SctFitter::FitStrategy* fitStrategy;
00114 std::auto_ptr<ISInfoReceiver> infoReceiver;
00115 static AnalysisService* service;
00116 AnalysisService(AnalysisArguments args);
00117 AnalysisArguments m_args;
00118 };
00119 }
00120
00121 #endif //#ifndef ANALYSISSERVICE_H