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 2018/09/29 17:49:42 UTC

[isis] 01/03: ISIS-1976: move element spec. property from OA into ObjectSpecification

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 5985538b886152b4bc2081b08fc67e80fe371de6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Sep 29 17:37:31 2018 +0200

    ISIS-1976: move element spec. property from OA into ObjectSpecification
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 38 ++++++++--------
 ...ctionInvocationFacetForDomainEventAbstract.java |  2 +-
 .../isis/core/metamodel/spec/ManagedObject.java    | 36 +++++++--------
 .../core/metamodel/spec/ObjectSpecification.java   |  9 ++++
 .../spec/feature/OneToOneAssociation.java          |  1 +
 .../specimpl/dflt/ObjectSpecificationDefault.java  | 11 +++++
 .../ObjectSpecificationOnStandaloneList.java       | 12 +++++
 .../testspec/ObjectSpecificationStub.java          | 12 +++++
 .../runtime/persistence/adapter/PojoAdapter.java   | 52 +++++++++++-----------
 .../ObjectAdapterContext_Factories.java            |  3 +-
 .../actionresponse/ActionResultResponseType.java   |  3 +-
 11 files changed, 111 insertions(+), 68 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index f38375d..f2f54f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -110,26 +110,24 @@ public interface ObjectAdapter extends ManagedObject {
      */
     Instance getInstance(Specification specification);
 
-    /**
-     * For (stand-alone) collections, returns the element type.
-     *
-     * <p>
-     * For owned (aggregated) collections, the element type can be determined
-     * from the <tt>TypeOfFacet</tt> associated with the
-     * <tt>ObjectAssociation</tt> representing the collection.
-     *
-     * @see #setElementSpecificationProvider(ElementSpecificationProvider)
-     */
-    ObjectSpecification getElementSpecification();
-
-    /**
-     * For (stand-alone) collections, returns the element type.
-     *
-     * @see #getElementSpecification()
-     */
-    void setElementSpecificationProvider(ElementSpecificationProvider elementSpecificationProvider);
-
-
+//    /**
+//     * For (stand-alone) collections, returns the element type.
+//     *
+//     * <p>
+//     * For owned (aggregated) collections, the element type can be determined
+//     * from the <tt>TypeOfFacet</tt> associated with the
+//     * <tt>ObjectAssociation</tt> representing the collection.
+//     *
+//     * @see #setElementSpecificationProvider(ElementSpecificationProvider)
+//     */
+//    ObjectSpecification getElementSpecification();
+//
+//    /**
+//     * For (stand-alone) collections, returns the element type.
+//     *
+//     * @see #getElementSpecification()
+//     */
+//    void setElementSpecificationProvider(ElementSpecificationProvider elementSpecificationProvider);
 
 
     /**
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 871e667..590f471 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
@@ -425,7 +425,7 @@ implements ImperativeFacet {
 
         // copy over TypeOfFacet if required
         final TypeOfFacet typeOfFacet = getFacetHolder().getFacet(TypeOfFacet.class);
-        clonedAdapter.setElementSpecificationProvider(ElementSpecificationProvider.of(typeOfFacet));
+        clonedAdapter.getSpecification().setElementSpecificationProvider(ElementSpecificationProvider.of(typeOfFacet));
 
         return clonedAdapter;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index dd36175..2bfd140 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.core.metamodel.spec;
 
-import static org.apache.isis.commons.internal.base._With.requires;
-
 import java.util.function.Supplier;
 
 import org.apache.isis.commons.internal.base._Lazy;
@@ -119,9 +117,15 @@ public interface ManagedObject extends Instance {
 
     }
     
-    // -- COLLECTIN SUPPORT
+    // -- COLLECTION SUPPORT
     
-    ObjectSpecification getElementSpecification();
+    /**
+     * Used only for (standalone or parented) collections.
+     * @return
+     */
+    default public ObjectSpecification getElementSpecification() {
+        return getSpecification().getElementSpecification();
+    }
     
     // -- GLUE CODE
     
@@ -131,7 +135,10 @@ public interface ManagedObject extends Instance {
     
     // -- FACTORIES
     
-    public static ManagedObject of(ObjectSpecification specification, Object pojo) {
+    public static ManagedObject of(
+            final ObjectSpecification specification, 
+            final Object pojo) {
+        
         return new ManagedObject() {
             @Override
             public ObjectSpecification getSpecification() {
@@ -141,18 +148,16 @@ public interface ManagedObject extends Instance {
             public Object getPojo() {
                 return pojo;
             }
-            @Override
-            public ObjectSpecification getElementSpecification() {
-                // TODO Auto-generated method stub
-                return null;
-            }
         };
     }
     
-    public static ManagedObject of(Supplier<ObjectSpecification> specificationSupplier, Object pojo) {
-        requires(specificationSupplier, "specificationSupplier");
+    public static ManagedObject of(
+            final Supplier<ObjectSpecification> specificationSupplier, 
+            final Object pojo) {
+        
         return new ManagedObject() {
             private final _Lazy<ObjectSpecification> specification = _Lazy.of(specificationSupplier);
+            
             @Override
             public ObjectSpecification getSpecification() {
                 return specification.get();
@@ -161,15 +166,8 @@ public interface ManagedObject extends Instance {
             public Object getPojo() {
                 return pojo;
             }
-            @Override
-            public ObjectSpecification getElementSpecification() {
-                // TODO Auto-generated method stub
-                return null;
-            }
         };
     }
-
-
     
 
 }
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 33d2fc3..d9d67fe 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
@@ -197,6 +197,14 @@ ObjectAssociationContainer, Hierarchical,  DefaultProvider {
 
     boolean isAbstract();
 
+    /**
+     * 
+     * @since 2.0.0-M2
+     */
+    ObjectSpecification getElementSpecification();
+    void setElementSpecificationProvider(ElementSpecificationProvider provider);
+
+
     // //////////////////////////////////////////////////////////////
     // TitleContext
     // //////////////////////////////////////////////////////////////
@@ -345,4 +353,5 @@ ObjectAssociationContainer, Hierarchical,  DefaultProvider {
     
 
 
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
index bee5db5..fc148a4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
@@ -52,6 +52,7 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
 
 
     //FIXME[ISIS-1976] only temporary for refactoring - remove
+    @Deprecated
     ManagedObject get2(ManagedObject adapter, InteractionInitiatedBy initiatedBy);
 
 
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 234bc30..ae6f899 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
@@ -50,6 +50,7 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.object.wizard.WizardFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -87,6 +88,8 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
     private final FacetedMethodsBuilder facetedMethodsBuilder;
     private final boolean isService;
 
+    private ObjectSpecification elementSpecification;
+
 
     public ObjectSpecificationDefault(
             final Class<?> correspondingClass,
@@ -407,6 +410,14 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
         return str.toString();
     }
 
+    @Override
+    public ObjectSpecification getElementSpecification() {
+        return elementSpecification;
+    }
 
+    @Override
+    public void setElementSpecificationProvider(ElementSpecificationProvider provider) {
+        this.elementSpecification = provider.getElementType();
+    }
 
 }
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 0e59555..b73f85f 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
@@ -26,6 +26,7 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetDefaultTo
 import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetOnStandaloneList;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -44,6 +45,7 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
     private static final String NAME = "Instances";
     private static final String DESCRIBED_AS = "Typed instances";
     private static final String ICON_NAME = "instances";
+    private ObjectSpecification elementSpecification;
 
     // -- constructor
 
@@ -151,5 +153,15 @@ public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbst
         return null;
     }
 
+    @Override
+    public ObjectSpecification getElementSpecification() {
+        return elementSpecification;
+    }
+
+    @Override
+    public void setElementSpecificationProvider(ElementSpecificationProvider provider) {
+        this.elementSpecification = provider.getElementType();
+    }
+
 
 }
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 aa7f40d..887469e 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
@@ -40,6 +40,7 @@ import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -61,6 +62,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     private ObjectSpecId specId;
 
     private ServicesInjector servicesInjector;
+    private ObjectSpecification elementSpecification;
 
     public ObjectSpecificationStub(final Class<?> type) {
         this(type.getName());
@@ -377,4 +379,14 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
         return getFullIdentifier();
     }
 
+    @Override
+    public ObjectSpecification getElementSpecification() {
+        return elementSpecification;
+    }
+
+    @Override
+    public void setElementSpecificationProvider(ElementSpecificationProvider provider) {
+        this.elementSpecification = provider.getElementType();
+    }
+
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 0f6a16c..bcc114c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -56,10 +56,10 @@ public final class PojoAdapter extends InstanceAbstract implements ObjectAdapter
     private final Object pojo;
     private final Oid oid;
     
-    /**
-     * only for standalone or parented collections.
-     */
-    private ElementSpecificationProvider elementSpecificationProvider;
+//    /**
+//     * only for standalone or parented collections.
+//     */
+//    private ElementSpecificationProvider elementSpecificationProvider;
     
     public static PojoAdapter of(
             final Object pojo,
@@ -356,28 +356,28 @@ public final class PojoAdapter extends InstanceAbstract implements ObjectAdapter
 
 
 
-    // -- elementSpecification
-
-    @Override
-    public ObjectSpecification getElementSpecification() {
-        if (elementSpecificationProvider == null) {
-            return null;
-        }
-        return elementSpecificationProvider.getElementType();
-    }
-
-    /**
-     * Called whenever there is a {@link org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet} present.
-     *
-     * <p>
-     *     Specifically, if an action which has been annotated (is copied by {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet action invocation facet}), and for a parented collection
-     *     (is copied by the {@link PersistenceSession5} when {@link PersistenceSession5#adapterFor(Object, ObjectAdapter, OneToManyAssociation) creating} an adapter for a collection.
-     * </p>
-     */
-    @Override
-    public void setElementSpecificationProvider(final ElementSpecificationProvider elementSpecificationProvider) {
-        this.elementSpecificationProvider = elementSpecificationProvider;
-    }
+//    // -- elementSpecification
+//
+//    @Override
+//    public ObjectSpecification getElementSpecification() {
+//        if (elementSpecificationProvider == null) {
+//            return null;
+//        }
+//        return elementSpecificationProvider.getElementType();
+//    }
+//
+//    /**
+//     * Called whenever there is a {@link org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet} present.
+//     *
+//     * <p>
+//     *     Specifically, if an action which has been annotated (is copied by {@link org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet action invocation facet}), and for a parented collection
+//     *     (is copied by the {@link PersistenceSession5} when {@link PersistenceSession5#adapterFor(Object, ObjectAdapter, OneToManyAssociation) creating} an adapter for a collection.
+//     * </p>
+//     */
+//    @Override
+//    public void setElementSpecificationProvider(final ElementSpecificationProvider elementSpecificationProvider) {
+//        this.elementSpecificationProvider = elementSpecificationProvider;
+//    }
 
 
     // -- getInstance (unsupported for this impl)
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
index 8a99b90..56031ac 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Factories.java
@@ -83,7 +83,8 @@ class ObjectAdapterContext_Factories implements ObjectAdapterFactories {
         // the adapter
         // to look this up on the fly?]
         final TypeOfFacet facet = otma.getFacet(TypeOfFacet.class);
-        collectionAdapter.setElementSpecificationProvider(ElementSpecificationProvider.of(facet));
+        collectionAdapter.getSpecification()
+        .setElementSpecificationProvider(ElementSpecificationProvider.of(facet));
 
         return collectionAdapter;
     }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 4f367be..1917699 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -67,7 +67,8 @@ public enum ActionResultResponseType {
                         .getAction(IsisContext.getSessionFactory().getSpecificationLoader())
                         .getFacet(TypeOfFacet.class);
                 if (typeOfFacet != null) {
-                    resultAdapter.setElementSpecificationProvider(ElementSpecificationProvider.of(typeOfFacet));
+                    resultAdapter.getSpecification()
+                    .setElementSpecificationProvider(ElementSpecificationProvider.of(typeOfFacet));
                 }
             }