Elements  5.12.0
A C++ base framework for the Euclid Software.
DataSynchronizer.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012-2020 Euclid Science Ground Segment
3  *
4  * This library is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU Lesser General Public License as published by the Free
6  * Software Foundation; either version 3.0 of the License, or (at your option)
7  * any later version.
8  *
9  * This library is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12  * details.
13  *
14  * You should have received a copy of the GNU Lesser General Public License
15  * along with this library; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #include <string>
20 #include "ElementsKernel/Unused.h"
21 
24 
25 namespace ElementsServices {
26 namespace DataSync {
27 
29  const ConnectionConfiguration& connection,
30  const DependencyConfiguration& dependency) :
31  m_connection(connection), m_fileMap(dependency.fileMap()) {
32 }
33 
35  for (const auto& item : m_fileMap) {
36  const auto& localFile = item.first;
37  const auto& distantFile = item.second;
38  if (fileShouldBeWritten(localFile)) {
39  downloadOneFile(distantFile, localFile);
40  }
41  }
42 }
43 
45  if (not fileAlreadyExists(localFile)) {
46  return true;
47  }
49 }
50 
52  return boost::filesystem::is_regular_file(localFile);
53 }
54 
56  path distantFile,
57  path localFile) const {
58  std::string command = createDownloadCommand(distantFile, localFile);
59  createLocalDirOf(localFile);
60  const auto outErr = runCommandAndCaptureOutErr(command);
61  if (not hasBeenDownloaded(distantFile, localFile)) {
62  throw DownloadFailed(distantFile, localFile);
63  }
64 }
65 
67  ELEMENTS_UNUSED path distantFile,
68  path localFile) const {
69  if (not boost::filesystem::is_regular_file(localFile)) {
70  return false;
71  }
72  return boost::filesystem::file_size(localFile) > 0;
73 }
74 
75 } // namespace DataSync
76 } // namespace ElementsServices
Macro to silence unused variables warnings from the compiler.
The connection configuration mainly holds:
bool overwritingAllowed() const
Check whether existing local files can be overwritten.
DataSynchronizer(const ConnectionConfiguration &connection, const DependencyConfiguration &dependency)
virtual std::string createDownloadCommand(path distantFile, path localFile) const =0
void downloadOneFile(path distantFile, path localFile) const
bool hasBeenDownloaded(path distantFile, path localFile) const
The dependency configurations holds, for each test file to be retrieved:
An exception raised when downloading fails.
#define ELEMENTS_UNUSED
Definition: Unused.h:39
Elements::Path::Item path
Definition: DataSyncUtils.h:39
ELEMENTS_API void createLocalDirOf(path localFile)
ELEMENTS_API std::pair< std::string, std::string > runCommandAndCaptureOutErr(std::string command)