summaryrefslogtreecommitdiff
path: root/src/management
diff options
context:
space:
mode:
Diffstat (limited to 'src/management')
-rw-r--r--src/management/builder/mail.cpp20
-rw-r--r--src/management/builder/mail.hpp3
-rw-r--r--src/management/builder/settings.cpp27
-rw-r--r--src/management/builder/settings.hpp4
-rw-r--r--src/management/mail.cpp56
-rw-r--r--src/management/mail.hpp14
-rw-r--r--src/management/settings.cpp2
-rw-r--r--src/management/settings.hpp6
8 files changed, 72 insertions, 60 deletions
diff --git a/src/management/builder/mail.cpp b/src/management/builder/mail.cpp
index a301f5b..a96fd33 100644
--- a/src/management/builder/mail.cpp
+++ b/src/management/builder/mail.cpp
@@ -1,19 +1,27 @@
#include "mail.hpp"
-#include "file/mail.hpp"
#include "checker/errors/mail/empty.hpp"
#include "checker/errors/mail/at_sign.hpp"
+#include "file/mail/file_decorator.hpp"
+#include "file/mail/checker_decorator.hpp"
+#include "file/mail/sort_decorator.hpp"
+
namespace smtp::manage::builder
{
smtp::manage::Mail Mail::Build() const
{
- static const std::string PATH = {"/var/lib/smtp/mails.txt"};
+ return smtp::manage::Mail{BuildFileManipulator()};
+ }
- auto registrator = BuildErrorRegistrator();
- file::Mail file_manipulator{PATH, registrator};
- return smtp::manage::Mail{file_manipulator};
- }
+ file::mail::types::IFileManipulatorPtr Mail::BuildFileManipulator() const
+ {
+ static const std::string PATH = {"/var/lib/smtp/mails.txt"};
+ auto result = std::make_shared<file::mail::SortDecorator>() ;
+ result->Apply(std::make_shared<file::mail::CheckerDecorator>( BuildErrorRegistrator() ))
+ .Apply(std::make_shared<file::mail::FileDecorator>( PATH ));
+ return result;
+ }
checker::RegistratorMails Mail::BuildErrorRegistrator() const
{
diff --git a/src/management/builder/mail.hpp b/src/management/builder/mail.hpp
index e735fd6..7cbb29d 100644
--- a/src/management/builder/mail.hpp
+++ b/src/management/builder/mail.hpp
@@ -2,6 +2,7 @@
#include "management/mail.hpp"
#include "checker/registrator_mails.hpp"
+#include "file/mail/types/ifile_manipulator.hpp"
namespace smtp::manage::builder
{
@@ -12,6 +13,8 @@ namespace smtp::manage::builder
~Mail() = default;
smtp::manage::Mail Build() const;
+ private:
+ file::mail::types::IFileManipulatorPtr BuildFileManipulator() const;
checker::RegistratorMails BuildErrorRegistrator() const;
};
diff --git a/src/management/builder/settings.cpp b/src/management/builder/settings.cpp
index 0b27bef..b682c49 100644
--- a/src/management/builder/settings.cpp
+++ b/src/management/builder/settings.cpp
@@ -1,23 +1,26 @@
#include "settings.hpp"
#include "checker/errors/settings/port_number.hpp"
#include "checker/errors/settings/server.hpp"
+#include "file/settings/settings.hpp"
+#include "file/settings/checker_decorator.hpp"
+#include "file/settings/file_decorator.hpp"
namespace smtp::manage::builder
{
-
smtp::manage::Settings Settings::Build() const
{
- auto file_manipulator = GetFileSettings();
- return smtp::manage::Settings{file_manipulator};
- }
-
- file::Settings Settings::GetFileSettings() const
- {
- static const std::string PATH = "/var/lib/smtp/settings.txt";
-
- auto registrator = BuildErrorRegistrator();
- return file::Settings{PATH, registrator};
- }
+ file::settings::Settings settings{ BuildFileManipulator() };
+ return smtp::manage::Settings{settings};
+ }
+
+ file::settings::types::IFileManipulatorPtr Settings::BuildFileManipulator() const
+ {
+ static const std::string PATH = "/var/lib/smtp/settings.txt";
+
+ auto result = std::make_shared<file::settings::CheckerDecorator>(BuildErrorRegistrator());
+ result->Apply(std::make_shared<file::settings::FileDecorator>(PATH));
+ return result;
+ }
checker::RegistratorSettings Settings::BuildErrorRegistrator() const
{
diff --git a/src/management/builder/settings.hpp b/src/management/builder/settings.hpp
index 64f9384..b7215e2 100644
--- a/src/management/builder/settings.hpp
+++ b/src/management/builder/settings.hpp
@@ -1,8 +1,8 @@
#pragma once
#include "management/settings.hpp"
-#include "file/settings.hpp"
#include "checker/registrator_settings.hpp"
+#include "file/settings/types/ifile_manipulator.hpp"
namespace smtp::manage::builder
{
@@ -14,7 +14,7 @@ namespace smtp::manage::builder
smtp::manage::Settings Build() const;
private:
- file::Settings GetFileSettings() const;
+ file::settings::types::IFileManipulatorPtr BuildFileManipulator()const;
checker::RegistratorSettings BuildErrorRegistrator() const;
};
diff --git a/src/management/mail.cpp b/src/management/mail.cpp
index 87ebb51..d569826 100644
--- a/src/management/mail.cpp
+++ b/src/management/mail.cpp
@@ -8,9 +8,9 @@ namespace smtp::manage
//Constructors
//
- Mail::Mail( file::Mail const& file_reader )
+ Mail::Mail( file::mail::types::IFileManipulatorPtr const& file_reader )
: mFileReader( file_reader )
- , mMails( mFileReader.Read() )
+ , mMails( mFileReader->Read() )
{
}
@@ -28,61 +28,59 @@ namespace smtp::manage
{
auto merged_mails = GetMergedMails( mails_to_add );
- return RefreshMails( mails_to_add );
+ return RefreshMails( merged_mails );
}
- bool Mail::DeleteMailToSend( MailsSet const& mail_to_send )
+ bool Mail::DeleteMailToSend( MailsSet const& mail_to_delete )
{
- auto mails_to_delete = GetItersectionMails( mail_to_send );
+ auto mails_to_delete = GetItersectionMails( mail_to_delete );
+
auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete );
- return RefreshMails( mails_to_delete );
+ return RefreshMails( result_set_after_delete );
}
//
//Private methods
//
- MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add )
+ MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add )
{
- MailsSet result;
- auto sorted_mail_to_add = mails_to_add;
- sorted_mail_to_add.sort();
- mMails.sort();
+ auto result = mails_to_add;
+ result.merge( mMails );
- std::set_union( mMails.cbegin(), mMails.cend(),
- sorted_mail_to_add.cbegin(), sorted_mail_to_add.cend(),
- std::back_inserter( result ));
- return result;
- }
+ result.sort();
+ result.unique();
+
+ return result;
+ }
- MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send )
+ MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_delete ) const
{
- MailsSet result;
+ MailsSet result;
- auto sorted_mail_to_send = mail_to_send;
+ auto sorted_mail_to_send = mail_to_delete;
sorted_mail_to_send.sort();
- mMails.sort();
std::set_intersection( mMails.cbegin(), mMails.cend(),
sorted_mail_to_send.cbegin(), sorted_mail_to_send.cend(),
std::back_inserter( result ) );
return result;
}
- MailsSet Mail::GetMailsAfterDelete( MailsSet const& result_set_after_delete )
- {
- auto result = mMails;
- for( const auto& element_to_delete : result_set_after_delete )
- {
- result.remove( element_to_delete );
- }
+ MailsSet Mail::GetMailsAfterDelete( MailsSet const& mails_to_delete )
+ {
+ auto result = mMails;
+ for( const auto& mail : mails_to_delete )
+ {
+ result.remove( mail );
+ }
return result;
}
bool Mail::RefreshMails( MailsSet const& new_mails )
{
- auto result = mFileReader.Write( new_mails );
- mMails = mFileReader.Read();
+ auto result = mFileReader->Write( new_mails );
+ mMails = mFileReader->Read();
return result;
}
}
diff --git a/src/management/mail.hpp b/src/management/mail.hpp
index 2a1182a..813a5b4 100644
--- a/src/management/mail.hpp
+++ b/src/management/mail.hpp
@@ -3,7 +3,7 @@
#include <set>
#include <string>
-#include "file/mail.hpp"
+#include "file/mail/types/ifile_manipulator.hpp"
#include "checker/registrator_mails.hpp"
namespace smtp::manage
@@ -11,19 +11,19 @@ namespace smtp::manage
class Mail
{
public:
- explicit Mail( file::Mail const& file_reader );
+ explicit Mail( file::mail::types::IFileManipulatorPtr const& file_reader );
~Mail() = default;
MailsSet GetMailToSend() const;
bool AddMailsToSend( MailsSet const& mails );
- bool DeleteMailToSend( MailsSet const& mail_to_send );
+ bool DeleteMailToSend( MailsSet const& mail_to_delete );
private:
- MailsSet GetMergedMails( MailsSet const& mails_to_add );
- MailsSet GetItersectionMails( MailsSet const& mail_to_send );
- MailsSet GetMailsAfterDelete( MailsSet const& result_set_after_delete );
+ MailsSet GetMergedMails( MailsSet const& mails_to_add );
+ MailsSet GetItersectionMails( MailsSet const& mail_to_delete ) const;
+ MailsSet GetMailsAfterDelete( MailsSet const& mails_to_delete );
bool RefreshMails( MailsSet const& new_mails );
- file::Mail mFileReader;
+ file::mail::types::IFileManipulatorPtr mFileReader;
MailsSet mMails;
};
diff --git a/src/management/settings.cpp b/src/management/settings.cpp
index b1f9410..20c38cb 100644
--- a/src/management/settings.cpp
+++ b/src/management/settings.cpp
@@ -3,7 +3,7 @@
namespace smtp::manage
{
- Settings::Settings( file::Settings const& file_reader )
+ Settings::Settings( file::settings::Settings const& file_reader )
: mFileReader( file_reader )
, mSettingsFields( mFileReader.Read() )
{
diff --git a/src/management/settings.hpp b/src/management/settings.hpp
index f173d0b..eb2aafb 100644
--- a/src/management/settings.hpp
+++ b/src/management/settings.hpp
@@ -2,7 +2,7 @@
#include <string>
-#include "file/settings.hpp"
+#include "file/settings/settings.hpp"
#include "management/general.hpp"
namespace smtp::manage
@@ -10,7 +10,7 @@ namespace smtp::manage
class Settings
{
public:
- explicit Settings( file::Settings const& file_reader );
+ explicit Settings( file::settings::Settings const& file_reader );
~Settings() = default;
bool SetSettings( manage::SettingsFields const& settings_fields );
@@ -24,7 +24,7 @@ namespace smtp::manage
std::string GetHost() const;
std::string GetPort() const;
private:
- file::Settings mFileReader;
+ file::settings::Settings mFileReader;
manage::SettingsFields mSettingsFields;
};
}