Skip to content
Snippets Groups Projects
Commit 00d28166 authored by Firat Yusuf Duran's avatar Firat Yusuf Duran :moyai:
Browse files

add saveSkill and loadSkills to skillsmemory

parent d9d30318
No related branches found
No related tags found
2 merge requests!458Fluxio/dev get types,!449Fluxio preliminary release
Pipeline #21124 failed
......@@ -28,14 +28,18 @@
#include <ArmarXCore/core/ArmarXObjectScheduler.h>
#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
#include <ArmarXCore/core/logging/Logging.h>
#include <ArmarXCore/core/time/LocalTimeServer.h>
#include <ArmarXCore/core/time/TimeUtil.h>
#include "RobotAPI/libraries/armem_skills/server/segment/ComposedSkillLibrarySegment.h"
#include "RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.h"
#include <RobotAPI/interface/skills/SkillManagerInterface.h>
#include <RobotAPI/libraries/armem/core/error.h>
#include <RobotAPI/libraries/armem/core/wm/memory_definitions.h>
#include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
#include <RobotAPI/libraries/armem/server/wm/memory_definitions.h>
#include <RobotAPI/libraries/armem_skills/aron_conversions.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
namespace armarx
{
......@@ -227,4 +231,18 @@ namespace armarx
{
statechartListenerProviderSegment.reportStatechartTransitionWithParametersList(x);
}
//****************************//
//** Fluxio related methods **//
//****************************//
void SkillsMemory::saveSkill(const skills::manager::arondto::FluxioSkill& skill)
{
composedSkillCoreSegment.addSkill(skill);
}
std::optional<std::vector<skills::manager::arondto::FluxioSkill>> SkillsMemory::loadSkills()
{
return composedSkillCoreSegment.getSkills();
}
} // namespace armarx
......@@ -23,6 +23,7 @@
#pragma once
// Base Class
#include <vector>
#include <ArmarXCore/core/Component.h>
// ArmarX
......@@ -39,6 +40,7 @@
#include <RobotAPI/libraries/armem_skills/server/segment/SkillEventSegment.h>
#include <RobotAPI/libraries/armem_skills/server/segment/SkillExecutionRequestSegment.h>
#include <RobotAPI/libraries/armem_skills/server/segment/StatechartListenerSegment.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
#include <RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h>
namespace armarx
......@@ -107,6 +109,14 @@ namespace armarx
armem::data::CommitResult commit(const armem::data::Commit& commit,
const Ice::Current&) override;
//****************************//
//** Fluxio related methods **//
//****************************//
void saveSkill(const skills::manager::arondto::FluxioSkill& skillt) override;
std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadSkills() override;
protected:
/// @see armarx::ManagedIceObject::onInitComponent()
void onInitComponent() override;
......
#include "ComposedSkillLibrarySegment.h"
#include <optional>
#include <SimoxUtility/algorithm/string.h>
#include <ArmarXCore/core/time/ice_conversions.h>
#include "RobotAPI/libraries/armem/client/Query.h"
#include "RobotAPI/libraries/armem/client/forward_declarations.h"
#include "RobotAPI/libraries/armem/client/query/Builder.h"
#include "RobotAPI/libraries/armem/core/wm/memory_definitions.h"
#include <RobotAPI/libraries/armem/server/MemoryToIceAdapter.h>
#include <RobotAPI/libraries/armem_skills/aron/Skill.aron.generated.h>
#include <RobotAPI/libraries/armem_skills/aron_conversions.h>
......@@ -21,7 +27,7 @@ namespace armarx::skills::segment
void
ComposedSkillLibraryCoreSegment::defineProperties(PropertyDefinitionsPtr defs,
const std::string& prefix)
const std::string& prefix)
{
this->setDefaultMaxHistorySize(3);
Base::defineProperties(defs, prefix);
......@@ -34,36 +40,46 @@ namespace armarx::skills::segment
}
void
ComposedSkillLibraryCoreSegment::addSkillProvider(const skills::ProviderInfo& info)
ComposedSkillLibraryCoreSegment::addSkill(const skills::manager::arondto::FluxioSkill& skill)
{
// add skills
auto skills = info.providedSkills;
auto provId = id().withProviderSegmentName(info.providerId.providerName);
for (const auto& [s, d] : skills)
{
armarx::skills::arondto::SkillDescription skillDescription;
armem::toAron(skillDescription, d);
auto provId = id().withProviderSegmentName(skill.skillProviderId.id);
armem::Commit commit;
auto& entityUpdate = commit.add();
entityUpdate.confidence = 1.0;
entityUpdate.referencedTime = armem::Time::Now();
entityUpdate.sentTime = armem::Time::Now();
entityUpdate.arrivedTime = armem::Time::Now();
entityUpdate.instancesData = {skillDescription.toAron()};
entityUpdate.entityID = provId.withEntityName(d.skillId.skillName);
armem::Commit commit;
auto& entityUpdate = commit.add();
entityUpdate.confidence = 1.0;
entityUpdate.referencedTime = armem::Time::Now();
entityUpdate.sentTime = armem::Time::Now();
entityUpdate.arrivedTime = armem::Time::Now();
entityUpdate.instancesData = {skill.toAron()};
entityUpdate.entityID = provId.withEntityName(skill.id);
// Commit data to memory and notify
iceMemory.commit(commit);
}
// Commit data to memory and notify
iceMemory.commit(commit);
}
void
ComposedSkillLibraryCoreSegment::removeSkillProvider(const std::string& providerName)
std::optional<std::vector<skills::manager::arondto::FluxioSkill>>
ComposedSkillLibraryCoreSegment::getSkills() const
{
skills.erase(providerName);
std::vector<skills::manager::arondto::FluxioSkill> ret;
armarx::armem::client::query::Builder qb;
qb.allLatestInCoreSegment(id());
armem::client::QueryResult qresult = iceMemory.query(qb.buildQueryInput());
if (!qresult.success)
{
ARMARX_WARNING << "Query failed: " << qresult.errorMessage;
return std::nullopt;
}
const armem::wm::Memory& data = qresult.memory;
data.forEachInstance(
[&ret](const armem::wm::EntityInstance& instance)
{
auto skill = instance.dataAs<skills::manager::arondto::FluxioSkill>();
ret.push_back(skill);
});
// TODO also add info about removed provider to memory?
return ret;
}
} // namespace armarx::skills::segment
......@@ -12,6 +12,7 @@
#include <RobotAPI/interface/skills/SkillProviderInterface.h>
#include <RobotAPI/libraries/armem_skills/aron/Skill.aron.generated.h>
#include <RobotAPI/libraries/skills/core/ProviderInfo.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
namespace armarx::skills::segment
{
......@@ -27,12 +28,8 @@ namespace armarx::skills::segment
void defineProperties(PropertyDefinitionsPtr defs, const std::string& prefix);
void init();
void addSkillProvider(const skills::ProviderInfo& info);
void removeSkillProvider(const std::string& providerName);
void addSkill(const skills::manager::arondto::FluxioSkill& skill);
size_t size() const;
private:
std::map<std::string, std::map<std::string, skills::manager::dto::ProviderInfo>> skills;
std::optional<std::vector<skills::manager::arondto::FluxioSkill>> getSkills() const;
};
} // namespace armarx::skills::segment
......@@ -762,8 +762,8 @@ namespace armarx
return nullptr;
}
std::optional<aron::data::dto::DictPtr>
FluxioSkill::toAronDTO() const
std::optional<manager::arondto::FluxioSkill>
FluxioSkill::toAronXml() const
{
if (skillProviderPtr == nullptr)
{
......@@ -832,7 +832,18 @@ namespace armarx
ret.timeout = timeout;
return ret.toAronDTO();
return ret;
}
std::optional<aron::data::dto::DictPtr>
FluxioSkill::toAronDTO() const {
const std::optional<manager::arondto::FluxioSkill> ret = toAronXml();
if (!ret.has_value()) {
return std::nullopt;
}
return toAronXml()->toAronDTO();
}
} // namespace skills
} // namespace armarx
......@@ -11,6 +11,7 @@
#include <RobotAPI/interface/skills/SkillManagerInterface.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioIdentificator.aron.generated.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioNode.aron.generated.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
#include "FluxioEdge.h"
#include "FluxioNode.h"
......@@ -46,6 +47,7 @@ namespace armarx
std::optional<manager::dto::FluxioSkill> toManagerIce() const;
std::optional<aron::data::dto::DictPtr> toAronDTO() const;
std::optional<manager::arondto::FluxioSkill> toAronXml() const;
manager::dto::FluxioIdentificator toFluxioIdentificatorIce() const;
manager::arondto::FluxioIdentificator toFluxioIdentificatorAron() const;
bool updateFromIce(const manager::dto::FluxioSkill& i,
......@@ -54,10 +56,10 @@ namespace armarx
std::map<std::string, FluxioSkill>& skillsMap,
std::map<std::string, aron::type::ObjectPtr>& typesMap);
bool updateFromAron(const aron::data::dto::DictPtr& i,
std::map<std::string, FluxioProvider>& providersMap,
std::map<std::string, FluxioProfile>& profilesMap,
std::map<std::string, FluxioSkill>& skillsMap,
std::map<std::string, aron::type::ObjectPtr>& typesMap);
std::map<std::string, FluxioProvider>& providersMap,
std::map<std::string, FluxioProfile>& profilesMap,
std::map<std::string, FluxioSkill>& skillsMap,
std::map<std::string, aron::type::ObjectPtr>& typesMap);
void deleteParameter(const std::string& parameterId, const std::string& skillId);
void removeSubSkillNodesAndEdges(const std::string& skillId);
......
......@@ -3,6 +3,7 @@
#include <mutex>
#include <optional>
#include <string>
#include <vector>
#include <Ice/Exception.h>
#include <Ice/OutputStream.h>
......@@ -23,6 +24,7 @@
#include "RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.h"
#include <RobotAPI/interface/aron/Aron.h>
#include <RobotAPI/interface/skills/SkillManagerInterface.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
namespace armarx
{
......@@ -692,6 +694,26 @@ namespace armarx
return {};
}
const std::optional<skills::manager::arondto::FluxioSkill> aronSkill =
s->toAronXml();
if (!aronSkill.has_value())
{
ARMARX_WARNING << "Skill with id " << skill.id << " could not be converted to Aron";
return {};
}
saveSkill(aronSkill.value());
return ret.value();
}
void SkillManagerComponentPluginUser::saveSkill(const skills::manager::arondto::FluxioSkill& skill) {
// Implemented in derived class
}
std::optional<std::vector<skills::manager::arondto::FluxioSkill>> SkillManagerComponentPluginUser::loadSkills() {
// Implemented in derived class
return {};
}
} // namespace armarx
#pragma once
#include <memory>
#include <vector>
#include <Ice/Current.h>
#include <RobotAPI/interface/aron/Aron.h>
#include <RobotAPI/interface/skills/SkillManagerInterface.h>
#include <RobotAPI/libraries/skills/core/aron/FluxioSkill.aron.generated.h>
#include "SkillManagerComponentPlugin.h"
......@@ -149,6 +151,9 @@ namespace armarx
const skills::manager::dto::FluxioSkill& skill,
const Ice::Current& current) override;
virtual void saveSkill(const skills::manager::arondto::FluxioSkill& skill);
virtual std::optional<std::vector<skills::manager::arondto::FluxioSkill>> loadSkills();
private:
armarx::plugins::SkillManagerComponentPlugin* plugin = nullptr;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment