Loading...
Searching...
No Matches
registry.h
Go to the documentation of this file.
1//
2// Copyright 2024 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_USD_VALIDATION_USD_VALIDATION_REGISTRY_H
8#define PXR_USD_VALIDATION_USD_VALIDATION_REGISTRY_H
9
10#include "pxr/pxr.h"
12#include "pxr/usdValidation/usdValidation/api.h"
14#include "pxr/usdValidation/usdValidation/fixer.h"
15
16#include <memory>
17#include <shared_mutex>
18#include <unordered_map>
19
21
22PXR_NAMESPACE_OPEN_SCOPE
23
169{
171 UsdValidationRegistry &operator=(const UsdValidationRegistry &) = delete;
172
173public:
174 USDVALIDATION_API
175 static UsdValidationRegistry &GetInstance()
176 {
178 }
179
201 USDVALIDATION_API
202 void RegisterPluginValidator(const TfToken &validatorName,
203 const UsdValidateLayerTaskFn &layerTaskFn,
204 std::vector<UsdValidationFixer> fixers = {});
205
227 USDVALIDATION_API
228 void RegisterPluginValidator(const TfToken &validatorName,
229 const UsdValidateStageTaskFn &stageTaskFn,
230 std::vector<UsdValidationFixer> fixers = {});
231
253 USDVALIDATION_API
254 void RegisterPluginValidator(const TfToken &validatorName,
255 const UsdValidatePrimTaskFn &primTaskFn,
256 std::vector<UsdValidationFixer> fixers = {});
257
290 USDVALIDATION_API
292 const UsdValidateLayerTaskFn &layerTaskFn,
293 std::vector<UsdValidationFixer> fixers = {});
294
319 USDVALIDATION_API
321 const UsdValidateStageTaskFn &stageTaskFn,
322 std::vector<UsdValidationFixer> fixers = {});
323
348 USDVALIDATION_API
350 const UsdValidatePrimTaskFn &primTaskFn,
351 std::vector<UsdValidationFixer> fixers = {});
352
376 USDVALIDATION_API
378 const TfToken &validatorSuiteName,
379 const std::vector<const UsdValidationValidator *> &containedValidators);
380
416 USDVALIDATION_API
418 const UsdValidationValidatorMetadata &metadata,
419 const std::vector<const UsdValidationValidator *> &containedValidators);
420
423 USDVALIDATION_API
424 bool HasValidator(const TfToken &validatorName) const;
425
428 USDVALIDATION_API
429 bool HasValidatorSuite(const TfToken &suiteName) const;
430
441 USDVALIDATION_API
442 std::vector<const UsdValidationValidator *> GetOrLoadAllValidators();
443
451 USDVALIDATION_API
453 GetOrLoadValidatorByName(const TfToken &validatorName);
454
463 USDVALIDATION_API
464 std::vector<const UsdValidationValidator *>
466
478 USDVALIDATION_API
479 std::vector<const UsdValidationValidatorSuite *>
481
489 USDVALIDATION_API
492
501 USDVALIDATION_API
502 std::vector<const UsdValidationValidatorSuite *>
504
509 USDVALIDATION_API
511 UsdValidationValidatorMetadata *metadata) const;
512
515 USDVALIDATION_API
516 UsdValidationValidatorMetadataVector GetAllValidatorMetadata() const;
517
525 USDVALIDATION_API
526 UsdValidationValidatorMetadataVector
527 GetValidatorMetadataForPlugin(const TfToken &pluginName) const;
528
536 USDVALIDATION_API
537 UsdValidationValidatorMetadataVector
539
547 USDVALIDATION_API
548 UsdValidationValidatorMetadataVector
550
561 USDVALIDATION_API
562 UsdValidationValidatorMetadataVector
564
575 USDVALIDATION_API
576 UsdValidationValidatorMetadataVector
578
589 USDVALIDATION_API
590 UsdValidationValidatorMetadataVector
592
593private:
595
597
598 // Initialize _validatorNameToMetadata, _keywordToValidatorNames and
599 // _schemaTypeToValidatorNames by parsing all plugInfo.json, find all
600 // Validators.
601 void _PopulateMetadataFromPlugInfo();
602
603 // Templated method to register validator, called by appropriate
604 // RegisterValidator methods, providing UsdValidateLayerTaskFn,
605 // UsdValidateStageTaskFn or UsdValidatePrimTaskFn.
606 template <typename ValidateTaskFn>
607 void _RegisterPluginValidator(const TfToken &validatorName,
608 const ValidateTaskFn &taskFn,
609 std::vector<UsdValidationFixer> fixers);
610
611 // Overloaded templated _RegisterValidator, where metadata is explicitly
612 // provided.
613 template <typename ValidateTaskFn>
614 void _RegisterValidator(const UsdValidationValidatorMetadata &metadata,
615 const ValidateTaskFn &taskFn,
616 std::vector<UsdValidationFixer> fixers,
617 bool addMetadata = true);
618
619 void _RegisterValidatorSuite(
620 const UsdValidationValidatorMetadata &metadata,
621 const std::vector<const UsdValidationValidator *> &containedValidators,
622 bool addMetadata = true);
623
624 // makes sure metadata provided is legal
625 // checkForPrimTask parameter is used to determine if schemaTypes metadata
626 // is provided and if the task being registered for the validator is
627 // UsdValidatePrimTaskFn.
628 // expectSuite parameter is used to determine if the isSuite metadata is
629 // appropriately set (for UsdValidationValidatorSuite) or not (for
630 // UsdValidationValidator).
631 static bool _CheckMetadata(const UsdValidationValidatorMetadata &metadata,
632 bool checkForPrimTask, bool expectSuite = false);
633
634 // Add validator metadata to _validatorNameToMetadata, also updates
635 // _schemaTypeToValidatorNames and _keywordToValidatorNames, for easy access
636 // to what validators are linked to specific schemaTypes or keywords.
637 // _mutex must be acquired before calling this method.
638 bool _AddValidatorMetadata(const UsdValidationValidatorMetadata &metadata);
639
640 using _ValidatorNameToValidatorMap
641 = std::unordered_map<TfToken, std::unique_ptr<UsdValidationValidator>,
643 using _ValidatorSuiteNameToValidatorSuiteMap
644 = std::unordered_map<TfToken,
645 std::unique_ptr<UsdValidationValidatorSuite>,
647 using _ValidatorNameToMetadataMap
648 = std::unordered_map<TfToken, UsdValidationValidatorMetadata,
650 using _TokenToValidatorNamesMap
651 = std::unordered_map<TfToken, TfTokenVector, TfToken::HashFunctor>;
652
653 // Helper to query
654 UsdValidationValidatorMetadataVector _GetValidatorMetadataForToken(
655 const _TokenToValidatorNamesMap &tokenToValidatorNames,
656 const TfTokenVector &tokens) const;
657
658 // Helper to populate _keywordToValidatorNames and
659 // _schemaTypeToValidatorNames
660 // _mutex must be acquired before calling this method.
661 static void
662 _UpdateValidatorNamesMappings(_TokenToValidatorNamesMap &tokenMap,
663 const TfToken &validatorName,
664 const TfTokenVector &tokens);
665
666 // Main datastructure which holds validatorName to
667 // std::unique_ptr<UsdValidationValidator>
668 _ValidatorNameToValidatorMap _validators;
669 // Main datastructure which holds suiteName to
670 // std::unique_ptr<UsdValidationValidatorSuite>
671 _ValidatorSuiteNameToValidatorSuiteMap _validatorSuites;
672
673 // ValidatorName to ValidatorMetadata map
674 _ValidatorNameToMetadataMap _validatorNameToMetadata;
675
676 // Following 3 are helper data structures to easy lookup for Validators,
677 // when queried for keywords, schemaType or pluginName.
678
679 // This map stores the mapping from keyword to validator names. It may get
680 // updated as validators can be registered dynamically outside of the plugin
681 // infrastructure.
682 _TokenToValidatorNamesMap _keywordToValidatorNames;
683
684 // This map stores the mapping from schemaTypes to validator names. It may
685 // get updated as validators can be registered dynamically outside of the
686 // plugin infrastructure.
687 _TokenToValidatorNamesMap _schemaTypeToValidatorNames;
688
689 // This map stores the mapping from plugin names to validator names.
690 // It is populated during the initialization of UsdValidationRegistry
691 // and remains constant thereafter.
692 _TokenToValidatorNamesMap _pluginNameToValidatorNames;
693
694 // Mutex to protect access to all data members.
695 mutable std::shared_mutex _mutex;
696};
697
698// Specialize and delete the DeleteInstance function to prevent destruction.
699// This will prevent the singleton instance for UsdValidationRegistry from
700// being destroyed and hence making it immortal.
702
703USDVALIDATION_API_TEMPLATE_CLASS(TfSingleton<UsdValidationRegistry>);
704
705PXR_NAMESPACE_CLOSE_SCOPE
706
707#endif // PXR_USD_VALIDATION_USD_VALIDATION_REGISTRY_H
Manage a single instance of an object (see.
Definition singleton.h:107
static void DeleteInstance()
Destroy the sole instance object of type T, if it exists.
static T & GetInstance()
Return a reference to an object of type T, creating it if necessary.
Definition singleton.h:122
Token for efficient comparison, assignment, and hashing of known strings.
Definition token.h:71
UsdValidationRegistry manages and provides access to UsdValidationValidator / UsdValidationValidatorS...
Definition registry.h:169
USDVALIDATION_API std::vector< const UsdValidationValidatorSuite * > GetOrLoadValidatorSuitesByName(const TfTokenVector &suiteNames)
Returns a vector of const pointer to UsdValidationValidatorSuite corresponding to suiteNames found in...
USDVALIDATION_API void RegisterPluginValidatorSuite(const TfToken &validatorSuiteName, const std::vector< const UsdValidationValidator * > &containedValidators)
Register UsdValidationValidatorSuite defined in a plugin using validatorSuiteName and containedValida...
USDVALIDATION_API bool GetValidatorMetadata(const TfToken &name, UsdValidationValidatorMetadata *metadata) const
Returns true if metadata is found in the _validatorNameToMetadata for a validator/suite name,...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForSchemaType(const TfToken &schemaType) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which has the schemaT...
USDVALIDATION_API bool HasValidatorSuite(const TfToken &suiteName) const
Return true if a UsdValidationValidatorSuite is registered with the name validatorSuiteName; false ot...
USDVALIDATION_API std::vector< const UsdValidationValidator * > GetOrLoadValidatorsByName(const TfTokenVector &validatorNames)
Returns a vector of const pointer to UsdValidationValidator corresponding to validatorNames found in ...
USDVALIDATION_API const UsdValidationValidatorSuite * GetOrLoadValidatorSuiteByName(const TfToken &suiteName)
Returns a const pointer to UsdValidationValidatorSuite if suiteName is found in the registry.
USDVALIDATION_API void RegisterValidatorSuite(const UsdValidationValidatorMetadata &metadata, const std::vector< const UsdValidationValidator * > &containedValidators)
Register UsdValidationValidatorSuite using metadata and containedValidators with the UsdValidationReg...
USDVALIDATION_API bool HasValidator(const TfToken &validatorName) const
Return true if a UsdValidationValidator is registered with the name validatorName; false otherwise.
USDVALIDATION_API UsdValidationValidatorMetadataVector GetAllValidatorMetadata() const
Return vector of all UsdValidationValidatorMetadata known to the registry.
USDVALIDATION_API std::vector< const UsdValidationValidator * > GetOrLoadAllValidators()
Returns a vector of const pointer to UsdValidationValidator corresponding to all validators registere...
USDVALIDATION_API void RegisterPluginValidator(const TfToken &validatorName, const UsdValidateStageTaskFn &stageTaskFn, std::vector< UsdValidationFixer > fixers={})
Register UsdValidationValidator defined in a plugin using validatorName and stageTaskFn with the UsdV...
USDVALIDATION_API void RegisterPluginValidator(const TfToken &validatorName, const UsdValidateLayerTaskFn &layerTaskFn, std::vector< UsdValidationFixer > fixers={})
Register UsdValidationValidator defined in a plugin using validatorName and layerTaskFn with the UsdV...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForSchemaTypes(const TfTokenVector &schemaTypes) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which has at least on...
USDVALIDATION_API void RegisterValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidateLayerTaskFn &layerTaskFn, std::vector< UsdValidationFixer > fixers={})
Register UsdValidationValidator using metadata and layerTaskFn with the UsdValidationRegistry.
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForPlugin(const TfToken &pluginName) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which belong to the p...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForKeyword(const TfToken &keyword) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which has the keyword...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForPlugins(const TfTokenVector &pluginNames) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which belong to the p...
USDVALIDATION_API void RegisterPluginValidator(const TfToken &validatorName, const UsdValidatePrimTaskFn &primTaskFn, std::vector< UsdValidationFixer > fixers={})
Register UsdValidationValidator defined in a plugin using validatorName and primTaskFn with the UsdVa...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForKeywords(const TfTokenVector &keywords) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which has at least on...
USDVALIDATION_API const UsdValidationValidator * GetOrLoadValidatorByName(const TfToken &validatorName)
Returns a const pointer to UsdValidationValidator if validatorName is found in the registry.
USDVALIDATION_API void RegisterValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidatePrimTaskFn &primTaskFn, std::vector< UsdValidationFixer > fixers={})
Register UsdValidationValidator using metadata and primTaskFn with the UsdValidationRegistry.
USDVALIDATION_API void RegisterValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidateStageTaskFn &stageTaskFn, std::vector< UsdValidationFixer > fixers={})
Register UsdValidationValidator using metadata and stageTaskFn with the UsdValidationRegistry.
USDVALIDATION_API std::vector< const UsdValidationValidatorSuite * > GetOrLoadAllValidatorSuites()
Returns a vector of const pointer to UsdValidationValidatorSuite corresponding to all validator suite...
UsdValidationValidator is a class describing a single test.
Definition validator.h:137
UsdValidationValidatorSuite acts like a suite for a collection of tests, which clients can use to bun...
Definition validator.h:317
std::function< UsdValidationErrorVector( const UsdPrim &, const UsdValidationTimeRange)> UsdValidatePrimTaskFn
UsdValidatePrimTaskFn: Validation logic operating on a given UsdPrim.
Definition validator.h:109
std::function< UsdValidationErrorVector( const SdfLayerHandle &)> UsdValidateLayerTaskFn
UsdValidateLayerTaskFn: Validation logic operating on a given SdfLayerHandle.
Definition validator.h:103
std::function< UsdValidationErrorVector( const UsdStagePtr &, const UsdValidationTimeRange)> UsdValidateStageTaskFn
UsdValidateStageTaskFn: Validation logic operating on a given UsdStage.
Definition validator.h:106
Manage a single instance of an object.
Functor to use for hash maps from tokens to other things.
Definition token.h:149
std::vector< TfToken > TfTokenVector
Convenience types.
Definition token.h:440
A structure which describes metadata for a UsdValidationValidator.
Definition validator.h:56