From 6b8432a5c0647d8fbe3cda549574ae13e07bb2f4 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 28 Apr 2017 11:48:06 +0200 Subject: Simplified propertymapper --- common/domain/typeimplementations.cpp | 10 +++++----- common/domain/typeimplementations.h | 11 +++++------ 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'common/domain') diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index eb3851e..5db35b7 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -61,7 +61,7 @@ void TypeImplementation::configure(IndexPropertyMapper &indexPropertyMappe }); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) { propertyMapper.addMapping(&Buffer::sender); propertyMapper.addMapping(&Buffer::to); @@ -108,7 +108,7 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Folder::Name::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) { propertyMapper.addMapping(&Buffer::parent); propertyMapper.addMapping(&Buffer::name); @@ -137,7 +137,7 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Contact::Uid::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) { propertyMapper.addMapping(&Buffer::uid); propertyMapper.addMapping(&Buffer::fn); @@ -171,7 +171,7 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Addressbook::Name::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) { propertyMapper.addMapping(&Buffer::parent); propertyMapper.addMapping(&Buffer::name); @@ -194,7 +194,7 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Event::Uid::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) { propertyMapper.addMapping(&Buffer::summary); propertyMapper.addMapping(&Buffer::description); diff --git a/common/domain/typeimplementations.h b/common/domain/typeimplementations.h index 37d6ca9..705b059 100644 --- a/common/domain/typeimplementations.h +++ b/common/domain/typeimplementations.h @@ -26,7 +26,6 @@ #include "contact_generated.h" #include "addressbook_generated.h" -template class ReadPropertyMapper; template class WritePropertyMapper; @@ -48,7 +47,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Mail Buffer; typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder; static void configure(TypeIndex &index); - static void configure(ReadPropertyMapper &propertyMapper); + static void configure(ReadPropertyMapper &propertyMapper); static void configure(WritePropertyMapper &propertyMapper); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -59,7 +58,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Folder Buffer; typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); + static void configure(ReadPropertyMapper &); static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -70,7 +69,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Contact Buffer; typedef Sink::ApplicationDomain::Buffer::ContactBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); + static void configure(ReadPropertyMapper &); static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -81,7 +80,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Addressbook Buffer; typedef Sink::ApplicationDomain::Buffer::AddressbookBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); + static void configure(ReadPropertyMapper &); static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -92,7 +91,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Event Buffer; typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); + static void configure(ReadPropertyMapper &); static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; -- cgit v1.2.3 From a4ce2b2eda8a2fea4263017e6868c327f22f5e47 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 28 Apr 2017 12:19:52 +0200 Subject: Removed the template argument from the write property mapper --- common/domain/typeimplementations.cpp | 80 +++++++++++++++++------------------ common/domain/typeimplementations.h | 11 +++-- 2 files changed, 45 insertions(+), 46 deletions(-) (limited to 'common/domain') diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index 5db35b7..598e5a7 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -81,24 +81,24 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::parentMessageId); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&BufferBuilder::add_sender); - propertyMapper.addMapping(&BufferBuilder::add_to); - propertyMapper.addMapping(&BufferBuilder::add_cc); - propertyMapper.addMapping(&BufferBuilder::add_bcc); - propertyMapper.addMapping(&BufferBuilder::add_subject); - propertyMapper.addMapping(&BufferBuilder::add_date); - propertyMapper.addMapping(&BufferBuilder::add_unread); - propertyMapper.addMapping(&BufferBuilder::add_important); - propertyMapper.addMapping(&BufferBuilder::add_folder); - propertyMapper.addMapping(&BufferBuilder::add_mimeMessage); - propertyMapper.addMapping(&BufferBuilder::add_fullPayloadAvailable); - propertyMapper.addMapping(&BufferBuilder::add_draft); - propertyMapper.addMapping(&BufferBuilder::add_trash); - propertyMapper.addMapping(&BufferBuilder::add_sent); - propertyMapper.addMapping(&BufferBuilder::add_messageId); - propertyMapper.addMapping(&BufferBuilder::add_parentMessageId); +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +{ + propertyMapper.addMapping(&BufferBuilder::add_sender); + propertyMapper.addMapping(&BufferBuilder::add_to); + propertyMapper.addMapping(&BufferBuilder::add_cc); + propertyMapper.addMapping(&BufferBuilder::add_bcc); + propertyMapper.addMapping(&BufferBuilder::add_subject); + propertyMapper.addMapping(&BufferBuilder::add_date); + propertyMapper.addMapping(&BufferBuilder::add_unread); + propertyMapper.addMapping(&BufferBuilder::add_important); + propertyMapper.addMapping(&BufferBuilder::add_folder); + propertyMapper.addMapping(&BufferBuilder::add_mimeMessage); + propertyMapper.addMapping(&BufferBuilder::add_fullPayloadAvailable); + propertyMapper.addMapping(&BufferBuilder::add_draft); + propertyMapper.addMapping(&BufferBuilder::add_trash); + propertyMapper.addMapping(&BufferBuilder::add_sent); + propertyMapper.addMapping(&BufferBuilder::add_messageId); + propertyMapper.addMapping(&BufferBuilder::add_parentMessageId); } @@ -117,13 +117,13 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::enabled); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_parent); - propertyMapper.addMapping(&BufferBuilder::add_name); - propertyMapper.addMapping(&BufferBuilder::add_icon); - propertyMapper.addMapping(&BufferBuilder::add_specialpurpose); - propertyMapper.addMapping(&BufferBuilder::add_enabled); + propertyMapper.addMapping(&BufferBuilder::add_parent); + propertyMapper.addMapping(&BufferBuilder::add_name); + propertyMapper.addMapping(&BufferBuilder::add_icon); + propertyMapper.addMapping(&BufferBuilder::add_specialpurpose); + propertyMapper.addMapping(&BufferBuilder::add_enabled); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -148,15 +148,15 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::lastname); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_uid); - propertyMapper.addMapping(&BufferBuilder::add_fn); - propertyMapper.addMapping(&BufferBuilder::add_emails); - propertyMapper.addMapping(&BufferBuilder::add_vcard); - propertyMapper.addMapping(&BufferBuilder::add_addressbook); - propertyMapper.addMapping(&BufferBuilder::add_firstname); - propertyMapper.addMapping(&BufferBuilder::add_lastname); + propertyMapper.addMapping(&BufferBuilder::add_uid); + propertyMapper.addMapping(&BufferBuilder::add_fn); + propertyMapper.addMapping(&BufferBuilder::add_emails); + propertyMapper.addMapping(&BufferBuilder::add_vcard); + propertyMapper.addMapping(&BufferBuilder::add_addressbook); + propertyMapper.addMapping(&BufferBuilder::add_firstname); + propertyMapper.addMapping(&BufferBuilder::add_lastname); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -177,10 +177,10 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapp propertyMapper.addMapping(&Buffer::name); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_parent); - propertyMapper.addMapping(&BufferBuilder::add_name); + propertyMapper.addMapping(&BufferBuilder::add_parent); + propertyMapper.addMapping(&BufferBuilder::add_name); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -202,12 +202,12 @@ void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) propertyMapper.addMapping(&Buffer::attachment); } -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(WritePropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_summary); - propertyMapper.addMapping(&BufferBuilder::add_description); - propertyMapper.addMapping(&BufferBuilder::add_uid); - propertyMapper.addMapping(&BufferBuilder::add_attachment); + propertyMapper.addMapping(&BufferBuilder::add_summary); + propertyMapper.addMapping(&BufferBuilder::add_description); + propertyMapper.addMapping(&BufferBuilder::add_uid); + propertyMapper.addMapping(&BufferBuilder::add_attachment); } void TypeImplementation::configure(IndexPropertyMapper &) diff --git a/common/domain/typeimplementations.h b/common/domain/typeimplementations.h index 705b059..8acea58 100644 --- a/common/domain/typeimplementations.h +++ b/common/domain/typeimplementations.h @@ -27,7 +27,6 @@ #include "addressbook_generated.h" class ReadPropertyMapper; -template class WritePropertyMapper; class IndexPropertyMapper; @@ -48,7 +47,7 @@ public: typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder; static void configure(TypeIndex &index); static void configure(ReadPropertyMapper &propertyMapper); - static void configure(WritePropertyMapper &propertyMapper); + static void configure(WritePropertyMapper &propertyMapper); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -59,7 +58,7 @@ public: typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -70,7 +69,7 @@ public: typedef Sink::ApplicationDomain::Buffer::ContactBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -81,7 +80,7 @@ public: typedef Sink::ApplicationDomain::Buffer::AddressbookBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -92,7 +91,7 @@ public: typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder; static void configure(TypeIndex &); static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(WritePropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; -- cgit v1.2.3 From ca5020095abfb76e63bd801e9722c07193eb05f5 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 28 Apr 2017 15:29:18 +0200 Subject: A single propertymapper for both directions --- common/domain/typeimplementations.cpp | 137 +++++++++++----------------------- common/domain/typeimplementations.h | 18 ++--- 2 files changed, 49 insertions(+), 106 deletions(-) (limited to 'common/domain') diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index 598e5a7..a87e73d 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -32,6 +32,10 @@ using namespace Sink; using namespace Sink::ApplicationDomain; +#define SINK_REGISTER_SERIALIZER(MAPPER, ENTITYTYPE, PROPERTY, LOWERCASEPROPERTY) \ + MAPPER.addMapping(&Sink::ApplicationDomain::Buffer::ENTITYTYPE::LOWERCASEPROPERTY, &Sink::ApplicationDomain::Buffer::ENTITYTYPE##Builder::add_##LOWERCASEPROPERTY); + + void TypeImplementation::configure(TypeIndex &index) { // index.addProperty(); @@ -61,69 +65,39 @@ void TypeImplementation::configure(IndexPropertyMapper &indexPropertyMappe }); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&Buffer::sender); - propertyMapper.addMapping(&Buffer::to); - propertyMapper.addMapping(&Buffer::cc); - propertyMapper.addMapping(&Buffer::bcc); - propertyMapper.addMapping(&Buffer::subject); - propertyMapper.addMapping(&Buffer::date); - propertyMapper.addMapping(&Buffer::unread); - propertyMapper.addMapping(&Buffer::important); - propertyMapper.addMapping(&Buffer::folder); - propertyMapper.addMapping(&Buffer::mimeMessage); - propertyMapper.addMapping(&Buffer::fullPayloadAvailable); - propertyMapper.addMapping(&Buffer::draft); - propertyMapper.addMapping(&Buffer::trash); - propertyMapper.addMapping(&Buffer::sent); - propertyMapper.addMapping(&Buffer::messageId); - propertyMapper.addMapping(&Buffer::parentMessageId); -} - -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(PropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_sender); - propertyMapper.addMapping(&BufferBuilder::add_to); - propertyMapper.addMapping(&BufferBuilder::add_cc); - propertyMapper.addMapping(&BufferBuilder::add_bcc); - propertyMapper.addMapping(&BufferBuilder::add_subject); - propertyMapper.addMapping(&BufferBuilder::add_date); - propertyMapper.addMapping(&BufferBuilder::add_unread); - propertyMapper.addMapping(&BufferBuilder::add_important); - propertyMapper.addMapping(&BufferBuilder::add_folder); - propertyMapper.addMapping(&BufferBuilder::add_mimeMessage); - propertyMapper.addMapping(&BufferBuilder::add_fullPayloadAvailable); - propertyMapper.addMapping(&BufferBuilder::add_draft); - propertyMapper.addMapping(&BufferBuilder::add_trash); - propertyMapper.addMapping(&BufferBuilder::add_sent); - propertyMapper.addMapping(&BufferBuilder::add_messageId); - propertyMapper.addMapping(&BufferBuilder::add_parentMessageId); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Sender, sender); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, To, to); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Cc, cc); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Bcc, bcc); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Subject, subject); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Date, date); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Unread, unread); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Important, important); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Folder, folder); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, MimeMessage, mimeMessage); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, FullPayloadAvailable, fullPayloadAvailable); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Draft, draft); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Trash, trash); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, Sent, sent); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, MessageId, messageId); + SINK_REGISTER_SERIALIZER(propertyMapper, Mail, ParentMessageId, parentMessageId); } - void TypeImplementation::configure(TypeIndex &index) { index.addProperty(Folder::Parent::name); index.addProperty(Folder::Name::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&Buffer::parent); - propertyMapper.addMapping(&Buffer::name); - propertyMapper.addMapping(&Buffer::icon); - propertyMapper.addMapping(&Buffer::specialpurpose); - propertyMapper.addMapping(&Buffer::enabled); -} - -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(PropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_parent); - propertyMapper.addMapping(&BufferBuilder::add_name); - propertyMapper.addMapping(&BufferBuilder::add_icon); - propertyMapper.addMapping(&BufferBuilder::add_specialpurpose); - propertyMapper.addMapping(&BufferBuilder::add_enabled); + SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Parent, parent); + SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Name, name); + SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Icon, icon); + SINK_REGISTER_SERIALIZER(propertyMapper, Folder, SpecialPurpose, specialpurpose); + SINK_REGISTER_SERIALIZER(propertyMapper, Folder, Enabled, enabled); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -137,26 +111,15 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Contact::Uid::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(PropertyMapper &propertyMapper) { - propertyMapper.addMapping(&Buffer::uid); - propertyMapper.addMapping(&Buffer::fn); - propertyMapper.addMapping(&Buffer::emails); - propertyMapper.addMapping(&Buffer::vcard); - propertyMapper.addMapping(&Buffer::addressbook); - propertyMapper.addMapping(&Buffer::firstname); - propertyMapper.addMapping(&Buffer::lastname); -} - -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&BufferBuilder::add_uid); - propertyMapper.addMapping(&BufferBuilder::add_fn); - propertyMapper.addMapping(&BufferBuilder::add_emails); - propertyMapper.addMapping(&BufferBuilder::add_vcard); - propertyMapper.addMapping(&BufferBuilder::add_addressbook); - propertyMapper.addMapping(&BufferBuilder::add_firstname); - propertyMapper.addMapping(&BufferBuilder::add_lastname); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Uid, uid); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Fn, fn); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Emails, emails); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Vcard, vcard); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Addressbook, addressbook); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Firstname, firstname); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Lastname, lastname); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -171,16 +134,10 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Addressbook::Name::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) +void TypeImplementation::configure(PropertyMapper &propertyMapper) { - propertyMapper.addMapping(&Buffer::parent); - propertyMapper.addMapping(&Buffer::name); -} - -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&BufferBuilder::add_parent); - propertyMapper.addMapping(&BufferBuilder::add_name); + SINK_REGISTER_SERIALIZER(propertyMapper, Addressbook, Parent, parent); + SINK_REGISTER_SERIALIZER(propertyMapper, Addressbook, Name, name); } void TypeImplementation::configure(IndexPropertyMapper &) @@ -194,20 +151,12 @@ void TypeImplementation::configure(TypeIndex &index) index.addProperty(Event::Uid::name); } -void TypeImplementation::configure(ReadPropertyMapper &propertyMapper) -{ - propertyMapper.addMapping(&Buffer::summary); - propertyMapper.addMapping(&Buffer::description); - propertyMapper.addMapping(&Buffer::uid); - propertyMapper.addMapping(&Buffer::attachment); -} - -void TypeImplementation::configure(WritePropertyMapper &propertyMapper) +void TypeImplementation::configure(PropertyMapper &propertyMapper) { - propertyMapper.addMapping(&BufferBuilder::add_summary); - propertyMapper.addMapping(&BufferBuilder::add_description); - propertyMapper.addMapping(&BufferBuilder::add_uid); - propertyMapper.addMapping(&BufferBuilder::add_attachment); + SINK_REGISTER_SERIALIZER(propertyMapper, Event, Summary, summary); + SINK_REGISTER_SERIALIZER(propertyMapper, Event, Description, description); + SINK_REGISTER_SERIALIZER(propertyMapper, Event, Uid, uid); + SINK_REGISTER_SERIALIZER(propertyMapper, Event, Attachment, attachment); } void TypeImplementation::configure(IndexPropertyMapper &) diff --git a/common/domain/typeimplementations.h b/common/domain/typeimplementations.h index 8acea58..7e4608c 100644 --- a/common/domain/typeimplementations.h +++ b/common/domain/typeimplementations.h @@ -26,8 +26,7 @@ #include "contact_generated.h" #include "addressbook_generated.h" -class ReadPropertyMapper; -class WritePropertyMapper; +class PropertyMapper; class IndexPropertyMapper; class TypeIndex; @@ -46,8 +45,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Mail Buffer; typedef Sink::ApplicationDomain::Buffer::MailBuilder BufferBuilder; static void configure(TypeIndex &index); - static void configure(ReadPropertyMapper &propertyMapper); - static void configure(WritePropertyMapper &propertyMapper); + static void configure(PropertyMapper &propertyMapper); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -57,8 +55,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Folder Buffer; typedef Sink::ApplicationDomain::Buffer::FolderBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -68,8 +65,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Contact Buffer; typedef Sink::ApplicationDomain::Buffer::ContactBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -79,8 +75,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Addressbook Buffer; typedef Sink::ApplicationDomain::Buffer::AddressbookBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; @@ -90,8 +85,7 @@ public: typedef Sink::ApplicationDomain::Buffer::Event Buffer; typedef Sink::ApplicationDomain::Buffer::EventBuilder BufferBuilder; static void configure(TypeIndex &); - static void configure(ReadPropertyMapper &); - static void configure(WritePropertyMapper &); + static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); }; -- cgit v1.2.3 From 778b01181604dc2eae2013f2dc37db6d647b526a Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 8 May 2017 14:27:25 +0200 Subject: Gather required databases from index definitions. --- common/domain/typeimplementations.cpp | 78 +++++++++++++---- common/domain/typeimplementations.h | 5 ++ common/domain/typeimplementations_p.h | 154 ++++++++++++++++++++++++++++++++++ 3 files changed, 219 insertions(+), 18 deletions(-) create mode 100644 common/domain/typeimplementations_p.h (limited to 'common/domain') diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index a87e73d..4e61bad 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -28,6 +28,7 @@ #include "entity_generated.h" #include "mail/threadindexer.h" #include "domainadaptor.h" +#include "typeimplementations_p.h" using namespace Sink; using namespace Sink::ApplicationDomain; @@ -35,22 +36,43 @@ using namespace Sink::ApplicationDomain; #define SINK_REGISTER_SERIALIZER(MAPPER, ENTITYTYPE, PROPERTY, LOWERCASEPROPERTY) \ MAPPER.addMapping(&Sink::ApplicationDomain::Buffer::ENTITYTYPE::LOWERCASEPROPERTY, &Sink::ApplicationDomain::Buffer::ENTITYTYPE##Builder::add_##LOWERCASEPROPERTY); +typedef IndexConfig, + ValueIndex, + ValueIndex, + ValueIndex, + SortedIndex, + SecondaryIndex, + SecondaryIndex, + CustomSecondaryIndex + > MailIndexConfig; + +typedef IndexConfig, + ValueIndex + > FolderIndexConfig; + +typedef IndexConfig + > ContactIndexConfig; + +typedef IndexConfig + > AddressbookIndexConfig; + +typedef IndexConfig + > EventIndexConfig; + void TypeImplementation::configure(TypeIndex &index) { - // index.addProperty(); - /* index.addProperty(Mail::SenderName::name); */ - /* index->addProperty(Mail::Subject::name); */ - /* index->addFulltextProperty(Mail::Subject::name); */ - index.addProperty(); - index.addProperty(); - index.addPropertyWithSorting(); - index.addProperty(); - index.addProperty(); + MailIndexConfig::configure(index); +} - index.addSecondaryPropertyIndexer(); - index.addSecondaryProperty(); - index.addSecondaryProperty(); +QMap TypeImplementation::typeDatabases() +{ + return merge(QMap{{QByteArray{Mail::name} + ".main", 0}}, MailIndexConfig::databases()); } void TypeImplementation::configure(IndexPropertyMapper &indexPropertyMapper) @@ -85,10 +107,15 @@ void TypeImplementation::configure(PropertyMapper &propertyMapper) SINK_REGISTER_SERIALIZER(propertyMapper, Mail, ParentMessageId, parentMessageId); } + void TypeImplementation::configure(TypeIndex &index) { - index.addProperty(Folder::Parent::name); - index.addProperty(Folder::Name::name); + FolderIndexConfig::configure(index); +} + +QMap TypeImplementation::typeDatabases() +{ + return merge(QMap{{QByteArray{Folder::name} + ".main", 0}}, FolderIndexConfig::databases()); } void TypeImplementation::configure(PropertyMapper &propertyMapper) @@ -108,7 +135,12 @@ void TypeImplementation::configure(IndexPropertyMapper &) void TypeImplementation::configure(TypeIndex &index) { - index.addProperty(Contact::Uid::name); + ContactIndexConfig::configure(index); +} + +QMap TypeImplementation::typeDatabases() +{ + return merge(QMap{{QByteArray{Contact::name} + ".main", 0}}, ContactIndexConfig::databases()); } void TypeImplementation::configure(PropertyMapper &propertyMapper) @@ -130,8 +162,12 @@ void TypeImplementation::configure(IndexPropertyMapper &) void TypeImplementation::configure(TypeIndex &index) { - index.addProperty(Addressbook::Parent::name); - index.addProperty(Addressbook::Name::name); + AddressbookIndexConfig::configure(index); +} + +QMap TypeImplementation::typeDatabases() +{ + return merge(QMap{{QByteArray{Addressbook::name} + ".main", 0}}, AddressbookIndexConfig::databases()); } void TypeImplementation::configure(PropertyMapper &propertyMapper) @@ -148,7 +184,12 @@ void TypeImplementation::configure(IndexPropertyMapper &) void TypeImplementation::configure(TypeIndex &index) { - index.addProperty(Event::Uid::name); + EventIndexConfig::configure(index); +} + +QMap TypeImplementation::typeDatabases() +{ + return merge(QMap{{QByteArray{Event::name} + ".main", 0}}, EventIndexConfig::databases()); } void TypeImplementation::configure(PropertyMapper &propertyMapper) @@ -163,3 +204,4 @@ void TypeImplementation::configure(IndexPropertyMapper &) { } + diff --git a/common/domain/typeimplementations.h b/common/domain/typeimplementations.h index 7e4608c..d36dfc1 100644 --- a/common/domain/typeimplementations.h +++ b/common/domain/typeimplementations.h @@ -47,6 +47,7 @@ public: static void configure(TypeIndex &index); static void configure(PropertyMapper &propertyMapper); static void configure(IndexPropertyMapper &indexPropertyMapper); + static QMap typeDatabases(); }; template<> @@ -57,6 +58,7 @@ public: static void configure(TypeIndex &); static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); + static QMap typeDatabases(); }; template<> @@ -67,6 +69,7 @@ public: static void configure(TypeIndex &); static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); + static QMap typeDatabases(); }; template<> @@ -77,6 +80,7 @@ public: static void configure(TypeIndex &); static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); + static QMap typeDatabases(); }; template<> @@ -87,6 +91,7 @@ public: static void configure(TypeIndex &); static void configure(PropertyMapper &); static void configure(IndexPropertyMapper &indexPropertyMapper); + static QMap typeDatabases(); }; } diff --git a/common/domain/typeimplementations_p.h b/common/domain/typeimplementations_p.h new file mode 100644 index 0000000..b7a78ac --- /dev/null +++ b/common/domain/typeimplementations_p.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2015 Christian Mollekopf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "typeindex.h" +#include + +template +void mergeImpl(T &map, First f) +{ + for (auto it = f.constBegin(); it != f.constEnd(); it++) { + map.insert(it.key(), it.value()); + } +} + +template +void mergeImpl(T &map, First f, Tail ...maps) +{ + for (auto it = f.constBegin(); it != f.constEnd(); it++) { + map.insert(it.key(), it.value()); + } + mergeImpl(map, maps...); +} + +template +First merge(First f, Tail ...maps) +{ + First map; + mergeImpl(f, maps...); + return map; +} + +template +class ValueIndex +{ +public: + static void configure(TypeIndex &index) + { + index.addProperty(); + } + + template + static QMap databases() + { + return {{QByteArray{EntityType::name} +".index." + Property::name, 1}}; + } +}; + + +template +class SortedIndex +{ +public: + static void configure(TypeIndex &index) + { + index.addPropertyWithSorting(); + } + + template + static QMap databases() + { + return {{QByteArray{EntityType::name} +".index." + Property::name + ".sort." + SortProperty::name, 1}}; + } +}; + +template +class SecondaryIndex +{ +public: + static void configure(TypeIndex &index) + { + index.addSecondaryProperty(); + } + + template + static QMap databases() + { + return {{QByteArray{EntityType::name} +".index." + Property::name + SecondaryProperty::name, 1}}; + } +}; + +template +class CustomSecondaryIndex +{ +public: + static void configure(TypeIndex &index) + { + index.addSecondaryPropertyIndexer(); + } + + template + static QMap databases() + { + return Indexer::databases(); + } +}; + +template +class IndexConfig +{ + template + static void applyIndex(TypeIndex &index) + { + T::configure(index); + } + + ///Apply recursively for parameter pack + template + static void applyIndex(TypeIndex &index) + { + applyIndex(index); + applyIndex(index); + } + + template + static QMap getDbs() + { + return T::template databases(); + } + + template + static QMap getDbs() + { + return merge(getDbs(), getDbs()); + } + +public: + static void configure(TypeIndex &index) + { + applyIndex(index); + } + + static QMap databases() + { + return getDbs(); + } + +}; + -- cgit v1.2.3 From fd9a5b1ff3b31f80d72283d6011459127dead282 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 8 May 2017 21:39:04 +0200 Subject: Fixed merge implementation --- common/domain/typeimplementations_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'common/domain') diff --git a/common/domain/typeimplementations_p.h b/common/domain/typeimplementations_p.h index b7a78ac..6f77a2d 100644 --- a/common/domain/typeimplementations_p.h +++ b/common/domain/typeimplementations_p.h @@ -41,7 +41,7 @@ template First merge(First f, Tail ...maps) { First map; - mergeImpl(f, maps...); + mergeImpl(map, f, maps...); return map; } -- cgit v1.2.3 From 41f8f9bc05c059cafa780ac8aec27a56cba2c278 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 12 May 2017 08:20:43 +0200 Subject: No more SINK_DEBUG_AREA --- common/domain/applicationdomaintype.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'common/domain') diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index 67d463f..7ce80ee 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp @@ -25,8 +25,6 @@ #include "storage.h" //for generateUid() #include -SINK_DEBUG_AREA("applicationdomaintype"); - QDebug Sink::ApplicationDomain::operator<< (QDebug d, const Sink::ApplicationDomain::Mail::Contact &c) { d << "Contact(" << c.name << ", " << c.emailAddress << ")"; -- cgit v1.2.3 From d425436c268a748381f003646bd02e8d74ef7fba Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 12 May 2017 10:41:48 +0200 Subject: Added draft property index. We need this for the composer to efficiently query. Since we don't have any migration code this will require all data to be refetched (sinksh upgrade). --- common/domain/typeimplementations.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'common/domain') diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index 4e61bad..40b0cfd 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -41,6 +41,7 @@ typedef IndexConfig, ValueIndex, ValueIndex, + ValueIndex, SortedIndex, SecondaryIndex, SecondaryIndex, -- cgit v1.2.3 From 0f888b18bf7e6eecc0a2aa5aaa015cf3b9c755be Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 27 Jun 2017 15:46:54 +0200 Subject: Photo support --- common/domain/applicationdomaintype.cpp | 1 + common/domain/applicationdomaintype.h | 1 + common/domain/contact.fbs | 1 + common/domain/typeimplementations.cpp | 1 + 4 files changed, 4 insertions(+) (limited to 'common/domain') diff --git a/common/domain/applicationdomaintype.cpp b/common/domain/applicationdomaintype.cpp index 7ce80ee..3718f77 100644 --- a/common/domain/applicationdomaintype.cpp +++ b/common/domain/applicationdomaintype.cpp @@ -112,6 +112,7 @@ SINK_REGISTER_PROPERTY(Contact, Lastname); SINK_REGISTER_PROPERTY(Contact, Emails); SINK_REGISTER_PROPERTY(Contact, Vcard); SINK_REGISTER_PROPERTY(Contact, Addressbook); +SINK_REGISTER_PROPERTY(Contact, Photo); SINK_REGISTER_ENTITY(Addressbook); SINK_REGISTER_PROPERTY(Addressbook, Name); diff --git a/common/domain/applicationdomaintype.h b/common/domain/applicationdomaintype.h index e5aa46e..602d54c 100644 --- a/common/domain/applicationdomaintype.h +++ b/common/domain/applicationdomaintype.h @@ -377,6 +377,7 @@ struct SINK_EXPORT Contact : public Entity { SINK_PROPERTY(QString, Lastname, lastname); SINK_PROPERTY(QList, Emails, emails); SINK_PROPERTY(QByteArray, Vcard, vcard); + SINK_PROPERTY(QByteArray, Photo, photo); SINK_REFERENCE_PROPERTY(Addressbook, Addressbook, addressbook); }; diff --git a/common/domain/contact.fbs b/common/domain/contact.fbs index d941d5a..e689756 100644 --- a/common/domain/contact.fbs +++ b/common/domain/contact.fbs @@ -13,6 +13,7 @@ table Contact { addressbook:string; emails: [ContactEmail]; vcard: string; + photo: string; } root_type Contact; diff --git a/common/domain/typeimplementations.cpp b/common/domain/typeimplementations.cpp index 40b0cfd..47a9cf7 100644 --- a/common/domain/typeimplementations.cpp +++ b/common/domain/typeimplementations.cpp @@ -153,6 +153,7 @@ void TypeImplementation::configure(PropertyMapper &propertyMapper) SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Addressbook, addressbook); SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Firstname, firstname); SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Lastname, lastname); + SINK_REGISTER_SERIALIZER(propertyMapper, Contact, Photo, photo); } void TypeImplementation::configure(IndexPropertyMapper &) -- cgit v1.2.3