validator.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_VALIDATOR_H
8 #define PXR_USD_VALIDATION_USD_VALIDATION_VALIDATOR_H
9 
11 
12 #include "pxr/pxr.h"
13 #include "pxr/base/gf/interval.h"
14 #include "pxr/base/tf/token.h"
15 #include "pxr/usd/usd/stage.h"
16 #include "pxr/usd/usd/timeCode.h"
17 #include "pxr/usdValidation/usdValidation/api.h"
19 #include "pxr/usdValidation/usdValidation/fixer.h"
20 
21 #include <functional>
22 #include <string>
23 #include <variant>
24 #include <vector>
25 
26 PXR_NAMESPACE_OPEN_SCOPE
27 
28 class UsdValidationError;
29 using UsdValidationErrorVector = std::vector<UsdValidationError>;
30 class UsdPrim;
31 
56 {
65 
69  PlugPluginPtr pluginPtr;
70 
73 
76  std::string doc;
77 
81 
85  bool isTimeDependent = false;
86 
88  bool isSuite = false;
89 }; // UsdValidationValidatorMetadata
90 
91 using UsdValidationValidatorMetadataVector
92  = std::vector<UsdValidationValidatorMetadata>;
93 
102 
104 using UsdValidateLayerTaskFn = std::function<UsdValidationErrorVector(
105  const SdfLayerHandle &)>;
107 using UsdValidateStageTaskFn = std::function<UsdValidationErrorVector(
108  const UsdStagePtr &, const UsdValidationTimeRange)>;
110 using UsdValidatePrimTaskFn = std::function<UsdValidationErrorVector(
111  const UsdPrim &, const UsdValidationTimeRange)>;
112 
114 
138 {
139 public:
144  USDVALIDATION_API
145  explicit UsdValidationValidator(
146  const UsdValidationValidatorMetadata &metadata);
147 
148  UsdValidationValidator(const UsdValidationValidator &other) = delete;
149  UsdValidationValidator &operator=(const UsdValidationValidator &) = delete;
150 
151  UsdValidationValidator(UsdValidationValidator &&other) noexcept = default;
152  UsdValidationValidator &operator=(UsdValidationValidator &&) noexcept
153  = default;
154 
157  USDVALIDATION_API
159  const UsdValidateLayerTaskFn &validateLayerTaskFn,
160  std::vector<UsdValidationFixer> fixers = {});
161 
164  USDVALIDATION_API
166  const UsdValidateStageTaskFn &validateStageTaskFn,
167  std::vector<UsdValidationFixer> fixers = {});
168 
171  USDVALIDATION_API
173  const UsdValidatePrimTaskFn &validatePrimTaskFn,
174  std::vector<UsdValidationFixer> fixers = {});
175 
178  {
179  return _metadata;
180  }
181 
184  {
185  return std::move(_metadata);
186  }
187 
190  USDVALIDATION_API
191  const std::vector<const UsdValidationFixer *> GetFixers() const;
192 
196  USDVALIDATION_API
197  const UsdValidationFixer *GetFixerByName(const TfToken &name) const;
198 
202  USDVALIDATION_API
203  const std::vector<const UsdValidationFixer *> GetFixersByErrorName(
204  const TfToken &errorName) const;
205 
209  USDVALIDATION_API
211  const TfToken &name, const TfToken &errorName) const;
212 
223  USDVALIDATION_API
224  const std::vector<const UsdValidationFixer *> GetFixersByKeywords(
225  const TfTokenVector &keywords) const;
226 
232  USDVALIDATION_API
233  UsdValidationErrorVector Validate(const SdfLayerHandle &layer) const;
234 
245  USDVALIDATION_API
246  UsdValidationErrorVector Validate(
247  const UsdStagePtr &usdStage,
248  const UsdValidationTimeRange &timeRange = {}) const;
249 
260  USDVALIDATION_API
261  UsdValidationErrorVector Validate(
262  const UsdPrim &usdPrim,
263  const UsdValidationTimeRange &timeRange = {}) const;
264 
265 private:
266  // To make sure registry can query task types on a validator.
267  // Registry needs access to _GetValidatorPrimTasks, in order to determine if
268  // the contained validators in a suite, which provides schemaTypes metadata
269  // are compliant.
270  friend class UsdValidationRegistry;
271  // In order to distribute validators into different sets based on the type
272  // of validation to be performed, ValidationContext needs to access
273  // _GetValidateLayerTask, _GetValidateStageTask and _GetValidatePrimTask.
274  friend class UsdValidationContext;
275 
279  _validateTaskFn;
280 
281  std::vector<UsdValidationFixer> _fixers;
282 
283  // Return UsdValidateLayerTaskFn if provided by the validator, else a
284  // nullptr.
285  const UsdValidateLayerTaskFn *_GetValidateLayerTask() const;
286 
287  // Return UsdValidateStageTaskFn if provided by the validator, else a
288  // nullptr.
289  const UsdValidateStageTaskFn *_GetValidateStageTask() const;
290 
291  // Return UsdValidatePrimTaskFn if provided by the validator, else a
292  // nullptr.
293  const UsdValidatePrimTaskFn *_GetValidatePrimTask() const;
294 
295  // Helper to validate that all fixers have unique names. Issues a coding
296  // error if not unique.
297  void _ValidateFixerNames() const;
298 
299 }; // UsdValidationValidator
300 
318 {
319 public:
322  USDVALIDATION_API
324  const UsdValidationValidatorMetadata &metadata,
325  const std::vector<const UsdValidationValidator *> &validators);
326 
328  = default;
329 
331  operator=(UsdValidationValidatorSuite &&) noexcept
332  = default;
333 
339  const std::vector<const UsdValidationValidator *> &
341  {
342  return _containedValidators;
343  }
344 
350  std::vector<const UsdValidationValidator *> GetContainedValidators() &&
351  {
352  return std::move(_containedValidators);
353  }
354 
357  {
358  return _metadata;
359  }
360 
363  {
364  return std::move(_metadata);
365  }
366 
367 private:
369  std::vector<const UsdValidationValidator *> _containedValidators;
370 }; // UsdValidationValidatorSuite
371 
372 PXR_NAMESPACE_CLOSE_SCOPE
373 
374 #endif // PXR_USD_VALIDATION_USD_VALIDATION_VALIDATOR_H
bool isTimeDependent
whether this test is time dependent or not.
Definition: validator.h:85
const UsdValidationValidatorMetadata & GetMetadata() const &
Return metadata associated with this Validator.
Definition: validator.h:177
USDVALIDATION_API const UsdValidationFixer * GetFixerByNameAndErrorName(const TfToken &name, const TfToken &errorName) const
Return an immutable fixer given its name and catering to a specific errorName if it exists,...
USDVALIDATION_API UsdValidationValidatorSuite(const UsdValidationValidatorMetadata &metadata, const std::vector< const UsdValidationValidator * > &validators)
Instantiate UsdValidationValidatorSuite using metadata and a vector of validators.
USDVALIDATION_API const std::vector< const UsdValidationFixer * > GetFixersByKeywords(const TfTokenVector &keywords) const
Return a vector of immutable fixers catering to any of the given keywords.
USDVALIDATION_API const std::vector< const UsdValidationFixer * > GetFixersByErrorName(const TfToken &errorName) const
Return a vector of immutable fixers catering to a specific errorName.
USDVALIDATION_API const std::vector< const UsdValidationFixer * > GetFixers() const
Return a vector of immutable fixers associated with this Validator.
A class which describes the interval at which validation is to be performed.
Definition: timeRange.h:37
A UsdValidationFixer represents a fix that can be applied to fix a specific validation error.
Definition: fixer.h:62
UsdValidationValidator is a class describing a single test.
Definition: validator.h:137
USDVALIDATION_API UsdValidationErrorVector Validate(const SdfLayerHandle &layer) const
Run validation on the given layer by executing the contained validateTaskFn and returns UsdValidation...
std::function< UsdValidationErrorVector(const UsdStagePtr &, const UsdValidationTimeRange)> UsdValidateStageTaskFn
UsdValidateStageTaskFn: Validation logic operating on a given UsdStage.
Definition: validator.h:108
UsdValidationError is an entity returned by a validation task, which is associated with a UsdValidati...
Definition: error.h:239
UsdValidationValidatorSuite acts like a suite for a collection of tests, which clients can use to bun...
Definition: validator.h:317
TfToken name
Name of the validator.
Definition: validator.h:64
TfTokenVector schemaTypes
list of schemaTypes names this test applies to, extracted from plugInfo.json
Definition: validator.h:80
std::function< UsdValidationErrorVector(const SdfLayerHandle &)> UsdValidateLayerTaskFn
UsdValidateLayerTaskFn: Validation logic operating on a given SdfLayerHandle.
Definition: validator.h:105
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:80
A structure which describes metadata for a UsdValidationValidator.
Definition: validator.h:55
UsdValidationValidatorMetadata GetMetadata() &&
Return metadata associated with this validator by-value.
Definition: validator.h:183
USDVALIDATION_API UsdValidationValidator(const UsdValidationValidatorMetadata &metadata)
Instantiate a UsdValidationValidator which has no validation logic implementation.
const std::vector< const UsdValidationValidator * > & GetContainedValidators() const &
Returns a vector of const UsdValidationValidator pointers, which make this UsdValidationValidatorSuit...
Definition: validator.h:340
const UsdValidationValidatorMetadata & GetMetadata() const &
Return metadata associated with this validator.
Definition: validator.h:356
std::vector< const UsdValidationValidator * > GetContainedValidators() &&
Returns a vector of const UsdValidationValidator pointers, which make this UsdValidationValidatorSuit...
Definition: validator.h:350
std::string doc
doc string extracted from plugInfo.json This is a mandatory field for a ValidatorMetadata.
Definition: validator.h:76
TfTokenVector keywords
list of keywords extracted for this test from the plugInfo.json
Definition: validator.h:72
UsdPrim is the sole persistent scenegraph object on a UsdStage, and is the embodiment of a "Prim" as ...
Definition: prim.h:116
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:489
UsdValidationRegistry manages and provides access to UsdValidationValidator / UsdValidationValidatorS...
Definition: registry.h:168
PlugPluginPtr pluginPtr
Pointer to the plugin to which a plugin based validator belongs.
Definition: validator.h:69
std::function< UsdValidationErrorVector(const UsdPrim &, const UsdValidationTimeRange)> UsdValidatePrimTaskFn
UsdValidatePrimTaskFn: Validation logic operating on a given UsdPrim.
Definition: validator.h:111
USDVALIDATION_API const UsdValidationFixer * GetFixerByName(const TfToken &name) const
Return an immutable fixer given its name if it exists, else return nullptr.
UsdValidationValidatorMetadata GetMetadata() &&
Return metadata associated with this validator.
Definition: validator.h:362
bool isSuite
whether this test represents a test suite or not, default is false.
Definition: validator.h:88
UsdValidationContext provides an interface for managing and running validators on USD layers,...
Definition: context.h:75
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...