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 2019/10/30 15:03:25 UTC

[isis] 06/07: ISIS-2158: remove injection points from FormAbstract

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

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

commit 5fa4560184b371c7f7fcc21e41cf0808bea46a68
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 30 15:14:25 2019 +0100

    ISIS-2158: remove injection points from FormAbstract
---
 ...doPersistenceCapableAnnotationFacetFactory.java |  3 +-
 .../JdoPersistenceCapableFacetAbstract.java        | 13 ++++-
 .../JdoPersistenceCapableFacetImpl.java            | 13 +++--
 .../isis/runtime/system/context/IsisContext.java   |  2 +
 .../isis/viewer/wicket/ui/panels/FormAbstract.java | 58 +++++++++++-----------
 5 files changed, 53 insertions(+), 36 deletions(-)

diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
index 039f470..80c2812 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableAnnotationFacetFactory.java
@@ -71,6 +71,5 @@ implements ObjectSpecIdFacetFactory {
                 annotationTableAttribute, annotationIdentityType, processClassContext.getFacetHolder()));
         return;
     }
-
-
+    
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
index 3dd58cf..fc84358 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
@@ -22,10 +22,12 @@ import java.util.Map;
 
 import javax.jdo.annotations.IdentityType;
 
+import org.apache.isis.jdo.persistence.IsisPersistenceSessionJdo;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.entity.EntityFacet;
+import org.apache.isis.runtime.system.persistence.PersistenceSession;
 
 
 public abstract class JdoPersistenceCapableFacetAbstract 
@@ -45,6 +47,7 @@ implements JdoPersistenceCapableFacet {
             final String tableOrTypeName,
             final IdentityType identityType,
             final FacetHolder holder) {
+        
         super(JdoPersistenceCapableFacetAbstract.type(), holder, Derivation.NOT_DERIVED);
         super.setFacetAliasType(EntityFacet.class);
         this.schema = schemaName;
@@ -61,16 +64,24 @@ implements JdoPersistenceCapableFacet {
     public String getSchema() {
         return schema;
     }
+    
     @Override
     public String getTable() {
         return table;
     }
 
-    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+    @Override 
+    public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
         attributeMap.put("schema", schema);
         attributeMap.put("table", table);
         attributeMap.put("identityType", identityType);
     }
     
+    protected IsisPersistenceSessionJdo getPersistenceSessionJdo() {
+        return PersistenceSession.current(IsisPersistenceSessionJdo.class)
+                .getFirst()
+                .orElse(null);
+    }
+    
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index 4998121..13d0769 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -27,7 +27,6 @@ import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtime.system.context.IsisContext;
 
 import lombok.val;
 
@@ -47,7 +46,7 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
         
         //TODO simplify, spec is already loaded
         
-        val persistenceSession = IsisContext.getPersistenceSession().get();
+        val persistenceSession = super.getPersistenceSessionJdo();
         val adapter = persistenceSession.getObjectAdapterByIdProvider()
                 .adapterFor(Oid.Factory.persistentOf(spec.getSpecId(), identifier)); 
         
@@ -63,7 +62,7 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
             return "?";
         }
         
