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 2021/04/15 12:43:12 UTC

[isis] branch master updated: ISIS-2569: do not use SpecLoader#loadSpecification(Class) - (3)

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

ahuber 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 b120fb6  ISIS-2569: do not use SpecLoader#loadSpecification(Class) - (3)
b120fb6 is described below

commit b120fb6febb19f702c3af1f8d1f392f74b1b8eec
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 15 14:41:20 2021 +0200

    ISIS-2569: do not use SpecLoader#loadSpecification(Class) - (3)
    
    ... when outside the scope of initial spec loading (its optimized for
    initial loading, skips introspecting members)
---
 .../ui/component/EventProviderAbstract.java        |  7 ++---
 .../metamodel/facets/entity/JdoEntityFacet.java    |  2 +-
 .../ObjectReflectorDefaultTest_object.java         |  2 +-
 .../testing/AbstractFacetFactoryTest.java          |  4 +--
 .../excel/applib/dom/util/ExcelConverter.java      | 36 ++++++++++++++--------
 .../subdomains/excel/testing/ExcelFixture.java     |  4 ++-
 6 files changed, 32 insertions(+), 23 deletions(-)

diff --git a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
index e839780..4a5e78c 100644
--- a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
+++ b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
@@ -33,8 +33,6 @@ import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.extensions.fullcalendar.applib.spi.CalendarableDereferencingService;
 import org.apache.isis.extensions.fullcalendar.applib.value.CalendarEvent;
