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 2016/05/27 00:29:13 UTC

[4/7] isis git commit: ISIS-1417: new configuration property to skip loading of deprecated facets, plus updates to docs and migration notes.

ISIS-1417: new configuration property to skip loading of deprecated facets, plus updates to docs and migration notes.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/76b66288
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/76b66288
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/76b66288

Branch: refs/heads/master
Commit: 76b66288f69d796b097604dc43a731b16a46d89e
Parents: ba74043
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu May 26 23:49:09 2016 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu May 26 23:49:09 2016 +0100

----------------------------------------------------------------------
 .../_migration-notes_1.12.0-to-1.13.0.adoc      |  9 ++++++
 .../guides/_rgcfg_configuring-core.adoc         | 32 +++++++++++++++++---
 .../_ugbtb_programming-model_finetuning.adoc    |  8 +++--
 .../progmodel/ProgrammingModelAbstract.java     | 30 +++++++++++++++++-
 .../progmodels/dflt/JavaReflectorInstaller.java | 11 ++-----
 .../dflt/ProgrammingModelFacetsJava5.java       |  8 ++++-
 .../SpecificationLoaderTestAbstract.java        |  6 ++--
 .../IsisComponentProviderDefault2.java          |  3 +-
 .../src/main/webapp/WEB-INF/isis.properties     | 10 ++++++
 9 files changed, 97 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc b/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
index 16dbadf..b322c16 100644
--- a/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/_migration-notes_1.12.0-to-1.13.0.adoc
@@ -39,3 +39,12 @@ Prior to `1.13.0` the framework supported the injection of fields using xref:rga
 also injection to `set...()` setter methods and also `inject...()` methods.  In `1.13.0` the injection through `@Inject`
 remains, and injection through setters is enabled by default.  Injection through `inject...()` is disabled however.
 For faster start-up times still, consider disabling injection through `set...()`.
+
+* `isis.reflector.facets.ignoreDeprecated` +
++
+This setting indicates whether to continue to honour or to simply ignore any deprecated annotations and other
+semantics that make up the programming model. +
++
+Be aware that enabling this setting could substantially alter the semantics of your application.  To be safe, we
+recommend that you first run the application using `isis.reflector.validator.allowDeprecated` set to `false`; if any
+deprecated annotations etc. are in use, then the app will fail-fast and refuse to start.

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
index 5415060..a276225 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgcfg_configuring-core.adoc
@@ -412,6 +412,7 @@ See xref:ugfun.adoc#_ugfun_how-tos_ui-hints_action-icons-and-css[UI hints] for m
 
 See xref:ugfun.adoc#_ugfun_how-tos_ui-hints_action-icons-and-css[UI hints] for more details.
 
+
 |`isis.reflector.facet.` +
 `filterVisibility`
 |`true`,`false` +
@@ -426,6 +427,11 @@ See xref:rgcfg.adoc#_rgcfg_configuring-core_filterVisibility[section below] for
 
 See xref:ugbtb.adoc#_ugbtb_programming-model_finetuning[finetuning the programming model] for more details.
 
+`1.13.0-SNAPSHOT` - this property is now ignored.  To customize the programming model, use `facets.exclude` and `facets.include`.
+
+
+
+
 |`isis.reflector.facets.` +
 `exclude`
 |`FQCN`,`FQCN2`,...
@@ -433,6 +439,22 @@ See xref:ugbtb.adoc#_ugbtb_programming-model_finetuning[finetuning the programmi
 
 See xref:ugbtb.adoc#_ugbtb_programming-model_finetuning[finetuning the programming model] for more details.
 
+
+|`isis.reflector.facets.` +
+`ignoreDeprecated`
+|`true`,`false` +
+(`false`)
+|(`1.13.0-SNAPSHOT`) whether deprecated facets should be ignored or honoured.  +
++
+By default all deprecated facets are honoured; they remain part of the metamodel.  If instead this property is set to
+`true` then the facets are simply not loaded into the metamodel and their semantics will be excluded.  +
++
+In most cases this should reduce the start-up times for the application.  However, be aware that this could also
+substantially alter the semantics of your application.  To be safe, we recommend that you first run your application
+using `isis.reflector.validator.allowDeprecated` set to `false`; if any deprecated annotations etc. are in use, then
+the app will fail-fast and refuse to start.
+
+
 |`isis.reflector.facets.` +
 `include`
 |`FQCN`,`FQCN2`,...
@@ -459,7 +481,9 @@ See xref:ugbtb.adoc#_ugbtb_programming-model_custom-validator[Custom Validator]
 `allowDeprecated`
 |`true`,`false` +
 (`true`)
-| Whether deprecated annotations or naming conventions are tolerated or not.  If not, then a metamodel validation error will be triggered, meaning the app won't boot (fail-fast).
+| Whether deprecated annotations or naming conventions are tolerated or not.  If not, then a metamodel validation error will be triggered, meaning the app won't boot (fail-fast). +
++
+See also `isis.reflector.facets.ignoreDeprecated` (`1.13.0-SNAPSHOT`).
 
 
 
