Kea  1.9.9-git
versioned_csv_file.h
Go to the documentation of this file.
1 // Copyright (C) 2015,2017 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef VERSIONED_CSV_FILE_H
8 #define VERSIONED_CSV_FILE_H
9 
10 #include <util/csv_file.h>
11 
12 namespace isc {
13 namespace util {
14 
17 public:
18  VersionedCSVFileError(const char* file, size_t line, const char* what) :
19  isc::Exception(file, line, what) { };
20 };
21 
24 public:
32  VersionedColumn(const std::string& name, const std::string& version,
33  const std::string& default_value = "")
34  : name_(name), version_(version), default_value_(default_value) {
35  };
36 
38  virtual ~VersionedColumn(){};
39 
41  std::string name_;
42 
45  std::string version_;
46 
49  std::string default_value_;
50 };
51 
53 typedef boost::shared_ptr<VersionedColumn> VersionedColumnPtr;
54 
120 class VersionedCSVFile : public CSVFile {
121 public:
122 
130  };
131 
135  VersionedCSVFile(const std::string& filename);
136 
138  virtual ~VersionedCSVFile();
139 
154  void addColumn(const std::string& col_name, const std::string& version,
155  const std::string& default_value = "");
156 
162  void setMinimumValidColumns(const std::string& column_name);
163 
166  size_t getMinimumValidColumns() const;
167 
169  size_t getInputHeaderCount() const;
170 
178  size_t getValidColumnCount() const;
179 
197  virtual void open(const bool seek_to_end = false);
198 
208  virtual void recreate();
209 
230  bool next(CSVRow& row);
231 
236  std::string getInputSchemaVersion() const;
237 
243  std::string getSchemaVersion() const;
244 
250  const VersionedColumnPtr& getVersionedColumn(const size_t index) const;
251 
261 
263  bool needsConversion() const;
264 
265 protected:
266 
280  virtual bool validateHeader(const CSVRow& header);
281 
289  void columnCountError(const CSVRow& row, const std::string& reason);
290 
291 private:
293  std::vector<VersionedColumnPtr> columns_;
294 
298  size_t valid_column_count_;
299 
302  size_t minimum_valid_columns_;
303 
307  size_t input_header_count_;
308 
310  enum InputSchemaState input_schema_state_;
311 };
312 
313 
314 } // namespace isc::util
315 } // namespace isc
316 
317 #endif // VERSIONED_CSV_FILE_H
std::string getInputSchemaVersion() const
Returns the schema version of the physical file.
size_t getInputHeaderCount() const
Returns the number of columns found in the input header.
bool needsConversion() const
Returns true if the input file schema state is not CURRENT.
virtual ~VersionedCSVFile()
Destructor.
std::string default_value_
default_value The value the column should be assigned if it is not present in a data row...
InputSchemaState
Possible input file schema states.
size_t getMinimumValidColumns() const
Returns the minimum number of columns which must be present for the file to be considered valid...
std::string getSchemaVersion() const
text version of current schema supported by the file's metadata
Contains the metadata for a single column in a file.
virtual void open(const bool seek_to_end=false)
Opens existing file or creates a new one.
virtual ~VersionedColumn()
Destructor.
virtual bool validateHeader(const CSVRow &header)
Validates the header of a VersionedCSVFile.
virtual void recreate()
Creates a new CSV file.
size_t getValidColumnCount() const
Returns the number of valid columns found in the header For newly created files this will always matc...
boost::shared_ptr< VersionedColumn > VersionedColumnPtr
Defines a smart pointer to VersionedColumn.
void setMinimumValidColumns(const std::string &column_name)
Sets the minimum number of valid columns based on a given column.
std::string name_
Name of the column.
VersionedColumn(const std::string &name, const std::string &version, const std::string &default_value="")
Constructor.
int version()
returns Kea hooks version.
Represents a single row of the CSV file.
Definition: csv_file.h:51
Exception thrown when an error occurs during CSV file processing.
const VersionedColumnPtr & getVersionedColumn(const size_t index) const
Fetch the column descriptor for a given index.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
enum InputSchemaState getInputSchemaState() const
Fetches the state of the input file's schema.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-dhcp-ddns.
void addColumn(const std::string &col_name, const std::string &version, const std::string &default_value="")
Adds metadata for a single column to the schema.
Implements a CSV file that supports multiple versions of the file's "schema".
bool next(CSVRow &row)
Reads next row from the file file.
VersionedCSVFileError(const char *file, size_t line, const char *what)
Provides input/output access to CSV files.
Definition: csv_file.h:358
void columnCountError(const CSVRow &row, const std::string &reason)
Convenience method for adding an error message.
VersionedCSVFile(const std::string &filename)
Constructor.
std::string version_
Text representation of the schema version in which this column first appeared.