00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef GAUDISVC_PERSISTENCYSVC_OUTPUTSTREAM_H
00011 #define GAUDISVC_PERSISTENCYSVC_OUTPUTSTREAM_H
00012
00013
00014 #include <memory>
00015 #include <vector>
00016 #include <string>
00017
00018
00019 #include "GaudiKernel/IDataSelector.h"
00020 #include "GaudiKernel/Algorithm.h"
00021 #include "GaudiKernel/Property.h"
00022
00023 template <class ConcreteAlgorithm> class AlgFactory;
00024 class IDataDirectory;
00025 class IConversionSvc;
00026 class IDataManagerSvc;
00027 class OutputStreamAgent;
00028 class DataStoreItem;
00029
00034 class OutputStream : public Algorithm {
00035 friend class AlgFactory<OutputStream>;
00036 public:
00037 typedef std::vector<DataStoreItem*> Items;
00038 typedef std::vector<std::string> ItemNames;
00039 protected:
00041 bool m_doPreLoad;
00043 std::string m_storeName;
00045 std::string m_persName;
00047 std::string m_output;
00049 std::string m_outputName;
00051 OutputStreamAgent* m_agent;
00053 IDataProviderSvc* m_pDataProvider;
00055 IDataManagerSvc* m_pDataManager;
00057 IConversionSvc* m_pConversionSvc;
00059 DataStoreItem* m_currentItem;
00061 ItemNames m_itemNames;
00063 Items m_itemList;
00065 IDataSelector m_objects;
00067 int m_events;
00069 StringArrayProperty m_acceptNames;
00071 StringArrayProperty m_requireNames;
00073 StringArrayProperty m_vetoNames;
00075 std::vector<Algorithm*>* m_acceptAlgs;
00077 std::vector<Algorithm*>* m_requireAlgs;
00079 std::vector<Algorithm*>* m_vetoAlgs;
00080
00081 protected:
00083 OutputStream(const std::string& name, ISvcLocator* pSvcLocator);
00085 virtual ~OutputStream();
00087 StatusCode decodeAcceptAlgs( );
00089 void acceptAlgsHandler( Property& theProp );
00091 StatusCode decodeRequireAlgs( );
00093 void requireAlgsHandler( Property& theProp );
00095 StatusCode decodeVetoAlgs( );
00097 void vetoAlgsHandler( Property& theProp );
00099 StatusCode decodeAlgorithms( StringArrayProperty& theNames,
00100 std::vector<Algorithm*>* theAlgs );
00102 bool isEventAccepted( ) const;
00103
00104 public:
00106 virtual StatusCode initialize();
00108 virtual StatusCode finalize();
00110 virtual StatusCode execute();
00111
00112 virtual StatusCode connectConversionSvc();
00114 virtual bool collect(IDataDirectory* dir, int level);
00116 void clearItems();
00118 void addItem(const std::string& descriptor);
00120 void clearSelection();
00122 IDataSelector* selectedObjects() {
00123 return &m_objects;
00124 }
00125 };
00126
00127 #endif // GAUDISVC_PERSISTENCYSVC_OUTPUTSTREAM_H