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/11 11:54:41 UTC
[isis] branch v2 updated (eb31afd -> 6ebf69c)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a change to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git.
from eb31afd ISIS-2158: regression
new f17ddef ISIS-2158: refactoring towards free MM from ObjectAdapter
new 6ebf69c ISIS-2158: intermediate commit with debug lines, several fixes though ..
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../isis/applib/services/command/Command.java | 2 +-
.../services/confview/ConfigurationMenu.java | 1 +
.../commons/internal/exceptions/_Exceptions.java | 9 ++
.../IsisBeanFactoryPostProcessorForSpring.java | 15 ++-
.../config/beans/IsisComponentScanInterceptor.java | 2 +
.../isis/config/registry/IsisBeanTypeRegistry.java | 22 +++++
.../isis/metamodel/adapter/ObjectAdapter.java | 2 +-
.../metamodel/adapter/ObjectAdapterProvider.java | 8 +-
.../isis/metamodel/facets/CollectionUtils.java | 20 +++-
.../actions/action/invocation/CommandUtil.java | 11 +--
.../facets/collections/modify/CollectionFacet.java | 6 +-
.../services/registry/ServiceRegistryDefault.java | 22 +----
.../apache/isis/metamodel/spec/ManagedObject.java | 94 +++++++++++++++++-
.../apache/isis/metamodel/spec/ObjectSpecId.java | 7 +-
.../specloader/SpecificationCacheDefault.java | 9 ++
.../metamodel/specloader/SpecificationLoader.java | 5 +-
.../specloader/SpecificationLoaderDefault.java | 6 +-
.../specimpl/OneToManyAssociationDefault.java | 9 +-
.../specimpl/OneToOneAssociationDefault.java | 12 ++-
.../isis/metamodel/util/snapshot/XmlSnapshot.java | 2 +-
.../isis/jdo/persistence/PersistenceSession5.java | 8 +-
.../org/apache/isis/runtime/memento/Memento.java | 2 +-
.../isis/runtime/memento/ObjectAdapterMemento.java | 8 +-
.../ObjectAdapterMementoSupport_usingLKG.java | 2 +-
.../memento/ObjectAdapterMementoUsingSupport.java | 1 +
.../ObjectAdapterMemento_LastKnownGood.java | 105 ++++++++++++---------
...ObjectAdapterContext_ObjectAdapterProvider.java | 2 +-
.../viewer/restfulobjects/rendering/OidUtils.java | 59 ++++++++----
.../domainobjects/DomainObjectReprRenderer.java | 27 +++++-
.../rendering/domainobjects/OidUtils.java | 9 +-
.../wicket/model/models/EntityCollectionModel.java | 20 ++--
.../linkandlabel/ActionLinkFactoryAbstract.java | 21 +++--
.../domainapp/application/DemoAppManifest.java | 2 +
.../secman/model/app/user/MeService.java | 12 +--
34 files changed, 371 insertions(+), 171 deletions(-)
[isis] 01/02: ISIS-2158: refactoring towards free MM from
ObjectAdapter
Posted by ah...@apache.org.
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 f17ddefc6f046c30942ab47ddd206d2ee667b64a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 10 20:08:18 2019 +0200
ISIS-2158: refactoring towards free MM from ObjectAdapter
---
.../isis/metamodel/adapter/ObjectAdapter.java | 2 +-
.../actions/action/invocation/CommandUtil.java | 11 +-----
.../facets/collections/modify/CollectionFacet.java | 6 ++-
.../apache/isis/metamodel/spec/ManagedObject.java | 46 ++++++++++++++++++++++
.../specimpl/OneToManyAssociationDefault.java | 9 +++--
.../specimpl/OneToOneAssociationDefault.java | 12 +++---
.../org/apache/isis/runtime/memento/Memento.java | 2 +-
7 files changed, 66 insertions(+), 22 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
index 26736b7..568d1dc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
@@ -216,7 +216,7 @@ public interface ObjectAdapter extends ManagedObject {
// a choices list could include a null (eg example in ToDoItems#choices1Categorized()); want to show as "visible"
return true;
}
- if(ManagedObject.promote(adapter).isDestroyed()) {
+ if(ManagedObject._isDestroyed(adapter)) {
return false;
}
if(interactionInitiatedBy == InteractionInitiatedBy.FRAMEWORK) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
index 651816a..811227a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -25,8 +25,6 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Arrays;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.metamodel.adapter.oid.Oid;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.commons.StringExtensions;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -81,13 +79,8 @@ public class CommandUtil {
}
public static Bookmark bookmarkFor(final ManagedObject adapter) {
-
- final Oid oid = ManagedObject.promote(adapter).getOid();
- if(!(oid instanceof RootOid)) {
- return null;
- }
- final RootOid rootOid = (RootOid) oid;
- return rootOid.asBookmark();
+ val rootOid = ManagedObject._rootOidIfAny(adapter);
+ return rootOid!=null ? rootOid.asBookmark() : null;
}
static void appendParamArg(
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java
index 29d39a1..a157bb8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java
@@ -31,6 +31,8 @@ import org.apache.isis.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
+import lombok.val;
+
/**
* Attached to {@link ObjectSpecification}s that represent a collection.
*
@@ -91,8 +93,8 @@ public interface CollectionFacet extends Facet {
}
public static <T extends ManagedObject> Stream<T> streamAdapters(final T collectionAdapter) {
- final CollectionFacet facet = getCollectionFacetFromSpec(collectionAdapter);
- return Utils.<T>downCast(facet.stream(collectionAdapter));
+ val collectionFacet = getCollectionFacetFromSpec(collectionAdapter);
+ return Utils.<T>downCast(collectionFacet.stream(collectionAdapter));
}
public static <T extends ManagedObject> List<T> toAdapterList(final T collectionAdapter) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index 5b0144c..22ad033 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -27,11 +27,14 @@ import java.util.stream.Collectors;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Value;
+import lombok.val;
/**
* Represents an instance of some element of the meta-model managed by the framework,
@@ -218,6 +221,8 @@ public interface ManagedObject {
.collect(Collectors.toList());
}
+ // -- DEPRECATIONS (in an attempt to decouple the metamodel from ObjectAdapter)
+
@Deprecated
public static ObjectAdapter promote(ManagedObject managedObject) {
if(managedObject==null) {
@@ -226,6 +231,47 @@ public interface ManagedObject {
return (ObjectAdapter) managedObject;
}
+ // -- DEPRECATIONS - SPECIALIZED
+
+ @Deprecated
+ static boolean _isDestroyed(ManagedObject adapter) {
+ //TODO only applicable when persistable
+ return ManagedObject.promote(adapter).isDestroyed();
+ }
+
+ @Deprecated
+ static RootOid _rootOidIfAny(ManagedObject adapter) {
+ // TODO Auto-generated method stub
+ val oid = ManagedObject.promote(adapter).getOid();
+ if(!(oid instanceof RootOid)) {
+ return null;
+ }
+ return (RootOid) oid;
+ }
+
+ @Deprecated
+ static RootOid _collectionOidIfAny(ManagedObject adapter) {
+ // TODO Auto-generated method stub
+ val oid = ManagedObject.promote(adapter).getOid();
+ if(!(oid instanceof RootOid)) {
+ return null;
+ }
+ return (RootOid) oid;
+ }
+
+ @Deprecated
+ static boolean _whenFirstIsRepresentingPersistent_ensureSecondIsAsWell(
+ ManagedObject first,
+ ManagedObject second) {
+
+ //if(ownerAdapter.getSpecification().isEntity() && !referencedAdapter.getSpecification().isEntity()) {
+
+ if(ManagedObject.promote(first).isRepresentingPersistent() &&
+ ManagedObject.promote(second).isTransient()) {
+ return false;
+ }
+ return true;
+ }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index 7b4eebc..1e2d39f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -21,7 +21,6 @@ package org.apache.isis.metamodel.specloader.specimpl;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.commons.exceptions.IsisException;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.commons.ToString;
import org.apache.isis.metamodel.consent.Consent;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -165,7 +164,7 @@ extends ObjectAssociationAbstract implements OneToManyAssociation {
return null;
}
- val parentOid = (RootOid)ManagedObject.promote(ownerAdapter).getOid();
+ val parentOid = ManagedObject._collectionOidIfAny(ownerAdapter);
val newAdapter = getObjectAdapterProvider().adapterForCollection(collection, parentOid, this);
return newAdapter.injectServices(getServiceInjector());
}
@@ -191,8 +190,10 @@ extends ObjectAssociationAbstract implements OneToManyAssociation {
}
if (readWrite()) {
- //if(ownerAdapter.getSpecification().isEntity() && !referencedAdapter.getSpecification().isEntity()) {
- if (ManagedObject.promote(ownerAdapter).isRepresentingPersistent() && ManagedObject.promote(referencedAdapter).isTransient()) {
+ if (!ManagedObject._whenFirstIsRepresentingPersistent_ensureSecondIsAsWell(
+ ownerAdapter,
+ referencedAdapter)) {
+
throw new IsisException("can't set a reference to a transient object from a persistent one: "
+ ownerAdapter.titleString(null)
+ " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index 9e56ed3..5c93c27 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -217,11 +217,13 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
if (setterFacet == null) {
return;
}
-
- if ( ManagedObject.promote(ownerAdapter).isRepresentingPersistent() &&
- newReferencedAdapter != null &&
- ManagedObject.promote(newReferencedAdapter).isTransient() &&
- !newReferencedAdapter.getSpecification().isParented()) {
+
+ if (
+ newReferencedAdapter != null &&
+ !newReferencedAdapter.getSpecification().isParented() &&
+ !ManagedObject._whenFirstIsRepresentingPersistent_ensureSecondIsAsWell(
+ ownerAdapter,
+ newReferencedAdapter)) {
// TODO: I've never seen this exception, and in any case DataNucleus supports persistence-by-reachability; so probably not required
throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString(null) + " (transient)");
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
index e2fd992..80ee6b0 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
@@ -89,7 +89,7 @@ public class Memento implements Serializable {
private Data createCollectionData(final ObjectAdapter adapter) {
final Data[] collData = CollectionFacet.Utils.streamAdapters(adapter)
- .map(ref->createReferenceData(ref))
+ .map(this::createReferenceData)
.collect(_Arrays.toArray(Data.class, CollectionFacet.Utils.size(adapter)));
final String elementTypeSpecName = adapter.getSpecification().getFullIdentifier();
[isis] 02/02: ISIS-2158: intermediate commit with debug lines,
several fixes though ..
Posted by ah...@apache.org.
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 6ebf69c7cd334ec5914bc953f8562824ca712e07
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 11 13:54:28 2019 +0200
ISIS-2158: intermediate commit with debug lines, several fixes though ..
- registered beans now honor the @DomainService(objectType="...")
attribute
- lookup Specification by SpedId other than class-name was broken
- attempted fix for the RO Viewer on collections
---
.../isis/applib/services/command/Command.java | 2 +-
.../services/confview/ConfigurationMenu.java | 1 +
.../commons/internal/exceptions/_Exceptions.java | 9 ++
.../IsisBeanFactoryPostProcessorForSpring.java | 15 ++-
.../config/beans/IsisComponentScanInterceptor.java | 2 +
.../isis/config/registry/IsisBeanTypeRegistry.java | 22 +++++
.../metamodel/adapter/ObjectAdapterProvider.java | 8 +-
.../isis/metamodel/facets/CollectionUtils.java | 20 +++-
.../services/registry/ServiceRegistryDefault.java | 22 +----
.../apache/isis/metamodel/spec/ManagedObject.java | 48 +++++++++-
.../apache/isis/metamodel/spec/ObjectSpecId.java | 7 +-
.../specloader/SpecificationCacheDefault.java | 9 ++
.../metamodel/specloader/SpecificationLoader.java | 5 +-
.../specloader/SpecificationLoaderDefault.java | 6 +-
.../isis/metamodel/util/snapshot/XmlSnapshot.java | 2 +-
.../isis/jdo/persistence/PersistenceSession5.java | 8 +-
.../isis/runtime/memento/ObjectAdapterMemento.java | 8 +-
.../ObjectAdapterMementoSupport_usingLKG.java | 2 +-
.../memento/ObjectAdapterMementoUsingSupport.java | 1 +
.../ObjectAdapterMemento_LastKnownGood.java | 105 ++++++++++++---------
...ObjectAdapterContext_ObjectAdapterProvider.java | 2 +-
.../viewer/restfulobjects/rendering/OidUtils.java | 59 ++++++++----
.../domainobjects/DomainObjectReprRenderer.java | 27 +++++-
.../rendering/domainobjects/OidUtils.java | 9 +-
.../wicket/model/models/EntityCollectionModel.java | 20 ++--
.../linkandlabel/ActionLinkFactoryAbstract.java | 21 +++--
.../domainapp/application/DemoAppManifest.java | 2 +
.../secman/model/app/user/MeService.java | 12 +--
28 files changed, 305 insertions(+), 149 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
index aa9d09e..fe83936 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
@@ -430,7 +430,7 @@ public interface Command extends HasUniqueId {
/**
* <b>NOT API</b>: intended to be called only by the framework.
*/
- @Programmatic @Deprecated // bad API design
+ @Programmatic
Internal internal();
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
index 6fefb67..a3a6ae7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
@@ -56,6 +56,7 @@ public class ConfigurationMenu {
)
@MemberOrder(sequence = "500.900.1")
public Set<ConfigurationProperty> configuration(){
+ System.out.println("############## CALL");
return configurationService.allProperties();
}
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 00c9892..734302c 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -92,6 +92,8 @@ public final class _Exceptions {
return new IllegalStateException("internal error: code was reached, that is not implemented yet");
}
+ // -- UNRECOVERABLE
+
public static RuntimeException unrecoverable(Throwable cause) {
return new RuntimeException("unrecoverable error: with cause ...", cause);
}
@@ -103,6 +105,13 @@ public final class _Exceptions {
public static RuntimeException unrecoverable(String msg, Throwable cause) {
return new RuntimeException(String.format("unrecoverable error: '%s' with cause ...", msg), cause);
}
+
+ public static RuntimeException unrecoverableFormatted(String format, Object ...args) {
+ return new RuntimeException(String.format("unrecoverable error: '%s'",
+ String.format(format, args)));
+ }
+
+ // -- UNSUPPORTED
public static UnsupportedOperationException unsupportedOperation() {
return new UnsupportedOperationException("unrecoverable error: method call not allowed/supported");
diff --git a/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java b/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java
index c4d6181..bd18d1e 100644
--- a/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java
+++ b/core/config/src/main/java/org/apache/isis/config/beans/IsisBeanFactoryPostProcessorForSpring.java
@@ -73,7 +73,16 @@ public class IsisBeanFactoryPostProcessorForSpring implements BeanFactoryPostPro
val injectable = interceptor.isInjectable(typeMetaData);
- if(!injectable) {
+ if(injectable) {
+
+ val beanNameOverride = interceptor.getBeanNameOverride(typeMetaData);
+ if(beanNameOverride!=null) {
+ registry.removeBeanDefinition(beanDefinitionName);
+ registry.registerBeanDefinition(beanNameOverride, beanDefinition);
+ }
+ log.debug(()->String.format("renaming %s -> %s", beanDefinitionName, beanNameOverride));
+
+ } else {
registry.removeBeanDefinition(beanDefinitionName);
log.debug(()->"removing: " + beanDefinitionName);
}
@@ -81,6 +90,10 @@ public class IsisBeanFactoryPostProcessorForSpring implements BeanFactoryPostPro
}
}
+
+
+
+
}
diff --git a/core/config/src/main/java/org/apache/isis/config/beans/IsisComponentScanInterceptor.java b/core/config/src/main/java/org/apache/isis/config/beans/IsisComponentScanInterceptor.java
index 5a0b52a..ff5a5c1 100644
--- a/core/config/src/main/java/org/apache/isis/config/beans/IsisComponentScanInterceptor.java
+++ b/core/config/src/main/java/org/apache/isis/config/beans/IsisComponentScanInterceptor.java
@@ -38,6 +38,8 @@ public interface IsisComponentScanInterceptor {
* discovered types into a type registry
*/
boolean isInjectable(TypeMetaData type);
+
+ String getBeanNameOverride(TypeMetaData type);
/**
* Whether given type is available for injection. Is a <em>Managed Bean</em>.
diff --git a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
index 7897ec9..93eb665 100644
--- a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
@@ -35,6 +36,7 @@ import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.Mixin;
import org.apache.isis.applib.annotation.ViewModel;
+import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.components.ApplicationScopedComponent;
import org.apache.isis.commons.internal.components.SessionScopedComponent;
@@ -156,6 +158,11 @@ public final class IsisBeanTypeRegistry implements IsisComponentScanInterceptor,
}
@Override
+ public String getBeanNameOverride(TypeMetaData typeMeta) {
+ return extractObjectType(typeMeta.getUnderlyingClass()).orElse(null);
+ }
+
+ @Override
public boolean isManagedBean(Class<?> type) {
val beanSort = quickClassify(type);
return beanSort.isManagedBean();
@@ -282,5 +289,20 @@ public final class IsisBeanTypeRegistry implements IsisComponentScanInterceptor,
return BeanSort.UNKNOWN;
}
+ private Optional<String> extractObjectType(Class<?> type) {
+
+ val aDomainService = _Reflect.getAnnotation(type, DomainService.class);
+ if(aDomainService!=null) {
+ val objectType = aDomainService.objectType();
+ if(_Strings.isNotEmpty(objectType)) {
+ return Optional.of(objectType);
+ }
+ return Optional.empty(); // stop processing
+ }
+
+ return Optional.empty();
+
+ }
+
}
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapterProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapterProvider.java
index c32c05e..413a88c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapterProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapterProvider.java
@@ -44,16 +44,16 @@ public interface ObjectAdapterProvider {
* @param pojo
* @return oid for the given domain object
*/
- default @Nullable Oid oidFor(@Nullable Object domainObject) {
- return mapIfPresentElse(adapterFor(domainObject), ObjectAdapter::getOid, null);
+ default @Nullable Oid oidFor(@Nullable Object pojo) {
+ return mapIfPresentElse(adapterFor(pojo), ObjectAdapter::getOid, null);
}
/**
* @return standalone (value) or root adapter
*/
- @Nullable ObjectAdapter adapterFor(@Nullable Object domainObject);
+ @Nullable ObjectAdapter adapterFor(@Nullable Object pojo);
- @Nullable ObjectAdapter adapterForBean(@Nullable ManagedBeanAdapter bean);
+ @Nullable ObjectAdapter adapterForBean(@Nullable ManagedBeanAdapter beanAdapter);
/**
* @return collection adapter.
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/CollectionUtils.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/CollectionUtils.java
index 5e985e7..7d0f421 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/CollectionUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/CollectionUtils.java
@@ -36,24 +36,40 @@ import java.util.concurrent.CopyOnWriteArraySet;
import java.util.function.Function;
import java.util.stream.Stream;
+import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._With;
import org.apache.isis.commons.internal.collections._Arrays;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
+import lombok.val;
+
public final class CollectionUtils {
private CollectionUtils() {
}
- public static Object[] getCollectionAsObjectArray(final Object option, final ObjectSpecification spec, final ObjectAdapterProvider adapterProvider) {
- final ObjectAdapter collection = adapterProvider.adapterFor(option);
+ public static Object[] getCollectionAsObjectArray(
+ final Object optionPojo,
+ final ObjectSpecification spec,
+ final ObjectAdapterProvider adapterProvider) {
+
+ final ObjectAdapter collection = adapterProvider.adapterFor(optionPojo);
final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
+
+ {//TODO[2158] migrate
+ val mo = ManagedObject.of(MetaModelContext.current().getSpecification(optionPojo.getClass()), optionPojo);
+ val collectionFacet = CollectionFacet.Utils.getCollectionFacetFromSpec(mo);
+ _Assert.assertEquals("expected same",
+ facet, collectionFacet);
+ }
final Stream<ObjectAdapter> objectAdapters =
CollectionFacet.Utils.streamAdapters(collection);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java
index f6e0b8e..1586955 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/registry/ServiceRegistryDefault.java
@@ -30,11 +30,9 @@ import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.commons.internal.base._Lazy;
import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import org.apache.isis.commons.internal.ioc.spring._Spring;
-import org.apache.isis.commons.internal.reflection._Reflect;
import org.apache.isis.config.IsisConfigurationLegacy;
import org.apache.isis.config.registry.IsisBeanTypeRegistry;
@@ -75,29 +73,11 @@ public final class ServiceRegistryDefault implements ServiceRegistry {
.filter(_NullSafe::isPresent)
.filter(bean->filter.isManagedBean(bean.getBeanClass())) // do not register unknown sort
.forEach(bean->{
- val id = extractObjectType(bean.getBeanClass()).orElse(bean.getId());
+ val id = bean.getId();
map.put(id, bean);
});
return map;
}
- //TODO[2158] this would be the responsibility of the specloader, but
- // for now we use as very simple approach
- private Optional<String> extractObjectType(Class<?> type) {
-
- val aDomainService = _Reflect.getAnnotation(type, DomainService.class);
- if(aDomainService!=null) {
- val objectType = aDomainService.objectType();
- if(_Strings.isNotEmpty(objectType)) {
- return Optional.of(objectType);
- }
- return Optional.empty(); // stop processing
- }
-
- return Optional.empty();
-
- }
-
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index 22ad033..0e2ca2d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -22,14 +22,18 @@ package org.apache.isis.metamodel.spec;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.function.Supplier;
+import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
+
+import static org.apache.isis.commons.internal.base._With.requires;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -160,6 +164,12 @@ public interface ManagedObject {
// -- FACTORIES
+ /**
+ * Optimized for cases, when the pojo's specification is already available.
+ * @param specification
+ * @param pojo
+ * @return
+ */
public static ManagedObject of(
final ObjectSpecification specification,
final Object pojo) {
@@ -176,12 +186,24 @@ public interface ManagedObject {
};
}
+ /**
+ * For cases, when the pojo's specification is not available and needs to be looked up.
+ * @param specLoader
+ * @param pojo
+ * @return
+ */
public static ManagedObject of(
- final Supplier<ObjectSpecification> specificationSupplier,
+ final Function<Class<?>, ObjectSpecification> specLoader,
final Object pojo) {
+ requires(specLoader, "specLoader");
+ requires(pojo, "pojo");
+
+ val type = pojo.getClass();
+
return new ManagedObject() {
- private final _Lazy<ObjectSpecification> specification = _Lazy.of(specificationSupplier);
+ private final _Lazy<ObjectSpecification> specification =
+ _Lazy.threadSafe(()->specLoader.apply(type));
@Override
public ObjectSpecification getSpecification() {
@@ -194,6 +216,21 @@ public interface ManagedObject {
};
}
+ // -- SHORTCUTS
+
+ /**
+ * Uses the currently available {@link SpecificationLoader} to
+ * @param pojo
+ * @return
+ * @apiNote its not well thought through yet what to do with null argument
+ */
+ public static ManagedObject forPojo(Object pojo) {
+ if(pojo==null) {
+ return null;
+ }
+ return of(MetaModelContext.current()::getSpecification, pojo);
+ }
+
// -- UNWRAPPING
public static Object unwrapPojo(final ManagedObject adapter) {
@@ -273,6 +310,11 @@ public interface ManagedObject {
return true;
}
+ @Deprecated
+ static Oid _oid(ManagedObject adapter) {
+ return promote(adapter).getOid();
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecId.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecId.java
index 97c4582..b255be0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecId.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ObjectSpecId.java
@@ -25,11 +25,9 @@ import org.apache.isis.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
import static org.apache.isis.commons.internal.base._With.requiresNotEmpty;
import lombok.AccessLevel;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
-import lombok.experimental.FieldDefaults;
+import lombok.Value;
/**
* Represents an {@link ObjectSpecification}, as determined by
@@ -38,9 +36,8 @@ import lombok.experimental.FieldDefaults;
* <p>
* Has value semantics.
*/
-@FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE)
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-@Getter @EqualsAndHashCode
+@Value
public final class ObjectSpecId implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java
index 47720e3..7e3ee1a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationCacheDefault.java
@@ -26,6 +26,7 @@ import java.util.function.Function;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.collections.snapshot._VersionedList;
+import org.apache.isis.metamodel.commons.ClassUtil;
import org.apache.isis.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -75,6 +76,14 @@ class SpecificationCacheDefault<T extends ObjectSpecification> {
}
}
+ public Class<?> resolveType(final ObjectSpecId objectSpecID) {
+ val classNameFromCache = classNameBySpecId.get(objectSpecID);
+ val className = classNameFromCache != null
+ ? classNameFromCache
+ : objectSpecID.asString();
+ return ClassUtil.forNameElseNull(className);
+ }
+
public T getByObjectType(final ObjectSpecId objectSpecID) {
val className = classNameBySpecId.get(objectSpecID);
return className != null ? specByClassName.get(className) : null;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java
index dd871e1..d7f1dcf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoader.java
@@ -23,7 +23,6 @@ import java.util.function.Consumer;
import javax.annotation.Nullable;
-import org.apache.isis.metamodel.commons.ClassUtil;
import org.apache.isis.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.metamodel.spec.ObjectSpecId;
import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -100,6 +99,8 @@ public interface SpecificationLoader {
* @return {@code null} if {@code domainType==null}
*/
ObjectSpecification loadSpecification(@Nullable Class<?> domainType, IntrospectionState upTo);
+
+ Class<?> lookupType(ObjectSpecId objectSpecId);
// -- SHORTCUTS
@@ -114,7 +115,7 @@ public interface SpecificationLoader {
if(objectSpecId==null) {
return null;
}
- val type = ClassUtil.forNameElseFail(objectSpecId.asString());
+ val type = lookupType(objectSpecId);
return introspectionState!=null
? loadSpecification(type, introspectionState)
: loadSpecification(type);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index bdd055a..6907435 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -310,7 +310,11 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
// fallback
return loadSpecification(objectSpecId, IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED);
}
-
+
+ @Override
+ public Class<?> lookupType(ObjectSpecId objectSpecId) {
+ return cache.resolveType(objectSpecId);
+ }
// -- HELPER
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java
index 3319233..5aea13d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java
@@ -861,7 +861,7 @@ public class XmlSnapshot implements Snapshot {
}
return fakeOid;
} else {
- return ManagedObject.promote(adapter).getOid().enString();
+ return ManagedObject._oid(adapter).enString();
}
}
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java
index 17a9466..f7ce0fd 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSession5.java
@@ -744,14 +744,12 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
@Override
public void invokeIsisPersistingCallback(final Persistable pojo) {
if (stateOf(pojo).isDetached()) {
- final ManagedObject adapter = ManagedObject.of(
- ()->getSpecificationLoader().loadSpecification(pojo.getClass()),
- pojo);
+ val managedObject = ManagedObject.of(specificationLoader::loadSpecification, pojo);
// persisting
// previously this was performed in the DataNucleusSimplePersistAlgorithm.
- CallbackFacet.Util.callCallback(adapter, PersistingCallbackFacet.class);
- objectAdapterContext.postLifecycleEventIfRequired(adapter, PersistingLifecycleEventFacet.class);
+ CallbackFacet.Util.callCallback(managedObject, PersistingCallbackFacet.class);
+ objectAdapterContext.postLifecycleEventIfRequired(managedObject, PersistingLifecycleEventFacet.class);
} else {
// updating
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
index e76d747..45b2f0c 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
@@ -48,16 +48,16 @@ public interface ObjectAdapterMemento extends Serializable {
/**
* TODO[2112] outdated
- * Returns a bookmark only if {@link Type#PERSISTENT} and
- * {@link #getSort() sort} is {@link Sort#SCALAR scalar}.
+ * Returns a bookmark only if {@link RecreateStrategy#LOOKUP} and
+ * {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}.
* Returns {@code null} otherwise.
*/
Bookmark asBookmarkIfSupported();
/**
* TODO[2112] outdated
- * Returns a bookmark only if {@link Type#PERSISTENT} and
- * {@link #getSort() sort} is {@link Sort#SCALAR scalar}.
+ * Returns a bookmark only if {@link RecreateStrategy#LOOKUP} and
+ * {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}.
* Returns {@code null} otherwise.
*/
Bookmark asHintingBookmarkIfSupported();
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingLKG.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingLKG.java
index a80888c..cc45d42 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingLKG.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingLKG.java
@@ -34,7 +34,7 @@ import lombok.val;
/**
*
- * @deprecated TODO[2112] adapter to LAST KNOWN GOOD, but does not work
+ * adapter to LAST KNOWN GOOD
*
*/
public class ObjectAdapterMementoSupport_usingLKG
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoUsingSupport.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoUsingSupport.java
index f14d5e7..443d543 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoUsingSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoUsingSupport.java
@@ -27,6 +27,7 @@ import org.apache.isis.commons.internal.ioc.BeanSort;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.spec.ObjectSpecId;
+import org.apache.isis.runtime.system.context.IsisContext;
import lombok.Getter;
import lombok.Value;
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento_LastKnownGood.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento_LastKnownGood.java
index 28295e1..87d68f7 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento_LastKnownGood.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento_LastKnownGood.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.services.hint.HintStore;
import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.adapter.oid.ObjectNotFoundException;
@@ -105,7 +106,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
return new ObjectAdapterMemento_LastKnownGood(specId, encodableValue);
}
- public enum Sort {
+ public enum Cardinality {
/**
* represents a single object
*/
@@ -116,12 +117,12 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
final ObjectAdapterMemento_LastKnownGood oam,
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
- return oam.type.getAdapter(oam, persistenceSession, specificationLoader);
+ return oam.recreateStrategy.getAdapter(oam, persistenceSession, specificationLoader);
}
@Override
public int hashCode(final ObjectAdapterMemento_LastKnownGood oam) {
- return oam.type.hashCode(oam);
+ return oam.recreateStrategy.hashCode(oam);
}
@Override
@@ -130,15 +131,15 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
return false;
}
final ObjectAdapterMemento_LastKnownGood otherOam = (ObjectAdapterMemento_LastKnownGood) other;
- if(otherOam.sort != SCALAR) {
+ if(otherOam.cardinality != SCALAR) {
return false;
}
- return oam.type.equals(oam, (ObjectAdapterMemento_LastKnownGood) other);
+ return oam.recreateStrategy.equals(oam, (ObjectAdapterMemento_LastKnownGood) other);
}
@Override
public String asString(final ObjectAdapterMemento_LastKnownGood oam) {
- return oam.type.toString(oam);
+ return oam.recreateStrategy.toString(oam);
}
},
/**
@@ -168,7 +169,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
return false;
}
final ObjectAdapterMemento_LastKnownGood otherOam = (ObjectAdapterMemento_LastKnownGood) other;
- if(otherOam.sort != VECTOR) {
+ if(otherOam.cardinality != VECTOR) {
return false;
}
return oam.list.equals(otherOam.list);
@@ -180,7 +181,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
}
};
- void ensure(final Sort sort) {
+ void ensure(final Cardinality sort) {
if(this == sort) {
return;
}
@@ -199,7 +200,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
public abstract String asString(final ObjectAdapterMemento_LastKnownGood oam);
}
- enum Type {
+ enum RecreateStrategy {
/**
* The {@link ObjectAdapter} that this is the memento for directly has
* an {@link EncodableFacet} (it is almost certainly a value), and so is
@@ -219,7 +220,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
@Override
public boolean equals(ObjectAdapterMemento_LastKnownGood oam, ObjectAdapterMemento_LastKnownGood other) {
- return other.type == ENCODEABLE && oam.encodableValue.equals(other.encodableValue);
+ return other.recreateStrategy == ENCODEABLE && oam.encodableValue.equals(other.encodableValue);
}
@Override
@@ -242,7 +243,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
* The {@link ObjectAdapter} that this is for is already known by its
* (persistent) {@link Oid}.
*/
- PERSISTENT {
+ LOOKUP {
@Override
ObjectAdapter recreateAdapter(
final ObjectAdapterMemento_LastKnownGood oam,
@@ -277,7 +278,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
@Override
public boolean equals(ObjectAdapterMemento_LastKnownGood oam, ObjectAdapterMemento_LastKnownGood other) {
- return other.type == PERSISTENT && oam.persistentOidStr.equals(other.persistentOidStr);
+ return other.recreateStrategy == LOOKUP && oam.persistentOidStr.equals(other.persistentOidStr);
}
@Override
@@ -309,7 +310,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
@Override
public boolean equals(ObjectAdapterMemento_LastKnownGood oam, ObjectAdapterMemento_LastKnownGood other) {
- return other.type == TRANSIENT && oam.transientMemento.equals(other.transientMemento);
+ return other.recreateStrategy == TRANSIENT && oam.transientMemento.equals(other.transientMemento);
}
@Override
@@ -353,41 +354,41 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
- private final Sort sort;
+ private final Cardinality cardinality;
private final ObjectSpecId objectSpecId;
/**
- * Populated only if {@link #getSort() sort} is {@link Sort#SCALAR scalar}
+ * Populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
*/
- private Type type;
+ private RecreateStrategy recreateStrategy;
/**
- * Populated only if {@link #getSort() sort} is {@link Sort#SCALAR scalar}
+ * Populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
*/
@SuppressWarnings("unused")
private String titleHint;
/**
- * The current value, if {@link Type#ENCODEABLE}; will be <tt>null</tt> otherwise.
+ * The current value, if {@link RecreateStrategy#ENCODEABLE}; will be <tt>null</tt> otherwise.
*
* <p>
- * Also, populated only if {@link #getSort() sort} is {@link Sort#SCALAR scalar}
+ * Also, populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
*/
private String encodableValue;
/**
- * The current value, if {@link Type#PERSISTENT}, will be <tt>null</tt> otherwise.
+ * The current value, if {@link RecreateStrategy#LOOKUP}, will be <tt>null</tt> otherwise.
*
* <p>
- * Also, populated only if {@link #getSort() sort} is {@link Sort#SCALAR scalar}
+ * Also, populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
*/
private String persistentOidStr;
/**
- * The current value, if {@link Type#PERSISTENT}, will be <tt>null</tt> otherwise.
+ * The current value, if {@link RecreateStrategy#LOOKUP}, will be <tt>null</tt> otherwise.
*
* <p>
- * Also, populated only if {@link #getSort() sort} is {@link Sort#SCALAR scalar}
+ * Also, populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
*/
private Bookmark bookmark;
@@ -397,20 +398,20 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
private String hintId;
/**
- * The current value, if {@link Type#TRANSIENT}, will be <tt>null</tt> otherwise.
+ * The current value, if {@link RecreateStrategy#TRANSIENT}, will be <tt>null</tt> otherwise.
*
* <p>
- * Also, populated only if {@link #getSort() sort} is {@link Sort#SCALAR scalar}
+ * Also, populated only if {@link #getCardinality() sort} is {@link Cardinality#SCALAR scalar}
*/
private Memento transientMemento;
/**
- * populated only if {@link #getSort() sort} is {@link Sort#VECTOR vector}
+ * populated only if {@link #getCardinality() sort} is {@link Cardinality#VECTOR vector}
*/
private ArrayList<ObjectAdapterMemento_LastKnownGood> list;
public ObjectAdapterMemento_LastKnownGood(final ArrayList<ObjectAdapterMemento_LastKnownGood> list, final ObjectSpecId objectSpecId) {
- this.sort = Sort.VECTOR;
+ this.cardinality = Cardinality.VECTOR;
this.list = list;
this.objectSpecId = objectSpecId;
}
@@ -422,39 +423,39 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
val specificationLoader = IsisContext.getSpecificationLoader();
val spec = specificationLoader.lookupBySpecIdElseLoad(specId);
if(spec!=null && spec.isEncodeable()) {
- this.sort = Sort.SCALAR;
+ this.cardinality = Cardinality.SCALAR;
this.objectSpecId = specId;
this.encodableValue = rootOid.getIdentifier();
- this.type = Type.ENCODEABLE;
+ this.recreateStrategy = RecreateStrategy.ENCODEABLE;
return;
}
// -- //
_Assert.assertFalse("expected not to be transient", rootOid.isTransient());
- this.sort = Sort.SCALAR;
+ this.cardinality = Cardinality.SCALAR;
this.persistentOidStr = rootOid.enString();
this.bookmark = rootOid.asBookmark();
this.objectSpecId = rootOid.getObjectSpecId();
- this.type = Type.PERSISTENT;
+ this.recreateStrategy = RecreateStrategy.LOOKUP;
}
private ObjectAdapterMemento_LastKnownGood(final ObjectAdapter adapter) {
if (adapter == null) {
throw new IllegalArgumentException("adapter cannot be null");
}
- this.sort = Sort.SCALAR;
+ this.cardinality = Cardinality.SCALAR;
final ObjectSpecification specification = adapter.getSpecification();
objectSpecId = specification.getSpecId();
init(adapter);
}
private ObjectAdapterMemento_LastKnownGood(final ObjectSpecId specId, final String encodableValue) {
- this.sort = Sort.SCALAR;
+ this.cardinality = Cardinality.SCALAR;
this.objectSpecId = specId;
this.encodableValue = encodableValue;
- this.type = Type.ENCODEABLE;
+ this.recreateStrategy = RecreateStrategy.ENCODEABLE;
}
@@ -466,14 +467,14 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
final boolean isEncodable = encodableFacet != null;
if (isEncodable) {
encodableValue = encodableFacet.toEncodedString(adapter);
- type = Type.ENCODEABLE;
+ recreateStrategy = RecreateStrategy.ENCODEABLE;
return;
}
final RootOid oid = (RootOid) adapter.getOid();
if (oid.isTransient()) {
transientMemento = new Memento(adapter);
- type = Type.TRANSIENT;
+ recreateStrategy = RecreateStrategy.TRANSIENT;
return;
}
@@ -483,11 +484,11 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
HintStore.HintIdProvider provider = (HintStore.HintIdProvider) adapter.getPojo();
this.hintId = provider.hintId();
}
- type = Type.PERSISTENT;
+ recreateStrategy = RecreateStrategy.LOOKUP;
}
- public Sort getSort() {
- return sort;
+ public Cardinality getCardinality() {
+ return cardinality;
}
public ArrayList<ObjectAdapterMemento_LastKnownGood> getList() {
@@ -500,7 +501,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
ensureScalar();
- type.resetVersion(this, persistenceSession, specificationLoader);
+ recreateStrategy.resetVersion(this, persistenceSession, specificationLoader);
}
@@ -529,7 +530,19 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
public ObjectAdapter getObjectAdapter(
final PersistenceSession persistenceSession,
final SpecificationLoader specificationLoader) {
- return sort.asAdapter(this, persistenceSession, specificationLoader);
+
+ val spec = specificationLoader.loadSpecification(objectSpecId);
+
+ // intercept when trivial
+ if(spec.getBeanSort().isManagedBean()) {
+
+
+ System.out.println("############## LOOKUP " + objectSpecId);
+
+ //return MetaModelContext.current().lookupServiceAdapterById(objectSpecId.asString());
+ }
+
+ return cardinality.asAdapter(this, persistenceSession, specificationLoader);
}
/**
@@ -575,12 +588,12 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
@Override
public int hashCode() {
- return sort.hashCode(this);
+ return cardinality.hashCode(this);
}
@Override
public boolean equals(Object obj) {
- return sort.equals(this, obj);
+ return cardinality.equals(this, obj);
}
@@ -590,7 +603,7 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
}
public String asString() {
- return sort.asString(this);
+ return cardinality.asString(this);
}
@@ -662,11 +675,11 @@ public class ObjectAdapterMemento_LastKnownGood implements Serializable {
}
private void ensureScalar() {
- getSort().ensure(Sort.SCALAR);
+ getCardinality().ensure(Cardinality.SCALAR);
}
private void ensureVector() {
- getSort().ensure(Sort.VECTOR);
+ getCardinality().ensure(Cardinality.VECTOR);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index b5e2e2f..9e346a7 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -114,7 +114,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
@Override
public ManagedObject disposableAdapterForViewModel(final Object viewModelPojo) {
- return ManagedObject.of(()->specificationLoader.loadSpecification(viewModelPojo.getClass()), viewModelPojo);
+ return ManagedObject.of(specificationLoader::loadSpecification, viewModelPojo);
}
@Override
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java
index 1a6f114..245ee2a 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java
@@ -18,6 +18,10 @@
*/
package org.apache.isis.viewer.restfulobjects.rendering;
+import org.apache.isis.commons.collections.Bin;
+import org.apache.isis.commons.internal.assertions._Assert;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import org.apache.isis.metamodel.MetaModelContext;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
@@ -25,11 +29,11 @@ import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.exceptions.persistence.ObjectNotFoundException;
import org.apache.isis.metamodel.exceptions.persistence.PojoRecreationException;
import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.metamodel.spec.ObjectSpecId;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+import lombok.val;
+
final class OidUtils {
private OidUtils() {
@@ -73,38 +77,59 @@ final class OidUtils {
private static Object domainObjectForAny(final RendererContext rendererContext, final RootOid rootOid) {
- final MetaModelContext context = MetaModelContext.current();
-
- final ObjectSpecId specId = rootOid.getObjectSpecId();
- final ObjectSpecification spec = context.getSpecificationLoader().lookupBySpecIdElseLoad(specId);
+ val specId = rootOid.getObjectSpecId();
+ val spec = MetaModelContext.current().getSpecificationLoader().lookupBySpecIdElseLoad(specId);
if(spec == null) {
// eg "NONEXISTENT:123"
return null;
}
- if(spec.containsFacet(ViewModelFacet.class)) {
+ //TODO[2158] remove eventually
+ _Assert.assertEquals("expected same",
+ spec.getBeanSort().isViewModel(),
+ spec.containsFacet(ViewModelFacet.class));
+
+ if(spec.getBeanSort().isViewModel()) {
try {
- final RootOid fixedRootOid = ensureConsistentOidState(rootOid);
- final ObjectAdapter adapter = rendererContext.adapterOfPojo(fixedRootOid);
+ val fixedRootOid = ensureConsistentOidState(rootOid);
+ val adapter = rendererContext.adapterOfPojo(fixedRootOid);
- final Object pojo = mapIfPresentElse(adapter, ObjectAdapter::getPojo, null);
+ val pojo = mapIfPresentElse(adapter, ObjectAdapter::getPojo, null);
return pojo;
- } catch(final ObjectNotFoundException | PojoRecreationException ex) {
+ } catch(ObjectNotFoundException | PojoRecreationException ex) {
return null;
}
- } else {
+ } else if(spec.getBeanSort().isEntity()){
try {
- final Object domainObject = rendererContext.fetchPersistentPojoInTransaction(rootOid);
+ val pojo = rendererContext.fetchPersistentPojoInTransaction(rootOid);
//TODO[ISIS-1976] changed behavior: predicate was objectAdapter.isTransient();
- return rendererContext.stateOf(domainObject).isDetached()
+ return rendererContext.stateOf(pojo).isDetached()
? null
- : domainObject;
- } catch(final ObjectNotFoundException ex) {
+ : pojo;
+ } catch(ObjectNotFoundException ex) {
return null;
}
- }
+ } else if(spec.getBeanSort().isManagedBean()){
+
+ val servicePojo = rendererContext.getServiceRegistry()
+ .lookupRegisteredBeanById(spec.getSpecId().asString())
+ .map(ManagedBeanAdapter::getInstance)
+ .flatMap(Bin::getFirst)
+ .orElse(null);
+
+ if(servicePojo!=null) {
+ return servicePojo;
+ }
+ // fall through and throw
+
+ }
+ throw _Exceptions.unrecoverableFormatted(
+ "unhandled request for a %s having rootId %s",
+ spec,
+ rootOid);
+
}
private static RootOid ensureConsistentOidState(RootOid rootOid) {
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index ca83ea0..5ed4005 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -45,18 +45,27 @@ import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeReprRenderer;
+import lombok.val;
+
public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectReprRenderer, ObjectAdapter> {
private static final String X_RO_DOMAIN_TYPE = "x-ro-domain-type";
- public static LinkBuilder newLinkToBuilder(final RendererContext rendererContext, final Rel rel, final ObjectAdapter objectAdapter) {
+ public static LinkBuilder newLinkToBuilder(
+ final RendererContext rendererContext,
+ final Rel rel,
+ final ObjectAdapter objectAdapter) {
+
String domainType = OidUtils.getDomainType(objectAdapter);
String instanceId = OidUtils.getInstanceId(objectAdapter);
final String url = "objects/" + domainType + "/" + instanceId;
return LinkBuilder.newBuilder(rendererContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.titleString(null));
}
- public static LinkBuilder newLinkToObjectLayoutBuilder(final RendererContext rendererContext, final ObjectAdapter objectAdapter) {
+ public static LinkBuilder newLinkToObjectLayoutBuilder(
+ final RendererContext rendererContext,
+ final ObjectAdapter objectAdapter) {
+
final Rel rel = Rel.OBJECT_LAYOUT;
String domainType = OidUtils.getDomainType(objectAdapter);
String instanceId = OidUtils.getInstanceId(objectAdapter);
@@ -64,7 +73,10 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
return LinkBuilder.newBuilder(rendererContext, rel.getName(), RepresentationType.OBJECT_LAYOUT, url);
}
- public static LinkBuilder newLinkToObjectIconBuilder(final RendererContext rendererContext, final ObjectAdapter objectAdapter) {
+ public static LinkBuilder newLinkToObjectIconBuilder(
+ final RendererContext rendererContext,
+ final ObjectAdapter objectAdapter) {
+
final Rel rel = Rel.OBJECT_ICON;
String domainType = OidUtils.getDomainType(objectAdapter);
String instanceId = OidUtils.getInstanceId(objectAdapter);
@@ -449,9 +461,14 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
String format = null; // TODO
return JsonValueEncoder.asObject(objectAdapter, format);
}
- final TitleFacet titleFacet = objectSpec.getFacet(TitleFacet.class);
+ val titleFacet = objectSpec.getFacet(TitleFacet.class);
final String title = titleFacet.title(objectAdapter);
- return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.VALUE, ManagedObject.promote(objectAdapter)).withTitle(title).build();
+ return DomainObjectReprRenderer.newLinkToBuilder(
+ resourceContext,
+ Rel.VALUE,
+ ManagedObject.promote(objectAdapter))
+ .withTitle(title)
+ .build();
}
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java
index 674ed98..d3a8898 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java
@@ -21,19 +21,18 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.oid.Oid;
import org.apache.isis.metamodel.adapter.oid.RootOid;
+import org.apache.isis.metamodel.spec.ManagedObject;
final class OidUtils {
private OidUtils() {
}
- public static String getDomainType(final ObjectAdapter objectAdapter) {
- Oid oid = objectAdapter.getOid();
- if (oid == null || !(oid instanceof RootOid)) {
+ public static String getDomainType(final ManagedObject objectAdapter) {
+ if (objectAdapter == null) {
return null;
}
- RootOid rootOid = (RootOid) oid;
- return rootOid.getObjectSpecId().asString();
+ return objectAdapter.getSpecification().getSpecId().asString();
}
public static String getInstanceId(final ObjectAdapter objectAdapter) {
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 08654cd..9a63aab 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -94,14 +94,15 @@ implements LinksProvider, UiHintContainer {
List<ObjectAdapter> load(final EntityCollectionModel entityCollectionModel) {
//XXX lombok issue, cannot use val here
- boolean isBulkLoad = IsisContext.getConfiguration().getPersistor().getDatanucleus().getStandaloneCollection().isBulkLoad();
- final Stream<ObjectAdapter> resolveResults = isBulkLoad
- ? loadInBulk(entityCollectionModel)
- : loadOneByOne(entityCollectionModel);
- return resolveResults.collect(Collectors.toList());
+ boolean isBulkLoad = IsisContext.getConfiguration()
+ .getPersistor().getDatanucleus().getStandaloneCollection().isBulkLoad();
+
+ return isBulkLoad
+ ? loadElementsInBulk(entityCollectionModel).collect(Collectors.toList())
+ : loadElementsOneByOne(entityCollectionModel).collect(Collectors.toList());
}
- private Stream<ObjectAdapter> loadInBulk(final EntityCollectionModel model) {
+ private Stream<ObjectAdapter> loadElementsInBulk(final EntityCollectionModel model) {
//XXX lombok issue, cannot use val here
PersistenceSession persistenceSession = IsisContext.getPersistenceSession()
@@ -118,10 +119,13 @@ implements LinksProvider, UiHintContainer {
.filter(_NullSafe::isPresent);
}
- private Stream<ObjectAdapter> loadOneByOne(final EntityCollectionModel model) {
+ private Stream<ObjectAdapter> loadElementsOneByOne(final EntityCollectionModel model) {
return stream(model.mementoList)
- .map(ObjectAdapterMemento::getObjectAdapter)
+ //.map(ObjectAdapterMemento::getObjectAdapter)
+ .map(mem->{
+ return mem.getObjectAdapter();
+ })
.filter(_NullSafe::isPresent);
}
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index 2752400..dc8ed5a 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -73,6 +73,8 @@ import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
import org.apache.isis.viewer.wicket.ui.panels.FormExecutorDefault;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
+import lombok.val;
+
public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
private static final long serialVersionUID = 1L;
@@ -120,6 +122,8 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
final ActionPrompt actionPrompt = ActionParameterDefaultsFacetFromAssociatedCollection.withSelected(
selectedPojos,
new ActionParameterDefaultsFacetFromAssociatedCollection.SerializableRunnable<ActionPrompt>() {
+ private static final long serialVersionUID = 1L;
+
@Override
public ActionPrompt call() {
return performOnClick(target);
@@ -128,6 +132,8 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
);
if(actionPrompt != null) {
actionPrompt.setOnClose(new ActionPrompt.CloseHandler() {
+ private static final long serialVersionUID = 1L;
+
@Override
public void close(final AjaxRequestTarget target) {
toggledMementosProviderIfAny.clearToggles(target);
@@ -164,12 +170,9 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
if(inlinePromptContext == null || promptStyle.isDialog()) {
final ActionPromptProvider promptProvider = ActionPromptProvider.Util.getFrom(actionLink.getPage());
- final ObjectSpecification specification = actionModel.getTargetAdapter().getSpecification();
+ val spec = actionModel.getTargetAdapter().getSpecification();
- final MetaModelService metaModelService = getServiceRegistry()
- .lookupServiceElseFail(MetaModelService.class);
- final BeanSort sort = metaModelService.sortOf(specification.getCorrespondingClass(), MetaModelService.Mode.RELAXED);
- final ActionPrompt prompt = promptProvider.getActionPrompt(promptStyle, sort);
+ final ActionPrompt prompt = promptProvider.getActionPrompt(promptStyle, spec.getBeanSort());
//
@@ -185,7 +188,9 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
actionParametersPanel.setShowHeader(false);
+ @SuppressWarnings("deprecation") // conveniently reuses the toString method of AbstractReadOnlyModel
final Label label = new Label(prompt.getTitleId(), new AbstractReadOnlyModel<String>() {
+ private static final long serialVersionUID = 1L;
@Override
public String getObject() {
final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
@@ -204,14 +209,14 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
if(action instanceof ObjectActionMixedIn) {
final ObjectActionMixedIn actionMixedIn = (ObjectActionMixedIn) action;
- final ObjectSpecification mixinType = actionMixedIn.getMixinType();
+ final ObjectSpecification mixinSpec = actionMixedIn.getMixinType();
- if(mixinType.isViewModel()) {
+ if(mixinSpec.isViewModel()) {
final ManagedObject targetAdapterForMixin = action.realTargetAdapter(actionModel.getTargetAdapter());
final EntityModel entityModelForMixin = new EntityModel(ManagedObject.promote(targetAdapterForMixin));
- final GridFacet facet = mixinType.getFacet(GridFacet.class);
+ final GridFacet facet = mixinSpec.getFacet(GridFacet.class);
final Grid gridForMixin = facet.getGrid(targetAdapterForMixin);
final String extraContentId = promptWithExtraContent.getExtraContentId();
diff --git a/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java b/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
index b04e97e..0bdf687 100644
--- a/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
+++ b/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
@@ -42,6 +42,7 @@ import org.apache.isis.extensions.sse.IsisBootSse;
import org.apache.isis.jdo.IsisBootDataNucleus;
import org.apache.isis.runtime.spring.IsisBoot;
import org.apache.isis.security.shiro.IsisBootSecurityShiro;
+import org.apache.isis.viewer.restfulobjects.IsisBootWebRestfulObjects;
import org.apache.isis.viewer.wicket.viewer.IsisBootWebWicket;
import domainapp.dom.DemoModule;
@@ -62,6 +63,7 @@ import domainapp.utils.LibraryPreloadingService;
IsisBootDataNucleus.class,
IsisBootWebWicket.class,
IsisBootSse.class, // server sent events
+ IsisBootWebRestfulObjects.class,
// Security Manager Extension (secman)
IsisBootSecmanModel.class,
diff --git a/extensions/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java b/extensions/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
index 15e58ea..bbe2b2c 100644
--- a/extensions/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
+++ b/extensions/secman/model/src/main/java/org/apache/isis/extensions/secman/model/app/user/MeService.java
@@ -44,14 +44,11 @@ import org.apache.isis.extensions.secman.api.user.ApplicationUserRepository;
)
public class MeService {
- public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<MeService, T> {
- private static final long serialVersionUID = 1L;}
+ public static abstract class PropertyDomainEvent<T> extends SecurityModule.PropertyDomainEvent<MeService, T> {}
- public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<MeService, T> {
- private static final long serialVersionUID = 1L;}
+ public static abstract class CollectionDomainEvent<T> extends SecurityModule.CollectionDomainEvent<MeService, T> {}
- public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<MeService> {
- private static final long serialVersionUID = 1L;}
+ public static abstract class ActionDomainEvent extends SecurityModule.ActionDomainEvent<MeService> {}
// -- iconName
public String iconName() {
@@ -59,8 +56,7 @@ public class MeService {
}
// -- me (action)
- public static class MeDomainEvent extends ActionDomainEvent {
- private static final long serialVersionUID = 1L;}
+ public static class MeDomainEvent extends ActionDomainEvent {}
@Action(
domainEvent = MeDomainEvent.class,