#include <IssueFactory.h>
Public Types | |
typedef std::map< std::string, CreateIssueCallback > | CallbackMap |
typedef std::map< std::string, CreateIssueCallback > | CallbackMap |
typedef Issue *(* | CreateIssueCallback )() |
typedef Issue *(* | CreateIssueCallback )() |
Public Member Functions | |
Issue * | build (const Issue *original) |
build a clone of an issue | |
Issue * | build (const std::string &name, const string_map_type *values) const |
build a issue out of name and set values | |
Issue * | build (const std::string &name) const |
build an empty issue out of a name | |
Issue * | build (const Issue *original) |
build a clone of an issue | |
Issue * | build (const std::string &name, const string_map_type *values) const |
build a issue out of name and set values | |
Issue * | build (const std::string &name) const |
build an empty issue out of a name | |
bool | register_issue (const std::string &name, CreateIssueCallback creator) |
register an issue factory | |
bool | register_issue (const std::string &name, CreateIssueCallback creator) |
register an issue factory | |
void | write_to (std::ostream &stream) const |
writes description to stream | |
void | write_to (std::ostream &stream) const |
writes description to stream | |
Static Public Member Functions | |
IssueFactory * | instance () |
method to access singleton | |
IssueFactory * | instance () |
method to access singleton | |
void | print_registered () |
prints all registered issue types | |
void | print_registered () |
prints all registered issue types | |
Protected Member Functions | |
IssueFactory () | |
IssueFactory () | |
Protected Attributes | |
CallbackMap | m_factory_map |
Static Protected Attributes | |
IssueFactory * | s_factory |
IssueFactory * | s_factory = 0 |
This class implements the factory pattern for Issues. The main responsability of this class is to keep track of the existing types of Issues Each issue should register one factory method for instances of this class. This is needed for deserializing of Issues.
|
|
|
|
|
|
|
|
|
00021 {} ;
|
|
|
|
build a clone of an issue
|
|
build a issue out of name and set values
|
|
build an empty issue out of a name
|
|
build a clone of an issue Clones an Issue. This method creates (using the other build methods) an new Issue with the same value table
00091 { 00092 ERS_PRE_CHECK_PTR(original); 00093 const std::string name = original->get_class_name() ; 00094 const ers::string_map_type *values = original->get_value_table(); 00095 ERS_ASSERT(values!=0,"null value table for original"); 00096 ers::Issue *clone_issue = build(name,values); 00097 return clone_issue ; 00098 }// build
|
|
build a issue out of name and set values Builds an issue out of a name and a value table
00076 { 00077 Issue *i = build(name); 00078 if (i) { 00079 i->set_values(*values); 00080 } // if i 00081 return i ; 00082 } // build
|
|
build an empty issue out of a name Builds an issue out of the name it was registered with
00057 { 00058 CallbackMap::const_iterator i = m_factory_map.find(name); 00059 if (i == m_factory_map.end()) { 00060 // throw ERS_ISSUE_FACTORY_ERROR(name,"issue not registred") ; 00061 return new DefaultIssue(name); 00062 } // Not found 00063 ers::Issue *issue = (i->second)() ; 00064 if (0==issue) { 00065 throw ERS_ISSUE_FACTORY_ERROR(name,"factory function returned null"); 00066 } // issue null 00067 return issue ; 00068 } // build
|
|
method to access singleton
|
|
method to access singleton Finds the singleton instance of the factory. If the instance is not allocated yet, it is.
00028 { 00029 if (0==s_factory) { 00030 s_factory = new IssueFactory(); 00031 } // creation needed 00032 return s_factory ; 00033 } // instance
|
|
prints all registered issue types
|
|
prints all registered issue types
00035 { 00036 IssueFactory *factory = instance() ; 00037 std::cerr << *factory; 00038 } //print_registered_issues
|
|
register an issue factory
|
|
register an issue factory Register an issue type with the factory
00047 { 00048 return m_factory_map.insert(CallbackMap::value_type(name,creator)).second; 00049 } // register_Issue
|
|
writes description to stream
|
|
writes description to stream
00100 { 00101 stream << "Issue factory - registered issues\n" ; 00102 stream << "---------------------------------\n" ; 00103 int i = 0 ; 00104 for(CallbackMap::const_iterator pos=m_factory_map.begin();pos!=m_factory_map.end();++pos) { 00105 std::string name = pos->first; 00106 stream << i << ")\t" << name << std::endl; 00107 i++ ; 00108 } // for 00109 stream << "---------------------------------\n" ; 00110 } //
|
|
|
|
|
|
|