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 2018/02/10 12:45:07 UTC
[isis] 01/02: ISIS-1585: defines a new PostProcessor API,
similar to FacetFactory.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch maint-1.16.1
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 865f6ab2481275827e41be6e08592fdeba8d28ec
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Feb 10 12:44:14 2018 +0000
ISIS-1585: defines a new PostProcessor API, similar to FacetFactory.
Also:
- removes the postProcessing from FacetProcessor, since seemingly unused.
- extracted out FacetFactorySet as a super-interface of ProgrammingModel
---
.../isis/core/metamodel/facetapi/FeatureType.java | 21 +-------
...rDefaultsFacetViaToggleBoxesPostProcessor.java} | 29 ++--------
...{ProgrammingModel.java => FacetFactorySet.java} | 9 ++--
.../ObjectSpecificationPostProcessor.java | 28 ++++++++++
.../core/metamodel/progmodel/PostProcessorSet.java | 28 ++++++++++
.../core/metamodel/progmodel/ProgrammingModel.java | 62 +---------------------
.../metamodel/specloader/SpecificationLoader.java | 19 +++----
.../specloader/facetprocessor/FacetProcessor.java | 11 +---
.../specloader/postprocessor/PostProcessor.java | 41 ++++++++++++++
.../specloader/specimpl/FacetedMethodsBuilder.java | 12 -----
.../specimpl/dflt/ObjectSpecificationDefault.java | 5 +-
.../dflt/ProgrammingModelFacetsJava5.java | 20 ++++---
12 files changed, 128 insertions(+), 157 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
index 7774792..f99bebf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FeatureType.java
@@ -28,7 +28,6 @@ import com.google.common.collect.ImmutableList;
import org.apache.isis.applib.Identifier;
import org.apache.isis.core.commons.lang.StringExtensions;
import org.apache.isis.core.metamodel.facets.FacetFactory;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
/**
* Enumerates the features that a particular Facet can be applied to.
@@ -36,15 +35,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
* <p>
* The class-level feature processing is typically performed by {@link FacetFactory}s
* pertaining to {@link #OBJECT}, performed before the processing of class members.
- * However, {@link FacetFactory}s can also be associated with {@link #OBJECT_POST_PROCESSING},
- * which is run after all members have been introspected. This is useful for facets
- * (eg the JDO <tt>Version</tt> annotation) that references class members.
- *
- * <p>
- * TODO: should rationalize this and {@link ObjectSpecification#getResultType()}
- * . Note though that we don't distinguish value properties and reference
- * properties (and we probably shouldn't in {@link ObjectSpecification},
- * either).
+ *
*/
public enum FeatureType {
@@ -94,15 +85,6 @@ public enum FeatureType {
public Identifier identifierFor(final Class<?> type, final Method method) {
return null;
}
- },
- OBJECT_POST_PROCESSING("Object post processing") {
- /**
- * The supplied method can be null; at any rate it will be ignored.
- */
- @Override
- public Identifier identifierFor(final Class<?> type, final Method method) {
- return Identifier.classIdentifier(type);
- }
};
public final static List<FeatureType> COLLECTIONS_ONLY = ImmutableList.of(COLLECTION);
@@ -118,7 +100,6 @@ public enum FeatureType {
public final static List<FeatureType> OBJECTS_AND_COLLECTIONS = ImmutableList.of(OBJECT, COLLECTION);
public final static List<FeatureType> OBJECTS_AND_ACTIONS = ImmutableList.of(OBJECT, ACTION);
public final static List<FeatureType> OBJECTS_PROPERTIES_AND_COLLECTIONS = ImmutableList.of(OBJECT, PROPERTY, COLLECTION);
- public final static List<FeatureType> OBJECTS_POST_PROCESSING_ONLY = ImmutableList.of(OBJECT_POST_PROCESSING);
public static final List<FeatureType> ACTIONS_AND_PARAMETERS =
ImmutableList.of(ACTION, ACTION_PARAMETER_SCALAR, ACTION_PARAMETER_COLLECTION);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/togglebox/ActionParameterDefaultsFacetViaToggleBoxesFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/togglebox/ActionParameterDefaultsFacetViaToggleBoxesPostProcessor.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/togglebox/ActionParameterDefaultsFacetViaToggleBoxesFactory.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/togglebox/ActionParameterDefaultsFacetViaToggleBoxesPostProcessor.java
index 3af6f2b..e43cefe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/togglebox/ActionParameterDefaultsFacetViaToggleBoxesFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/togglebox/ActionParameterDefaultsFacetViaToggleBoxesPostProcessor.java
@@ -30,9 +30,9 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.deployment.DeploymentCategoryProvider;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.progmodel.ObjectSpecificationPostProcessor;
import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.services.ServicesInjectorAware;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -43,30 +43,12 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
/**
* Sets up all the {@link Facet}s for an action in a single shot.
*/
-public class ActionParameterDefaultsFacetViaToggleBoxesFactory extends FacetFactoryAbstract {
+public class ActionParameterDefaultsFacetViaToggleBoxesPostProcessor implements ObjectSpecificationPostProcessor,
+ ServicesInjectorAware {
private DeploymentCategoryProvider deploymentCategoryProvider;
- /**
- * Note that the {@link Facet}s registered are the generic ones from
- * noa-architecture (where they exist)
- */
- public ActionParameterDefaultsFacetViaToggleBoxesFactory() {
- super(ImmutableList.of(FeatureType.OBJECT_POST_PROCESSING));
- }
-
@Override
- public void process(final ProcessClassContext processClassContext) {
- final ObjectSpecification objectSpecification = getSpecificationLoader()
- .loadSpecification(processClassContext.getCls());
- postProcess(objectSpecification);
-
- }
-
- /**
- * NOT API.
- * Called as special case in SpecificationLoader.
- */
public void postProcess(final ObjectSpecification objectSpecification) {
// all the actions of this type
@@ -117,11 +99,8 @@ public class ActionParameterDefaultsFacetViaToggleBoxesFactory extends FacetFact
return actionTypes;
}
-
@Override
public void setServicesInjector(final ServicesInjector servicesInjector) {
- super.setServicesInjector(servicesInjector);
deploymentCategoryProvider = servicesInjector.getDeploymentCategoryProvider();
}
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
similarity index 92%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
index 44999b9..448c5d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
@@ -24,13 +24,10 @@ import java.util.List;
import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.core.commons.config.IsisConfiguration;
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.ReflectorConstants;
-public interface ProgrammingModel extends MetaModelValidatorRefiner {
-
- void init();
+public interface FacetFactorySet {
List<FacetFactory> getList();
@@ -67,7 +64,7 @@ public interface ProgrammingModel extends MetaModelValidatorRefiner {
class Util {
private Util(){}
- public static void includeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
+ public static void includeFacetFactories(final IsisConfiguration configuration, final FacetFactorySet programmingModel) {
final String[] facetFactoriesIncludeClassNames = configuration.getList(ReflectorConstants.FACET_FACTORY_INCLUDE_CLASS_NAME_LIST);
if (facetFactoriesIncludeClassNames != null) {
for (final String facetFactoryClassName : facetFactoriesIncludeClassNames) {
@@ -77,7 +74,7 @@ public interface ProgrammingModel extends MetaModelValidatorRefiner {
}
}
- public static void excludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
+ public static void excludeFacetFactories(final IsisConfiguration configuration, final FacetFactorySet programmingModel) {
final String[] facetFactoriesExcludeClassNames = configuration.getList(ReflectorConstants.FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST);
for (final String facetFactoryClassName : facetFactoriesExcludeClassNames) {
final Class<? extends FacetFactory> facetFactory = InstanceUtil.loadClass(facetFactoryClassName, FacetFactory.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ObjectSpecificationPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ObjectSpecificationPostProcessor.java
new file mode 100644
index 0000000..fdef1e1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ObjectSpecificationPostProcessor.java
@@ -0,0 +1,28 @@
+/*
+ * 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.progmodel;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public interface ObjectSpecificationPostProcessor {
+
+ void postProcess(ObjectSpecification objectSpecification);
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/PostProcessorSet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/PostProcessorSet.java
new file mode 100644
index 0000000..dc6dee6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/PostProcessorSet.java
@@ -0,0 +1,28 @@
+/*
+ * 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.progmodel;
+
+import java.util.List;
+
+public interface PostProcessorSet {
+
+ List<ObjectSpecificationPostProcessor> getPostProcessors();
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
index 44999b9..54937be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModel.java
@@ -19,70 +19,10 @@
package org.apache.isis.core.metamodel.progmodel;
-import java.util.List;
-
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-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.ReflectorConstants;
-public interface ProgrammingModel extends MetaModelValidatorRefiner {
+public interface ProgrammingModel extends FacetFactorySet, PostProcessorSet, MetaModelValidatorRefiner {
void init();
- List<FacetFactory> getList();
-
- enum Position {
- BEGINNING,END
- }
- void addFactory(Class<? extends FacetFactory> facetFactoryClass);
- void addFactory(FacetFactory facetFactory);
- void addFactory(Class<? extends FacetFactory> facetFactoryClass, Position position);
- void addFactory(FacetFactory facetFactory, Position position);
-
- void removeFactory(Class<? extends FacetFactory> facetFactoryClass);
-
- /**
- * Key used to lookup comma-separated list of {@link FacetFactory}s to
- * include.
- *
- * @see #FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST
- */
- String FACET_FACTORY_INCLUDE_CLASS_NAME_LIST = ConfigurationConstants.ROOT + "reflector.facets.include";
-
- /**
- * Key used to lookup comma-separated list of {@link FacetFactory}s to
- * exclude.
- *
- * @see #FACET_FACTORY_INCLUDE_CLASS_NAME_LIST
- */
- String FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST = ConfigurationConstants.ROOT + "reflector.facets.exclude";
-
- /**
- * This is a bit nasty, but currently the bootstrapping of the metamodel for integration tests vs the webapp differs;
- * the intent of this class is to centralize some logic that should be applied in both cases.
- */
- class Util {
- private Util(){}
-
- public static void includeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
- final String[] facetFactoriesIncludeClassNames = configuration.getList(ReflectorConstants.FACET_FACTORY_INCLUDE_CLASS_NAME_LIST);
- if (facetFactoriesIncludeClassNames != null) {
- for (final String facetFactoryClassName : facetFactoriesIncludeClassNames) {
- final Class<? extends FacetFactory> facetFactory = InstanceUtil.loadClass(facetFactoryClassName, FacetFactory.class);
- programmingModel.addFactory(facetFactory);
- }
- }
- }
-
- public static void excludeFacetFactories(final IsisConfiguration configuration, final ProgrammingModel programmingModel) {
- final String[] facetFactoriesExcludeClassNames = configuration.getList(ReflectorConstants.FACET_FACTORY_EXCLUDE_CLASS_NAME_LIST);
- for (final String facetFactoryClassName : facetFactoriesExcludeClassNames) {
- final Class<? extends FacetFactory> facetFactory = InstanceUtil.loadClass(facetFactoryClassName, FacetFactory.class);
- programmingModel.removeFactory(facetFactory);
- }
- }
- }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index 8142104..cab0987 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -42,7 +42,6 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.FacetFactory;
import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
-import org.apache.isis.core.metamodel.facets.param.defaults.togglebox.ActionParameterDefaultsFacetViaToggleBoxesFactory;
import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -52,6 +51,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
+import org.apache.isis.core.metamodel.specloader.postprocessor.PostProcessor;
import org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilderContext;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
@@ -99,6 +99,7 @@ public class SpecificationLoader implements ApplicationScopedComponent {
private final MetaModelValidator metaModelValidator;
private final SpecificationCacheDefault cache = new SpecificationCacheDefault();
private final List<LayoutMetadataReader> layoutMetadataReaders;
+ private final PostProcessor postProcessor;
public SpecificationLoader(
final IsisConfiguration configuration,
@@ -114,6 +115,8 @@ public class SpecificationLoader implements ApplicationScopedComponent {
this.metaModelValidator = metaModelValidator;
this.facetProcessor = new FacetProcessor(programmingModel);
+ this.postProcessor = new PostProcessor(programmingModel, servicesInjector);
+
this.layoutMetadataReaders = layoutMetadataReaders;
}
@@ -151,6 +154,7 @@ public class SpecificationLoader implements ApplicationScopedComponent {
// initialize subcomponents
programmingModel.init();
facetProcessor.init();
+ postProcessor.init();
metaModelValidator.init(this);
loadSpecificationsForServices();
@@ -457,24 +461,15 @@ public class SpecificationLoader implements ApplicationScopedComponent {
specSpi.introspectTypeHierarchyAndMembers();
specSpi.updateFromFacetValues();
specSpi.setIntrospectionState(ObjectSpecificationAbstract.IntrospectionState.INTROSPECTED);
-
}
public void postProcess() {
- //
- // HMM. Not possible to add this as a facet factory, because of
- // inifinite loop (can't lookup actions of spec until fully processed).
- // so, instead, calling as a one-off special-case in SpecificationLoader
- //
- final ActionParameterDefaultsFacetViaToggleBoxesFactory factory =
- new ActionParameterDefaultsFacetViaToggleBoxesFactory();
- factory.setServicesInjector(getServicesInjector());
-
final Collection<ObjectSpecification> specs = allSpecifications();
for (final ObjectSpecification spec : specs) {
- factory.postProcess(spec);
+ postProcessor.postProcess(spec);
}
+
}
//endregion
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
index 3e1d532..b17918f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/facetprocessor/FacetProcessor.java
@@ -44,6 +44,7 @@ import org.apache.isis.core.metamodel.facets.MethodFilteringFacetFactory;
import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactory;
import org.apache.isis.core.metamodel.facets.MethodRemoverConstants;
import org.apache.isis.core.metamodel.facets.PropertyOrCollectionIdentifyingFacetFactory;
+import org.apache.isis.core.metamodel.progmodel.ObjectSpecificationPostProcessor;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.services.ServicesInjectorAware;
@@ -268,16 +269,6 @@ public class FacetProcessor implements ServicesInjectorAware {
}
}
- public void processPost(
- final Class<?> cls,
- final Properties metadataProperties,
- final MethodRemover methodRemover,
- final FacetHolder facetHolder) {
- final List<FacetFactory> factoryList = getFactoryListByFeatureType(FeatureType.OBJECT_POST_PROCESSING);
- for (final FacetFactory facetFactory : factoryList) {
- facetFactory.process(new ProcessClassContext(cls, metadataProperties, removerElseNullRemover(methodRemover), facetHolder));
- }
- }
/**
* Attaches all facets applicable to the provided {@link FeatureType type of
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/postprocessor/PostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/postprocessor/PostProcessor.java
new file mode 100644
index 0000000..2a71659
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/postprocessor/PostProcessor.java
@@ -0,0 +1,41 @@
+package org.apache.isis.core.metamodel.specloader.postprocessor;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.progmodel.ObjectSpecificationPostProcessor;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.services.ServicesInjectorAware;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class PostProcessor {
+
+ private final ProgrammingModel programmingModel;
+ private final ServicesInjector servicesInjector;
+ // populated at #init
+ List<ObjectSpecificationPostProcessor> postProcessors;
+
+ public PostProcessor(final ProgrammingModel programmingModel, final ServicesInjector servicesInjector) {
+ this.programmingModel = programmingModel;
+ this.servicesInjector = servicesInjector;
+ }
+
+ public void init() {
+ postProcessors = programmingModel.getPostProcessors();
+ for (final ObjectSpecificationPostProcessor postProcessor : postProcessors) {
+ if(postProcessor instanceof ServicesInjectorAware) {
+ final ServicesInjectorAware servicesInjectorAware = (ServicesInjectorAware) postProcessor;
+ servicesInjectorAware.setServicesInjector(servicesInjector);
+ }
+ }
+ }
+ public void postProcess(final ObjectSpecification objectSpecification) {
+
+ for (final ObjectSpecificationPostProcessor postProcessor : postProcessors) {
+ postProcessor.postProcess(objectSpecification);
+ }
+
+
+ }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 4f291a8..4446489 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -576,18 +576,6 @@ public class FacetedMethodsBuilder {
// ////////////////////////////////////////////////////////////////////////////
- // introspect class post processing
- // ////////////////////////////////////////////////////////////////////////////
-
- public void introspectClassPostProcessing(final Properties metadataProperties) {
- if (LOG.isDebugEnabled()) {
- LOG.debug("introspecting {0}: class-level post-processing", getClassName());
- }
-
- getFacetProcessor().processPost(introspectedClass, metadataProperties, methodRemover, spec);
- }
-
- // ////////////////////////////////////////////////////////////////////////////
// Helpers for finding and removing methods.
// ////////////////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 5f1e2e4..65d2ff3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -176,10 +176,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
- if(isNotIntrospected()) {
- facetedMethodsBuilder.introspectClassPostProcessing(metadataProperties);
- }
-
+
if(isNotIntrospected()) {
updateFromFacetValues();
}
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 302a8f8..a81b930 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,10 @@
package org.apache.isis.progmodels.dflt;
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
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.action.ActionChoicesForCollectionParameterFacetFactory;
@@ -133,6 +137,7 @@ import org.apache.isis.core.metamodel.facets.param.choices.method.ActionChoicesF
import org.apache.isis.core.metamodel.facets.param.choices.methodnum.ActionParameterChoicesFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.param.defaults.fromtype.ActionParameterDefaultFacetDerivedFromTypeFactory;
import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory;
+import org.apache.isis.core.metamodel.facets.param.defaults.togglebox.ActionParameterDefaultsFacetViaToggleBoxesPostProcessor;
import org.apache.isis.core.metamodel.facets.param.describedas.annotderived.DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory;
import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory;
import org.apache.isis.core.metamodel.facets.param.mandatory.dflt.MandatoryFacetOnParametersDefaultFactory;
@@ -205,6 +210,7 @@ import org.apache.isis.core.metamodel.facets.value.timestamp.TimeStampValueFacet
import org.apache.isis.core.metamodel.facets.value.timestampsql.JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.url.URLValueFacetUsingSemanticsProviderFactory;
import org.apache.isis.core.metamodel.facets.value.uuid.UUIDValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.progmodel.ObjectSpecificationPostProcessor;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract {
@@ -280,13 +286,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(new ActionDefaultsFacetViaMethodFactory());
addFactory(new ActionParameterDefaultsFacetViaMethodFactory());
- //
- // HMM. Not possible to add this as a facet factory, because of
- // inifinite loop (can't lookup actions of spec until fully processed).
- // so, instead, calling as a one-off special-case in SpecificationLoader
- //
- //addFactory(new ActionParameterDefaultsFacetViaToggleBoxesFactory());
-
// members in general
addFactory(new NamedFacetStaticMethodFactory());
@@ -547,4 +546,11 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(new ViewModelSemanticCheckingFacetFactory());
}
+
+ @Override
+ public List<ObjectSpecificationPostProcessor> getPostProcessors() {
+ return Lists.<ObjectSpecificationPostProcessor>newArrayList(
+ new ActionParameterDefaultsFacetViaToggleBoxesPostProcessor()
+ );
+ }
}
--
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.