summaryrefslogtreecommitdiff
path: root/src/file/mail
diff options
context:
space:
mode:
Diffstat (limited to 'src/file/mail')
-rw-r--r--src/file/mail/checker_decorator.cpp58
-rw-r--r--src/file/mail/checker_decorator.hpp25
-rw-r--r--src/file/mail/file_decorator.cpp84
-rw-r--r--src/file/mail/file_decorator.hpp24
-rw-r--r--src/file/mail/sort_decorator.cpp33
-rw-r--r--src/file/mail/sort_decorator.hpp19
-rw-r--r--src/file/mail/types/ifile_manipulator.hpp18
7 files changed, 261 insertions, 0 deletions
diff --git a/src/file/mail/checker_decorator.cpp b/src/file/mail/checker_decorator.cpp
new file mode 100644
index 0000000..54da9da
--- /dev/null
+++ b/src/file/mail/checker_decorator.cpp
@@ -0,0 +1,58 @@
+#include "checker_decorator.hpp"
+#include "logger/logger_set.hpp"
+
+namespace smtp::file::mail
+{
+
+ //
+ //Constructors
+ //
+
+ CheckerDecorator::CheckerDecorator( checker::RegistratorMails const& registrator_errors )
+ : mRegistratorErrors( registrator_errors )
+ {
+ }
+
+ //
+ //Public methods
+ //
+
+ manage::MailsSet CheckerDecorator::Read() const
+ {
+ manage::MailsSet result;
+
+ if( !mBase )
+ {
+ return result;
+ }
+
+ auto parsed_data = mBase->Read();
+
+ for( auto const& line : parsed_data )
+ {
+ if( mRegistratorErrors.Check( line ) )
+ {
+ result.push_back( line );
+ }
+ }
+ return result;
+ }
+
+ bool CheckerDecorator::Write( manage::MailsSet const& data ) const
+ {
+ manage::MailsSet result;
+
+ for( const auto& line : data )
+ {
+ if( mRegistratorErrors.Check( line ) )
+ {
+ result.push_back( line );
+ }
+ }
+ if( mBase )
+ {
+ return mBase->Write(result);
+ }
+ return false;
+ }
+}
diff --git a/src/file/mail/checker_decorator.hpp b/src/file/mail/checker_decorator.hpp
new file mode 100644
index 0000000..ed87fc5
--- /dev/null
+++ b/src/file/mail/checker_decorator.hpp
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "management/general.hpp"
+#include "checker/registrator_mails.hpp"
+#include "message/builder/types/idecorator.hpp"
+#include "types/ifile_manipulator.hpp"
+
+namespace smtp::file::mail
+{
+ class CheckerDecorator : public smtp::message::builder::types::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;
+ private:
+ manage::MailsSet ReadFile( std::ifstream& mail_file ) const;
+ bool WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const;
+
+ checker::RegistratorMails mRegistratorErrors;
+ };
+
+}
diff --git a/src/file/mail/file_decorator.cpp b/src/file/mail/file_decorator.cpp
new file mode 100644
index 0000000..82111ac
--- /dev/null
+++ b/src/file/mail/file_decorator.cpp
@@ -0,0 +1,84 @@
+#include <fstream>
+
+#include "file_decorator.hpp"
+#include "logger/logger_set.hpp"
+
+namespace smtp::file::mail
+{
+
+ //
+ //Constructors
+ //
+
+ FileDecorator::FileDecorator( std::string const& path_file )
+ : mPathFile( path_file )
+ {
+ }
+
+ //
+ //Public methods
+ //
+
+ manage::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 );
+ return {};
+ }
+
+ auto result = ReadFile( mail_file );
+
+ mail_file.close();
+ return result;
+ }
+
+ bool FileDecorator::Write( manage::MailsSet const& data ) const
+ {
+ static const std::string METHOD_NAME = "Write mails";
+
+ std::ofstream mail_file{ mPathFile, std::fstream::out | std::fstream::trunc };
+
+
+ if ( !mail_file.is_open() )
+ {
+ logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to write " + mPathFile );
+ return false;
+ }
+
+ auto result = WriteFile( mail_file, data );
+
+ mail_file.close();
+ return result;
+ }
+
+ //
+ //Private methods
+ //
+
+ manage::MailsSet FileDecorator::ReadFile( std::ifstream& mail_file ) const
+ {
+ std::string line{};
+ manage::MailsSet result;
+
+ while ( std::getline( mail_file, line ) )
+ {
+ result.push_back( line );
+ }
+ return result;
+ }
+
+ bool FileDecorator::WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const
+ {
+ bool result = true;
+
+ for( const auto& mail : data )
+ {
+ mail_file << mail << "\n";
+ }
+ return result;
+ }
+}
diff --git a/src/file/mail/file_decorator.hpp b/src/file/mail/file_decorator.hpp
new file mode 100644
index 0000000..21dab10
--- /dev/null
+++ b/src/file/mail/file_decorator.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "management/general.hpp"
+#include "message/builder/types/idecorator.hpp"
+#include "types/ifile_manipulator.hpp"
+
+namespace smtp::file::mail
+{
+ class FileDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator>
+ {
+ public:
+ explicit FileDecorator( std::string const& path_file );
+ ~FileDecorator() override = default;
+
+ manage::MailsSet Read() const override;
+ bool Write( manage::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;
+
+ std::string mPathFile;
+ };
+
+}
diff --git a/src/file/mail/sort_decorator.cpp b/src/file/mail/sort_decorator.cpp
new file mode 100644
index 0000000..dca464f
--- /dev/null
+++ b/src/file/mail/sort_decorator.cpp
@@ -0,0 +1,33 @@
+#include "sort_decorator.hpp"
+
+namespace smtp::file::mail
+{
+
+ //
+ //Public methods
+ //
+
+ manage::MailsSet SortDecorator::Read() const
+ {
+ manage::MailsSet result;
+
+ if(!mBase)
+ {
+ return result;
+ }
+ result = mBase->Read();
+
+ result.sort();
+
+ return result;
+ }
+
+ bool SortDecorator::Write( manage::MailsSet const& data ) const
+ {
+ if( mBase )
+ {
+ return mBase->Write( data );
+ }
+ return false;
+ }
+}
diff --git a/src/file/mail/sort_decorator.hpp b/src/file/mail/sort_decorator.hpp
new file mode 100644
index 0000000..80edf1d
--- /dev/null
+++ b/src/file/mail/sort_decorator.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "management/general.hpp"
+#include "message/builder/types/idecorator.hpp"
+#include "types/ifile_manipulator.hpp"
+
+namespace smtp::file::mail
+{
+ class SortDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator>
+ {
+ public:
+ SortDecorator() = default;
+ ~SortDecorator() = default;
+
+ manage::MailsSet Read() const;
+ bool Write( manage::MailsSet const& data ) const;
+ };
+
+}
diff --git a/src/file/mail/types/ifile_manipulator.hpp b/src/file/mail/types/ifile_manipulator.hpp
new file mode 100644
index 0000000..62965e7
--- /dev/null
+++ b/src/file/mail/types/ifile_manipulator.hpp
@@ -0,0 +1,18 @@
+ #pragma once
+
+#include <memory>
+
+#include "management/general.hpp"
+
+namespace smtp::file::mail::types
+{
+ class IFileManipulator
+ {
+ public:
+ virtual ~IFileManipulator() = default;
+
+ virtual manage::MailsSet Read() const = 0;
+ virtual bool Write( manage::MailsSet const& data ) const = 0;
+ };
+ using IFileManipulatorPtr = std::shared_ptr<IFileManipulator>;
+}