package gw.systables.verifier uses gw.api.locale.DisplayKey uses gw.lang.reflect.TypeSystem uses gw.xml.parser2.PLXMLNode uses java.util.Map uses java.util.List @ReadOnly class CustomFormInferenceVerifier extends VerifierBase { construct() { super() } override function verify(importNode : PLXMLNode) : Map> { var results = super.verify(importNode) var requiredFieldsVerifier = new RequiredFieldsVerifierHelper(this, {"FormCode", "InferenceClass"}) requiredFieldsVerifier.verify(importNode, results) importNode.Children.each(\ p -> verifyCustomFormInferenceEntity(p, results)) return results } function verifyCustomFormInferenceEntity(node : PLXMLNode, results : Map>) { var formCode = node.Children.firstWhere(\ p -> p.ElementName == "FormCode").Text if (formCode != null and not formCode.Empty) { if (formCode.matches(".*\\s+.*")) { addErrorToResults(DisplayKey.get("Java.ValidationError.ProductModel.FormPattern.Inference.FormCodeHasSpaces", formCode), node, results) } } var inferenceClassName = node.Children.firstWhere(\ p -> p.ElementName == "InferenceClass").Text if (inferenceClassName != null and not inferenceClassName.Empty) { var inferenceClassType = TypeSystem.getByFullNameIfValid(inferenceClassName) if (inferenceClassType == null) { addErrorToResults(DisplayKey.get("Java.ValidationError.ProductModel.FormPattern.Inference.InvalidClassName", inferenceClassName), node, results) return } if (not gw.api.util.TypeUtil.isNominallyOrStructurallyAssignable(gw.forms.IFormData.Type, inferenceClassType)) { addErrorToResults(DisplayKey.get("Java.ValidationError.ProductModel.FormPattern.Inference.Inheritance", inferenceClassName), node, results) } if (inferenceClassType.Abstract) { addErrorToResults(DisplayKey.get("Java.ValidationError.ProductModel.FormPattern.Inference.CannotBeAbstract", inferenceClassName), node, results) } if (inferenceClassType.TypeInfo.getConstructor({}) == null) { addErrorToResults(DisplayKey.get("Java.ValidationError.ProductModel.FormPattern.Inference.RequiresNoArgConstructor", inferenceClassName), node, results) } if (gw.api.util.TypeUtil.isNominallyOrStructurallyAssignable(gw.forms.GenericFormInferenceBase.Type, inferenceClassType)) { addErrorToResults(DisplayKey.get("Java.ValidationError.ProductModel.FormPattern.Inference.Generic", inferenceClassName), node, results) } } } }