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
20#include <functional>
21#include <string>
22#include <variant>
23#include <vector>
24
25PXR_NAMESPACE_OPEN_SCOPE
26
28using UsdValidationErrorVector = std::vector<UsdValidationError>;
29class UsdPrim;
30
55{
64
68 PlugPluginPtr pluginPtr;
69
72
75 std::string doc;
76
80
85
87 bool isSuite;
88}; // UsdValidationValidatorMetadata
89
90using UsdValidationValidatorMetadataVector
91 = std::vector<UsdValidationValidatorMetadata>;
92
101
103using UsdValidateLayerTaskFn = std::function<UsdValidationErrorVector(
104 const SdfLayerHandle &)>;
106using UsdValidateStageTaskFn = std::function<UsdValidationErrorVector(
107 const UsdStagePtr &, const UsdValidationTimeRange)>;
109using UsdValidatePrimTaskFn = std::function<UsdValidationErrorVector(
110 const UsdPrim &, const UsdValidationTimeRange)>;
111
113
130{
131public:
136 USDVALIDATION_API
138 const UsdValidationValidatorMetadata &metadata);
139
140 UsdValidationValidator(const UsdValidationValidator &other) = delete;
141 UsdValidationValidator &operator=(const UsdValidationValidator &) = delete;
142
143 UsdValidationValidator(UsdValidationValidator &&other) noexcept = default;
144 UsdValidationValidator &operator=(UsdValidationValidator &&) noexcept
145 = default;
146
149 USDVALIDATION_API
151 const UsdValidateLayerTaskFn &validateLayerTaskFn);
152
155 USDVALIDATION_API
157 const UsdValidateStageTaskFn &validateStageTaskFn);
158
161 USDVALIDATION_API
163 const UsdValidatePrimTaskFn &validatePrimTaskFn);
164
167 {
168 return _metadata;
169 }
170
173 {
174 return std::move(_metadata);
175 }
176
182 USDVALIDATION_API
183 UsdValidationErrorVector Validate(const SdfLayerHandle &layer) const;
184
195 USDVALIDATION_API
196 UsdValidationErrorVector Validate(
197 const UsdStagePtr &usdStage,
198 const UsdValidationTimeRange &timeRange = {}) const;
199
210 USDVALIDATION_API
211 UsdValidationErrorVector Validate(
212 const UsdPrim &usdPrim,
213 const UsdValidationTimeRange &timeRange = {}) const;
214
215private:
216 // To make sure registry can query task types on a validator.
217 // Registry needs access to _GetValidatorPrimTasks, in order to determine if
218 // the contained validators in a suite, which provides schemaTypes metadata
219 // are compliant.
220 friend class UsdValidationRegistry;
221 // In order to distribute validators into different sets based on the type
222 // of validation to be performed, ValidationContext needs to access
223 // _GetValidateLayerTask, _GetValidateStageTask and _GetValidatePrimTask.
224 friend class UsdValidationContext;
225
229 _validateTaskFn;
230
231 // Return UsdValidateLayerTaskFn if provided by the validator, else a
232 // nullptr.
233 const UsdValidateLayerTaskFn *_GetValidateLayerTask() const;
234
235 // Return UsdValidateStageTaskFn if provided by the validator, else a
236 // nullptr.
237 const UsdValidateStageTaskFn *_GetValidateStageTask() const;
238
239 // Return UsdValidatePrimTaskFn if provided by the validator, else a
240 // nullptr.
241 const UsdValidatePrimTaskFn *_GetValidatePrimTask() const;
242
243}; // UsdValidationValidator
244
262{
263public:
266 USDVALIDATION_API
268 const UsdValidationValidatorMetadata &metadata,
269 const std::vector<const UsdValidationValidator *> &validators);
270
272 = default;
273
275 operator=(UsdValidationValidatorSuite &&) noexcept
276 = default;
277
283 const std::vector<const UsdValidationValidator *> &
285 {
286 return _containedValidators;
287 }
288
294 std::vector<const UsdValidationValidator *> GetContainedValidators() &&
295 {
296 return std::move(_containedValidators);
297 }
298
301 {
302 return _metadata;
303 }
304
307 {
308 return std::move(_metadata);
309 }
310
311private:
313 std::vector<const UsdValidationValidator *> _containedValidators;
314}; // UsdValidationValidatorSuite
315
316PXR_NAMESPACE_CLOSE_SCOPE
317
318#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:225
UsdValidationRegistry manages and provides access to UsdValidationValidator / UsdValidationValidatorS...
Definition: registry.h:151
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:130
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...
UsdValidationValidatorMetadata GetMetadata() &&
Return metadata associated with this validator by-value.
Definition: validator.h:172
USDVALIDATION_API UsdValidationValidator(const UsdValidationValidatorMetadata &metadata)
Instantiate a UsdValidationValidator which has no validation logic implementation.
const UsdValidationValidatorMetadata & GetMetadata() const &
Return metadata associated with this Validator.
Definition: validator.h:166
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:262
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:306
std::vector< const UsdValidationValidator * > GetContainedValidators() &&
Returns a vector of const UsdValidationValidator pointers, which make this UsdValidationValidatorSuit...
Definition: validator.h:294
const std::vector< const UsdValidationValidator * > & GetContainedValidators() const &
Returns a vector of const UsdValidationValidator pointers, which make this UsdValidationValidatorSuit...
Definition: validator.h:284
const UsdValidationValidatorMetadata & GetMetadata() const &
Return metadata associated with this validator.
Definition: validator.h:300
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
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:84
PlugPluginPtr pluginPtr
Pointer to the plugin to which a plugin based validator belongs.
Definition: validator.h:68
bool isSuite
whether this test represents a test suite or not
Definition: validator.h:87
TfTokenVector schemaTypes
list of schemaTypes names this test applies to, extracted from plugInfo.json
Definition: validator.h:79
TfTokenVector keywords
list of keywords extracted for this test from the plugInfo.json
Definition: validator.h:71
std::string doc
doc string extracted from plugInfo.json This is a mandatory field for a ValidatorMetadata.
Definition: validator.h:75
TfToken name
Name of the validator.
Definition: validator.h:63
A structure which describes metadata for a UsdValidationValidator.
Definition: validator.h:55