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

ahuber pushed a commit to branch 2033-IoC
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/2033-IoC by this push:
     new e61c9c8  ISIS-2033: adds a dummy RootOid provider for JPA
e61c9c8 is described below

commit e61c9c8e1dda2ea2927e2142891ca78c9c3b7ea7
Author: Andi Huber <[email protected]>
AuthorDate: Tue Jan 29 23:08:16 2019 +0100

    ISIS-2033: adds a dummy RootOid provider for JPA
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 ...ctionInvocationFacetForDomainEventAbstract.java |  4 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  3 ++
 .../ObjectAdapterContext_OidProviders.java         | 43 ++++++++++++++++++++++
 3 files changed, 48 insertions(+), 2 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 66091c0..a14d108 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -144,10 +144,10 @@ implements ImperativeFacet {
             final ObjectAdapter[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter holder = 
+        final ObjectAdapter executionResult = 
                 
getPersistenceSessionServiceInternal().executeWithinTransaction(()->
                     doInvoke(owningAction, targetAdapter, mixedInAdapter, 
argumentAdapters, interactionInitiatedBy));
-        return holder;
+        return executionResult;
     }
 
     ObjectAdapter doInvoke(
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 6444f5b..90ea7d7 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -73,6 +73,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements 
ObjectAdapterProvide
         this.oidFactory = 
OidFactory.builder(pojo->specificationLoader.loadSpecification(pojo.getClass()))
                 .add(new 
ObjectAdapterContext_OidProviders.GuardAgainstRootOid())
                 .add(new ObjectAdapterContext_OidProviders.OidForServices())
+                .add(new 
ObjectAdapterContext_OidProviders.OidForManagedBeans())
                 .add(new ObjectAdapterContext_OidProviders.OidForValues())
                 .add(new ObjectAdapterContext_OidProviders.OidForViewModels())
                 .add(new ObjectAdapterContext_OidProviders.OidForPersistent())
@@ -87,6 +88,8 @@ class ObjectAdapterContext_ObjectAdapterProvider implements 
ObjectAdapterProvide
             return null;
         }
         
+        //FIXME [2033] the pojo might be a managed object (eg. by Spring or 
CDI), this is new 
+        
         final RootOid rootOid = oidFactory.oidFor(pojo);
         final ObjectAdapter newAdapter = 
objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
         return objectAdapterContext.injectServices(newAdapter);
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
index b960cff..4421f59 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
@@ -18,8 +18,13 @@
  */
 package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.UUID;
 
+import javax.persistence.Entity;
+
+import org.apache.isis.commons.internal._Constants;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
@@ -30,6 +35,8 @@ import 
org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import 
org.apache.isis.core.runtime.system.persistence.adaptermanager.factories.OidFactory.OidProvider;
 
+import lombok.val;
+
 class ObjectAdapterContext_OidProviders {
 
     
@@ -91,6 +98,42 @@ class ObjectAdapterContext_OidProviders {
         
     }
 
+    static class OidForManagedBeans implements OidProvider {
+
+        //FIXME [2033] this is just a PoC for 'Customer'
+       
+        @Override
+        public boolean isHandling(Object pojo, ObjectSpecification spec) {
+               return pojo.getClass().isAnnotationPresent(Entity.class);
+        }
+
+        @Override
+        public RootOid oidFor(Object pojo, ObjectSpecification spec) {
+               try {
+                               return oidForCustomer(pojo, spec);
+                       } catch (NoSuchMethodException | SecurityException | 
IllegalAccessException | IllegalArgumentException
+                                       | InvocationTargetException e) {
+                               throw _Exceptions.unrecoverable(e);
+                       }
+        }
+        
+        private RootOid oidForCustomer(Object pojo, ObjectSpecification spec) 
+                       throws NoSuchMethodException, SecurityException, 
IllegalAccessException, 
+                       IllegalArgumentException, InvocationTargetException {
+               
+               val idGetter = pojo.getClass().getMethod("getId", 
_Constants.emptyClasses);
+               Long id = (Long)idGetter.invoke(pojo, _Constants.emptyObjects);
+               if(id!=null && id>0) {
+                       final String identifier = "" + id;
+                       return Oid.Factory.persistentOf(spec.getSpecId(), 
identifier);  
+               } else {
+                final String identifier = UUID.randomUUID().toString();
+                return Oid.Factory.transientOf(spec.getSpecId(), identifier);  
  
+            }
+        }
+        
+    }
+
     static class OidForValues implements OidProvider {
 
         @Override

Reply via email to