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