@@ -485,7 +509,7 @@ See xref:ugbtb.adoc#_ugbtb_programming-model_custom-validator[Custom Validator]
 
 
 [[_rgcfg_configuring-core_filterVisibility]]
-== Filtering visibility
+=== Filtering visibility
 
 The framework provides the `isis.reflector.facet.filterVisibility` configuration property that influences whether a returned object is visible to the end-user:
 
@@ -532,7 +556,7 @@ some cases.
 
 
 [[_rgcfg_configuring-core_isis-objects-editing]]
-== `objects.editing`
+=== `objects.editing`
 
 This configuration property in effect allows editing to be disabled globally for an application:
 
@@ -546,7 +570,7 @@ We recommend enabling this feature; it will help drive out the underlying busine
 
 
 [[_rgcfg_configuring-core_isis-viewers-propertyLayout-labelPosition]]
-== `propertyLayout.labelPosition`
+=== `propertyLayout.labelPosition`
 
 If you want a consistent look-n-feel throughout the app, eg all property labels to the top, then it'd be rather
 frustrating to have to annotate every property.

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/adocs/documentation/src/main/asciidoc/guides/_ugbtb_programming-model_finetuning.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_ugbtb_programming-model_finetuning.adoc b/adocs/documentation/src/main/asciidoc/guides/_ugbtb_programming-model_finetuning.adoc
index 04a7203..9319b5a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_ugbtb_programming-model_finetuning.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_ugbtb_programming-model_finetuning.adoc
@@ -54,7 +54,7 @@ Or, suppose you wanted to use the example https://github.com/apache/isis/blob/ma
 isis.reflector.facets.include=org.apache.isis.example.metamodel.namefile.facets.NameFileFacetFactory
 ----
 
-To include/exclude more than one `FacetFactory`, specify as a comma-separated list. And if you want to dig into this in more detail, the code that implements this logic is https://github.com/apache/isis/blob/master/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java[JavaReflectorInstallerNoDecorators].
+To include/exclude more than one `FacetFactory`, specify as a comma-separated list.
 
 [TIP]
 ====
@@ -66,6 +66,11 @@ This http://isis.markmail.org/thread/472c3mrvcgnripst[thread] from the users mai
 
 == Replacing the Prog. Model
 
+[WARNING]
+====
+This property is ignored as of `1.13.0-SNAPSHOT`
+====
+
 If you want to make many changes to the programming model, then (rather than include/exclude lots of facet factories) you can specify a completely new programming model.  For this you'll first need an implementation of `ProgrammingModel`.
 
 One option is to subclass from `ProgrammingModelFacetsJava5`; in your subclass you could remove any ``FacetFactory``s that you wanted to exclude, as well as registering your own implementations.
@@ -77,4 +82,3 @@ To tell Apache Isis to use your new programming model, use:
 isis.reflector.facets=com.mycompany.myapp.isis.IsisProgrammingModel
 ----
 
