ROOT logo
//-*- Mode: C++ -*-
// $Id$

#ifndef ALIHLTONLINECONFIGURATION_H
#define ALIHLTONLINECONFIGURATION_H
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//* See cxx source for full Copyright notice                               *

///  @file   AliHLTOnlineConfiguration.h
///  @author Matthias Richter
///  @author Lars Christian Raae
///  @date   
///  @brief  Description of the HLT online configuration

#include <vector>

#include "AliHLTLogging.h"
#include <TObject.h>
#include <TArrayC.h>
#include <TList.h>
#include <TXMLNode.h>

/**
 * @class AliHLTOnlineConfiguration
 * @brief Description of the HLT online configuration
 * This class wraps an online HLT configuration file for storage in a
 * CDB object.
 *
 * Ideas:
 * The class provides easy access to the XML tags of the configuration through
 * an XML parser.
 *
 * The online configuration is translated into a tree like configuration
 * structure. The Draw function can be used to create a graph.
 *
 * The xml configuration is loaded into an internal TArrayC buffer, which
 * is automatically compressed depending on the compression level used for
 * root file storage. Later extension will be the implementation of a custom
 * Streamer function implementing the most efficient compression.
 */
class AliHLTOnlineConfiguration : public TObject, public AliHLTLogging {
 public:
  /// standard constructor
  AliHLTOnlineConfiguration();
  /// destructor
  virtual ~AliHLTOnlineConfiguration();

  /// load configuration from file
  int LoadConfiguration(const char* filename);

  /// compress the xml buffer
  int Compress();

  /// uncompress the xml buffer
  int Uncompress();
  
  /// parse the xml buffer
  int Parse();
  
  /// get default chains (sources of HLTOutFormatter)
  const char* GetDefaultChains() const {return fDefaultChains.Data();}
  
  /// get component libraries
  TString GetComponentLibraries();

  /// overloaded from TObject, print info
  virtual void        Print(const char* options) const;

  /// overloaded from TObject, more crude data dump
  virtual void        Dump() const;

  /// overloaded from TObject, clear object
  virtual void        Clear(Option_t * option="");

  /// overloaded from TObject, clone object
  virtual TObject    *Clone(const char *newname="") const;

  /// overloaded from TObject, copy object
  virtual void        Copy(TObject &object) const;

  /// overloaded from TObject, draw graph of the configuration
  virtual void        Draw(Option_t *option="");

  /// custom status bits of TObject
  /// bit 14 to 23 can be freely used
  /// use functions SetBit, ResetBit, TestBit
  enum {
    kLoaded          = BIT(14),   // xml buffer is loaded
    kCompressed      = BIT(15),   // xml buffer is compressed
    kParsed          = BIT(16),   // already parsed
  };

 private:
  /// buffer for XML configuration
  TArrayC fXMLBuffer;
  /// size of XML buffer
  UInt_t fXMLSize;
  /// list of parsed configuration entries
  TList fConfEntryList;
  /// default chains (sources of HLTOutFormatter)
  TString fDefaultChains;
  
  /**
   * Parse XML configuration.
   * @param node       XML root node of configuration
   * @return
   *   -EINVAL if unparsable or empty configuration
   *   -EPROTO if no configuration is loaded
   *   0 if any elements were successfully parsed
   */
  int ParseConfiguration(TXMLNode* node);

  /**
   * Parse XML configuration entry.
   * @param node       XML root node of entry
   * @param id         online component ID
   * @param type       online component type
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */
  int ParseEntry(TXMLNode* node, const char* id, const char* type);
  
  /**
   * Parse standard component configuration.
   * @param id         online component ID
   * @param type       online component type
   * @param cmd        online command
   * @param sources    component sources
   * @param nodes      online computing nodes
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */  
  int ParseStandardComponent(const char* id, const char* type, const char* cmd,
    TString& sources, TString& nodes);
  
  /**
   * Parse RORCPublisher configuration.
   * @param id         online component ID
   * @param type       online component type
   * @param cmd        online command
   * @param sources    component sources
   * @param nodes      online computing nodes
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */  
  int ParseRORCPublisher(const char* id, const char* type, const char* cmd,
    TString& sources, TString& nodes);

