ewmscp  ..
requestProvider.h
Go to the documentation of this file.
1 #ifndef __requestProvider_h__
2 #define __requestProvider_h__
3 #include "copyRequest.h"
4 
9 
11 //typedef std::pair<std::string, std::string> singleMap;
12 
14  public:
15  private:
16  struct pathMapCmp {
17  bool operator()(const singleMap& lhs,
18  const singleMap& rhs) const {
19  if (lhs.first.size() == rhs.first.size()) {
20  return lhs.first < rhs.first;
21  } else {
22  return lhs.first.size() > rhs.first.size();
23  }
24 
25  }
26  };
27  typedef std::set<singleMap, pathMapCmp> pathMapType;
28  protected:
33  bool parents;
36 
37 
38 
39  // now follows some reflection magic
40  class factoryClass;
41  static std::map<std::string, factoryClass*>& getFactoryMap();
42  class factoryClass {
43  protected:
44  factoryClass(const std::string& name) {
45  getFactoryMap()[name] = this;
46  }
47  public:
48  virtual requestProvider* create(decltype(requests) aRequests,
49  decltype(delayedRequests) aDelayedRequests,
50  decltype(parents) aParents,
51  decltype(InputHandler) aInputHandler,
52  decltype(OutputHandler) aOutputHandler) = 0;
53  };
54  template <class T> class factoryTemplate: public factoryClass {
55  public:
56  factoryTemplate(const std::string& name): factoryClass(name) {};
57  requestProvider* create(decltype(requests) aRequests,
58  decltype(delayedRequests) aDelayedRequests,
59  decltype(parents) aParents,
60  decltype(InputHandler) aInputHandler,
61  decltype(OutputHandler) aOutputHandler
62  ) override {
63  return new T(aRequests, aDelayedRequests, aParents, aInputHandler, aOutputHandler);
64  }
65  };
66  // end of reflection magic
67 
70  virtual const singleMap& getDstPath(const std::string& source,
71  std::string& destination,
72  bool baseNameOnly = false);
73  public:
74  requestProvider(decltype(requests) aRequests,
75  decltype(delayedRequests) aDelayedRequests,
76  decltype(parents) aParents,
77  decltype(InputHandler) aInputHandler,
78  decltype(OutputHandler) aOutputHandler):
79  requests(aRequests),
80  delayedRequests(aDelayedRequests),
81  parents(aParents),
82  InputHandler(aInputHandler),
83  OutputHandler(aOutputHandler) {
84  };
85  virtual ~requestProvider() = default;
86  virtual bool isFollowMode() const = 0;
87  virtual void prepareMappings(std::vector<std::string>& sources,
88  std::string& destination);
89  virtual void printMappings(std::ostream& stream);
90  virtual void processSources(const std::vector<std::string>& sources) = 0;
91 
92  static requestProvider* newProvider(const std::string& choice,
93  decltype(requests) aRequests,
94  decltype(delayedRequests) aDelayedRequests,
95  decltype(parents) aParents,
96  decltype(InputHandler) aInputHandler,
97  decltype(OutputHandler) aOutputHandler);
99 
100 };
101 
102 
104 #endif
options::single< std::string >
requestProvider::factoryClass::create
virtual requestProvider * create(decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)=0
requestProvider::pathMapType
std::set< singleMap, pathMapCmp > pathMapType
Definition: requestProvider.h:27
requestProvider::pathMapCmp::operator()
bool operator()(const singleMap &lhs, const singleMap &rhs) const
Definition: requestProvider.h:17
requestProvider::~requestProvider
virtual ~requestProvider()=default
waitQueues::timed< copyRequest::base >
requestProvider::newProvider
static requestProvider * newProvider(const std::string &choice, decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
Definition: requestProvider.cpp:16
requestProvider
generic provider of copy requests
Definition: requestProvider.h:13
requestProvider::parents
bool parents
Definition: requestProvider.h:33
requestProvider::delayedRequests
copyRequest::timedQueue & delayedRequests
Definition: requestProvider.h:32
options::map< std::string, pathMapType >
requestProvider::badMapEntry
static singleMap badMapEntry
Definition: requestProvider.h:30
requestProvider::pathMapCmp
Definition: requestProvider.h:16
requestProvider::addAllowedNamesToOption
static void addAllowedNamesToOption(options::single< std::string > &option)
Definition: requestProvider.cpp:24
outputHandler::base
Definition: outputHandler.h:17
requestProvider::factoryClass::factoryClass
factoryClass(const std::string &name)
Definition: requestProvider.h:44
requestProvider::OutputHandler
outputHandler::base * OutputHandler
Definition: requestProvider.h:35
requestProvider::processSources
virtual void processSources(const std::vector< std::string > &sources)=0
requestProvider::factoryTemplate
Definition: requestProvider.h:54
requestProvider::factoryTemplate::create
requestProvider * create(decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler) override
Definition: requestProvider.h:57
requestProvider::factoryTemplate::factoryTemplate
factoryTemplate(const std::string &name)
Definition: requestProvider.h:56
requestProvider::pathMap
static options::map< std::string, pathMapType > pathMap
Definition: requestProvider.h:29
requestProvider::getFactoryMap
static std::map< std::string, factoryClass * > & getFactoryMap()
requestProvider::requests
copyRequest::simpleQueue & requests
Definition: requestProvider.h:31
copyRequest.h
inputHandler::base
class for handling input This is the (abstract) base class for handling input, both reading a file vi...
Definition: inputHandler.h:35
requestProvider::prepareMappings
virtual void prepareMappings(std::vector< std::string > &sources, std::string &destination)
Definition: requestProvider.cpp:70
waitQueues::simple< copyRequest::base >
singleMap
std::pair< std::string, std::string > singleMap
Definition: copyRequest.h:52
requestProvider::InputHandler
inputHandler::base * InputHandler
Definition: requestProvider.h:34
requestProvider::factoryClass
Definition: requestProvider.h:42
requestProvider::printMappings
virtual void printMappings(std::ostream &stream)
Definition: requestProvider.cpp:81
requestProvider::getDstPath
virtual const singleMap & getDstPath(const std::string &source, std::string &destination, bool baseNameOnly=false)
get detstination papth for a given source path
Definition: requestProvider.cpp:30
requestProvider::isFollowMode
virtual bool isFollowMode() const =0
requestProvider::requestProvider
requestProvider(decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
! use only the file name part in the destination
Definition: requestProvider.h:74