Loading...
Searching...
No Matches
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"
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
26PXR_NAMESPACE_OPEN_SCOPE
27
29using UsdValidationErrorVector = std::vector<UsdValidationError>;
30class UsdPrim;
31
56{
65
69 PlugPluginPtr pluginPtr;
70
73
76 std::string doc;
77
81
86
88 bool isSuite;
89}; // UsdValidationValidatorMetadata
90
91using UsdValidationValidatorMetadataVector
92 = std::vector<UsdValidationValidatorMetadata>;
93
102
104using UsdValidateLayerTaskFn = std::function<UsdValidationErrorVector(
105 const SdfLayerHandle &)>;
107using UsdValidateStageTaskFn = std::function<UsdValidationErrorVector(
108 const UsdStagePtr &, const UsdValidationTimeRange)>;
110using UsdValidatePrimTaskFn = std::function<UsdValidationErrorVector(
111 const UsdPrim &, const UsdValidationTimeRange)>;
112
114
138{
139public:
144 USDVALIDATION_API
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
265private:
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{
319public:
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
367private:
369 std::vector<const UsdValidationValidator *> _containedValidators;
370}; // UsdValidationValidatorSuite
371
372PXR_NAMESPACE_CLOSE_SCOPE
373
374#endif // PXR_USD_VALIDATION_USD_VALIDATION_VALIDATOR_H
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:71
UsdPrim is the sole persistent scenegraph object on a UsdStage, and is the embodiment of a "Prim" as ...
Definition: prim.h:117
UsdValidationContext provides an interface for managing and running validators on USD layers,...
Definition: context.h:76
UsdValidationError is an entity returned by a validation task, which is associated with a UsdValidati...
Definition: error.h:237
A UsdValidationFixer represents a fix that can be applied to fix a specific validation error.
Definition: fixer.h:63
UsdValidationRegistry manages and provides access to UsdValidationValidator / UsdValidationValidatorS...
Definition: registry.h:166
A class which describes the interval at which validation is to be performed.
Definition: timeRange.h:38
UsdValidationValidator is a class describing a single test.
Definition: validator.h:138
USDVALIDATION_API UsdValidationErrorVector Validate(const UsdPrim &usdPrim, const UsdValidationTimeRange &timeRange={}) const
Run validation on the given usdPrim by executing the contained validateTaskFn and returns UsdValidati...
USDVALIDATION_API UsdValidationErrorVector Validate(const SdfLayerHandle &layer) const
Run validation on the given layer by executing the contained validateTaskFn and returns UsdValidation...
USDVALIDATION_API const UsdValidationFixer * GetFixerByName(const TfToken &name) const
Return an immutable fixer given its name if it exists, else return nullptr.
USDVALIDATION_API const std::vector< const UsdValidationFixer * > GetFixers() const
Return a vector of immutable fixers associated with this Validator.
USDVALIDATION_API UsdValidationValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidateStageTaskFn &validateStageTaskFn, std::vector< UsdValidationFixer > fixers={})
Instantiate a UsdValidationValidator which has its validation logic implemented by a UsdValidateStage...
UsdValidationValidatorMetadata GetMetadata() &&
Return metadata associated with this validator by-value.
Definition: validator.h:183
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 UsdValidationValidator(const UsdValidationValidatorMetadata &metadata, const UsdValidatePrimTaskFn &validatePrimTaskFn, std::vector< UsdValidationFixer > fixers={})
Instantiate a UsdValidationValidator which has its validation logic implemented by a UsdValidatePrimT...
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 UsdValidationValidator(const UsdValidationValidatorMetadata &metadata)
Instantiate a UsdValidationValidator which has no validation logic implementation.
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,...
const UsdValidationValidatorMetadata & GetMetadata() const &
Return metadata associated with this Validator.
Definition: validator.h:177
USDVALIDATION_API UsdValidationErrorVector Validate(const UsdStagePtr &usdStage, const UsdValidationTimeRange &timeRange={}) const
Run validation on the given usdStage by executing the contained validateTaskFn and returns UsdValidat...
UsdValidationValidatorSuite acts like a suite for a collection of tests, which clients can use to bun...
Definition: validator.h:318
USDVALIDATION_API UsdValidationValidatorSuite(const UsdValidationValidatorMetadata &metadata, const std::vector< const UsdValidationValidator * > &validators)
Instantiate UsdValidationValidatorSuite using metadata and a vector of validators.
UsdValidationValidatorMetadata GetMetadata() &&
Return metadata associated with this validator.
Definition: validator.h:362
std::vector< const UsdValidationValidator * > GetContainedValidators() &&
Returns a vector of const UsdValidationValidator pointers, which make this UsdValidationValidatorSuit...
Definition: validator.h:350
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::function< UsdValidationErrorVector(const UsdPrim &, const UsdValidationTimeRange)> UsdValidatePrimTaskFn
UsdValidatePrimTaskFn: Validation logic operating on a given UsdPrim.
Definition: validator.h:111
std::function< UsdValidationErrorVector(const SdfLayerHandle &)> UsdValidateLayerTaskFn
UsdValidateLayerTaskFn: Validation logic operating on a given SdfLayerHandle.
Definition: validator.h:105
std::function< UsdValidationErrorVector(const UsdStagePtr &, const UsdValidationTimeRange)> UsdValidateStageTaskFn
UsdValidateStageTaskFn: Validation logic operating on a given UsdStage.
Definition: validator.h:108
STL namespace.
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440
bool isTimeDependent
whether this test is time dependent or not.
Definition: validator.h:85
PlugPluginPtr pluginPtr
Pointer to the plugin to which a plugin based validator belongs.
Definition: validator.h:69
bool isSuite
whether this test represents a test suite or not
Definition: validator.h:88
TfTokenVector schemaTypes
list of schemaTypes names this test applies to, extracted from plugInfo.json
Definition: validator.h:80
TfTokenVector keywords
list of keywords extracted for this test from the plugInfo.json
Definition: validator.h:72
std::string doc
doc string extracted from plugInfo.json This is a mandatory field for a ValidatorMetadata.
Definition: validator.h:76
TfToken name
Name of the validator.
Definition: validator.h:64
A structure which describes metadata for a UsdValidationValidator.
Definition: validator.h:56