96 lines
2.3 KiB
C++
Executable File
96 lines
2.3 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* Exercise
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
* Created by Christian Fröbel, SLSE, 2017-11-30
|
|
*/
|
|
|
|
#include "exercise.h"
|
|
#include <InfrastructureManagement/ism.hpp>
|
|
#include <QtGlobal>
|
|
|
|
namespace AudioVideoManagement
|
|
{
|
|
|
|
void Exercise::add(std::unique_ptr<Asset> &&asset)
|
|
{
|
|
Q_ASSERT(asset.get());
|
|
auto insertResult = m_assets.insert(std::make_pair(asset->data().id(), std::move(asset)));
|
|
Q_ASSERT(insertResult.second);
|
|
}
|
|
|
|
void Exercise::add(std::unique_ptr<MountingPoint> &&mountingPoint)
|
|
{
|
|
Q_ASSERT(mountingPoint.get());
|
|
auto insertResult = m_mountingPoints.insert(std::make_pair(mountingPoint->data().id(), std::move(mountingPoint)));
|
|
Q_ASSERT(insertResult.second);
|
|
}
|
|
|
|
std::unique_ptr<Asset> Exercise::take(Asset *asset)
|
|
{
|
|
Q_ASSERT(asset);
|
|
auto found = m_assets.find(asset->data().id());
|
|
Q_ASSERT(found != m_assets.end());
|
|
|
|
std::unique_ptr<Asset> taken = std::move(found->second);
|
|
m_assets.erase(found);
|
|
return taken;
|
|
}
|
|
|
|
std::unique_ptr<MountingPoint> Exercise::take(MountingPoint *mountingPoint)
|
|
{
|
|
Q_ASSERT(mountingPoint);
|
|
auto found = m_mountingPoints.find(mountingPoint->data().id());
|
|
Q_ASSERT(found != m_mountingPoints.end());
|
|
|
|
std::unique_ptr<MountingPoint> taken = std::move(found->second);
|
|
m_mountingPoints.erase(found);
|
|
return taken;
|
|
}
|
|
|
|
void Exercise::moveMountedTo(Asset *asset, Exercise *targetExercise, const boost::optional<InfrastructureManagement::InstrumentationAsset> &modifiedData)
|
|
{
|
|
Q_ASSERT(asset);
|
|
Q_ASSERT(targetExercise);
|
|
|
|
targetExercise->add(take(asset));
|
|
targetExercise->add(take(asset->mountingPoint()));
|
|
|
|
emit assetUnassigned(asset);
|
|
if (modifiedData)
|
|
asset->update(*modifiedData);
|
|
emit targetExercise->assetAssigned(asset);
|
|
}
|
|
|
|
Asset *Exercise::findAsset(int id)
|
|
{
|
|
auto found = m_assets.find(id);
|
|
if (found != m_assets.end())
|
|
return found->second.get();
|
|
else
|
|
return nullptr;
|
|
}
|
|
|
|
std::vector<Asset *> Exercise::assets() const
|
|
{
|
|
std::vector<Asset *> allAssets;
|
|
allAssets.reserve(m_assets.size());
|
|
for (const auto &exerciseAndAsset: m_assets)
|
|
allAssets.push_back(exerciseAndAsset.second.get());
|
|
return allAssets;
|
|
}
|
|
|
|
MountingPoint *Exercise::findMountingPoint(int id)
|
|
{
|
|
auto found = m_mountingPoints.find(id);
|
|
if (found != m_mountingPoints.end())
|
|
return found->second.get();
|
|
else
|
|
return nullptr;
|
|
}
|
|
|
|
} // namespace AudioVideoManagement
|
|
|