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
15#include <memory>
16#include <shared_mutex>
17#include <unordered_map>
18
20
21PXR_NAMESPACE_OPEN_SCOPE
22
151{
153 UsdValidationRegistry &operator=(const UsdValidationRegistry &) = delete;
154
155public:
156 USDVALIDATION_API
157 static UsdValidationRegistry &GetInstance()
158 {
160 }
161
177 USDVALIDATION_API
178 void RegisterPluginValidator(const TfToken &validatorName,
179 const UsdValidateLayerTaskFn &layerTaskFn);
180
196 USDVALIDATION_API
197 void RegisterPluginValidator(const TfToken &validatorName,
198 const UsdValidateStageTaskFn &stageTaskFn);
199
215 USDVALIDATION_API
216 void RegisterPluginValidator(const TfToken &validatorName,
217 const UsdValidatePrimTaskFn &primTaskFn);
218
235 USDVALIDATION_API
237 const UsdValidateLayerTaskFn &layerTaskFn);
238
255 USDVALIDATION_API
257 const UsdValidateStageTaskFn &stageTaskFn);
258
275 USDVALIDATION_API
277 const UsdValidatePrimTaskFn &primTaskFn);
278
298 USDVALIDATION_API
300 const TfToken &validatorSuiteName,
301 const std::vector<const UsdValidationValidator *> &containedValidators);
302
322 USDVALIDATION_API
324 const UsdValidationValidatorMetadata &metadata,
325 const std::vector<const UsdValidationValidator *> &containedValidators);
326
329 USDVALIDATION_API
330 bool HasValidator(const TfToken &validatorName) const;
331
334 USDVALIDATION_API
335 bool HasValidatorSuite(const TfToken &suiteName) const;
336
347 USDVALIDATION_API
348 std::vector<const UsdValidationValidator *> GetOrLoadAllValidators();
349
357 USDVALIDATION_API
359 GetOrLoadValidatorByName(const TfToken &validatorName);
360
369 USDVALIDATION_API
370 std::vector<const UsdValidationValidator *>
372
384 USDVALIDATION_API
385 std::vector<const UsdValidationValidatorSuite *>
387
395 USDVALIDATION_API
398
407 USDVALIDATION_API
408 std::vector<const UsdValidationValidatorSuite *>
410
415 USDVALIDATION_API
417 UsdValidationValidatorMetadata *metadata) const;
418
421 USDVALIDATION_API
422 UsdValidationValidatorMetadataVector GetAllValidatorMetadata() const;
423
431 USDVALIDATION_API
432 UsdValidationValidatorMetadataVector
433 GetValidatorMetadataForPlugin(const TfToken &pluginName) const;
434
442 USDVALIDATION_API
443 UsdValidationValidatorMetadataVector
445
453 USDVALIDATION_API
454 UsdValidationValidatorMetadataVector
456
467 USDVALIDATION_API
468 UsdValidationValidatorMetadataVector
470
481 USDVALIDATION_API
482 UsdValidationValidatorMetadataVector
484
495 USDVALIDATION_API
496 UsdValidationValidatorMetadataVector
498
499private:
501
503
504 // Initialize _validatorNameToMetadata, _keywordToValidatorNames and
505 // _schemaTypeToValidatorNames by parsing all plugInfo.json, find all
506 // Validators.
507 void _PopulateMetadataFromPlugInfo();
508
509 // Templated method to register validator, called by appropriate
510 // RegisterValidator methods, providing UsdValidateLayerTaskFn,
511 // UsdValidateStageTaskFn or UsdValidatePrimTaskFn.
512 template <typename ValidateTaskFn>
513 void _RegisterPluginValidator(const TfToken &validatorName,
514 const ValidateTaskFn &taskFn);
515
516 // Overloaded templated _RegisterValidator, where metadata is explicitly
517 // provided.
518 template <typename ValidateTaskFn>
519 void _RegisterValidator(const UsdValidationValidatorMetadata &metadata,
520 const ValidateTaskFn &taskFn,
521 bool addMetadata = true);
522
523 void _RegisterValidatorSuite(
524 const UsdValidationValidatorMetadata &metadata,
525 const std::vector<const UsdValidationValidator *> &containedValidators,
526 bool addMetadata = true);
527
528 // makes sure metadata provided is legal
529 // checkForPrimTask parameter is used to determine if schemaTypes metadata
530 // is provided and if the task being registered for the validator is
531 // UsdValidatePrimTaskFn.
532 // expectSuite parameter is used to determine if the isSuite metadata is
533 // appropriately set (for UsdValidationValidatorSuite) or not (for
534 // UsdValidationValidator).
535 static bool _CheckMetadata(const UsdValidationValidatorMetadata &metadata,
536 bool checkForPrimTask, bool expectSuite = false);
537
538 // Add validator metadata to _validatorNameToMetadata, also updates
539 // _schemaTypeToValidatorNames and _keywordToValidatorNames, for easy access
540 // to what validators are linked to specific schemaTypes or keywords.
541 // _mutex must be acquired before calling this method.
542 bool _AddValidatorMetadata(const UsdValidationValidatorMetadata &metadata);
543
544 using _ValidatorNameToValidatorMap
545 = std::unordered_map<TfToken, std::unique_ptr<UsdValidationValidator>,
547 using _ValidatorSuiteNameToValidatorSuiteMap
548 = std::unordered_map<TfToken,
549 std::unique_ptr<UsdValidationValidatorSuite>,
551 using _ValidatorNameToMetadataMap
552 = std::unordered_map<TfToken, UsdValidationValidatorMetadata,
554 using _TokenToValidatorNamesMap
555 = std::unordered_map<TfToken, TfTokenVector, TfToken::HashFunctor>;
556
557 // Helper to query
558 UsdValidationValidatorMetadataVector _GetValidatorMetadataForToken(
559 const _TokenToValidatorNamesMap &tokenToValidatorNames,
560 const TfTokenVector &tokens) const;
561
562 // Helper to populate _keywordToValidatorNames and
563 // _schemaTypeToValidatorNames
564 // _mutex must be acquired before calling this method.
565 static void
566 _UpdateValidatorNamesMappings(_TokenToValidatorNamesMap &tokenMap,
567 const TfToken &validatorName,
568 const TfTokenVector &tokens);
569
570 // Main datastructure which holds validatorName to
571 // std::unique_ptr<UsdValidationValidator>
572 _ValidatorNameToValidatorMap _validators;
573 // Main datastructure which holds suiteName to
574 // std::unique_ptr<UsdValidationValidatorSuite>
575 _ValidatorSuiteNameToValidatorSuiteMap _validatorSuites;
576
577 // ValidatorName to ValidatorMetadata map
578 _ValidatorNameToMetadataMap _validatorNameToMetadata;
579
580 // Following 3 are helper data structures to easy lookup for Validators,
581 // when queried for keywords, schemaType or pluginName.
582
583 // This map stores the mapping from keyword to validator names. It may get
584 // updated as validators can be registered dynamically outside of the plugin
585 // infrastructure.
586 _TokenToValidatorNamesMap _keywordToValidatorNames;
587
588 // This map stores the mapping from schemaTypes to validator names. It may
589 // get updated as validators can be registered dynamically outside of the
590 // plugin infrastructure.
591 _TokenToValidatorNamesMap _schemaTypeToValidatorNames;
592
593 // This map stores the mapping from plugin names to validator names.
594 // It is populated during the initialization of UsdValidationRegistry
595 // and remains constant thereafter.
596 _TokenToValidatorNamesMap _pluginNameToValidatorNames;
597
598 // Mutex to protect access to all data members.
599 mutable std::shared_mutex _mutex;
600};
601
602// Specialize and delete the DeleteInstance function to prevent destruction.
603// This will prevent the singleton instance for UsdValidationRegistry from
604// being destroyed and hence making it immortal.
606
607USDVALIDATION_API_TEMPLATE_CLASS(TfSingleton<UsdValidationRegistry>);
608
609PXR_NAMESPACE_CLOSE_SCOPE
610
611#endif // PXR_USD_VALIDATION_USD_VALIDATION_REGISTRY_H
Manage a single instance of an object (see.
Definition: singleton.h:105
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:120
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:151
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 RegisterValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidateStageTaskFn &stageTaskFn)
Register UsdValidationValidator using metadata and stageTaskFn with the UsdValidationRegistry.
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 void RegisterValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidatePrimTaskFn &primTaskFn)
Register UsdValidationValidator using metadata and primTaskFn with the UsdValidationRegistry.
USDVALIDATION_API void RegisterPluginValidator(const TfToken &validatorName, const UsdValidateLayerTaskFn &layerTaskFn)
Register UsdValidationValidator defined in a plugin using validatorName and layerTaskFn with the UsdV...
USDVALIDATION_API std::vector< const UsdValidationValidator * > GetOrLoadAllValidators()
Returns a vector of const pointer to UsdValidationValidator corresponding to all validators registere...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForSchemaTypes(const TfTokenVector &schemaTypes) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which has at least on...
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 void RegisterPluginValidator(const TfToken &validatorName, const UsdValidatePrimTaskFn &primTaskFn)
Register UsdValidationValidator defined in a plugin using validatorName and primTaskFn with the UsdVa...
USDVALIDATION_API void RegisterPluginValidator(const TfToken &validatorName, const UsdValidateStageTaskFn &stageTaskFn)
Register UsdValidationValidator defined in a plugin using validatorName and stageTaskFn with the UsdV...
USDVALIDATION_API UsdValidationValidatorMetadataVector GetValidatorMetadataForPlugins(const TfTokenVector &pluginNames) const
Returns vector of UsdValidationValidatorMetadata associated with the Validators which belong to the p...
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 UsdValidateLayerTaskFn &layerTaskFn)
Register UsdValidationValidator using metadata and layerTaskFn 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:130
UsdValidationValidatorSuite acts like a suite for a collection of tests, which clients can use to bun...
Definition: validator.h:262
std::function< UsdValidationErrorVector(const UsdPrim &, const UsdValidationTimeRange)> UsdValidatePrimTaskFn
UsdValidatePrimTaskFn: Validation logic operating on a given UsdPrim.
Definition: validator.h:110
std::function< UsdValidationErrorVector(const SdfLayerHandle &)> UsdValidateLayerTaskFn
UsdValidateLayerTaskFn: Validation logic operating on a given SdfLayerHandle.
Definition: validator.h:104
std::function< UsdValidationErrorVector(const UsdStagePtr &, const UsdValidationTimeRange)> UsdValidateStageTaskFn
UsdValidateStageTaskFn: Validation logic operating on a given UsdStage.
Definition: validator.h:107
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:55