ewmscp  ..
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Types | List of all members
requestProvider Class Referenceabstract

generic provider of copy requests More...

#include <requestProvider.h>

Inheritance diagram for requestProvider:
[legend]
Collaboration diagram for requestProvider:
[legend]

Classes

class  factoryClass
 
class  factoryTemplate
 
struct  pathMapCmp
 

Public Member Functions

 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 More...
 
virtual ~requestProvider ()=default
 
virtual bool isFollowMode () const =0
 
virtual void prepareMappings (std::vector< std::string > &sources, std::string &destination)
 
virtual void printMappings (std::ostream &stream)
 
virtual void processSources (const std::vector< std::string > &sources)=0
 

Static Public Member Functions

static requestProvidernewProvider (const std::string &choice, decltype(requests) aRequests, decltype(delayedRequests) aDelayedRequests, decltype(parents) aParents, decltype(InputHandler) aInputHandler, decltype(OutputHandler) aOutputHandler)
 
static void addAllowedNamesToOption (options::single< std::string > &option)
 

Protected Member Functions

virtual const singleMapgetDstPath (const std::string &source, std::string &destination, bool baseNameOnly=false)
 get detstination papth for a given source path More...
 

Static Protected Member Functions

static std::map< std::string, factoryClass * > & getFactoryMap ()
 

Protected Attributes

copyRequest::simpleQueuerequests
 
copyRequest::timedQueuedelayedRequests
 
bool parents
 
inputHandler::baseInputHandler
 
outputHandler::baseOutputHandler
 

Static Protected Attributes

static options::map< std::string, pathMapTypepathMap
 
static singleMap badMapEntry
 

Private Types

typedef std::set< singleMap, pathMapCmppathMapType
 

Detailed Description

generic provider of copy requests

Definition at line 13 of file requestProvider.h.

Member Typedef Documentation

◆ pathMapType

Definition at line 27 of file requestProvider.h.

Constructor & Destructor Documentation

◆ requestProvider()

