Skip to content

Commit

Permalink
Accept configuration or configuration with schema when create/update …
Browse files Browse the repository at this point in the history
…plugin instance
  • Loading branch information
sgallou committed Sep 5, 2024
1 parent cd46648 commit 11c2070
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions sources/server/web/rest/service/PluginV2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,7 @@ namespace web
if (props->empty() || props->find("type") != props->end())
instanceEntry->set("type", instance->Type());
if (props->empty() || props->find("configuration") != props->end())
instanceEntry->set("configuration", instance->Configuration());
if (props->empty() || props->find("configurationWithSchema") != props->end())
instanceEntry->set("configurationWithSchema",
instanceEntry->set("configuration",
CPluginConfigurationMerger::mergeConfigurationAndSchema(
*getPluginConfigurationSchema(findPlugin(instance->Type), labels),
*instance->Configuration()));
Expand Down Expand Up @@ -270,14 +268,21 @@ namespace web
m_dataProvider,
[this](const auto& req) -> boost::shared_ptr<IAnswer>
{
// Extract only configuration if configurationWithSchema provided
shared::CDataContainer pluginToCreate(req->body());
if (pluginToCreate.exists("configurationWithSchema"))
if (pluginToCreate.exists("configuration"))
{
pluginToCreate.set("Configuration",
CPluginConfigurationMerger::extractConfiguration(
pluginToCreate.get<shared::CDataContainer>("configurationWithSchema")));
pluginToCreate.remove("configurationWithSchema");
try
{
const auto extractedConfiguration = CPluginConfigurationMerger::extractConfiguration(
pluginToCreate.get<shared::CDataContainer>("configuration"));
pluginToCreate.remove("configuration");
pluginToCreate.set("configuration",
extractedConfiguration);
}
catch (const std::exception&)
{
// Fail to extract configuration ==> Consider that configuration is provided without schema and record as is
}
}

database::entities::CPlugin plugin;
Expand All @@ -304,14 +309,21 @@ namespace web
"plugin-instance id was not provided");
const auto instanceId = static_cast<int>(std::stol(id));

// Extract only configuration if configurationWithSchema provided
shared::CDataContainer pluginToUpdate(request->body());
if (pluginToUpdate.exists("configurationWithSchema"))
if (pluginToUpdate.exists("configuration"))
{
pluginToUpdate.set("Configuration",
CPluginConfigurationMerger::extractConfiguration(
pluginToUpdate.get<shared::CDataContainer>("configurationWithSchema")));
pluginToUpdate.remove("configurationWithSchema");
try
{
const auto extractedConfiguration = CPluginConfigurationMerger::extractConfiguration(
pluginToUpdate.get<shared::CDataContainer>("configuration"));
pluginToUpdate.remove("configuration");
pluginToUpdate.set("configuration",
extractedConfiguration);
}
catch (const std::exception&)
{
// Fail to extract configuration ==> Consider that configuration is provided without schema and record as is
}
}

database::entities::CPlugin instanceToUpdate;
Expand Down

0 comments on commit 11c2070

Please sign in to comment.