11 #ifndef smtk_operation_ResourceIOGroup_h
12 #define smtk_operation_ResourceIOGroup_h
14 #include "smtk/CoreExports.h"
16 #include "smtk/attribute/Attribute.h"
17 #include "smtk/attribute/Definition.h"
18 #include "smtk/attribute/FileItem.h"
19 #include "smtk/attribute/FileItemDefinition.h"
23 #include "smtk/operation/Group.h"
24 #include "smtk/operation/Manager.h"
25 #include "smtk/operation/Operation.h"
26 #include "smtk/operation/SpecificationOps.h"
45 ResourceIOGroup(
const std::string& name, std::shared_ptr<smtk::operation::Manager> manager)
46 :
Group(name, manager)
47 , m_fileItemName(manager)
54 virtual bool requiresFileItem()
const {
return true; }
58 template<
typename ResourceType>
59 bool registerOperation(
61 const std::string& fileItemName = m_defaultFileItemName);
65 template<
typename ResourceType>
66 bool registerOperation(
67 const Operation::Index&,
68 const std::string& fileItemName = m_defaultFileItemName);
72 template<
typename ResourceType,
typename OperationType>
73 bool registerOperation(
const std::string& fileItemName = m_defaultFileItemName);
77 std::string fileItemNameForOperation(
const std::string&)
const;
81 std::string fileItemNameForOperation(
const Operation::Index&)
const;
85 smtk::attribute::FileItemDefinition::Ptr fileItemDefinitionForOperation(
const std::string&)
const;
89 smtk::attribute::FileItemDefinition::Ptr fileItemDefinitionForOperation(
90 const Operation::Index&)
const;
94 std::set<Operation::Index> operationsForResource(
const std::string& resourceName)
const;
97 std::string resourceForOperation(
const Operation::Index&)
const;
101 template<
typename ResourceType>
102 std::set<Operation::Index> operationsForResource()
const;
104 std::set<std::string> supportedResources()
const;
108 template<
typename OperationType>
109 std::string fileItemNameForOperation()
const;
115 static constexpr
const char*
const type_name =
"fileItemName";
117 FileItemName(std::shared_ptr<smtk::operation::Manager> manager)
118 :
Group(type_name, manager)
124 static const std::string m_defaultFileItemName;
127 template<
typename ResourceType>
130 const std::string& fileItemName)
132 if (this->requiresFileItem())
144 if (parameters ==
nullptr || parameters->findFile(fileItemName) ==
nullptr)
154 template<
typename ResourceType>
156 const Operation::Index& index,
157 const std::string& fileItemName)
159 if (this->requiresFileItem())
163 auto manager = m_manager.lock();
164 if (manager ==
nullptr)
169 auto metadata = manager->metadata().get<
IndexTag>().find(index);
170 if (metadata == manager->metadata().get<
IndexTag>().end())
175 Operation::Specification spec =
specification(metadata->typeName());
181 Operation::Parameters parameters =
extractParameters(spec, metadata->typeName());
183 if (parameters ==
nullptr || parameters->findFile(fileItemName) ==
nullptr)
193 template<
typename ResourceType,
typename OperationType>
196 if (this->requiresFileItem())
200 auto manager = m_manager.lock();
201 if (manager ==
nullptr)
207 manager->metadata().get<
IndexTag>().find(std::type_index(
typeid(OperationType)).hash_code());
208 if (metadata == manager->metadata().get<
IndexTag>().end())
213 Operation::Specification spec =
specification(metadata->typeName());
219 Operation::Parameters parameters =
extractParameters(spec, metadata->typeName());
221 if (parameters ==
nullptr || parameters->findFile(fileItemName) ==
nullptr)
228 std::type_index(
typeid(OperationType)).hash_code(), { fileItemName }) &&
230 std::type_index(
typeid(OperationType)).hash_code(),
231 { smtk::common::typeName<ResourceType>() }));
234 template<
typename OperationType>
240 template<
typename ResourceType>
248 #endif // smtk_operation_ResourceIOGroup_h