requestProvider::requestProvider ( decltype(requests aRequests,
decltype(delayedRequests aDelayedRequests,
decltype(parents aParents,
decltype(InputHandler aInputHandler,
decltype(OutputHandler aOutputHandler 
)
inline

! use only the file name part in the destination

Definition at line 74 of file requestProvider.h.

78  :
79  requests(aRequests),
80  delayedRequests(aDelayedRequests),
81  parents(aParents),
82  InputHandler(aInputHandler),
83  OutputHandler(aOutputHandler) {
84  };

◆ ~requestProvider()

virtual requestProvider::~requestProvider ( )
virtualdefault

Member Function Documentation

◆ addAllowedNamesToOption()

void requestProvider::addAllowedNamesToOption ( options::single< std::string > &  option)
static

Definition at line 24 of file requestProvider.cpp.

24  {
25  for (const auto& item : getFactoryMap()) {
26  option.fAddToRange(item.first);
27  }
28 }

References options::internal::typed_base< T, forceRangeValueTypeString >::fAddToRange(), and getFactoryMap().

Here is the call graph for this function:

◆ getDstPath()

const singleMap & requestProvider::getDstPath ( const std::string &  source,
std::string &  destination,
bool  baseNameOnly = false 
)
protectedvirtual

get detstination papth for a given source path

Returns
path map entry used in this case
Parameters
destination! [in] the source path
baseNameOnly! [ou] the destination path

Reimplemented in cmdLineRequestProvider.

Definition at line 30 of file requestProvider.cpp.

32  {
33  for (const auto& item : pathMap) {
34  if (item.first.empty() // we have the catchall item
35  || source.find(item.first) == 0) { // srcPath starts with this mapped dir
36  destination = item.second;
37  if (destination.back() != '/') {
38  destination += "/";
39  }
40  auto shortPath = source.substr(item.first.size());
41  while (!shortPath.empty() && shortPath.front() == '/') {
42  shortPath.erase(0, 1);
43  }
44  if (parents && !baseNameOnly) {
45  if (shortPath.find("./") == 0) {
46  destination += shortPath.substr(2);
47  } else {
48  destination += shortPath;
49  }
50  } else {
51  auto disposable_buffer = strdup(shortPath.c_str());
52  destination += basename(disposable_buffer);
53  free(disposable_buffer);
54  }
55  return item;
56  }
57  }
59  source, "map paths", "no dir mapping found");
60  for (const auto& item : pathMap) {
62  source, "map paths",
63  "candidate: ", item.first, " -> ", item.second);
64  }
65  throw std::runtime_error("no dir mapping found for " + source);
66  return badMapEntry;
67 }

References badMapEntry, errMsg::crit, errMsg::emit(), parents, and pathMap.

Referenced by followInotifyWatchRequestProvider::followStream(), cmdLineRequestProvider::getDstPath(), followJsonRequestProvider::processJson(), policyRunRequestProvider::processSource(), and followBeeGfsRequestProvider::processSources().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFactoryMap()

static std::map<std::string, factoryClass*>& requestProvider::getFactoryMap ( )
staticprotected

Referenced by addAllowedNamesToOption(), requestProvider::factoryClass::factoryClass(), and newProvider().

Here is the caller graph for this function:

◆ isFollowMode()

virtual bool requestProvider::isFollowMode ( ) const
pure virtual

◆ newProvider()

requestProvider * requestProvider::newProvider ( const std::string &  choice,
decltype(requests aRequests,
decltype(delayedRequests aDelayedRequests,
decltype(parents aParents,
decltype(InputHandler aInputHandler,
decltype(OutputHandler aOutputHandler 
)
static

Definition at line 16 of file requestProvider.cpp.

21  {
22  return getFactoryMap()[choice]->create(aRequests, aDelayedRequests, aParents, aInputHandler, aOutputHandler);
23 }

References getFactoryMap().

Here is the call graph for this function:

◆ prepareMappings()

void requestProvider::prepareMappings ( std::vector< std::string > &  sources,
std::string &  destination 
)
virtual

Reimplemented in cmdLineRequestProvider, listingRequestProvider, and checksumTestRequestProvider.

Definition at line 70 of file requestProvider.cpp.

71  {
72  if (!destination.empty()) { // last arg (destination) is also a source
73  sources.push_back(destination);
74  destination.clear();
75  }
76  if (pathMap.empty()) {
77  throw std::runtime_error("no mapping given");
78  }
79 }

References pathMap.

◆ printMappings()

void requestProvider::printMappings ( std::ostream &  stream)
virtual

Reimplemented in cmdLineRequestProvider.

Definition at line 81 of file requestProvider.cpp.

81  {
82  stream << "Path mapping:\n";
83  stream << "There are " << pathMap.size() << " directory mappings:\n";
84  for (const auto& item : pathMap) {
85  stream << "'" << item.first << "' -> '" << item.second << "'\n";
86  }
87 }

References pathMap.

Referenced by cmdLineRequestProvider::printMappings().

Here is the caller graph for this function:

◆ processSources()

virtual void requestProvider::processSources ( const std::vector< std::string > &  sources)
pure virtual

Member Data Documentation

◆ badMapEntry

singleMap requestProvider::badMapEntry
staticprotected

Definition at line 30 of file requestProvider.h.

Referenced by getDstPath().

◆ delayedRequests

copyRequest::timedQueue& requestProvider::delayedRequests
protected

Definition at line 32 of file requestProvider.h.

Referenced by followRequestProvider::enqueueOrAppend().

◆ InputHandler

inputHandler::base* requestProvider::InputHandler
protected

◆ OutputHandler

outputHandler::base* requestProvider::OutputHandler
protected

Definition at line 35 of file requestProvider.h.

Referenced by cmdLineRequestProvider::prepareMappings().

◆ parents

bool requestProvider::parents
protected

Definition at line 33 of file requestProvider.h.

Referenced by getDstPath(), and cmdLineRequestProvider::processSource().

◆ pathMap

options::map<std::string, pathMapType> requestProvider::pathMap
staticprotected

◆ requests

copyRequest::simpleQueue& requestProvider::requests
protected

The documentation for this class was generated from the following files:
errMsg::location
class for defining the location of a error message in the source code.
Definition: errMsgQueue.h:14
options::internal::typed_base::fAddToRange
virtual void fAddToRange(rangeValueType aValue)
add a value to the range of allowed values
Definition: Options.h:458
errMsg::level::crit
@ crit
requestProvider::parents
bool parents
Definition: requestProvider.h:33
requestProvider::delayedRequests
copyRequest::timedQueue & delayedRequests
Definition: requestProvider.h:32
requestProvider::badMapEntry
static singleMap badMapEntry
Definition: requestProvider.h:30
requestProvider::OutputHandler
outputHandler::base * OutputHandler
Definition: requestProvider.h:35
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
errMsg::emit
void emit(level aLogLevel, const location &loc, const std::string &aObject, const std::string &aAction, const Args &... args)
function to create and enqueue a message, this is the only way that messages should be created!
Definition: errMsgQueue.h:148
requestProvider::InputHandler
inputHandler::base * InputHandler
Definition: requestProvider.h:34