You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/05/31 15:58:20 UTC
[isis] branch master updated: ISIS-1958: extending
org.apache.isis.applib.Module
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 f47d31a ISIS-1958: extending org.apache.isis.applib.Module
f47d31a is described below
commit f47d31af2486dab6866c942e9430e00038876988
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 31 17:58:12 2018 +0200
ISIS-1958: extending org.apache.isis.applib.Module
additional to override logic, allow for fallback logic
Task-Url: https://issues.apache.org/jira/browse/ISIS-1958
---
.../apache/isis/applib/AppManifestAbstract.java | 20 +++++++---
.../main/java/org/apache/isis/applib/Module.java | 44 ++++++++++++++--------
.../isis/applib/ModuleOrBuilderAbstract.java | 27 ++++++++++---
.../commons/internal/collections/_Collections.java | 2 +-
.../integtestsupport/IntegrationTestAbstract3.java | 2 +-
.../integtestsupport/IntegrationTestJupiter.java | 2 +-
.../apache/isis/core/integtestsupport/Util.java | 7 ++--
.../isis/core/runtime/headless/IsisSystem.java | 2 +-
.../runtime/headless/IsisSystemBootstrapper.java | 2 +-
.../core/runtime/system/context/IsisContext.java | 10 ++++-
10 files changed, 82 insertions(+), 36 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java
index 965bb52..f8e5539 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java
@@ -54,7 +54,9 @@ public abstract class AppManifestAbstract implements AppManifest {
// note uses this.fixtures, so must come afterwards...
this.configurationProperties = createConfigurationProperties(
- builder.getAllPropertyResources(), builder.getAllIndividualConfigProps(),
+ builder.getAllPropertyResources(),
+ builder.getAllIndividualConfigProps(),
+ builder.getAllFallbackConfigProps(),
this.fixtureClasses);
}
@@ -96,17 +98,21 @@ public abstract class AppManifestAbstract implements AppManifest {
private Map<String, String> createConfigurationProperties(
final List<PropertyResource> propertyResources,
final Map<String,String> individualConfigProps,
+ final Map<String,String> fallbackConfigProps,
final List<Class<? extends FixtureScript>> fixtures) {
final Map<String, String> props = _Maps.newHashMap();
for (PropertyResource propertyResource : propertyResources) {
propertyResource.loadPropsInto(props);
}
- for (final Map.Entry<String,String> individualConfigProp : individualConfigProps.entrySet()) {
- props.put(individualConfigProp.getKey(), individualConfigProp.getValue());
- }
+
+ individualConfigProps.forEach(props::put);
+
if(!fixtures.isEmpty()) {
- props.put("isis.persistor.datanucleus.install-fixtures","true");
+ props.put("isis.persistor.datanucleus.install-fixtures", "true");
}
+
+ fallbackConfigProps.forEach((k, v)->props.computeIfAbsent(k, __->v));
+
overrideConfigurationProperties(props);
return props;
}
@@ -249,6 +255,10 @@ public abstract class AppManifestAbstract implements AppManifest {
Map<String,String> getAllIndividualConfigProps() {
return getIndividualConfigProps();
}
+
+ Map<String,String> getAllFallbackConfigProps() {
+ return getFallbackConfigProps();
+ }
public abstract AppManifest build();
diff --git a/core/applib/src/main/java/org/apache/isis/applib/Module.java b/core/applib/src/main/java/org/apache/isis/applib/Module.java
index f960439..91b6ec7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/Module.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/Module.java
@@ -18,6 +18,10 @@
*/
package org.apache.isis.applib;
+import static org.apache.isis.commons.internal.base._With.accept;
+import static org.apache.isis.commons.internal.collections._Lists.newArrayList;
+import static org.apache.isis.commons.internal.collections._Maps.newLinkedHashMap;
+
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
@@ -26,7 +30,6 @@ import java.util.Set;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.collections._Sets;
/**
@@ -105,6 +108,12 @@ public interface Module {
* Optionally each module can define additional configuration properties.
*/
Map<String,String> getIndividualConfigProps();
+
+ /**
+ * Optionally each module can define fallback configuration properties,
+ * such that if not configured elsewhere provides values to fallback to.
+ */
+ Map<String, String> getFallbackConfigProps();
/**
* Optionally each module can define additional configuration properties, specified in terms of
@@ -202,24 +211,27 @@ public interface Module {
}
static Map<String, String> transitiveIndividualConfigPropsOf(final Module module) {
- final Map<String,String> transitiveIndividualConfigProps = _Maps.newLinkedHashMap();
-
- final List<Module> transitiveDependencies = transitiveDependenciesOf(module);
- for (Module transitiveDependency : transitiveDependencies) {
- transitiveIndividualConfigProps.putAll(transitiveDependency.getIndividualConfigProps());
- }
- return transitiveIndividualConfigProps;
+ return accept(newLinkedHashMap(), props->{
+ transitiveDependenciesOf(module).stream()
+ .map(Module::getIndividualConfigProps)
+ .forEach(props::putAll);
+ });
+ }
+
+ static Map<String, String> transitiveFallbackConfigPropsOf(final Module module) {
+ return accept(newLinkedHashMap(), props->{
+ transitiveDependenciesOf(module).stream()
+ .map(Module::getFallbackConfigProps)
+ .forEach(props::putAll);
+ });
}
static List<PropertyResource> transitivePropertyResourcesOf(final Module module) {
- final List<PropertyResource> transitivePropertyResources = _Lists.newArrayList();
-
- final List<Module> transitiveDependencies = transitiveDependenciesOf(module);
- for (Module transitiveDependency : transitiveDependencies) {
- transitivePropertyResources.addAll(transitiveDependency.getPropertyResources());
- }
-
- return transitivePropertyResources;
+ return accept(newArrayList(), resources->{
+ transitiveDependenciesOf(module).stream()
+ .map(Module::getPropertyResources)
+ .forEach(resources::addAll);
+ });
}
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
index 10e76e6..9003f56 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
@@ -26,6 +26,7 @@ import java.util.Set;
import javax.xml.bind.annotation.XmlTransient;
+import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Maps;
@@ -42,6 +43,7 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
final Set<Class<?>> additionalServices = _Sets.newLinkedHashSet();
final Map<String,String> individualConfigProps = _Maps.newLinkedHashMap();
+ final Map<String,String> fallbackConfigProps = _Maps.newLinkedHashMap();
final List<PropertyResource> propertyResources = _Lists.newArrayList();
ModuleOrBuilderAbstract() {}
@@ -68,16 +70,16 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
withAdditionalServices(Module.Util.transitiveAdditionalServicesOf(module));
withConfigurationPropertyResources(Module.Util.transitivePropertyResourcesOf(module));
withConfigurationProperties(Module.Util.transitiveIndividualConfigPropsOf(module));
+ withFallbackConfigurationProperties(Module.Util.transitiveFallbackConfigPropsOf(module));
}
- @SuppressWarnings("unchecked") //[ahuber] it's safe to assume correct type casting here
private static Class<? extends Module>[] asClasses(final List<Module> dependencies) {
final List<Class<? extends Module>> list = new ArrayList<>();
for (Module dependency : dependencies) {
Class<? extends Module> aClass = dependency.getClass();
list.add(aClass);
}
- return list.toArray(new Class[] {});
+ return _Casts.uncheckedCast( list.toArray(_Constants.emptyClasses) );
}
public B withAdditionalModules(final Class<?>... modules) {
@@ -105,9 +107,12 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
}
public B withConfigurationProperties(final Map<String,String> configurationProperties) {
- for (Map.Entry<String, String> keyValue : configurationProperties.entrySet()) {
- withConfigurationProperty(keyValue.getKey(), keyValue.getValue());
- }
+ configurationProperties.forEach(this::withConfigurationProperty);
+ return self();
+ }
+
+ public B withFallbackConfigurationProperties(final Map<String,String> fallbackConfigurationProperties) {
+ fallbackConfigurationProperties.forEach(this::withFallbackConfigurationProperty);
return self();
}
@@ -151,10 +156,20 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
return self();
}
- @XmlTransient
+ @XmlTransient
public Map<String,String> getIndividualConfigProps() {
return individualConfigProps;
}
+
+ public B withFallbackConfigurationProperty(final String key, final String value) {
+ fallbackConfigProps.put(key, value);
+ return self();
+ }
+
+ @XmlTransient
+ public Map<String,String> getFallbackConfigProps() {
+ return fallbackConfigProps;
+ }
@XmlTransient
public List<PropertyResource> getPropertyResources() {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
index 364d635..d0f2d55 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
@@ -143,7 +143,7 @@ public final class _Collections {
return _Collections_SortedSetOfList.of(list);
}
- // -- STREAM TO COMMON COLLECTIONS
+ // -- COMMON COLLECTORS
public static <T> Collector<T, ?, HashSet<T>> toHashSet() {
return Collectors.toCollection(HashSet::new);
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java
index 05a2614..4dc078b 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestAbstract3.java
@@ -84,7 +84,7 @@ public abstract class IntegrationTestAbstract3 extends HeadlessWithBootstrapping
super(logConfig,
Util.moduleBuilder(module)
.withHeadlessTransactionSupport()
- .withIntegrationTestConfigIfAbsent()
+ .withIntegrationTestConfigFallback()
.build() );
}
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java
index b966ab8..d81fc2e 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IntegrationTestJupiter.java
@@ -79,7 +79,7 @@ public abstract class IntegrationTestJupiter extends HeadlessWithBootstrappingAb
super(logConfig,
Util.moduleBuilder(module)
.withHeadlessTransactionSupport()
- .withIntegrationTestConfigIfAbsent()
+ .withIntegrationTestConfigFallback()
.build() );
}
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java
index 89dc859..048d715 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/Util.java
@@ -53,16 +53,17 @@ class Util {
return this;
}
/**
- * Adds default config values for integration tests, without overriding any existing keys.
+ * Adds default fallback configuration values for integration tests,
+ * without overriding any existing key value pairs.
*/
- public ModuleBuilder withIntegrationTestConfigIfAbsent() {
+ public ModuleBuilder withIntegrationTestConfigFallback() {
final Map<String, String> integrationTestDefaultConfig = new HashMap<>();
AppManifest.Util.withJavaxJdoRunInMemoryProperties(integrationTestDefaultConfig);
AppManifest.Util.withDataNucleusProperties(integrationTestDefaultConfig);
AppManifest.Util.withIsisIntegTestProperties(integrationTestDefaultConfig);
integrationTestDefaultConfig.forEach((k, v)->{
- module.getIndividualConfigProps().computeIfAbsent(k, __->v);
+ module.getFallbackConfigProps().computeIfAbsent(k, __->v);
});
return this;
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
index 3e1c9a0..c976e6a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystem.java
@@ -285,7 +285,7 @@ public class IsisSystem {
}
public void closeSession() throws Exception {
- if(isisSessionFactory.inSession()) {
+ if(isisSessionFactory!=null && isisSessionFactory.inSession()) {
isisSessionFactory.closeSession();
}
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
index a606192..52a5b35 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
@@ -158,7 +158,7 @@ public class IsisSystemBootstrapper {
// used to bootstrap the system onto thread-local
IsisSystem.set(isft);
isftAppManifest.set(appManifest2);
-
+
return isft;
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index ef29773..9ea8559 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -115,7 +115,15 @@ public interface IsisContext {
public static void dumpConfig() {
- final Map<String, String> map = new TreeMap<>(getConfiguration().asMap());
+ final IsisConfiguration configuration;
+ try {
+ configuration = getConfiguration();
+ } catch (Exception e) {
+ // ignore
+ return;
+ }
+
+ final Map<String, String> map = new TreeMap<>(configuration.asMap());
System.out.println("=============================================");
System.out.println("= ISIS 2.0.0 =");
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.