-Again, the code that implements this logic is https://github.com/apache/isis/blob/master/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstallerNoDecorators.java[JavaReflectorInstallerNoDecorators].
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
index 2a90d47..547d401 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
@@ -29,11 +29,32 @@ import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
+import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
 
 public abstract class ProgrammingModelAbstract implements ProgrammingModel {
 
     private final List<FacetFactory> facetFactories = Lists.newArrayList();
-    private final List<Object> facetFactoryInstancesOrClasses = Lists.newArrayList();
+    private final List<Object> facetFactoryInstancesOrClasses = Lists.newLinkedList();
+
+    public static final String KEY_IGNORE_DEPRECATED = "isis.reflector.facets.ignoreDeprecated";
+
+    public enum DeprecatedPolicy {
+        IGNORE,
+        HONOUR;
+
+        public static DeprecatedPolicy parse(final IsisConfiguration configuration) {
+            boolean ignoreDep = configuration.getBoolean(KEY_IGNORE_DEPRECATED, false);
+            return ignoreDep ? IGNORE : HONOUR;
+        }
+    }
+
+    protected final DeprecatedPolicy deprecatedPolicy;
+
+    public ProgrammingModelAbstract(
+            final ProgrammingModelFacetsJava5.DeprecatedPolicy deprecatedPolicy) {
+
+        this.deprecatedPolicy = deprecatedPolicy;
+    }
 
     @Override
     public void init() {
@@ -99,6 +120,13 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
 
     private void addFactory(final Object facetFactoryInstanceOrClass, final Position position) {
         assertNotInitialized();
+        if(deprecatedPolicy == DeprecatedPolicy.IGNORE) {
+            if( facetFactoryInstanceOrClass instanceof FacetFactory) {
+                if(facetFactoryInstanceOrClass.getClass().isAnnotationPresent(Deprecated.class)) {
+                    return;
+                }
+            }
+        }
         switch (position){
             case BEGINNING:
                 facetFactoryInstancesOrClasses.add(0, facetFactoryInstanceOrClass);

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
index 942c299..fb4677d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorInstaller.java
@@ -105,18 +105,13 @@ public class JavaReflectorInstaller extends InstallerAbstract implements Specifi
      * exclude.
      */
     protected ProgrammingModel createProgrammingModel(final IsisConfiguration configuration) {
-        final ProgrammingModel programmingModel = lookupAndCreateProgrammingModelFacets(configuration);
+        final ProgrammingModel programmingModel = new ProgrammingModelFacetsJava5(configuration);
         includeAndExcludeFacetFactories(configuration, programmingModel);
         return programmingModel;
     }
 
-    private ProgrammingModel lookupAndCreateProgrammingModelFacets(final IsisConfiguration configuration) {
-        final String progModelFacetsClassName = configuration.getString(ReflectorConstants.PROGRAMMING_MODEL_FACETS_CLASS_NAME, ReflectorConstants.PROGRAMMING_MODEL_FACETS_CLASS_NAME_DEFAULT);
-        final ProgrammingModel programmingModel = InstanceUtil.createInstance(progModelFacetsClassName, ProgrammingModel.class);
-        return programmingModel;
-    }
-
-    private void includeAndExcludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
+    private void includeAndExcludeFacetFactories(
+            final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
         includeFacetFactories(configuration, programmingModel);
         excludeFacetFactories(configuration, programmingModel);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
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 cf0f00a..b0f9e34 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
@@ -17,6 +17,7 @@
 
 package org.apache.isis.progmodels.dflt;
 
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.actions.action.ActionAnnotationFacetFactory;
 import org.apache.isis.core.metamodel.facets.actions.contributing.maxlenannot.MaxLengthFacetOnActionAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.actions.contributing.paged.PagedFacetOnActionFactory;
@@ -215,7 +216,12 @@ import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
 
 public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract {
 
-    public ProgrammingModelFacetsJava5() {
+    public ProgrammingModelFacetsJava5(final IsisConfiguration configuration) {
+        this(DeprecatedPolicy.parse(configuration));
+    }
+
+    public ProgrammingModelFacetsJava5(final DeprecatedPolicy deprecatedPolicy) {
+        super(deprecatedPolicy);
 
         // must be first, so any Facets created can be replaced by other
         // FacetFactorys later.

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
index 78a6654..11878d7 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -119,7 +119,7 @@ public abstract class SpecificationLoaderTestAbstract {
         final SpecificationLoader specificationLoader =
                 new SpecificationLoader(DeploymentCategory.PRODUCTION,
                         stubConfiguration,
-                        new ProgrammingModelFacetsJava5(),
+                        new ProgrammingModelFacetsJava5(mockConfiguration),
                         new MetaModelValidatorDefault(),
                         Lists.<LayoutMetadataReader>newArrayList(
                                 new LayoutMetadataReaderFromJson()), stubServicesInjector);
@@ -140,7 +140,7 @@ public abstract class SpecificationLoaderTestAbstract {
 
         new SpecificationLoader(DeploymentCategory.PRODUCTION ,
                 stubConfiguration,
-                new ProgrammingModelFacetsJava5(),
+                new ProgrammingModelFacetsJava5(mockConfiguration),
                 new MetaModelValidatorDefault(),
                 Lists.<LayoutMetadataReader>newArrayList(),
                 stubServicesInjector);
@@ -153,7 +153,7 @@ public abstract class SpecificationLoaderTestAbstract {
 
         new SpecificationLoader(DeploymentCategory.PRODUCTION,
                 stubConfiguration,
-                new ProgrammingModelFacetsJava5(),
+                new ProgrammingModelFacetsJava5(mockConfiguration),
                 new MetaModelValidatorDefault(),
                 null,
                 stubServicesInjector);

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
index bbe76bb..2461ae9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
@@ -102,9 +102,10 @@ public class IsisComponentProviderDefault2 extends IsisComponentProvider  {
     // TODO: this is duplicating logic in JavaReflectorInstaller; need to unify.
     private ProgrammingModel createDefaultProgrammingModel() {
 
-        final ProgrammingModelFacetsJava5 programmingModel = new ProgrammingModelFacetsJava5();
 
         final IsisConfigurationDefault configuration = getConfiguration();
+
+        final ProgrammingModelFacetsJava5 programmingModel = new ProgrammingModelFacetsJava5(configuration);
         ProgrammingModel.Util.includeFacetFactories(configuration, programmingModel);
         ProgrammingModel.Util.excludeFacetFactories(configuration, programmingModel);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/76b66288/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
index f8c66ed..64e69a2 100644
--- a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -72,6 +72,14 @@ isis.reflector.validator.allowDeprecated=false
 
 
 #
+# Whether to ignore or honour deprecated annotations/method prefixes.
+# If not specified, default is to honour
+#
+isis.reflector.facets.ignoreDeprecated=true
+
+
+
+#
 # Implementation to use for reading dynamic layout.
 # Default implementation reads Xxx.layout.json files from classpath.
 #
@@ -226,6 +234,8 @@ isis.reflector.facet.domainObjectAnnotation.removingLifecycleEvent.postForDefaul
 isis.services.injector.setPrefix=false
 
 
+
+
 ################################################################################
 #
 # Policies