summaryrefslogtreecommitdiff
path: root/src/file
diff options
context:
space:
mode:
Diffstat (limited to 'src/file')
-rw-r--r--src/file/errors/not_create.cpp25
-rw-r--r--src/file/errors/not_create.hpp18
-rw-r--r--src/file/errors/registrator.cpp32
-rw-r--r--src/file/errors/registrator.hpp21
-rw-r--r--src/file/errors/types/ierror.hpp21
-rw-r--r--src/file/mail/checker_decorator.cpp8
-rw-r--r--src/file/mail/checker_decorator.hpp14
-rw-r--r--src/file/mail/file_decorator.cpp15
-rw-r--r--src/file/mail/file_decorator.hpp18
-rw-r--r--src/file/mail/sort_decorator.cpp6
-rw-r--r--src/file/mail/sort_decorator.hpp10
-rw-r--r--src/file/mail/types/ifile_manipulator.hpp6
-rw-r--r--src/file/settings/checker_decorator.cpp12
-rw-r--r--src/file/settings/checker_decorator.hpp10
-rw-r--r--src/file/settings/file_decorator.cpp13
-rw-r--r--src/file/settings/file_decorator.hpp16
-rw-r--r--src/file/settings/settings.cpp4
-rw-r--r--src/file/settings/settings.hpp12
-rw-r--r--src/file/settings/types/ifile_manipulator.hpp6
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>;
}