This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new fef2aac530 ISIS-2997: applib: adds interface MetamodelListener
fef2aac530 is described below
commit fef2aac5305fc8c30875d83612dfb1ee968e8184
Author: Andi Huber <[email protected]>
AuthorDate: Fri Apr 8 20:50:28 2022 +0200
ISIS-2997: applib: adds interface MetamodelListener
- also moves the associated event enum from metamodel -> applib
---
.../applib/events/metamodel}/MetamodelEvent.java | 2 +-
.../applib/events/metamodel/MetamodelListener.java | 66 ++++++++++++++++++++++
.../ApplicationFeatureRepositoryDefault.java | 2 +-
.../core/runtime/events/MetamodelEventService.java | 2 +-
.../dom/_infra/seed/SeedServiceAbstract.java | 28 ++++-----
.../applib/seed/SeedSecurityModuleService.java | 2 +-
.../services/InitialFixtureScriptsInstaller.java | 2 +-
7 files changed, 82 insertions(+), 22 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/events/MetamodelEvent.java
b/api/applib/src/main/java/org/apache/isis/applib/events/metamodel/MetamodelEvent.java
similarity index 95%
rename from
core/metamodel/src/main/java/org/apache/isis/core/metamodel/events/MetamodelEvent.java
rename to
api/applib/src/main/java/org/apache/isis/applib/events/metamodel/MetamodelEvent.java
index e28e2d7624..dfbc236826 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/events/MetamodelEvent.java
+++
b/api/applib/src/main/java/org/apache/isis/applib/events/metamodel/MetamodelEvent.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.events;
+package org.apache.isis.applib.events.metamodel;
public enum MetamodelEvent {
BEFORE_METAMODEL_LOADING,
diff --git
a/api/applib/src/main/java/org/apache/isis/applib/events/metamodel/MetamodelListener.java
b/api/applib/src/main/java/org/apache/isis/applib/events/metamodel/MetamodelListener.java
new file mode 100644
index 0000000000..13af3842dc
--- /dev/null
+++
b/api/applib/src/main/java/org/apache/isis/applib/events/metamodel/MetamodelListener.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.applib.events.metamodel;
+
+import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+
+import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+
+/**
+ * Convenience interface to listen on {@link MetamodelEvent}s.
+ * <p>
+ * Provided as an alternative to directly listening to these events.
+ * <p>
+ * Using precedence {@link Order} {@link PriorityPrecedence#MIDPOINT}.
+ * For fine grained precedence control,
+ * services need to directly listen to these events instead.
+ *
+ * @since 2.0
+ */
+@FunctionalInterface
+public interface MetamodelListener {
+
+ /**
+ * Emitted by the framework, once the <i>Metamodel</i> is populated.
+ * <p>
+ * Most common use-case is to seed database values,
+ * right after the <i>Metamodel</i> was loaded.
+ */
+ void onMetamodelLoaded();
+
+ default void onMetamodelAboutToBeLoaded() {}
+
+ @EventListener(MetamodelEvent.class)
+ @Order(PriorityPrecedence.MIDPOINT)
+ default void onMetamodelEvent(final MetamodelEvent event) {
+ switch(event) {
+ case BEFORE_METAMODEL_LOADING:
+ onMetamodelAboutToBeLoaded();
+ return;
+ case AFTER_METAMODEL_LOADED:
+ onMetamodelLoaded();
+ return;
+ default:
+ throw _Exceptions.unmatchedCase(event);
+ }
+ }
+
+}
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index d32dbfb8e9..9020595ab8 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -24,12 +24,12 @@ import lombok.val;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.events.metamodel.MetamodelEvent;
import org.apache.isis.applib.services.appfeat.*;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.config.IsisConfiguration;
import
org.apache.isis.core.config.metamodel.services.ApplicationFeaturesInitConfiguration;
-import org.apache.isis.core.metamodel.events.MetamodelEvent;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
diff --git
a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/MetamodelEventService.java
b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/MetamodelEventService.java
index 9034e5ce89..303b6916a4 100644
---
a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/MetamodelEventService.java
+++
b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/MetamodelEventService.java
@@ -27,9 +27,9 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.applib.events.metamodel.MetamodelEvent;
import org.apache.isis.applib.services.confview.ConfigurationViewService;
import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.core.metamodel.events.MetamodelEvent;
/**
*
diff --git
a/examples/demo/domain/src/main/java/demoapp/dom/_infra/seed/SeedServiceAbstract.java
b/examples/demo/domain/src/main/java/demoapp/dom/_infra/seed/SeedServiceAbstract.java
index 3f9b29a8eb..35d3ecc54b 100644
---
a/examples/demo/domain/src/main/java/demoapp/dom/_infra/seed/SeedServiceAbstract.java
+++
b/examples/demo/domain/src/main/java/demoapp/dom/_infra/seed/SeedServiceAbstract.java
@@ -22,11 +22,7 @@ import java.util.function.Supplier;
import javax.inject.Inject;
-import org.springframework.context.event.EventListener;
-import org.springframework.core.annotation.Order;
-
-import org.apache.isis.applib.annotation.PriorityPrecedence;
-import org.apache.isis.core.metamodel.events.MetamodelEvent;
+import org.apache.isis.applib.events.metamodel.MetamodelListener;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
@@ -36,11 +32,14 @@ import demoapp.dom._infra.values.ValueHolder;
import demoapp.dom._infra.values.ValueHolderFixtureFactory;
import demoapp.dom._infra.values.ValueHolderRepository;
-public abstract class SeedServiceAbstract implements SeedService {
+public abstract class SeedServiceAbstract
+implements
+ SeedService,
+ MetamodelListener {
private final Supplier<FixtureScript> fixtureScriptSupplier;
- protected SeedServiceAbstract(Supplier<FixtureScript>
fixtureScriptSupplier) {
+ protected SeedServiceAbstract(final Supplier<FixtureScript>
fixtureScriptSupplier) {
this.fixtureScriptSupplier = fixtureScriptSupplier;
}
@@ -49,21 +48,16 @@ public abstract class SeedServiceAbstract implements
SeedService {
this.fixtureScriptSupplier =
()->ValueHolderFixtureFactory.fixtureScriptFor(entities);
}
-
- @EventListener(MetamodelEvent.class)
- @Order(PriorityPrecedence.MIDPOINT)
- public void onAppLifecycleEvent(MetamodelEvent event) {
- if (event.isPostMetamodel()) {
- fixtureScripts.run(fixtureScriptSupplier.get());
- }
+ @Override
+ public void onMetamodelLoaded() {
+ fixtureScripts.run(fixtureScriptSupplier.get());
}
@Override
- public void seed(FixtureScript parentFixtureScript,
FixtureScript.ExecutionContext executionContext) {
+ public void seed(final FixtureScript parentFixtureScript, final
FixtureScript.ExecutionContext executionContext) {
executionContext.executeChild(parentFixtureScript,
this.fixtureScriptSupplier.get());
}
- @Inject
- FixtureScripts fixtureScripts;
+ @Inject FixtureScripts fixtureScripts;
}
diff --git
a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
index 6d912bbc90..7e80e95ba6 100644
---
a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
+++
b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java
@@ -27,8 +27,8 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.applib.events.metamodel.MetamodelEvent;
import org.apache.isis.applib.services.iactnlayer.InteractionService;
-import org.apache.isis.core.metamodel.events.MetamodelEvent;
import
org.apache.isis.extensions.secman.applib.seed.scripts.SeedUsersAndRolesFixtureScript;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
diff --git
a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/InitialFixtureScriptsInstaller.java
b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/InitialFixtureScriptsInstaller.java
index 94aeb996b1..8bdcbaad6b 100644
---
a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/InitialFixtureScriptsInstaller.java
+++
b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/InitialFixtureScriptsInstaller.java
@@ -30,8 +30,8 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.applib.events.metamodel.MetamodelEvent;
import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.events.MetamodelEvent;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;