ProjectExplorer: Simplify DeployConfigurationFactory interface

Following the RunConfigurationFactory lead this replaces
f = Foo::find(); f->do() by static Foo::do() stanzas.

Also protect DeployConfigurationFactory::canCreate()

Change-Id: I80fa491f836c3b9186f6ce6dccac4d52d4b80fc8
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
hjk
2018-03-12 11:43:59 +01:00
parent 02dacc27eb
commit 805b28b8b7
4 changed files with 19 additions and 67 deletions

View File

@@ -217,33 +217,25 @@ DeployConfiguration *DeployConfigurationFactory::create(Target *parent, Core::Id
return dc;
}
bool DeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *product) const
DeployConfiguration *DeployConfigurationFactory::clone(Target *parent,
const DeployConfiguration *source)
{
if (!canHandle(parent))
return false;
const Core::Id id = product->id();
if (!id.name().startsWith(m_deployConfigBaseId.name()))
return false;
return true;
}
DeployConfiguration *DeployConfigurationFactory::clone(Target *parent, DeployConfiguration *product)
{
QTC_ASSERT(m_creator, return nullptr);
if (!canClone(parent, product))
return nullptr;
DeployConfiguration *dc = m_creator(parent);
QVariantMap data = product->toMap();
dc->fromMap(data);
return dc;
return restore(parent, source->toMap());
}
DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const QVariantMap &map)
{
if (!canRestore(parent, map))
const Core::Id id = idFromMap(map);
DeployConfigurationFactory *factory = Utils::findOrDefault(g_deployConfigurationFactories,
[parent, id](DeployConfigurationFactory *f) {
if (!f->canHandle(parent))
return false;
return id.name().startsWith(f->m_deployConfigBaseId.name());
});
if (!factory)
return nullptr;
QTC_ASSERT(m_creator, return nullptr);
DeployConfiguration *dc = m_creator(parent);
QTC_ASSERT(factory->m_creator, return nullptr);
DeployConfiguration *dc = factory->m_creator(parent);
QTC_ASSERT(dc, return nullptr);
if (!dc->fromMap(map)) {
delete dc;
@@ -252,22 +244,6 @@ DeployConfiguration *DeployConfigurationFactory::restore(Target *parent, const Q
return dc;
}
bool DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
if (!canHandle(parent))
return false;
const Core::Id id = idFromMap(map);
return id.name().startsWith(m_deployConfigBaseId.name());
}
DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, const QVariantMap &map)
{
return Utils::findOrDefault(g_deployConfigurationFactories,
[&parent, &map](DeployConfigurationFactory *factory) {
return factory->canRestore(parent, map);
});
}
QList<DeployConfigurationFactory *> DeployConfigurationFactory::find(Target *parent)
{
return Utils::filtered(g_deployConfigurationFactories,
@@ -276,14 +252,6 @@ QList<DeployConfigurationFactory *> DeployConfigurationFactory::find(Target *par
});
}
DeployConfigurationFactory *DeployConfigurationFactory::find(Target *parent, DeployConfiguration *dc)
{
return Utils::findOrDefault(g_deployConfigurationFactories,
[&parent, &dc](DeployConfigurationFactory *factory) {
return factory->canClone(parent, dc);
});
}
void DeployConfigurationFactory::setSupportedTargetDeviceTypes(const QList<Core::Id> &ids)
{
m_supportedTargetDeviceTypes = ids;