diff options
Diffstat (limited to 'src/file')
-rw-r--r-- | src/file/errors/not_create.cpp | 25 | ||||
-rw-r--r-- | src/file/errors/not_create.hpp | 18 | ||||
-rw-r--r-- | src/file/errors/registrator.cpp | 32 | ||||
-rw-r--r-- | src/file/errors/registrator.hpp | 21 | ||||
-rw-r--r-- | src/file/errors/types/ierror.hpp | 21 | ||||
-rw-r--r-- | src/file/mail/checker_decorator.cpp | 8 | ||||
-rw-r--r-- | src/file/mail/checker_decorator.hpp | 14 | ||||
-rw-r--r-- | src/file/mail/file_decorator.cpp | 15 | ||||
-rw-r--r-- | src/file/mail/file_decorator.hpp | 18 | ||||
-rw-r--r-- | src/file/mail/sort_decorator.cpp | 6 | ||||
-rw-r--r-- | src/file/mail/sort_decorator.hpp | 10 | ||||
-rw-r--r-- | src/file/mail/types/ifile_manipulator.hpp | 6 | ||||
-rw-r--r-- | src/file/settings/checker_decorator.cpp | 12 | ||||
-rw-r--r-- | src/file/settings/checker_decorator.hpp | 10 | ||||
-rw-r--r-- | src/file/settings/file_decorator.cpp | 13 | ||||
-rw-r--r-- | src/file/settings/file_decorator.hpp | 16 | ||||
-rw-r--r-- | src/file/settings/settings.cpp | 4 | ||||
-rw-r--r-- | src/file/settings/settings.hpp | 12 | ||||
-rw-r--r-- | src/file/settings/types/ifile_manipulator.hpp | 6 |
19 files changed, 197 insertions, 70 deletions
diff --git a/src/file/errors/not_create.cpp b/src/file/errors/not_create.cpp new file mode 100644 index 0000000..54995ae --- /dev/null +++ b/src/file/errors/not_create.cpp @@ -0,0 +1,25 @@ +#include <fstream> + +#include "not_create.hpp" +#include "converter/struct_to_file.hpp" +#include "converter/file_to_string.hpp" +#include "logger/logger_set.hpp" + +namespace smtp::file::errors +{ + NotCreatedFile::NotCreatedFile( std::string const& path ) + : mPath( path ) + { + + } + + void NotCreatedFile::Process( types::SettingsType settings_type ) const + { + std::fstream file( mPath,std::fstream::out ); + file.close(); + settings_type == types::SettingsType::Server ? + logger::LoggerSet::GetInstance()->LogOk("Created new settings for server"): + logger::LoggerSet::GetInstance()->LogOk("Created new settings for recipients"); + } + +} diff --git a/src/file/errors/not_create.hpp b/src/file/errors/not_create.hpp new file mode 100644 index 0000000..05046de --- /dev/null +++ b/src/file/errors/not_create.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "types/ierror.hpp" +#include "general/struct.hpp" + +namespace smtp::file::errors +{ + class NotCreatedFile : public types::IError + { + public: + explicit NotCreatedFile( std::string const& path ); + ~NotCreatedFile() override = default; + + void Process( types::SettingsType settings_type ) const override; + private: + std::string mPath; + }; +} diff --git a/src/file/errors/registrator.cpp b/src/file/errors/registrator.cpp new file mode 100644 index 0000000..9389179 --- /dev/null +++ b/src/file/errors/registrator.cpp @@ -0,0 +1,32 @@ +#include <cerrno> + +#include "registrator.hpp" +#include "logger/logger_set.hpp" + +namespace smtp::file::errors +{ + + void Registrator::Add( types::IErrorPtr const& error, int error_code ) + { + mErrorSet.insert( {error_code, error} ); + } + + void Registrator::Process( types::SettingsType settings_type ) const + { + auto find = mErrorSet.find(errno); + if( find == mErrorSet.end() ) + { + DefaultProcess(errno); + } + find->second->Process( settings_type ); + } + + void Registrator::DefaultProcess(int error_code) const + { + static const std::string METHOD = "Open file"; + + std::string message = "Unknown error - " + std::to_string(error_code); + logger::LoggerSet::GetInstance()->LogError( METHOD, message ); + } + +} diff --git a/src/file/errors/registrator.hpp b/src/file/errors/registrator.hpp new file mode 100644 index 0000000..381db2f --- /dev/null +++ b/src/file/errors/registrator.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include <map> + +#include "types/ierror.hpp" + +namespace smtp::file::errors +{ + class Registrator + { + public: + Registrator() = default; + ~Registrator() = default; + + void Add( types::IErrorPtr const& error, int error_code ); + void Process( types::SettingsType settings_type ) const; + private: + void DefaultProcess( int error_code ) const; + std::map< int, types::IErrorPtr > mErrorSet; + }; +} diff --git a/src/file/errors/types/ierror.hpp b/src/file/errors/types/ierror.hpp new file mode 100644 index 0000000..6a47ddb --- /dev/null +++ b/src/file/errors/types/ierror.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include <memory> + +namespace smtp::file::errors::types +{ + enum class SettingsType + { + Server, + Mail + }; + + class IError + { + public: + virtual ~IError() = default; + + virtual void Process( SettingsType settings_type ) const = 0; + }; + using IErrorPtr = std::shared_ptr<IError>; +} diff --git a/src/file/mail/checker_decorator.cpp b/src/file/mail/checker_decorator.cpp index 54da9da..3539bc7 100644 --- a/src/file/mail/checker_decorator.cpp +++ b/src/file/mail/checker_decorator.cpp @@ -17,9 +17,9 @@ namespace smtp::file::mail //Public methods // - manage::MailsSet CheckerDecorator::Read() const + general::MailsSet CheckerDecorator::Read() const { - manage::MailsSet result; + general::MailsSet result; if( !mBase ) { @@ -38,9 +38,9 @@ namespace smtp::file::mail return result; } - bool CheckerDecorator::Write( manage::MailsSet const& data ) const + bool CheckerDecorator::Write( general::MailsSet const& data ) const { - manage::MailsSet result; + general::MailsSet result; for( const auto& line : data ) { diff --git a/src/file/mail/checker_decorator.hpp b/src/file/mail/checker_decorator.hpp index ed87fc5..612c07a 100644 --- a/src/file/mail/checker_decorator.hpp +++ b/src/file/mail/checker_decorator.hpp @@ -1,23 +1,23 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "checker/registrator_mails.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/ifile_manipulator.hpp" namespace smtp::file::mail { - class CheckerDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class CheckerDecorator : public general::IDecorator< types::IFileManipulator> { public: explicit CheckerDecorator( checker::RegistratorMails const& registrator_errors ); ~CheckerDecorator() override = default; - manage::MailsSet Read() const override; - bool Write( manage::MailsSet const& data ) const override; + general::MailsSet Read() const override; + bool Write( general::MailsSet const& data ) const override; private: - manage::MailsSet ReadFile( std::ifstream& mail_file ) const; - bool WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const; + general::MailsSet ReadFile( std::ifstream& mail_file ) const; + bool WriteFile( std::ofstream& mail_file, general::MailsSet const& data ) const; checker::RegistratorMails mRegistratorErrors; }; diff --git a/src/file/mail/file_decorator.cpp b/src/file/mail/file_decorator.cpp index 82111ac..76da5a8 100644 --- a/src/file/mail/file_decorator.cpp +++ b/src/file/mail/file_decorator.cpp @@ -10,8 +10,9 @@ namespace smtp::file::mail //Constructors // - FileDecorator::FileDecorator( std::string const& path_file ) + FileDecorator::FileDecorator( std::string const& path_file, file::errors::Registrator const& registrator_file_errors ) : mPathFile( path_file ) + , mRegistratorFileErrors( registrator_file_errors ) { } @@ -19,14 +20,14 @@ namespace smtp::file::mail //Public methods // - manage::MailsSet FileDecorator::Read() const + general::MailsSet FileDecorator::Read() const { static const std::string METHOD_NAME = "Read mails"; std::ifstream mail_file{ mPathFile, std::fstream::in }; if ( !mail_file.is_open() ) { - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); + mRegistratorFileErrors.Process( errors::types::SettingsType::Mail ); return {}; } @@ -36,7 +37,7 @@ namespace smtp::file::mail return result; } - bool FileDecorator::Write( manage::MailsSet const& data ) const + bool FileDecorator::Write( general::MailsSet const& data ) const { static const std::string METHOD_NAME = "Write mails"; @@ -59,10 +60,10 @@ namespace smtp::file::mail //Private methods // - manage::MailsSet FileDecorator::ReadFile( std::ifstream& mail_file ) const + general::MailsSet FileDecorator::ReadFile( std::ifstream& mail_file ) const { std::string line{}; - manage::MailsSet result; + general::MailsSet result; while ( std::getline( mail_file, line ) ) { @@ -71,7 +72,7 @@ namespace smtp::file::mail return result; } - bool FileDecorator::WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const + bool FileDecorator::WriteFile( std::ofstream& mail_file, general::MailsSet const& data ) const { bool result = true; diff --git a/src/file/mail/file_decorator.hpp b/src/file/mail/file_decorator.hpp index 21dab10..a1767e6 100644 --- a/src/file/mail/file_decorator.hpp +++ b/src/file/mail/file_decorator.hpp @@ -1,24 +1,26 @@ #pragma once -#include "management/general.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/struct.hpp" +#include "general/idecorator.hpp" #include "types/ifile_manipulator.hpp" +#include "file/errors/registrator.hpp" namespace smtp::file::mail { - class FileDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class FileDecorator : public general::IDecorator< types::IFileManipulator> { public: - explicit FileDecorator( std::string const& path_file ); + explicit FileDecorator( std::string const& path_file, file::errors::Registrator const& registrator_file_errors ); ~FileDecorator() override = default; - manage::MailsSet Read() const override; - bool Write( manage::MailsSet const& data ) const override; + general::MailsSet Read() const override; + bool Write( general::MailsSet const& data ) const override; private: - manage::MailsSet ReadFile( std::ifstream& mail_file ) const; - bool WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const; + general::MailsSet ReadFile( std::ifstream& mail_file ) const; + bool WriteFile( std::ofstream& mail_file, general::MailsSet const& data ) const; std::string mPathFile; + file::errors::Registrator mRegistratorFileErrors; }; } diff --git a/src/file/mail/sort_decorator.cpp b/src/file/mail/sort_decorator.cpp index dca464f..ebfde97 100644 --- a/src/file/mail/sort_decorator.cpp +++ b/src/file/mail/sort_decorator.cpp @@ -7,9 +7,9 @@ namespace smtp::file::mail //Public methods // - manage::MailsSet SortDecorator::Read() const + general::MailsSet SortDecorator::Read() const { - manage::MailsSet result; + general::MailsSet result; if(!mBase) { @@ -22,7 +22,7 @@ namespace smtp::file::mail return result; } - bool SortDecorator::Write( manage::MailsSet const& data ) const + bool SortDecorator::Write( general::MailsSet const& data ) const { if( mBase ) { diff --git a/src/file/mail/sort_decorator.hpp b/src/file/mail/sort_decorator.hpp index 80edf1d..142159b 100644 --- a/src/file/mail/sort_decorator.hpp +++ b/src/file/mail/sort_decorator.hpp @@ -1,19 +1,19 @@ #pragma once -#include "management/general.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/struct.hpp" +#include "general/idecorator.hpp" #include "types/ifile_manipulator.hpp" namespace smtp::file::mail { - class SortDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class SortDecorator : public general::IDecorator< types::IFileManipulator> { public: SortDecorator() = default; ~SortDecorator() = default; - manage::MailsSet Read() const; - bool Write( manage::MailsSet const& data ) const; + general::MailsSet Read() const; + bool Write( general::MailsSet const& data ) const; }; } diff --git a/src/file/mail/types/ifile_manipulator.hpp b/src/file/mail/types/ifile_manipulator.hpp index 62965e7..0841c16 100644 --- a/src/file/mail/types/ifile_manipulator.hpp +++ b/src/file/mail/types/ifile_manipulator.hpp @@ -2,7 +2,7 @@ #include <memory> -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::file::mail::types { @@ -11,8 +11,8 @@ namespace smtp::file::mail::types public: virtual ~IFileManipulator() = default; - virtual manage::MailsSet Read() const = 0; - virtual bool Write( manage::MailsSet const& data ) const = 0; + virtual general::MailsSet Read() const = 0; + virtual bool Write( general::MailsSet const& data ) const = 0; }; using IFileManipulatorPtr = std::shared_ptr<IFileManipulator>; } diff --git a/src/file/settings/checker_decorator.cpp b/src/file/settings/checker_decorator.cpp index ef560ad..a7ccda1 100644 --- a/src/file/settings/checker_decorator.cpp +++ b/src/file/settings/checker_decorator.cpp @@ -16,18 +16,22 @@ namespace smtp::file::settings //Public methods // - manage::SettingsFileDataType CheckerDecorator::Read() const + general::SettingsFileDataType CheckerDecorator::Read() const { - manage::SettingsFileDataType result; + general::SettingsFileDataType result; if(!mBase) { return result; } result = mBase->Read(); - return mRegistratorErrors.Check( result ) ? result : manage::SettingsFileDataType{}; + if(result.empty()) + { + return result; + } + return mRegistratorErrors.Check( result ) ? result : general::SettingsFileDataType{}; } - bool CheckerDecorator::Write( manage::SettingsFileDataType const& settings_fields ) const + bool CheckerDecorator::Write( general::SettingsFileDataType const& settings_fields ) const { if( !mBase ) { diff --git a/src/file/settings/checker_decorator.hpp b/src/file/settings/checker_decorator.hpp index ecaba5a..c596fb6 100644 --- a/src/file/settings/checker_decorator.hpp +++ b/src/file/settings/checker_decorator.hpp @@ -1,20 +1,20 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "checker/registrator_settings.hpp" #include "types/ifile_manipulator.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/idecorator.hpp" namespace smtp::file::settings { - class CheckerDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class CheckerDecorator : public general::IDecorator< types::IFileManipulator> { public: explicit CheckerDecorator( checker::RegistratorSettings const& registrator_errors ); ~CheckerDecorator() = default; - manage::SettingsFileDataType Read() const override; - bool Write( manage::SettingsFileDataType const& data ) const override; + general::SettingsFileDataType Read() const override; + bool Write( general::SettingsFileDataType const& data ) const override; private: checker::RegistratorSettings mRegistratorErrors; }; diff --git a/src/file/settings/file_decorator.cpp b/src/file/settings/file_decorator.cpp index 38b42ce..1b05f72 100644 --- a/src/file/settings/file_decorator.cpp +++ b/src/file/settings/file_decorator.cpp @@ -12,8 +12,9 @@ namespace smtp::file::settings //Constructors // - FileDecorator::FileDecorator( std::string const& path_file ) + FileDecorator::FileDecorator( std::string const& path_file, errors::Registrator const& registrator_errors ) : mPathFile( path_file ) + , mRegistratorErrors( registrator_errors ) { } @@ -22,14 +23,14 @@ namespace smtp::file::settings //Public methods // - manage::SettingsFileDataType FileDecorator::Read() const + general::SettingsFileDataType FileDecorator::Read() const { static const std::string METHOD_NAME = "Read settings"; std::ifstream settings_file{mPathFile, std::fstream::in}; if( !settings_file.is_open() ) { - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); + mRegistratorErrors.Process( errors::types::SettingsType::Server ); return {}; } auto result = GetDataFromFile( settings_file ); @@ -38,7 +39,7 @@ namespace smtp::file::settings return result; } - bool FileDecorator::Write( manage::SettingsFileDataType const& data ) const + bool FileDecorator::Write( general::SettingsFileDataType const& data ) const { static const std::string METHOD_NAME = "Write settings"; @@ -61,10 +62,10 @@ namespace smtp::file::settings //Private methods // - manage::SettingsFileDataType FileDecorator::GetDataFromFile( std::ifstream& settings_file ) const + general::SettingsFileDataType FileDecorator::GetDataFromFile( std::ifstream& settings_file ) const { std::string line{}; - manage::SettingsFileDataType result; + general::SettingsFileDataType result; parser::Settings parser; while( std::getline( settings_file, line )) diff --git a/src/file/settings/file_decorator.hpp b/src/file/settings/file_decorator.hpp index 5896aed..93c8c20 100644 --- a/src/file/settings/file_decorator.hpp +++ b/src/file/settings/file_decorator.hpp @@ -1,22 +1,24 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "types/ifile_manipulator.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/idecorator.hpp" +#include "file/errors/registrator.hpp" namespace smtp::file::settings { - class FileDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class FileDecorator : public general::IDecorator< types::IFileManipulator> { public: - explicit FileDecorator( std::string const& path_file ); + explicit FileDecorator( std::string const& path_file, errors::Registrator const& registrator_errors ); ~FileDecorator() = default; - manage::SettingsFileDataType Read() const override; - bool Write( manage::SettingsFileDataType const& data ) const override; + general::SettingsFileDataType Read() const override; + bool Write( general::SettingsFileDataType const& data ) const override; private: - manage::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; + general::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; std::string mPathFile; + errors::Registrator mRegistratorErrors; }; } diff --git a/src/file/settings/settings.cpp b/src/file/settings/settings.cpp index 48232e6..0815f11 100644 --- a/src/file/settings/settings.cpp +++ b/src/file/settings/settings.cpp @@ -17,13 +17,13 @@ namespace smtp::file::settings //Public methods // - manage::SettingsFields Settings::Read() const + general::SettingsFields Settings::Read() const { auto parsed_store = mFileManipulator->Read(); return converter::FileToStruct{}.Convert( parsed_store ); } - bool Settings::Write( manage::SettingsFields const& settings_fields ) const + bool Settings::Write( general::SettingsFields const& settings_fields ) const { auto parsed_data = converter::StructToFile{}.Convert( settings_fields ); return mFileManipulator->Write( parsed_data ); diff --git a/src/file/settings/settings.hpp b/src/file/settings/settings.hpp index 60634fe..9e05f24 100644 --- a/src/file/settings/settings.hpp +++ b/src/file/settings/settings.hpp @@ -1,6 +1,6 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "types/ifile_manipulator.hpp" namespace smtp::file::settings @@ -11,12 +11,12 @@ namespace smtp::file::settings explicit Settings( types::IFileManipulatorPtr const& file_manipulator ); ~Settings() = default; - manage::SettingsFields Read() const; - bool Write( manage::SettingsFields const& settings_fields ) const; + general::SettingsFields Read() const; + bool Write( general::SettingsFields const& settings_fields ) const; private: - manage::SettingsFileDataType GetParsedStore() const; - manage::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; - bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const; + general::SettingsFileDataType GetParsedStore() const; + general::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; + bool SetParsedData( general::SettingsFileDataType const& parsed_data ) const; std::string BuildParam( std::pair < std::string, std::string > const& data ) const; std::string mPathFile; diff --git a/src/file/settings/types/ifile_manipulator.hpp b/src/file/settings/types/ifile_manipulator.hpp index 6de0bf3..312aece 100644 --- a/src/file/settings/types/ifile_manipulator.hpp +++ b/src/file/settings/types/ifile_manipulator.hpp @@ -2,7 +2,7 @@ #include <memory> -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::file::settings::types { @@ -11,8 +11,8 @@ namespace smtp::file::settings::types public: virtual ~IFileManipulator() = default; - virtual manage::SettingsFileDataType Read() const = 0; - virtual bool Write( manage::SettingsFileDataType const& data ) const = 0; + virtual general::SettingsFileDataType Read() const = 0; + virtual bool Write( general::SettingsFileDataType const& data ) const = 0; }; using IFileManipulatorPtr = std::shared_ptr<IFileManipulator>; } |