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/attribute/filter/GrammarInfo.h"
39 #include "smtk/string/Token.h"
41 #include "smtk/view/Configuration.h"
91 static constexpr smtk::resource::Links::RoleType AssociationRole = -1;
92 static constexpr smtk::resource::Links::RoleType associationRole()
99 static constexpr smtk::resource::Links::RoleType ReferenceRole = -2;
100 static constexpr smtk::resource::Links::RoleType referenceRole()
107 bool setUnitsSystem(
const shared_ptr<units::System>& unitsSystem)
override;
111 const std::string& baseTypeName =
"",
115 const std::string& name,
127 void setIsPrivate(
bool isPrivateValue) { m_isPrivate = isPrivateValue; }
128 bool isPrivate()
const {
return m_isPrivate; };
132 const std::string& defaultNameSeparator()
const;
135 void resetDefaultNameSeparator();
138 bool setDefaultNameSeparator(
const std::string& separator);
143 const std::string& name,
144 const std::string& type,
147 const std::string& name,
156 const smtk::resource::Links::RoleType& role)
const;
158 void addUniqueRoles(
const std::set<smtk::resource::Links::RoleType>& roles);
159 void addUniqueRole(
const smtk::resource::Links::RoleType& role);
160 const std::set<smtk::resource::Links::RoleType>& uniqueRoles()
const;
161 bool isRoleUnique(
const smtk::resource::Links::RoleType& role)
const;
180 const std::string&)
const override;
181 static filter::GrammarInfo extractGrammarInfo(
const std::string& s);
184 static std::string createAttributeQuery(
const std::string& defType);
186 void visit(smtk::resource::Component::Visitor&)
const override;
188 void findAttributes(
const std::string& type, std::vector<smtk::attribute::AttributePtr>& result)
190 std::vector<smtk::attribute::AttributePtr> findAttributes(
const std::string& type)
const;
193 std::vector<smtk::attribute::AttributePtr>& result)
const;
199 bool hasDefinition(
const std::string& type)
const;
202 void findBaseDefinitions(std::vector<smtk::attribute::DefinitionPtr>& result)
const;
204 void derivedDefinitions(
206 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
208 void findAllDerivedDefinitions(
211 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
213 void findDefinitionAttributes(
214 const std::string& type,
215 std::vector<smtk::attribute::AttributePtr>& result)
const;
216 void findDefinitions(
unsigned long mask, std::vector<smtk::attribute::DefinitionPtr>& result)
222 bool rename(
AttributePtr att,
const std::string& newName);
237 std::size_t numberOfAdvanceLevels()
const {
return m_advLevels.
size(); }
238 void addAdvanceLevel(
int level, std::string label,
const double* l_color =
nullptr);
239 const std::map<int, std::string>& advanceLevels()
const {
return m_advLevels; }
241 const double* advanceLevelColor(
int level)
const;
242 void setAdvanceLevelColor(
int level,
const double* l_color);
244 std::string createUniqueName(
const std::string& type)
const;
246 void finalizeDefinitions();
254 const std::set<std::string>&
categories()
const {
return m_categories; }
262 void setActiveCategoriesEnabled(
bool mode);
264 void setActiveCategories(
const std::set<std::string>& cats);
275 std::vector<smtk::view::ConfigurationPtr> findTopLevelViews()
const;
276 const std::map<std::string, smtk::view::ConfigurationPtr>& views()
const {
return m_views; }
286 const std::string& styleName =
"")
const;
287 const std::map<std::string, smtk::view::Configuration::Component>& findStyles(
289 const std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>>&
styles()
308 bool hasAssociations()
const;
316 bool hasAttributes()
const {
return !m_attributes.empty(); }
327 unsigned int options = 0);
341 const CopyAssignmentOptions& options,
346 const CopyAssignmentOptions& options = CopyAssignmentOptions());
350 void definitions(std::vector<smtk::attribute::DefinitionPtr>& result,
bool sortList =
false)
353 void attributes(std::vector<smtk::attribute::AttributePtr>& result)
const;
361 return !!m_evaluatorFactory.createEvaluator(att);
364 std::unique_ptr<smtk::attribute::Evaluator> createEvaluator(
367 return m_evaluatorFactory.createEvaluator(att);
376 void setDirectoryInfo(
const DirectoryInfo& dinfo) { m_directoryInfo = dinfo; }
377 const DirectoryInfo& directoryInfo()
const {
return m_directoryInfo; }
380 CustomItemDefinitionFactory& customItemDefinitionFactory()
382 return m_customItemDefinitionFactory;
384 const CustomItemDefinitionFactory& customItemDefinitionFactory()
const
386 return m_customItemDefinitionFactory;
389 AssociationRules& associationRules() {
return m_associationRules; }
390 const AssociationRules& associationRules()
const {
return m_associationRules; }
409 std::unique_lock<std::mutex> m_guard;
422 std::mutex& mutex()
const {
return m_mutex; }
437 bool setTemplateVersion(std::size_t templateVersion)
override;
445 std::shared_ptr<smtk::resource::Resource> clone(
460 const std::shared_ptr<const smtk::resource::Resource>& other,
474 const std::shared_ptr<const smtk::resource::Resource>& source,
480 const std::shared_ptr<const smtk::attribute::Resource>& source,
486 void updateViewComponentIdAttributes(
493 void internalFindAllDerivedDefinitions(
496 std::vector<smtk::attribute::DefinitionPtr>& result)
const;
497 void internalFindAttributes(
499 std::vector<smtk::attribute::AttributePtr>& result)
const;
500 bool copyDefinitionImpl(
504 std::map<std::string, smtk::attribute::DefinitionPtr> m_definitions;
505 std::map<std::string, std::set<smtk::attribute::AttributePtr, Attribute::CompareByName>>
507 std::map<std::string, smtk::attribute::AttributePtr> m_attributes;
508 std::map<smtk::common::UUID, smtk::attribute::AttributePtr> m_attributeIdMap;
509 std::map<smtk::common::UUID, smtk::attribute::DefinitionPtr> m_definitionIdMap;
513 std::set<smtk::attribute::WeakDefinitionPtr, Definition::WeakDefinitionPtrCompare>>
515 std::set<std::string> m_categories;
516 std::set<std::string> m_activeCategories;
517 bool m_activeCategoriesEnabled =
false;
519 std::map<std::string, smtk::view::ConfigurationPtr> m_views;
520 std::map<std::string, std::map<std::string, smtk::view::Configuration::Component>> m_styles;
524 std::map<int, std::string> m_advLevels;
525 std::map<int, std::vector<double>> m_advLevelColors;
526 DirectoryInfo m_directoryInfo;
527 std::set<smtk::resource::Links::RoleType> m_roles;
533 bool m_isPrivate =
false;
537 std::string m_defaultAttNameSeparator =
"-";
540 std::size_t m_templateVersion = 0;
543 mutable std::mutex m_mutex;
548 std::map<std::string, smtk::view::ConfigurationPtr>::const_iterator it;
549 it = m_views.find(
name);
555 std::map<std::string, AttributePtr>::const_iterator it;
556 it = m_attributes.find(
name);
562 std::map<smtk::common::UUID, AttributePtr>::const_iterator it;
563 it = m_attributeIdMap.find(attId);
569 std::map<std::string, smtk::attribute::DefinitionPtr>::const_iterator it;
577 std::map<smtk::common::UUID, DefinitionPtr>::const_iterator it;
578 it = m_definitionIdMap.find(defId);
584 auto it = m_definitions.find(
typeName);
585 return (it != m_definitions.end());
588 inline void Resource::findDefinitionAttributes(
590 std::vector<smtk::attribute::AttributePtr>& result)
const
593 auto it = m_attributeClusters.find(
typeName);
594 if (it != m_attributeClusters.end())
596 result.insert(result.end(), it->second.begin(), it->second.end());
600 inline void Resource::findAttributes(
601 const std::string& type,
602 std::vector<smtk::attribute::AttributePtr>& result)
const
608 this->internalFindAttributes(def, result);
612 inline std::vector<smtk::attribute::AttributePtr> Resource::findAttributes(
613 const std::string& type)
const
615 std::vector<smtk::attribute::AttributePtr> result;
616 this->findAttributes(type, result);