SendFilters populated with class names via 'typeDiscriminator'

This commit is contained in:
Ralph Wessel
2024-09-17 16:20:08 +01:00
parent c4610626b6
commit 945fa86c7c
3 changed files with 24 additions and 27 deletions
@@ -5,6 +5,7 @@
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include "Connector/Record/Model/Filter/ArchicadEverythingFilter.h"
#include "Connector/Record/Model/Filter/FilterMover.h"
#include "Connector/Record/Model/Filter/ArchicadSelectionFilter.h"
using namespace active::container;
@@ -15,7 +16,7 @@ using namespace speckle::utility;
namespace {
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector<SendFilter>>, Vector<SendFilter>>;
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector<SendFilter>, FilterMover>, Vector<SendFilter>>;
}
@@ -16,10 +16,25 @@ namespace {
///The tag used to identify a Speckle type name value
const char* attributeTag = "typeDiscriminator";
///Identity for a SenderModelCard
const char* ArchicadSelectionTypeName = "ArchicadSelectionFilter";
///Identity for a SenderModelCard
///Identity for selecting everything
const char* ArchicadEverythingTypeName = "ArchicadEverythingFilter";
///Identity for a selection filter
const char* ArchicadSelectionTypeName = "ArchicadSelectionFilter";
/*--------------------------------------------------------------------
Ensure the handler is populated
handler: The filter handler to validate
return: A reference to the handler
--------------------------------------------------------------------*/
std::shared_ptr<active::serialise::Handler>& validateHandler(std::shared_ptr<active::serialise::Handler>& handler) {
if (!handler->empty())
return handler;
handler->add<ArchicadEverythingFilter>(ArchicadEverythingTypeName);
handler->add<ArchicadSelectionFilter>(ArchicadSelectionTypeName);
return handler;
} //validateHandler
}
@@ -32,8 +47,7 @@ std::shared_ptr<active::serialise::Handler> FilterMover::m_handler = std::make_s
handler: A package handler to reconstruct incoming packages
--------------------------------------------------------------------*/
FilterMover::FilterMover() : Mover{m_handler} {
validateHandler();
FilterMover::FilterMover() : Mover{validateHandler(m_handler)} {
} //FilterMover::FilterMover
@@ -42,8 +56,7 @@ FilterMover::FilterMover() : Mover{m_handler} {
outgoing: An outgoing package
--------------------------------------------------------------------*/
FilterMover::FilterMover(const active::serialise::Package& outgoing) : Mover{outgoing, m_handler} {
validateHandler();
FilterMover::FilterMover(const active::serialise::Package& outgoing) : Mover{outgoing, validateHandler(m_handler)} {
} //FilterMover::FilterMover
@@ -52,17 +65,5 @@ FilterMover::FilterMover(const active::serialise::Package& outgoing) : Mover{out
package: A reference to the member variable
--------------------------------------------------------------------*/
FilterMover::FilterMover(active::serialise::PackageUniqueWrap&& package) : Mover{std::move(package), m_handler} {
FilterMover::FilterMover(active::serialise::PackageUniqueWrap&& package) : Mover{std::move(package), validateHandler(m_handler)} {
} //FilterMover::FilterMover
/*--------------------------------------------------------------------
Ensure the handler is populated
--------------------------------------------------------------------*/
void FilterMover::validateHandler() {
if (!m_handler->empty())
return;
m_handler->add<ArchicadEverythingFilter>(ArchicadEverythingTypeName);
m_handler->add<DirectSelectionSendFilter>(ArchicadSelectionTypeName);
} //FilterMover::validateHandler
@@ -37,12 +37,7 @@ namespace connector::record {
FilterMover(active::serialise::PackageUniqueWrap&& package);
private:
/*!
Ensure the handler is populated
*/
static void validateHandler();
///The handler for model card packages
///The handler for model filter packages
static std::shared_ptr<active::serialise::Handler> m_handler;
};