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 2020/09/18 13:50:29 UTC
[isis] 03/03: ISIS-2435: Commons: cleanup IoC abstraction classes
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
commit a4f3656f14ab23ca36c8f469a8b195d9b1781b10
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 18 15:50:13 2020 +0200
ISIS-2435: Commons: cleanup IoC abstraction classes
---
.../applib/services/registry/ServiceRegistry.java | 10 +-
.../ioc/{IocContainer.java => _IocContainer.java} | 32 ++-
...tainerSpring.java => _IocContainer_Spring.java} | 68 ++++--
...edBeanAdapter.java => _ManagedBeanAdapter.java} | 2 +-
...Spring.java => _ManagedBeanAdapter_Spring.java} | 9 +-
.../apache/isis/commons/internal/ioc/_Spring.java | 93 +++++++++
.../commons/internal/ioc/spring/EventSpring.java | 75 -------
.../isis/commons/internal/ioc/spring/_Spring.java | 228 ---------------------
.../config/environment/IsisSystemEnvironment.java | 9 +-
.../_testing/ServiceRegistry_forTesting.java | 22 +-
.../context/MetaModelContext_usingIoc.java | 10 +-
.../load/ObjectLoader_builtinHandlers.java | 4 +-
.../events/MetamodelEventSupport_Spring.java | 2 +-
.../services/registry/ServiceRegistryDefault.java | 16 +-
.../SpringServiceProvisioningTest.java | 6 +-
.../eventhandling/SpringEventPublishingTest.java | 2 +-
16 files changed, 211 insertions(+), 377 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java b/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
index e94e27e..29d8f52 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
@@ -31,7 +31,7 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.base._Reduction;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
import org.apache.isis.commons.internal.reflection._Reflect;
import lombok.val;
@@ -76,7 +76,7 @@ public interface ServiceRegistry {
* Streams all registered bean adapters implementing the requested type.
*/
// tag::refguide[]
- default Stream<ManagedBeanAdapter> streamRegisteredBeansOfType(Class<?> requiredType) {
+ default Stream<_ManagedBeanAdapter> streamRegisteredBeansOfType(Class<?> requiredType) {
// end::refguide[]
return streamRegisteredBeans()
@@ -91,7 +91,7 @@ public interface ServiceRegistry {
* Returns all bean adapters that have been registered.
*/
// tag::refguide[]
- Stream<ManagedBeanAdapter> streamRegisteredBeans();
+ Stream<_ManagedBeanAdapter> streamRegisteredBeans();
// end::refguide[]
/**
@@ -100,7 +100,7 @@ public interface ServiceRegistry {
* @param id - corresponds to the ObjectSpecificationId of the bean's type
*/
// tag::refguide[]
- Optional<ManagedBeanAdapter> lookupRegisteredBeanById(String id);
+ Optional<_ManagedBeanAdapter> lookupRegisteredBeanById(String id);
// end::refguide[]
/**
@@ -109,7 +109,7 @@ public interface ServiceRegistry {
* @param id - corresponds to the ObjectSpecificationId of the bean's type
*/
// tag::refguide[]
- default ManagedBeanAdapter lookupRegisteredBeanByIdElseFail(String id) {
+ default _ManagedBeanAdapter lookupRegisteredBeanByIdElseFail(String id) {
return lookupRegisteredBeanById(id).orElseThrow(
()->_Exceptions.unrecoverable(
"Failed to lookup BeanAdapter by id '" + id + "'"));
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/IocContainer.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_IocContainer.java
similarity index 79%
rename from commons/src/main/java/org/apache/isis/commons/internal/ioc/IocContainer.java
rename to commons/src/main/java/org/apache/isis/commons/internal/ioc/_IocContainer.java
index 980a113..d73beb4 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/ioc/IocContainer.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_IocContainer.java
@@ -21,12 +21,13 @@ package org.apache.isis.commons.internal.ioc;
import java.lang.annotation.Annotation;
import java.util.NoSuchElementException;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import org.springframework.context.ApplicationContext;
+
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.base._With;
@@ -35,13 +36,18 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
import lombok.val;
/**
- *
- * @since 2.0
+ * <h1>- internal use only -</h1>
+ * <p>
+ * Framework internal IoC Container support.
+ * <p>
+ * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
+ * These may be changed or removed without notice!
*
+ * @since 2.0
*/
-public interface IocContainer {
+public interface _IocContainer {
- Stream<ManagedBeanAdapter> streamAllBeans();
+ Stream<_ManagedBeanAdapter> streamAllBeans();
Optional<?> lookupById(final String id);
@@ -57,7 +63,13 @@ public interface IocContainer {
<T> Can<T> select(Class<T> requiredType);
- <T> Can<T> select(Class<T> requiredType, Set<Annotation> qualifiersRequired);
+ /**
+ * @param <T>
+ * @param requiredType
+ * @param qualifiersRequired - if contains annotations, that are not qualifiers, these are just ignored
+ * @return
+ */
+ <T> Can<T> select(Class<T> requiredType, Annotation[] qualifiersRequired);
/**
* @return IoC managed singleton wrapped in an Optional
@@ -95,6 +107,14 @@ public interface IocContainer {
}
+ // -- FACTORIES
+
+ static _IocContainer spring(ApplicationContext springContext) {
+ return _IocContainer_Spring.of(springContext);
+ }
+
+
+
}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/IocContainerSpring.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_IocContainer_Spring.java
similarity index 65%
rename from commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/IocContainerSpring.java
rename to commons/src/main/java/org/apache/isis/commons/internal/ioc/_IocContainer_Spring.java
index cfe9a8c..400c08b 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/IocContainerSpring.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_IocContainer_Spring.java
@@ -16,42 +16,43 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.commons.internal.ioc.spring;
+package org.apache.isis.commons.internal.ioc;
import java.lang.annotation.Annotation;
+import java.util.Collections;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import javax.inject.Qualifier;
import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Primary;
import org.springframework.core.ResolvableType;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.base._With;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.IocContainer;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.val;
/**
- *
+ * Spring specific implementation of _IocContainer (package private)
* @since 2.0
*
*/
@RequiredArgsConstructor(staticName = "of")
-public class IocContainerSpring implements IocContainer {
+final class _IocContainer_Spring implements _IocContainer {
@NonNull private final ApplicationContext springContext;
@Override
- public <T> Optional<T> get(Class<T> requiredType) {
+ public <T> Optional<T> get(final @NonNull Class<T> requiredType) {
val provider = springContext.getBeanProvider(requiredType);
try {
return Optional.ofNullable(provider.getIfUnique());
@@ -61,7 +62,7 @@ public class IocContainerSpring implements IocContainer {
}
@Override
- public Stream<ManagedBeanAdapter> streamAllBeans() {
+ public Stream<_ManagedBeanAdapter> streamAllBeans() {
val context = springContext;
@@ -76,12 +77,10 @@ public class IocContainerSpring implements IocContainer {
val resolvableType = ResolvableType.forClass(type);
val bean = context.getBeanProvider(resolvableType);
- val beanAdapter = BeanAdapterSpring.of(id, type, bean);
+ val beanAdapter = _ManagedBeanAdapter_Spring.of(id, type, bean);
return beanAdapter;
});
-
-
}
@Override
@@ -92,23 +91,20 @@ public class IocContainerSpring implements IocContainer {
}
@Override
- public <T> Can<T> select(final Class<T> requiredType) {
- _With.requires(requiredType, "requiredType");
-
+ public <T> Can<T> select(final @NonNull Class<T> requiredType) {
val allMatchingBeans = springContext.getBeanProvider(requiredType)
.orderedStream()
.collect(Can.toCan());
-
return allMatchingBeans;
}
@Override
public <T> Can<T> select(
- final Class<T> requiredType,
- @Nullable Set<Annotation> qualifiersRequired) {
-
- _With.requires(requiredType, "requiredType");
+ final @NonNull Class<T> requiredType,
+ final @Nullable Annotation[] qualifiers) {
+ val qualifiersRequired = filterQualifiers(qualifiers);
+
if(_NullSafe.isEmpty(qualifiersRequired)) {
val allMatchingBeans = springContext.getBeanProvider(requiredType)
@@ -129,5 +125,39 @@ public class IocContainerSpring implements IocContainer {
return allMatchingBeans;
}
+
+ // -- QUALIFIER PROCESSING
+
+ /**
+ * Filters the input array into a collection, such that only annotations are retained,
+ * that are valid qualifiers for CDI.
+ * @param annotations
+ * @return non-null
+ */
+ private static Set<Annotation> filterQualifiers(@Nullable final Annotation[] annotations) {
+ if(_NullSafe.isEmpty(annotations)) {
+ return Collections.emptySet();
+ }
+ return _NullSafe.stream(annotations)
+ .filter(_IocContainer_Spring::isGenericQualifier)
+ .collect(Collectors.toSet());
+ }
+
+ /**
+ * @param annotation
+ * @return whether or not the annotation is a valid qualifier for Spring
+ */
+ private static boolean isGenericQualifier(Annotation annotation) {
+ if(annotation==null) {
+ return false;
+ }
+ if(annotation.annotationType().getAnnotationsByType(Qualifier.class).length>0) {
+ return true;
+ }
+ if(annotation.annotationType().equals(Primary.class)) {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/ManagedBeanAdapter.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_ManagedBeanAdapter.java
similarity index 96%
rename from commons/src/main/java/org/apache/isis/commons/internal/ioc/ManagedBeanAdapter.java
rename to commons/src/main/java/org/apache/isis/commons/internal/ioc/_ManagedBeanAdapter.java
index 42ac32b..c2532fc 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/ioc/ManagedBeanAdapter.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_ManagedBeanAdapter.java
@@ -23,7 +23,7 @@ import org.apache.isis.commons.collections.Can;
/**
* @since 2.0
*/
-public interface ManagedBeanAdapter {
+public interface _ManagedBeanAdapter {
String getId();
Can<?> getInstance();
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_ManagedBeanAdapter_Spring.java
similarity index 89%
rename from commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
rename to commons/src/main/java/org/apache/isis/commons/internal/ioc/_ManagedBeanAdapter_Spring.java
index 769a3b3..c7be838 100644
--- a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
+++ b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_ManagedBeanAdapter_Spring.java
@@ -16,18 +16,17 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.commons.internal.ioc.spring;
+package org.apache.isis.commons.internal.ioc;
import org.springframework.beans.factory.ObjectProvider;
import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import lombok.Value;
import lombok.val;
@Value(staticConstructor="of")
-final class BeanAdapterSpring implements ManagedBeanAdapter {
+final class _ManagedBeanAdapter_Spring implements _ManagedBeanAdapter {
private final String id;
private final Class<?> beanClass;
@@ -46,7 +45,5 @@ final class BeanAdapterSpring implements ManagedBeanAdapter {
.map(Object::getClass)
.anyMatch(requiredType::isAssignableFrom);
}
-
-
-
+
}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/_Spring.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_Spring.java
new file mode 100644
index 0000000..a7ae96a
--- /dev/null
+++ b/commons/src/main/java/org/apache/isis/commons/internal/ioc/_Spring.java
@@ -0,0 +1,93 @@
+/*
+ * 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.commons.internal.ioc;
+
+import java.lang.annotation.Annotation;
+import java.util.concurrent.CompletionStage;
+
+import javax.enterprise.event.Event;
+import javax.enterprise.event.NotificationOptions;
+import javax.enterprise.util.TypeLiteral;
+
+import org.springframework.context.ApplicationEventPublisher;
+
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+
+/**
+ * <h1>- internal use only -</h1>
+ * <p>
+ * Framework internal Spring support.
+ * <p>
+ * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
+ * These may be changed or removed without notice!
+ *
+ * @since 2.0
+ */
+public final class _Spring {
+
+ public static <T> Event<T> event(ApplicationEventPublisher publisher) {
+ return new EventSpring<T>(publisher);
+ }
+
+ @RequiredArgsConstructor
+ @Log4j2
+ private static final class EventSpring<T> implements Event<T> {
+
+ private final ApplicationEventPublisher publisher;
+
+ @Override
+ public void fire(T event) {
+
+ if(log.isDebugEnabled()) {
+ log.debug("{} fire({} ... {})",
+ Thread.currentThread().getName(),
+ event.getClass().getSimpleName(),
+ event.toString());
+ }
+
+ publisher.publishEvent(event);
+ }
+
+ @Override
+ public <U extends T> CompletionStage<U> fireAsync(U event) {
+ throw _Exceptions.notImplemented();
+ }
+
+ @Override
+ public <U extends T> CompletionStage<U> fireAsync(U event, NotificationOptions options) {
+ throw _Exceptions.notImplemented(); }
+
+ @Override
+ public Event<T> select(Annotation... qualifiers) {
+ throw _Exceptions.notImplemented(); }
+
+ @Override
+ public <U extends T> Event<U> select(Class<U> subtype, Annotation... qualifiers) {
+ throw _Exceptions.notImplemented(); }
+
+ @Override
+ public <U extends T> Event<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
+ throw _Exceptions.notImplemented(); }
+
+ }
+
+}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java
deleted file mode 100644
index a7733c1..0000000
--- a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.commons.internal.ioc.spring;
-
-import java.lang.annotation.Annotation;
-import java.util.concurrent.CompletionStage;
-
-import javax.enterprise.event.Event;
-import javax.enterprise.event.NotificationOptions;
-import javax.enterprise.util.TypeLiteral;
-
-import org.springframework.context.ApplicationEventPublisher;
-
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@RequiredArgsConstructor
-@Log4j2
-class EventSpring<T> implements Event<T> {
-
- private final ApplicationEventPublisher publisher;
-
- @Override
- public void fire(T event) {
-
- if(log.isDebugEnabled()) {
- log.debug("{} fire({} ... {})",
- Thread.currentThread().getName(),
- event.getClass().getSimpleName(),
- event.toString());
- }
-
- publisher.publishEvent(event);
- }
-
- @Override
- public <U extends T> CompletionStage<U> fireAsync(U event) {
- throw _Exceptions.notImplemented();
- }
-
- @Override
- public <U extends T> CompletionStage<U> fireAsync(U event, NotificationOptions options) {
- throw _Exceptions.notImplemented(); }
-
- @Override
- public Event<T> select(Annotation... qualifiers) {
- throw _Exceptions.notImplemented(); }
-
- @Override
- public <U extends T> Event<U> select(Class<U> subtype, Annotation... qualifiers) {
- throw _Exceptions.notImplemented(); }
-
- @Override
- public <U extends T> Event<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
- throw _Exceptions.notImplemented(); }
-
-}
diff --git a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java b/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
deleted file mode 100644
index 224a121..0000000
--- a/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * 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.commons.internal.ioc.spring;
-
-import java.lang.annotation.Annotation;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.annotation.Nullable;
-import javax.enterprise.event.Event;
-import javax.inject.Qualifier;
-
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.env.ConfigurableEnvironment;
-import org.springframework.core.env.EnumerablePropertySource;
-import org.springframework.core.env.MapPropertySource;
-import org.springframework.core.env.PropertySource;
-
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.collections._Maps;
-
-import static org.apache.isis.commons.internal.base._NullSafe.stream;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * <h1>- internal use only -</h1>
- * <p>
- * Framework internal Spring support.
- * <p>
- * <b>WARNING</b>: Do <b>NOT</b> use any of the classes provided by this package! <br/>
- * These may be changed or removed without notice!
- *
- * @since 2.0
- */
-@Log4j2
-public class _Spring {
-
-// public static boolean isContextAvailable() {
-// return _Context.getIfAny(ApplicationContext.class)!=null;
-// }
-//
-// public static void init(ApplicationContext context) {
-// _Context.putSingleton(ApplicationContext.class, context);
-// }
-//
-// /** JUnit support */
-// public static void reinit(ApplicationContext applicationContext) {
-// _Context.remove(ApplicationContext.class);
-// _Spring.init(applicationContext);
-// }
-
-// public static ApplicationContext context() {
-// return _Context.getElseFail(ApplicationContext.class);
-// }
-
-// public static <T> Bin<T> select(final Class<T> requiredType) {
-// requires(requiredType, "requiredType");
-//
-// val allMatchingBeans = context().getBeanProvider(requiredType).orderedStream();
-// return Bin.ofStream(allMatchingBeans);
-// }
-//
-// public static <T> Bin<T> select(
-// final Class<T> requiredType,
-// @Nullable Set<Annotation> qualifiersRequired) {
-//
-// requires(requiredType, "requiredType");
-//
-// val allMatchingBeans = context().getBeanProvider(requiredType)
-// .orderedStream();
-//
-// if(_NullSafe.isEmpty(qualifiersRequired)) {
-// return Bin.ofStream(allMatchingBeans);
-// }
-//
-// final Predicate<T> hasAllQualifiers = t -> {
-// val qualifiersPresent = _Sets.of(t.getClass().getAnnotations());
-// return qualifiersPresent.containsAll(qualifiersRequired);
-// };
-//
-// return Bin.ofStream(allMatchingBeans
-// .filter(hasAllQualifiers));
-// }
-
-
-
-// /**
-// * @return Spring managed singleton wrapped in an Optional
-// */
-// public static <T> Optional<T> getSingleton(@Nullable Class<T> type) {
-// if(type==null) {
-// return Optional.empty();
-// }
-// return select(type).getSingleton();
-// }
-//
-// /**
-// * @return Spring managed singleton
-// * @throws NoSuchElementException - if the singleton is not resolvable
-// */
-// public static <T> T getSingletonElseFail(@Nullable Class<T> type) {
-// return getSingleton(type)
-// .orElseThrow(()->_Exceptions.noSuchElement("Cannot resolve singleton '%s'", type));
-//
-// }
-
- public static <T> Event<T> event(ApplicationEventPublisher publisher) {
- return new EventSpring<T>(publisher);
- }
-
- // -- QUALIFIER PROCESSING
-
- /**
- * Filters the input array into a collection, such that only annotations are retained,
- * that are valid qualifiers for CDI.
- * @param annotations
- * @return non-null
- */
- public static Set<Annotation> filterQualifiers(@Nullable final Annotation[] annotations) {
- if(_NullSafe.isEmpty(annotations)) {
- return Collections.emptySet();
- }
- return _NullSafe.stream(annotations)
- .filter(_Spring::isGenericQualifier)
- .collect(Collectors.toSet());
- }
-
- /**
- * @param annotation
- * @return whether or not the annotation is a valid qualifier for Spring
- */
- public static boolean isGenericQualifier(Annotation annotation) {
- if(annotation==null) {
- return false;
- }
- if(annotation.annotationType().getAnnotationsByType(Qualifier.class).length>0) {
- return true;
- }
- if(annotation.annotationType().equals(Primary.class)) {
- return true;
- }
- return false;
- }
-
- /**
- * Returns a key/value pair copy of Spring's environment
- * @see {@linkplain <a href="https://jira.spring.io/browse/SPR-10241">https://jira.spring.io/browse/SPR-10241</a>}
- * @param configurableEnvironment
- * @deprecated alternative solution {@linkplain <a href="https://stackoverflow.com/a/53950574/56880">stack-overflow</a>}
- */
- public static Map<String, String> copySpringEnvironmentToMap(
- ConfigurableEnvironment configurableEnvironment) {
-
- val map = _Maps.<String, String> newHashMap();
-
- for(Iterator<PropertySource<?>> it = configurableEnvironment.getPropertySources().iterator(); it.hasNext(); ) {
- val propertySource = it.next();
- if (propertySource instanceof MapPropertySource) {
-
- val mapPropertySource = (MapPropertySource) propertySource;
-
- mapPropertySource.getSource().forEach((key, value) ->
- putIfNewValuePresent_warnIfKeyAlreadyExists(key, value, map));
-
- } else if(propertySource instanceof EnumerablePropertySource) {
-
- val enumPropertySource = (EnumerablePropertySource<?>) propertySource;
-
- for (String key : enumPropertySource.getPropertyNames()) {
- val value = enumPropertySource.getProperty(key);
-
- putIfNewValuePresent_warnIfKeyAlreadyExists(key, value, map);
- }
-
- } else {
-
- log.warn("Ignoring PropertySource type '{}', "
- + "because we don't know how to iterate over its key/value pairs.",
- propertySource);
- }
-
- }
-
- return map;
- }
-
- // -- HELPER
-
- private static void putIfNewValuePresent_warnIfKeyAlreadyExists (
- String key,
- Object newValue,
- Map<String, String> dest) {
-
- if(newValue==null) {
- return;
- }
- val oldValue = dest.put(key, newValue.toString());
- if(oldValue!=null) {
- log.warn("overriding exising config key {} with value {} -> {}", key, oldValue, newValue);
- }
-
- }
-
-
-
-}
diff --git a/core/config/src/main/java/org/apache/isis/core/config/environment/IsisSystemEnvironment.java b/core/config/src/main/java/org/apache/isis/core/config/environment/IsisSystemEnvironment.java
index 22bdd3d..3f9b33f 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/environment/IsisSystemEnvironment.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/environment/IsisSystemEnvironment.java
@@ -35,8 +35,7 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.commons.internal.ioc.IocContainer;
-import org.apache.isis.commons.internal.ioc.spring.IocContainerSpring;
+import org.apache.isis.commons.internal.ioc._IocContainer;
import lombok.Getter;
import lombok.val;
@@ -62,14 +61,14 @@ public class IsisSystemEnvironment {
@Inject private ApplicationContext springContext;
- @Getter private IocContainer iocContainer;
+ @Getter private _IocContainer iocContainer;
// -- LIFE-CYCLE
@PostConstruct
public void postConstruct() {
- this.iocContainer = IocContainerSpring.of(springContext);
+ this.iocContainer = _IocContainer.spring(springContext);
log.info("postConstruct (hashCode = {})", this.hashCode());
@@ -118,7 +117,7 @@ public class IsisSystemEnvironment {
// -- SHORTCUTS
- public IocContainer ioc() {
+ public _IocContainer ioc() {
return getIocContainer();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java
index 9554f41..168a4c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceRegistry_forTesting.java
@@ -30,9 +30,8 @@ import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.IocContainer;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
-import org.apache.isis.commons.internal.ioc.spring._Spring;
+import org.apache.isis.commons.internal.ioc._IocContainer;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import lombok.Builder;
@@ -48,15 +47,14 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
@NonNull private final MetaModelContext metaModelContext;
- @Getter @Setter private IocContainer iocContainer;
- private final Set<ManagedBeanAdapter> registeredBeans = _Sets.newHashSet();
+ @Getter @Setter private _IocContainer iocContainer;
+ private final Set<_ManagedBeanAdapter> registeredBeans = _Sets.newHashSet();
@Override
public <T> Can<T> select(Class<T> type, Annotation[] qualifiers) {
if(iocContainer!=null) {
- return iocContainer
- .select(type, _Spring.filterQualifiers(qualifiers));
+ return iocContainer.select(type, qualifiers);
}
// ignore
@@ -84,12 +82,12 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
}
@Override
- public Stream<ManagedBeanAdapter> streamRegisteredBeans() {
+ public Stream<_ManagedBeanAdapter> streamRegisteredBeans() {
return registeredBeans().stream();
}
@Override
- public Optional<ManagedBeanAdapter> lookupRegisteredBeanById(String id) {
+ public Optional<_ManagedBeanAdapter> lookupRegisteredBeanById(String id) {
throw _Exceptions.notImplemented();
}
@@ -101,7 +99,7 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
// -- HELPER
- private Set<ManagedBeanAdapter> registeredBeans() {
+ private Set<_ManagedBeanAdapter> registeredBeans() {
synchronized(registeredBeans) {
if(registeredBeans.isEmpty()) {
@@ -125,7 +123,7 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
}
@Value @Builder
- private static class PojoBeanAdapter implements ManagedBeanAdapter {
+ private static class PojoBeanAdapter implements _ManagedBeanAdapter {
String id;
Can<?> instance;
@@ -138,7 +136,7 @@ class ServiceRegistry_forTesting implements ServiceRegistry {
}
- private ManagedBeanAdapter toBeanAdapter(Object singleton) {
+ private _ManagedBeanAdapter toBeanAdapter(Object singleton) {
return PojoBeanAdapter.builder()
.id(singleton.getClass().getName())
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
index 3c2f8e9..147e7a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/context/MetaModelContext_usingIoc.java
@@ -35,8 +35,8 @@ import org.apache.isis.applib.services.xactn.TransactionState;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.core.config.environment.IsisSystemEnvironment;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.IocContainer;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
+import org.apache.isis.commons.internal.ioc._IocContainer;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.services.ServiceUtil;
@@ -52,8 +52,8 @@ import lombok.val;
class MetaModelContext_usingIoc implements MetaModelContext {
- private final IocContainer iocContainer;
- public MetaModelContext_usingIoc(IocContainer iocContainer) {
+ private final _IocContainer iocContainer;
+ public MetaModelContext_usingIoc(_IocContainer iocContainer) {
this.iocContainer = iocContainer;
}
@@ -162,7 +162,7 @@ class MetaModelContext_usingIoc implements MetaModelContext {
.collect(Collectors.toMap(ServiceUtil::idOfAdapter, v->v, (o,n)->n, LinkedHashMap::new));
}
- private ManagedObject toManagedObject(ManagedBeanAdapter managedBeanAdapter) {
+ private ManagedObject toManagedObject(_ManagedBeanAdapter managedBeanAdapter) {
val servicePojo = managedBeanAdapter.getInstance().getFirst()
.orElseThrow(()->_Exceptions.unrecoverableFormatted(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java
index 0ab0fd5..471b774 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/load/ObjectLoader_builtinHandlers.java
@@ -23,7 +23,7 @@ import java.lang.reflect.Modifier;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
@@ -94,7 +94,7 @@ final class ObjectLoader_builtinHandlers {
val servicePojo = metaModelContext.getServiceRegistry()
.lookupRegisteredBeanById(beanName)
- .map(ManagedBeanAdapter::getInstance)
+ .map(_ManagedBeanAdapter::getInstance)
.flatMap(Can::getFirst)
.orElseThrow(()->_Exceptions.noSuchElement(
"loader: %s loading beanName %s",
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventSupport_Spring.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventSupport_Spring.java
index d688b75..eaf857f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventSupport_Spring.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/events/MetamodelEventSupport_Spring.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.events.ui.CssClassUiEvent;
import org.apache.isis.applib.events.ui.IconUiEvent;
import org.apache.isis.applib.events.ui.LayoutUiEvent;
import org.apache.isis.applib.events.ui.TitleUiEvent;
-import org.apache.isis.commons.internal.ioc.spring._Spring;
+import org.apache.isis.commons.internal.ioc._Spring;
@Configuration
@Named("isisMetaModel.MetamodelEventSupport_Spring")
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
index afafb57..4f671d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/registry/ServiceRegistryDefault.java
@@ -39,8 +39,8 @@ import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.core.config.environment.IsisSystemEnvironment;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
-import org.apache.isis.commons.internal.ioc.spring._Spring;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
+import org.apache.isis.commons.internal.ioc._Spring;
import org.apache.isis.core.config.beans.IsisBeanTypeRegistryHolder;
import lombok.val;
@@ -57,7 +57,7 @@ public final class ServiceRegistryDefault implements ServiceRegistry {
@Inject private IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder;
@Override
- public Optional<ManagedBeanAdapter> lookupRegisteredBeanById(String id) {
+ public Optional<_ManagedBeanAdapter> lookupRegisteredBeanById(String id) {
return Optional.ofNullable(managedBeansById.get().get(id));
}
@@ -67,25 +67,25 @@ public final class ServiceRegistryDefault implements ServiceRegistry {
}
@Override
- public Stream<ManagedBeanAdapter> streamRegisteredBeans() {
+ public Stream<_ManagedBeanAdapter> streamRegisteredBeans() {
return managedBeansById.get().values().stream();
}
@Override
public <T> Can<T> select(Class<T> type, Annotation[] qualifiers) {
return isisSystemEnvironment.getIocContainer()
- .select(type, _Spring.filterQualifiers(qualifiers));
+ .select(type, qualifiers);
}
// -- HELPER
- private final _Lazy<Map<String, ManagedBeanAdapter>> managedBeansById =
+ private final _Lazy<Map<String, _ManagedBeanAdapter>> managedBeansById =
_Lazy.threadSafe(this::enumerateManagedBeans);
- private Map<String, ManagedBeanAdapter> enumerateManagedBeans() {
+ private Map<String, _ManagedBeanAdapter> enumerateManagedBeans() {
val beanTypeRegistry = isisBeanTypeRegistryHolder.getIsisBeanTypeRegistry();
- val managedBeanAdapterByName = _Maps.<String, ManagedBeanAdapter>newHashMap();
+ val managedBeanAdapterByName = _Maps.<String, _ManagedBeanAdapter>newHashMap();
isisSystemEnvironment.getIocContainer().streamAllBeans()
.filter(_NullSafe::isPresent)
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java
index 5b6da011..ab50f9a 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceProvisioningTest.java
@@ -37,7 +37,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.config.environment.IsisSystemEnvironment;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
+import org.apache.isis.commons.internal.ioc._ManagedBeanAdapter;
import org.apache.isis.commons.internal.resources._Resources;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.testdomain.Smoketest;
@@ -80,7 +80,7 @@ class SpringServiceProvisioningTest {
void dump_all() throws IOException {
final List<String> beans = isisSystemEnvironment.getIocContainer().streamAllBeans()
- .map(ManagedBeanAdapter::getId)
+ .map(_ManagedBeanAdapter::getId)
.sorted()
.collect(Collectors.toList());
@@ -94,7 +94,7 @@ class SpringServiceProvisioningTest {
void builtInServices_shouldBeSetUp() throws IOException {
val managedServices = serviceRegistry.streamRegisteredBeans()
- .map(ManagedBeanAdapter::getBeanClass)
+ .map(_ManagedBeanAdapter::getBeanClass)
.map(Class::getName)
.collect(Collectors.toCollection(TreeSet::new));
diff --git a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java
index 8e63bf8..15c4f14 100644
--- a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java
+++ b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/eventhandling/SpringEventPublishingTest.java
@@ -31,7 +31,7 @@ import org.springframework.stereotype.Service;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.apache.isis.commons.internal.ioc.spring._Spring;
+import org.apache.isis.commons.internal.ioc._Spring;
import lombok.Getter;
import lombok.Value;