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 2015/09/14 08:37:22 UTC
[20/23] isis git commit: ISIS-1194: PersistenceSession now implements
DomainObjectServices AP (cf previous commits)
ISIS-1194: PersistenceSession now implements DomainObjectServices AP (cf previous commits)
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/482462ef
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/482462ef
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/482462ef
Branch: refs/heads/ISIS-1194
Commit: 482462ef21d2c716ad6bced0ec940cdb3be28257
Parents: 2784cc1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Sep 12 09:17:33 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Sep 14 07:36:24 2015 +0100
----------------------------------------------------------------------
.../internal/RuntimeContextFromSession.java | 2 +-
.../system/persistence/PersistenceSession.java | 108 ++++++++++++++++++-
2 files changed, 108 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/482462ef/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
index 89a1e7b..ad1a1e4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/internal/RuntimeContextFromSession.java
@@ -272,7 +272,7 @@ public class RuntimeContextFromSession extends RuntimeContextAbstract {
};
}
- private static Properties applicationPropertiesFrom(final IsisConfiguration configuration) {
+ public static Properties applicationPropertiesFrom(final IsisConfiguration configuration) {
final Properties properties = new Properties();
final IsisConfiguration applicationConfiguration = configuration.getProperties("application");
for (final String key : applicationConfiguration) {
http://git-wip-us.apache.org/repos/asf/isis/blob/482462ef/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 87b3016..38039ce 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Modifier;
import java.text.MessageFormat;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import javax.jdo.FetchGroup;
import javax.jdo.FetchPlan;
@@ -35,7 +36,9 @@ import org.datanucleus.enhancement.Persistable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.RecoverableException;
import org.apache.isis.applib.query.Query;
+import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer2;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
@@ -47,6 +50,8 @@ import org.apache.isis.core.commons.debug.DebuggableWithTitle;
import org.apache.isis.core.commons.ensure.Assert;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.util.ToString;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
+import org.apache.isis.core.metamodel.adapter.DomainObjectServicesAware;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.ObjectPersistor;
import org.apache.isis.core.metamodel.adapter.ObjectPersistorAware;
@@ -86,6 +91,8 @@ import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
import org.apache.isis.core.runtime.persistence.PojoRefreshException;
import org.apache.isis.core.runtime.persistence.UnsupportedFindException;
import org.apache.isis.core.runtime.persistence.adaptermanager.AdapterManagerDefault;
+import org.apache.isis.core.runtime.persistence.container.DomainObjectContainerResolve;
+import org.apache.isis.core.runtime.persistence.internal.RuntimeContextFromSession;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.CreateObjectCommand;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.DestroyObjectCommand;
import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
@@ -114,7 +121,7 @@ import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
public class PersistenceSession implements TransactionalResource, SessionScopedComponent, DebuggableWithTitle, AdapterManager,
- QuerySubmitter, ObjectPersistor {
+ QuerySubmitter, ObjectPersistor, DomainObjectServices {
private static final Logger LOG = LoggerFactory.getLogger(PersistenceSession.class);
@@ -200,6 +207,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
setState(State.NOT_INITIALIZED);
+ // to implement DomainObjectServices
+ final Properties properties = RuntimeContextFromSession.applicationPropertiesFrom(configuration);
+ setProperties(properties);
+
if (LOG.isDebugEnabled()) {
LOG.debug("creating " + this);
}
@@ -362,6 +373,10 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
final ObjectPersistorAware cast = ObjectPersistorAware.class.cast(candidate);
cast.setObjectPersistor(this);
}
+ if (DomainObjectServicesAware.class.isAssignableFrom(candidate.getClass())) {
+ final DomainObjectServicesAware cast = DomainObjectServicesAware.class.cast(candidate);
+ cast.setDomainObjectServices(this);
+ }
}
//region > QuerySubmitter impl
@@ -1490,6 +1505,97 @@ public class PersistenceSession implements TransactionalResource, SessionScopedC
//endregion
+ //region > DomainObjectServices impl
+
+
+ @Override
+ public Object lookup(Bookmark bookmark) {
+ return new DomainObjectContainerResolve().lookup(bookmark);
+ }
+
+ @Override
+ public Bookmark bookmarkFor(Object domainObject) {
+ return new DomainObjectContainerResolve().bookmarkFor(domainObject);
+ }
+
+ @Override
+ public Bookmark bookmarkFor(Class<?> cls, String identifier) {
+ return new DomainObjectContainerResolve().bookmarkFor(cls, identifier);
+ }
+
+
+ @Override
+ public void resolve(final Object parent) {
+ new DomainObjectContainerResolve().resolve(parent);
+ }
+
+ @Override
+ public void resolve(final Object parent, final Object field) {
+ new DomainObjectContainerResolve().resolve(parent, field);
+ }
+
+ @Override
+ public boolean flush() {
+ return getTransactionManager().flushTransaction();
+ }
+
+ @Override
+ public void commit() {
+ getTransactionManager().endTransaction();
+ }
+
+ @Override
+ public void informUser(final String message) {
+ getCurrentTransaction().getMessageBroker().addMessage(message);
+ }
+
+ @Override
+ public void warnUser(final String message) {
+ getCurrentTransaction().getMessageBroker().addWarning(message);
+ }
+
+ @Override
+ public void raiseError(final String message) {
+ throw new RecoverableException(message);
+ }
+
+ private Properties properties;
+
+ private void setProperties(final Properties properties) {
+ this.properties = properties;
+ }
+
+ @Override
+ public String getProperty(final String name) {
+ return properties.getProperty(name);
+ }
+
+ @Override
+ public List<String> getPropertyNames() {
+ final List<String> list = Lists.newArrayList();
+ for (final Object key : properties.keySet()) {
+ list.add((String) key);
+ }
+ return list;
+ }
+
+
+ @Override
+ public <T> T lookupService(final Class<T> service) {
+ return servicesInjector.lookupService(service);
+ }
+
+ @Override
+ public <T> Iterable<T> lookupServices(final Class<T> service) {
+ return servicesInjector.lookupServices(service);
+ }
+
+
+
+
+ //endregion
+
+
}