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 2021/07/16 12:13:24 UTC

[isis] branch master updated: ISIS-2798: makes ServiceInjectorDefault intelligent to automatically unwrap...

This is an automated email from the ASF dual-hosted git repository.

danhaywood 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 a361d18  ISIS-2798: makes ServiceInjectorDefault intelligent to automatically unwrap...
a361d18 is described below

commit a361d1827d5283a0286f4fcccf41d67eb875c526
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jul 16 13:13:04 2021 +0100

    ISIS-2798: makes ServiceInjectorDefault intelligent to automatically unwrap...
    
    ... ManagedObjects if passed in instead of a pojo
---
 .../metamodel/services/ServiceInjectorDefault.java | 35 +++++++++++++++-------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
index 0bfe697..296abd1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
@@ -18,17 +18,21 @@
  */
 package org.apache.isis.core.metamodel.services;
 
-import lombok.RequiredArgsConstructor;
+import javax.annotation.Nullable;
+import javax.annotation.Priority;
+import javax.inject.Inject;
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Nullable;
-import javax.annotation.Priority;
-import javax.inject.Inject;
-import javax.inject.Named;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.val;
 
 /**
  *
@@ -48,15 +52,26 @@ public class ServiceInjectorDefault implements ServiceInjector {
     public <T> T injectServicesInto(final @Nullable T domainObject) {
 
         if(domainObject!=null) {
-
-            autowireCapableBeanFactory.autowireBeanProperties(
-                    domainObject,
-                    AutowireCapableBeanFactory.AUTOWIRE_NO,
-                    /*dependencyCheck*/ false);
+            if(domainObject instanceof ManagedObject) {
+                // in case a ManagedObject was passed instead of the pojo.
+                val managedObject = (ManagedObject) domainObject;
+                val actualDomainObject = managedObject.getPojo();
+                if(actualDomainObject != null) {
+                    injectInto(actualDomainObject);
+                }
+            } else {
+                injectInto(domainObject);
+            }
         }
 
         return domainObject;
     }
 
+    private <T> void injectInto(final @NonNull T domainObject) {
+        autowireCapableBeanFactory.autowireBeanProperties(
+                domainObject,
+                AutowireCapableBeanFactory.AUTOWIRE_NO,
+                /*dependencyCheck*/ false);
+    }
 
 }