11 #ifndef smtk_attribute_Resource_h
12 #define smtk_attribute_Resource_h
14 #include "smtk/common/Deprecation.h"
15 #include "smtk/common/Factory.h"
16 #include "smtk/common/UUID.h"
18 #include "smtk/geometry/Resource.h"
20 #include "smtk/resource/Component.h"
21 #include "smtk/resource/DerivedFrom.h"
22 #include "smtk/resource/Links.h"
24 #include "smtk/CoreExports.h"
26 #include "smtk/attribute/Analyses.h"
27 #include "smtk/attribute/AssociationRules.h"
28 #include "smtk/attribute/Attribute.h"
29 #include "smtk/attribute/CopyAssignmentOptions.h"
30 #include "smtk/attribute/Definition.h"
31 #include "smtk/attribute/DirectoryInfo.h"
32 #include "smtk/attribute/Evaluator.h"
33 #include "smtk/attribute/EvaluatorFactory.h"
34 #include "smtk/attribute/Item.h"
35 #include "smtk/attribute/ItemDefinition.h"
36 #include "smtk/attribute/SymbolDependencyStorage.h"
38 #include "smtk/string/Token.h"
40 #include "smtk/view/Configuration.h"
93 static constexpr smtk::resource::Links::RoleType AssociationRole = -1;
94 static constexpr smtk::resource::Links::RoleType ReferenceRole = -2;
100 const std::string& baseTypeName =
"");
102 const std::string& name,
112 void setIsPrivate(
bool isPrivateValue) { m_isPrivate = isPrivateValue; }
113 bool isPrivate()
const {
return m_isPrivate; };
117 const std::string& defaultNameSeparator()
const;
120 void resetDefaultNameSeparator();
123 bool setDefaultNameSeparator(
const std::string& separator);
129 const std::string& name,
136 const smtk::resource::Links::RoleType& role)
const;
138 void addUniqueRoles(
const std::set<smtk::resource::Links::RoleType>& roles);
139 void addUniqueRole(
const smtk::resource::Links::RoleType& role);
140 const std::set<smtk::resource::Links::RoleType>& uniqueRoles()
const;
141 bool isRoleUnique(
const smtk::resource::Links::RoleType& role)
const;
160 const std::string&)
const override;
163 static std::string createAttributeQuery(
const std::string& defType);
165 void visit(smtk::resource::Component::Visitor&)
const override;
167 void findAttributes(
const std::string& type, std::vector<smtk::attribute::AttributePtr>& result)
169 std::vector<smtk::attribute::AttributePtr> findAttributes(
const std::string& type)
const;
172 std::vector<smtk::attribute::AttributePtr>& result)
const;
176 void findBaseDefinitions(std::vector<smtk::attribute::DefinitionPtr>& result)
const;
178 void derivedDefinitions(
180 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
182 void findAllDerivedDefinitions(
185 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
187 void findDefinitionAttributes(
188 const std::string& type,
189 std::vector<smtk::attribute::AttributePtr>& result)
const;
190 void findDefinitions(
unsigned long mask, std::vector<smtk::attribute::DefinitionPtr>& result)
196 bool rename(
AttributePtr att,
const std::string& newName);
201 std::size_t numberOfAdvanceLevels()
const {
return m_advLevels.
size(); }
202 void addAdvanceLevel(
int level, std::string label,
const double* l_color =
nullptr);
203 const std::map<int, std::string>& advanceLevels()
const {
return m_advLevels; }
205 const double* advanceLevelColor(
int level)
const;
206 void setAdvanceLevelColor(
int level,
const double* l_color);
210 createAttribute(
const std::string& name,
const std::string& type,
const smtk::common::UUID&
id);
212 const std::string& name,
215 std::string createUniqueName(
const std::string& type)
const;
217 void finalizeDefinitions();
225 const std::set<std::string>&
categories()
const {
return m_categories; }
233 void setActiveCategoriesEnabled(
bool mode);
235 void setActiveCategories(
const std::set<std::string>& cats);
246 std::vector<smtk::view::ConfigurationPtr> findTopLevelViews()
const;
247 const std::map<std::string, smtk::view::ConfigurationPtr>& views()
const {
return m_views; }
257 const std::string& styleName =
"")
const;
258 const std::map<std::string, smtk::view::Configuration::Component>& findStyles(
260 const std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>>&
styles()
279 bool hasAssociations()
const;
287 bool hasAttributes()
const {
return !m_attributes.empty(); }
298 unsigned int options = 0);
300 SMTK_DEPRECATED_IN_22_11(
301 "Replaced by copyAttribute(const AttributePtr&, const AttributeCopyOptions&, const "
302 "ItemAssignmentOptions&, smtk::io::Logger&).")
305 const
bool& copyModelAssocs,
306 const
unsigned int& options = 0);
317 smtk::io::Logger& logger);
324 void definitions(std::vector<
smtk::attribute::
DefinitionPtr>& result,
bool sortList = false)
335 return !!m_evaluatorFactory.createEvaluator(att);
338 std::unique_ptr<smtk::attribute::Evaluator> createEvaluator(
341 return m_evaluatorFactory.createEvaluator(att);
350 void setDirectoryInfo(
const DirectoryInfo& dinfo) { m_directoryInfo = dinfo; }
351 const DirectoryInfo& directoryInfo()
const {
return m_directoryInfo; }
354 CustomItemDefinitionFactory& customItemDefinitionFactory()
356 return m_customItemDefinitionFactory;
358 const CustomItemDefinitionFactory& customItemDefinitionFactory()
const
360 return m_customItemDefinitionFactory;
363 AssociationRules& associationRules() {
return m_associationRules; }
364 const AssociationRules& associationRules()
const {
return m_associationRules; }
383 std::unique_lock<std::mutex> m_guard;
396 std::mutex& mutex()
const {
return m_mutex; }
411 virtual bool setTemplateVersion(std::size_t templateVersion);
412 std::size_t templateVersion()
const {
return m_templateVersion; }
417 void internalFindAllDerivedDefinitions(
420 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
421 void internalFindAttributes(
423 std::vector<smtk::attribute::AttributePtr>& result)
const;
424 bool copyDefinitionImpl(
428 std::map<std::string, smtk::attribute::DefinitionPtr> m_definitions;
429 std::map<std::string, std::set<smtk::attribute::AttributePtr, Attribute::CompareByName>>
431 std::map<std::string, smtk::attribute::AttributePtr> m_attributes;
432 std::map<smtk::common::UUID, smtk::attribute::AttributePtr> m_attributeIdMap;
436 std::set<smtk::attribute::WeakDefinitionPtr, Definition::WeakDefinitionPtrCompare>>
438 std::set<std::string> m_categories;
439 std::set<std::string> m_activeCategories;
440 bool m_activeCategoriesEnabled =
false;
442 std::map<std::string, smtk::view::ConfigurationPtr> m_views;
443 std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>> m_styles;
447 std::map<int, std::string> m_advLevels;
448 std::map<int, std::vector<double>> m_advLevelColors;
449 DirectoryInfo m_directoryInfo;
450 std::set<smtk::resource::Links::RoleType> m_roles;
452 CustomItemDefinitionFactory m_customItemDefinitionFactory;
454 AssociationRules m_associationRules;
456 bool m_isPrivate =
false;
458 EvaluatorFactory m_evaluatorFactory;
460 std::string m_defaultAttNameSeparator =
"-";
463 std::size_t m_templateVersion = 0;
466 mutable std::mutex m_mutex;
471 std::map<std::string, smtk::view::ConfigurationPtr>::const_iterator it;
472 it = m_views.find(
name);
478 std::map<std::string, AttributePtr>::const_iterator it;
479 it = m_attributes.find(
name);
485 std::map<smtk::common::UUID, AttributePtr>::const_iterator it;
486 it = m_attributeIdMap.find(attId);
492 std::map<std::string, smtk::attribute::DefinitionPtr>::const_iterator it;
497 inline void Resource::findDefinitionAttributes(
499 std::vector<smtk::attribute::AttributePtr>& result)
const
502 auto it = m_attributeClusters.find(
typeName);
503 if (it != m_attributeClusters.end())
505 result.insert(result.end(), it->second.begin(), it->second.end());
509 inline void Resource::findAttributes(
510 const std::string& type,
511 std::vector<smtk::attribute::AttributePtr>& result)
const
517 this->internalFindAttributes(def, result);
521 inline std::vector<smtk::attribute::AttributePtr> Resource::findAttributes(
522 const std::string& type)
const
524 std::vector<smtk::attribute::AttributePtr> result;
525 this->findAttributes(type, result);