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);