http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter.java
deleted file mode 100644
index 545fb23..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter.java
+++ /dev/null
@@ -1,52 +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.param.validating.mustsatisfyspec;
-
-import java.util.List;
-import com.google.common.collect.Lists;
-import org.apache.isis.applib.annotation.MustSatisfy;
-import org.apache.isis.applib.spec.Specification;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propparam.mustsatisfyspec.MustSatisfySpecificationFacetAbstract;
-
-public class MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter 
extends MustSatisfySpecificationFacetAbstract {
-
-
-    public static Facet create(final MustSatisfy annotation, final FacetHolder 
holder) {
-        if (annotation == null) {
-            return null;
-        }
-        final Class<?>[] values = annotation.value();
-        final List<Specification> specifications = Lists.newArrayList();
-        for (final Class<?> value : values) {
-            final Specification specification = 
newSpecificationElseNull(value);
-            if (specification != null) {
-                specifications.add(specification);
-            }
-        }
-        return specifications.size() > 0 ? new 
MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter(specifications,
 holder) : null;
-    }
-
-    private 
MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter(final 
List<Specification> specifications, final FacetHolder holder) {
-        super(specifications, holder);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationOnParameterFacetFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationOnParameterFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationOnParameterFacetFactory.java
deleted file mode 100644
index f0953d2..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/mustsatisfyspec/MustSatisfySpecificationOnParameterFacetFactory.java
+++ /dev/null
@@ -1,65 +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.param.validating.mustsatisfyspec;
-
-import java.lang.annotation.Annotation;
-import org.apache.isis.applib.annotation.MustSatisfy;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class MustSatisfySpecificationOnParameterFacetFactory extends 
FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(MustSatisfy.class);
-
-    public MustSatisfySpecificationOnParameterFacetFactory() {
-        super(FeatureType.PARAMETERS_ONLY);
-    }
-
-    @Override
-    public void processParams(final ProcessParameterContext 
processParameterContext) {
-        final java.lang.annotation.Annotation[] parameterAnnotations = 
Annotations.getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
-
-        for (final Annotation parameterAnnotation : parameterAnnotations) {
-            if (parameterAnnotation instanceof MustSatisfy) {
-                final MustSatisfy annotation = (MustSatisfy) 
parameterAnnotation;
-                
validator.addFacet(MustSatisfySpecificationFacetForMustSatisfyAnnotationOnParameter.create(annotation,
 processParameterContext.getFacetHolder()));
-                return;
-            }
-        }
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
deleted file mode 100644
index 4dd4c22..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetFacetOnParameterAnnotationFactory.java
+++ /dev/null
@@ -1,105 +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.param.validating.regexannot;
-
-import java.lang.annotation.Annotation;
-import org.apache.isis.applib.annotation.RegEx;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.object.regex.RegExFacet;
-import 
org.apache.isis.core.metamodel.facets.object.regex.TitleFacetFormattedByRegex;
-import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class RegExFacetFacetOnParameterAnnotationFactory extends 
FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
-
-    public RegExFacetFacetOnParameterAnnotationFactory() {
-        super(FeatureType.PARAMETERS_ONLY);
-    }
-
-    @Override
-    public void processParams(final ProcessParameterContext 
processParameterContext) {
-        final Class<?>[] parameterTypes = 
processParameterContext.getMethod().getParameterTypes();
-        if (processParameterContext.getParamNum() >= parameterTypes.length) {
-            // ignore
-            return;
-        }
-        if 
(!Annotations.isString(parameterTypes[processParameterContext.getParamNum()])) {
-            return;
-        }
-
-        final Annotation[] parameterAnnotations = 
Annotations.getParameterAnnotations(processParameterContext.getMethod())[processParameterContext.getParamNum()];
-        for (final Annotation parameterAnnotation : parameterAnnotations) {
-            if (parameterAnnotation instanceof RegEx) {
-                final RegEx annotation = (RegEx) parameterAnnotation;
-                
addRegexFacetAndCorrespondingTitleFacet(processParameterContext.getFacetHolder(),
 annotation);
-                return;
-            }
-        }
-    }
-
-    private void addRegexFacetAndCorrespondingTitleFacet(final FacetHolder 
holder, final RegEx annotation) {
-        final RegExFacet regexFacet = 
validator.flagIfPresent(createRegexFacet(annotation, holder));
-        if (regexFacet == null) {
-            return;
-        }
-        FacetUtil.addFacet(regexFacet);
-
-        final TitleFacet titleFacet = createTitleFacet(regexFacet);
-        FacetUtil.addFacet(titleFacet);
-    }
-
-    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();
-
-        return new RegExFacetOnParameterAnnotation(validationExpression, 
formatExpression, caseSensitive, holder);
-    }
-
-    private TitleFacet createTitleFacet(final RegExFacet regexFacet) {
-        return new TitleFacetFormattedByRegex(regexFacet);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetOnParameterAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetOnParameterAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetOnParameterAnnotation.java
deleted file mode 100644
index 726620e..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/validating/regexannot/RegExFacetOnParameterAnnotation.java
+++ /dev/null
@@ -1,59 +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.param.validating.regexannot;
-
-import java.util.regex.Pattern;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.regex.RegExFacetAbstract;
-
-public class RegExFacetOnParameterAnnotation extends RegExFacetAbstract {
-
-    private final Pattern pattern;
-
-    public RegExFacetOnParameterAnnotation(final String validation, final 
String format, final boolean caseSensitive, final FacetHolder holder) {
-        super(validation, format, caseSensitive, holder);
-        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;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotation.java
deleted file mode 100644
index 554695d..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotation.java
+++ /dev/null
@@ -1,43 +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.properties.mandatory.annotation.mandatory;
-
-import org.apache.isis.applib.annotation.Mandatory;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacet;
-import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacetAbstract;
-
-/**
- * Derived by presence of an <tt>@Mandatory</tt> annotation.
- * 
- * <p>
- * This implementation indicates that the {@link FacetHolder} <i>is</i> 
- * mandatory.
- */
-public class MandatoryFacetOnPropertyMandatoryAnnotation extends 
MandatoryFacetAbstract {
-
-    public MandatoryFacetOnPropertyMandatoryAnnotation(final FacetHolder 
holder) {
-        super(holder, Semantics.REQUIRED);
-    }
-
-    static MandatoryFacet create(final Mandatory annotation, final FacetHolder 
holder) {
-        return new MandatoryFacetOnPropertyMandatoryAnnotation(holder);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotationFactory.java
deleted file mode 100644
index ed1e384..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/mandatory/MandatoryFacetOnPropertyMandatoryAnnotationFactory.java
+++ /dev/null
@@ -1,59 +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.properties.mandatory.annotation.mandatory;
-
-import org.apache.isis.applib.annotation.Mandatory;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class MandatoryFacetOnPropertyMandatoryAnnotationFactory extends 
FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(Mandatory.class);
-
-    public MandatoryFacetOnPropertyMandatoryAnnotationFactory() {
-        super(FeatureType.PROPERTIES_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final Mandatory annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Mandatory.class);
-        if(annotation == null) {
-            return;
-        }
-        
validator.addFacet(MandatoryFacetOnPropertyMandatoryAnnotation.create(annotation,
 processMethodContext.getFacetHolder()));
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotation.java
deleted file mode 100644
index 59294e6..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotation.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.properties.mandatory.annotation.optional;
-
-import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.Optional;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacet;
-import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacetAbstract;
-
-/**
- * Derived by presence of an <tt>@Optional</tt> annotation.
- * 
- * <p>
- * This implementation indicates that the {@link FacetHolder} is <i>not</i>
- * mandatory, as per {@link #isInvertedSemantics()}.
- */
-public class MandatoryFacetOnPropertyInvertedByOptionalAnnotation extends 
MandatoryFacetAbstract {
-
-    public MandatoryFacetOnPropertyInvertedByOptionalAnnotation(final 
FacetHolder holder) {
-        super(holder, Semantics.OPTIONAL);
-    }
-
-    static MandatoryFacet create(final Optional annotation, Method method, 
final FacetHolder holder) {
-        final Class<?> returnType = method.getReturnType();
-        if (returnType.isPrimitive()) {
-            return null;
-        }
-        return new 
MandatoryFacetOnPropertyInvertedByOptionalAnnotation(holder);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory.java
deleted file mode 100644
index b17590a..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/annotation/optional/MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory.java
+++ /dev/null
@@ -1,66 +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.properties.mandatory.annotation.optional;
-
-import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.Optional;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.FacetedMethod;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory 
extends FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(Optional.class);
-
-
-    public MandatoryFacetOnPropertyInvertedByOptionalAnnotationFactory() {
-        super(FeatureType.PROPERTIES_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final Method method = processMethodContext.getMethod();
-        final Optional annotation = Annotations.getAnnotation(method, 
Optional.class);
-        if(annotation == null) {
-            return;
-        }
-        final FacetedMethod facetHolder = 
processMethodContext.getFacetHolder();
-
-        validator.addFacet(
-                
MandatoryFacetOnPropertyInvertedByOptionalAnnotation.create(annotation, method, 
facetHolder));
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/staticmethod/MandatoryFacetOnPropertyStaticMethodFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/staticmethod/MandatoryFacetOnPropertyStaticMethodFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/staticmethod/MandatoryFacetOnPropertyStaticMethodFactory.java
index 34c9c1d..3fb2289 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/staticmethod/MandatoryFacetOnPropertyStaticMethodFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/mandatory/staticmethod/MandatoryFacetOnPropertyStaticMethodFactory.java
@@ -68,7 +68,7 @@ public class MandatoryFacetOnPropertyStaticMethodFactory 
extends MethodPrefixBas
             throw new MetaModelException(cls.getName() + "#" + capitalizedName 
+ " cannot be an optional property as it is of a primitive type");
         }
         final FacetHolder property = processMethodContext.getFacetHolder();
-        validator.addFacet(new MandatoryFacetOnPropertyStaticMethod(property));
+        validator.addFacetFlagIfPresent(new 
MandatoryFacetOnPropertyStaticMethod(property));
     }
 
     private static boolean indicatesOptional(final Method method) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
index 4f5c756..0bc2929 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/multiline/annotation/MultiLineFacetOnPropertyFactory.java
@@ -37,7 +37,7 @@ import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorFor
 
 public class MultiLineFacetOnPropertyFactory extends FacetFactoryAbstract 
implements ContributeeMemberFacetFactory, MetaModelValidatorRefiner, 
IsisConfigurationAware {
 
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(MultiLine.class);
+    private final MetaModelValidatorForDeprecatedAnnotation multiLineValidator 
= new MetaModelValidatorForDeprecatedAnnotation(MultiLine.class);
 
     public MultiLineFacetOnPropertyFactory() {
         super(FeatureType.PROPERTIES_ONLY);
@@ -47,17 +47,17 @@ public class MultiLineFacetOnPropertyFactory extends 
FacetFactoryAbstract implem
     public void process(final ProcessMethodContext processMethodContext) {
         MultiLineFacet facet = 
createFromMetadataPropertiesIfPossible(processMethodContext);
         if(facet == null) {
-            facet = 
validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
+            facet = 
multiLineValidator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext));
         }
         
         // no-op if null
         FacetUtil.addFacet(facet);
 
         // no-op if null
-        inferPropParamLayoutFacet(facet);
+        inferLabelAtFacet(facet);
     }
 
-    private static void inferPropParamLayoutFacet(MultiLineFacet facet) {
+    private static void inferLabelAtFacet(MultiLineFacet facet) {
         if (facet == null) {
             return;
         }
@@ -71,9 +71,9 @@ public class MultiLineFacetOnPropertyFactory extends 
FacetFactoryAbstract implem
     
     private static MultiLineFacet createFromMetadataPropertiesIfPossible(
             final ProcessContextWithMetadataProperties<? extends FacetHolder> 
pcwmp) {
-        
+
         final FacetHolder holder = pcwmp.getFacetHolder();
-        
+
         final Properties properties = pcwmp.metadataProperties("multiLine");
         return properties != null ? new 
MultiLineFacetOnPropertyFromProperties(properties, holder) : null;
     }
@@ -89,12 +89,12 @@ public class MultiLineFacetOnPropertyFactory extends 
FacetFactoryAbstract implem
 
     @Override
     public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
+        metaModelValidator.add(multiLineValidator);
     }
 
     @Override
     public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
+        multiLineValidator.setConfiguration(configuration);
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotation.java
deleted file mode 100644
index 65085fd..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotation.java
+++ /dev/null
@@ -1,36 +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.properties.notpersisted.annotation;
-
-import org.apache.isis.applib.annotation.NotPersisted;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
-
-public class NotPersistedFacetOnPropertyAnnotation extends 
NotPersistedFacetAbstract {
-
-    public NotPersistedFacetOnPropertyAnnotation(final FacetHolder holder) {
-        super(holder);
-    }
-
-    static NotPersistedFacet create(final NotPersisted annotation, final 
FacetHolder holder) {
-        return annotation == null ? null : new 
NotPersistedFacetOnPropertyAnnotation(holder);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotationFactory.java
deleted file mode 100644
index b685d54..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/notpersisted/annotation/NotPersistedFacetOnPropertyAnnotationFactory.java
+++ /dev/null
@@ -1,58 +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.properties.notpersisted.annotation;
-
-import org.apache.isis.applib.annotation.NotPersisted;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-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.propcoll.notpersisted.NotPersistedFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class NotPersistedFacetOnPropertyAnnotationFactory extends 
FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(NotPersisted.class);
-
-    public NotPersistedFacetOnPropertyAnnotationFactory() {
-        super(FeatureType.PROPERTIES_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final NotPersisted annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), NotPersisted.class);
-        final NotPersistedFacet notPersistedFacet = 
NotPersistedFacetOnPropertyAnnotation.create(annotation, 
processMethodContext.getFacetHolder());
-        validator.addFacet(notPersistedFacet);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
----------------------------------------------------------------------
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 68962d4..172fb9d 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
@@ -20,9 +20,17 @@
 package org.apache.isis.core.metamodel.facets.properties.property;
 
 import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.Disabled;
+import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.applib.annotation.Mandatory;
+import org.apache.isis.applib.annotation.MaxLength;
+import org.apache.isis.applib.annotation.MustSatisfy;
+import org.apache.isis.applib.annotation.NotPersisted;
+import org.apache.isis.applib.annotation.Optional;
 import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyInteraction;
+import org.apache.isis.applib.annotation.RegEx;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -38,9 +46,15 @@ import 
org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import 
org.apache.isis.core.metamodel.facets.members.disabled.annotprop.DisabledFacetAnnotation;
+import 
org.apache.isis.core.metamodel.facets.members.hidden.annotprop.HiddenFacetOnMemberAnnotation;
 import org.apache.isis.core.metamodel.facets.object.regex.RegExFacet;
+import 
org.apache.isis.core.metamodel.facets.object.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.mandatory.MandatoryFacetForMandatoryAnnotationOnProperty;
+import 
org.apache.isis.core.metamodel.facets.properties.property.notpersisted.NotPersistedFacetForNotPersistedAnnotationOnProperty;
+import 
org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByOptionalAnnotationOnProperty;
 import 
org.apache.isis.core.metamodel.facets.properties.property.disabled.DisabledFacetForPropertyAnnotation;
 import 
org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation;
 import 
org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation;
@@ -61,11 +75,14 @@ import 
org.apache.isis.core.metamodel.facets.properties.property.modify.Property
 import 
org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation;
 import 
org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyInteractionAnnotation;
 import 
org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForPostsPropertyChangedEventAnnotation;
+import 
org.apache.isis.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty;
 import 
org.apache.isis.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation;
 import 
org.apache.isis.core.metamodel.facets.properties.property.notpersisted.NotPersistedFacetForPropertyAnnotation;
 import 
org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetForPropertyAnnotation;
+import 
org.apache.isis.core.metamodel.facets.properties.property.regex.RegExFacetFromRegExAnnotationOnProperty;
 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.facets.properties.property.maxlength.MaxLengthFacetForMaxLengthAnnotationOnProperty;
 import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -78,6 +95,14 @@ public class PropertyAnnotationFacetFactory extends 
FacetFactoryAbstract impleme
 
     private final MetaModelValidatorForDeprecatedAnnotation 
postsPropertyChangedEventValidator = new 
MetaModelValidatorForDeprecatedAnnotation(PostsPropertyChangedEvent.class);
     private final MetaModelValidatorForDeprecatedAnnotation 
propertyInteractionValidator = new 
MetaModelValidatorForDeprecatedAnnotation(PropertyInteraction.class);
+    private final MetaModelValidatorForDeprecatedAnnotation regexValidator = 
new MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
+    private final MetaModelValidatorForDeprecatedAnnotation optionalValidator 
= new MetaModelValidatorForDeprecatedAnnotation(Optional.class);
+    private final MetaModelValidatorForDeprecatedAnnotation mandatoryValidator 
= new MetaModelValidatorForDeprecatedAnnotation(Mandatory.class);
+    private final MetaModelValidatorForDeprecatedAnnotation hiddenValidator = 
new MetaModelValidatorForDeprecatedAnnotation(Hidden.class);
+    private final MetaModelValidatorForDeprecatedAnnotation disabledValidator 
= new MetaModelValidatorForDeprecatedAnnotation(Disabled.class);
+    private final MetaModelValidatorForDeprecatedAnnotation maxLengthValidator 
= new MetaModelValidatorForDeprecatedAnnotation(MaxLength.class);
+    private final MetaModelValidatorForDeprecatedAnnotation 
mustSatisfyValidator = new 
MetaModelValidatorForDeprecatedAnnotation(MustSatisfy.class);
+    private final MetaModelValidatorForDeprecatedAnnotation 
notPersistedValidator = new 
MetaModelValidatorForDeprecatedAnnotation(NotPersisted.class);
 
     private ServicesInjector servicesInjector;
 
@@ -88,7 +113,7 @@ public class PropertyAnnotationFacetFactory extends 
FacetFactoryAbstract impleme
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
-        processModify(processMethodContext);
+        processDomainEvent(processMethodContext);
         processHidden(processMethodContext);
         processEditing(processMethodContext);
         processMaxLength(processMethodContext);
@@ -98,10 +123,9 @@ public class PropertyAnnotationFacetFactory extends 
FacetFactoryAbstract impleme
         processRegEx(processMethodContext);
     }
 
-    void processModify(final ProcessMethodContext processMethodContext) {
+    void processDomainEvent(final ProcessMethodContext processMethodContext) {
 
         final Method method = processMethodContext.getMethod();
-        final Class<?> declaringClass = method.getDeclaringClass();
         final FacetedMethod holder = processMethodContext.getFacetHolder();
 
         final PropertyOrCollectionAccessorFacet getterFacet = 
holder.getFacet(PropertyOrCollectionAccessorFacet.class);
@@ -215,79 +239,137 @@ public class PropertyAnnotationFacetFactory extends 
FacetFactoryAbstract impleme
 
     void processHidden(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        final HiddenFacet facet = 
HiddenFacetForPropertyAnnotation.create(property, holder);
+        // check for deprecated @Hidden first
+        final Hidden hiddenAnnotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), Hidden.class);
+        HiddenFacet facet = 
hiddenValidator.flagIfPresent(HiddenFacetOnMemberAnnotation.create(hiddenAnnotation,
 holder));
+
+        // else search for @Property(hidden=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if(facet == null) {
+            facet = HiddenFacetForPropertyAnnotation.create(property, holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
     void processEditing(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        final DisabledFacet facet = 
DisabledFacetForPropertyAnnotation.create(property, holder);
+        // check for deprecated @Disabled first
+        final Disabled annotation = Annotations.getAnnotation(method, 
Disabled.class);
+        DisabledFacet facet = 
disabledValidator.flagIfPresent(DisabledFacetAnnotation.create(annotation, 
holder));
+
+        // else search for @Property(editing=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if(facet == null) {
+            facet = DisabledFacetForPropertyAnnotation.create(property, 
holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
     void processMaxLength(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        final MaxLengthFacet facet = 
MaxLengthFacetForPropertyAnnotation.create(property, holder);
+        // check for deprecated @MaxLength first
+        final MaxLength annotation = Annotations.getAnnotation(method, 
MaxLength.class);
+        MaxLengthFacet facet = 
maxLengthValidator.addFacetFlagIfPresent(MaxLengthFacetForMaxLengthAnnotationOnProperty.create(annotation,
 holder));
+
+        // else search for @Property(maxLength=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if(facet == null) {
+            facet = MaxLengthFacetForPropertyAnnotation.create(property, 
holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
     void processMustSatisfy(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        final Facet facet = 
MustSatisfySpecificationFacetForPropertyAnnotation.create(property, holder);
+        // check for deprecated @MustSatisfy first
+        final MustSatisfy annotation = Annotations.getAnnotation(method, 
MustSatisfy.class);
+        Facet facet = 
mustSatisfyValidator.addFacetFlagIfPresent(MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.create(annotation,
 holder));
+
+        // else search for @Property(mustSatisfy=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if(facet == null) {
+            facet = 
MustSatisfySpecificationFacetForPropertyAnnotation.create(property, holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
     void processNotPersisted(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        final NotPersistedFacet facet = 
NotPersistedFacetForPropertyAnnotation.create(property, holder);
+        // check for deprecated @NotPersisted first
+        final NotPersisted annotation = Annotations.getAnnotation(method, 
NotPersisted.class);
+        NotPersistedFacet facet = 
notPersistedValidator.addFacetFlagIfPresent(NotPersistedFacetForNotPersistedAnnotationOnProperty.create(annotation,
 holder));
+
+        // else search for @Property(notPersisted=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if(facet == null) {
+            facet = NotPersistedFacetForPropertyAnnotation.create(property, 
holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
     void processOptional(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        final MandatoryFacet facet = 
MandatoryFacetForPropertyAnnotation.create(property, method, holder);
+        // check for deprecated @Optional first
+        final Optional annotation = Annotations.getAnnotation(method, 
Optional.class);
+        MandatoryFacet facet = 
optionalValidator.flagIfPresent(MandatoryFacetInvertedByOptionalAnnotationOnProperty.create(annotation,
 method, holder));
+
+        // else check for deprecated @Mandatory first
+        Mandatory mandatoryAnnotation = Annotations.getAnnotation(method, 
Mandatory.class);
+        if(facet == null) {
+            facet = 
mandatoryValidator.flagIfPresent(MandatoryFacetForMandatoryAnnotationOnProperty.create(mandatoryAnnotation,
 holder));
+        }
+
+        // else search for @Property(optional=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if(facet == null) {
+            facet = MandatoryFacetForPropertyAnnotation.create(property, 
method, holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
     void processRegEx(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
-        final Property property = Annotations.getAnnotation(method, 
Property.class);
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
         final Class<?> returnType = 
processMethodContext.getMethod().getReturnType();
-        if (!Annotations.isString(returnType)) {
-            return;
+
+        // check for deprecated @RegEx first
+        final RegEx annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), RegEx.class);
+        RegExFacet facet = 
regexValidator.flagIfPresent(RegExFacetFromRegExAnnotationOnProperty.create(annotation,
 returnType, holder));
+
+        if (facet != null) {
+            // @RegEx also supports corresponding title facet
+            FacetUtil.addFacet(new TitleFacetFormattedByRegex(facet));
         }
 
-        final RegExFacet facet = 
RegExFacetForPropertyAnnotation.create(property, holder);
+        // else search for @Property(pattern=...)
+        final Property property = Annotations.getAnnotation(method, 
Property.class);
+        if (facet == null) {
+            facet = RegExFacetForPropertyAnnotation.create(property, 
returnType, holder);
+        }
 
         FacetUtil.addFacet(facet);
     }
 
+    // //////////////////////////////////////
 
     @Override
     public void process(final 
ContributeeMemberFacetFactory.ProcessContributeeMemberContext 
processMemberContext) {
@@ -317,6 +399,14 @@ public class PropertyAnnotationFacetFactory extends 
FacetFactoryAbstract impleme
     public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
         metaModelValidator.add(postsPropertyChangedEventValidator);
         metaModelValidator.add(propertyInteractionValidator);
+        metaModelValidator.add(regexValidator);
+        metaModelValidator.add(optionalValidator);
+        metaModelValidator.add(mandatoryValidator);
+        metaModelValidator.add(hiddenValidator);
+        metaModelValidator.add(disabledValidator);
+        metaModelValidator.add(maxLengthValidator);
+        metaModelValidator.add(mustSatisfyValidator);
+        metaModelValidator.add(notPersistedValidator);
     }
 
     // //////////////////////////////////////
@@ -326,6 +416,14 @@ public class PropertyAnnotationFacetFactory extends 
FacetFactoryAbstract impleme
     public void setConfiguration(final IsisConfiguration configuration) {
         postsPropertyChangedEventValidator.setConfiguration(configuration);
         propertyInteractionValidator.setConfiguration(configuration);
+        regexValidator.setConfiguration(configuration);
+        optionalValidator.setConfiguration(configuration);
+        mandatoryValidator.setConfiguration(configuration);
+        hiddenValidator.setConfiguration(configuration);
+        disabledValidator.setConfiguration(configuration);
+        maxLengthValidator.setConfiguration(configuration);
+        mustSatisfyValidator.setConfiguration(configuration);
+        notPersistedValidator.setConfiguration(configuration);
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForMandatoryAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForMandatoryAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForMandatoryAnnotationOnProperty.java
new file mode 100644
index 0000000..8413be0
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetForMandatoryAnnotationOnProperty.java
@@ -0,0 +1,48 @@
+/*
+ *  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.properties.property.mandatory;
+
+import org.apache.isis.applib.annotation.Mandatory;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacet;
+import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacetAbstract;
+
+/**
+ * Derived by presence of an <tt>@Mandatory</tt> annotation.
+ * 
+ * <p>
+ * This implementation indicates that the {@link FacetHolder} <i>is</i> 
+ * mandatory.
+ */
+public class MandatoryFacetForMandatoryAnnotationOnProperty extends 
MandatoryFacetAbstract {
+
+    public static MandatoryFacet create(final Mandatory annotation, final 
FacetHolder holder) {
+        if(annotation == null) {
+            return null;
+        }
+        return new MandatoryFacetForMandatoryAnnotationOnProperty(holder);
+    }
+
+    private MandatoryFacetForMandatoryAnnotationOnProperty(final FacetHolder 
holder) {
+        super(holder, Semantics.REQUIRED);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java
new file mode 100644
index 0000000..20e5c69
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java
@@ -0,0 +1,48 @@
+/*
+ *  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.properties.property.mandatory;
+
+import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.Optional;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacet;
+import 
org.apache.isis.core.metamodel.facets.propparam.mandatory.MandatoryFacetAbstract;
+
+/**
+ * Derived by presence of an <tt>@Optional</tt> annotation.
+ * 
+ * <p>
+ * This implementation indicates that the {@link FacetHolder} is <i>not</i>
+ * mandatory, as per {@link #isInvertedSemantics()}.
+ */
+public class MandatoryFacetInvertedByOptionalAnnotationOnProperty extends 
MandatoryFacetAbstract {
+
+    public MandatoryFacetInvertedByOptionalAnnotationOnProperty(final 
FacetHolder holder) {
+        super(holder, Semantics.OPTIONAL);
+    }
+
+    public static MandatoryFacet create(final Optional annotation, Method 
method, final FacetHolder holder) {
+        final Class<?> returnType = method.getReturnType();
+        if (returnType.isPrimitive()) {
+            return null;
+        }
+        return new 
MandatoryFacetInvertedByOptionalAnnotationOnProperty(holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/maxlength/MaxLengthFacetForMaxLengthAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/maxlength/MaxLengthFacetForMaxLengthAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/maxlength/MaxLengthFacetForMaxLengthAnnotationOnProperty.java
new file mode 100644
index 0000000..5ea21c0
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/maxlength/MaxLengthFacetForMaxLengthAnnotationOnProperty.java
@@ -0,0 +1,36 @@
+/*
+ *  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.properties.property.maxlength;
+
+import org.apache.isis.applib.annotation.MaxLength;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacet;
+import 
org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacetAbstract;
+
+public class MaxLengthFacetForMaxLengthAnnotationOnProperty extends 
MaxLengthFacetAbstract {
+
+    public MaxLengthFacetForMaxLengthAnnotationOnProperty(final int value, 
final FacetHolder holder) {
+        super(value, holder);
+    }
+
+    public static MaxLengthFacet create(final MaxLength annotation, final 
FacetHolder holder) {
+        return annotation == null ? null : new 
MaxLengthFacetForMaxLengthAnnotationOnProperty(annotation.value(), holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
new file mode 100644
index 0000000..4329016
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mustsatisfy/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
@@ -0,0 +1,52 @@
+/*
+ *  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.properties.property.mustsatisfy;
+
+import java.util.List;
+import com.google.common.collect.Lists;
+import org.apache.isis.applib.annotation.MustSatisfy;
+import org.apache.isis.applib.spec.Specification;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.propparam.mustsatisfyspec.MustSatisfySpecificationFacetAbstract;
+
+public class MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty 
extends MustSatisfySpecificationFacetAbstract {
+
+    public static Facet create(final MustSatisfy annotation, final FacetHolder 
holder) {
+        if (annotation == null) {
+            return null;
+        }
+        final Class<?>[] values = annotation.value();
+        final List<Specification> specifications = Lists.newArrayList();
+        for (final Class<?> value : values) {
+            final Specification specification = 
newSpecificationElseNull(value);
+            if (specification != null) {
+                specifications.add(specification);
+            }
+        }
+        return specifications.size() > 0 ? new 
MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty(specifications, 
holder) : null;
+    }
+
+
+    private 
MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty(final 
List<Specification> specifications, final FacetHolder holder) {
+        super(specifications, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnProperty.java
new file mode 100644
index 0000000..55fe4aa
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/notpersisted/NotPersistedFacetForNotPersistedAnnotationOnProperty.java
@@ -0,0 +1,36 @@
+/*
+ *  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.properties.property.notpersisted;
+
+import org.apache.isis.applib.annotation.NotPersisted;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
+import 
org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+
+public class NotPersistedFacetForNotPersistedAnnotationOnProperty extends 
NotPersistedFacetAbstract {
+
+    public NotPersistedFacetForNotPersistedAnnotationOnProperty(final 
FacetHolder holder) {
+        super(holder);
+    }
+
+    public static NotPersistedFacet create(final NotPersisted annotation, 
final FacetHolder holder) {
+        return annotation == null ? null : new 
NotPersistedFacetForNotPersistedAnnotationOnProperty(holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
----------------------------------------------------------------------
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 047ed76..ee784eb 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
@@ -23,6 +23,7 @@ import java.util.regex.Pattern;
 import com.google.common.base.Strings;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.Annotations;
 import org.apache.isis.core.metamodel.facets.object.regex.RegExFacet;
 import org.apache.isis.core.metamodel.facets.object.regex.RegExFacetAbstract;
 
@@ -31,18 +32,23 @@ public class RegExFacetForPropertyAnnotation extends 
RegExFacetAbstract {
     private final Pattern pattern;
 
     public static RegExFacet create(
-            final Property property,
+            final Property annotation,
+            final Class<?> returnType,
             final FacetHolder holder) {
 
-        if (property == null) {
+        if (annotation == null) {
             return null;
         }
 
-        final String pattern = property.regexPattern();
+        if (!Annotations.isString(returnType)) {
+            return null;
+        }
+
+        final String pattern = annotation.regexPattern();
         if(Strings.isNullOrEmpty(pattern)) {
             return null;
         }
-        final int patternFlags = property.regexPatternFlags();
+        final int patternFlags = annotation.regexPatternFlags();
 
         return new RegExFacetForPropertyAnnotation(pattern, patternFlags, 
holder);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetFromRegExAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetFromRegExAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetFromRegExAnnotationOnProperty.java
new file mode 100644
index 0000000..97c256c
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetFromRegExAnnotationOnProperty.java
@@ -0,0 +1,74 @@
+/*
+ *  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.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.object.regex.RegExFacet;
+import org.apache.isis.core.metamodel.facets.object.regex.RegExFacetAbstract;
+
+public class RegExFacetFromRegExAnnotationOnProperty extends 
RegExFacetAbstract {
+
+    private final Pattern pattern;
+
+    public static RegExFacet create(final RegEx annotation, final Class<?> 
returnType, final FacetHolder holder) {
+
+        if (!Annotations.isString(returnType)) {
+            return null;
+        }
+
+        final String validationExpression = annotation.validation();
+        final boolean caseSensitive = annotation.caseSensitive();
+        final String formatExpression = annotation.format();
+
+        return new 
RegExFacetFromRegExAnnotationOnProperty(validationExpression, formatExpression, 
caseSensitive, holder);
+    }
+
+    private RegExFacetFromRegExAnnotationOnProperty(final String validation, 
final String format, final boolean caseSensitive, final FacetHolder holder) {
+        super(validation, format, caseSensitive, holder);
+        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;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeAnnotationOnPropertyFacetFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeAnnotationOnPropertyFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeAnnotationOnPropertyFacetFactory.java
index 7aa0e41..326daa3 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeAnnotationOnPropertyFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/renderedasdaybefore/annotation/RenderedAsDayBeforeAnnotationOnPropertyFacetFactory.java
@@ -45,7 +45,7 @@ public class 
RenderedAsDayBeforeAnnotationOnPropertyFacetFactory extends FacetFa
         final RenderedAsDayBefore annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), 
RenderedAsDayBefore.class);
         final RenderedAdjustedFacet facet = create(annotation, 
processMethodContext.getFacetHolder());
 
-        validator.addFacet(facet);
+        validator.addFacetFlagIfPresent(facet);
     }
 
     private RenderedAdjustedFacet create(final RenderedAsDayBefore annotation, 
final FacetHolder holder) {

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotation.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotation.java
deleted file mode 100644
index 186759c..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotation.java
+++ /dev/null
@@ -1,31 +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.properties.validating.maxlenannot;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propparam.maxlen.MaxLengthFacetAbstract;
-
-public class MaxLengthFacetOnPropertyAnnotation extends MaxLengthFacetAbstract 
{
-
-    public MaxLengthFacetOnPropertyAnnotation(final int value, final 
FacetHolder holder) {
-        super(value, holder);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotationFactory.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotationFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotationFactory.java
deleted file mode 100644
index 7bf541c..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/maxlenannot/MaxLengthFacetOnPropertyAnnotationFactory.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.properties.validating.maxlenannot;
-
-import org.apache.isis.applib.annotation.MaxLength;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-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.propparam.maxlen.MaxLengthFacet;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
-import 
org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForDeprecatedAnnotation;
-
-public class MaxLengthFacetOnPropertyAnnotationFactory extends 
FacetFactoryAbstract implements MetaModelValidatorRefiner, 
IsisConfigurationAware {
-
-    private final MetaModelValidatorForDeprecatedAnnotation validator = new 
MetaModelValidatorForDeprecatedAnnotation(MaxLength.class);
-
-
-    public MaxLengthFacetOnPropertyAnnotationFactory() {
-        super(FeatureType.PROPERTIES_ONLY);
-    }
-
-    @Override
-    public void process(final ProcessMethodContext processMethodContext) {
-        final MaxLength annotation = 
Annotations.getAnnotation(processMethodContext.getMethod(), MaxLength.class);
-        validator.addFacet(create(annotation, 
processMethodContext.getFacetHolder()));
-    }
-
-    private MaxLengthFacet create(final MaxLength annotation, final 
FacetHolder holder) {
-        return annotation == null ? null : new 
MaxLengthFacetOnPropertyAnnotation(annotation.value(), holder);
-    }
-
-    @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite 
metaModelValidator, final IsisConfiguration configuration) {
-        metaModelValidator.add(validator);
-    }
-
-    @Override
-    public void setConfiguration(final IsisConfiguration configuration) {
-        validator.setConfiguration(configuration);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/31816a69/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
deleted file mode 100644
index d559a4e..0000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/mustsatisfyspec/MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty.java
+++ /dev/null
@@ -1,52 +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.properties.validating.mustsatisfyspec;
-
-import java.util.List;
-import com.google.common.collect.Lists;
-import org.apache.isis.applib.annotation.MustSatisfy;
-import org.apache.isis.applib.spec.Specification;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.isis.core.metamodel.facets.propparam.mustsatisfyspec.MustSatisfySpecificationFacetAbstract;
-
-public class MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty 
extends MustSatisfySpecificationFacetAbstract {
-
-    static Facet create(final MustSatisfy annotation, final FacetHolder 
holder) {
-        if (annotation == null) {
-            return null;
-        }
-        final Class<?>[] values = annotation.value();
-        final List<Specification> specifications = Lists.newArrayList();
-        for (final Class<?> value : values) {
-            final Specification specification = 
newSpecificationElseNull(value);
-            if (specification != null) {
-                specifications.add(specification);
-            }
-        }
-        return specifications.size() > 0 ? new 
MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty(specifications, 
holder) : null;
-    }
-
-
-    private 
MustSatisfySpecificationFacetForMustSatisfyAnnotationOnProperty(final 
List<Specification> specifications, final FacetHolder holder) {
-        super(specifications, holder);
-    }
-
-}

Reply via email to