-
Notifications
You must be signed in to change notification settings - Fork 32
Closed
Labels
enhancementNew feature or requestNew feature or requestsubject: code generationThis issue is about code generationThis issue is about code generation
Description
Right now, the type format validator and the cardinality validator of a class are instantiated directly by the corresponding Meta class of a pojo. This results in less configurable generated code (e.g., consumers cannot override the behaviour of some validators) and makes it hard to implement future enhancements which may require dependency injection such as supporting conditions on type aliases. (see #879)
I would propose to inject them in the same way as we currently inject conditions, i.e., using a ValidatorFactory argument.
Below is an example from the CDM.
Current meta code for type BondReference:
@RosettaMeta(model=BondReference.class)
public class BondReferenceMeta implements RosettaMetaData<BondReference> {
@Override
public List<Validator<? super BondReference>> dataRules(ValidatorFactory factory) {
return Arrays.asList(
factory.<cdm.product.asset.BondReference>create(cdm.product.asset.validation.datarule.BondReferenceBondUnderlier.class)
);
}
...
@Override
public Validator<? super BondReference> validator() {
return new BondReferenceValidator();
}
@Override
public Validator<? super BondReference> typeFormatValidator() {
return new BondReferenceTypeFormatValidator();
}
...
}This would change to:
@RosettaMeta(model=BondReference.class)
public class BondReferenceMeta implements RosettaMetaData<BondReference> {
@Override
public List<Validator<? super BondReference>> dataRules(ValidatorFactory factory) {
return Arrays.asList(
factory.<BondReference>create(BondReferenceBondUnderlier.class)
);
}
...
@Override
public Validator<? super BondReference> validator(ValidatorFactory factory) {
return factory.<BondReference>create(BondReferenceValidator.class);
}
@Override
public Validator<? super BondReference> typeFormatValidator(ValidatorFactory factory) {
return factory.<BondReference>create(BondReferenceTypeFormatValidator.class);
}
// For backwards compatibility
@Deprecated
@Override
public Validator<? super BondReference> validator() {
return new BondReferenceValidator();
}
@Deprecated
@Override
public Validator<? super BondReference> typeFormatValidator() {
return new BondReferenceTypeFormatValidator();
}
...
}Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestsubject: code generationThis issue is about code generationThis issue is about code generation
Type
Projects
Status
Closed