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/24 08:51:33 UTC
[isis] 02/06: ISIS-2158: refactoring Oid factories into 'metamodel'
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 e55cf7f97ccb4a4044cb97b9642b6738ffed0614
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 23 23:07:42 2019 +0200
ISIS-2158: refactoring Oid factories into 'metamodel'
- also for entity objects, makes object identifier fetching the
responsibility of the EntityFacet
---
.../org/apache/isis/config}/SystemConstants.java | 35 +----
.../metamodel/adapter/oid/factory}/OidFactory.java | 30 +++--
.../adapter/oid/factory}/OidFactory_Builder.java | 29 ++---
.../oid/factory/OidFactory_OidProviders.java | 134 ++++++++++++++++++++
.../facets/object/entity/EntityFacet.java | 5 +-
.../facets/object/entity/EntityFacetSimple.java | 35 -----
.../apache/isis/metamodel/spec/ManagedObject.java | 11 +-
.../JdoPersistenceCapableFacetAbstract.java | 5 +-
.../JdoPersistenceCapableFacetImpl.java | 70 ++++++++++
.../homepage/HomePageResolverServiceDefault.java | 12 +-
.../memento/ObjectAdapterMementoDefault.java | 8 +-
.../ObjectAdapterMementoSupport_usingDefault.java | 2 +-
.../isis/runtime/system/MessageRegistry.java | 2 +
.../system/internal/IsisLocaleInitializer.java | 2 +-
...ObjectAdapterContext_ObjectAdapterProvider.java | 18 +--
.../ObjectAdapterContext_OidProviders.java | 141 ---------------------
.../apache/isis/security/shiro/WebModuleShiro.java | 46 ++++++-
.../IsisRestfulObjectsSessionFilter.java | 2 +-
.../resources/MenuBarsResourceServerside.java | 2 +-
.../server/resources/UserResourceServerside.java | 2 +-
core/viewer-wicket/ui/pom.xml | 8 +-
.../serviceactions/ServiceActionUtil.java | 2 +-
.../isis/viewer/wicket/ui/panels/PanelUtil.java | 2 +-
.../isis/testdomain/shiro/AbstractShiroTest.java | 25 ++--
.../apache/isis/applib/DomainObjectContainer.java | 7 +-
extensions/viewer-wicket-excel/pom.xml | 15 ++-
26 files changed, 355 insertions(+), 295 deletions(-)
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/SystemConstants.java b/core/config/src/main/java/org/apache/isis/config/SystemConstants.java
similarity index 72%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/SystemConstants.java
rename to core/config/src/main/java/org/apache/isis/config/SystemConstants.java
index 0c0fca3..047e914 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/SystemConstants.java
+++ b/core/config/src/main/java/org/apache/isis/config/SystemConstants.java
@@ -17,11 +17,12 @@
* under the License.
*/
-package org.apache.isis.runtime.system;
+package org.apache.isis.config;
-import org.apache.isis.config.ConfigurationConstants;
-import org.apache.isis.config.IsisConfigurationLegacy;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class SystemConstants {
public static final String MSG_ARE_YOU_SURE = "Are you sure?";
@@ -51,31 +52,9 @@ public final class SystemConstants {
*/
public static final String ISIS_SESSION_FILTER_QUERY_STRING_FORCE_LOGOUT = "__isis_force_logout";
- // -- SERVICE SUPPORT
-
- public static final String SERVICE_IDENTIFIER = "1";
-
- /**
- * Key by which requested user (eg via command line) is made available in
- * {@link IsisConfigurationLegacy} .
- *
- * @deprecated
- */
- @Deprecated
- public final static String USER_KEY = ConfigurationConstants.ROOT + "user";
-
- /**
- * Key by which requested password (eg via command line) is made available
- * in {@link IsisConfigurationLegacy}.
- *
- * @deprecated
- */
- @Deprecated
- public final static String PASSWORD_KEY = ConfigurationConstants.ROOT + "password";
-
public static final String LOCALE_KEY = ConfigurationConstants.ROOT + "locale";
- private SystemConstants() {
- }
-
+ // -- SERVICE SUPPORT
+ public static final String SERVICE_IDENTIFIER = "1";
+
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/factories/OidFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java
similarity index 54%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/factories/OidFactory.java
rename to core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java
index 9b97abc..27d41fd 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/factories/OidFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java
@@ -17,23 +17,23 @@
* under the License.
*/
-package org.apache.isis.runtime.system.persistence.adaptermanager.factories;
-
-import java.util.function.Function;
+package org.apache.isis.metamodel.adapter.oid.factory;
import org.apache.isis.metamodel.adapter.oid.RootOid;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
+import org.apache.isis.metamodel.spec.ManagedObject;
+
+import lombok.val;
/**
* @since 2.0
*/
public interface OidFactory {
- RootOid oidFor(Object pojo);
+ RootOid oidFor(ManagedObject managedObject);
public interface OidProvider {
- boolean isHandling(Object pojo, ObjectSpecification spec);
- RootOid oidFor(Object pojo, ObjectSpecification spec);
+ boolean isHandling(ManagedObject managedObject);
+ RootOid oidFor(ManagedObject managedObject);
}
public interface OidFactoryBuilder {
@@ -41,8 +41,20 @@ public interface OidFactory {
OidFactory build();
}
- public static OidFactoryBuilder builder(Function<Object, ObjectSpecification> specProvider) {
- return new OidFactory_Builder(specProvider);
+ public static OidFactoryBuilder builder() {
+ return new OidFactory_Builder();
}
+ public static OidFactory buildDefault() {
+ val oidFactory = OidFactory.builder()
+ .add(new OidFactory_OidProviders.GuardAgainstRootOid())
+ .add(new OidFactory_OidProviders.OidForServices())
+ .add(new OidFactory_OidProviders.OidForValues())
+ .add(new OidFactory_OidProviders.OidForViewModels())
+ .add(new OidFactory_OidProviders.OidForEntities())
+ .add(new OidFactory_OidProviders.OidForOthers())
+ .build();
+ return oidFactory;
+ }
+
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
similarity index 57%
rename from core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
rename to core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
index 836fd21..6a862a3 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
@@ -17,26 +17,20 @@
* under the License.
*/
-package org.apache.isis.runtime.system.persistence.adaptermanager.factories;
+package org.apache.isis.metamodel.adapter.oid.factory;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import java.util.function.Function;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtime.system.persistence.adaptermanager.factories.OidFactory.OidFactoryBuilder;
-import org.apache.isis.runtime.system.persistence.adaptermanager.factories.OidFactory.OidProvider;
+import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidFactoryBuilder;
+import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidProvider;
+
+import lombok.val;
class OidFactory_Builder implements OidFactoryBuilder {
private final List<OidProvider> handler = new ArrayList<>();
- private final Function<Object, ObjectSpecification> specProvider;
-
- public OidFactory_Builder(Function<Object, ObjectSpecification> specProvider) {
- this.specProvider = specProvider;
- }
@Override
public OidFactoryBuilder add(OidProvider oidProvider) {
@@ -46,17 +40,16 @@ class OidFactory_Builder implements OidFactoryBuilder {
@Override
public OidFactory build() {
- return pojo -> {
-
- final ObjectSpecification spec = specProvider.apply(pojo);
+ return managedObject -> {
- final RootOid rootOid = handler.stream()
- .filter(h->h.isHandling(pojo, spec))
+ val rootOid = handler.stream()
+ .filter(h->h.isHandling(managedObject))
.findFirst()
- .map(h->h.oidFor(pojo, spec))
+ .map(h->h.oidFor(managedObject))
.orElse(null);
- Objects.requireNonNull(rootOid, () -> "Could not create an Oid for pojo: "+pojo);
+ Objects.requireNonNull(rootOid,
+ () -> "Could not create an Oid for managedObject: " + managedObject);
return rootOid;
};
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_OidProviders.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_OidProviders.java
new file mode 100644
index 0000000..1110a5b
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_OidProviders.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.metamodel.adapter.oid.factory;
+
+import java.util.UUID;
+
+import org.apache.isis.config.SystemConstants;
+import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.adapter.oid.RootOid;
+import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidProvider;
+import org.apache.isis.metamodel.facets.object.entity.EntityFacet;
+import org.apache.isis.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
+
+import lombok.val;
+
+class OidFactory_OidProviders {
+
+
+ static class GuardAgainstRootOid implements OidProvider {
+
+ @Override
+ public boolean isHandling(ManagedObject managedObject) {
+ return managedObject.getPojo() instanceof RootOid;
+ }
+
+ @Override
+ public RootOid oidFor(ManagedObject managedObject) {
+ throw new IllegalArgumentException("Cannot create a RootOid for pojo, "
+ + "when pojo is instance of RootOid. You might want to ask "
+ + "ObjectAdapterByIdProvider for an ObjectAdapter instead.");
+ }
+
+ }
+
+ static class OidForServices implements OidProvider {
+
+ @Override
+ public boolean isHandling(ManagedObject managedObject) {
+ return managedObject.getSpecification().isManagedBean();
+ }
+
+ @Override
+ public RootOid oidFor(ManagedObject managedObject) {
+ final String identifier = SystemConstants.SERVICE_IDENTIFIER;
+ return Oid.Factory.persistentOf(managedObject.getSpecification().getSpecId(), identifier);
+ }
+
+ }
+
+ static class OidForEntities implements OidProvider {
+
+ @Override
+ public boolean isHandling(ManagedObject managedObject) {
+ return managedObject.getSpecification().isEntity();
+ }
+
+ @Override
+ public RootOid oidFor(ManagedObject managedObject) {
+ val spec = managedObject.getSpecification();
+ val pojo = managedObject.getPojo();
+ val entityFacet = spec.getFacet(EntityFacet.class);
+ val identifier = entityFacet.identifierFor(pojo);
+ return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
+ }
+
+ }
+
+ static class OidForValues implements OidProvider {
+
+ @Override
+ public boolean isHandling(ManagedObject managedObject) {
+ return managedObject.getSpecification().containsFacet(ValueFacet.class);
+ }
+
+ @Override
+ public RootOid oidFor(ManagedObject managedObject) {
+ return Oid.Factory.value();
+ }
+
+ }
+
+ static class OidForViewModels implements OidProvider {
+
+ @Override
+ public boolean isHandling(ManagedObject managedObject) {
+ return managedObject.getSpecification().containsFacet(ViewModelFacet.class);
+ }
+
+ @Override
+ public RootOid oidFor(ManagedObject managedObject) {
+ val spec = managedObject.getSpecification();
+ val recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
+ val identifier = recreatableObjectFacet.memento(managedObject.getPojo());
+ return Oid.Factory.viewmodelOf(spec.getSpecId(), identifier);
+ }
+
+ }
+
+ static class OidForOthers implements OidProvider {
+
+ @Override
+ public boolean isHandling(ManagedObject managedObject) {
+ return true; // try to handle anything
+ }
+
+ @Override
+ public RootOid oidFor(ManagedObject managedObject) {
+ val spec = managedObject.getSpecification();
+ val identifier = UUID.randomUUID().toString();
+ return Oid.Factory.transientOf(spec.getSpecId(), identifier);
+ }
+
+ }
+
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
index fc58480..830e945 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
@@ -20,7 +20,6 @@
package org.apache.isis.metamodel.facets.object.entity;
import org.apache.isis.metamodel.facetapi.Facet;
-import org.apache.isis.metamodel.facetapi.FacetHolder;
/**
* Indicates that this class is managed by a persistence context.
@@ -28,8 +27,6 @@ import org.apache.isis.metamodel.facetapi.FacetHolder;
*/
public interface EntityFacet extends Facet {
- static EntityFacet create(FacetHolder facetHolder) {
- return new EntityFacetSimple(facetHolder);
- }
+ String identifierFor(Object pojo);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacetSimple.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacetSimple.java
deleted file mode 100644
index 2fc47a7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacetSimple.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.metamodel.facets.object.entity;
-
-import org.apache.isis.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.metamodel.facetapi.FacetHolder;
-
-/**
- * Package private impl. of EntityFacet
- * @since 2.0
- */
-class EntityFacetSimple extends FacetAbstract implements EntityFacet {
-
- public EntityFacetSimple(FacetHolder holder) {
- super(EntityFacet.class, holder, Derivation.NOT_DERIVED);
- }
-
-}
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 0c5d0b2..d723825 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
@@ -29,6 +29,7 @@ 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.adapter.oid.factory.OidFactory;
import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
import static org.apache.isis.commons.internal.base._With.requires;
@@ -307,9 +308,15 @@ public interface ManagedObject {
return true;
}
- @Deprecated
static Oid _oid(ManagedObject adapter) {
- return promote(adapter).getOid();
+ if(adapter instanceof ObjectAdapter) {
+ return promote(adapter).getOid();
+ }
+
+ val oidFactory = OidFactory.buildDefault();
+
+ return oidFactory.oidFor(adapter);
+
}
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
index 3412933..d70553a 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetAbstract.java
@@ -27,8 +27,9 @@ import org.apache.isis.metamodel.facetapi.FacetAbstract;
import org.apache.isis.metamodel.facetapi.FacetHolder;
-public abstract class JdoPersistenceCapableFacetAbstract extends FacetAbstract implements
-JdoPersistenceCapableFacet {
+public abstract class JdoPersistenceCapableFacetAbstract
+extends FacetAbstract
+implements JdoPersistenceCapableFacet {
public static Class<? extends Facet> type() {
return JdoPersistenceCapableFacet.class;
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index aaa3cc2..3a156b7 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -18,10 +18,16 @@
*/
package org.apache.isis.jdo.metamodel.facets.object.persistencecapable;
+import java.util.UUID;
+
import javax.jdo.annotations.IdentityType;
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.metamodel.facetapi.FacetHolder;
+import org.apache.isis.runtime.system.context.IsisContext;
+import lombok.val;
public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAbstract {
@@ -33,4 +39,68 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
super(schemaName, tableOrTypeName, identityType, holder);
}
+ @Override
+ public String identifierFor(Object pojo) {
+
+ if(pojo==null || !isPersistableType(pojo.getClass())) {
+ return "?";
+ }
+
+ val persistenceSession = IsisContext.getPersistenceSession().get();
+ val isRecognized = persistenceSession.isRecognized(pojo);
+ if(isRecognized) {
+ final String identifier = persistenceSession.identifierFor(pojo);
+ return identifier;
+ } else {
+ final String identifier = UUID.randomUUID().toString();
+ return identifier;
+ }
+ }
+
+ // -- HELPER
+
+ private final static _Lazy<Class<?>> persistable_type = _Lazy.threadSafe(()->{
+ try {
+ return _Context.loadClass("org.datanucleus.enhancement.Persistable");
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ });
+
+
+ private static boolean isPersistableType(Class<?> type) {
+ return persistable_type.get().isAssignableFrom(type);
+ }
+
+// static class OidForPersistent implements OidProvider {
+//
+// private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
+//
+// @Override
+// public boolean isHandling(ManagedObject managedObject) {
+// // equivalent to 'isInstanceOfPersistable = pojo instanceof Persistable'
+// final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin
+// .isPersistenceEnhanced(managedObject.getPojo().getClass());
+// return isInstanceOfPersistable;
+// }
+//
+// @Override
+// public RootOid oidFor(ManagedObject managedObject) {
+// val spec = managedObject.getSpecification();
+// val pojo = managedObject.getPojo();
+//
+// val persistenceSession = IsisContext.getPersistenceSession().get();
+// final boolean isRecognized = persistenceSession.isRecognized(pojo);
+// if(isRecognized) {
+// final String identifier = persistenceSession.identifierFor(pojo);
+// return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
+// } else {
+// final String identifier = UUID.randomUUID().toString();
+// return Oid.Factory.transientOf(spec.getSpecId(), identifier);
+// }
+// }
+//
+// }
+
}
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java
index 8d4b6c4..1f65281 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/homepage/HomePageResolverServiceDefault.java
@@ -83,7 +83,7 @@ public class HomePageResolverServiceDefault implements HomePageResolverService {
homePageAction =
serviceRegistry.streamRegisteredBeans()
.map(bean->bean.getBeanClass())
- .map(managedBeanType->specLoader.loadSpecification(managedBeanType))
+ .map(specLoader::loadSpecification)
.filter(_NullSafe::isPresent)
.peek(spec->specRef[0]=spec)
.flatMap(spec->spec.streamObjectActions(Contributed.EXCLUDED))
@@ -92,10 +92,14 @@ public class HomePageResolverServiceDefault implements HomePageResolverService {
.findAny()
.orElse(null);
+ if(homePageAction!=null) {
+ return homePageAction;
+ }
+
// -- 3) lookup view-models that have actions annotated with @HomePage
homePageAction = viewModelTypes.stream()
- .map(viewModelType->specLoader.loadSpecification(viewModelType))
+ .map(specLoader::loadSpecification)
.filter(_NullSafe::isPresent)
.peek(spec->specRef[0]=spec)
.flatMap(spec->spec.streamObjectActions(Contributed.EXCLUDED))
@@ -104,10 +108,6 @@ public class HomePageResolverServiceDefault implements HomePageResolverService {
.findAny()
.orElse(null);
- if(homePageAction!=null) {
- return homePageAction;
- }
-
return homePageAction;
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
index 1f2cf68..585bb6c 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoDefault.java
@@ -467,15 +467,15 @@ public class ObjectAdapterMementoDefault implements Serializable {
return;
}
- final RootOid oid = (RootOid) ManagedObject._oid(adapter);
- if (oid.isTransient()) {
+ val rootOid = (RootOid) ManagedObject._oid(adapter);
+ if (rootOid.isTransient()) {
transientMemento = new Memento(adapter);
recreateStrategy = RecreateStrategy.TRANSIENT;
return;
}
- persistentOidStr = oid.enString();
- bookmark = oid.asBookmark();
+ persistentOidStr = rootOid.enString();
+ bookmark = rootOid.asBookmark();
if(adapter.getPojo() instanceof HintStore.HintIdProvider) {
HintStore.HintIdProvider provider = (HintStore.HintIdProvider) adapter.getPojo();
this.hintId = provider.hintId();
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
index 4a14a9d..aa7947a 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
@@ -83,7 +83,7 @@ implements ObjectAdapterMementoSupport {
private static final long serialVersionUID = 1L;
private final ObjectAdapterMementoDefault delegate;
- private final SpecificationLoader specificationLoader;
+ private final transient SpecificationLoader specificationLoader;
@Override
public UUID getStoreKey() {
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/MessageRegistry.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/MessageRegistry.java
index 643d322..82424d0 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/MessageRegistry.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/MessageRegistry.java
@@ -22,6 +22,8 @@ package org.apache.isis.runtime.system;
import java.util.Arrays;
import java.util.List;
+import org.apache.isis.config.SystemConstants;
+
public class MessageRegistry {
public MessageRegistry(){}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/internal/IsisLocaleInitializer.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/internal/IsisLocaleInitializer.java
index 9a2d584..c44fcbc 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/internal/IsisLocaleInitializer.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/internal/IsisLocaleInitializer.java
@@ -22,7 +22,7 @@ package org.apache.isis.runtime.system.internal;
import java.util.Locale;
import org.apache.isis.config.IsisConfigurationLegacy;
-import org.apache.isis.runtime.system.SystemConstants;
+import org.apache.isis.config.SystemConstants;
import lombok.extern.log4j.Log4j2;
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 9e346a7..a40f996 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
@@ -29,6 +29,7 @@ import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
import org.apache.isis.metamodel.adapter.oid.RootOid;
+import org.apache.isis.metamodel.adapter.oid.factory.OidFactory;
import org.apache.isis.metamodel.services.ServiceUtil;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -37,10 +38,11 @@ import org.apache.isis.metamodel.specloader.SpecificationLoader;
import org.apache.isis.runtime.persistence.adapter.ObjectAdapterForBean;
import org.apache.isis.runtime.system.context.session.RuntimeContext;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.runtime.system.persistence.adaptermanager.factories.OidFactory;
import static org.apache.isis.commons.internal.base._With.requires;
+import lombok.val;
+
/**
* package private mixin for ObjectAdapterContext
* <p>
@@ -63,15 +65,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
this.objectAdapterContext = objectAdapterContext;
this.runtimeContext = runtimeContext;
this.specificationLoader = runtimeContext.getSpecificationLoader();
-
- this.oidFactory = OidFactory.builder(pojo->specificationLoader.loadSpecification(pojo.getClass()))
- .add(new ObjectAdapterContext_OidProviders.GuardAgainstRootOid())
- .add(new ObjectAdapterContext_OidProviders.OidForServices())
- .add(new ObjectAdapterContext_OidProviders.OidForValues())
- .add(new ObjectAdapterContext_OidProviders.OidForViewModels())
- .add(new ObjectAdapterContext_OidProviders.OidForPersistent())
- .add(new ObjectAdapterContext_OidProviders.OidForOthers())
- .build();
+ this.oidFactory = OidFactory.buildDefault();
}
@Override
@@ -81,8 +75,8 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
return null;
}
- final RootOid rootOid = oidFactory.oidFor(pojo);
- final ObjectAdapter newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
+ val rootOid = oidFactory.oidFor(ManagedObject.of(specificationLoader::loadSpecification, pojo));
+ val newAdapter = objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
return objectAdapterContext.injectServices(newAdapter);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
deleted file mode 100644
index 5347323..0000000
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.runtime.system.persistence.adaptermanager;
-
-import java.util.UUID;
-
-import org.apache.isis.metamodel.IsisJdoMetamodelPlugin;
-import org.apache.isis.metamodel.adapter.oid.Oid;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
-import org.apache.isis.metamodel.facets.object.value.ValueFacet;
-import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.runtime.system.SystemConstants;
-import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.runtime.system.persistence.adaptermanager.factories.OidFactory.OidProvider;
-
-class ObjectAdapterContext_OidProviders {
-
-
- static class GuardAgainstRootOid implements OidProvider {
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return pojo instanceof RootOid;
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- throw new IllegalArgumentException("Cannot create a RootOid for pojo, "
- + "when pojo is instance of RootOid. You might want to ask "
- + "ObjectAdapterByIdProvider for an ObjectAdapter instead.");
- }
-
- }
-
-
- static class OidForServices implements OidProvider {
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return spec.isManagedBean();
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- final String identifier = SystemConstants.SERVICE_IDENTIFIER;
- return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
- }
-
- }
-
- static class OidForPersistent implements OidProvider {
-
- private final IsisJdoMetamodelPlugin isisJdoMetamodelPlugin = IsisJdoMetamodelPlugin.get();
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- // equivalent to 'isInstanceOfPersistable = pojo instanceof Persistable'
- final boolean isInstanceOfPersistable = isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
- return isInstanceOfPersistable;
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- final PersistenceSession persistenceSession = IsisContext.getPersistenceSession().get();
- final boolean isRecognized = persistenceSession.isRecognized(pojo);
- if(isRecognized) {
- final String identifier = persistenceSession.identifierFor(pojo);
- return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
- } else {
- final String identifier = UUID.randomUUID().toString();
- return Oid.Factory.transientOf(spec.getSpecId(), identifier);
- }
- }
-
- }
-
- static class OidForValues implements OidProvider {
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return spec.containsFacet(ValueFacet.class);
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- return Oid.Factory.value();
- }
-
- }
-
- static class OidForViewModels implements OidProvider {
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return spec.containsFacet(ViewModelFacet.class);
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- final ViewModelFacet recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
- final String identifier = recreatableObjectFacet.memento(pojo);
- return Oid.Factory.viewmodelOf(spec.getSpecId(), identifier);
- }
-
- }
-
- static class OidForOthers implements OidProvider {
-
- @Override
- public boolean isHandling(Object pojo, ObjectSpecification spec) {
- return true; // try to handle anything
- }
-
- @Override
- public RootOid oidFor(Object pojo, ObjectSpecification spec) {
- final String identifier = UUID.randomUUID().toString();
- return Oid.Factory.transientOf(spec.getSpecId(), identifier);
- }
-
- }
-
-
-}
diff --git a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java
index 1bca2d1..6024f52 100644
--- a/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java
+++ b/core/security/shiro/src/main/java/org/apache/isis/security/shiro/WebModuleShiro.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.security.shiro;
+import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -27,14 +28,20 @@ import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import org.apache.shiro.config.Ini;
+import org.apache.shiro.realm.Realm;
+import org.apache.shiro.web.env.EnvironmentLoaderListener;
import org.apache.shiro.web.env.IniWebEnvironment;
import org.apache.shiro.web.env.WebEnvironment;
import org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
+import org.springframework.util.ReflectionUtils;
+import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.webapp.IsisWebAppUtils;
import org.apache.isis.webapp.modules.WebModule;
import org.apache.isis.webapp.modules.WebModuleContext;
@@ -42,6 +49,7 @@ import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
import static org.apache.isis.commons.internal.context._Context.getDefaultClassLoader;
import static org.apache.isis.commons.internal.exceptions._Exceptions.unexpectedCodeReach;
+import lombok.SneakyThrows;
import lombok.val;
/**
@@ -52,9 +60,10 @@ import lombok.val;
*/
@Service @Order(Ordered.HIGHEST_PRECEDENCE)
public final class WebModuleShiro implements WebModule {
-
+
private final static String SHIRO_LISTENER_CLASS_NAME =
- "org.apache.shiro.web.env.EnvironmentLoaderListener";
+ //"org.apache.shiro.web.env.EnvironmentLoaderListener";
+ EnvironmentLoaderListenerForIsis.class.getName();
private final static String SHIRO_FILTER_CLASS_NAME =
"org.apache.shiro.web.servlet.ShiroFilter";
@@ -100,6 +109,39 @@ public final class WebModuleShiro implements WebModule {
System.setProperty("shiroIniResource", resourcePath);
setShiroEnvironmentClass(IniWebEnvironmentUsingSystemProperty.class);
}
+
+ /**
+ * Adds support for dependency injection into security realms
+ * @since 2.0
+ */
+ public static class EnvironmentLoaderListenerForIsis extends EnvironmentLoaderListener {
+
+ @Override
+ protected WebEnvironment createEnvironment(ServletContext servletContext) {
+ val shiroEnvironment = super.createEnvironment(servletContext);
+ val securityManager = shiroEnvironment.getSecurityManager();
+ val serviceInjector = IsisWebAppUtils.getManagedBean(ServiceInjector.class, servletContext);
+
+ injectServicesIntoReamls(serviceInjector, securityManager);
+
+ return shiroEnvironment;
+ }
+
+ @SuppressWarnings("unchecked")
+ @SneakyThrows
+ public static void injectServicesIntoReamls(
+ ServiceInjector serviceInjector,
+ org.apache.shiro.mgt.SecurityManager securityManager) {
+
+ // reflective access to SecurityManager.getRealms()
+ val realms = (Collection<Realm>) ReflectionUtils
+ .findMethod(securityManager.getClass(), "getRealms")
+ .invoke(securityManager, _Constants.emptyObjects);
+
+ realms.stream().forEach(serviceInjector::injectServicesInto);
+ }
+
+ }
// --
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java
index e47b7d1..f5d6190 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/IsisRestfulObjectsSessionFilter.java
@@ -42,8 +42,8 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.factory.InstanceUtil;
+import org.apache.isis.config.SystemConstants;
import org.apache.isis.metamodel.commons.StringExtensions;
-import org.apache.isis.runtime.system.SystemConstants;
import org.apache.isis.runtime.system.context.IsisContext;
import org.apache.isis.runtime.system.session.IsisSessionFactory;
import org.apache.isis.webapp.IsisWebAppUtils;
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java
index b2e5e38..a71afeb 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
import org.apache.isis.applib.layout.links.Link;
import org.apache.isis.applib.layout.menubars.MenuBars;
import org.apache.isis.applib.services.menu.MenuBarsService;
-import org.apache.isis.runtime.system.SystemConstants;
+import org.apache.isis.config.SystemConstants;
import org.apache.isis.viewer.restfulobjects.applib.Rel;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
index b92e194..3b18256 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserResourceServerside.java
@@ -26,7 +26,7 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.runtime.system.SystemConstants;
+import org.apache.isis.config.SystemConstants;
import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
import org.apache.isis.viewer.restfulobjects.applib.RestfulMediaType;
diff --git a/core/viewer-wicket/ui/pom.xml b/core/viewer-wicket/ui/pom.xml
index 29363a0..cca5ed4 100644
--- a/core/viewer-wicket/ui/pom.xml
+++ b/core/viewer-wicket/ui/pom.xml
@@ -149,10 +149,10 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
- <exclusion>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </exclusion>
+<!-- <exclusion> -->
+<!-- <groupId>com.google.guava</groupId> -->
+<!-- <artifactId>guava</artifactId> -->
+<!-- </exclusion> -->
</exclusions>
</dependency>
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
index 798c79a..7b951f4 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
@@ -37,8 +37,8 @@ import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBar;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.config.SystemConstants;
import org.apache.isis.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.runtime.system.SystemConstants;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.model.models.ServiceActionsModel;
import org.apache.isis.viewer.wicket.ui.components.actionmenu.CssClassFaBehavior;
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelUtil.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelUtil.java
index 55de900..3b38017 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelUtil.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelUtil.java
@@ -29,7 +29,7 @@ import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.runtime.system.SystemConstants;
+import org.apache.isis.config.SystemConstants;
import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/AbstractShiroTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/AbstractShiroTest.java
index d5ec603..16ac96b 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/AbstractShiroTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/AbstractShiroTest.java
@@ -18,24 +18,20 @@
*/
package org.apache.isis.testdomain.shiro;
-import java.util.Collection;
-
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.UnavailableSecurityManagerException;
import org.apache.shiro.config.Ini;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.realm.Realm;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.subject.support.SubjectThreadState;
import org.apache.shiro.util.LifecycleUtils;
import org.apache.shiro.util.ThreadContext;
import org.apache.shiro.util.ThreadState;
-import org.springframework.util.ReflectionUtils;
import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.assertions._Assert;
+import org.apache.isis.security.shiro.WebModuleShiro.EnvironmentLoaderListenerForIsis;
import lombok.SneakyThrows;
import lombok.val;
@@ -103,18 +99,15 @@ class AbstractShiroTest {
val factory = new IniSecurityManagerFactory(ini);
val securityManager = factory.getInstance();
- // reflective access to SecurityManager.getRealms()
- Collection<Realm> realms = (Collection<Realm>) ReflectionUtils
- .findMethod(securityManager.getClass(), "getRealms")
- .invoke(securityManager, _Constants.emptyClasses);
-
- ini.getSections().forEach(section->{
- section.entrySet().forEach(es->{
- System.out.println("" + es.getKey() + "=" +es.getValue());
- });
- });
+ EnvironmentLoaderListenerForIsis.injectServicesIntoReamls(serviceInjector, securityManager);
- realms.stream().forEach(serviceInjector::injectServicesInto);
+//debug
+// ini.getSections().forEach(section->{
+// section.entrySet().forEach(es->{
+// System.out.println("" + es.getKey() + "=" +es.getValue());
+// });
+// });
+
setSecurityManager(securityManager);
}
diff --git a/extensions/legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/extensions/legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
index 49b84c7..2fd02d0 100644
--- a/extensions/legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ b/extensions/legacy/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
@@ -44,7 +44,6 @@ import org.apache.isis.applib.services.title.TitleService;
import org.apache.isis.applib.services.user.UserService;
import org.apache.isis.applib.services.xactn.TransactionService;
import org.apache.isis.config.IsisConfigurationLegacy;
-import org.apache.isis.runtime.system.context.IsisContext;
import static org.apache.isis.commons.internal.collections._Lists.lastElementIfAny;
@@ -420,7 +419,7 @@ public class DomainObjectContainer {
@Deprecated
@Programmatic
public String getProperty(String name) {
- return IsisContext.getConfigurationLegacy().getString(name);
+ return serviceRegistry.lookupServiceElseFail(IsisConfigurationLegacy.class).getString(name);
}
/**
@@ -429,7 +428,7 @@ public class DomainObjectContainer {
@Deprecated
@Programmatic
public String getProperty(String name, String defaultValue) {
- return IsisContext.getConfigurationLegacy().getString(name, defaultValue);
+ return serviceRegistry.lookupServiceElseFail(IsisConfigurationLegacy.class).getString(name, defaultValue);
}
/**
@@ -438,7 +437,7 @@ public class DomainObjectContainer {
@Deprecated
@Programmatic
public List<String> getPropertyNames() {
- return new ArrayList<>(IsisContext.getConfigurationLegacy().copyToMap().keySet());
+ return new ArrayList<>(serviceRegistry.lookupServiceElseFail(IsisConfigurationLegacy.class).copyToMap().keySet());
}
/**
diff --git a/extensions/viewer-wicket-excel/pom.xml b/extensions/viewer-wicket-excel/pom.xml
index 9817cea..fdd9069 100644
--- a/extensions/viewer-wicket-excel/pom.xml
+++ b/extensions/viewer-wicket-excel/pom.xml
@@ -42,12 +42,25 @@
<groupId>org.apache.isis.core</groupId>
<artifactId>isis-viewer-wicket-ui</artifactId>
<scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-collections4</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
- </dependency>
+ <exclusions>
+ <exclusion>
+ <!-- version clash with org.apache.wicket:wicket-util:8.6.1 -->
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-collections4</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<dependency>
<groupId>org.apache.poi</groupId>