java.Validation.xpt Maven / Gradle / Ivy
«IMPORT uml»
«IMPORT JMM»
«EXTENSION java::Naming»
«EXTENSION java::GeneratorCommons»
«EXTENSION java::CustomValidationCommons»
«EXTENSION functions::Property»
«EXTENSION org::openarchitectureware::util::stdlib::io»
«DEFINE GenerateCustomValidation FOR CustomConstraint»
«info("Processing «CustomConstraint» " + this.name + " (" + (this.fqn()) + ")")»
«LET className.split("\\.").last() AS validationClass»
«LET className.replaceFirst("\\."+validationClass, "") AS packageName»
«info("Validation Class: " + validationClass)»
«FILE className.packagePath() + ".java" src_gen»
package «packageName»;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import «getEnterpriseJavaPackage()».validation.Constraint;
import «getEnterpriseJavaPackage()».validation.Payload;
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE })
@Retention(RUNTIME)
@Constraint(validatedBy = {«FOREACH validatedBy AS validatorClass SEPARATOR ', '»«validatorClass».class «ENDFOREACH»})
public @interface «validationClass» {
«FOREACH this.ownedAttribute AS attribute»
«IF attribute.name.startsWith("base_") == false»
«attribute.fqn()» «attribute.name»()
«IF attribute.defaultValue.isNull() == false-»
default
«REM»Annotation supports either primitive types or enums.«ENDREM»
«IF attribute.isMultivalued()»{«ENDIF-»
«IF attribute.type.isPrimitiveType()-»
«attribute.defaultValue.stringValue()-»
«ELSE-»
«attribute.type.fqn()».«attribute.defaultValue.stringValue()-»
«ENDIF-»
«IF attribute.isMultivalued()»}«ENDIF-»
«ENDIF-»;
«ENDIF-»
«ENDFOREACH-»
String message() default "{«className».message}";
Class>[] groups() default { };
Class extends Payload>[] payload() default { };
}
«ENDFILE»
«ENDLET»«ENDLET»
«ENDDEFINE»
«DEFINE ValidationAnnotation FOR NamedElement»
«FOREACH this.getAppliedStereotypes() AS stereotype»
«IF stereotype.isValidationStereotype()»
«IF stereotype.name == "DecimalMin"»
«EXPAND DecimalMinAnnotation FOR ((DecimalMin)this)»
«ELSEIF stereotype.name == "DecimalMax"»
«EXPAND DecimalMaxAnnotation FOR ((DecimalMax)this)»
«ELSEIF stereotype.name == "Min"»
«EXPAND MinAnnotation FOR ((Min)this)»
«ELSEIF stereotype.name == "Max"»
«EXPAND MaxAnnotation FOR ((Max)this)»
«ELSEIF stereotype.name == "Digits"»
«EXPAND DigitsAnnotation FOR ((Digits) this)»
«ELSEIF stereotype.name == "Negative"»
«EXPAND NegativeAnnotation FOR ((Negative) this)»
«ELSEIF stereotype.name == "NegativeOrZero"»
«EXPAND NegativeOrZeroAnnotation FOR ((NegativeOrZero) this)»
«ELSEIF stereotype.name == "PositiveOrZero"»
«EXPAND PositiveOrZeroAnnotation FOR ((PositiveOrZero) this)»
«ELSEIF stereotype.name == "Positive"»
«EXPAND PositiveAnnotation FOR ((Positive) this)»
«ELSEIF stereotype.name == "Size"»
«EXPAND SizeAnnotation FOR ((Size) this)»
«ELSEIF stereotype.name == "Pattern"»
«EXPAND PatternAnnotation FOR ((Pattern) this)»
«ELSEIF stereotype.name == "Email"»
«EXPAND EmailAnnotation FOR ((Email) this)»
«ELSEIF stereotype.name == "NotEmpty"»
«EXPAND NotEmptyAnnotation FOR ((NotEmpty) this)»
«ELSEIF stereotype.name == "Null"»
«EXPAND NullAnnotation FOR ((Null) this)»
«ELSEIF stereotype.name == "NotNull"»
«EXPAND NotNullAnnotation FOR ((NotNull) this)»
«ELSEIF stereotype.name == "AssertTrue"»
«EXPAND AssertTrueAnnotation FOR ((AssertTrue) this)»
«ELSEIF stereotype.name == "AssertFalse"»
«EXPAND AssertFalseAnnotation FOR ((AssertFalse) this)»
«ELSEIF stereotype.name == "NotBlank"»
«EXPAND NotBlankAnnotation FOR ((NotBlank) this)»
«ELSEIF stereotype.name == "Past"»
«EXPAND PastAnnotation FOR ((Past) this)»
«ELSEIF stereotype.name == "PastOrPresent"»
«EXPAND PastOrPresentAnnotation FOR ((PastOrPresent) this)»
«ELSEIF stereotype.name == "FutureOrPresent"»
«EXPAND FutureOrPresentAnnotation FOR ((FutureOrPresent) this)»
«ELSEIF stereotype.name == "Future"»
«EXPAND FutureAnnotation FOR ((Future) this)»
«ELSEIF stereotype.name == "Valid" -»
«EXPAND ValidAnnotation FOR ((Valid) this) -»
«ELSE»
«EXPAND CustomValidationAnnotation (stereotype)»
«ENDIF»
«ENDIF»
«ENDFOREACH»
«IF generateValidAnnotationsForClasses() &&(this.isStereotypeApplied("POJO") || this.isStereotypeApplied("ServiceObject") || this.isStereotypeApplied("DomainObject") || this.isStereotypeApplied("PersistentObject")) && this.isStereotypeApplied("Valid")==false »
@«getEnterpriseJavaPackage()».validation.Valid
«ENDIF»
«IF generateValidAnnotationsForAssociations() && this.isProperty() &&(this.asProperty().type.isStereotypeApplied("POJO") || this.asProperty().type.isStereotypeApplied("ServiceObject") || this.asProperty().type.isStereotypeApplied("DomainObject") || this.asProperty().type.isStereotypeApplied("PersistentObject")) && this.isStereotypeApplied("Valid")==false »
@«getEnterpriseJavaPackage()».validation.Valid
«ENDIF»
«ENDDEFINE»
«DEFINE DecimalMinAnnotation FOR DecimalMin»
@«getEnterpriseJavaPackage()».validation.constraints.DecimalMin(value = "«this.minValue»", inclusive = «this.inclusive» «EXPAND ValidationAnnotationBasics» )
«ENDDEFINE»
«DEFINE DecimalMaxAnnotation FOR DecimalMax»
@«getEnterpriseJavaPackage()».validation.constraints.DecimalMax(value = "«this.maxValue»", inclusive = «this.inclusive» «EXPAND ValidationAnnotationBasics» )
«ENDDEFINE»
«DEFINE MinAnnotation FOR Min»
@«getEnterpriseJavaPackage()».validation.constraints.Min(value = «this.minValue» «EXPAND ValidationAnnotationBasics»)
«ENDDEFINE»
«DEFINE MaxAnnotation FOR Max»
@«getEnterpriseJavaPackage()».validation.constraints.Max(value = «this.maxValue» «EXPAND ValidationAnnotationBasics»)
«ENDDEFINE»
«DEFINE DigitsAnnotation FOR Digits»
@«getEnterpriseJavaPackage()».validation.constraints.Digits(integer = «integer», fraction = «fraction» «EXPAND ValidationAnnotationBasics»)
«ENDDEFINE»
«DEFINE NegativeAnnotation FOR Negative»
@«getEnterpriseJavaPackage()».validation.constraints.Negative«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE NegativeOrZeroAnnotation FOR NegativeOrZero»
@«getEnterpriseJavaPackage()».validation.constraints.NegativeOrZero«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE PositiveOrZeroAnnotation FOR PositiveOrZero»
@«getEnterpriseJavaPackage()».validation.constraints.PositiveOrZero«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE PositiveAnnotation FOR Positive»
@«getEnterpriseJavaPackage()».validation.constraints.Positive«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE SizeAnnotation FOR Size»
@«getEnterpriseJavaPackage()».validation.constraints.Size(min = «IF min != -1»«min»«ELSE»0«ENDIF», max = «IF max != -1»«max»«ELSE»Integer.MAX_VALUE«ENDIF»«EXPAND ValidationAnnotationBasics»)
«ENDDEFINE»
«DEFINE PatternAnnotation FOR Pattern»
@«getEnterpriseJavaPackage()».validation.constraints.Pattern(«IF regexp.length > 0»regexp = "«regexp»"«ENDIF»«IF regexp.length > 0 && flags.size > 0», «ENDIF»«IF flags.size > 0»flags = {«FOREACH flags AS flag SEPARATOR ", "»«getEnterpriseJavaPackage()».validation.constraints.Pattern.Flag.«flag»«ENDFOREACH»}«ENDIF» «EXPAND ValidationAnnotationBasics»)
«ENDDEFINE»
«DEFINE EmailAnnotation FOR Email»
@«getEnterpriseJavaPackage()».validation.constraints.Email(«IF regexp.length > 0»regexp = "«regexp»"«ENDIF»«IF regexp.length > 0 && flags.size > 0», «ENDIF»«IF flags.size > 0»flags = {«FOREACH flags AS flag SEPARATOR ", "»«getEnterpriseJavaPackage()».validation.constraints.Pattern.Flag.«flag»«ENDFOREACH»}«ENDIF» «EXPAND ValidationAnnotationBasics»)
«ENDDEFINE»
«DEFINE NotEmptyAnnotation FOR NotEmpty»
@«getEnterpriseJavaPackage()».validation.constraints.NotEmpty«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE NullAnnotation FOR Null»
@«getEnterpriseJavaPackage()».validation.constraints.Null«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE NotNullAnnotation FOR NotNull»
@«getEnterpriseJavaPackage()».validation.constraints.NotNull«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE AssertTrueAnnotation FOR AssertTrue»
@«getEnterpriseJavaPackage()».validation.constraints.AssertTrue«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE AssertFalseAnnotation FOR AssertFalse»
@«getEnterpriseJavaPackage()».validation.constraints.AssertFalse«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE NotBlankAnnotation FOR NotBlank»
@«getEnterpriseJavaPackage()».validation.constraints.NotBlank«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE PastAnnotation FOR Past»
@«getEnterpriseJavaPackage()».validation.constraints.Past«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE PastOrPresentAnnotation FOR PastOrPresent»
@«getEnterpriseJavaPackage()».validation.constraints.PastOrPresent«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE FutureOrPresentAnnotation FOR FutureOrPresent»
@«getEnterpriseJavaPackage()».validation.constraints.FutureOrPresent«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE FutureAnnotation FOR Future»
@«getEnterpriseJavaPackage()».validation.constraints.Future«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE ValidAnnotation FOR Valid -»
@«getEnterpriseJavaPackage()».validation.Valid«IF this.hasErrorCodeOrSeverity()»(«EXPAND ValidationAnnotationBasicsEmptyValidation»)«ENDIF»
«ENDDEFINE»
«DEFINE CustomValidationAnnotation(Stereotype stereotype) FOR Element»
@«getJavaAnnotatinClassForCustomValidation(stereotype.fqn())-»(
«FOREACH stereotype.attribute.select(e|e.name.startsWith("base_") == false) AS attribute SEPARATOR ", "-»
«IF attribute.type.name == "String"-»
«attribute.name» = "«this.getValue(stereotype, attribute.name)-»"
«ELSEIF attribute.type.isPrimitiveType()-»
«attribute.name» = «this.getValue(stereotype, attribute.name)-»
«ELSEIF attribute.type.metaType.name == "uml::Enumeration" || attribute.type.metaType.name == "JMM::JEAFEnumeration"-»
«attribute.name» =
«IF attribute.isMultivalued() == false-»
«attribute.type.fqn()».«((EnumerationLiteral)this.getValue(stereotype, attribute.name)).name-»
«ELSE-»
{«FOREACH ((Collection)this.getValue(stereotype, attribute.name)) AS literal SEPARATOR ", "»«attribute.type.fqn()».«((EnumerationLiteral)literal)»«ENDFOREACH-»}
«ENDIF-»
«ELSE-»
«attribute.name» = «this.getValue(stereotype, attribute.name)-»
«ENDIF-»
«ENDFOREACH-»
«LET this.getValue(stereotype, "errorCode") AS errorCode-»
«LET (EnumerationLiteral)this.getValue(stereotype, "severity") AS severity-»
«IF errorCode > 0», message = "«errorCode»"«ENDIF» «IF severity.name != "NotUsed"», payload = com.anaptecs.jeaf.tools.api.validation.Severity.«severity.name».class«ENDIF»
«ENDLET-»
«ENDLET-»
)
«ENDDEFINE»
«DEFINE ValidationAnnotationBasics FOR Validation»
«IF errorCode > 0», message = "«errorCode»"«ENDIF» «IF severity.name != "NotUsed"», payload = com.anaptecs.jeaf.tools.api.validation.Severity.«severity.name».class«ENDIF»
«ENDDEFINE»
«DEFINE ValidationAnnotationBasicsEmptyValidation FOR Validation -»
«IF errorCode > 0»message = "«errorCode»"«ENDIF» «IF errorCode > 0 && severity.name != "NotUsed"», «ENDIF» «IF severity.name != "NotUsed"»payload = com.anaptecs.jeaf.tools.api.validation.Severity.«severity.name».class«ENDIF -»
«ENDDEFINE»