You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/10/09 19:33:49 UTC

[isis] 01/02: ISIS-1742: deletes @RegEx annotation, in its place adds in support for @javax.validation.constraints.Pattern

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

danhaywood pushed a commit to branch dev/2.0.0/ISIS-1742-remove-deprecations
in repository https://gitbox.apache.org/repos/asf/isis.git

commit b06e7123735af2e7eeaefb457f6f5e63e8fa8259
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 9 20:30:54 2017 +0100

    ISIS-1742: deletes @RegEx annotation, in its place adds in support for @javax.validation.constraints.Pattern
---
 .../main/asciidoc/guides/rgant/_rgant-Pattern.adoc |  35 +++++++
 .../guides/rgant/_rgant_aaa_deprecated.adoc        |  34 -------
 .../org/apache/isis/applib/annotation/RegEx.java   |  55 -----------
 .../isis/core/metamodel/facets/Annotations.java    |   2 +
 .../annotation/RegExFacetOnTypeAnnotation.java     |  63 -------------
 .../RegExFacetOnTypeAnnotationFactory.java         |  83 -----------------
 .../facets/objectvalue/regex/RegExFacet.java       |  16 +---
 .../objectvalue/regex/RegExFacetAbstract.java      |  53 +++++++----
 .../regex/TitleFacetFormattedByRegex.java          |  39 --------
 .../parameter/ParameterAnnotationFacetFactory.java |  27 +-----
 .../regex/RegExFacetForParameterAnnotation.java    |  23 ++---
 .../RegExFacetFromRegExAnnotationOnParameter.java  |  44 +++------
 .../property/PropertyAnnotationFacetFactory.java   |  27 +-----
 .../regex/RegExFacetForPropertyAnnotation.java     |  17 +---
 .../RegExFacetForRegExAnnotationOnProperty.java    |  42 +++------
 .../dflt/ProgrammingModelFacetsJava5.java          |   3 -
 .../ParameterAnnotationFacetFactoryTest.java       |   4 +-
 ...RegExAnnotationOnParameterFacetFactoryTest.java |  13 ++-
 .../PropertyAnnotationFacetFactoryTest.java        |   6 +-
 .../RegExAnnotationOnPropertyFacetFactoryTest.java |  12 ++-
 .../RegExAnnotationOnTypeFacetFactoryTest.java     |  48 ----------
 .../validate/regex/RegExFacetAnnotationTest.java   | 101 ---------------------
 .../java/domainapp/dom/impl/HelloWorldObject.java  |   4 +-
 23 files changed, 142 insertions(+), 609 deletions(-)

diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Pattern.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Pattern.adoc
new file mode 100644
index 0000000..16a8a42
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Pattern.adoc
@@ -0,0 +1,35 @@
+[[_rgant-Digits]]
+= `@Digits` (`javax`)
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+:_basedir: ../../
+:_imagesdir: images/
+
+
+
+The `@javax.validation.constraints.Digits` annotation is recognized by Apache Isis as a means to specify the precision for properties and action parameters of type `java.math.BigDecimal`.
+
+For example (taken from the (non-ASF) http://github.com/isisaddons/isis-app-todoapp[Isis addons' todoapp]):
+
+[source,java]
+----
+@javax.jdo.annotations.Column(
+    scale=2                                              // <1>
+)
+@javax.validation.constraints.Digits(
+    integer=10,
+    fraction=2                                           // <2>
+)
+public BigDecimal getCost() {
+    return cost;
+}
+public void setCost(final BigDecimal cost) {
+    this.cost = cost!=null
+        ? cost.setScale(2, BigDecimal.ROUND_HALF_EVEN)   // <3>
+        :null;
+}
+----
+<1> the xref:../rgant/rgant.adoc#_rgant-Column[`@Column#scale()`] attribute must be ...
+<2> ... consistent with `@Digits#fraction()`
+<3> the correct idiom when setting a new value is to normalized to the correct scale
+
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc
deleted file mode 100644
index eef1993..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc
+++ /dev/null
@@ -1,34 +0,0 @@
-[[_rgant_aaa_deprecated]]
-= Deprecated Annotations
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-As Apache Isis has evolved and grown, we found ourselves adding more and more annotations; but most of these related to either an object type (entity, view model, service) or an object member (property, collection, action).
-Over time it became harder and harder for end programmers to discover these new features.
-
-Accordingly, (in v1.8.0) we decided to unify the semantics into the main (core) annotations listed xref:../rgant/rgant.adoc#_rgant-aaa_main[above].
-
-The annotations listed in the table below are still supported by Apache Isis, but will be retired in Apache Isis v2.0.
-
-
-.Deprecated Annotations
-[cols="2,4a,3a,1", options="header"]
-|===
-|Annotation
-|Purpose
-|Use instead
-|Layer
-
-
-
-|`@RegEx`
-|Validate change to value of string property.
-|`#regexPattern()` for xref:../rgant/rgant.adoc#_rgant-Property_regexPattern[`@Property`] or  xref:../rgant/rgant.adoc#_rgant-Property_regexPattern[`@Parameter`].
-|Domain
-
-
-
-|===
-
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/RegEx.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/RegEx.java
deleted file mode 100644
index 8820570..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/RegEx.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- *
- * @deprecated - use {@link Property#regexPattern()} or {@link Parameter#regexPattern()} instead.
- */
-@Deprecated
-@Inherited
-@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface RegEx {
-
-    /**
-     * @deprecated - use {@link Property#regexPattern()} or {@link Parameter#regexPattern()} instead.
-     */
-    @Deprecated
-    String validation();
-
-    /**
-     * @deprecated - use {@link org.apache.isis.applib.annotation.Property#regexPatternReplacement()} or {@link Parameter#regexPatternReplacement()} instead.
-     */
-    String format() default "";
-
-    /**
-     /**
-     * @deprecated - use {@link Property#regexPatternFlags()} or {@link Parameter#regexPatternFlags()} instead.
-     */
-    @Deprecated
-    boolean caseSensitive() default true;
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 46ae6ec..737ce0a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -27,6 +27,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import javax.validation.constraints.Pattern;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import com.google.common.collect.Lists;
@@ -282,6 +283,7 @@ public final class Annotations  {
                     Collection.class,
                     CollectionLayout.class,
                     MemberOrder.class,
+                    Pattern.class,
                     javax.annotation.Nullable.class,
                     Title.class,
                     XmlJavaTypeAdapter.class,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/regex/annotation/RegExFacetOnTypeAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/regex/annotation/RegExFacetOnTypeAnnotation.java
deleted file mode 100644
index 75f6005..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/regex/annotation/RegExFacetOnTypeAnnotation.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.regex.annotation;
-
-import java.util.regex.Pattern;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacetAbstract;
-
-/**
- * @deprecated
- */
-@Deprecated
-public class RegExFacetOnTypeAnnotation extends RegExFacetAbstract {
-
-    private final Pattern pattern;
-
-    public RegExFacetOnTypeAnnotation(final String validation, final String format, final boolean caseSensitive, final FacetHolder holder, final String replacement) {
-        super(validation, format, caseSensitive, holder, replacement);
-        pattern = Pattern.compile(validation(), patternFlags());
-    }
-
-    @Override
-    public String format(final String text) {
-        if (text == null) {
-            return "<not a string>";
-        }
-        if (format() == null || format().length() == 0) {
-            return text;
-        }
-        return pattern.matcher(text).replaceAll(format());
-    }
-
-    @Override
-    public boolean doesNotMatch(final String text) {
-        if (text == null) {
-            return true;
-        }
-        return !pattern.matcher(text).matches();
-    }
-
-    private int patternFlags() {
-        return !caseSensitive() ? Pattern.CASE_INSENSITIVE : 0;
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/regex/annotation/RegExFacetOnTypeAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/regex/annotation/RegExFacetOnTypeAnnotationFactory.java
deleted file mode 100644
index c289aad..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/regex/annotation/RegExFacetOnTypeAnnotationFactory.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.object.regex.annotation;
-
-import org.apache.isis.applib.annotation.RegEx;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
-import org.apache.isis.core.metamodel.facets.Annotations;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
-import org.apache.isis.core.metamodel.progmodel.DeprecatedMarker;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-/**
- * @deprecated
- */
-@Deprecated
-public class RegExFacetOnTypeAnnotationFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner, DeprecatedMarker {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
-
-    public RegExFacetOnTypeAnnotationFactory() {
-        super(FeatureType.OBJECTS_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessClassContext processClassContext) {
-        final RegEx annotation = Annotations.getAnnotation(processClassContext.getCls(), RegEx.class);
-        final RegExFacet facet = createRegexFacet(annotation, processClassContext.getFacetHolder());
-        FacetUtil.addFacet(validator.flagIfPresent(facet, null));
-    }
-
-    private RegExFacet createRegexFacet(final RegEx annotation, final FacetHolder holder) {
-        if (annotation == null) {
-            return null;
-        }
-
-        final String validationExpression = annotation.validation();
-        final boolean caseSensitive = annotation.caseSensitive();
-        final String formatExpression = annotation.format();
-        final String replacement = "Doesn't match pattern";
-
-        return new RegExFacetOnTypeAnnotation(validationExpression, formatExpression, caseSensitive, holder, replacement);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        validator.setConfiguration(servicesInjector.getConfigurationServiceInternal());
-    }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacet.java
index 52b1766..ec093f6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacet.java
@@ -25,24 +25,14 @@ import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
 /**
  * Whether the (string) property or a parameter must correspond to a specific
  * regular expression.
- * 
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to the
- * <tt>@RegEx</tt> annotation.
- * 
- * @see MaskFacet
  */
 public interface RegExFacet extends MultipleValueFacet, ValidatingInteractionAdvisor {
 
-    public String validation();
+    public String regexp();
 
-    public String format();
-
-    public boolean caseSensitive();
+    public int patternFlags();
 
     public boolean doesNotMatch(String proposed);
 
-    public String format(String text);
-
-    public String replacement();
+    public String message();
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java
index 1c506ae..ca125eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/RegExFacetAbstract.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.metamodel.facets.objectvalue.regex;
 
+import javax.validation.constraints.Pattern;
+
 import org.apache.isis.applib.events.ValidityEvent;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -33,37 +35,50 @@ public abstract class RegExFacetAbstract extends MultipleValueFacetAbstract impl
         return RegExFacet.class;
     }
 
-    private final String validation;
-    private final String format;
-    private final boolean caseSensitive;
-    private final String replacement;
+    private final String regexp;
+    private final int patternFlags;
+    private final String message;
 
-    public RegExFacetAbstract(final String validation, final String format, final boolean caseSensitive, final FacetHolder holder, final String replacement) {
+    public RegExFacetAbstract(
+            final String regexp,
+            final int patternFlags,
+            final String message,
+            final FacetHolder holder) {
         super(type(), holder);
-        this.validation = validation;
-        this.format = format;
-        this.caseSensitive = caseSensitive;
-        this.replacement = replacement;
+        this.regexp = regexp;
+        this.patternFlags = patternFlags;
+        this.message = message != null ? message : "Doesn't match pattern";
     }
 
-    @Override
-    public String validation() {
-        return validation;
+    private static int asMask(final Pattern.Flag[] flags) {
+        int mask = 0;
+        for (Pattern.Flag flag : flags) {
+            mask |= flag.getValue();
+        }
+        return mask;
+    }
+
+    public RegExFacetAbstract(
+            final String regexp,
+            final Pattern.Flag[] flags,
+            final String message,
+            final FacetHolder holder) {
+        this(regexp, asMask(flags), message, holder);
     }
 
     @Override
-    public String format() {
-        return format;
+    public String regexp() {
+        return regexp;
     }
 
     @Override
-    public boolean caseSensitive() {
-        return caseSensitive;
+    public int patternFlags() {
+        return patternFlags;
     }
 
     @Override
-    public String replacement() {
-        return replacement;
+    public String message() {
+        return message;
     }
 
     // //////////////////////////////////////////////////////////
@@ -83,7 +98,7 @@ public abstract class RegExFacetAbstract extends MultipleValueFacetAbstract impl
             return null;
         }
 
-        return replacement();
+        return message();
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/TitleFacetFormattedByRegex.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/TitleFacetFormattedByRegex.java
deleted file mode 100644
index bf88a2c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/regex/TitleFacetFormattedByRegex.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.objectvalue.regex;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
-
-public class TitleFacetFormattedByRegex extends TitleFacetAbstract {
-
-    private final RegExFacet regexFacet;
-
-    public TitleFacetFormattedByRegex(final RegExFacet regexFacet) {
-        super(regexFacet.getFacetHolder());
-        this.regexFacet = regexFacet;
-    }
-
-    @Override
-    public String title(final ObjectAdapter object) {
-        return regexFacet.format(object.titleString());
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
index 6105075..5bbf69a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
@@ -23,9 +23,9 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 
 import javax.annotation.Nullable;
+import javax.validation.constraints.Pattern;
 
 import org.apache.isis.applib.annotation.Parameter;
-import org.apache.isis.applib.annotation.RegEx;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -35,7 +35,6 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.regex.TitleFacetFormattedByRegex;
 import org.apache.isis.core.metamodel.facets.param.parameter.fileaccept.FileAcceptFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter;
@@ -43,14 +42,11 @@ import org.apache.isis.core.metamodel.facets.param.parameter.maxlen.MaxLengthFac
 import org.apache.isis.core.metamodel.facets.param.parameter.mustsatisfy.MustSatisfySpecificationFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.regex.RegExFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.regex.RegExFacetFromRegExAnnotationOnParameter;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForConflictingOptionality;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 
 public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner {
 
-    private final MetaModelValidatorForDeprecatedAnnotation regexValidator = new MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
     private final MetaModelValidatorForConflictingOptionality conflictingOptionalityValidator = new MetaModelValidatorForConflictingOptionality();
 
     public ParameterAnnotationFacetFactory() {
@@ -119,16 +115,11 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
 
         for (final Annotation parameterAnnotation : parameterAnnotations) {
             final Class<?> parameterType = parameterTypes[paramNum];
-            if (parameterAnnotation instanceof RegEx) {
-                final RegEx annotation = (RegEx) parameterAnnotation;
-                final RegExFacet facet = RegExFacetFromRegExAnnotationOnParameter.create(annotation, parameterType, holder);
-                FacetUtil.addFacet(regexValidator.flagIfPresent(facet, processParameterContext));
-                final RegExFacet regExFacet = facet;
+            if (parameterAnnotation instanceof Pattern) {
 
-                // regex also adds a title facet
-                if(regExFacet != null) {
-                    FacetUtil.addFacet(new TitleFacetFormattedByRegex(regExFacet));
-                }
+                final Pattern annotation = (Pattern) parameterAnnotation;
+                final RegExFacet facet = RegExFacetFromRegExAnnotationOnParameter.create(annotation, parameterType, holder);
+                FacetUtil.addFacet(facet);
                 return;
             }
         }
@@ -197,16 +188,8 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
 
     @Override
     public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(regexValidator);
         metaModelValidator.add(conflictingOptionalityValidator);
     }
 
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = servicesInjector.getConfigurationServiceInternal();
-        regexValidator.setConfiguration(configuration);
-    }
-
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java
index 9527cfa..5b47afd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java
@@ -51,28 +51,21 @@ public class RegExFacetForParameterAnnotation extends RegExFacetAbstract {
         final String replacement = parameter.regexPatternReplacement();
         final int patternFlags = parameter.regexPatternFlags();
 
-        return new RegExFacetForParameterAnnotation(pattern, patternFlags, holder, replacement);
+        return new RegExFacetForParameterAnnotation(pattern, patternFlags, replacement, holder);
     }
 
-    private RegExFacetForParameterAnnotation(final String pattern, final int patternFlags, final FacetHolder holder, final String replacement) {
-        super(pattern, "", false, holder, replacement);
+    private RegExFacetForParameterAnnotation(
+            final String pattern,
+            final int patternFlags,
+            final String replacement,
+            final FacetHolder holder) {
+        super(pattern, patternFlags, replacement, holder);
         this.pattern = Pattern.compile(pattern, patternFlags);
     }
 
-    /**
-     * Unused (for the TitledFacet)
-     */
-    @Override
-    public String format(String text) {
-        return text;
-    }
-
     @Override
     public boolean doesNotMatch(final String text) {
-        if (text == null) {
-            return true;
-        }
-        return !pattern.matcher(text).matches();
+        return text == null || !pattern.matcher(text).matches();
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetFromRegExAnnotationOnParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetFromRegExAnnotationOnParameter.java
index 672c377..65d062d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetFromRegExAnnotationOnParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetFromRegExAnnotationOnParameter.java
@@ -21,21 +21,16 @@ package org.apache.isis.core.metamodel.facets.param.parameter.regex;
 
 import java.util.regex.Pattern;
 
-import org.apache.isis.applib.annotation.RegEx;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacetAbstract;
 
-/**
- * @deprecated
- */
-@Deprecated
 public class RegExFacetFromRegExAnnotationOnParameter extends RegExFacetAbstract {
 
     private final Pattern pattern;
 
-    public static RegExFacet create(final RegEx annotation, final Class<?> parameterType, final FacetHolder holder) {
+    public static RegExFacet create(final javax.validation.constraints.Pattern annotation, final Class<?> parameterType, final FacetHolder holder) {
         if (annotation == null) {
             return null;
         }
@@ -43,40 +38,25 @@ public class RegExFacetFromRegExAnnotationOnParameter extends RegExFacetAbstract
             return null;
         }
 
-        final String validationExpression = annotation.validation();
-        final boolean caseSensitive = annotation.caseSensitive();
-        final String formatExpression = annotation.format();
-        final String replacement = "Doesn't match pattern";
-
-        return new RegExFacetFromRegExAnnotationOnParameter(validationExpression, formatExpression, caseSensitive, holder, replacement);
-    }
+        final String regexp = annotation.regexp();
+        final javax.validation.constraints.Pattern.Flag[] flags = annotation.flags();
+        final String message = annotation.message();
 
-    private RegExFacetFromRegExAnnotationOnParameter(final String validation, final String format, final boolean caseSensitive, final FacetHolder holder, final String replacement) {
-        super(validation, format, caseSensitive, holder, replacement);
-        pattern = Pattern.compile(validation(), patternFlags());
+        return new RegExFacetFromRegExAnnotationOnParameter(regexp, flags, message, holder);
     }
 
-    @Override
-    public String format(final String text) {
-        if (text == null) {
-            return "<not a string>";
-        }
-        if (format() == null || format().length() == 0) {
-            return text;
-        }
-        return pattern.matcher(text).replaceAll(format());
+    private RegExFacetFromRegExAnnotationOnParameter(
+            final String regexp,
+            final javax.validation.constraints.Pattern.Flag[] flags,
+            final String message, final FacetHolder holder) {
+        super(regexp, flags, message, holder);
+        pattern = Pattern.compile(regexp(), patternFlags());
     }
 
     @Override
     public boolean doesNotMatch(final String text) {
-        if (text == null) {
-            return true;
-        }
-        return !pattern.matcher(text).matches();
+        return text == null || !pattern.matcher(text).matches();
     }
 
-    private int patternFlags() {
-        return !caseSensitive() ? Pattern.CASE_INSENSITIVE : 0;
-    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index 5fd35fb..4f18375 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -22,9 +22,9 @@ package org.apache.isis.core.metamodel.facets.properties.property;
 import java.lang.reflect.Method;
 
 import javax.annotation.Nullable;
+import javax.validation.constraints.Pattern;
 
 import org.apache.isis.applib.annotation.Property;
-import org.apache.isis.applib.annotation.RegEx;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -43,7 +43,6 @@ import org.apache.isis.core.metamodel.facets.objectvalue.fileaccept.FileAcceptFa
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.regex.TitleFacetFormattedByRegex;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.core.metamodel.facets.properties.property.command.CommandFacetForPropertyAnnotation;
@@ -68,15 +67,12 @@ import org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFace
 import org.apache.isis.core.metamodel.facets.properties.publish.PublishedPropertyFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForConflictingOptionality;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
 import org.apache.isis.core.metamodel.util.EventUtil;
 
 public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner {
 
-    private final MetaModelValidatorForDeprecatedAnnotation regexValidator = new MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
     private final MetaModelValidatorForConflictingOptionality conflictingOptionalityValidator = new MetaModelValidatorForConflictingOptionality();
 
 
@@ -316,14 +312,9 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
         final Class<?> returnType = processMethodContext.getMethod().getReturnType();
 
-        // check for deprecated @RegEx first
-        final RegEx annotation = Annotations.getAnnotation(processMethodContext.getMethod(), RegEx.class);
-        RegExFacet facet = regexValidator.flagIfPresent(RegExFacetForRegExAnnotationOnProperty.create(annotation, returnType, holder), processMethodContext);
-
-        if (facet != null) {
-            // @RegEx also supports corresponding title facet
-            FacetUtil.addFacet(new TitleFacetFormattedByRegex(facet));
-        }
+        // check for @Pattern first
+        final Pattern annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Pattern.class);
+        RegExFacet facet = RegExFacetForRegExAnnotationOnProperty.create(annotation, returnType, holder);
 
         // else search for @Property(pattern=...)
         final Property property = Annotations.getAnnotation(method, Property.class);
@@ -352,19 +343,9 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
     @Override
     public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(regexValidator);
         metaModelValidator.add(conflictingOptionalityValidator);
     }
 
-    // //////////////////////////////////////
-
 
 
-    @Override
-    public void setServicesInjector(final ServicesInjector servicesInjector) {
-        super.setServicesInjector(servicesInjector);
-        IsisConfiguration configuration = servicesInjector.getConfigurationServiceInternal();
-        regexValidator.setConfiguration(configuration);
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
index 00132f7..fe5637e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
@@ -56,24 +56,13 @@ public class RegExFacetForPropertyAnnotation extends RegExFacetAbstract {
     }
 
     private RegExFacetForPropertyAnnotation(final String pattern, final int patternFlags, final FacetHolder holder, final String replacement) {
-        super(pattern, "", (patternFlags & Pattern.CASE_INSENSITIVE) == Pattern.CASE_INSENSITIVE, holder, replacement);
-        this.pattern = Pattern.compile(pattern, patternFlags);
-    }
-
-    /**
-     * Unused (for the TitledFacet)
-     */
-    @Override
-    public String format(String text) {
-        return text;
+        super(pattern, patternFlags, replacement, holder);
+        this.pattern = Pattern.compile(pattern, patternFlags());
     }
 
     @Override
     public boolean doesNotMatch(final String text) {
-        if (text == null) {
-            return true;
-        }
-        return !pattern.matcher(text).matches();
+        return text == null || !pattern.matcher(text).matches();
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForRegExAnnotationOnProperty.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForRegExAnnotationOnProperty.java
index 7b57768..c4f2374 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForRegExAnnotationOnProperty.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForRegExAnnotationOnProperty.java
@@ -20,21 +20,18 @@
 package org.apache.isis.core.metamodel.facets.properties.property.regex;
 
 import java.util.regex.Pattern;
-import org.apache.isis.applib.annotation.RegEx;
+
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacetAbstract;
 
-/**
- * @deprecated
- */
-@Deprecated
 public class RegExFacetForRegExAnnotationOnProperty extends RegExFacetAbstract {
 
     private final Pattern pattern;
 
-    public static RegExFacet create(final RegEx annotation, final Class<?> returnType, final FacetHolder holder) {
+    public static RegExFacet create(
+            final javax.validation.constraints.Pattern annotation, final Class<?> returnType, final FacetHolder holder) {
 
         if(annotation == null) {
             return null;
@@ -44,29 +41,22 @@ public class RegExFacetForRegExAnnotationOnProperty extends RegExFacetAbstract {
             return null;
         }
 
-        final String validationExpression = annotation.validation();
-        final boolean caseSensitive = annotation.caseSensitive();
-        final String formatExpression = annotation.format();
-        final String replacement = "Doesn't match pattern";
+        final String regexp = annotation.regexp();
+        final javax.validation.constraints.Pattern.Flag[] flags = annotation.flags();
+        final String message = annotation.message();
 
-        return new RegExFacetForRegExAnnotationOnProperty(validationExpression, formatExpression, caseSensitive, holder, replacement);
+        return new RegExFacetForRegExAnnotationOnProperty(regexp, flags, message, holder);
     }
 
-    private RegExFacetForRegExAnnotationOnProperty(final String validation, final String format, final boolean caseSensitive, final FacetHolder holder, final String replacement) {
-        super(validation, format, caseSensitive, holder, replacement);
-        pattern = Pattern.compile(validation(), patternFlags());
+    private RegExFacetForRegExAnnotationOnProperty(
+            final String regexp,
+            final javax.validation.constraints.Pattern.Flag[] flags,
+            final String replacement,
+            final FacetHolder holder) {
+        super(regexp, flags, replacement, holder);
+        pattern = Pattern.compile(regexp(), patternFlags());
     }
 
-    @Override
-    public String format(final String text) {
-        if (text == null) {
-            return "<not a string>";
-        }
-        if (format() == null || format().length() == 0) {
-            return text;
-        }
-        return pattern.matcher(text).replaceAll(format());
-    }
 
     @Override
     public boolean doesNotMatch(final String text) {
@@ -76,8 +66,4 @@ public class RegExFacetForRegExAnnotationOnProperty extends RegExFacetAbstract {
         return !pattern.matcher(text).matches();
     }
 
-    private int patternFlags() {
-        return !caseSensitive() ? Pattern.CASE_INSENSITIVE : 0;
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 840ffd3..43f4e60 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -91,7 +91,6 @@ import org.apache.isis.core.metamodel.facets.object.plural.staticmethod.PluralFa
 import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnCollectionDerivedFromViewModelFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.recreatable.RecreatableObjectFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.regex.annotation.RegExFacetOnTypeAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.title.annotation.TitleAnnotationFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaMethodsFactory;
 import org.apache.isis.core.metamodel.facets.object.validating.validateobject.method.ValidateObjectFacetMethodFactory;
@@ -354,8 +353,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
 
         // must come after any facets that install titles
         
-        addFactory(new RegExFacetOnTypeAnnotationFactory());
-
         addFactory(new TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory());
         addFactory(new TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory());
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java
index dfef437..c1c50e6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactoryTest.java
@@ -300,8 +300,8 @@ public class ParameterAnnotationFacetFactoryTest extends AbstractFacetFactoryJUn
             final RegExFacet regExFacet = facetedMethodParameter.getFacet(RegExFacet.class);
             Assert.assertNotNull(regExFacet);
             Assert.assertTrue(regExFacet instanceof RegExFacetForParameterAnnotation);
-            assertThat(regExFacet.caseSensitive(), is(false));
-            assertThat(regExFacet.validation(), is("[123].*"));
+            assertThat(regExFacet.patternFlags(), is(10));
+            assertThat(regExFacet.regexp(), is("[123].*"));
         }
 
         @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java
index b77b3b2..dad822b 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/RegExAnnotationOnParameterFacetFactoryTest.java
@@ -20,8 +20,11 @@
 package org.apache.isis.core.metamodel.facets.param.parameter;
 
 import java.lang.reflect.Method;
+
+import javax.validation.constraints.Pattern;
+
 import org.junit.Before;
-import org.apache.isis.applib.annotation.RegEx;
+
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessParameterContext;
@@ -42,7 +45,7 @@ public class RegExAnnotationOnParameterFacetFactoryTest extends AbstractFacetFac
 
         class Customer {
             @SuppressWarnings("unused")
-            public void someAction(@RegEx(validation = "^A.*", caseSensitive = false) final String foo) {
+            public void someAction(@Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE }) final String foo) {
             }
         }
         final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class });
@@ -53,15 +56,15 @@ public class RegExAnnotationOnParameterFacetFactoryTest extends AbstractFacetFac
         assertNotNull(facet);
         assertTrue(facet instanceof RegExFacetFromRegExAnnotationOnParameter);
         final RegExFacetFromRegExAnnotationOnParameter regExFacet = (RegExFacetFromRegExAnnotationOnParameter) facet;
-        assertEquals("^A.*", regExFacet.validation());
-        assertEquals(false, regExFacet.caseSensitive());
+        assertEquals("^A.*", regExFacet.regexp());
+        assertEquals(2, regExFacet.patternFlags());
     }
 
     public void testRegExAnnotationIgnoredForPrimitiveOnActionParameter() {
 
         class Customer {
             @SuppressWarnings("unused")
-            public void someAction(@RegEx(validation = "^A.*", caseSensitive = false) final int foo) {
+            public void someAction(final int foo) {
             }
         }
         final Method method = findMethod(Customer.class, "someAction", new Class[] { int.class });
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index c8ccc7e..f181d7a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -22,8 +22,6 @@ import java.lang.reflect.Method;
 import java.util.List;
 import java.util.regex.Pattern;
 
-import javax.annotation.meta.When;
-
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.junit.After;
@@ -712,8 +710,8 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
             final RegExFacet regExFacet = facetedMethod.getFacet(RegExFacet.class);
             Assert.assertNotNull(regExFacet);
             Assert.assertTrue(regExFacet instanceof RegExFacetForPropertyAnnotation);
-            assertThat(regExFacet.caseSensitive(), is(true));
-            assertThat(regExFacet.validation(), is("[123].*"));
+            assertThat(regExFacet.patternFlags(), is(10));
+            assertThat(regExFacet.regexp(), is("[123].*"));
         }
 
         @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java
index 80f7cdd..ae80d5a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/RegExAnnotationOnPropertyFacetFactoryTest.java
@@ -20,8 +20,11 @@
 package org.apache.isis.core.metamodel.facets.properties.property;
 
 import java.lang.reflect.Method;
+
+import javax.validation.constraints.Pattern;
+
 import org.junit.Before;
-import org.apache.isis.applib.annotation.RegEx;
+
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
@@ -42,7 +45,7 @@ public class RegExAnnotationOnPropertyFacetFactoryTest extends AbstractFacetFact
 
         class Customer {
             @SuppressWarnings("unused")
-            @RegEx(validation = "^A.*", caseSensitive = false)
+            @Pattern(regexp = "^A.*", flags = { Pattern.Flag.CASE_INSENSITIVE })
             public String getFirstName() {
                 return null;
             }
@@ -55,15 +58,14 @@ public class RegExAnnotationOnPropertyFacetFactoryTest extends AbstractFacetFact
         assertNotNull(facet);
         assertTrue(facet instanceof RegExFacetForRegExAnnotationOnProperty);
         final RegExFacetForRegExAnnotationOnProperty regExFacet = (RegExFacetForRegExAnnotationOnProperty) facet;
-        assertEquals("^A.*", regExFacet.validation());
-        assertEquals(false, regExFacet.caseSensitive());
+        assertEquals("^A.*", regExFacet.regexp());
+        assertEquals(2, regExFacet.patternFlags());
     }
 
     public void testRegExAnnotationIgnoredForNonStringsProperty() {
 
         class Customer {
             @SuppressWarnings("unused")
-            @RegEx(validation = "^A.*", caseSensitive = false)
             public int getNumberOfOrders() {
                 return 0;
             }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/validate/regex/RegExAnnotationOnTypeFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/validate/regex/RegExAnnotationOnTypeFacetFactoryTest.java
deleted file mode 100644
index c5a3d20..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/validate/regex/RegExAnnotationOnTypeFacetFactoryTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.propparam.validate.regex;
-
-import org.apache.isis.applib.annotation.RegEx;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
-import org.apache.isis.core.metamodel.facets.object.regex.annotation.RegExFacetOnTypeAnnotation;
-import org.apache.isis.core.metamodel.facets.object.regex.annotation.RegExFacetOnTypeAnnotationFactory;
-
-public class RegExAnnotationOnTypeFacetFactoryTest extends AbstractFacetFactoryTest {
-
-    public void testRegExAnnotationPickedUpOnClass() {
-        final RegExFacetOnTypeAnnotationFactory facetFactory = new RegExFacetOnTypeAnnotationFactory();
-
-        @RegEx(validation = "^A.*", caseSensitive = false)
-        class Customer {
-        }
-        facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
-
-        final Facet facet = facetedMethod.getFacet(RegExFacet.class);
-        assertNotNull(facet);
-        assertTrue(facet instanceof RegExFacetOnTypeAnnotation);
-        final RegExFacetOnTypeAnnotation regExFacet = (RegExFacetOnTypeAnnotation) facet;
-        assertEquals("^A.*", regExFacet.validation());
-        assertEquals(false, regExFacet.caseSensitive());
-    }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/validate/regex/RegExFacetAnnotationTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/validate/regex/RegExFacetAnnotationTest.java
deleted file mode 100644
index a896216..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/validate/regex/RegExFacetAnnotationTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.propparam.validate.regex;
-
-import org.jmock.Mockery;
-import org.jmock.integration.junit4.JMock;
-import org.jmock.integration.junit4.JUnit4Mockery;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.regex.annotation.RegExFacetOnTypeAnnotation;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
-
-@RunWith(JMock.class)
-public class RegExFacetAnnotationTest {
-
-    private final Mockery context = new JUnit4Mockery();
-
-    private RegExFacetOnTypeAnnotation regExFacetOnTypeAnnotation;
-    private FacetHolder facetHolder;
-
-    @Before
-    public void setUp() throws Exception {
-        facetHolder = context.mock(FacetHolder.class);
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        facetHolder = null;
-        regExFacetOnTypeAnnotation = null;
-    }
-
-    @Test
-    public void shouldBeAbleToInstantiate() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation(".*", "", true, facetHolder, null);
-    }
-
-    @Test
-    public void shouldAllowDotStar() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation(".*", "", true, facetHolder, null);
-        assertThat(regExFacetOnTypeAnnotation.doesNotMatch("abc"), equalTo(false)); // ie
-                                                                                     // does
-                                                                                     // match
-    }
-
-    @Test
-    public void shouldAllowWhenCaseSensitive() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation("^abc$", "", true, facetHolder, null);
-        assertThat(regExFacetOnTypeAnnotation.doesNotMatch("abc"), equalTo(false)); // ie
-                                                                                     // does
-                                                                                     // match
-    }
-
-    @Test
-    public void shouldAllowWhenCaseInsensitive() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation("^abc$", "", false, facetHolder, null);
-        assertThat(regExFacetOnTypeAnnotation.doesNotMatch("ABC"), equalTo(false)); // ie
-                                                                                     // does
-                                                                                     // match
-    }
-
-    @Test
-    public void shouldDisallowWhenCaseSensitive() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation("^abc$", "", true, facetHolder, null);
-        assertThat(regExFacetOnTypeAnnotation.doesNotMatch("abC"), equalTo(true));
-    }
-
-    @Test
-    public void shouldDisallowWhenCaseInsensitive() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation("^abc$", "", false, facetHolder, null);
-        assertThat(regExFacetOnTypeAnnotation.doesNotMatch("aBd"), equalTo(true));
-    }
-
-    @Test
-    public void shouldReformat() {
-        regExFacetOnTypeAnnotation = new RegExFacetOnTypeAnnotation("^([0-9]{2})([0-9]{2})([0-9]{2})$", "$1-$2-$3", false, facetHolder, null);
-        assertThat(regExFacetOnTypeAnnotation.doesNotMatch("123456"), equalTo(false));
-        assertThat(regExFacetOnTypeAnnotation.format("123456"), equalTo("12-34-56"));
-    }
-}
diff --git a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
index 40708dd..b8bbcfa 100644
--- a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
+++ b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
@@ -96,7 +96,9 @@ public class HelloWorldObject implements Comparable<HelloWorldObject> {
 
     @Override
     public int compareTo(final HelloWorldObject other) {
-        return Ordering.natural().onResultOf(HelloWorldObject::getName).compare(this, other);
+        return Ordering.natural()
+                .onResultOf(HelloWorldObject::getName)
+                .compare(this, other);
     }
 
 

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.