ARC SDK
JobDescriptionParserPlugin.h
Go to the documentation of this file.
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_JOBDESCRIPTIONPARSERPLUGIN_H__
4 #define __ARC_JOBDESCRIPTIONPARSERPLUGIN_H__
5 
10 #include <map>
11 #include <string>
12 #include <utility>
13 #include <algorithm>
14 
15 #include <arc/loader/Loader.h>
16 #include <arc/loader/Plugin.h>
17 
18 
19 namespace Arc {
20 
21  class JobDescription;
22  class Logger;
23 
34  public:
36  JobDescriptionParsingError(const std::string& message, const std::pair<int, int>& line_pos = std::make_pair(0, 0), const std::string& failing_code = "")
37  : message(message), failing_code(failing_code), line_pos(line_pos) {}
39  std::string message;
40  std::string failing_code;
41  std::pair<int, int> line_pos;
42  };
43 
45  public:
46  typedef enum {
47  Success,
49  WrongLanguage
50  } Result;
51  JobDescriptionParserPluginResult(void):v_(Success) { };
52  JobDescriptionParserPluginResult(bool v):v_(v?Success:Failure) { };
53  JobDescriptionParserPluginResult(Result v):v_(v) { };
54  operator bool(void) { return (v_ == Success); };
55  bool operator!(void) { return (v_ != Success); };
56  bool operator==(bool v) { return ((v_ == Success) == v); };
57  bool operator==(Result v) { return (v_ == v); };
61  bool HasErrors() const { return !errors_.empty(); };
65  const std::list<JobDescriptionParsingError>& GetErrors() const { return errors_; };
69  void AddError(const JobDescriptionParsingError& error) { errors_.push_back(error); };
73  void AddError(const IString& msg,
74  const std::pair<int, int>& location = std::make_pair(0, 0),
75  const std::string& failing_code = "") {
76  errors_.push_back(JobDescriptionParsingError(msg.str(), location, failing_code));
77  }
81  void SetSuccess() { v_ = Success; };
85  void SetFailure() { v_ = Failure; };
89  void SetWrongLanguage() {v_ = WrongLanguage; };
90  private:
91  Result v_;
92  std::list<JobDescriptionParsingError> errors_;
93  };
94 
96 
122  : public Plugin {
123  public:
124  virtual ~JobDescriptionParserPlugin();
125 
127 
173  virtual JobDescriptionParserPluginResult Parse(const std::string& source, std::list<JobDescription>& jobdescs, const std::string& language = "", const std::string& dialect = "") const = 0;
174 
176 
179  virtual JobDescriptionParserPluginResult Assemble(const JobDescription& job, std::string& output, const std::string& language, const std::string& dialect = "") const = 0;
180 
182 
187  virtual JobDescriptionParserPluginResult UnParse(const JobDescription& job, std::string& output, const std::string& language, const std::string& dialect = "") const { return Assemble(job, output, language, dialect); };
188 
190 
194  const std::list<std::string>& GetSupportedLanguages() const { return supportedLanguages; }
195 
197 
202  bool IsLanguageSupported(const std::string& language) const { return std::find(supportedLanguages.begin(), supportedLanguages.end(), language) != supportedLanguages.end(); }
203 
205 
208  const std::string& GetError(void) { return error; };
209 
210  protected:
211  JobDescriptionParserPlugin(PluginArgument* parg);
212 
214 
217  std::string& SourceLanguage(JobDescription& j) const;
218 
220 
224  std::list<std::string> supportedLanguages;
225 
227 
230  mutable std::string error;
231 
232  static Logger logger;
233  };
234 
244  : public Loader {
245 
246  public:
251 
257 
262  JobDescriptionParserPlugin* load(const std::string& name);
263 
267  const std::list<JobDescriptionParserPlugin*>& GetJobDescriptionParserPlugins() const { return jdps; }
268 
269  class iterator {
270  private:
272  iterator& operator=(const iterator& it);
273  public:
274  ~iterator() {}
275  //iterator& operator=(const iterator& it) { current = it.current; jdpl = it.jdpl; return *this; }
276  JobDescriptionParserPlugin& operator*() { return **current; }
277  const JobDescriptionParserPlugin& operator*() const { return **current; }
278  JobDescriptionParserPlugin* operator->() { return *current; }
279  const JobDescriptionParserPlugin* operator->() const { return *current; }
280  iterator& operator++();
281  operator bool() { return !jdpl->jdpDescs.empty() || current != jdpl->jdps.end(); }
282 
284  private:
285  void LoadNext();
286 
287  std::list<JobDescriptionParserPlugin*>::iterator current;
289  };
290 
291  iterator GetIterator() { return iterator(*this); }
292 
293  private:
294  std::list<JobDescriptionParserPlugin*> jdps;
295  std::list<ModuleDesc> jdpDescs;
296 
297  void scan();
298  bool scaningDone;
299  };
300 } // namespace Arc
301 
302 #endif // __ARC_JOBDESCRIPTIONPARSERPLUGIN_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
void AddError(const IString &msg, const std::pair< int, int > &location=std::make_pair(0, 0), const std::string &failing_code="")
Definition: JobDescriptionParserPlugin.h:73
Definition: JobDescriptionParserPlugin.h:243
std::list< std::string > supportedLanguages
List of supported job description languages.
Definition: JobDescriptionParserPlugin.h:224
std::string error
[DEPRECATED] Parsing error
Definition: JobDescriptionParserPlugin.h:230
A logger class.
Definition: Logger.h:493
const std::list< JobDescriptionParserPlugin * > & GetJobDescriptionParserPlugins() const
Definition: JobDescriptionParserPlugin.h:267
Class used for localised output of log messages.
Definition: IString.h:180
Abstract plugin class for different parsers.
Definition: JobDescriptionParserPlugin.h:121
void SetWrongLanguage()
Definition: JobDescriptionParserPlugin.h:89
void SetSuccess()
Definition: JobDescriptionParserPlugin.h:81
Definition: JobDescription.h:842
const std::list< JobDescriptionParsingError > & GetErrors() const
Definition: JobDescriptionParserPlugin.h:65
void SetFailure()
Definition: JobDescriptionParserPlugin.h:85
JobDescriptionParserPlugin * load(const std::string &name)
const std::string & GetError(void)
[DEPRECATED] Get parsing error
Definition: JobDescriptionParserPlugin.h:208
std::string & SourceLanguage(JobDescription &j) const
[DEPRECATED] Get reference to sourceLanguage member
bool HasErrors() const
Definition: JobDescriptionParserPlugin.h:61
const std::list< std::string > & GetSupportedLanguages() const
Get supported job description languages.
Definition: JobDescriptionParserPlugin.h:194
Result
Definition: JobDescriptionParserPlugin.h:46
virtual JobDescriptionParserPluginResult UnParse(const JobDescription &job, std::string &output, const std::string &language, const std::string &dialect="") const
[DEPRECATED] Assemble job description into string
Definition: JobDescriptionParserPlugin.h:187
virtual JobDescriptionParserPluginResult Parse(const std::string &source, std::list< JobDescription > &jobdescs, const std::string &language="", const std::string &dialect="") const =0
Parse string into JobDescription objects.
Definition: JobDescriptionParserPlugin.h:44
Definition: JobDescriptionParserPlugin.h:269
Definition: JobDescriptionParserPlugin.h:48
void AddError(const JobDescriptionParsingError &error)
Definition: JobDescriptionParserPlugin.h:69
bool IsLanguageSupported(const std::string &language) const
Check if language is supported.
Definition: JobDescriptionParserPlugin.h:202
virtual JobDescriptionParserPluginResult Assemble(const JobDescription &job, std::string &output, const std::string &language, const std::string &dialect="") const =0
Assemble job description into string.
Definition: JobDescriptionParserPlugin.h:33