  /**
   * Parse TCPDumpSubscriber configuration.
   * @param id         online component ID
   * @param type       online component type
   * @param cmd        online command
   * @param sources    component sources
   * @param nodes      online computing nodes
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */  
  int ParseTCPDumpSubscriber(const char* id, const char* type, const char* cmd,
    TString& sources, TString& nodes);

  /**
   * Parse Relay configuration.
   * @param id         online component ID
   * @param type       online component type
   * @param cmd        online command
   * @param sources    component sources
   * @param nodes      online computing nodes
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */  
  int ParseRelay(const char* id, const char* type, const char* cmd,
    TString& sources, TString& nodes);

  /**
   * Parse HLTOutFormatter configuration.
   * @param id         online component ID
   * @param type       online component type
   * @param cmd        online command
   * @param sources    component sources
   * @param nodes      online computing nodes
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */  
  int ParseHLTOutFormatter(const char* id, const char* type, const char* cmd,
    TString& sources, TString& nodes);

  /**
   * Parse HLTOutWriterSubscriber configuration.
   * @param id         online component ID
   * @param type       online component type
   * @param cmd        online command
   * @param sources    component sources
   * @param nodes      online computing nodes
   * @return
   *   -EINVAL if parsing error
   *   0 if entry was successfully parsed
   */  
  int ParseHLTOutWriterSubscriber(const char* id, const char* type,
    const char* cmd, TString& sources, TString& nodes);

  ClassDef(AliHLTOnlineConfiguration, 1); // description of HLT online configuration
};

