You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2014/10/07 09:40:15 UTC
[2/5] git commit: ISIS-918: first pass at removing
DomainObjectContainer. The app seemingly runs up fine,
but still need to look at tests.
ISIS-918: first pass at removing DomainObjectContainer. The app seemingly runs up fine, but still need to look at tests.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/98635d37
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/98635d37
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/98635d37
Branch: refs/heads/master
Commit: 98635d378e1dbf13dc73d70ac7ef11d7bd0025de
Parents: 1a104fc
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Oct 6 21:24:15 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Oct 6 21:24:15 2014 +0100
----------------------------------------------------------------------
.../isis/applib/DomainObjectContainer.java | 45 ++++++++++-
.../integtestsupport/IsisSystemForTest.java | 12 +--
.../IsisSystemWithFixtures.java | 49 +++++------
.../isis/core/metamodel/app/IsisMetaModel.java | 65 +++------------
.../runtimecontext/RuntimeContext.java | 36 +++------
.../runtimecontext/RuntimeContextAbstract.java | 30 +------
.../runtimecontext/ServicesInjector.java | 3 -
.../services/ServicesInjectorDefault.java | 34 +-------
.../metamodel/services/ServicesInjectorSpi.java | 27 -------
.../container/DomainObjectContainerAware.java | 28 -------
.../container/DomainObjectContainerDefault.java | 85 +++++++++++++++-----
.../metamodel/spec/SpecificationLoaderSpi.java | 10 +--
.../specloader/ObjectReflectorDefault.java | 9 ---
...sMetaModelTest_getDomainObjectContainer.java | 12 ---
.../metamodel/app/IsisMetaModelTest_init.java | 7 --
.../metamodel/facets/ProgrammableReflector.java | 5 --
.../services/ServicesInjectorDefaultTest.java | 3 +-
...ServicesInjectorDefaultTest_usingFields.java | 17 +---
.../ObjectReflectorDefaultTestAbstract.java | 3 +-
.../persistence/PersistenceConstants.java | 10 ---
.../PersistenceSessionFactoryDelegating.java | 23 +-----
.../ServicesInstallerFromAnnotation.java | 7 +-
.../system/IsisSystemFixturesHookAbstract.java | 26 +-----
.../persistence/PersistenceSessionFactory.java | 5 +-
.../system/session/IsisSessionFactory.java | 1 -
.../session/IsisSessionFactoryDefault.java | 8 --
.../IsisSystemAbstract.java | 7 +-
.../core/runtime/context/IsisContextTest.java | 2 +-
.../PersistenceSessionObjectStoreTest.java | 26 ++----
...onFactoryAbstractTest_init_and_shutdown.java | 2 +-
30 files changed, 193 insertions(+), 404 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
index 8972a66..bcd7620 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
@@ -24,6 +24,7 @@ import java.util.List;
import com.google.common.base.Predicate;
import org.apache.isis.applib.annotation.Aggregated;
+import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.security.UserMemento;
@@ -43,6 +44,7 @@ public interface DomainObjectContainer {
* Return the title of the object, as rendered in the UI by the
* Isis viewers.
*/
+ @Programmatic
String titleOf(Object domainObject);
// ////////////////////////////////////////////////////////////////
@@ -62,6 +64,7 @@ public interface DomainObjectContainer {
*
* @deprecated
*/
+ @Programmatic
@Deprecated
void resolve(Object domainObject);
@@ -79,6 +82,7 @@ public interface DomainObjectContainer {
*
* @deprecated
*/
+ @Programmatic
@Deprecated
void resolve(Object domainObject, Object field);
@@ -92,6 +96,7 @@ public interface DomainObjectContainer {
*
* @deprecated
*/
+ @Programmatic
@Deprecated
void objectChanged(Object domainObject);
@@ -108,6 +113,7 @@ public interface DomainObjectContainer {
*
* @return - is never used, always returns <tt>false</tt>.
*/
+ @Programmatic
boolean flush();
/**
@@ -120,6 +126,7 @@ public interface DomainObjectContainer {
*
* @deprecated
*/
+ @Programmatic
@Deprecated
void commit();
@@ -160,6 +167,7 @@ public interface DomainObjectContainer {
* @see #newPersistentInstance(Class)
* @see #newAggregatedInstance(Object, Class)
*/
+ @Programmatic
<T> T newTransientInstance(final Class<T> ofType);
@@ -173,6 +181,7 @@ public interface DomainObjectContainer {
* If services need injecting into it, use {@link #injectServicesInto(Object)}.
* </p>
*/
+ @Programmatic
<T extends ViewModel> T newViewModelInstance(final Class<T> ofType, final String memento);
/**
@@ -183,6 +192,7 @@ public interface DomainObjectContainer {
* <b>Note:</b> not every objectstore implementation supports the concept
* of aggregated instances.
*/
+ @Programmatic
<T> T newAggregatedInstance(Object parent, Class<T> ofType);
/**
@@ -199,6 +209,7 @@ public interface DomainObjectContainer {
*
* @deprecated
*/
+ @Programmatic
@Deprecated
<T> T newPersistentInstance(final Class<T> ofType);
@@ -212,6 +223,7 @@ public interface DomainObjectContainer {
*
* @deprecated
*/
+ @Programmatic
@Deprecated
<T> T newInstance(final Class<T> ofType, final Object object);
@@ -219,6 +231,7 @@ public interface DomainObjectContainer {
// injectServicesInto
// ////////////////////////////////////////////////////////////////
+ @Programmatic
<T> T injectServicesInto(final T domainObject);
// ////////////////////////////////////////////////////////////////
@@ -231,6 +244,7 @@ public interface DomainObjectContainer {
*
* @see #validate(Object)
*/
+ @Programmatic
boolean isValid(Object domainObject);
/**
@@ -242,6 +256,7 @@ public interface DomainObjectContainer {
*
* @see #isValid(Object)
*/
+ @Programmatic
String validate(Object domainObject);
// ////////////////////////////////////////////////////////////////
@@ -252,6 +267,7 @@ public interface DomainObjectContainer {
* Determines if the specified object is persistent (that it is stored
* permanently outside of the virtual machine).
*/
+ @Programmatic
boolean isPersistent(Object domainObject);
/**
@@ -271,6 +287,7 @@ public interface DomainObjectContainer {
* @see #isPersistent(Object)
* @see #persistIfNotAlready(Object)
*/
+ @Programmatic
void persist(Object domainObject);
/**
@@ -286,6 +303,7 @@ public interface DomainObjectContainer {
* @see #isPersistent(Object)
* @see #persist(Object)
*/
+ @Programmatic
void persistIfNotAlready(Object domainObject);
/**
@@ -293,6 +311,7 @@ public interface DomainObjectContainer {
*
* @param persistentDomainObject
*/
+ @Programmatic
void remove(Object persistentDomainObject);
/**
@@ -300,6 +319,7 @@ public interface DomainObjectContainer {
*
* @param domainObject
*/
+ @Programmatic
void removeIfNotAlready(Object domainObject);
// ////////////////////////////////////////////////////////////////
@@ -314,6 +334,7 @@ public interface DomainObjectContainer {
* @see #warnUser(String)
* @see #raiseError(String)
*/
+ @Programmatic
void informUser(String message);
/**
@@ -324,6 +345,7 @@ public interface DomainObjectContainer {
* @see #raiseError(String)
* @see #informUser(String)
*/
+ @Programmatic
void warnUser(String message);
/**
@@ -335,6 +357,7 @@ public interface DomainObjectContainer {
* @see #warnUser(String)
* @see #informUser(String)
*/
+ @Programmatic
void raiseError(String message);
// ////////////////////////////////////////////////////////////////
@@ -344,17 +367,20 @@ public interface DomainObjectContainer {
/**
* Get the configuration property with the specified name.
*/
+ @Programmatic
String getProperty(String name);
/**
* Get the configuration property with the specified name and if it doesn't
* exist then return the specified default value.
*/
+ @Programmatic
String getProperty(String name, String defaultValue);
/**
* Get the names of all the available properties.
*/
+ @Programmatic
List<String> getPropertyNames();
// ////////////////////////////////////////////////////////////////
@@ -364,6 +390,7 @@ public interface DomainObjectContainer {
/**
* Get the details about the current user.
*/
+ @Programmatic
UserMemento getUser();
// ////////////////////////////////////////////////////////////////
@@ -387,6 +414,7 @@ public interface DomainObjectContainer {
*
* @param range 2 longs, specifying 0-based start and count.
*/
+ @Programmatic
public <T> List<T> allInstances(Class<T> ofType, long... range);
/**
@@ -407,6 +435,7 @@ public interface DomainObjectContainer {
*
* @param range 2 longs, specifying 0-based start and count.
*/
+ @Programmatic
public <T> List<T> allMatches(final Class<T> ofType, final Predicate<? super T> predicate, long... range);
/**
@@ -429,6 +458,7 @@ public interface DomainObjectContainer {
*
* @deprecated - use {@link #allMatches(Class, Predicate, long...)} instead.
*/
+ @Programmatic
@Deprecated
public <T> List<T> allMatches(final Class<T> ofType, final Filter<? super T> filter, long... range);
@@ -450,6 +480,7 @@ public interface DomainObjectContainer {
*
* @param range 2 longs, specifying 0-based start and count.
*/
+ @Programmatic
public <T> List<T> allMatches(Class<T> ofType, String title, long... range);
/**
@@ -471,6 +502,7 @@ public interface DomainObjectContainer {
*
* @param range 2 longs, specifying 0-based start and count.
*/
+ @Programmatic
<T> List<T> allMatches(Class<T> ofType, T pattern, long... range);
/**
@@ -482,6 +514,7 @@ public interface DomainObjectContainer {
* use or modify the returned {@link List}, but the changes will not be
* reflected back to the repository.
*/
+ @Programmatic
<T> List<T> allMatches(Query<T> query);
// //////////////////////////////////////
@@ -494,6 +527,7 @@ public interface DomainObjectContainer {
* This method is useful during exploration/prototyping, but you may want to
* use {@link #firstMatch(Query)} for production code.
*/
+ @Programmatic
public <T> T firstMatch(final Class<T> ofType, final Predicate<T> predicate);
/**
@@ -506,6 +540,7 @@ public interface DomainObjectContainer {
*
* @deprecated - use {@link #firstMatch(Class, Predicate)}
*/
+ @Programmatic
@Deprecated
public <T> T firstMatch(final Class<T> ofType, final Filter<T> filter);
@@ -517,6 +552,7 @@ public interface DomainObjectContainer {
* This method is useful during exploration/prototyping, but you may want to
* use {@link #firstMatch(Query)} for production code.
*/
+ @Programmatic
<T> T firstMatch(Class<T> ofType, String title);
/**
@@ -527,12 +563,14 @@ public interface DomainObjectContainer {
* This method is useful during exploration/prototyping, but you may want to
* use {@link #firstMatch(Query)} for production code.
*/
+ @Programmatic
<T> T firstMatch(Class<T> ofType, T pattern);
/**
* Returns the first instance that matches the supplied query, or
* <tt>null</tt> if none.
*/
+ @Programmatic
<T> T firstMatch(Query<T> query);
// //////////////////////////////////////
@@ -549,6 +587,7 @@ public interface DomainObjectContainer {
* This method is useful during exploration/prototyping, but you may want to
* use {@link #uniqueMatch(Query)} for production code.
*/
+ @Programmatic
public <T> T uniqueMatch(final Class<T> ofType, final Predicate<T> predicate);
/**
@@ -565,6 +604,7 @@ public interface DomainObjectContainer {
*
* @deprecated - use {@link #uniqueMatch(Class, Predicate)}
*/
+ @Programmatic
@Deprecated
public <T> T uniqueMatch(final Class<T> ofType, final Filter<T> filter);
@@ -580,6 +620,7 @@ public interface DomainObjectContainer {
* This method is useful during exploration/prototyping, but you may want to
* use {@link #uniqueMatch(Query)} for production code.
*/
+ @Programmatic
<T> T uniqueMatch(Class<T> ofType, String title);
/**
@@ -596,15 +637,17 @@ public interface DomainObjectContainer {
* This method is useful during exploration/prototyping, but you may want to
* use {@link #uniqueMatch(Query)} for production code.
*/
+ @Programmatic
<T> T uniqueMatch(Class<T> ofType, T pattern);
/**
* Find the only instance that matches the provided query.
- *
+ *
* <p>
* If no instance is found then null will be return, while if there is more
* that one instances a run-time exception will be thrown.
*/
+ @Programmatic
<T> T uniqueMatch(Query<T> query);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 08cae1e..a8b22ff 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -363,9 +363,14 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
return this == FIRE;
}
}
-
+
public DomainObjectContainer getContainer() {
- return getPersistenceSession().getServicesInjector().getContainer();
+ for (Object service : services) {
+ if(service instanceof DomainObjectContainer) {
+ return (DomainObjectContainer) service;
+ }
+ }
+ throw new IllegalStateException("Could not locate DomainObjectContainer");
}
/**
@@ -505,9 +510,6 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
/**
* The {@link AuthenticationSession} created during {@link #setUpSystem()}.
- *
- * <p>
- * Can fine-tune before hand using {@link #createAuthenticationRequest()}.
*/
public AuthenticationSession getAuthenticationSession() {
return authenticationSession;
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java
----------------------------------------------------------------------
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java
index 0a84fa3..debe4ce 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemWithFixtures.java
@@ -21,19 +21,12 @@ package org.apache.isis.core.integtestsupport;
import java.util.Arrays;
import java.util.List;
-
import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
-
import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -57,11 +50,7 @@ import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
import org.apache.isis.core.runtime.system.transaction.IsisTransaction.State;
import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
import org.apache.isis.core.security.authentication.AuthenticationRequestNameOnly;
-import org.apache.isis.core.tck.dom.refs.AggregatedEntity;
-import org.apache.isis.core.tck.dom.refs.ParentEntity;
-import org.apache.isis.core.tck.dom.refs.ParentEntityRepository;
-import org.apache.isis.core.tck.dom.refs.ReferencingEntity;
-import org.apache.isis.core.tck.dom.refs.SimpleEntity;
+import org.apache.isis.core.tck.dom.refs.*;
import org.apache.isis.core.tck.dom.scalars.ApplibValuedEntity;
import org.apache.isis.core.tck.dom.scalars.JdkValuedEntity;
import org.apache.isis.core.tck.dom.scalars.PrimitiveValuedEntity;
@@ -75,6 +64,7 @@ import org.apache.isis.core.tck.dom.scalars.WrapperValuedEntity;
*/
public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
+
public interface Listener {
void init(IsisConfiguration configuration) throws Exception;
@@ -228,6 +218,7 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
private Object[] services;
+
public Builder with(IsisConfiguration configuration) {
this.configuration = configuration;
return this;
@@ -312,11 +303,11 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
boolean firstTime = isisSystem == null;
- if(fireListeners.shouldFire()) {
+ if (fireListeners.shouldFire()) {
fireInitAndPreSetupSystem(firstTime);
}
-
- if(firstTime) {
+
+ if (firstTime) {
isisSystem = createIsisSystem(services);
isisSystem.init();
IsisContext.closeSession();
@@ -326,16 +317,27 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
authenticationSession = authenticationManager.authenticate(authenticationRequest);
IsisContext.openSession(authenticationSession);
-
- container = getContainer();
- if(firstTime && fixturesInitialization == Fixtures.Initialization.INIT) {
+
+ DomainObjectContainer container = lookupContainer();
+ if (firstTime && fixturesInitialization == Fixtures.Initialization.INIT) {
fixtures.init(container);
}
- if(fireListeners.shouldFire()) {
+ if (fireListeners.shouldFire()) {
firePostSetupSystem(firstTime);
}
+
}
+ private DomainObjectContainer lookupContainer() {
+ for (Object service : services) {
+ if(service instanceof DomainObjectContainer) {
+ return (DomainObjectContainer) service;
+ }
+ }
+ throw new IllegalStateException("Could not locate DomainObjectContainer");
+ }
+
+
private enum FireListeners {
FIRE,
DONT_FIRE;
@@ -344,9 +346,6 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
}
}
- private DomainObjectContainer getContainer() {
- return getPersistenceSession().getServicesInjector().getContainer();
- }
/**
* Intended to be called from a test's {@link After} method.
@@ -463,9 +462,6 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
/**
* The {@link IsisSystemDefault} created during {@link #setUpSystem()}.
- *
- * <p>
- * Can fine-tune the actual implementation using the hook {@link #createIsisSystem()}.
*/
public IsisSystemDefault getIsisSystem() {
return isisSystem;
@@ -473,9 +469,6 @@ public class IsisSystemWithFixtures implements org.junit.rules.TestRule {
/**
* The {@link AuthenticationSession} created during {@link #setUpSystem()}.
- *
- * <p>
- * Can fine-tune before hand using {@link #createAuthenticationRequest()}.
*/
public AuthenticationSession getAuthenticationSession() {
return authenticationSession;
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
index 8e86637..7ab73bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/app/IsisMetaModel.java
@@ -19,28 +19,16 @@
package org.apache.isis.core.metamodel.app;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
+import java.util.*;
import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
+import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -53,7 +41,11 @@ import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverse
import org.apache.isis.core.metamodel.specloader.traverser.SpecificationTraverserDefault;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
-import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
+
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
/**
* Facade for the entire Isis metamodel and supporting components.
@@ -83,15 +75,12 @@ public class IsisMetaModel implements ApplicationScopedComponent {
private Set<FacetDecorator> facetDecorators;
private MetaModelValidator metaModelValidator;
- private DomainObjectContainer container;
-
private ValidationFailures validationFailures;
public static class Builder {
private final RuntimeContext runtimeContext;
private final ProgrammingModel programmingModel;
- private DomainObjectContainer container = new DomainObjectContainerDefault();
private List<Object> services = Lists.newArrayList();
private Builder(RuntimeContext embeddedContext, ProgrammingModel programmingModel) {
@@ -99,11 +88,6 @@ public class IsisMetaModel implements ApplicationScopedComponent {
this.programmingModel = programmingModel;
}
- public Builder with(DomainObjectContainer container) {
- this.container = container;
- return this;
- }
-
public Builder withServices(Object... services) {
return withServices(Arrays.asList(services));
}
@@ -114,11 +98,7 @@ public class IsisMetaModel implements ApplicationScopedComponent {
}
public IsisMetaModel build() {
- final IsisMetaModel isisMetaModel = new IsisMetaModel(runtimeContext, programmingModel, services);
- if(container != null) {
- isisMetaModel.setContainer(container);
- }
- return isisMetaModel;
+ return new IsisMetaModel(runtimeContext, programmingModel, services);
}
}
@@ -133,8 +113,9 @@ public class IsisMetaModel implements ApplicationScopedComponent {
public IsisMetaModel(final RuntimeContext runtimeContext, ProgrammingModel programmingModel, final Object... services) {
this.runtimeContext = runtimeContext;
- setContainer(new DomainObjectContainerDefault());
+ this.services.add(new DomainObjectContainerDefault());
this.services.addAll(Arrays.asList(services));
+
setConfiguration(new IsisConfigurationDefault());
setClassSubstitutor(new ClassSubstitutorAbstract() {});
setCollectionTypeRegistry(new CollectionTypeRegistryDefault());
@@ -145,18 +126,8 @@ public class IsisMetaModel implements ApplicationScopedComponent {
setMetaModelValidator(new MetaModelValidatorDefault());
}
- private void setContainer(final DomainObjectContainer container) {
- this.container = container;
- }
-
/**
- * The list of classes representing services, as specified in the
- * {@link #IsisMetaModel(EmbeddedContext, Class...) constructor}.
- *
- * <p>
- * To obtain the instantiated services, use the
- * {@link ServicesInjectorSpi#getRegisteredServices()} (available from
- * {@link #getServicesInjector()}).
+ * The list of classes representing services.
*/
public List<Object> getServices() {
return Collections.unmodifiableList(services);
@@ -171,11 +142,8 @@ public class IsisMetaModel implements ApplicationScopedComponent {
ensureNotInitialized();
reflector = new ObjectReflectorDefault(configuration, classSubstitutor, collectionTypeRegistry, specificationTraverser, programmingModel, facetDecorators, metaModelValidator);
- reflector.setContainer(container);
reflector.setServices(services);
- runtimeContext.injectInto(container);
- runtimeContext.setContainer(container);
runtimeContext.injectInto(reflector);
reflector.injectInto(runtimeContext);
@@ -211,17 +179,6 @@ public class IsisMetaModel implements ApplicationScopedComponent {
return reflector;
}
- // ///////////////////////////////////////////////////////
- // DomainObjectContainer
- // ///////////////////////////////////////////////////////
-
- /**
- * Available once {@link #init() initialized}.
- */
- public DomainObjectContainer getDomainObjectContainer() {
- ensureInitialized();
- return container;
- }
// ///////////////////////////////////////////////////////
// DependencyInjector
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
index e5fbc52..696812b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
@@ -78,11 +78,9 @@ public interface RuntimeContext extends Injectable, ApplicationScopedComponent {
// ///////////////////////////////////////////
- // container
+ // transaction state
// ///////////////////////////////////////////
- public void setContainer(DomainObjectContainer container);
-
public TransactionState getTransactionState();
public static enum TransactionState {
@@ -95,19 +93,15 @@ public interface RuntimeContext extends Injectable, ApplicationScopedComponent {
* Started, still in progress.
*
* <p>
- * May {@link IsisTransaction#flush() flush},
- * {@link IsisTransaction#commit() commit} or
- * {@link IsisTransaction#abort() abort}.
+ * May flush, commit or abort.
*/
IN_PROGRESS,
/**
* Started, but has hit an exception.
*
* <p>
- * May not {@link IsisTransaction#flush()} or
- * {@link IsisTransaction#commit() commit} (will throw an
- * {@link IllegalStateException}), but can only
- * {@link IsisTransaction#abort() abort}.
+ * May not flush or commit (will throw an {@link IllegalStateException}),
+ * can only abort.
*
* <p>
* Similar to <tt>setRollbackOnly</tt> in EJBs.
@@ -117,52 +111,42 @@ public interface RuntimeContext extends Injectable, ApplicationScopedComponent {
* Completed, having successfully committed.
*
* <p>
- * May not {@link IsisTransaction#flush()} or
- * {@link IsisTransaction#abort() abort} or
- * {@link IsisTransaction#commit() commit} (will throw
- * {@link IllegalStateException}).
+ * May not flush or abort or commit (will throw {@link IllegalStateException}).
*/
COMMITTED,
/**
* Completed, having aborted.
*
* <p>
- * May not {@link IsisTransaction#flush()},
- * {@link IsisTransaction#commit() commit} or
- * {@link IsisTransaction#abort() abort} (will throw
- * {@link IllegalStateException}).
+ * May not flush, commit or abort (will throw {@link IllegalStateException}).
*/
ABORTED;
private TransactionState(){}
/**
- * Whether it is valid to {@link IsisTransaction#flush() flush} this
- * {@link IsisTransaction transaction}.
+ * Whether it is valid to flush the transaction.
*/
public boolean canFlush() {
return this == IN_PROGRESS;
}
/**
- * Whether it is valid to {@link IsisTransaction#commit() commit} this
- * {@link IsisTransaction transaction}.
+ * Whether it is valid to commit the transaction.
*/
public boolean canCommit() {
return this == IN_PROGRESS;
}
/**
- * Whether it is valid to {@link IsisTransaction#markAsAborted() abort} this
- * {@link IsisTransaction transaction}.
+ * Whether it is valid to mark as aborted this transaction}.
*/
public boolean canAbort() {
return this == IN_PROGRESS || this == MUST_ABORT;
}
/**
- * Whether the {@link IsisTransaction transaction} is complete (and so a
- * new one can be started).
+ * Whether the transaction is complete (and so a new one can be started).
*/
public boolean isComplete() {
return this == COMMITTED || this == ABORTED;
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
index 6f41fe3..1e0243a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContextAbstract.java
@@ -22,23 +22,13 @@ package org.apache.isis.core.metamodel.runtimecontext;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
-
import com.google.common.collect.Lists;
+import org.apache.isis.core.metamodel.spec.*;
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.core.metamodel.services.container.DomainObjectContainerAware;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderDelegator;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpiAware;
-
-public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware, DomainObjectContainerAware {
+public abstract class RuntimeContextAbstract implements RuntimeContext, SpecificationLoaderSpiAware {
private final SpecificationLoaderDelegator specificationLookupDelegator = new SpecificationLoaderDelegator();
- private DomainObjectContainer container;
private Properties properties;
@@ -80,8 +70,7 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
}
/**
- * Is injected into when the reflector is
- * {@link ObjectReflectorAbstract#init() initialized}.
+ * Is injected into when the reflector is reflector isinitialized.
*/
@Override
public void setSpecificationLoaderSpi(final SpecificationLoaderSpi specificationLoader) {
@@ -149,19 +138,6 @@ public abstract class RuntimeContextAbstract implements RuntimeContext, Specific
});
}
- protected DomainObjectContainer getContainer() {
- return container;
- }
-
- /**
- * So that {@link #injectServicesInto(Object)} can also inject the
- * {@link DomainObjectContainer}.
- */
- @Override
- public void setContainer(final DomainObjectContainer container) {
- this.container = container;
- }
-
public void setProperties(final Properties properties) {
this.properties = properties;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
index 9af283f..d1bcf08 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/ServicesInjector.java
@@ -26,9 +26,6 @@ public interface ServicesInjector extends Injectable {
/**
* All registered services, as an immutable {@link List}.
- *
- * <p>
- * Does not include the {@link #getContainer() container}.
*/
List<Object> getRegisteredServices();
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
index f1f1a38..2687e1b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefault.java
@@ -33,16 +33,12 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.lang.ObjectExtensions;
import org.apache.isis.core.commons.util.ToString;
import org.apache.isis.core.metamodel.exceptions.MetaModelException;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
-import static org.hamcrest.CoreMatchers.*;
-
/**
* Must be a thread-safe.
*/
@@ -56,7 +52,6 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi {
*/
private final Map<Class<?>, List<Object>> servicesByType = Maps.newHashMap();
- private DomainObjectContainer container;
private final List<Object> services = Lists.newArrayList();
@@ -75,22 +70,6 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi {
}
// /////////////////////////////////////////////////////////
- // Container
- // /////////////////////////////////////////////////////////
-
- @Override
- public DomainObjectContainer getContainer() {
- return container;
- }
-
- @Override
- public void setContainer(final DomainObjectContainer container) {
- ensureThatArg(container, is(not(nullValue())));
- this.container = container;
- autowireServicesAndContainer();
- }
-
- // /////////////////////////////////////////////////////////
// Services
// /////////////////////////////////////////////////////////
@@ -142,12 +121,9 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi {
@Override
public void injectServicesInto(final Object object) {
- Assert.assertNotNull("no container", container);
Assert.assertNotNull("no services", services);
- final List<Object> servicesCopy = Lists.newArrayList(services);
- servicesCopy.add(container);
- injectServices(object, servicesCopy);
+ injectServices(object, Collections.unmodifiableList(services));
}
@Override
@@ -303,7 +279,6 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi {
private void autowireServicesAndContainer() {
injectServicesInto(this.services);
- injectServicesInto(this.container);
}
@Override
@@ -326,13 +301,8 @@ public class ServicesInjectorDefault implements ServicesInjectorSpi {
List<Object> matchingServices = Lists.newArrayList();
addAssignableTo(serviceClass, services, matchingServices);
- addAssignableTo(serviceClass, singletonListFor(container), matchingServices);
-
- servicesByType.put(serviceClass, matchingServices);
- }
- private static List<Object> singletonListFor(Object obj) {
- return obj!=null? Collections.singletonList(obj): Collections.emptyList();
+ servicesByType.put(serviceClass, matchingServices);
}
private static void addAssignableTo(Class<?> type, List<Object> candidates, List<Object> filteredServicesAndContainer) {
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
index decae96..4a9d444 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorSpi.java
@@ -30,40 +30,13 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
* The repository of services, also able to inject into any object.
*
* <p>
- * The {@link #getContainer() domain object container} is always injected but is
- * not a {@link #getRegisteredServices() registered service}.
- *
- * <p>
* Can be considered a mutable SPI to the {@link ServicesInjector} immutable API.
*/
public interface ServicesInjectorSpi extends ApplicationScopedComponent, Injectable, ServicesInjector {
- // ///////////////////////////////////////////////////////////////////////////
- // Container
- // ///////////////////////////////////////////////////////////////////////////
-
- DomainObjectContainer getContainer();
-
- /**
- * Container to inject.
- *
- * <p>
- * This itself is injected.
- */
- public void setContainer(final DomainObjectContainer container);
-
- // ///////////////////////////////////////////////////////////////////////////
- // Services
- // ///////////////////////////////////////////////////////////////////////////
/**
* Services to be injected.
- *
- * <p>
- * Should automatically inject all services into each other (though calling
- * {@link #open()} will also do this).
- *
- * @param services
*/
void setServices(List<Object> services);
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerAware.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerAware.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerAware.java
deleted file mode 100644
index 58076d7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerAware.java
+++ /dev/null
@@ -1,28 +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.core.metamodel.services.container;
-
-import org.apache.isis.applib.DomainObjectContainer;
-
-public interface DomainObjectContainerAware {
-
- void setContainer(DomainObjectContainer container);
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
index e6c4f7c..cb5301a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/container/DomainObjectContainerDefault.java
@@ -26,6 +26,8 @@ import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import com.google.common.base.Predicate;
import org.apache.isis.applib.*;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.applib.filter.Filters;
import org.apache.isis.applib.query.Query;
@@ -53,6 +55,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
+@DomainService
public class DomainObjectContainerDefault implements DomainObjectContainer, QuerySubmitterAware, ObjectDirtierAware, DomainObjectServicesAware, ObjectPersistorAware, SpecificationLoaderAware, AuthenticationSessionProviderAware, AdapterManagerAware, LocalizationProviderAware, ExceptionRecognizer {
private ObjectDirtier objectDirtier;
@@ -71,6 +74,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// titleOf
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public String titleOf(final Object domainObject) {
final ObjectAdapter objectAdapter = adapterManager.adapterFor(domainObject);
@@ -86,6 +90,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// newInstance, disposeInstance
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
@SuppressWarnings("unchecked")
public <T> T newTransientInstance(final Class<T> ofClass) {
@@ -98,6 +103,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
}
}
+ @Programmatic
@SuppressWarnings("unchecked")
@Override
public <T extends ViewModel> T newViewModelInstance(Class<T> ofClass, String memento) {
@@ -113,6 +119,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
}
}
+ @Programmatic
@Override
@SuppressWarnings("unchecked")
public <T> T newAggregatedInstance(final Object parent, final Class<T> ofClass) {
@@ -132,6 +139,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
* Returns a new instance of the specified class that will have been
* persisted.
*/
+ @Programmatic
@Override
public <T> T newPersistentInstance(final Class<T> ofClass) {
final T newInstance = newTransientInstance(ofClass);
@@ -143,6 +151,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
* Returns a new instance of the specified class that has the same persisted
* state as the specified object.
*/
+ @Programmatic
@Override
public <T> T newInstance(final Class<T> ofClass, final Object object) {
if (isPersistent(object)) {
@@ -168,6 +177,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return getDomainObjectServices().createAggregatedInstance(spec, parentAdapter);
}
+ @Programmatic
@Override
public void remove(final Object persistentObject) {
if (persistentObject == null) {
@@ -181,6 +191,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
getObjectPersistor().remove(adapter);
}
+ @Programmatic
@Override
public void removeIfNotAlready(final Object object) {
if (!isPersistent(object)) {
@@ -194,6 +205,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// injectServicesInto
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public <T> T injectServicesInto(T domainObject) {
getDomainObjectServices().injectServicesInto(domainObject);
@@ -204,16 +216,19 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// resolve, objectChanged
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public void resolve(final Object parent) {
getDomainObjectServices().resolve(parent);
}
+ @Programmatic
@Override
public void resolve(final Object parent, final Object field) {
getDomainObjectServices().resolve(parent, field);
}
+ @Programmatic
@Override
public void objectChanged(final Object object) {
getObjectDirtier().objectChanged(object);
@@ -223,11 +238,13 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// flush, commit
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public boolean flush() {
return getDomainObjectServices().flush();
}
+ @Programmatic
@Override
public void commit() {
getDomainObjectServices().commit();
@@ -237,11 +254,13 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// isValid, validate
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public boolean isValid(final Object domainObject) {
return validate(domainObject) == null;
}
+ @Programmatic
@Override
public String validate(final Object domainObject) {
final ObjectAdapter adapter = getAdapterManager().adapterFor(domainObject);
@@ -253,6 +272,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// persistence
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public boolean isPersistent(final Object domainObject) {
final ObjectAdapter adapter = getAdapterManager().adapterFor(domainObject);
@@ -262,6 +282,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
/**
* {@inheritDoc}
*/
+ @Programmatic
@Override
public void persist(final Object domainObject) {
final ObjectAdapter adapter = getAdapterManager().adapterFor(domainObject);
@@ -282,6 +303,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
/**
* {@inheritDoc}
*/
+ @Programmatic
@Override
public void persistIfNotAlready(final Object object) {
if (isPersistent(object)) {
@@ -294,6 +316,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// security
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public UserMemento getUser() {
final AuthenticationSession session = getAuthenticationSessionProvider().getAuthenticationSession();
@@ -305,7 +328,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return user;
}
- private List<RoleMemento> asRoleMementos(final List<String> roles) {
+ private static List<RoleMemento> asRoleMementos(final List<String> roles) {
final List<RoleMemento> mementos = new ArrayList<RoleMemento>();
if (roles != null) {
for (final String role : roles) {
@@ -319,17 +342,20 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// properties
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public String getProperty(final String name) {
return getDomainObjectServices().getProperty(name);
}
+ @Programmatic
@Override
public String getProperty(final String name, final String defaultValue) {
final String value = getProperty(name);
return value == null ? defaultValue : value;
}
+ @Programmatic
@Override
public List<String> getPropertyNames() {
return getDomainObjectServices().getPropertyNames();
@@ -339,16 +365,19 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// info, warn, error messages
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public void informUser(final String message) {
getDomainObjectServices().informUser(message);
}
+ @Programmatic
@Override
public void raiseError(final String message) {
getDomainObjectServices().raiseError(message);
}
+ @Programmatic
@Override
public void warnUser(final String message) {
getDomainObjectServices().warnUser(message);
@@ -358,6 +387,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// allInstances
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public <T> List<T> allInstances(final Class<T> type, long... range) {
return allMatches(new QueryFindAllInstances<T>(type, range));
@@ -366,7 +396,8 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// //////////////////////////////////////////////////////////////////
// allMatches
// //////////////////////////////////////////////////////////////////
-
+
+ @Programmatic
@Override
public <T> List<T> allMatches(final Class<T> cls, final Predicate<? super T> predicate, long... range) {
final List<T> allInstances = allInstances(cls, range);
@@ -379,23 +410,27 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return filtered;
}
+ @Programmatic
@Deprecated
@Override
public <T> List<T> allMatches(final Class<T> cls, final Filter<? super T> filter, long... range) {
return allMatches(cls, Filters.asPredicate(filter), range);
}
-
+
+ @Programmatic
@Override
public <T> List<T> allMatches(final Class<T> type, final T pattern, long... range) {
Assert.assertTrue("pattern not compatible with type", type.isAssignableFrom(pattern.getClass()));
return allMatches(new QueryFindByPattern<T>(type, pattern, range));
}
+ @Programmatic
@Override
public <T> List<T> allMatches(final Class<T> type, final String title, long... range) {
return allMatches(new QueryFindByTitle<T>(type, title, range));
}
+ @Programmatic
@Override
public <T> List<T> allMatches(final Query<T> query) {
flush(); // auto-flush any pending changes
@@ -407,6 +442,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// firstMatch
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public <T> T firstMatch(final Class<T> cls, final Predicate<T> predicate) {
final List<T> allInstances = allInstances(cls); // Have to fetch all, as matching is done in next loop
@@ -418,24 +454,28 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return null;
}
+ @Programmatic
@Deprecated
@Override
public <T> T firstMatch(final Class<T> cls, final Filter<T> filter) {
return firstMatch(cls, Filters.asPredicate(filter));
}
-
+
+ @Programmatic
@Override
public <T> T firstMatch(final Class<T> type, final T pattern) {
final List<T> instances = allMatches(type, pattern, 0, 1); // No need to fetch more than 1
return firstInstanceElseNull(instances);
}
+ @Programmatic
@Override
public <T> T firstMatch(final Class<T> type, final String title) {
final List<T> instances = allMatches(type, title, 0, 1); // No need to fetch more than 1
return firstInstanceElseNull(instances);
}
+ @Programmatic
@Override
@SuppressWarnings("unchecked")
public <T> T firstMatch(final Query<T> query) {
@@ -448,6 +488,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
// uniqueMatch
// //////////////////////////////////////////////////////////////////
+ @Programmatic
@Override
public <T> T uniqueMatch(final Class<T> type, final Predicate<T> predicate) {
final List<T> instances = allMatches(type, predicate, 0, 2); // No need to fetch more than 2.
@@ -457,6 +498,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return firstInstanceElseNull(instances);
}
+ @Programmatic
@Deprecated
@Override
public <T> T uniqueMatch(final Class<T> type, final Filter<T> filter) {
@@ -466,7 +508,8 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
}
return firstInstanceElseNull(instances);
}
-
+
+ @Programmatic
@Override
public <T> T uniqueMatch(final Class<T> type, final T pattern) {
final List<T> instances = allMatches(type, pattern, 0, 2); // No need to fetch more than 2.
@@ -476,6 +519,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return firstInstanceElseNull(instances);
}
+ @Programmatic
@Override
public <T> T uniqueMatch(final Class<T> type, final String title) {
final List<T> instances = allMatches(type, title, 0, 2); // No need to fetch more than 2.
@@ -485,6 +529,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return firstInstanceElseNull(instances);
}
+ @Programmatic
@Override
public <T> T uniqueMatch(final Query<T> query) {
final List<T> instances = allMatches(query); // No need to fetch more than 2.
@@ -494,7 +539,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return firstInstanceElseNull(instances);
}
- private <T> T firstInstanceElseNull(final List<T> instances) {
+ private static <T> T firstInstanceElseNull(final List<T> instances) {
return instances.size() == 0 ? null : instances.get(0);
}
@@ -514,17 +559,10 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
}
}
- // make not recognizable, instead show the error page...
-// static class ExceptionRecognizerForObjectMemberAuthorizationException extends ExceptionRecognizerForType {
-// public ExceptionRecognizerForObjectMemberAuthorizationException() {
-// super(ObjectMember.AuthorizationException.class);
-// }
-// }
private final ExceptionRecognizer recognizer =
new ExceptionRecognizerComposite(
new ExceptionRecognizerForConcurrencyException(),
-// new ExceptionRecognizerForObjectMemberAuthorizationException(),
new ExceptionRecognizerForRecoverableException()
);
@@ -533,21 +571,25 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
* which will automatically recognize any {@link org.apache.isis.applib.RecoverableException}s or
* any {@link ConcurrencyException}s.
*/
+ @Programmatic
@Override
public String recognize(Throwable ex) {
return recognizer.recognize(ex);
}
-
- ExceptionRecognizer getRecognizer() {
- return recognizer;
- }
+
+ // //////////////////////////////////////////////////////////////////
+ // init, shutdown
+ // //////////////////////////////////////////////////////////////////
+
+ @Programmatic
@PostConstruct
@Override
public void init(Map<String, String> properties) {
recognizer.init(properties);
}
+ @Programmatic
@PreDestroy
@Override
public void shutdown() {
@@ -562,6 +604,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return querySubmitter;
}
+ @Programmatic
@Override
public void setQuerySubmitter(final QuerySubmitter querySubmitter) {
this.querySubmitter = querySubmitter;
@@ -571,6 +614,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return domainObjectServices;
}
+ @Programmatic
@Override
public void setDomainObjectServices(final DomainObjectServices domainObjectServices) {
this.domainObjectServices = domainObjectServices;
@@ -580,6 +624,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return specificationLookup;
}
+ @Programmatic
@Override
public void setSpecificationLookup(final SpecificationLoader specificationLookup) {
this.specificationLookup = specificationLookup;
@@ -589,6 +634,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return authenticationSessionProvider;
}
+ @Programmatic
@Override
public void setAuthenticationSessionProvider(final AuthenticationSessionProvider authenticationSessionProvider) {
this.authenticationSessionProvider = authenticationSessionProvider;
@@ -598,6 +644,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return adapterManager;
}
+ @Programmatic
@Override
public void setAdapterManager(final AdapterManager adapterManager) {
this.adapterManager = adapterManager;
@@ -607,6 +654,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return objectDirtier;
}
+ @Programmatic
@Override
public void setObjectDirtier(final ObjectDirtier objectDirtier) {
this.objectDirtier = objectDirtier;
@@ -616,6 +664,7 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
return objectPersistor;
}
+ @Programmatic
@Override
public void setObjectPersistor(final ObjectPersistor objectPersistor) {
this.objectPersistor = objectPersistor;
@@ -627,6 +676,4 @@ public class DomainObjectContainerDefault implements DomainObjectContainer, Que
}
-
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
index affc3e2..957ce93 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationLoaderSpi.java
@@ -30,20 +30,12 @@ import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
public interface SpecificationLoaderSpi extends ApplicationScopedComponent, DebuggableWithTitle, SpecificationLoader {
/**
- * Specify the {@link DomainObjectContainer} as part of initializing the services.
- *
- * @see #setServices(List)
- */
- void setContainer(DomainObjectContainer container);
- /**
* Specify the services to pro-actively prime the cache, and to initialize them also.
- *
- * @see #setContainer(DomainObjectContainer)
*/
void setServices(List<Object> services);
/**
- * Populated as a result of running {@link MetaModelValidator#validate() validation} after all specs have been loaded.
+ * Populated as a result of running metamodel validation after all specs have been loaded.
* @param validationFailures
*/
void validateSpecifications(ValidationFailures validationFailures);
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 3d2400e..78a9013 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -154,10 +154,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
private final SpecificationTraverser specificationTraverser;
/**
- * @see #setContainer(DomainObjectContainer)
- */
- private DomainObjectContainer container;
- /**
* @see #setServices(List)
*/
private List<Object> services;
@@ -679,11 +675,6 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
}
@Override
- public void setContainer(final DomainObjectContainer container) {
- this.container = container;
- }
-
- @Override
public void setServices(final List<Object> services) {
this.services = services;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
index b857f4c..c525047 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_getDomainObjectContainer.java
@@ -19,16 +19,10 @@
package org.apache.isis.core.metamodel.app;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
import org.jmock.Expectations;
import org.jmock.auto.Mock;
import org.junit.Before;
import org.junit.Rule;
-import org.junit.Test;
-
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext;
import org.apache.isis.core.unittestsupport.jmocking.IsisActions;
@@ -69,10 +63,4 @@ public class IsisMetaModelTest_getDomainObjectContainer {
});
}
-
- @Test
- public void happyCase() {
- assertThat(metaModel.getDomainObjectContainer(), is(notNullValue()));
- }
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
index b3f53b5..b8bd5ed 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/app/IsisMetaModelTest_init.java
@@ -20,17 +20,13 @@
package org.apache.isis.core.metamodel.app;
import java.util.TreeSet;
-
import com.google.common.collect.Lists;
-
import org.jmock.Expectations;
import org.jmock.Sequence;
import org.jmock.auto.Mock;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetdecorator.FacetDecorator;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
@@ -74,9 +70,6 @@ public class IsisMetaModelTest_init {
allowing(mockRuntimeContext).injectInto(with(any(Object.class)));
will(IsisActions.injectInto());
- oneOf(mockRuntimeContext).setContainer(with(any(DomainObjectContainer.class)));
- inSequence(initSequence);
-
oneOf(mockProgrammingModelFacets).init();
inSequence(initSequence);
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
index 729ae30..0c553b0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/ProgrammableReflector.java
@@ -129,11 +129,6 @@ public class ProgrammableReflector implements SpecificationLoaderSpi, Applicatio
}
@Override
- public void setContainer(DomainObjectContainer container) {
- throw new NotYetImplementedException();
- }
-
- @Override
public void setServices(final List<Object> services) {
throw new NotYetImplementedException();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
index 01a305f..9c0cb1c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
@@ -78,8 +78,7 @@ public class ServicesInjectorDefaultTest {
@Test
public void shouldInjectContainer() {
- injector.setContainer(mockContainer);
- final Object[] services = { mockService1, mockService2 };
+ final Object[] services = { mockContainer, mockService1, mockService2 };
injector.setServices(Arrays.asList(services));
context.checking(new Expectations() {
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
index 1657249..af6ca86 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
@@ -19,25 +19,19 @@
package org.apache.isis.core.metamodel.services;
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-
import java.util.Arrays;
-
import javax.inject.Inject;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-
import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
public class ServicesInjectorDefaultTest_usingFields {
@Rule
@@ -92,15 +86,12 @@ public class ServicesInjectorDefaultTest_usingFields {
@Test
public void shouldInjectContainer() {
- injector.setContainer(container);
- injector.setServices(Arrays.asList(service1, service3, service2));
+ injector.setServices(Arrays.asList(container, service1, service3, service2));
- injector.injectServicesInto(container);
injector.injectServicesInto(service1);
injector.injectServicesInto(service2);
injector.injectServicesInto(service3);
- assertThat(service1.getContainer(), is(container));
assertThat(service1.getSomeDomainService2(), is((SomeDomainService2Abstract)service2));
assertThat(service2.getSomeDomainService1(), is(service1));
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
index fddd993..c013d06 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefaultTestAbstract.java
@@ -85,8 +85,7 @@ public abstract class ObjectReflectorDefaultTestAbstract {
new HashSet<FacetDecorator>(),
new MetaModelValidatorDefault());
reflector.setRuntimeContext(runtimeContext);
- reflector.setContainer(new DomainObjectContainerDefault());
- reflector.setServices(Collections.emptyList());
+ reflector.setServices(Collections.<Object>singletonList(new DomainObjectContainerDefault()));
reflector.init();
specification = loadSpecification(reflector);
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceConstants.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceConstants.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceConstants.java
index d83327d..e8e194c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceConstants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceConstants.java
@@ -19,10 +19,6 @@
package org.apache.isis.core.runtime.persistence;
-import org.apache.isis.applib.DomainObjectContainer;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.services.container.DomainObjectContainerDefault;
import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import org.apache.isis.core.runtime.system.persistence.ObjectFactory;
@@ -46,12 +42,6 @@ public final class PersistenceConstants {
*/
public static final String CLASS_SUBSTITUTOR_CLASS_NAME_DEFAULT = "org.apache.isis.core.bytecode.cglib.CglibClassSubstitutor";
- /**
- * Key used to lookup implementation of {@link DomainObjectContainer} in
- * {@link IsisConfiguration}.
- */
- public static final String DOMAIN_OBJECT_CONTAINER_CLASS_NAME = ConfigurationConstants.ROOT + "persistor.domain-object-container";
- public static final String DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT = DomainObjectContainerDefault.class.getName();
private PersistenceConstants() {
}
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
index 741f369..0c01e96 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/PersistenceSessionFactoryDelegating.java
@@ -19,15 +19,7 @@
package org.apache.isis.core.runtime.persistence;
-import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-
import java.util.List;
-
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.clock.Clock;
import org.apache.isis.applib.fixtures.FixtureClock;
import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -46,6 +38,9 @@ import org.apache.isis.core.runtime.system.persistence.ObjectFactory;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
+import static org.apache.isis.core.commons.ensure.Ensure.ensureThatState;
+import static org.hamcrest.CoreMatchers.*;
+
/**
* Implementation that just delegates to a supplied
* {@link PersistenceSessionFactory}.
@@ -57,10 +52,6 @@ public class PersistenceSessionFactoryDelegating implements PersistenceSessionFa
private final PersistenceSessionFactoryDelegate persistenceSessionFactoryDelegate;
/**
- * @see #setContainer(DomainObjectContainer)
- */
- private DomainObjectContainer container;
- /**
* @see #setServices(List)
*/
private List<Object> serviceList;
@@ -101,7 +92,6 @@ public class PersistenceSessionFactoryDelegating implements PersistenceSessionFa
public final void init() {
// check prereq dependencies injected
- ensureThatState(container, is(not(nullValue())));
ensureThatState(serviceList, is(notNullValue()));
// a bit of a workaround, but required if anything in the metamodel (for
@@ -136,13 +126,10 @@ public class PersistenceSessionFactoryDelegating implements PersistenceSessionFa
// wire up components
getSpecificationLoader().injectInto(runtimeContext);
- runtimeContext.injectInto(container);
- runtimeContext.setContainer(container);
for (Object service : serviceList) {
runtimeContext.injectInto(service);
}
- servicesInjector.setContainer(container);
servicesInjector.setServices(serviceList);
servicesInjector.init();
}
@@ -235,10 +222,6 @@ public class PersistenceSessionFactoryDelegating implements PersistenceSessionFa
// Dependencies (injected via setters)
// //////////////////////////////////////////////////////
- public void setContainer(DomainObjectContainer container) {
- this.container = container;
- }
-
@Override
public void setServices(final List<Object> serviceList) {
this.serviceList = serviceList;
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
index e706692..5bd15a2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/ServicesInstallerFromAnnotation.java
@@ -51,7 +51,12 @@ public class ServicesInstallerFromAnnotation extends InstallerAbstract implement
*
* <p>
* It's important that any services annotated {@link org.apache.isis.applib.annotation.DomainService} and residing
- * in any of these packages must have no side-effects and must have only one implementation.
+ * in any of these packages must have no side-effects.
+ *
+ * <p>
+ * Services are ordered according to the {@link org.apache.isis.applib.annotation.DomainService#menuOrder() menuOrder},
+ * with the first service found used.
+ * </p>
*/
public final static String PACKAGE_PREFIX_STANDARD =
",org.apache.isis.applib" +
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
index 2f6be7b..3d98d22 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/IsisSystemFixturesHookAbstract.java
@@ -24,12 +24,10 @@ import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.fixtures.LogonFixture;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.debug.DebugBuilder;
import org.apache.isis.core.commons.debug.DebuggableWithTitle;
-import org.apache.isis.core.commons.factory.InstanceUtil;
import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
import org.apache.isis.core.metamodel.facetapi.ClassSubstitutorFactory;
import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
@@ -41,7 +39,6 @@ import org.apache.isis.core.runtime.authentication.AuthenticationManager;
import org.apache.isis.core.runtime.authentication.exploration.ExplorationSession;
import org.apache.isis.core.runtime.authorization.AuthorizationManager;
import org.apache.isis.core.runtime.installerregistry.InstallerLookup;
-import org.apache.isis.core.runtime.persistence.PersistenceConstants;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.internal.InitialisationSession;
import org.apache.isis.core.runtime.system.internal.IsisLocaleInitializer;
@@ -143,12 +140,10 @@ public abstract class IsisSystemFixturesHookAbstract implements IsisSystem {
*/
private ServiceInitializer initializeServices() {
- final DomainObjectContainer container = sessionFactory.getContainer();
final List<Object> services = sessionFactory.getServices();
// autowire
final ServicesInjectorDefault servicesInjector = new ServicesInjectorDefault();
- servicesInjector.setContainer(container);
servicesInjector.setServices(services);
servicesInjector.init();
@@ -315,28 +310,9 @@ public abstract class IsisSystemFixturesHookAbstract implements IsisSystem {
protected abstract AuthorizationManager obtainAuthorizationManager(final DeploymentType deploymentType);
// ///////////////////////////////////////////
- // Container & Services
+ // Services
// ///////////////////////////////////////////
- /**
- * Returns a {@link DomainObjectContainer} as {@link #getConfiguration() configured}.
- *
- * <p>
- * By default, looks up implementation from provided
- * {@link IsisConfiguration} using
- * {@link PersistenceConstants#DOMAIN_OBJECT_CONTAINER_CLASS_NAME}. If no
- * implementation is specified, then defaults to
- * {@link PersistenceConstants#DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT}.
- */
- protected DomainObjectContainer obtainContainer() {
- return createContainer(getConfiguration());
- }
-
- private DomainObjectContainer createContainer(final IsisConfiguration configuration) {
- final String configuredClassName = configuration.getString(PersistenceConstants.DOMAIN_OBJECT_CONTAINER_CLASS_NAME, PersistenceConstants.DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT);
- return InstanceUtil.createInstance(configuredClassName, PersistenceConstants.DOMAIN_OBJECT_CONTAINER_NAME_DEFAULT, DomainObjectContainer.class);
- }
-
protected abstract List<Object> obtainServices();
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
index 7055e4c..65b6020 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
@@ -20,8 +20,6 @@
package org.apache.isis.core.runtime.system.persistence;
import java.util.List;
-
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
import org.apache.isis.core.metamodel.facetapi.ClassSubstitutorFactory;
@@ -62,10 +60,9 @@ public interface PersistenceSessionFactory extends ClassSubstitutorFactory, Meta
PersistenceSession createPersistenceSession();
// //////////////////////////////////////////////////////
- // Container & Services
+ // Services
// //////////////////////////////////////////////////////
- public void setContainer(DomainObjectContainer container);
public void setServices(List<Object> servicesList);
http://git-wip-us.apache.org/repos/asf/isis/blob/98635d37/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
index 696b2d6..62704da 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
@@ -85,7 +85,6 @@ public interface IsisSessionFactory extends ApplicationScopedComponent {
*/
public PersistenceSessionFactory getPersistenceSessionFactory();
- public DomainObjectContainer getContainer();
public List<Object> getServices();
/**