You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/05/25 15:12:44 UTC

(causeway-app-petclinic) 01/07: Adds a mustSatisfy Specification to Name meta-annotation

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git

commit b398464983c4728958c6bf40f537791e38144e1e
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat May 25 15:30:54 2024 +0100

    Adds a mustSatisfy Specification to Name meta-annotation
---
 .../java/domainapp/modules/petowner/types/Name.java     | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/module-petowner/src/main/java/domainapp/modules/petowner/types/Name.java b/module-petowner/src/main/java/domainapp/modules/petowner/types/Name.java
index 0e36990..8110a5b 100644
--- a/module-petowner/src/main/java/domainapp/modules/petowner/types/Name.java
+++ b/module-petowner/src/main/java/domainapp/modules/petowner/types/Name.java
@@ -8,13 +8,26 @@ import java.lang.annotation.Target;
 import org.apache.causeway.applib.annotation.Parameter;
 import org.apache.causeway.applib.annotation.ParameterLayout;
 import org.apache.causeway.applib.annotation.Property;
+import org.apache.causeway.applib.spec.AbstractSpecification;
 
-@Property(maxLength = Name.MAX_LEN)
-@Parameter(maxLength = Name.MAX_LEN)
+@Property(maxLength = Name.MAX_LEN, mustSatisfy = Name.Spec.class)
+@Parameter(maxLength = Name.MAX_LEN, mustSatisfy = Name.Spec.class)
 @ParameterLayout(named = "Name")
 @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Name {
 
     int MAX_LEN = 40;
+    String PROHIBITED_CHARACTERS = "&%$!";
+
+    class Spec extends AbstractSpecification<String> {
+        @Override public String satisfiesSafely(String candidate) {
+            for (char prohibitedCharacter : PROHIBITED_CHARACTERS.toCharArray()) {
+                if( candidate.contains(""+prohibitedCharacter)) {
+                    return "Character '" + prohibitedCharacter + "' is not allowed.";
+                }
+            }
+            return null;
+        }
+    }
 }