11 #ifndef smtk_attribute_Resource_h
12 #define smtk_attribute_Resource_h
14 #include "smtk/common/Factory.h"
15 #include "smtk/common/UUID.h"
17 #include "smtk/geometry/Resource.h"
19 #include "smtk/resource/Component.h"
20 #include "smtk/resource/DerivedFrom.h"
21 #include "smtk/resource/Links.h"
23 #include "smtk/CoreExports.h"
25 #include "smtk/attribute/Analyses.h"
26 #include "smtk/attribute/AssociationRules.h"
27 #include "smtk/attribute/Attribute.h"
28 #include "smtk/attribute/CopyAssignmentOptions.h"
29 #include "smtk/attribute/Definition.h"
30 #include "smtk/attribute/DirectoryInfo.h"
31 #include "smtk/attribute/Evaluator.h"
32 #include "smtk/attribute/EvaluatorFactory.h"
33 #include "smtk/attribute/Item.h"
34 #include "smtk/attribute/ItemDefinition.h"
35 #include "smtk/attribute/SymbolDependencyStorage.h"
37 #include "smtk/string/Token.h"
39 #include "smtk/view/Configuration.h"
89 static constexpr smtk::resource::Links::RoleType AssociationRole = -1;
93 static constexpr smtk::resource::Links::RoleType ReferenceRole = -2;
97 bool setUnitsSystem(
const shared_ptr<units::System>& unitsSystem)
override;
101 const std::string& baseTypeName =
"");
103 const std::string& name,
113 void setIsPrivate(
bool isPrivateValue) { m_isPrivate = isPrivateValue; }
114 bool isPrivate()
const {
return m_isPrivate; };
118 const std::string& defaultNameSeparator()
const;
121 void resetDefaultNameSeparator();
124 bool setDefaultNameSeparator(
const std::string& separator);
130 const std::string& name,
137 const smtk::resource::Links::RoleType& role)
const;
139 void addUniqueRoles(
const std::set<smtk::resource::Links::RoleType>& roles);
140 void addUniqueRole(
const smtk::resource::Links::RoleType& role);
141 const std::set<smtk::resource::Links::RoleType>& uniqueRoles()
const;
142 bool isRoleUnique(
const smtk::resource::Links::RoleType& role)
const;
161 const std::string&)
const override;
164 static std::string createAttributeQuery(
const std::string& defType);
166 void visit(smtk::resource::Component::Visitor&)
const override;
168 void findAttributes(
const std::string& type, std::vector<smtk::attribute::AttributePtr>& result)
170 std::vector<smtk::attribute::AttributePtr> findAttributes(
const std::string& type)
const;
173 std::vector<smtk::attribute::AttributePtr>& result)
const;
177 void findBaseDefinitions(std::vector<smtk::attribute::DefinitionPtr>& result)
const;
179 void derivedDefinitions(
181 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
183 void findAllDerivedDefinitions(
186 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
188 void findDefinitionAttributes(
189 const std::string& type,
190 std::vector<smtk::attribute::AttributePtr>& result)
const;
191 void findDefinitions(
unsigned long mask, std::vector<smtk::attribute::DefinitionPtr>& result)
197 bool rename(
AttributePtr att,
const std::string& newName);
202 std::size_t numberOfAdvanceLevels()
const {
return m_advLevels.
size(); }
203 void addAdvanceLevel(
int level, std::string label,
const double* l_color =
nullptr);
204 const std::map<int, std::string>& advanceLevels()
const {
return m_advLevels; }
206 const double* advanceLevelColor(
int level)
const;
207 void setAdvanceLevelColor(
int level,
const double* l_color);
211 createAttribute(
const std::string& name,
const std::string& type,
const smtk::common::UUID&
id);
213 const std::string& name,
216 std::string createUniqueName(
const std::string& type)
const;
218 void finalizeDefinitions();
226 const std::set<std::string>&
categories()
const {
return m_categories; }
234 void setActiveCategoriesEnabled(
bool mode);
236 void setActiveCategories(
const std::set<std::string>& cats);
247 std::vector<smtk::view::ConfigurationPtr> findTopLevelViews()
const;
248 const std::map<std::string, smtk::view::ConfigurationPtr>& views()
const {
return m_views; }
258 const std::string& styleName =
"")
const;
259 const std::map<std::string, smtk::view::Configuration::Component>& findStyles(
261 const std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>>&
styles()
280 bool hasAssociations()
const;
288 bool hasAttributes()
const {
return !m_attributes.empty(); }
299 unsigned int options = 0);
313 const CopyAssignmentOptions& options,
318 const CopyAssignmentOptions& options = CopyAssignmentOptions());
322 void definitions(std::vector<smtk::attribute::DefinitionPtr>& result,
bool sortList =
false)
325 void attributes(std::vector<smtk::attribute::AttributePtr>& result)
const;
333 return !!m_evaluatorFactory.createEvaluator(att);
336 std::unique_ptr<smtk::attribute::Evaluator> createEvaluator(
339 return m_evaluatorFactory.createEvaluator(att);
348 void setDirectoryInfo(
const DirectoryInfo& dinfo) { m_directoryInfo = dinfo; }
349 const DirectoryInfo& directoryInfo()
const {
return m_directoryInfo; }
352 CustomItemDefinitionFactory& customItemDefinitionFactory()
354 return m_customItemDefinitionFactory;
356 const CustomItemDefinitionFactory& customItemDefinitionFactory()
const
358 return m_customItemDefinitionFactory;
361 AssociationRules& associationRules() {
return m_associationRules; }
362 const AssociationRules& associationRules()
const {
return m_associationRules; }
381 std::unique_lock<std::mutex> m_guard;
394 std::mutex& mutex()
const {
return m_mutex; }
409 virtual bool setTemplateVersion(std::size_t templateVersion);
410 std::size_t templateVersion()
const {
return m_templateVersion; }
415 void internalFindAllDerivedDefinitions(
418 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
419 void internalFindAttributes(
421 std::vector<smtk::attribute::AttributePtr>& result)
const;
422 bool copyDefinitionImpl(
426 std::map<std::string, smtk::attribute::DefinitionPtr> m_definitions;
427 std::map<std::string, std::set<smtk::attribute::AttributePtr, Attribute::CompareByName>>
429 std::map<std::string, smtk::attribute::AttributePtr> m_attributes;
430 std::map<smtk::common::UUID, smtk::attribute::AttributePtr> m_attributeIdMap;
434 std::set<smtk::attribute::WeakDefinitionPtr, Definition::WeakDefinitionPtrCompare>>
436 std::set<std::string> m_categories;
437 std::set<std::string> m_activeCategories;
438 bool m_activeCategoriesEnabled =
false;
440 std::map<std::string, smtk::view::ConfigurationPtr> m_views;
441 std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>> m_styles;
445 std::map<int, std::string> m_advLevels;
446 std::map<int, std::vector<double>> m_advLevelColors;
447 DirectoryInfo m_directoryInfo;
448 std::set<smtk::resource::Links::RoleType> m_roles;
450 CustomItemDefinitionFactory m_customItemDefinitionFactory;
452 AssociationRules m_associationRules;
454 bool m_isPrivate =
false;
456 EvaluatorFactory m_evaluatorFactory;
458 std::string m_defaultAttNameSeparator =
"-";
461 std::size_t m_templateVersion = 0;
464 mutable std::mutex m_mutex;
469 std::map<std::string, smtk::view::ConfigurationPtr>::const_iterator it;
470 it = m_views.find(
name);
476 std::map<std::string, AttributePtr>::const_iterator it;
477 it = m_attributes.find(
name);
483 std::map<smtk::common::UUID, AttributePtr>::const_iterator it;
484 it = m_attributeIdMap.find(attId);
490 std::map<std::string, smtk::attribute::DefinitionPtr>::const_iterator it;
495 inline void Resource::findDefinitionAttributes(
497 std::vector<smtk::attribute::AttributePtr>& result)
const
500 auto it = m_attributeClusters.find(
typeName);
501 if (it != m_attributeClusters.end())
503 result.insert(result.end(), it->second.begin(), it->second.end());
507 inline void Resource::findAttributes(
508 const std::string& type,
509 std::vector<smtk::attribute::AttributePtr>& result)
const
515 this->internalFindAttributes(def, result);
519 inline std::vector<smtk::attribute::AttributePtr> Resource::findAttributes(
520 const std::string& type)
const
522 std::vector<smtk::attribute::AttributePtr> result;
523 this->findAttributes(type, result);