Elements  6.0.1
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 "ElementsKernel/Unused.h"
20 #include <string>
21 
24 
25 namespace Elements {
26 inline namespace Services {
27 namespace DataSync {
28 
30  : m_connection(connection), m_fileMap(dependency.fileMap()) {}
31 
33  for (const auto& item : m_fileMap) {
34  const auto& localFile = item.first;
35  const auto& distantFile = item.second;
36  if (fileShouldBeWritten(localFile)) {
37  downloadOneFile(distantFile, localFile);
38  }
39  }
40 }
41 
43  if (not fileAlreadyExists(localFile)) {
44  return true;
45  }
47 }
48 
50  return boost::filesystem::is_regular_file(localFile);
51 }
52 
53 void DataSynchronizer::downloadOneFile(path distantFile, path localFile) const {
54  std::string command = createDownloadCommand(distantFile, localFile);
55  createLocalDirOf(localFile);
56  const auto outErr = runCommandAndCaptureOutErr(command);
57  if (not hasBeenDownloaded(distantFile, localFile)) {
58  throw DownloadFailed(distantFile, localFile);
59  }
60 }
61 
62 bool DataSynchronizer::hasBeenDownloaded(ELEMENTS_UNUSED path distantFile, path localFile) const {
63  if (not boost::filesystem::is_regular_file(localFile)) {
64  return false;
65  }
66  return boost::filesystem::file_size(localFile) > 0;
67 }
68 
69 } // namespace DataSync
70 } // namespace Services
71 } // namespace Elements
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.
void downloadOneFile(path distantFile, path localFile) const
virtual std::string createDownloadCommand(path distantFile, path localFile) const =0
DataSynchronizer(const ConnectionConfiguration &connection, const DependencyConfiguration &dependency)
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_API std::pair< std::string, std::string > runCommandAndCaptureOutErr(std::string command)
Path::Item path
importing the path item from ElementsKernel
Definition: DataSyncUtils.h:41
ELEMENTS_API void createLocalDirOf(path localFile)