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;
178 bool hasDefinition(
const std::string& type)
const;
181 void findBaseDefinitions(std::vector<smtk::attribute::DefinitionPtr>& result)
const;
183 void derivedDefinitions(
185 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
187 void findAllDerivedDefinitions(
190 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
192 void findDefinitionAttributes(
193 const std::string& type,
194 std::vector<smtk::attribute::AttributePtr>& result)
const;
195 void findDefinitions(
unsigned long mask, std::vector<smtk::attribute::DefinitionPtr>& result)
201 bool rename(
AttributePtr att,
const std::string& newName);
206 std::size_t numberOfAdvanceLevels()
const {
return m_advLevels.
size(); }
207 void addAdvanceLevel(
int level, std::string label,
const double* l_color =
nullptr);
208 const std::map<int, std::string>& advanceLevels()
const {
return m_advLevels; }
210 const double* advanceLevelColor(
int level)
const;
211 void setAdvanceLevelColor(
int level,
const double* l_color);
215 createAttribute(
const std::string& name,
const std::string& type,
const smtk::common::UUID&
id);
217 const std::string& name,
220 std::string createUniqueName(
const std::string& type)
const;
222 void finalizeDefinitions();
230 const std::set<std::string>&
categories()
const {
return m_categories; }
238 void setActiveCategoriesEnabled(
bool mode);
240 void setActiveCategories(
const std::set<std::string>& cats);
251 std::vector<smtk::view::ConfigurationPtr> findTopLevelViews()
const;
252 const std::map<std::string, smtk::view::ConfigurationPtr>& views()
const {
return m_views; }
262 const std::string& styleName =
"")
const;
263 const std::map<std::string, smtk::view::Configuration::Component>& findStyles(
265 const std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>>&
styles()
284 bool hasAssociations()
const;
292 bool hasAttributes()
const {
return !m_attributes.empty(); }
303 unsigned int options = 0);
317 const CopyAssignmentOptions& options,
322 const CopyAssignmentOptions& options = CopyAssignmentOptions());
326 void definitions(std::vector<smtk::attribute::DefinitionPtr>& result,
bool sortList =
false)
329 void attributes(std::vector<smtk::attribute::AttributePtr>& result)
const;
337 return !!m_evaluatorFactory.createEvaluator(att);
340 std::unique_ptr<smtk::attribute::Evaluator> createEvaluator(
343 return m_evaluatorFactory.createEvaluator(att);
352 void setDirectoryInfo(
const DirectoryInfo& dinfo) { m_directoryInfo = dinfo; }
353 const DirectoryInfo& directoryInfo()
const {
return m_directoryInfo; }
356 CustomItemDefinitionFactory& customItemDefinitionFactory()
358 return m_customItemDefinitionFactory;
360 const CustomItemDefinitionFactory& customItemDefinitionFactory()
const
362 return m_customItemDefinitionFactory;
365 AssociationRules& associationRules() {
return m_associationRules; }
366 const AssociationRules& associationRules()
const {
return m_associationRules; }
385 std::unique_lock<std::mutex> m_guard;
398 std::mutex& mutex()
const {
return m_mutex; }
413 bool setTemplateVersion(std::size_t templateVersion)
override;
420 std::shared_ptr<smtk::resource::Resource> clone(
425 const std::shared_ptr<const smtk::resource::Resource>& other,
431 const std::shared_ptr<const smtk::resource::Resource>& source,
437 const std::shared_ptr<const smtk::attribute::Resource>& source,
443 void updateViewComponentIdAttributes(
450 void internalFindAllDerivedDefinitions(
453 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
454 void internalFindAttributes(
456 std::vector<smtk::attribute::AttributePtr>& result)
const;
457 bool copyDefinitionImpl(
461 std::map<std::string, smtk::attribute::DefinitionPtr> m_definitions;
462 std::map<std::string, std::set<smtk::attribute::AttributePtr, Attribute::CompareByName>>
464 std::map<std::string, smtk::attribute::AttributePtr> m_attributes;
465 std::map<smtk::common::UUID, smtk::attribute::AttributePtr> m_attributeIdMap;
469 std::set<smtk::attribute::WeakDefinitionPtr, Definition::WeakDefinitionPtrCompare>>
471 std::set<std::string> m_categories;
472 std::set<std::string> m_activeCategories;
473 bool m_activeCategoriesEnabled =
false;
475 std::map<std::string, smtk::view::ConfigurationPtr> m_views;
476 std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>> m_styles;
480 std::map<int, std::string> m_advLevels;
481 std::map<int, std::vector<double>> m_advLevelColors;
482 DirectoryInfo m_directoryInfo;
483 std::set<smtk::resource::Links::RoleType> m_roles;
489 bool m_isPrivate =
false;
493 std::string m_defaultAttNameSeparator =
"-";
496 std::size_t m_templateVersion = 0;
499 mutable std::mutex m_mutex;
504 std::map<std::string, smtk::view::ConfigurationPtr>::const_iterator it;
505 it = m_views.find(
name);
511 std::map<std::string, AttributePtr>::const_iterator it;
512 it = m_attributes.find(
name);
518 std::map<smtk::common::UUID, AttributePtr>::const_iterator it;
519 it = m_attributeIdMap.find(attId);
525 std::map<std::string, smtk::attribute::DefinitionPtr>::const_iterator it;
532 auto it = m_definitions.find(
typeName);
533 return (it != m_definitions.end());
536 inline void Resource::findDefinitionAttributes(
538 std::vector<smtk::attribute::AttributePtr>& result)
const
541 auto it = m_attributeClusters.find(
typeName);
542 if (it != m_attributeClusters.end())
544 result.insert(result.end(), it->second.begin(), it->second.end());
548 inline void Resource::findAttributes(
549 const std::string& type,
550 std::vector<smtk::attribute::AttributePtr>& result)
const
556 this->internalFindAttributes(def, result);
560 inline std::vector<smtk::attribute::AttributePtr> Resource::findAttributes(
561 const std::string& type)
const
563 std::vector<smtk::attribute::AttributePtr> result;
564 this->findAttributes(type, result);