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 2015/09/11 00:08:36 UTC

[12/50] isis git commit: ISIS-1194: moving ObjectSpecification#createObject to PersistenceSession.

ISIS-1194: moving ObjectSpecification#createObject to PersistenceSession.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/96abb170
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/96abb170
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/96abb170

Branch: refs/heads/master
Commit: 96abb17027ad485612bcd6811e3b63f17e2c2418
Parents: 7da8aa5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Sep 10 14:33:13 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Sep 10 14:33:13 2015 +0100

----------------------------------------------------------------------
 .../metamodel/spec/ObjectSpecification.java     |  1 -
 .../dflt/ObjectSpecificationDefault.java        | 29 -------------
 .../ObjectSpecificationOnStandaloneList.java    |  6 ---
 .../testspec/ObjectSpecificationStub.java       | 11 +----
 .../isis/core/runtime/memento/Memento.java      |  4 +-
 .../adaptermanager/AdapterManagerDefault.java   |  5 ++-
 ...shingServiceWithDefaultPayloadFactories.java |  3 +-
 .../system/persistence/PersistenceSession.java  | 43 +++++++++++++++++++-
 8 files changed, 49 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 5a0f605..e59ae4f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -335,7 +335,6 @@ public interface ObjectSpecification extends Specification, ObjectActionContaine
     // Creation
     // //////////////////////////////////////////////////////////////
 