-        val persistenceSession = IsisContext.getPersistenceSession().get();
+        val persistenceSession = super.getPersistenceSessionJdo();
         val isRecognized = persistenceSession.isRecognized(pojo);
         if(isRecognized) {
             final String identifier = persistenceSession.identifierFor(pojo);
@@ -76,8 +75,14 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
 
     @Override
     public void persist(ObjectSpecification spec, Object pojo) {
-        // TODO Auto-generated method stub
+
+        if(pojo==null || !isPersistableType(pojo.getClass())) {
+            return; //noop
+        }
         
+        val persistenceSession = super.getPersistenceSessionJdo();
+        //TODO don't bypass domain logic !? 
+        persistenceSession.getJdoPersistenceManager().makePersistent(pojo);
     }
 
     // -- HELPER
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
index 9ffa7b9..841493b 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/IsisContext.java
@@ -86,11 +86,13 @@ public interface IsisContext {
      * TODO [2033] its unclear whether there is only one or multiple
      * @return framework's currently resolvable PersistenceSessions
      */
+    @Deprecated
     public static Optional<PersistenceSession> getPersistenceSession() {
         return PersistenceSession.current(PersistenceSession.class)
                 .getFirst();
     }
 
+    @Deprecated
     public static Function<RootOid, ObjectAdapter> rootOidToAdapter() {
         return rootOid -> {
             val ps = IsisContext.getPersistenceSession()
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
index 92bcc70..bb4d7fd 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormAbstract.java
@@ -19,71 +19,71 @@
 
 package org.apache.isis.viewer.wicket.ui.panels;
 
-import javax.inject.Inject;
-
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.security.authentication.AuthenticationSession;
+import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistryAccessor;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
-import lombok.Getter;
-
 public abstract class FormAbstract<T> extends Form<T>
 implements ComponentFactoryRegistryAccessor, PageClassRegistryAccessor {
 
     private static final long serialVersionUID = 1L;
 
+    private transient ComponentFactoryRegistry componentFactoryRegistry;
+    private transient PageClassRegistry pageClassRegistry;
+    private transient IsisWebAppCommonContext commonContext;
+    
     public FormAbstract(final String id) {
         super(id);
-        this.commonContext = IsisWebAppCommonContext.of(metaModelContext);
     }
 
     public FormAbstract(final String id, final IModel<T> model) {
         super(id, model);
-        this.commonContext = IsisWebAppCommonContext.of(metaModelContext);
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Convenience
-    // ///////////////////////////////////////////////////////////////////
-
+    public IsisWebAppCommonContext getCommonContext() {
+        return commonContext = CommonContextUtils.computeIfAbsent(commonContext);
+    }
+    
     @Override
     public ComponentFactoryRegistry getComponentFactoryRegistry() {
-        return ((ComponentFactoryRegistryAccessor) getApplication()).getComponentFactoryRegistry();
+        if(componentFactoryRegistry==null) {
+            componentFactoryRegistry = ((ComponentFactoryRegistryAccessor) getApplication()).getComponentFactoryRegistry(); 
+        }
+        return componentFactoryRegistry;
     }
 
     @Override
     public PageClassRegistry getPageClassRegistry() {
-        return ((PageClassRegistryAccessor) getApplication()).getPageClassRegistry();
+        if(pageClassRegistry==null) {
+            pageClassRegistry = ((PageClassRegistryAccessor) getApplication()).getPageClassRegistry();
+        }
+        return pageClassRegistry;
     }
 
-    // ///////////////////////////////////////////////////////////////////
-    // Dependencies (from IsisContext)
-    // ///////////////////////////////////////////////////////////////////
-
-    protected  PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession().orElse(null);
+    protected SpecificationLoader getSpecificationLoader() {
+        return getCommonContext().getSpecificationLoader();
     }
 
-    protected  AuthenticationSession getAuthenticationSession() {
-        return commonContext.getAuthenticationSession();
+    protected ServiceRegistry getServiceRegistry() {
+        return getCommonContext().getServiceRegistry();
+    }
+    
+    protected TranslationService getTranslationService() {
+        return getCommonContext().getTranslationService();
+    }
+    
+    protected AuthenticationSession getAuthenticationSession() {
+        return getCommonContext().getAuthenticationSession();
     }
-
-    @Inject @Getter protected transient SpecificationLoader specificationLoader;
-    @Inject @Getter protected transient ServiceRegistry serviceRegistry;
-    @Inject @Getter protected transient TranslationService translationService;
-    @Inject private transient MetaModelContext metaModelContext;
-    @Getter protected final transient IsisWebAppCommonContext commonContext;
 
 }