#endif
 AliHLTOnlineConfiguration.h:1
 AliHLTOnlineConfiguration.h:2
 AliHLTOnlineConfiguration.h:3
 AliHLTOnlineConfiguration.h:4
 AliHLTOnlineConfiguration.h:5
 AliHLTOnlineConfiguration.h:6
 AliHLTOnlineConfiguration.h:7
 AliHLTOnlineConfiguration.h:8
 AliHLTOnlineConfiguration.h:9
 AliHLTOnlineConfiguration.h:10
 AliHLTOnlineConfiguration.h:11
 AliHLTOnlineConfiguration.h:12
 AliHLTOnlineConfiguration.h:13
 AliHLTOnlineConfiguration.h:14
 AliHLTOnlineConfiguration.h:15
 AliHLTOnlineConfiguration.h:16
 AliHLTOnlineConfiguration.h:17
 AliHLTOnlineConfiguration.h:18
 AliHLTOnlineConfiguration.h:19
 AliHLTOnlineConfiguration.h:20
 AliHLTOnlineConfiguration.h:21
 AliHLTOnlineConfiguration.h:22
 AliHLTOnlineConfiguration.h:23
 AliHLTOnlineConfiguration.h:24
 AliHLTOnlineConfiguration.h:25
 AliHLTOnlineConfiguration.h:26
 AliHLTOnlineConfiguration.h:27
 AliHLTOnlineConfiguration.h:28
 AliHLTOnlineConfiguration.h:29
 AliHLTOnlineConfiguration.h:30
 AliHLTOnlineConfiguration.h:31
 AliHLTOnlineConfiguration.h:32
 AliHLTOnlineConfiguration.h:33
 AliHLTOnlineConfiguration.h:34
 AliHLTOnlineConfiguration.h:35
 AliHLTOnlineConfiguration.h:36
 AliHLTOnlineConfiguration.h:37
 AliHLTOnlineConfiguration.h:38
 AliHLTOnlineConfiguration.h:39
 AliHLTOnlineConfiguration.h:40
 AliHLTOnlineConfiguration.h:41
 AliHLTOnlineConfiguration.h:42
 AliHLTOnlineConfiguration.h:43
 AliHLTOnlineConfiguration.h:44
 AliHLTOnlineConfiguration.h:45
 AliHLTOnlineConfiguration.h:46
 AliHLTOnlineConfiguration.h:47
 AliHLTOnlineConfiguration.h:48
 AliHLTOnlineConfiguration.h:49
 AliHLTOnlineConfiguration.h:50
 AliHLTOnlineConfiguration.h:51
 AliHLTOnlineConfiguration.h:52
 AliHLTOnlineConfiguration.h:53
 AliHLTOnlineConfiguration.h:54
 AliHLTOnlineConfiguration.h:55
 AliHLTOnlineConfiguration.h:56
 AliHLTOnlineConfiguration.h:57
 AliHLTOnlineConfiguration.h:58
 AliHLTOnlineConfiguration.h:59
 AliHLTOnlineConfiguration.h:60
 AliHLTOnlineConfiguration.h:61
 AliHLTOnlineConfiguration.h:62
 AliHLTOnlineConfiguration.h:63
 AliHLTOnlineConfiguration.h:64
 AliHLTOnlineConfiguration.h:65
 AliHLTOnlineConfiguration.h:66
 AliHLTOnlineConfiguration.h:67
 AliHLTOnlineConfiguration.h:68
 AliHLTOnlineConfiguration.h:69
 AliHLTOnlineConfiguration.h:70
 AliHLTOnlineConfiguration.h:71
 AliHLTOnlineConfiguration.h:72
 AliHLTOnlineConfiguration.h:73
 AliHLTOnlineConfiguration.h:74
 AliHLTOnlineConfiguration.h:75
 AliHLTOnlineConfiguration.h:76
 AliHLTOnlineConfiguration.h:77
 AliHLTOnlineConfiguration.h:78
 AliHLTOnlineConfiguration.h:79
 AliHLTOnlineConfiguration.h:80
 AliHLTOnlineConfiguration.h:81
 AliHLTOnlineConfiguration.h:82
 AliHLTOnlineConfiguration.h:83
 AliHLTOnlineConfiguration.h:84
 AliHLTOnlineConfiguration.h:85
 AliHLTOnlineConfiguration.h:86
 AliHLTOnlineConfiguration.h:87
 AliHLTOnlineConfiguration.h:88
 AliHLTOnlineConfiguration.h:89
 AliHLTOnlineConfiguration.h:90
 AliHLTOnlineConfiguration.h:91
 AliHLTOnlineConfiguration.h:92
 AliHLTOnlineConfiguration.h:93
 AliHLTOnlineConfiguration.h:94
 AliHLTOnlineConfiguration.h:95
 AliHLTOnlineConfiguration.h:96
 AliHLTOnlineConfiguration.h:97
 AliHLTOnlineConfiguration.h:98
 AliHLTOnlineConfiguration.h:99
 AliHLTOnlineConfiguration.h:100
 AliHLTOnlineConfiguration.h:101
 AliHLTOnlineConfiguration.h:102
 AliHLTOnlineConfiguration.h:103
 AliHLTOnlineConfiguration.h:104
 AliHLTOnlineConfiguration.h:105
 AliHLTOnlineConfiguration.h:106
 AliHLTOnlineConfiguration.h:107
 AliHLTOnlineConfiguration.h:108
 AliHLTOnlineConfiguration.h:109
 AliHLTOnlineConfiguration.h:110
 AliHLTOnlineConfiguration.h:111
 AliHLTOnlineConfiguration.h:112
 AliHLTOnlineConfiguration.h:113
 AliHLTOnlineConfiguration.h:114
 AliHLTOnlineConfiguration.h:115
 AliHLTOnlineConfiguration.h:116
 AliHLTOnlineConfiguration.h:117
 AliHLTOnlineConfiguration.h:118
 AliHLTOnlineConfiguration.h:119
 AliHLTOnlineConfiguration.h:120
 AliHLTOnlineConfiguration.h:121
 AliHLTOnlineConfiguration.h:122
 AliHLTOnlineConfiguration.h:123
 AliHLTOnlineConfiguration.h:124
 AliHLTOnlineConfiguration.h:125
 AliHLTOnlineConfiguration.h:126
 AliHLTOnlineConfiguration.h:127
 AliHLTOnlineConfiguration.h:128
 AliHLTOnlineConfiguration.h:129
 AliHLTOnlineConfiguration.h:130
 AliHLTOnlineConfiguration.h:131
 AliHLTOnlineConfiguration.h:132
 AliHLTOnlineConfiguration.h:133
 AliHLTOnlineConfiguration.h:134
 AliHLTOnlineConfiguration.h:135
 AliHLTOnlineConfiguration.h:136
 AliHLTOnlineConfiguration.h:137
 AliHLTOnlineConfiguration.h:138
 AliHLTOnlineConfiguration.h:139
 AliHLTOnlineConfiguration.h:140
 AliHLTOnlineConfiguration.h:141
 AliHLTOnlineConfiguration.h:142
 AliHLTOnlineConfiguration.h:143
 AliHLTOnlineConfiguration.h:144
 AliHLTOnlineConfiguration.h:145
 AliHLTOnlineConfiguration.h:146
 AliHLTOnlineConfiguration.h:147
 AliHLTOnlineConfiguration.h:148
 AliHLTOnlineConfiguration.h:149
 AliHLTOnlineConfiguration.h:150
 AliHLTOnlineConfiguration.h:151
 AliHLTOnlineConfiguration.h:152
 AliHLTOnlineConfiguration.h:153
 AliHLTOnlineConfiguration.h:154
 AliHLTOnlineConfiguration.h:155
 AliHLTOnlineConfiguration.h:156
 AliHLTOnlineConfiguration.h:157
 AliHLTOnlineConfiguration.h:158
 AliHLTOnlineConfiguration.h:159
 AliHLTOnlineConfiguration.h:160
 AliHLTOnlineConfiguration.h:161
 AliHLTOnlineConfiguration.h:162
 AliHLTOnlineConfiguration.h:163
 AliHLTOnlineConfiguration.h:164
 AliHLTOnlineConfiguration.h:165
 AliHLTOnlineConfiguration.h:166
 AliHLTOnlineConfiguration.h:167
 AliHLTOnlineConfiguration.h:168
 AliHLTOnlineConfiguration.h:169
 AliHLTOnlineConfiguration.h:170
 AliHLTOnlineConfiguration.h:171
 AliHLTOnlineConfiguration.h:172
 AliHLTOnlineConfiguration.h:173
 AliHLTOnlineConfiguration.h:174
 AliHLTOnlineConfiguration.h:175
 AliHLTOnlineConfiguration.h:176
 AliHLTOnlineConfiguration.h:177
 AliHLTOnlineConfiguration.h:178
 AliHLTOnlineConfiguration.h:179
 AliHLTOnlineConfiguration.h:180
 AliHLTOnlineConfiguration.h:181
 AliHLTOnlineConfiguration.h:182
 AliHLTOnlineConfiguration.h:183
 AliHLTOnlineConfiguration.h:184
 AliHLTOnlineConfiguration.h:185
 AliHLTOnlineConfiguration.h:186
 AliHLTOnlineConfiguration.h:187
 AliHLTOnlineConfiguration.h:188
 AliHLTOnlineConfiguration.h:189
 AliHLTOnlineConfiguration.h:190
 AliHLTOnlineConfiguration.h:191
 AliHLTOnlineConfiguration.h:192
 AliHLTOnlineConfiguration.h:193
 AliHLTOnlineConfiguration.h:194
 AliHLTOnlineConfiguration.h:195
 AliHLTOnlineConfiguration.h:196
 AliHLTOnlineConfiguration.h:197
 AliHLTOnlineConfiguration.h:198
 AliHLTOnlineConfiguration.h:199
 AliHLTOnlineConfiguration.h:200
 AliHLTOnlineConfiguration.h:201
 AliHLTOnlineConfiguration.h:202
 AliHLTOnlineConfiguration.h:203
 AliHLTOnlineConfiguration.h:204
 AliHLTOnlineConfiguration.h:205
 AliHLTOnlineConfiguration.h:206
 AliHLTOnlineConfiguration.h:207
 AliHLTOnlineConfiguration.h:208
 AliHLTOnlineConfiguration.h:209
 AliHLTOnlineConfiguration.h:210
 AliHLTOnlineConfiguration.h:211
 AliHLTOnlineConfiguration.h:212