-    Object createObject();
 
     /**
      * REVIEW: should this behaviour move, eg onto ObjectAdapter?

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 5ff3e3b..effa99a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -411,35 +411,6 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
     // //////////////////////////////////////////////////////////////////////
 
 
-    @Override
-    public Object createObject() {
-        if (getCorrespondingClass().isArray()) {
-            return Array.newInstance(getCorrespondingClass().getComponentType(), 0);
-        }
-        
-        try {
-            final Class<?> cls = getCorrespondingClass();
-
-            if (Modifier.isAbstract(cls.getModifiers())) {
-                throw new ObjectInstantiationException("Cannot create an instance of an abstract class: " + cls);
-            }
-            final Object newInstance;
-            if (Modifier.isAbstract(cls.getModifiers())) {
-                throw new ObjectInstantiationException("Cannot create an instance of an abstract class: " + cls);
-            }
-            try {
-                newInstance = cls.newInstance();
-            } catch (final IllegalAccessException | InstantiationException e) {
-                throw new ObjectInstantiationException(e);
-            }
-
-            getDependencyInjector().injectServicesInto(newInstance);
-            return newInstance;
-        } catch (final ObjectInstantiationException e) {
-            throw new IsisException("Failed to create instance of type " + getFullIdentifier(), e);
-        }
-    }
-
     /**
      * REVIEW: does this behaviour live best here?  Not that sure that it does...
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
index 18ce582..a7f88c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/standalonelist/ObjectSpecificationOnStandaloneList.java
@@ -182,11 +182,5 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
     }
 
 
-    @Override
-    public Object createObject() {
-        throw new UnsupportedOperationException(getFullIdentifier());
-    }
-
-
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 9fa6c1b..4f0eb63 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -324,20 +324,11 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
-    public Object createObject() {
-        try {
-            final Class<?> cls = Class.forName(name);
-            return cls.newInstance();
-        } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException e) {
-            throw new IsisException(e);
-        }
-    }
-
-    @Override
     public ObjectAdapter initialize(final ObjectAdapter objectAdapter) {
         return objectAdapter;
     }
 
+    // TODO: not used
     public void setupPersistable(final Persistability persistable) {
         this.persistable = persistable;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
index 9484d7f..91cb87a 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
@@ -203,8 +203,8 @@ public class Memento implements Serializable {
         
         final Oid oid = getOid();
 		if (spec.isParentedOrFreeCollection()) {
-        	
-        	final Object recreatedPojo = spec.createObject();
+
+            final Object recreatedPojo = getPersistenceSession().createObject(spec);
         	adapter = getPersistenceSession().getAdapterManager() .mapRecreatedPojo(oid, recreatedPojo);
             populateCollection(adapter, (CollectionData) data);
             

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index 756db86..d04366c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -371,7 +371,7 @@ public class AdapterManagerDefault implements AdapterManager,
     private Object recreatePojoDefault(final RootOid rootOid) {
         final ObjectSpecification spec =
                 specificationLoader.lookupBySpecId(rootOid.getObjectSpecId());
-        final Object pojo = spec.createObject();
+        final Object pojo = persistenceSession.createObject(spec);
         if(rootOid.isViewModel()) {
             // initialize the view model pojo from the oid's identifier
 
@@ -748,7 +748,8 @@ public class AdapterManagerDefault implements AdapterManager,
         // take care not to touch the pojo, since it might have been deleted.
         ensureThatArg(
                 adapter, is(adapterAccordingToOidAdapterMap),
-                "mismatch in OidAdapter map: " + "adapter's Oid: " + adapterOid + ", " + "provided adapter's OID: " + adapter.getOid() + "; " + "map's adapter's Oid: " + adapterAccordingToOidAdapterMap.getOid());
+                "mismatch in OidAdapter map: " + "adapter's Oid: " + adapterOid + ", " + "provided adapter's OID: "
+                        + adapter.getOid() + "; " + "map's adapter's Oid: " + adapterAccordingToOidAdapterMap.getOid());
     }
     //endregion
 

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
index 9ebfd88..9f00b33 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PublishingServiceWithDefaultPayloadFactories.java
@@ -57,7 +57,8 @@ public class PublishingServiceWithDefaultPayloadFactories {
             }
             // objectstores such as JDO prevent the underlying pojo from being touched once it has been deleted.
             // we therefore replace that pojo with an 'empty' one.
-            Object replacementObject = adapter.getSpecification().createObject();
+
+            Object replacementObject = getPersistenceSession().createObject(adapter.getSpecification());
             getPersistenceSession().getAdapterManager().remapRecreatedPojo(adapter, replacementObject);
             return adapter;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/96abb170/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 5cae6b5..aa18041 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.core.runtime.system.persistence;
 
+import java.lang.reflect.Array;
+import java.lang.reflect.Modifier;
 import java.text.MessageFormat;
 import java.util.List;
 import java.util.Map;
@@ -43,6 +45,7 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.debug.DebugBuilder;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.commons.ensure.Assert;
+import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -55,6 +58,7 @@ import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
+import org.apache.isis.core.metamodel.spec.ObjectInstantiationException;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -382,21 +386,56 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
         if (LOG.isDebugEnabled()) {
             LOG.debug("creating transient instance of " + objectSpec);
         }
-        final Object pojo = objectSpec.createObject();
+        final Object pojo = createObject(objectSpec);
         final ObjectAdapter adapter = adapterManager.adapterFor(pojo);
         return objectSpec.initialize(adapter);
     }
 
+
+
     public ObjectAdapter createViewModelInstance(final ObjectSpecification objectSpec, final String memento) {
         if (LOG.isDebugEnabled()) {
             LOG.debug("creating view model instance of " + objectSpec);
         }
-        final Object pojo = objectSpec.createObject();
+        final Object pojo = createObject(objectSpec);
         final ViewModelFacet facet = objectSpec.getFacet(ViewModelFacet.class);
         facet.initialize(pojo, memento);
         final ObjectAdapter adapter = adapterManager.adapterFor(pojo);
         return objectSpec.initialize(adapter);
     }
+
+
+    public Object createObject(final ObjectSpecification objectSpec) {
+
+        final Class<?> correspondingClass = objectSpec.getCorrespondingClass();
+        if (correspondingClass.isArray()) {
+            return Array.newInstance(correspondingClass.getComponentType(), 0);
+        }
+
+        try {
+            final Class<?> cls = correspondingClass;
+
+            if (Modifier.isAbstract(cls.getModifiers())) {
+                throw new ObjectInstantiationException("Cannot create an instance of an abstract class: " + cls);
+            }
+            final Object newInstance;
+            if (Modifier.isAbstract(cls.getModifiers())) {
+                throw new ObjectInstantiationException("Cannot create an instance of an abstract class: " + cls);
+            }
+            try {
+                newInstance = cls.newInstance();
+            } catch (final IllegalAccessException | InstantiationException e) {
+                throw new ObjectInstantiationException(e);
+            }
+
+            servicesInjector.injectServicesInto(newInstance);
+            return newInstance;
+        } catch (final ObjectInstantiationException e) {
+            throw new IsisException("Failed to create instance of type " + objectSpec.getFullIdentifier(), e);
+        }
+    }
+
+
     //endregion
 
     //region > findInstancesInTransaction