diff --git a/source/RobotAPI/libraries/skills/core/Skill.cpp b/source/RobotAPI/libraries/skills/core/Skill.cpp index 7d94de3e90815a156289948fae26463ce5f28247..0b7a32df224d925ced896414d7d47f540f04a0d5 100644 --- a/source/RobotAPI/libraries/skills/core/Skill.cpp +++ b/source/RobotAPI/libraries/skills/core/Skill.cpp @@ -245,7 +245,7 @@ namespace armarx std::string("The skill '" + getSkillId().toString() + "' was asked to stop."); message += abortedMessage.empty() ? "" : " Additional message: " + abortedMessage; - throw error::SkillAbortedException(message); + throw error::SkillAbortedException(__PRETTY_FUNCTION__, message); return; } @@ -256,7 +256,7 @@ namespace armarx message += abortedMessage.empty() ? "" : " Additional message: " + abortedMessage; ARMARX_WARNING << message; - throw error::SkillFailedException(message); + throw error::SkillFailedException(__PRETTY_FUNCTION__, message); } } diff --git a/source/RobotAPI/libraries/skills/core/SkillProxy.cpp b/source/RobotAPI/libraries/skills/core/SkillProxy.cpp index f73c43dfd152c756f80e5ac3e83e901fe59e8ee1..ea4fc4d1a0192d5ad4819be4248df3ea52566164 100644 --- a/source/RobotAPI/libraries/skills/core/SkillProxy.cpp +++ b/source/RobotAPI/libraries/skills/core/SkillProxy.cpp @@ -12,9 +12,19 @@ namespace armarx manager(manager) { ARMARX_CHECK_NOT_NULL(manager); - skillDescription = SkillDescription::FromIce( - manager->getSkillDescription(skillId.toManagerIce()).value()); - ARMARX_CHECK(skillDescription.skillId.isFullySpecified()); + IceUtil::Optional<manager::dto::SkillDescription> description = + manager->getSkillDescription(skillId.toManagerIce()); + if (description) + { + skillDescription = SkillDescription::FromIce(description.value()); + ARMARX_CHECK(skillDescription.skillId.isFullySpecified()); + } + else + { + std::stringstream reason; + reason << "No skill with ID " << skillId << " found"; + throw error::SkillNotFoundException(__PRETTY_FUNCTION__, reason.str()); + } } SkillProxy::SkillProxy(const manager::dti::SkillManagerInterfacePrx& manager, diff --git a/source/RobotAPI/libraries/skills/core/error/Exception.h b/source/RobotAPI/libraries/skills/core/error/Exception.h index 5e10baed1e9af3131226320397c11919d7a826e0..9e01205b27e74eddc69fa8ff7c28d2646eafc9e2 100644 --- a/source/RobotAPI/libraries/skills/core/error/Exception.h +++ b/source/RobotAPI/libraries/skills/core/error/Exception.h @@ -48,32 +48,38 @@ namespace armarx::skills::error } }; - class SkillAbortedException : public armarx::LocalException + /** + * @brief Indicates that a skill was not found, e.g., by the skill manager. + */ + class SkillNotFoundException : public SkillException { public: - SkillAbortedException() = delete; + SkillNotFoundException() = delete; - SkillAbortedException(const std::string& reason) : LocalException(reason) + SkillNotFoundException(const std::string& prettymethod, const std::string& reason) : + SkillException(prettymethod, reason) { } + }; + + class SkillAbortedException : public SkillException + { + public: + SkillAbortedException() = delete; SkillAbortedException(const std::string& prettymethod, const std::string& reason) : - LocalException(prettymethod + ": " + reason + ".") + SkillException(prettymethod, reason) { } }; - class SkillFailedException : public armarx::LocalException + class SkillFailedException : public SkillException { public: SkillFailedException() = delete; - SkillFailedException(const std::string& reason) : LocalException(reason) - { - } - SkillFailedException(const std::string& prettymethod, const std::string& reason) : - LocalException(prettymethod + ": " + reason + ".") + SkillException(prettymethod, reason) { } };