@@ -103,9 +101,8 @@ public abstract class EventProviderAbstract implements EventProvider {
 
             final Object dereferencedObject = dereference(commonContext, domainObject);
 
-            final SpecificationLoader specificationLoader = commonContext.getSpecificationLoader();
-            final ObjectSpecification spec = specificationLoader.loadSpecification(dereferencedObject.getClass());
-            final ManagedObject dereferencedManagedObject = ManagedObject.of(spec, dereferencedObject);
+            val dereferencedManagedObject = 
+                    ManagedObject.lazy(commonContext.getSpecificationLoader(), dereferencedObject);
 
             final RootOid rootOid = ManagedObjects.identify(dereferencedManagedObject).orElse(null);
             if(rootOid!=null) {
diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
index 2357a6d..743d77b 100644
--- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
+++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
@@ -155,7 +155,7 @@ implements EntityFacet {
             throw new ObjectNotFoundException(""+rootOid);
         }
 
-        val actualEntitySpec = getSpecificationLoader().loadSpecification(entityPojo.getClass());
+        val actualEntitySpec = getSpecificationLoader().specForTypeElseFail(entityPojo.getClass());
         getServiceInjector().injectServicesInto(entityPojo); // might be redundant
         //TODO integrate with entity change tracking
         return ManagedObject.identified(actualEntitySpec, entityPojo, rootOid);
diff --git a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/specloader/ObjectReflectorDefaultTest_object.java b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/specloader/ObjectReflectorDefaultTest_object.java
index a1e3d89..2c89745 100644
--- a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/specloader/ObjectReflectorDefaultTest_object.java
+++ b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/specloader/ObjectReflectorDefaultTest_object.java
@@ -44,7 +44,7 @@ class ObjectReflectorDefaultTest_object extends SpecificationLoaderTestAbstract
 
     @Override
     protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
-        return reflector.loadSpecification(TestDomainObject.class);
+        return reflector.specForType(TestDomainObject.class).orElse(null);
     }
 
     @Test
diff --git a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
index 38e4d2b..c9e0e96 100644
--- a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
+++ b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
@@ -137,8 +137,8 @@ public abstract class AbstractFacetFactoryTest extends TestCase {
 
     protected void allowing_specificationLoader_loadSpecification_any_willReturn(final ObjectSpecification objectSpecification) {
         context.checking(new Expectations() {{
-            allowing(mockSpecificationLoader).loadSpecification(with(any(Class.class)));
-            will(returnValue(objectSpecification));
+            allowing(mockSpecificationLoader).specForType(with(any(Class.class)));
+            will(returnValue(Optional.of(objectSpecification)));
         }});
     }
 
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelConverter.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelConverter.java
index 89412d7..3a4ddc6 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelConverter.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelConverter.java
@@ -33,6 +33,8 @@ import java.util.UUID;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import javax.annotation.Nullable;
+
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellStyle;
@@ -151,13 +153,16 @@ class ExcelConverter {
             final WorksheetSpec.RowFactory<?> factory,
             final String sheetName) throws IOException {
 
-        final ObjectSpecification objectSpec = specificationLoader.loadSpecification(factory.getCls());
-
-        final List<ManagedObject> adapters = domainObjects.stream().map(objectManager::adapt).collect(Collectors.toList());
-
-        final List<ObjectAssociation> propertyList = objectSpec.streamAssociations(MixedIn.INCLUDED)
-                                                        .filter(VISIBLE_PROPERTIES)
-                                                        .collect(Collectors.toList());
+        final List<ManagedObject> adapters = domainObjects.stream()
+                .map(objectManager::adapt)
+                .collect(Collectors.toList());
+        
+        final List<ObjectAssociation> propertyList = _Lists.newArrayList();
+        
+        specificationLoader.specForType(factory.getCls())
+        .ifPresent(spec->spec.streamAssociations(MixedIn.INCLUDED)
+                .filter(VISIBLE_PROPERTIES)
+                .forEach(propertyList::add));
 
         List<ObjectAssociation> annotatedAsHyperlink = new ArrayList<>();
         for (Field f : fieldsAnnotatedWith(factory.getCls(), HyperLink.class)){
@@ -245,11 +250,12 @@ class ExcelConverter {
             final WorksheetSpec.RowFactory<?> factory,
             final String sheetName) throws IOException {
 
-        final ObjectSpecification objectSpec = specificationLoader.loadSpecification(factory.getCls());
-
-        final List<ObjectAssociation> propertyList = objectSpec.streamAssociations(MixedIn.INCLUDED)
+        final List<ObjectAssociation> propertyList = _Lists.newArrayList();
+                
+        specificationLoader.specForType(factory.getCls())
+        .ifPresent(spec->spec.streamAssociations(MixedIn.INCLUDED)
                 .filter(VISIBLE_PROPERTIES)
-                .collect(Collectors.toList());
+                .forEach(propertyList::add));
 
         // Validate the annotations for pivot
         validateAnnotations(propertyList, factory.getCls());
@@ -403,7 +409,7 @@ class ExcelConverter {
         boolean header = true;
         final Map<Integer, Property> propertyByColumn = _Maps.newHashMap();
 
-        final ObjectSpecification objectSpec = specificationLoader.loadSpecification(cls);
+        final ObjectSpecification objectSpec = specificationLoader.specForType(cls).orElse(null);
 
         T previousRow = null;
         for (final Row row : sheet) {
@@ -543,9 +549,13 @@ class ExcelConverter {
     }
 
     private static OneToOneAssociation getAssociation(
-            final ObjectSpecification objectSpec, 
+            final @Nullable ObjectSpecification objectSpec, 
             final String propertyNameOrId) {
         
+        if(objectSpec==null) {
+            return null;
+        }
+        
         return objectSpec.streamProperties(MixedIn.INCLUDED)
         .filter(association -> propertyNameOrId.equalsIgnoreCase(association.getName())
                             || propertyNameOrId.equalsIgnoreCase(association.getId()))
diff --git a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
index fee9a30..0cece69 100644
--- a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
+++ b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.services.metamodel.BeanSort;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.base._Bytes;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -86,7 +87,8 @@ public class ExcelFixture extends FixtureScript {
         for (Class<?> cls : classes) {
 
             val beanSort = Optional.ofNullable(specLoader)
-            .map(sl->sl.loadSpecification(cls))
+            .flatMap(sl->sl.specForType(cls))
+            .filter(_NullSafe::isPresent)
             .map(ObjectSpecification::getBeanSort)
             .orElse(BeanSort.UNKNOWN);