[isis] 23/24: ISIS-1976: minor cleanup

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 69552727226ac65dfec4ab83f47444a08f12783b
Author: Andi Huber 
AuthorDate: Tue Sep 4 12:44:11 2018 +0200

ISIS-1976: minor cleanup

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adapter/concurrency/ConcurrencyChecking.java  | 19 +++
 .../system/persistence/PersistenceSession4.java   |  4 +---
 .../system/persistence/PersistenceSession5.java   |  3 +--
 .../background/CommandExecutorServiceDefault.java |  4 
 .../adaptermanager/ObjectAdapterContext.java  | 15 ++-
 .../ObjectAdapterContext_AdapterManager.java  |  4 
 .../ObjectAdapterContext_Consistency.java |  5 -
 .../ObjectAdapterContext_Factories.java   |  5 -
 .../ObjectAdapterContext_MementoSupport.java  |  5 -
 .../ObjectAdapterContext_ObjectAdapterProvider.java   |  5 -
 .../adaptermanager/ObjectAdapterLegacy.java   | 15 ---
 11 files changed, 55 insertions(+), 29 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
index 355b4be..1632f6f 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
@@ -1,3 +1,22 @@
+/*
+ *  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.adapter.concurrency;
 
 import java.util.concurrent.Callable;
diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index a758032..7c554f6 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -92,7 +92,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
 import org.apache.isis.core.runtime.persistence.NotPersistableException;
 import org.apache.isis.core.runtime.persistence.ObjectNotFoundException;
@@ -107,7 +106,6 @@ import 
org.apache.isis.core.runtime.persistence.query.PersistenceQueryFindUsingA
 import org.apache.isis.core.runtime.services.RequestScopedService;
 import 
org.apache.isis.core.runtime.system.persistence.adaptermanager.ObjectAdapterContext;
 import 
org.apache.isis.core.runtime.system.persistence.adaptermanager.ObjectAdapterContext.MementoRecreateObjectSupport;
-import 
org.apache.isis.core.runtime.system.persistence.adaptermanager.ObjectAdapterLegacy;
 import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.core.runtime.system.transaction.TransactionalClosure;
@@ -171,7 +169,7 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 PersistenceQueryFindUsingApplibQueryDefault.class,
 new PersistenceQueryFindUsingApplibQueryProcessor(this));
 
-objectAdapterContext = 
ObjectAdapterLegacy.openContext(servicesInjector, authenticationSession, 
specificationLoader, this);
+objectAdapterContext = 
ObjectAdapterContext.openContext(servicesInjector, authenticationSession, 

[isis] 24/24: ISIS-1976: fixes StackOverflow with ObjectAdapterContext.specificationForViewModel()

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2c7041016faf87443befaa80eef9a0457ac1338f
Author: Andi Huber 
AuthorDate: Tue Sep 4 22:21:10 2018 +0200

ISIS-1976: fixes StackOverflow with
ObjectAdapterContext.specificationForViewModel()

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapterProvider.java| 11 ---
 ...RecreatableObjectFacetDeclarativeInitializingAbstract.java |  5 ++---
 .../persistence/adaptermanager/ObjectAdapterContext.java  |  6 +++---
 .../ObjectAdapterContext_ObjectAdapterProvider.java   |  2 +-
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index 92776da..ba81787 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -24,7 +24,6 @@ import java.util.function.Function;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 /**
@@ -49,7 +48,13 @@ public interface ObjectAdapterProvider {
 final ObjectAdapter parentAdapter,
 OneToManyAssociation collection);
 
-ObjectSpecification specificationForViewModel(final Object viewModelPojo);
+/**
+ * @param viewModelPojo
+ * @return an ObjectAdapter 'bypassing mapping', that holds the 
ObjectSpecification
+ * FIXME[ISIS-1976] Note: whether or not 'bypassing mapping' should not be 
exposed by the API.
+ * So this further needs refactoring. 
+ */
+ObjectAdapter specificationForViewModel(final Object viewModelPojo);
 
 ObjectAdapter adapterForViewModel(
 final Object viewModelPojo, 
@@ -80,7 +85,7 @@ public interface ObjectAdapterProvider {
 }
 
 @Programmatic
-default ObjectSpecification specificationForViewModel(final Object 
viewModelPojo) {
+default ObjectAdapter specificationForViewModel(final Object 
viewModelPojo) {
 return 
getObjectAdapterProvider().specificationForViewModel(viewModelPojo);
 }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
index 7bd3528..2b47acd 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
@@ -97,7 +97,8 @@ extends RecreatableObjectFacetAbstract {
 
 final _Mementos.Memento memento = _Mementos.create(codec, serializer);
 
-final ObjectSpecification spec = 
adapterProvider.specificationForViewModel(viewModelPojo);
+final ObjectAdapter ownerAdapter = 
adapterProvider.specificationForViewModel(viewModelPojo);
+final ObjectSpecification spec = ownerAdapter.getSpecification();
 
 final List properties = 
spec.getProperties(Contributed.EXCLUDED);
 for (OneToOneAssociation property : properties) {
@@ -112,8 +113,6 @@ extends RecreatableObjectFacetAbstract {
 
 // otherwise, include
 
-final ObjectAdapter ownerAdapter = 
adapterProvider.adapterFor(viewModelPojo);
-
 final ObjectAdapter propertyValueAdapter = 
property.get(ownerAdapter,
 InteractionInitiatedBy.FRAMEWORK);
 if(propertyValueAdapter != null) {
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 1c57ebf..e01b0df 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -297,7 +297,7 @@ public class ObjectAdapterContext {
 oidAdapterMap.add(adapter.getOid(), adapter);
 }
 
-public ObjectSpecification specificationForViewModel

[isis] 14/24: ISIS-1976: add missing license header

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 663cbd54a0570ec91f4a3a311b1ca446407fbfef
Author: Andi Huber 
AuthorDate: Mon Sep 3 12:59:06 2018 +0200

ISIS-1976: add missing license header

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/adapter/ObjectAdapterProvider.java  | 18 ++
 1 file changed, 18 insertions(+)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index bba25d7..57ce4fc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -1,3 +1,21 @@
+/*
+ *  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.adapter;
 
 import java.util.UUID;



[isis] 02/24: ISIS-1976: experimental refactoring

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1a7bb26b5863a218c55be85603f3bae08905c221
Author: a.hu...@corax.at 
AuthorDate: Sun Sep 2 10:57:14 2018 +0200

ISIS-1976: experimental refactoring

adapterFor(RootOid)
---
 .../system/persistence/PersistenceSession5.java|  13 +
 .../isis/core/runtime/memento/CollectionData.java  |   9 +
 .../apache/isis/core/runtime/memento/Memento.java  | 198 +--
 .../background/CommandExecutorServiceDefault.java  |  40 +--
 .../AbstractIsisSessionTemplate.java   |  93 +++
 .../adaptermanager/ObjectAdapterLegacy.java| 276 +
 6 files changed, 347 insertions(+), 282 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index 1f78654..6d5baa6 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -1236,6 +1236,9 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 }
 
 
+/**
+ * foreign refs: 1
+ */
 @Override
 public ObjectAdapter adapterForAny(RootOid rootOid) {
 
@@ -1272,6 +1275,9 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 }
 }
 
+/**
+ * foreign refs: 1
+ */
 @Override
 public Map adaptersFor(final List 
rootOids) {
 return adaptersFor(rootOids, ConcurrencyChecking.NO_CHECK);
@@ -1336,6 +1342,8 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
  * This method  will always return an object, possibly indicating 
it is persistent; so make sure that you
  * know that the oid does indeed represent an object you know exists.
  * 
+ * 
+ * foreign refs: 4
  */
 @Override
 public ObjectAdapter adapterFor(final RootOid rootOid) {
@@ -1369,6 +1377,9 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
  * value.  This allows the client to retry if they wish.
  *
  * @throws {@link 
org.apache.isis.core.runtime.persistence.ObjectNotFoundException} if the object 
does not exist.
+ * 
+ * foreign refs: 0
+ * 
  */
 @Override
 public ObjectAdapter adapterFor(
@@ -1465,6 +1476,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 
 /**
  * {@inheritDoc}
+ * foreign refs: ~90
  */
 @Override
 public ObjectAdapter adapterFor(final Object pojo) {
@@ -1484,6 +1496,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 
 /**
  * {@inheritDoc}
+ * foreign refs: 2
  */
 @Override
 public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter 
parentAdapter, final OneToManyAssociation collection) {
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
index e28cc9e..1f2803f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
@@ -55,5 +55,14 @@ public class CollectionData extends Data {
 str.append(")");
 return str.toString();
 }
+
+/**
+ * TODO[ISIS-1976] only introduced for refactoring.
+ */
+@Deprecated
+public Data[] getElements() {
+return elements;
+}
+
 
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
index 78f9f7c..9e1eedc 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
@@ -22,14 +22,14 @@ package org.apache.isis.core.runtime.memento;
 import java.io.Serializable;
 import java.util.List;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
-import org.apache.isis.core.metamodel.adapter.o

[isis] 16/24: ISIS-1976: remove unused spec-loader from some facet constructors

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 83f6173a4bd695ace685d3ed26dc7e049e8f8787
Author: Andi Huber 
AuthorDate: Mon Sep 3 15:13:15 2018 +0200

ISIS-1976: remove unused spec-loader from some facet constructors

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../object/domainobject/DomainObjectAnnotationFacetFactory.java  | 1 -
 .../RecreatableObjectFacetForDomainObjectAnnotation.java | 9 ++---
 .../RecreatableObjectFacetDeclarativeInitializingAbstract.java   | 4 
 .../facets/object/recreatable/RecreatableObjectFacetFactory.java | 2 +-
 .../RecreatableObjectFacetForRecreatableObjectAnnotation.java| 8 +++-
 .../RecreatableObjectFacetForViewModelAnnotation.java| 4 +---
 6 files changed, 7 insertions(+), 21 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 5cf7e73..781dc8a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -291,7 +291,6 @@ implements MetaModelValidatorRefiner, 
PostConstructMethodCache {
 final PostConstructMethodCache postConstructMethodCache = this;
 final ViewModelFacet recreatableObjectFacet = 
RecreatableObjectFacetForDomainObjectAnnotation.create(
 domainObjects, 
-getSpecificationLoader(), 
 persistenceSessionServiceInternal, 
 servicesInjector,
 facetHolder, 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
index ca9c234..b9bcfd6 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
@@ -24,20 +24,17 @@ import java.util.Objects;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.PostConstructMethodCache;
 import 
org.apache.isis.core.metamodel.facets.object.recreatable.RecreatableObjectFacetDeclarativeInitializingAbstract;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 public class RecreatableObjectFacetForDomainObjectAnnotation extends
 RecreatableObjectFacetDeclarativeInitializingAbstract {
 
 public static ViewModelFacet create(
 final List domainObjects,
-final SpecificationLoader specificationLoader,
 final ObjectAdapterProvider adapterProvider,
 final ServicesInjector servicesInjector,
 final FacetHolder holder,
@@ -61,8 +58,7 @@ RecreatableObjectFacetDeclarativeInitializingAbstract {
 return null;
 }
 return new 
RecreatableObjectFacetForDomainObjectAnnotation(
-holder,
-specificationLoader, adapterProvider, 
servicesInjector, postConstructMethodCache);
+holder, adapterProvider, servicesInjector, 
postConstructMethodCache);
 }
 // shouldn't happen, the above switch should match all 
cases.
 throw new IllegalArgumentException("nature of '" + nature 
+ "' not recognized");
@@ -74,11 +70,10 @@ RecreatableObjectFacetDeclarativeInitializingAbstract {
 
 private RecreatableObjectFacetForDomainObjectAnnotation(
 final FacetHolder holder,
-final SpecificationLoader specificationLoader,
 final ObjectAdapterProvider adapterProvider,
 final ServicesInjector servicesInjector,
 final PostConstructMethodCache postConstructMethodCache) {
-super(holder, RecreationMechanism.INITIALIZES,

[isis] 10/24: ISIS-1976: rename some methods in AdapterManager

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 62e3128324938ecd2480160d7b51d99aac247338
Author: Andi Huber 
AuthorDate: Mon Sep 3 08:30:52 2018 +0200

ISIS-1976: rename some methods in AdapterManager

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/adapter/mgr/AdapterManager.java | 83 +++---
 .../javautilcollection/JavaArrayFacet.java |  4 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java | 10 +--
 .../PersistenceSessionServiceInternalNoop.java |  8 +--
 .../system/persistence/PersistenceSession4.java| 52 +++---
 .../queries/PersistenceQueryProcessorAbstract.java |  2 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  2 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |  2 +-
 .../system/persistence/PersistenceSession5.java| 52 +++---
 .../queries/PersistenceQueryProcessorAbstract.java |  2 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  2 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |  2 +-
 .../PersistenceSessionServiceInternalDefault.java  | 16 ++---
 .../system/persistence/PersistenceSessionBase.java |  2 +-
 .../adaptermanager/ObjectAdapterContext.java   |  4 +-
 .../adaptermanager/ObjectAdapterLegacy.java|  6 +-
 .../adaptermanager/RootAndCollectionAdapters.java  |  2 +-
 .../wicket/ConverterForObjectAdapter.java  |  2 +-
 .../wicket/ConverterForObjectAdapterMemento.java   |  2 +-
 19 files changed, 126 insertions(+), 129 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
index e3c266d..f9eaa32 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
@@ -28,42 +28,22 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 public interface AdapterManager {
-
-/**
- * Gets the {@link ObjectAdapter adapter} for the specified domain object 
if
- * it exists in the identity map.
- *
- * 
- * Provided by the AdapterManager when used by framework.
- *
- * @param pojo
- *- must not be null
- * @return adapter, or null if doesn't exist.
- */
-@Programmatic
-ObjectAdapter getAdapterFor(Object pojo);
-
-
 
 /**
- * Looks up or creates a standalone (value) or root adapter.
+ * @return standalone (value) or root adapter
  */
 @Programmatic
 ObjectAdapter adapterFor(Object domainObject);
-
 
 /**
- * Gets the {@link ObjectAdapter adapter} for the {@link Oid} if it exists
- * in the identity map.
- *
- * @param oid
- *- must not be null
- * @return adapter, or null if doesn't exist.
+ * @return collection adapter.
  */
 @Programmatic
-ObjectAdapter getAdapterFor(Oid oid);
-
-
+ObjectAdapter adapterFor(
+final Object pojo,
+final ObjectAdapter parentAdapter,
+OneToManyAssociation collection);
+
 
 enum ConcurrencyChecking {
 NO_CHECK,
@@ -155,31 +135,48 @@ public interface AdapterManager {
 
 }
 
-
-
+// -- DEPRECATIONS
 
 /**
- * Looks up or creates a collection adapter.
+ * Enable RecreatableObjectFacet to 'temporarily' map an existing pojo to 
an oid.
+ * @deprecated don't expose caching
  */
-@Programmatic
-ObjectAdapter adapterFor(
-final Object pojo,
-final ObjectAdapter parentAdapter,
-OneToManyAssociation collection);
-
+@Programmatic @Deprecated
+ObjectAdapter addRecreatedPojoToCache(Oid oid, Object recreatedPojo);
 
 /**
- * Enable RecreatableObjectFacet to 'temporarily' map an existing pojo to 
an oid.
+ * Enable RecreatableObjectFacet to remove a 'temporarily' mapped adapter 
for a pojo.
+ * @deprecated don't expose caching
  */
-@Programmatic
-ObjectAdapter mapRecreatedPojo(Oid oid, Object recreatedPojo);
+@Programmatic @Deprecated
+void removeAdapterFromCache(ObjectAdapter adapter);
 
+
 /**
- * Enable RecreatableObjectFacet to remove a 'temporarily' mapped an 
adapter for a pojo.
+ * Gets the {@link ObjectAdapter adapter} for the specified domain object 
if
+ * it exists in the identity map.
+ *
+ * 
+ * Provided by the AdapterManager when used by framework.
+ *
+ * @param pojo
+ *- must not be null
+ * @return adapter, or null if doesn't exist.
+ * @deprecated don't expose caching
  */
-@Programmatic
-void

[isis] 08/24: ISIS-1976: decouple ObjectAdapter creation from PersistenceSession

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ccb1571c3ced676860d25c9aa0eeec9c645c096a
Author: Andi Huber 
AuthorDate: Mon Sep 3 07:39:50 2018 +0200

ISIS-1976: decouple ObjectAdapter creation from PersistenceSession

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java| 124 ++
 .../system/persistence/PersistenceSession5.java| 138 +++--
 .../adaptermanager/ObjectAdapterContext.java   |  62 -
 .../ObjectAdapterContext_Factories.java| 103 +++
 .../adaptermanager/ObjectAdapterLegacy.java|  12 +-
 5 files changed, 204 insertions(+), 235 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index ea9e07c..7475e3f 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -161,7 +161,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 LOG.debug("opening {}", this);
 }
 
-objectAdapterContext = 
ObjectAdapterLegacy.openContext(servicesInjector);
+objectAdapterContext = 
ObjectAdapterLegacy.openContext(servicesInjector, authenticationSession, 
specificationLoader, this);
 
 persistenceManager = 
jdoPersistenceManagerFactory.getPersistenceManager();
 
@@ -914,7 +914,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
  * Makes an {@link ObjectAdapter} persistent. The specified object should 
be
  * stored away via this object store's persistence mechanism, and have a
  * new and unique OID assigned to it. The object, should also be added to
- * the {@link PersistenceSession4} as the object is implicitly 'in use'.
+ * the {@link PersistenceSession} as the object is implicitly 'in use'.
  *
  * 
  * If the object has any associations then each of these, where they aren't
@@ -987,18 +987,6 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 return adapter.isParentedCollection();
 }
 
-
-// -- ObjectPersistor impl
-
-private void makePersistent(final ObjectAdapter adapter) {
-makePersistentInTransaction(adapter);
-}
-
-
-private void remove(final ObjectAdapter adapter) {
-destroyObjectInTransaction(adapter);
-}
-
 // -- destroyObjectInTransaction
 
 /**
@@ -1153,7 +1141,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 
 // we create value facets as standalone (so not added to maps)
 if (objSpec.containsFacet(ValueFacet.class)) {
-adapter = createStandaloneAdapter(pojo);
+adapter = 
objectAdapterContext.getFactories().createStandaloneAdapter(pojo);
 return adapter;
 }
 
@@ -1463,9 +1451,6 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 return pojo;
 }
 
-/**
- * {@inheritDoc}
- */
 @Override
 public ObjectAdapter adapterFor(final Object pojo) {
 
@@ -1477,14 +1462,14 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 return existingOrValueAdapter;
 }
 
-final ObjectAdapter newAdapter = 
createTransientOrViewModelRootAdapter(pojo);
+
+// Creates a new transient root {@link ObjectAdapter adapter} for the 
supplied domain
+final RootOid rootOid = createTransientOrViewModelOid(pojo);
+final ObjectAdapter newAdapter = 
objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
 
 return mapAndInjectServices(newAdapter);
 }
 
-/**
- * {@inheritDoc}
- */
 @Override
 public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter 
parentAdapter, final OneToManyAssociation collection) {
 
@@ -1496,47 +1481,16 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 return existingOrValueAdapter;
 }
 
+ensureMapsConsistent(parentAdapter);
+
 // the List, Set etc. instance gets wrapped in its own adapter
-final ObjectAdapter newAdapter = createCollectionAdapter(pojo, 
parentAdapter, collection);
+final ObjectAdapter newAdapter = objectAdapterContext.getFactories()
+.createCollectionAdapter(pojo, parentAdapter, collection);
 
 return mapAndInjectServices(newAdapter);
 }
 
-/**
- * Creates an {@link Obj

[isis] 04/24: ISIS-1976: minor simplification

2018-09-04 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a0e04a10799e244aa942cf2363a7a618e3e9eda7
Author: a.hu...@corax.at 
AuthorDate: Sun Sep 2 19:08:08 2018 +0200

ISIS-1976: minor simplification
---
 .../adaptermanager/ObjectAdapterContext.java   | 26 ++
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 59a6b46..cb90abb 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -32,6 +32,10 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
+/**
+ *  
+ * @since 2.0.0-M2
+ */
 public class ObjectAdapterContext {
 private final PojoAdapterHashMap pojoAdapterMap = new PojoAdapterHashMap();
 private final OidAdapterHashMap oidAdapterMap = new OidAdapterHashMap();
@@ -76,6 +80,17 @@ public class ObjectAdapterContext {
 public ObjectAdapter lookupAdapterById(Oid oid) {
 return oidAdapterMap.getAdapter(oid);
 }
+
+public void addAdapter(ObjectAdapter adapter) {
+if(adapter==null) {
+return; // nothing to do
+}
+final Oid oid = adapter.getOid();
+if (oid != null) { // eg. value objects don't have an Oid
+oidAdapterMap.add(oid, adapter);
+}
+pojoAdapterMap.add(adapter.getObject(), adapter);
+}
 
 public void removeAdapter(ObjectAdapter adapter) {
 if(adapter==null) {
@@ -146,7 +161,7 @@ public class ObjectAdapterContext {
 
 final ObjectAdapter adapterReplacement = 
adapter.withOid(persistedRootOid); 
 
-replaceRootAdapter(persistedRootOid, adapterReplacement, 
rootAndCollectionAdapters);
+replaceRootAdapter(adapterReplacement, rootAndCollectionAdapters);
 
 if (ObjectAdapterLegacy.LOG.isDebugEnabled()) {
 ObjectAdapterLegacy.LOG.debug("made persistent {}; was {}", 
adapterReplacement, transientRootOid);
@@ -154,12 +169,15 @@ public class ObjectAdapterContext {
 }
 
 private void replaceRootAdapter(
-final RootOid persistedRootOid, 
 final ObjectAdapter adapterReplacement, 
 final RootAndCollectionAdapters rootAndCollectionAdapters) {
 
-oidAdapterMap.add(persistedRootOid, adapterReplacement);
-pojoAdapterMap.add(adapterReplacement.getObject(), adapterReplacement);
+addAdapter(adapterReplacement);
+
+final RootOid persistedRootOid = (RootOid) adapterReplacement.getOid();
+
+//oidAdapterMap.add(persistedRootOid, adapterReplacement);
+//pojoAdapterMap.add(adapterReplacement.getObject(), 
adapterReplacement);
 
 // associate the collection adapters with new Oids, and re-map
 ObjectAdapterLegacy.LOG.debug("replacing Oids for collection 
adapter(s) and re-adding into maps");



[isis] branch ISIS-1976-rethink-object-adapters updated (67d3c09 -> 5a8b180)

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 67d3c09  ISIS-1976: prepare removal of OA's replacePojo
 new 5fc28eb  ISIS-1976: prepare removal of OA's lookup by pojo map
 new f51d47a  ISIS-1976: minor cleanup
 new 5a8b180  ISIS-1976: improve the ObjectAdapterProvider interface (API)

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../metamodel/adapter/ObjectAdapterProvider.java   |  45 ++--
 ...ObjectFacetDeclarativeInitializingAbstract.java |   3 +-
 .../adaptermanager/ObjectAdapterContext.java   | 126 -
 .../ObjectAdapterContext_AdapterManager.java   |  30 +
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  68 ++-
 5 files changed, 210 insertions(+), 62 deletions(-)



[isis] 02/03: ISIS-1976: minor cleanup

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f51d47a6f4ab7f15b5282abd0688c7c81fb15cb8
Author: Andi Huber 
AuthorDate: Wed Sep 5 18:54:49 2018 +0200

ISIS-1976: minor cleanup

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adaptermanager/ObjectAdapterContext.java   | 66 --
 1 file changed, 36 insertions(+), 30 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index cc59c62..a9535a6 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -41,7 +41,6 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.memento.Data;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
 /**
@@ -110,29 +109,39 @@ public class ObjectAdapterContext {
 oidAdapterMap.close();
 } catch(final Throwable ex) {
 // ignore
-ObjectAdapterLegacy.LOG.error("close: oidAdapterMap#close() 
failed; continuing to avoid memory leakage");
+LOG.error("close: oidAdapterMap#close() failed; continuing to 
avoid memory leakage");
 }
 
 try {
 pojoAdapterMap.close();
 } catch(final Throwable ex) {
 // ignore
-ObjectAdapterLegacy.LOG.error("close: pojoAdapterMap#close() 
failed; continuing to avoid memory leakage");
+LOG.error("close: pojoAdapterMap#close() failed; continuing to 
avoid memory leakage");
 }
 }
 
 // -- CACHING
 
 @Deprecated // don't expose caching
-public boolean containsAdapterForPojo(Object pojo) {
-return pojoAdapterMap.containsPojo(pojo);
+protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
+return pojoAdapterMap.getAdapter(pojo);
+}
+
+private void putPojo(Object pojo, ObjectAdapter adapter) {
+pojoAdapterMap.add(adapter.getObject(), adapter);
 }
 
+private void removePojo(ObjectAdapter adapter) {
+pojoAdapterMap.remove(adapter);
+}
+
+// --
+
 @Deprecated // don't expose caching
-protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
-return pojoAdapterMap.getAdapter(pojo);
+public boolean containsAdapterForPojo(Object pojo) {
+return lookupAdapterByPojo(pojo)!=null;
 }
-
+
 @Deprecated // don't expose caching
 protected ObjectAdapter lookupAdapterById(Oid oid) {
 return oidAdapterMap.getAdapter(oid);
@@ -147,7 +156,7 @@ public class ObjectAdapterContext {
 if (oid != null) { // eg. value objects don't have an Oid
 oidAdapterMap.add(oid, adapter);
 }
-pojoAdapterMap.add(adapter.getObject(), adapter);
+putPojo(adapter.getObject(), adapter);
 }
 
 @Deprecated // don't expose caching
@@ -160,7 +169,7 @@ public class ObjectAdapterContext {
 if (oid != null) { // eg. value objects don't have an Oid
 oidAdapterMap.remove(oid);
 }
-pojoAdapterMap.remove(adapter);
+removePojo(adapter);
 }
 
 // -- CACHE CONSISTENCY
@@ -299,7 +308,7 @@ public class ObjectAdapterContext {
 // add all aggregated collections
 final ObjectSpecification objSpec = adapter.getSpecification();
 if (!adapter.isParentedCollection() || adapter.isParentedCollection() 
&& !objSpec.isImmutable()) {
-pojoAdapterMap.add(pojo, adapter);
+putPojo(pojo, adapter);
 }
 
 // order is important - add to pojo map first, then identity map
@@ -382,16 +391,16 @@ public class ObjectAdapterContext {
 }
 
 // associate root adapter with the new Oid, and remap
-if (ObjectAdapterLegacy.LOG.isDebugEnabled()) {
-ObjectAdapterLegacy.LOG.debug("replacing root adapter and 
re-adding into maps; oid is now: {} (was: {})", persistedRootOid.enString(), 
transientRootOid.enString());
+if (LOG.isDebugEnabled()) {
+LOG.debug("replacing root adapter and re-adding into maps; oid is 
now: {} (was: {})", persistedRootOid.enString(), transientRootOid.enString());
 }
 
 final 

[isis] 03/03: ISIS-1976: improve the ObjectAdapterProvider interface (API)

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 5a8b180a8337a1d9072f94623af1afa7888ce085
Author: Andi Huber 
AuthorDate: Wed Sep 5 20:41:07 2018 +0200

ISIS-1976: improve the ObjectAdapterProvider interface (API)

also prepare for removal of the OA by pojo lookup map

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../metamodel/adapter/ObjectAdapterProvider.java   | 28 --
 ...ObjectFacetDeclarativeInitializingAbstract.java |  3 +-
 .../adaptermanager/ObjectAdapterContext.java   | 64 ++
 .../ObjectAdapterContext_AdapterManager.java   | 30 ++
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 11 +++-
 5 files changed, 103 insertions(+), 33 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index e799f5d..fef5bf7 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 /**
@@ -56,12 +57,19 @@ public interface ObjectAdapterProvider {
 OneToManyAssociation collection);
 
 /**
- * @param viewModelPojo
- * @return an ObjectAdapter 'bypassing mapping', that holds the 
ObjectSpecification
- * FIXME[ISIS-1976] Note: whether or not 'bypassing mapping' should not be 
exposed by the API.
- * So this further needs refactoring. 
+ * Returns an ObjectAdapter that holds the ObjectSpecification used for 
+ * interrogating the domain object's metadata. 
+ * 
+ * Does _not_ perform dependency injection on the domain object. Also 
bypasses 
+ * caching (if any), that is each call to this method creates a new unique 
instance.
+ * 
+ * 
+ * @param viewModelPojo domain object
+ * @return  
  */
-ObjectAdapter specificationForViewModel(final Object viewModelPojo);
+ObjectAdapter disposableAdapterForViewModel(Object viewModelPojo);
+
+ObjectSpecification specificationForViewModel(Object viewModelPojo);
 
 ObjectAdapter adapterForViewModel(
 final Object viewModelPojo, 
@@ -97,7 +105,12 @@ public interface ObjectAdapterProvider {
 }
 
 @Programmatic
-default ObjectAdapter specificationForViewModel(final Object 
viewModelPojo) {
+default ObjectAdapter disposableAdapterForViewModel(final Object 
viewModelPojo) {
+return 
getObjectAdapterProvider().disposableAdapterForViewModel(viewModelPojo);
+}
+
+@Programmatic
+default ObjectSpecification specificationForViewModel(Object 
viewModelPojo) {
 return 
getObjectAdapterProvider().specificationForViewModel(viewModelPojo);
 }
 
@@ -116,6 +129,9 @@ public interface ObjectAdapterProvider {
 }
 
 
+   
+
+
 
 
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
index 2b47acd..97cc65e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
@@ -21,6 +21,7 @@ package 
org.apache.isis.core.metamodel.facets.object.recreatable;
 
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
 import org.apache.isis.commons.internal.memento._Mementos;
@@ -97,7 +98,7 @@ extends RecreatableObjectFacetAbstract {
 
 final _Mementos.Memento memento = _Mementos.create(codec, serializer);
 
-final ObjectAdapter ownerAdapter = 
adapterProvider.specificationForViewModel(viewModelPojo);
+final ObjectAdapter ownerAdapter = 
adapterProvider.disposableAdapterForViewModel(viewModelPojo);
 final ObjectSpecification spec = ownerAdapter.getSpecification();
 
 final List properties = 
spec.getProperties(Contributed.EXCLUDED);
diff --git 
a/core

[isis] 01/03: ISIS-1976: prepare removal of OA's lookup by pojo map

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 5fc28ebe7be5de1337813c91ed4dbcbabe594ae8
Author: Andi Huber 
AuthorDate: Wed Sep 5 18:21:35 2018 +0200

ISIS-1976: prepare removal of OA's lookup by pojo map

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../metamodel/adapter/ObjectAdapterProvider.java   | 17 ++-
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 57 ++
 2 files changed, 73 insertions(+), 1 deletion(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index ba81787..e799f5d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.function.Function;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -36,6 +37,12 @@ public interface ObjectAdapterProvider {
 // -- INTERFACE
 
 /**
+ * @param pojo
+ * @return oid for the given domain object 
+ */
+Oid oidFor(Object domainObject);
+
+/**
  * @return standalone (value) or root adapter
  */
 ObjectAdapter adapterFor(Object domainObject);
@@ -44,7 +51,7 @@ public interface ObjectAdapterProvider {
  * @return collection adapter.
  */
 ObjectAdapter adapterFor(
-final Object pojo,
+final Object domainObject,
 final ObjectAdapter parentAdapter,
 OneToManyAssociation collection);
 
@@ -72,6 +79,11 @@ public interface ObjectAdapterProvider {
 ObjectAdapterProvider getObjectAdapterProvider();
 
 @Programmatic
+default Oid oidFor(Object domainObject) {
+return getObjectAdapterProvider().oidFor(domainObject);
+}
+
+@Programmatic
 default ObjectAdapter adapterFor(Object domainObject) {
 return getObjectAdapterProvider().adapterFor(domainObject);
 }
@@ -102,6 +114,9 @@ public interface ObjectAdapterProvider {
 }
 
 }
+
+
+
 
 
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index f54643d..ba820e3 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -28,6 +28,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -63,6 +64,20 @@ class ObjectAdapterContext_ObjectAdapterProvider implements 
ObjectAdapterProvide
 }
 
 @Override
+public Oid oidFor(Object pojo) {
+if(pojo == null) {
+return null;
+}
+final Oid persistentOrValueOid = persistentOrValueOid(pojo);
+if(persistentOrValueOid != null) {
+return persistentOrValueOid;
+}
+// Creates a new transient root for the supplied domain object
+final RootOid rootOid = 
persistenceSession.createTransientOrViewModelOid(pojo);
+return rootOid;
+}
+
+@Override
 public ObjectAdapter adapterFor(Object pojo) {
 
 if(pojo == null) {
@@ -135,6 +150,48 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 
 // -- HELPER
 
+private Oid persistentOrValueOid(Object pojo) {
+
+Oid oid;
+
+// equivalent to  isInstanceOfPersistable = pojo instanceof 
Persistable;
+final boolean isInstanceOfPersistable = 
isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
+
+// pojo may have been lazily loaded by object store

[isis] branch master updated: ISIS-1976: fixing some tests

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 8533556  ISIS-1976: fixing some tests
8533556 is described below

commit 85335569a0dc62ced9664f5c0d06467183f79ddb
Author: Andi Huber 
AuthorDate: Wed Sep 5 09:17:43 2018 +0200

ISIS-1976: fixing some tests

reason: IsisSessionFactory does no longer live on the ServletContext

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../restfulobjects/server/ResourceContextTest_getArg.java| 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git 
a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_getArg.java
 
b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_getArg.java
index 965d7df..8f29bb3 100644
--- 
a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_getArg.java
+++ 
b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_getArg.java
@@ -32,6 +32,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.url.UrlDecoderUtil;
@@ -75,14 +76,17 @@ public class ResourceContextTest_getArg {
 public void setUp() throws Exception {
 deploymentCategory = DeploymentCategory.PRODUCTION;
 
+_Context.put(IsisSessionFactory.class, mockIsisSessionFactory, false);
+
 context.checking(new Expectations() {
 {
 allowing(mockHttpServletRequest).getQueryString();
 will(returnValue(""));
-allowing(mockHttpServletRequest).getServletContext();
-will(returnValue(mockServletContext));
-
allowing(mockServletContext).getAttribute("org.apache.isis.core.webapp.isisSessionFactory");
-will(returnValue(mockIsisSessionFactory));
+//[ISIS-1976] IsisSessionFactory does no longer live on the 
ServletContext
+//allowing(mockHttpServletRequest).getServletContext();
+//will(returnValue(mockServletContext));
+//
allowing(mockServletContext).getAttribute("org.apache.isis.core.webapp.isisSessionFactory");
+//will(returnValue(mockIsisSessionFactory));
 allowing(mockIsisSessionFactory).getServicesInjector();
 will(returnValue(mockServicesInjector));
 allowing(mockIsisSessionFactory).getConfiguration();



[isis] 01/01: Merge pull request #120 from apache/ISIS-1976-rethink-object-adapters

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 3d49fc748a34d410f2549381956dfe837f9377c6
Merge: 3a21e6a 2c70410
Author: Andi Huber 
AuthorDate: Wed Sep 5 08:47:07 2018 +0200

Merge pull request #120 from apache/ISIS-1976-rethink-object-adapters

ISIS-1976: merge 'Isis 1976 rethink object adapters'

 .../annotcfg/EncodableFacetAnnotation.java |  10 +-
 .../annotcfg/ParseableFacetAnnotation.java |   8 +-
 ...bleFacetAnnotationElseConfigurationFactory.java |  16 +-
 .../container/DomainObjectContainerDefault.java|  13 +-
 .../RepositoryServiceLegacyInternalDefault.java|  13 +-
 .../isis/core/metamodel/adapter/ObjectAdapter.java |  46 +-
 .../metamodel/adapter/ObjectAdapterProvider.java   | 107 +++
 .../adapter/concurrency/ConcurrencyChecking.java   | 123 +++
 .../core/metamodel/adapter/mgr/AdapterManager.java | 162 
 .../metamodel/adapter/mgr/AdapterManagerBase.java  |  50 --
 .../core/metamodel/facets/CollectionUtils.java |  12 +-
 ...ctionInvocationFacetForDomainEventAbstract.java |  16 +-
 .../actions/action/invocation/CommandUtil.java |   6 +-
 .../CollectionAccessorFacetViaAccessor.java|   6 +-
 .../CollectionAccessorFacetViaAccessorFactory.java |   8 +-
 .../clear/CollectionClearFacetFactory.java |  12 +-
 .../clear/CollectionClearFacetViaAccessor.java |  13 +-
 .../javautilcollection/CollectionFacetFactory.java |  10 +-
 .../javautilcollection/JavaArrayFacet.java |  49 +-
 .../javautilcollection/JavaCollectionFacet.java|  51 +-
 .../autocomplete/AutoCompleteFacetAbstract.java|   8 +-
 .../DomainObjectAnnotationFacetFactory.java|  11 +-
 ...atableObjectFacetForDomainObjectAnnotation.java |  14 +-
 .../object/encodeable/EncodableFacetAbstract.java  |  14 +-
 .../annotcfg/EncodableFacetFromConfiguration.java  |   4 +-
 .../encoder/EncodableFacetUsingEncoderDecoder.java |  14 +-
 .../facets/object/mixin/MixinFacetAbstract.java|   6 +-
 .../annotcfg/ParseableFacetFromConfiguration.java  |   4 +-
 .../parser/ParseableFacetUsingParser.java  |  16 +-
 .../RecreatableObjectFacetAbstract.java|  37 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java | 132 +--
 .../recreatable/RecreatableObjectFacetFactory.java |  12 +-
 ...eObjectFacetForRecreatableObjectAnnotation.java |   8 +-
 ...creatableObjectFacetForViewModelAnnotation.java |   8 +-
 .../annotation/TitleAnnotationFacetFactory.java|   8 +-
 .../annotation/TitleFacetViaTitleAnnotation.java   |  10 +-
 .../facets/object/value/ValueFacetAbstract.java|  14 +-
 .../ValueSemanticsProviderAndFacetAbstract.java|   6 +-
 .../ActionParameterAutoCompleteFacetAbstract.java  |  12 +-
 .../ActionParameterAutoCompleteFacetViaMethod.java |   8 +-
 ...ParameterAutoCompleteFacetViaMethodFactory.java |   9 +-
 .../ActionParameterChoicesFacetAbstract.java   |  12 +-
 .../choices/ActionParameterChoicesFacetNone.java   |   6 +-
 ...rameterChoicesFacetDerivedFromChoicesFacet.java |   8 +-
 ...ChoicesFacetDerivedFromChoicesFacetFactory.java |   8 +-
 .../method/ActionChoicesFacetViaMethod.java|  16 +-
 .../method/ActionChoicesFacetViaMethodFactory.java |   8 +-
 .../ActionParameterChoicesFacetViaMethod.java  |  12 +-
 ...ctionParameterChoicesFacetViaMethodFactory.java |   7 +-
 .../ActionParameterDefaultsFacetViaMethod.java |  15 +-
 ...tionParameterDefaultsFacetViaMethodFactory.java |   8 +-
 .../PropertyOrCollectionAccessorFacetAbstract.java |  12 +-
 .../accessor/PropertyAccessorFacetViaAccessor.java |   8 +-
 .../PropertyAccessorFacetViaAccessorFactory.java   |   8 +-
 .../method/PropertyAutoCompleteFacetMethod.java|  19 +-
 .../PropertyAutoCompleteFacetMethodFactory.java|   8 +-
 .../method/PropertyChoicesFacetViaMethod.java  |  24 +-
 .../PropertyChoicesFacetViaMethodFactory.java  |   8 +-
 ...pertyDefaultFacetDerivedFromDefaultedFacet.java |  18 +-
 ...PropertyDefaultFacetDerivedFromTypeFactory.java |   8 +-
 .../method/PropertyDefaultFacetViaMethod.java  |  16 +-
 .../PropertyDefaultFacetViaMethodFactory.java  |   8 +-
 .../ValueSemanticsProviderAbstractTemporal.java|   2 +-
 .../bytes/ByteValueSemanticsProviderAbstract.java  |   2 +-
 .../chars/CharValueSemanticsProviderAbstract.java  |   2 +-
 .../value/color/ColorValueSemanticsProvider.java   |   2 +-
 .../Jdk8LocalDateValueSemanticsProvider.java   |   2 +-
 .../JodaLocalDateValueSemanticsProvider.java   |   2 +-
 .../Jdk8LocalDateTimeValueSemanticsProvider.java   |   2 +-
 .../JodaLocalDateTimeValueSemanticsProvider.java   |   2 +-
 .../DoubleValueSemanticsProviderAbstract.java  |   2 +-
 .../FloatValueSemanticsProviderAbstract.java   |   2 +-
 .../value/image/ImageValueSemanticsProvider.java   |   2 +-
 .../JavaAwtImageValueSemanticsProvider.java|   2 +-
 .../integer

[isis] branch master updated (3a21e6a -> 3d49fc7)

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 3a21e6a  ISIS-1974: port latest changes (2.0.0-M2) 
PersistenceSessionFactory5 to PersistenceSessionFactory4
 add 9d64857  ISIS-1976: add layer of abstraction as first step to 
deprecate ObjectAdapter caching
 add 1a7bb26  ISIS-1976: experimental refactoring
 add d43ad07  ISIS-1976: make ObjectAdapter's Oid final
 add a0e04a1  ISIS-1976: minor simplification
 add 6e21d73  ISIS-1976: make RootAndCollectionAdapters package private
 add 791fc65  ISIS-1976: add some comments
 add 246db19  ISIS-1976: decouple PojoAdapter from DN
 add ccb1571  ISIS-1976: decouple ObjectAdapter creation from 
PersistenceSession
 add 4130493  ISIS-1976: remove AdapterManagerBase
 add 62e3128  ISIS-1976: rename some methods in AdapterManager
 add 29fbfff  ISIS-1976: rename IsisLifeCycleListener2 -> 
IsisLifeCycleListener
 add 5e59bd3  ISIS-1976: minor simplifications, also reduce compiler 
warnings
 add 3812bc1  ISIS-1976: decouple metamodel's facets from AdapterManager
 add 663cbd5  ISIS-1976: add missing license header
 add 48e4be1  ISIS-1976: further decouple factets
 add 83f6173  ISIS-1976: remove unused spec-loader from some facet 
constructors
 add ee9ce0f  ISIS-1976: further decouple from AdapterManager
 add 9ef889f  ISIS-1976: let PersistenceSession no longer implement 
AdapterManager
 add a7ccf6a  ISIS-1976: decouple implementations of PersistenceSession and 
ObjcetAdapterProvider from each other
 add 1cf124b  ISIS-1976: move responsibility for pre-loading service 
adapters from PersistenceSession to ObjectAdapterContext
 add 93ac9f2  ISIS-1976: PersistentSession: remove virtually unreachable 
code
 add 7770404  ISIS-1976: moving responsibilities from PersistenceSession to 
ObjectAdapterProvider
 add 6955272  ISIS-1976: minor cleanup
 add 2c70410  ISIS-1976: fixes StackOverflow with 
ObjectAdapterContext.specificationForViewModel()
 new 3d49fc7  Merge pull request #120 from 
apache/ISIS-1976-rethink-object-adapters

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../annotcfg/EncodableFacetAnnotation.java |  10 +-
 .../annotcfg/ParseableFacetAnnotation.java |   8 +-
 ...bleFacetAnnotationElseConfigurationFactory.java |  16 +-
 .../container/DomainObjectContainerDefault.java|  13 +-
 .../RepositoryServiceLegacyInternalDefault.java|  13 +-
 .../isis/core/metamodel/adapter/ObjectAdapter.java |  46 +-
 .../metamodel/adapter/ObjectAdapterProvider.java   | 107 +++
 .../adapter/concurrency/ConcurrencyChecking.java   | 123 +++
 .../core/metamodel/adapter/mgr/AdapterManager.java | 162 
 .../metamodel/adapter/mgr/AdapterManagerBase.java  |  50 --
 .../core/metamodel/facets/CollectionUtils.java |  12 +-
 ...ctionInvocationFacetForDomainEventAbstract.java |  16 +-
 .../actions/action/invocation/CommandUtil.java |   6 +-
 .../CollectionAccessorFacetViaAccessor.java|   6 +-
 .../CollectionAccessorFacetViaAccessorFactory.java |   8 +-
 .../clear/CollectionClearFacetFactory.java |  12 +-
 .../clear/CollectionClearFacetViaAccessor.java |  13 +-
 .../javautilcollection/CollectionFacetFactory.java |  10 +-
 .../javautilcollection/JavaArrayFacet.java |  49 +-
 .../javautilcollection/JavaCollectionFacet.java|  51 +-
 .../autocomplete/AutoCompleteFacetAbstract.java|   8 +-
 .../DomainObjectAnnotationFacetFactory.java|  11 +-
 ...atableObjectFacetForDomainObjectAnnotation.java |  14 +-
 .../object/encodeable/EncodableFacetAbstract.java  |  14 +-
 .../annotcfg/EncodableFacetFromConfiguration.java  |   4 +-
 .../encoder/EncodableFacetUsingEncoderDecoder.java |  14 +-
 .../facets/object/mixin/MixinFacetAbstract.java|   6 +-
 .../annotcfg/ParseableFacetFromConfiguration.java  |   4 +-
 .../parser/ParseableFacetUsingParser.java  |  16 +-
 .../RecreatableObjectFacetAbstract.java|  37 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java | 132 +--
 .../recreatable/RecreatableObjectFacetFactory.java |  12 +-
 ...eObjectFacetForRecreatableObjectAnnotation.java |   8 +-
 ...creatableObjectFacetForViewModelAnnotation.java |   8 +-
 .../annotation/TitleAnnotationFacetFactory.java|   8 +-
 .../annotation/TitleFacetViaTitleAnnotation.java   |  10 +-
 .../facets/object/value/ValueFacetAbstract.java|  14 +-
 .../ValueSemanticsProviderAndFacetAbstract.java|   6 +-
 .../ActionParameterAutoCompleteFacetAbstract.java  |  12 +-
 .../ActionParameterAutoCompleteFacetViaMethod.java |   8 +-
 ...ParameterAutoCompleteFacetViaM

[isis] branch master updated: ISIS-1976: further fixing some tests

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 58061be  ISIS-1976: further fixing some tests
58061be is described below

commit 58061be7d0c356fd1a58dd4eea63fd21d23b4c5a
Author: Andi Huber 
AuthorDate: Wed Sep 5 09:34:52 2018 +0200

ISIS-1976: further fixing some tests

reason: IsisSessionFactory does no longer live on the ServletContext

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 ...text_ensureCompatibleAcceptHeader_ContractTest.java | 18 +++---
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git 
a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
 
b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
index 10f5b02..c438d3a 100644
--- 
a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
+++ 
b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.viewer.restfulobjects.server;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -35,6 +38,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
@@ -48,9 +52,6 @@ import 
org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import 
org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
 import 
org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
 public abstract class 
ResourceContext_ensureCompatibleAcceptHeader_ContractTest {
 
 @Rule
@@ -71,15 +72,18 @@ public abstract class 
ResourceContext_ensureCompatibleAcceptHeader_ContractTest
 @Before
 public void setUp() throws Exception {
 deploymentCategory = DeploymentCategory.PRODUCTION;
+
+_Context.put(IsisSessionFactory.class, mockIsisSessionFactory, false);
 
 context.checking(new Expectations() {
 {
 allowing(mockHttpServletRequest).getQueryString();
 will(returnValue(""));
-allowing(mockHttpServletRequest).getServletContext();
-will(returnValue(mockServletContext));
-
allowing(mockServletContext).getAttribute("org.apache.isis.core.webapp.isisSessionFactory");
-will(returnValue(mockIsisSessionFactory));
+//[ISIS-1976] IsisSessionFactory does no longer live on the 
ServletContext
+//  allowing(mockHttpServletRequest).getServletContext();
+//  will(returnValue(mockServletContext));
+//  
allowing(mockServletContext).getAttribute("org.apache.isis.core.webapp.isisSessionFactory");
+//  will(returnValue(mockIsisSessionFactory));
 allowing(mockIsisSessionFactory).getServicesInjector();
 will(returnValue(mockServicesInjector));
 allowing(mockIsisSessionFactory).getConfiguration();



[isis] 01/07: ISIS-1976: add layer of abstraction

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 5412e90eee290c44b96f35e7a3f7b1392788c2c6
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:04:41 2018 +0200

ISIS-1976: add layer of abstraction

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/services/ServicesInjector.java  |  39 +++--
 .../adaptermanager/ObjectAdapterContext.java   | 194 +++--
 .../ObjectAdapterContext_AdapterManager.java   |   3 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  12 +-
 4 files changed, 140 insertions(+), 108 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index f80535b..d293abc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -23,11 +23,16 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
+import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Collections;
 import org.apache.isis.commons.internal.collections._Lists;
@@ -48,8 +53,6 @@ import 
org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * The repository of services, also able to inject into any object.
@@ -78,7 +81,7 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
  * services that are assignable to the type.  It's possible that this is 
an empty list.
  */
 private final Map, List> servicesAssignableToType = 
_Maps.newHashMap();
-private final Map, Object> serviceByConcreteType = 
_Maps.newHashMap();
+private final _Lazy, Object>> serviceByConcreteType = 
_Lazy.of(this::initServiceByConcreteType);
 private final Map, Method[]> methodsByClassCache = 
_Maps.newHashMap();
 private final Map, Field[]> fieldsByClassCache = 
_Maps.newHashMap();
 
@@ -143,18 +146,30 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 serviceByConcreteType.clear();
 autowire();
 }
+
+private Map, Object> initServiceByConcreteType(){
+final Map, Object> map = _Maps.newHashMap();
+for (Object service : services) {
+final Class concreteType = service.getClass();
+map.put(concreteType, service);
+}
+return map;
+}
 
 public boolean isRegisteredService(final Class cls) {
-// lazily construct cache
-if(serviceByConcreteType.isEmpty()) {
-for (Object service : services) {
-final Class concreteType = service.getClass();
-serviceByConcreteType.put(concreteType, service);
-}
-}
-return serviceByConcreteType.containsKey(cls);
+return serviceByConcreteType.get().containsKey(cls);
 }
 
+public boolean isRegisteredServiceInstance(final Object pojo) {
+if(pojo==null) {
+return false;
+}
+final Class key = pojo.getClass();
+final Object serviceInstance = serviceByConcreteType.get().get(key);
+return Objects.equals(pojo, serviceInstance);
+}
+
+
 public  void addFallbackIfRequired(final Class serviceClass, final T 
serviceInstance) {
 if(!contains(services, serviceClass)) {
 // add to beginning;
@@ -206,7 +221,7 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 public List getRegisteredServices() {
 return Collections.unmodifiableList(services);
 }
-
+
 // -- INJECT SERVICES INTO
 
 /**
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 5ebfe1f..06642b2 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java

[isis] 07/07: ISIS-1976: further simplify

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 67fd1ec509e096e60182bcab251f3a4c8d8d4777
Author: Andi Huber 
AuthorDate: Thu Sep 6 09:13:00 2018 +0200

ISIS-1976: further simplify

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../commons/internal/exceptions/_Exceptions.java   | 20 ++
 .../adaptermanager/ObjectAdapterContext.java   | 78 --
 .../ObjectAdapterContext_AdapterManager.java   | 24 ++-
 .../ObjectAdapterContext_Consistency.java  |  8 +--
 .../adaptermanager/RootAndCollectionAdapters.java  | 13 ++--
 5 files changed, 76 insertions(+), 67 deletions(-)

diff --git 
a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
 
b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 968f0f9..214936a 100644
--- 
a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ 
b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -81,6 +81,26 @@ public final class _Exceptions {
 public static IllegalStateException notImplemented() {
 return new IllegalStateException("internal error: code was reached, 
that is not implemented yet");
 }
+
+/**
+* Used to hide from the compiler the fact, that this call always throws.
+*
+* {
+*throw unexpectedCodeReach();
+*return 0; // won't compile: unreachable code
+*}
+*
+* hence ...
+*
+* {
+*throwUnexpectedCodeReach();
+*return 0;
+*}
+*
+*/
+public static void throwUnexpectedCodeReach() {
+throw unexpectedCodeReach();
+}
 
 /**
  * Used to hide from the compiler the fact, that this call always throws.
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 477c873..a665d20 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -26,7 +26,6 @@ import java.util.function.Function;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.ensure.IsisAssertException;
@@ -137,6 +136,7 @@ public class ObjectAdapterContext {
 
 private final Cache cache = new Cache();
 
+@SuppressWarnings("unused")
 private final PersistenceSession persistenceSession; 
 private final ServicesInjector servicesInjector;
 private final SpecificationLoader specificationLoader;
@@ -179,50 +179,51 @@ public class ObjectAdapterContext {
 
 // -- CACHING POJO
 
-@Deprecated // don't expose caching
-protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
+// package private // don't expose caching
+ObjectAdapter lookupAdapterByPojo(Object pojo) {
 return cache.lookupAdapterByPojo(pojo);
 }
 
-@Deprecated // don't expose caching
-public boolean containsAdapterForPojo(Object pojo) {
+// package private // don't expose caching
+boolean containsAdapterForPojo(Object pojo) {
 return lookupAdapterByPojo(pojo)!=null;
 }
 
 // -- CACHING OID
 
-@Deprecated // don't expose caching
-protected ObjectAdapter lookupAdapterById(Oid oid) {
+// package private // don't expose caching
+ObjectAdapter lookupAdapterById(Oid oid) {
 return cache.lookupAdapterById(oid);
 }
 
 // -- CACHING BOTH
 
-@Deprecated // don't expose caching
-public void addAdapter(ObjectAdapter adapter) {
+// package private // don't expose caching
+void addAdapter(ObjectAdapter adapter) {
 cache.addAdapter(adapter);
 }
 
-@Deprecated // don't expose caching
-public void removeAdapter(ObjectAdapter adapter) {
+// package private // don't expose caching
+void removeAdapter(ObjectAdapter adapter) {
 cache.removeAdapter(adapter);
 }
 
 // -- CACHE CONSISTENCY
 
-@Deprecated // don't expose caching
-public void ensureMapsConsistent(final ObjectAdapter adapter) {
+// package private // don't expose caching
+void ensureMapsConsistent(final ObjectAdapter adapter) {
 consistencyMixin.ensureMapsConsistent(adapter);
 }
 
-@Deprecated // don't expose caching
-public void ensureMaps

[isis] branch ISIS-1976-rethink-object-adapters updated (5a8b180 -> 67fd1ec)

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 5a8b180  ISIS-1976: improve the ObjectAdapterProvider interface (API)
 new 5412e90  ISIS-1976: add layer of abstraction
 new d8341fe  ISIS-1976: make ObjectAdapter's oid immutable
 new dd69b28  ISIS-1976: improve code readability
 new 369ebf6  ISIS-1976: restore check consistency to also check adapter's 
object equality
 new 234421b  ISIS-1976: remove code that seems for optimization
 new 2772581  ISIS-1976: simplify
 new 67fd1ec  ISIS-1976: further simplify

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../commons/internal/exceptions/_Exceptions.java   |  20 ++
 .../isis/core/metamodel/adapter/ObjectAdapter.java |  24 +-
 .../core/metamodel/services/ServicesInjector.java  |  41 ++-
 .../runtime/persistence/adapter/PojoAdapter.java   |  11 -
 .../adaptermanager/ObjectAdapterContext.java   | 320 ++---
 .../ObjectAdapterContext_AdapterManager.java   |  28 +-
 .../ObjectAdapterContext_Consistency.java  |  31 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  12 +-
 .../adaptermanager/RootAndCollectionAdapters.java  |  16 +-
 9 files changed, 258 insertions(+), 245 deletions(-)



[isis] 04/07: ISIS-1976: restore check consistency to also check adapter's object equality

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 369ebf6c7c20afb0147f38c8b1034a6e1b639c6f
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:51:59 2018 +0200

ISIS-1976: restore check consistency to also check adapter's object
equality

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../ObjectAdapterContext_Consistency.java   | 21 +
 1 file changed, 21 insertions(+)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
index 2d15fb0..30746a1 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
@@ -118,5 +118,26 @@ class ObjectAdapterContext_Consistency {
 + mapName
 + ": provided adapter's OID: " + adapterOid + ", \n"
 + "but map's adapter's OID was: " + 
adapterAccordingToMap.getOid());
+
+ensureThatArg(
+adapter.getObject(), 
equalTo(adapterAccordingToMap.getObject()),
+()->String.format("mismatch in %s (oid='%s')"
++ ": provided adapter's hash: %s (pojo='%s'), \n"
++ "but map's adapter's hash was: %s (pojo='%s')",
+mapName, adapterOid,
+Integer.toHexString(adapter.hashCode()), 
""+adapter.getObject(),
+Integer.toHexString(adapterAccordingToMap.hashCode()), 
""+adapterAccordingToMap.getObject()
+));
+
+//  TODO[ISIS-1976] too strict, remove
+//ensureThatArg(
+//adapter, equalTo(adapterAccordingToMap),
+//()->String.format("mismatch in %s (oid='%s')"
+//+ ": provided adapter's hash: %s (pojo='%s'), \n"
+//+ "but map's adapter's hash was: %s (pojo='%s')",
+//mapName, adapterOid,
+//Integer.toHexString(adapter.hashCode()), 
""+adapter.getObject(),
+//
Integer.toHexString(adapterAccordingToMap.hashCode()), 
""+adapterAccordingToMap.getObject()
+//));
 }
 }
\ No newline at end of file



[isis] 05/07: ISIS-1976: remove code that seems for optimization

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 234421b0ee5502a7ab491349e0b73cee1872627e
Author: Andi Huber 
AuthorDate: Thu Sep 6 07:19:28 2018 +0200

ISIS-1976: remove code that seems for optimization

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../persistence/adaptermanager/ObjectAdapterContext.java| 13 +
 .../adaptermanager/ObjectAdapterContext_AdapterManager.java |  5 ++---
 2 files changed, 3 insertions(+), 15 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 18af78f..f942f5a 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.commons.ensure.IsisAssertException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -350,18 +351,6 @@ public class ObjectAdapterContext {
 }
 }
 
-@Deprecated // don't expose caching
-public void addAdapterHonoringSpecImmutability(Object pojo, ObjectAdapter 
adapter) {
-// add all aggregated collections
-final ObjectSpecification objSpec = adapter.getSpecification();
-if (!adapter.isParentedCollection() || adapter.isParentedCollection() 
&& !objSpec.isImmutable()) {
-cache.putPojo(pojo, adapter);
-}
-
-// order is important - add to pojo map first, then identity map
-oidAdapterMap().add(adapter.getOid(), adapter);
-}
-
 public ObjectAdapter disposableAdapterForViewModel(Object viewModelPojo) {
 final ObjectSpecification objectSpecification = 
 
specificationLoader.loadSpecification(viewModelPojo.getClass());
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
index 7936a9d..1af091f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
@@ -23,9 +23,7 @@ import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
@@ -171,7 +169,8 @@ class ObjectAdapterContext_AdapterManager {
 return adapter;
 }
 
-objectAdapterContext.addAdapterHonoringSpecImmutability(pojo, adapter);
+Assert.assertTrue("expected same", Objects.equals(adapter.getObject(), 
pojo));
+objectAdapterContext.addAdapter(adapter);
 
 // must inject after mapping, otherwise infinite loop
 servicesInjector.injectServicesInto(pojo);



[isis] 02/07: ISIS-1976: make ObjectAdapter's oid immutable

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit d8341fe5f96207fc03787534d3ec710119ec4d1a
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:29:22 2018 +0200

ISIS-1976: make ObjectAdapter's oid immutable

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 24 +++---
 .../runtime/persistence/adapter/PojoAdapter.java   | 11 --
 .../adaptermanager/ObjectAdapterContext.java   | 12 ---
 .../ObjectAdapterContext_Consistency.java  |  2 +-
 4 files changed, 13 insertions(+), 36 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index fc67020..86dc643 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -487,18 +487,18 @@ public interface ObjectAdapter extends Instance {
  */
 ObjectAdapter withPojo(Object newPojo);
 
-@Deprecated
-public static interface Friend {
-  /**
-  * Sometimes it is necessary to manage the replacement of the underlying
-  * domain object (by another component such as an object store). This 
method
-  * allows the adapter to be kept while the domain object is replaced.
-  */
- void replacePojo(Object pojo);
-}
-
-@Deprecated
-Friend friend();
+//@Deprecated
+//public static interface Friend {
+//  /**
+//  * Sometimes it is necessary to manage the replacement of the underlying
+//  * domain object (by another component such as an object store). This 
method
+//  * allows the adapter to be kept while the domain object is replaced.
+//  */
+// void replacePojo(Object pojo);
+//}
+//
+//@Deprecated
+//Friend friend();
 
 
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index f80048c..c335815 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -407,15 +407,4 @@ public class PojoAdapter extends InstanceAbstract 
implements ObjectAdapter {
 return new PojoAdapter(newPojo, oid, authenticationSession, 
specificationLoader, persistenceSession);
 }
 
-
-@Override
-public Friend friend() {
-return new Friend() {
-@Override
-public void replacePojo(Object pojo) {
-PojoAdapter.this.pojo = pojo;
-}
-};
-}
-
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 06642b2..18af78f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -502,23 +502,11 @@ public class ObjectAdapterContext {
 return accessor.getProperty(ownerAdapter, 
InteractionInitiatedBy.FRAMEWORK);
 }
 
-/**
- * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
- */
 @Deprecated
 public ObjectAdapter remapRecreatedPojo(ObjectAdapter adapter, final 
Object pojo) {
 final ObjectAdapter newAdapter = adapter.withPojo(pojo);
 cache.removeAdapter(adapter);
 cache.removeAdapter(newAdapter);
-
-//FIXME[ISIS-1976] can't remove yet, does have strange side-effects 
-if(true){
-adapter.friend().replacePojo(pojo);
-mapAndInjectServices(adapter);
-return adapter;
-}
-//---
-
 mapAndInjectServices(newAdapter);
 return newAdapter;
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
index d078639..2d15fb0 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
@@ -113,7 +113,7 @@ class

[isis] 06/07: ISIS-1976: simplify

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2772581ba9f51756105f8f76c30d4b219272f3f4
Author: Andi Huber 
AuthorDate: Thu Sep 6 08:06:21 2018 +0200

ISIS-1976: simplify

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adaptermanager/ObjectAdapterContext.java   | 69 --
 .../adaptermanager/RootAndCollectionAdapters.java  |  7 +++
 2 files changed, 30 insertions(+), 46 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index f942f5a..477c873 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -22,18 +22,13 @@ import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
 import java.util.function.Function;
-import java.util.function.Supplier;
-
-import com.google.common.cache.Cache;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.commons.ensure.IsisAssertException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
@@ -49,9 +44,7 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.memento.Data;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
 
 /**
  * Encapsulate ObjectAdpater life-cycling.  
@@ -203,10 +196,6 @@ public class ObjectAdapterContext {
 return cache.lookupAdapterById(oid);
 }
 
-private OidAdapterHashMap oidAdapterMap() {
-return cache.oidAdapterMap;
-}
-
 // -- CACHING BOTH
 
 @Deprecated // don't expose caching
@@ -377,38 +366,40 @@ public class ObjectAdapterContext {
  * Note that there is no management of {@link Version}s here. That is
  * because the {@link PersistenceSession} is expected to manage this.
  *
- * @param hintRootOid - allow a different persistent root oid to be 
provided.
+ * @param newRootOid - allow a different persistent root oid to be 
provided.
  * @param session 
  */
 @Deprecated // expected to be moved
-public void remapAsPersistent(final ObjectAdapter adapter, RootOid 
hintRootOid, PersistenceSession session) {
+public void remapAsPersistent(final ObjectAdapter adapter, RootOid 
newRootOid, PersistenceSession session) {
 
-final ObjectAdapter rootAdapter = adapter.getAggregateRoot();  // 
TODO: REVIEW: think this is redundant; would seem this method is only ever 
called for roots anyway.
+Objects.requireNonNull(newRootOid);
+
+ // TODO: REVIEW: think this is redundant; would seem this method is only 
ever called for roots anyway.
+final ObjectAdapter rootAdapter = adapter.getAggregateRoot();  
 final RootOid transientRootOid = (RootOid) rootAdapter.getOid();
+
+Assert.assertTrue("expected same", Objects.equals(adapter, 
rootAdapter));
 
 final RootAndCollectionAdapters rootAndCollectionAdapters = 
 new RootAndCollectionAdapters(adapter, adapterManagerMixin);
 
-removeFromCache(rootAndCollectionAdapters, transientRootOid);
+Assert.assertTrue("expected same", 
Objects.equals(rootAndCollectionAdapters.getRootAdapter().getOid(), 
transientRootOid));
+removeFromCache(rootAndCollectionAdapters);
 
-// intended for testing (bit nasty)
 final RootOid persistedRootOid;
-if(hintRootOid != null) {
-if(hintRootOid.isTransient()) {
+{
+if(newRootOid.isTransient()) {
 throw new IsisAssertException("hintRootOid must be 
persistent");
 }
-final ObjectSpecId hintRootOidObjectSpecId = 
hintRootOid.getObjectSpecId();
+final ObjectSpecId hintRootOidObjectSpecId = 
newRootOid.getObjectSpecId();
 final ObjectSpecId adapterObjectSpec

[isis] 03/07: ISIS-1976: improve code readability

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit dd69b286b222c0126a7f15c2d51b3937e94cf6f2
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:36:00 2018 +0200

ISIS-1976: improve code readability

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/services/ServicesInjector.java| 20 +++-
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index d293abc..c345f38 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -146,15 +146,6 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 serviceByConcreteType.clear();
 autowire();
 }
-
-private Map, Object> initServiceByConcreteType(){
-final Map, Object> map = _Maps.newHashMap();
-for (Object service : services) {
-final Class concreteType = service.getClass();
-map.put(concreteType, service);
-}
-return map;
-}
 
 public boolean isRegisteredService(final Class cls) {
 return serviceByConcreteType.get().containsKey(cls);
@@ -457,6 +448,17 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 .forEach(filteredServicesAndContainer::add);
 }
 
+// -- LAZY INIT
+
+private Map, Object> initServiceByConcreteType(){
+final Map, Object> map = _Maps.newHashMap();
+for (Object service : services) {
+final Class concreteType = service.getClass();
+map.put(concreteType, service);
+}
+return map;
+}
+
 // -- REFLECTIVE PREDICATES
 
 private static final Predicate isOfType(final Class cls) {



[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1899: post release ...

2018-09-07 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to 
refs/heads/ISIS-1976-rethink-object-adapters by this push:
 new 75255be  ISIS-1899: post release ...
75255be is described below

commit 75255be1de9613c4a659c593d785675d2d06f55b
Author: Andi Huber 
AuthorDate: Fri Sep 7 19:02:41 2018 +0200

ISIS-1899: post release ...

bump BASELINE to next iteration -> 2.0.0-M2
simple-app/helloworld ... simplify web descriptors (web.xml)
simple-app/helloworld ... bump DN-5 version
---
 .gitlab-ci.yml |   2 +-
 example/application/helloworld/pom.xml |   4 +-
 .../helloworld/src/main/webapp/WEB-INF/web.xml | 278 +--
 example/application/simpleapp/pom.xml  |   4 +-
 .../webapp/src/main/webapp/WEB-INF/web.xml | 305 +
 5 files changed, 33 insertions(+), 560 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 811db55..e61ad07 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,7 +16,7 @@
 image: maven:3.5.3-jdk-8
 
 before_script:
-  - export BASELINE=2.0.0-M1
+  - export BASELINE=2.0.0-M2
   - export REVISION=$BASELINE.$(date +%Y%m%d)-$(date +%H%M)-$(echo 
$CI_COMMIT_SHA | cut -c1-8)
 
 services:
diff --git a/example/application/helloworld/pom.xml 
b/example/application/helloworld/pom.xml
index 3c7a73a..ee0fcbe 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -36,7 +36,7 @@
 war
 
 
-2.0.0-M1
+2.0.0-M2-SNAPSHOT
 ${revision}
 
 1.8
@@ -44,7 +44,7 @@
 
-parameters
 
 
-5.1.6
+5.1.11
 
 UTF-8
 
UTF-8
diff --git a/example/application/helloworld/src/main/webapp/WEB-INF/web.xml 
b/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
index a6c042c..5a7e71a 100644
--- a/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
+++ b/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
@@ -28,21 +28,20 @@
 about/index.html
 
 
-
-
-
org.apache.shiro.web.env.EnvironmentLoaderListener
-
-
-
-ShiroFilter
-org.apache.shiro.web.servlet.ShiroFilter
-
-
-
-ShiroFilter
-/*
-
-
+   
+   
org.apache.isis.core.webapp.IsisWebAppContextListener
+   
+   
+   
+   isis.viewer.wicket.app
+   
domainapp.webapp.HelloWorldApplication
+   
+
+   
+   
+   
+   
+   
 
 
 
@@ -77,253 +76,4 @@
 -->
 
 
-
-
-isis.viewers
-wicket,restfulobjects
-
-
-
-
-
-
-IsisLogOnExceptionFilter
-
org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter
-
-
-IsisLogOnExceptionFilter
-/wicket/*
-
-
-IsisLogOnExceptionFilter
-/restful/*
-
-
-
-
-
-
-ResourceCachingFilter
-
org.apache.isis.core.webapp.content.ResourceCachingFilter
-
-CacheTime
-86400
-
-
-
-ResourceCachingFilter
-*.css
-
-
-ResourceCachingFilter
-*.png
-
-
-ResourceCachingFilter
-*.jpg
-
-
-ResourceCachingFilter
-*.jpeg
-
-
-ResourceCachingFilter
-*.gif
-
-
-ResourceCachingFilter
-*.svg
-
-
-ResourceCachingFilter
-*.js
-
-
-ResourceCachingFilter
-*.html
-
-
-ResourceCachingFilter
-*.swf
-
-
-
-Resource
-
org.apache.isis.core.webapp.content.ResourceServlet
-
-
-Resource
-*.css
-
-
-Resource
-*.png
-
-
-Resource
-*.jpg
-
-
-Resource
-*.jpeg
-
-
-Resource
-*.gif
-
-
-Resource
-*.svg
-
-
-Resource
-*.js
-
-
-Resource
-*.html
-
-
-Resource
-*.swf
-
-
-
-
-WebjarsServlet
-org.webjars.servlet.WebjarsServlet
-
-disableCache
-false
-
-2
-
-
-WebjarsServlet
-/webjars/*
-
-
-
-
-
-
-WicketFilter
-
org.apache.wicket.protocol.http.WicketFilter
-
-applicationClassName
-domainapp.webapp.HelloWorldApplication
-
-
-
-WicketFilter
-/wicket/*
-
-
-
-
-configuration
-
-development
-
-
-   
-
-
-
-
-
-
-
org.jboss.resteasy.plugins.server.servlet.ResteasyBoo

[isis] branch ISIS-1976-rethink-object-adapters updated (986a797 -> ce78f27)

2018-09-07 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 986a797  ISIS-1976: prepare for merge (PR 121)
 add ce78f27  ISIS-1982: UI: CollectionSelectionPanel replace split button 
by normal button

No new revisions were added by this update.

Summary of changes:
 .../components/collection/selector/CollectionSelectorPanel.html   | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)



[isis] branch master updated: ISIS-1982: UI: CollectionSelectionPanel replace split button by normal button

2018-09-07 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new ce78f27  ISIS-1982: UI: CollectionSelectionPanel replace split button 
by normal button
ce78f27 is described below

commit ce78f27259e29e876963b3688fc76d011b91d080
Author: Andi Huber 
AuthorDate: Fri Sep 7 16:26:53 2018 +0200

ISIS-1982: UI: CollectionSelectionPanel replace split button by normal
button

Task-Url: https://issues.apache.org/jira/browse/ISIS-1982
---
 .../components/collection/selector/CollectionSelectorPanel.html   | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.html
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.html
index 8bec51a..354f30e 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.html
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/selector/CollectionSelectorPanel.html
@@ -23,12 +23,10 @@
 
 
 
-
-
-
-
 
-
+   
+
+ 
 
 
 



[isis] 01/01: Merge pull request #122 from blaugold/ISIS-1979

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 7baf89b4b278193cbcb01d7ee691f8c7175b682f
Merge: ce78f27 53332a2
Author: Andi Huber 
AuthorDate: Sat Sep 8 17:53:22 2018 +0200

Merge pull request #122 from blaugold/ISIS-1979

ISIS-1979: Refactor logging in headless runtime and prevent configuri…

 .../runtime/logging/IsisLoggingConfigurer.java | 13 ---
 .../HeadlessWithBootstrappingAbstract.java | 41 -
 .../isis/core/runtime/headless/IsisSystem.java | 42 +++---
 .../runtime/headless/IsisSystemBootstrapper.java   | 35 +-
 .../runtime/headless/logging/LeveledLogger.java| 36 +++
 .../core/runtime/headless/logging/LogStream.java   | 31 
 6 files changed, 77 insertions(+), 121 deletions(-)



[isis] branch master updated: ISIS-1979: add missing license header

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 41e2e32  ISIS-1979: add missing license header
41e2e32 is described below

commit 41e2e3244b8f812730a5ed44cf7eb576a9cfc5d3
Author: Andi Huber 
AuthorDate: Sat Sep 8 18:17:49 2018 +0200

ISIS-1979: add missing license header

also fixes a bug in LogStream, on a method that is not used anyway

Task-Url: https://issues.apache.org/jira/browse/ISIS-1979
---
 .../runtime/headless/logging/LeveledLogger.java | 21 -
 .../core/runtime/headless/logging/LogStream.java|  6 +++---
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
index ce5d5a1..903bef6 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java
@@ -1,3 +1,22 @@
+/*
+ *  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.runtime.headless.logging;
 
 import org.slf4j.Logger;
@@ -5,7 +24,7 @@ import org.slf4j.event.Level;
 
 public class LeveledLogger {
 
-private Logger logger;
+private final Logger logger;
 private Level level;
 
 public LeveledLogger(final Logger logger, final Level level) {
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
index 1850285..52f38d1 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LogStream.java
@@ -62,9 +62,9 @@ public class LogStream extends OutputStream {
 }
 
 @Override
-public void write(int b) {
-String str = Integer.toString(b);
-this.buf.append(str);
+public void write(int codePoint) {
+char[] chars = Character.toChars(codePoint);
+this.buf.append(chars);
 }
 
 @Override



[isis] branch master updated (ce78f27 -> 7baf89b)

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from ce78f27  ISIS-1982: UI: CollectionSelectionPanel replace split button 
by normal button
 add 53332a2  ISIS-1979: Refactor logging in headless runtime and prevent 
configuring log4j twice
 new 7baf89b  Merge pull request #122 from blaugold/ISIS-1979

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../runtime/logging/IsisLoggingConfigurer.java | 13 ---
 .../HeadlessWithBootstrappingAbstract.java | 41 -
 .../isis/core/runtime/headless/IsisSystem.java | 42 +++---
 .../runtime/headless/IsisSystemBootstrapper.java   | 35 +-
 .../runtime/headless/logging/LeveledLogger.java| 36 +++
 .../core/runtime/headless/logging/LogStream.java   | 31 
 6 files changed, 77 insertions(+), 121 deletions(-)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java



[isis] 03/06: Merge remote-tracking branch 'apache/ISIS-1976-rethink-object-adapters' into ISIS-1976-rethink-object-adapters

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 563fbef9c906e559078122f85d9cf3a0332b523f
Merge: 3696616 ddf185a
Author: Andi Huber 
AuthorDate: Sat Sep 8 18:55:29 2018 +0200

Merge remote-tracking branch 'apache/ISIS-1976-rethink-object-adapters' 
into ISIS-1976-rethink-object-adapters




[isis] 05/06: ISIS-1976: kick in new OidFactory

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ef06f4f0afa77a976c366d7835f8aaf9805a92e6
Author: Andi Huber 
AuthorDate: Sun Sep 9 00:15:36 2018 +0200

ISIS-1976: kick in new OidFactory

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 35 +++---
 .../factories/OidFactory_Builder.java  |  7 -
 2 files changed, 10 insertions(+), 32 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index 776c4db..3e1041f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -19,6 +19,7 @@
 package org.apache.isis.core.runtime.system.persistence.adaptermanager;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -108,37 +109,9 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 return existing;
 }
 
-final RootOid rootOid2 = oidFactory.oidFor(pojo);
-
-//if(rootOid2==null) {
-//System.err.println("!!! "+pojo);
-//_Exceptions.throwUnexpectedCodeReach();
-//}
-//
-//if(rootOid2!=null && rootOid2.isValue()) {
-//return 
objectAdapterContext.getFactories().createRootAdapter(pojo, null);
-//}
-
-// -- legacy code
-
-final ObjectAdapter existingOrValueAdapter = 
existingOrValueAdapter(pojo);
-if(existingOrValueAdapter != null) {
-return existingOrValueAdapter;
-}
-
-final RootOid rootOid = 
objectAdapterContext.createTransientOrViewModelOid(pojo);
-
-  //at this point we know its not a value
-if(rootOid2==null) {
-System.err.println("!!! expected "+rootOid);
-_Exceptions.throwUnexpectedCodeReach();
-}
-
-
-if(rootOid2!=null && rootOid2.isValue()) {
-Assert.assertEquals("expected same", rootOid, null);
-} else if(!rootOid.isTransient()) {
-Assert.assertEquals("expected same", rootOid, rootOid2);
+final RootOid rootOid = oidFactory.oidFor(pojo);
+if(rootOid.isValue()) {
+return objectAdapterContext.getFactories().createRootAdapter(pojo, 
null); 
 }
 
 final ObjectAdapter newAdapter = 
objectAdapterContext.getFactories().createRootAdapter(pojo, rootOid);
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
index a7bb938..bda33ab 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java
@@ -21,6 +21,7 @@ package 
org.apache.isis.core.runtime.system.persistence.adaptermanager.factories
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.function.Function;
 
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
@@ -52,11 +53,15 @@ class OidFactory_Builder implements OidFactoryBuilder {
 
 final ObjectSpecification spec = specProvider.apply(pojo);
 
-return handler.stream()
+final RootOid rootOid = handler.stream()
 .filter(h->h.isHandling(pojo, spec))
 .findFirst()
 .map(h->h.oidFor(pojo, spec))
 .orElse(null);
+
+Objects.requireNonNull(rootOid, "Could not create an Oid for 
pojo: "+pojo);
+
+return rootOid;
 }
 
 };



[isis] 06/06: ISIS-1976: let OAs for values also have an Oid

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2ce76eb32b2e1d363b8957d3e28cd4086dd499af
Author: Andi Huber 
AuthorDate: Sun Sep 9 01:10:04 2018 +0200

ISIS-1976: let OAs for values also have an Oid

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/oid/Oid.java   |  19 ++-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |   4 -
 .../runtime/persistence/adapter/PojoAdapter.java   |  12 +-
 .../PersistenceSessionServiceInternalDefault.java  |   4 +-
 .../adaptermanager/ObjectAdapterContext.java   |   2 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 132 ++---
 .../persistence/adaptermanager/OidProviders.java   |  21 +---
 .../model/mementos/ObjectAdapterMemento.java   |   5 -
 8 files changed, 27 insertions(+), 172 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index 0b9a201..e087e12 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -59,16 +59,15 @@ public interface Oid extends Encodable {
 boolean isViewModel();
 
 boolean isPersistent();
+
+default boolean isValue() {
+return false;
+}
 
 public static enum State {
-PERSISTENT("P"),
-TRANSIENT("T"),
-VIEWMODEL("V");
-
-private final String code;
-private State(final String code) {
-this.code = code;
-}
+PERSISTENT,
+TRANSIENT,
+VIEWMODEL;
 
 public boolean isTransient() {
 return this == TRANSIENT;
@@ -80,10 +79,6 @@ public interface Oid extends Encodable {
 return this == PERSISTENT;
 }
 
-public String getCode() {
-return code;
-}
-
 public static State from(final Bookmark bookmark) {
 final Bookmark.ObjectState objectState = bookmark.getObjectState();
 return from(objectState);
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 2f67f7e..7cbb26d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -284,10 +284,6 @@ public class RootOid implements TypedOid, Serializable {
 
 // -- ROOT-ID SUPPORT FOR VALUE
 
-public boolean isValue() {
-return false;
-}
-
 private RootOid() { identifier=null; objectSpecId=null; state=null; };
 
 private static final RootOid VALUE_OID = new RootOid() {
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index a83c9a8..da29ebe 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.runtime.persistence.adapter;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,13 +54,7 @@ public class PojoAdapter extends InstanceAbstract implements 
ObjectAdapter {
 private final SpecificationLoader specificationLoader;
 private final PersistenceSession persistenceSession;
 
-/**
- * can be {@link #replacePojo(Object) replace}d.
- */
 private final Object pojo;
-/**
- * can be {@link #replaceOid(Oid) replace}d.
- */
 private final Oid oid;
 
 /**
@@ -81,7 +77,7 @@ public class PojoAdapter extends InstanceAbstract implements 
ObjectAdapter {
 throw new IsisException("Adapter can't be used to adapt an 
adapter: " + pojo);
 }
 this.pojo = pojo;
-this.oid = oid;
+this.oid = requires(oid, "oid");
 }
 
 // -- getSpecification
@@ -122,7 +118,7 @@ public class PojoAdapter extends InstanceAbstract 
implements ObjectAdapter {
 
 @Override
 public boolean isValue() {
-return oid == null;
+return oid.isValue();
 }
 
 // -- isTransient, representsPersistent, isDestroyed
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/persistsession/PersistenceSessionServiceInternalDefault.java
 
b/core/runtime/src/main/java/or

[isis] 01/06: ISIS-1899: post release ...

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f87ea18050f8cab39b674d61bd2fa87f3a451e2e
Author: Andi Huber 
AuthorDate: Fri Sep 7 19:02:41 2018 +0200

ISIS-1899: post release ...

bump BASELINE to next iteration -> 2.0.0-M2
simple-app/helloworld ... simplify web descriptors (web.xml)
simple-app/helloworld ... bump DN-5 version
---
 .gitlab-ci.yml |   2 +-
 example/application/helloworld/pom.xml |   4 +-
 .../helloworld/src/main/webapp/WEB-INF/web.xml | 278 +--
 example/application/simpleapp/pom.xml  |   4 +-
 .../webapp/src/main/webapp/WEB-INF/web.xml | 305 +
 5 files changed, 33 insertions(+), 560 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 811db55..e61ad07 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,7 +16,7 @@
 image: maven:3.5.3-jdk-8
 
 before_script:
-  - export BASELINE=2.0.0-M1
+  - export BASELINE=2.0.0-M2
   - export REVISION=$BASELINE.$(date +%Y%m%d)-$(date +%H%M)-$(echo 
$CI_COMMIT_SHA | cut -c1-8)
 
 services:
diff --git a/example/application/helloworld/pom.xml 
b/example/application/helloworld/pom.xml
index 3c7a73a..ee0fcbe 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -36,7 +36,7 @@
 war
 
 
-2.0.0-M1
+2.0.0-M2-SNAPSHOT
 ${revision}
 
 1.8
@@ -44,7 +44,7 @@
 
-parameters
 
 
-5.1.6
+5.1.11
 
 UTF-8
 
UTF-8
diff --git a/example/application/helloworld/src/main/webapp/WEB-INF/web.xml 
b/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
index a6c042c..5a7e71a 100644
--- a/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
+++ b/example/application/helloworld/src/main/webapp/WEB-INF/web.xml
@@ -28,21 +28,20 @@
 about/index.html
 
 
-
-
-
org.apache.shiro.web.env.EnvironmentLoaderListener
-
-
-
-ShiroFilter
-org.apache.shiro.web.servlet.ShiroFilter
-
-
-
-ShiroFilter
-/*
-
-
+   
+   
org.apache.isis.core.webapp.IsisWebAppContextListener
+   
+   
+   
+   isis.viewer.wicket.app
+   
domainapp.webapp.HelloWorldApplication
+   
+
+   
+   
+   
+   
+   
 
 
 
@@ -77,253 +76,4 @@
 -->
 
 
-
-
-isis.viewers
-wicket,restfulobjects
-
-
-
-
-
-
-IsisLogOnExceptionFilter
-
org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter
-
-
-IsisLogOnExceptionFilter
-/wicket/*
-
-
-IsisLogOnExceptionFilter
-/restful/*
-
-
-
-
-
-
-ResourceCachingFilter
-
org.apache.isis.core.webapp.content.ResourceCachingFilter
-
-CacheTime
-86400
-
-
-
-ResourceCachingFilter
-*.css
-
-
-ResourceCachingFilter
-*.png
-
-
-ResourceCachingFilter
-*.jpg
-
-
-ResourceCachingFilter
-*.jpeg
-
-
-ResourceCachingFilter
-*.gif
-
-
-ResourceCachingFilter
-*.svg
-
-
-ResourceCachingFilter
-*.js
-
-
-ResourceCachingFilter
-*.html
-
-
-ResourceCachingFilter
-*.swf
-
-
-
-Resource
-
org.apache.isis.core.webapp.content.ResourceServlet
-
-
-Resource
-*.css
-
-
-Resource
-*.png
-
-
-Resource
-*.jpg
-
-
-Resource
-*.jpeg
-
-
-Resource
-*.gif
-
-
-Resource
-*.svg
-
-
-Resource
-*.js
-
-
-Resource
-*.html
-
-
-Resource
-*.swf
-
-
-
-
-WebjarsServlet
-org.webjars.servlet.WebjarsServlet
-
-disableCache
-false
-
-2
-
-
-WebjarsServlet
-/webjars/*
-
-
-
-
-
-
-WicketFilter
-
org.apache.wicket.protocol.http.WicketFilter
-
-applicationClassName
-domainapp.webapp.HelloWorldApplication
-
-
-
-WicketFilter
-/wicket/*
-
-
-
-
-configuration
-
-development
-
-
-   
-
-
-
-
-
-
-
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
-
-
-
-
-javax.ws.rs.Application
-
org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication
-
-
-
-resteasy.servlet.mapping.prefix
-/r

[isis] 02/06: ISIS-1899: post release ... trying to fix CI build

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 36966163e275f207ae0c25171a71f31049ce3a4c
Author: Andi Huber 
AuthorDate: Fri Sep 7 19:43:47 2018 +0200

ISIS-1899: post release ... trying to fix CI build

simple-app/helloworld ... override all DN-5 dependency versions as
provided by incode parent pom
---
 example/application/helloworld/pom.xml | 12 +---
 example/application/simpleapp/pom.xml  | 12 ++--
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/example/application/helloworld/pom.xml 
b/example/application/helloworld/pom.xml
index ee0fcbe..50e957f 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -43,9 +43,15 @@
 1.8
 
-parameters
 
-
-5.1.11
-
+   
+
0.0.5
+   
5.0.2
+   5.1.11
+   5.1.9
+   
5.1.0-release
 UTF-8
 
UTF-8
 
diff --git a/example/application/simpleapp/pom.xml 
b/example/application/simpleapp/pom.xml
index 9a41b13..c1f5a83 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -45,8 +45,16 @@
 1.8
 
-parameters
 
-
-5.1.11
+
+
0.0.5
+   
5.0.2
+   5.1.11
+   5.1.9
+   
5.1.0-release
+
 
 2.3.4
 



[isis] 04/06: ISIS-1976: refactoring OA creation into separated OidProviders

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 05d91d57b2565df02e93e38e6c08f04ef0e56ba2
Author: Andi Huber 
AuthorDate: Sat Sep 8 23:53:39 2018 +0200

ISIS-1976: refactoring OA creation into separated OidProviders

(intermediate step)

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../apache/isis/core/commons/ensure/Assert.java|  10 +-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  23 +++-
 .../specloader/specimpl/FacetedMethodsBuilder.java |  18 
 .../persistence/PersistenceSession5_Decouple.java  |   2 +
 .../runtime/persistence/adapter/PojoAdapter.java   |   2 -
 .../adaptermanager/ObjectAdapterContext.java   |  29 ++
 .../ObjectAdapterContext_NewIdentifier.java|   3 +
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  53 +-
 .../adaptermanager/OidAdapterHashMap.java  |  13 ++-
 .../persistence/adaptermanager/OidProviders.java   | 116 +
 .../adaptermanager/factories/OidFactory.java   |  48 +
 .../factories/OidFactory_Builder.java  |  66 
 .../model/mementos/ObjectAdapterMemento.java   |   5 +
 13 files changed, 340 insertions(+), 48 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java 
b/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java
index 197be18..77f9acf 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/commons/ensure/Assert.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.commons.ensure;
 
+import java.util.Objects;
+
 public final class Assert {
 
 public static void assertFalse(final String message, final boolean flag) {
@@ -46,5 +48,11 @@ public final class Assert {
 throw new IsisAssertException(message + (target == null ? "" : (": 
" + target)));
 }
 }
-
+
+public static void assertEquals(final String message, Object left, Object 
right) {
+if (!Objects.equals(left, right)) {
+throw new IsisAssertException(message + String.format(": '%s' != 
'%s' ", ""+left, ""+right));
+}
+}
+
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 3136020..2f67f7e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -204,8 +204,6 @@ public class RootOid implements TypedOid, Serializable {
 return state.isPersistent();
 }
 
-
-
 // -- Version
 
 @Override
@@ -284,7 +282,28 @@ public class RootOid implements TypedOid, Serializable {
 return enString();
 }
 
+// -- ROOT-ID SUPPORT FOR VALUE
+
+public boolean isValue() {
+return false;
+}
+
+private RootOid() { identifier=null; objectSpecId=null; state=null; };
+
+private static final RootOid VALUE_OID = new RootOid() {
+private static final long serialVersionUID = 1L;
 
+@Override
+public boolean isValue() {
+return true;
+}
+};
+
+public static RootOid value() {
+return VALUE_OID;
+}
+
+// --
 
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index bd24115..4d77fdf 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.Set;
 
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -164,14 +163,6 @@ public class FacetedMethodsBuilder {
 
 }
 
-@Override
-protected void finalize() throws Throwable {
-super.finalize();
-if (LOG.isDebugEnabled()) {
-LOG.debug("finalizing inspector {}", this);
-}
-}
-
 // 

 // Class and stuff immediately derived from class
 // 

@@ -214,15 +205,6 @@ public class FacetedMethodsBuilder {
 
 }
 
-// REVIEW: good news - looks like this hacky code is unused and so can be 
delete

[isis] branch ISIS-1976-rethink-object-adapters updated (ddf185a -> 2ce76eb)

2018-09-08 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from ddf185a  ISIS-1899: post release ... trying to fix CI build
 add 53332a2  ISIS-1979: Refactor logging in headless runtime and prevent 
configuring log4j twice
 add 7baf89b  Merge pull request #122 from blaugold/ISIS-1979
 add 41e2e32  ISIS-1979: add missing license header
 new f87ea18  ISIS-1899: post release ...
 new 3696616  ISIS-1899: post release ... trying to fix CI build
 new 563fbef  Merge remote-tracking branch 
'apache/ISIS-1976-rethink-object-adapters' into 
ISIS-1976-rethink-object-adapters
 new 05d91d5  ISIS-1976: refactoring OA creation into separated OidProviders
 new ef06f4f  ISIS-1976: kick in new OidFactory
 new 2ce76eb  ISIS-1976: let OAs for values also have an Oid

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../runtime/logging/IsisLoggingConfigurer.java |  13 +-
 .../apache/isis/core/commons/ensure/Assert.java|  10 +-
 .../isis/core/metamodel/adapter/oid/Oid.java   |  19 ++-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  19 ++-
 .../specloader/specimpl/FacetedMethodsBuilder.java |  18 ---
 .../persistence/PersistenceSession5_Decouple.java  |   2 +
 .../HeadlessWithBootstrappingAbstract.java |  41 +++
 .../isis/core/runtime/headless/IsisSystem.java |  42 +--
 .../runtime/headless/IsisSystemBootstrapper.java   |  35 ++
 .../runtime/headless/logging/LeveledLogger.java}   |  47 +---
 .../core/runtime/headless/logging/LogStream.java   |  37 ++
 .../runtime/persistence/adapter/PojoAdapter.java   |  12 +-
 .../PersistenceSessionServiceInternalDefault.java  |   4 +-
 .../adaptermanager/ObjectAdapterContext.java   |  27 ++---
 .../ObjectAdapterContext_NewIdentifier.java|   3 +
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 134 -
 .../adaptermanager/OidAdapterHashMap.java  |  13 +-
 .../persistence/adaptermanager/OidProviders.java   |  99 +++
 .../adaptermanager/factories/OidFactory.java}  |  36 +++---
 .../factories/OidFactory_Builder.java  |  71 +++
 20 files changed, 351 insertions(+), 331 deletions(-)
 copy 
core/{metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/CreatedCallbackFacet.java
 => 
runtime/src/main/java/org/apache/isis/core/runtime/headless/logging/LeveledLogger.java}
 (51%)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/OidProviders.java
 copy 
core/{metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_value.java
 => 
runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory.java}
 (55%)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/factories/OidFactory_Builder.java



[isis] branch ISIS-1976-rethink-object-adapters updated (67fd1ec -> 2d01709)

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 67fd1ec  ISIS-1976: further simplify
 new e0594d0  ISIS-1976: lazy initialize OAs for services
 new 2d01709  ISIS-1976: cleaning up

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../metamodel/adapter/ObjectAdapterProvider.java   |  18 +--
 .../core/metamodel/services/ServicesInjector.java  |   8 ++
 .../system/persistence/PersistenceSession4.java|  65 +-
 .../system/persistence/PersistenceSession5.java|  65 +-
 .../persistence/PersistenceSession5_Decouple.java  |  16 ++-
 .../system/persistence/PersistenceSession.java |  14 +-
 .../adaptermanager/ObjectAdapterContext.java   |  51 +---
 .../ObjectAdapterContext_NewIdentifier.java| 129 +++
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 142 +++--
 .../ObjectAdapterContext_ServiceLookup.java| 109 
 10 files changed, 393 insertions(+), 224 deletions(-)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java



[isis] 02/02: ISIS-1976: cleaning up

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2d0170953be32f1291801f7e84a2cacf03e770e5
Author: Andi Huber 
AuthorDate: Thu Sep 6 13:16:18 2018 +0200

ISIS-1976: cleaning up

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adaptermanager/ObjectAdapterContext.java   | 18 +---
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 32 +++---
 .../ObjectAdapterContext_ServiceLookup.java|  2 +-
 3 files changed, 18 insertions(+), 34 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index b204e36..44fc112 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -135,7 +135,6 @@ public class ObjectAdapterContext {
 
 private final Cache cache = new Cache();
 
-@SuppressWarnings("unused")
 private final PersistenceSession persistenceSession; 
 private final ServicesInjector servicesInjector;
 private final SpecificationLoader specificationLoader;
@@ -171,7 +170,7 @@ public class ObjectAdapterContext {
 
 // -- DEBUG
 
-private void printContextInfo(String msg) {
+void printContextInfo(String msg) {
 String id = Integer.toHexString(this.hashCode());
 String session = ""+persistenceSession;
 System.out.println("!!! "+String.format("%s id=%s 
session='%s'", 
@@ -360,21 +359,6 @@ public class ObjectAdapterContext {
 
 // 

 
-///**
-// * Creates {@link ObjectAdapter adapters} for the service list, ensuring 
that these are mapped correctly,
-// * and have the same OIDs as in any previous sessions.
-// * 
-// * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
-// */
-//@Deprecated
-//private void initServices() {
-//final List registeredServices = 
servicesInjector.getRegisteredServices();
-//for (final Object service : registeredServices) {
-//final ObjectAdapter serviceAdapter = 
objectAdapterProviderMixin.adapterFor(service);
-//Assert.assertFalse("expected to not be 'transient'", 
serviceAdapter.getOid().isTransient());
-//}
-//}
-
 public ObjectAdapter disposableAdapterForViewModel(Object viewModelPojo) {
 final ObjectSpecification objectSpecification = 
 
specificationLoader.loadSpecification(viewModelPojo.getClass());
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index a8f33ce..b231b0c 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -145,6 +145,15 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 return adapter;
 }
 
+@Override
+public List getServices() {
+return serviceAdapters.get();
+}
+
+// -- HELPER
+
+private _Lazy> serviceAdapters = 
_Lazy.of(this::initServiceAdapters);
+
 private List initServiceAdapters() {
 return servicesInjector.streamRegisteredServiceInstances()
 .map(this::adapterFor)
@@ -154,15 +163,6 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 .collect(Collectors.toList());
 }
 
-private _Lazy> serviceAdapters = 
_Lazy.of(this::initServiceAdapters);
-
-@Override
-public List getServices() {
-return serviceAdapters.get();
-}
-
-// -- HELPER
-
 //private Oid persistentOrValueOid(Object pojo) {
 //
 //Oid oid;
@@ -197,13 +197,13 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 //return null;
 //}
 
-protected Oid persistentOid(final Object pojo) {
-if (persistenceSession.getPersistenceManager().getObjectId(pojo) == 
null) {
-return null;
-}
-final RootOid oid = 
objectAdapterContext.c

[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1976: further cleaning up

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to 
refs/heads/ISIS-1976-rethink-object-adapters by this push:
 new 9b304a3  ISIS-1976: further cleaning up
9b304a3 is described below

commit 9b304a30f502ee3d9dec567d8a5d0fc56281505a
Author: Andi Huber 
AuthorDate: Thu Sep 6 15:11:54 2018 +0200

ISIS-1976: further cleaning up

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../runtime/persistence/adapter/PojoAdapter.java   |  7 ---
 .../adaptermanager/ObjectAdapterContext.java   |  2 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  1 -
 .../ObjectAdapterContext_ServiceLookup.java| 22 +++---
 4 files changed, 16 insertions(+), 16 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index c335815..2411c26 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.runtime.persistence.adapter;
 
+import java.util.function.Function;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +57,7 @@ public class PojoAdapter extends InstanceAbstract implements 
ObjectAdapter {
 /**
  * can be {@link #replacePojo(Object) replace}d.
  */
-private Object pojo;
+private final Object pojo;
 /**
  * can be {@link #replaceOid(Oid) replace}d.
  */
@@ -83,8 +85,7 @@ public class PojoAdapter extends InstanceAbstract implements 
ObjectAdapter {
 this.pojo = pojo;
 this.oid = oid;
 }
-
-
+
 // -- getSpecification
 
 /**
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 44fc112..3f43ace 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -245,7 +245,7 @@ public class ObjectAdapterContext {
 // -- SERVICE LOOKUP
 
 public ObjectAdapter lookupServiceAdapterFor(RootOid rootOid) {
-return serviceLookupMixin.serviceAdapterFor(rootOid);
+return serviceLookupMixin.lookupServiceAdapterFor(rootOid);
 }
 
 // -- FACTORIES
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index b231b0c..d8f422d 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
index ae92baa..f6ff249 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
@@ -24,6 +24,8 @@ import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.base._Timing;
+import org.apache.isis.commons.internal.base._Timing.StopWatch;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.core.commons.ensure.Assert;
@@ -52,22 +54,16

[isis] branch master updated: ISIS-1934: fixes Action Confirmation Dialog does not escape menu boundaries

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 0ae1dca  ISIS-1934: fixes Action Confirmation Dialog does not escape 
menu boundaries
0ae1dca is described below

commit 0ae1dca57f5d1a876e92d594c83ae77d928a0f63
Author: Andi Huber 
AuthorDate: Thu Sep 6 18:05:10 2018 +0200

ISIS-1934: fixes Action Confirmation Dialog does not escape menu
boundaries

also bumps wicket-bootstrap version 2.0.1 -> 2.0.2

Task-Url: https://issues.apache.org/jira/browse/ISIS-1934
---
 core/pom.xml| 2 +-
 .../ui/components/actionmenu/serviceactions/ServiceActionUtil.java  | 2 +-
 .../ui/components/actionmenu/serviceactions/ServiceActionsPanel.html| 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/core/pom.xml b/core/pom.xml
index 0169a96..842fb5a 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -153,7 +153,7 @@
 
 8.0.0
 8.0.0
-2.0.1
+2.0.2
 7.0.0
 
 

[isis] 08/18: ISIS-1976: improve the ObjectAdapterProvider interface (API)

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 11aa13574b4109eaae9530f95b3d3399b3a508b1
Author: Andi Huber 
AuthorDate: Wed Sep 5 20:41:07 2018 +0200

ISIS-1976: improve the ObjectAdapterProvider interface (API)

also prepare for removal of the OA by pojo lookup map

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../metamodel/adapter/ObjectAdapterProvider.java   | 28 --
 ...ObjectFacetDeclarativeInitializingAbstract.java |  3 +-
 .../adaptermanager/ObjectAdapterContext.java   | 64 ++
 .../ObjectAdapterContext_AdapterManager.java   | 30 ++
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 11 +++-
 5 files changed, 103 insertions(+), 33 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index e799f5d..fef5bf7 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 /**
@@ -56,12 +57,19 @@ public interface ObjectAdapterProvider {
 OneToManyAssociation collection);
 
 /**
- * @param viewModelPojo
- * @return an ObjectAdapter 'bypassing mapping', that holds the 
ObjectSpecification
- * FIXME[ISIS-1976] Note: whether or not 'bypassing mapping' should not be 
exposed by the API.
- * So this further needs refactoring. 
+ * Returns an ObjectAdapter that holds the ObjectSpecification used for 
+ * interrogating the domain object's metadata. 
+ * 
+ * Does _not_ perform dependency injection on the domain object. Also 
bypasses 
+ * caching (if any), that is each call to this method creates a new unique 
instance.
+ * 
+ * 
+ * @param viewModelPojo domain object
+ * @return  
  */
-ObjectAdapter specificationForViewModel(final Object viewModelPojo);
+ObjectAdapter disposableAdapterForViewModel(Object viewModelPojo);
+
+ObjectSpecification specificationForViewModel(Object viewModelPojo);
 
 ObjectAdapter adapterForViewModel(
 final Object viewModelPojo, 
@@ -97,7 +105,12 @@ public interface ObjectAdapterProvider {
 }
 
 @Programmatic
-default ObjectAdapter specificationForViewModel(final Object 
viewModelPojo) {
+default ObjectAdapter disposableAdapterForViewModel(final Object 
viewModelPojo) {
+return 
getObjectAdapterProvider().disposableAdapterForViewModel(viewModelPojo);
+}
+
+@Programmatic
+default ObjectSpecification specificationForViewModel(Object 
viewModelPojo) {
 return 
getObjectAdapterProvider().specificationForViewModel(viewModelPojo);
 }
 
@@ -116,6 +129,9 @@ public interface ObjectAdapterProvider {
 }
 
 
+   
+
+
 
 
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
index 2b47acd..97cc65e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeInitializingAbstract.java
@@ -21,6 +21,7 @@ package 
org.apache.isis.core.metamodel.facets.object.recreatable;
 
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
 import org.apache.isis.commons.internal.memento._Mementos;
@@ -97,7 +98,7 @@ extends RecreatableObjectFacetAbstract {
 
 final _Mementos.Memento memento = _Mementos.create(codec, serializer);
 
-final ObjectAdapter ownerAdapter = 
adapterProvider.specificationForViewModel(viewModelPojo);
+final ObjectAdapter ownerAdapter = 
adapterProvider.disposableAdapterForViewModel(viewModelPojo);
 final ObjectSpecification spec = ownerAdapter.getSpecification();
 
 final List properties = 
spec.getProperties(Contributed.EXCLUDED);
diff --git 
a/core

[isis] 17/18: ISIS-1976: cleaning up

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f3439195726f58c5fde5c651855a220bfbe920ca
Author: Andi Huber 
AuthorDate: Thu Sep 6 13:16:18 2018 +0200

ISIS-1976: cleaning up

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adaptermanager/ObjectAdapterContext.java   | 18 +---
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 32 +++---
 .../ObjectAdapterContext_ServiceLookup.java|  2 +-
 3 files changed, 18 insertions(+), 34 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index b204e36..44fc112 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -135,7 +135,6 @@ public class ObjectAdapterContext {
 
 private final Cache cache = new Cache();
 
-@SuppressWarnings("unused")
 private final PersistenceSession persistenceSession; 
 private final ServicesInjector servicesInjector;
 private final SpecificationLoader specificationLoader;
@@ -171,7 +170,7 @@ public class ObjectAdapterContext {
 
 // -- DEBUG
 
-private void printContextInfo(String msg) {
+void printContextInfo(String msg) {
 String id = Integer.toHexString(this.hashCode());
 String session = ""+persistenceSession;
 System.out.println("!!! "+String.format("%s id=%s 
session='%s'", 
@@ -360,21 +359,6 @@ public class ObjectAdapterContext {
 
 // 

 
-///**
-// * Creates {@link ObjectAdapter adapters} for the service list, ensuring 
that these are mapped correctly,
-// * and have the same OIDs as in any previous sessions.
-// * 
-// * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
-// */
-//@Deprecated
-//private void initServices() {
-//final List registeredServices = 
servicesInjector.getRegisteredServices();
-//for (final Object service : registeredServices) {
-//final ObjectAdapter serviceAdapter = 
objectAdapterProviderMixin.adapterFor(service);
-//Assert.assertFalse("expected to not be 'transient'", 
serviceAdapter.getOid().isTransient());
-//}
-//}
-
 public ObjectAdapter disposableAdapterForViewModel(Object viewModelPojo) {
 final ObjectSpecification objectSpecification = 
 
specificationLoader.loadSpecification(viewModelPojo.getClass());
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index a8f33ce..b231b0c 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -145,6 +145,15 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 return adapter;
 }
 
+@Override
+public List getServices() {
+return serviceAdapters.get();
+}
+
+// -- HELPER
+
+private _Lazy> serviceAdapters = 
_Lazy.of(this::initServiceAdapters);
+
 private List initServiceAdapters() {
 return servicesInjector.streamRegisteredServiceInstances()
 .map(this::adapterFor)
@@ -154,15 +163,6 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 .collect(Collectors.toList());
 }
 
-private _Lazy> serviceAdapters = 
_Lazy.of(this::initServiceAdapters);
-
-@Override
-public List getServices() {
-return serviceAdapters.get();
-}
-
-// -- HELPER
-
 //private Oid persistentOrValueOid(Object pojo) {
 //
 //Oid oid;
@@ -197,13 +197,13 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 //return null;
 //}
 
-protected Oid persistentOid(final Object pojo) {
-if (persistenceSession.getPersistenceManager().getObjectId(pojo) == 
null) {
-return null;
-}
-final RootOid oid = 
objectAdapterContext.c

[isis] 03/18: ISIS-1976: let JavaCollectionFacet no longer change OA's pojo

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit afd1fb976912dff321ee1dd105cbcc5e6df33be9
Author: Andi Huber 
AuthorDate: Wed Sep 5 16:06:51 2018 +0200

ISIS-1976: let JavaCollectionFacet no longer change OA's pojo

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../facets/collections/javautilcollection/JavaArrayFacet.java| 3 +--
 .../collections/javautilcollection/JavaCollectionFacet.java  | 9 -
 .../adaptermanager/ObjectAdapterContext_MementoSupport.java  | 6 +++---
 3 files changed, 4 insertions(+), 14 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
index 94ffea2..5a86a12 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
@@ -49,8 +49,7 @@ public class JavaArrayFacet extends CollectionFacetAbstract {
 for (int i = 0; i < length; i++) {
 array[i] = initData[i].getObject();
 }
-arrayAdapter.friend().replacePojo(array);
-return arrayAdapter;
+return arrayAdapter.withPojo(array);  
 }
 
 /**
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
index a1fe10d..63a5f55 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
@@ -21,7 +21,6 @@ package 
org.apache.isis.core.metamodel.facets.collections.javautilcollection;
 
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.function.Function;
 
 import com.google.common.collect.Collections2;
 
@@ -79,12 +78,4 @@ public class JavaCollectionFacet extends 
CollectionFacetAbstract {
 return (Collection) collectionAdapter.getObject();
 }
 
-// //
-// Dependencies (from constructor)
-// //
-
-private ObjectAdapterProvider getObjectAdapterProvider() {
-return adapterProvider;
-}
-
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
index acb2e11..beaadae 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
@@ -74,7 +74,7 @@ class ObjectAdapterContext_MementoSupport implements 
MementoRecreateObjectSuppor
 
 final Object recreatedPojo = 
persistenceSession.instantiateAndInjectServices(spec);
 adapter = objectAdapterContext.addRecreatedPojoToCache(oid, 
recreatedPojo);
-populateCollection(adapter, (CollectionData) data);
+adapter = populateCollection(adapter, (CollectionData) data);
 
 } else {
 Assert.assertTrue("oid must be a RootOid representing an object 
because spec is not a collection and cannot be a value", oid instanceof 
RootOid);
@@ -138,14 +138,14 @@ class ObjectAdapterContext_MementoSupport implements 
MementoRecreateObjectSuppor
 }
 }
 
-private void populateCollection(final ObjectAdapter collectionAdapter, 
final CollectionData state) {
+private ObjectAdapter populateCollection(final ObjectAdapter 
collectionAdapter, final CollectionData state) {
 final ObjectAdapter[] initData = new 
ObjectAdapter[state.getElements().length];
 int i = 0;
 for (final Data elementData : state.getElements()) {
 initData[i++] = recreateReference(elementData);
 }
 final CollectionFacet facet = 
collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
-facet.init(collectionAdapter, initData);
+return facet.init(collectionAdapter, initData);
 }
 
 private void updateFieldsAndResolveState(final ObjectAdapter 
objectAdapter, final Data data) {



[isis] 09/18: ISIS-1976: add layer of abstraction

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 392687a4ac27f3bebf3ac08116901b154becfda6
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:04:41 2018 +0200

ISIS-1976: add layer of abstraction

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/services/ServicesInjector.java  |  39 +++--
 .../adaptermanager/ObjectAdapterContext.java   | 194 +++--
 .../ObjectAdapterContext_AdapterManager.java   |   3 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  12 +-
 4 files changed, 140 insertions(+), 108 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index f80535b..d293abc 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -23,11 +23,16 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
+import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Collections;
 import org.apache.isis.commons.internal.collections._Lists;
@@ -48,8 +53,6 @@ import 
org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * The repository of services, also able to inject into any object.
@@ -78,7 +81,7 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
  * services that are assignable to the type.  It's possible that this is 
an empty list.
  */
 private final Map, List> servicesAssignableToType = 
_Maps.newHashMap();
-private final Map, Object> serviceByConcreteType = 
_Maps.newHashMap();
+private final _Lazy, Object>> serviceByConcreteType = 
_Lazy.of(this::initServiceByConcreteType);
 private final Map, Method[]> methodsByClassCache = 
_Maps.newHashMap();
 private final Map, Field[]> fieldsByClassCache = 
_Maps.newHashMap();
 
@@ -143,18 +146,30 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 serviceByConcreteType.clear();
 autowire();
 }
+
+private Map, Object> initServiceByConcreteType(){
+final Map, Object> map = _Maps.newHashMap();
+for (Object service : services) {
+final Class concreteType = service.getClass();
+map.put(concreteType, service);
+}
+return map;
+}
 
 public boolean isRegisteredService(final Class cls) {
-// lazily construct cache
-if(serviceByConcreteType.isEmpty()) {
-for (Object service : services) {
-final Class concreteType = service.getClass();
-serviceByConcreteType.put(concreteType, service);
-}
-}
-return serviceByConcreteType.containsKey(cls);
+return serviceByConcreteType.get().containsKey(cls);
 }
 
+public boolean isRegisteredServiceInstance(final Object pojo) {
+if(pojo==null) {
+return false;
+}
+final Class key = pojo.getClass();
+final Object serviceInstance = serviceByConcreteType.get().get(key);
+return Objects.equals(pojo, serviceInstance);
+}
+
+
 public  void addFallbackIfRequired(final Class serviceClass, final T 
serviceInstance) {
 if(!contains(services, serviceClass)) {
 // add to beginning;
@@ -206,7 +221,7 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 public List getRegisteredServices() {
 return Collections.unmodifiableList(services);
 }
-
+
 // -- INJECT SERVICES INTO
 
 /**
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 5ebfe1f..06642b2 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java

[isis] 04/18: ISIS-1976: let ObjectAdapterContext.replaceRootAdapter(ObjectAdapter, RootAndCollectionAdapters) no longer use OA's replacePojo

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 63a89c8af0463c6bc8a724465ab1f014631390f5
Author: Andi Huber 
AuthorDate: Wed Sep 5 16:16:10 2018 +0200

ISIS-1976: let ObjectAdapterContext.replaceRootAdapter(ObjectAdapter,
RootAndCollectionAdapters) no longer use OA's replacePojo

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/adaptermanager/ObjectAdapterContext.java   | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index a13a6cc..e7fd814 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -427,8 +427,8 @@ public class ObjectAdapterContext {
 
 if (collectionPojoActuallyOnPojo != 
collectionPojoWrappedByAdapter) {
 pojoAdapterMap.remove(collectionAdapter);
-
collectionAdapter.friend().replacePojo(collectionPojoActuallyOnPojo);
-pojoAdapterMap.add(collectionPojoActuallyOnPojo, 
collectionAdapter);
+final ObjectAdapter newCollectionAdapter = 
collectionAdapter.withPojo(collectionPojoActuallyOnPojo);
+pojoAdapterMap.add(collectionPojoActuallyOnPojo, 
newCollectionAdapter);
 }
 }
 
@@ -470,8 +470,12 @@ public class ObjectAdapterContext {
 @Deprecated
 public void remapRecreatedPojo(ObjectAdapter adapter, final Object pojo) {
 removeAdapterFromCache(adapter);
+
 adapter.friend().replacePojo(pojo);
 mapAndInjectServices(adapter);
+
+//final ObjectAdapter newAdapter = adapter.withPojo(pojo);
+//mapAndInjectServices(newAdapter);
 }
 
 



[isis] 02/18: ISIS-1976: removing ObjectAdapter.replacePojo(Object pojo)

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1f5520f43c39be8f55d43f6ea22b7020765e374b
Author: Andi Huber 
AuthorDate: Wed Sep 5 15:56:32 2018 +0200

ISIS-1976: removing ObjectAdapter.replacePojo(Object pojo)

also cleaning up

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../apache/isis/core/metamodel/adapter/ObjectAdapter.java   | 13 -
 .../facets/actions/action/invocation/CommandUtil.java   |  2 +-
 .../collections/javautilcollection/JavaArrayFacet.java  |  3 ++-
 .../collections/javautilcollection/JavaCollectionFacet.java |  9 +
 .../facets/collections/modify/CollectionFacet.java  |  3 ++-
 .../specloader/specimpl/OneToOneAssociationDefault.java |  2 +-
 .../standalonelist/CollectionFacetOnStandaloneList.java |  3 ++-
 .../viewer/wicket/model/mementos/ObjectAdapterMemento.java  |  2 +-
 .../viewer/wicket/model/models/EntityCollectionModel.java   |  2 +-
 9 files changed, 15 insertions(+), 24 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 48b4745..fc67020 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -469,19 +469,6 @@ public interface ObjectAdapter extends Instance {
 return Util::unwrap;
 }
 
-public static Function adapterForUsing(final 
ObjectAdapterProvider adapterProvider) {
-return adapterProvider::adapterFor;
-}
-
-@Deprecated
-public static com.google.common.base.Function 
adapter_ForUsing(final ObjectAdapterProvider adapterProvider) {
-return new com.google.common.base.Function() {
-@Override
-public ObjectAdapter apply(final Object pojo) {
-return adapterProvider.adapterFor(pojo);
-}
-};
-}
 }
 
 /**
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
index aea2939..f0f9112 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -103,7 +103,7 @@ public class CommandUtil {
 
 public static ObjectAdapter[] adaptersFor(final Object[] args, final 
ObjectAdapterProvider adapterProvider) {
 return _NullSafe.stream(args)
-.map(ObjectAdapter.Functions.adapterForUsing(adapterProvider))
+.map(adapterProvider::adapterFor)
 .collect(_Arrays.toArray(ObjectAdapter.class, 
_NullSafe.size(args)));
 }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
index 315027c..94ffea2 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaArrayFacet.java
@@ -43,13 +43,14 @@ public class JavaArrayFacet extends CollectionFacetAbstract 
{
  * Expected to be called with a {@link ObjectAdapter} wrapping an array.
  */
 @Override
-public void init(final ObjectAdapter arrayAdapter, final ObjectAdapter[] 
initData) {
+public ObjectAdapter init(final ObjectAdapter arrayAdapter, final 
ObjectAdapter[] initData) {
 final int length = initData.length;
 final Object[] array = new Object[length];
 for (int i = 0; i < length; i++) {
 array[i] = initData[i].getObject();
 }
 arrayAdapter.friend().replacePojo(array);
+return arrayAdapter;
 }
 
 /**
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
index 84360f9..a1fe10d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/javautilcollection/JavaCollectionFacet.java
@@ -21,10 +21,10 @@ pack

[isis] 15/18: ISIS-1976: further simplify

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 9e286dcfc3555f66d4f3283fc891dc17307f9bff
Author: Andi Huber 
AuthorDate: Thu Sep 6 09:13:00 2018 +0200

ISIS-1976: further simplify

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../commons/internal/exceptions/_Exceptions.java   | 20 ++
 .../adaptermanager/ObjectAdapterContext.java   | 78 --
 .../ObjectAdapterContext_AdapterManager.java   | 24 ++-
 .../ObjectAdapterContext_Consistency.java  |  8 +--
 .../adaptermanager/RootAndCollectionAdapters.java  | 13 ++--
 5 files changed, 76 insertions(+), 67 deletions(-)

diff --git 
a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
 
b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 968f0f9..214936a 100644
--- 
a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ 
b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -81,6 +81,26 @@ public final class _Exceptions {
 public static IllegalStateException notImplemented() {
 return new IllegalStateException("internal error: code was reached, 
that is not implemented yet");
 }
+
+/**
+* Used to hide from the compiler the fact, that this call always throws.
+*
+* {
+*throw unexpectedCodeReach();
+*return 0; // won't compile: unreachable code
+*}
+*
+* hence ...
+*
+* {
+*throwUnexpectedCodeReach();
+*return 0;
+*}
+*
+*/
+public static void throwUnexpectedCodeReach() {
+throw unexpectedCodeReach();
+}
 
 /**
  * Used to hide from the compiler the fact, that this call always throws.
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 477c873..a665d20 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -26,7 +26,6 @@ import java.util.function.Function;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.ensure.IsisAssertException;
@@ -137,6 +136,7 @@ public class ObjectAdapterContext {
 
 private final Cache cache = new Cache();
 
+@SuppressWarnings("unused")
 private final PersistenceSession persistenceSession; 
 private final ServicesInjector servicesInjector;
 private final SpecificationLoader specificationLoader;
@@ -179,50 +179,51 @@ public class ObjectAdapterContext {
 
 // -- CACHING POJO
 
-@Deprecated // don't expose caching
-protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
+// package private // don't expose caching
+ObjectAdapter lookupAdapterByPojo(Object pojo) {
 return cache.lookupAdapterByPojo(pojo);
 }
 
-@Deprecated // don't expose caching
-public boolean containsAdapterForPojo(Object pojo) {
+// package private // don't expose caching
+boolean containsAdapterForPojo(Object pojo) {
 return lookupAdapterByPojo(pojo)!=null;
 }
 
 // -- CACHING OID
 
-@Deprecated // don't expose caching
-protected ObjectAdapter lookupAdapterById(Oid oid) {
+// package private // don't expose caching
+ObjectAdapter lookupAdapterById(Oid oid) {
 return cache.lookupAdapterById(oid);
 }
 
 // -- CACHING BOTH
 
-@Deprecated // don't expose caching
-public void addAdapter(ObjectAdapter adapter) {
+// package private // don't expose caching
+void addAdapter(ObjectAdapter adapter) {
 cache.addAdapter(adapter);
 }
 
-@Deprecated // don't expose caching
-public void removeAdapter(ObjectAdapter adapter) {
+// package private // don't expose caching
+void removeAdapter(ObjectAdapter adapter) {
 cache.removeAdapter(adapter);
 }
 
 // -- CACHE CONSISTENCY
 
-@Deprecated // don't expose caching
-public void ensureMapsConsistent(final ObjectAdapter adapter) {
+// package private // don't expose caching
+void ensureMapsConsistent(final ObjectAdapter adapter) {
 consistencyMixin.ensureMapsConsistent(adapter);
 }
 
-@Deprecated // don't expose caching
-public void ensureMaps

[isis] 11/18: ISIS-1976: improve code readability

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 30d9e29e779c730c6b6bfe1ae84c1d7524554cca
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:36:00 2018 +0200

ISIS-1976: improve code readability

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../core/metamodel/services/ServicesInjector.java| 20 +++-
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index d293abc..c345f38 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -146,15 +146,6 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 serviceByConcreteType.clear();
 autowire();
 }
-
-private Map, Object> initServiceByConcreteType(){
-final Map, Object> map = _Maps.newHashMap();
-for (Object service : services) {
-final Class concreteType = service.getClass();
-map.put(concreteType, service);
-}
-return map;
-}
 
 public boolean isRegisteredService(final Class cls) {
 return serviceByConcreteType.get().containsKey(cls);
@@ -457,6 +448,17 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 .forEach(filteredServicesAndContainer::add);
 }
 
+// -- LAZY INIT
+
+private Map, Object> initServiceByConcreteType(){
+final Map, Object> map = _Maps.newHashMap();
+for (Object service : services) {
+final Class concreteType = service.getClass();
+map.put(concreteType, service);
+}
+return map;
+}
+
 // -- REFLECTIVE PREDICATES
 
 private static final Predicate isOfType(final Class cls) {



[isis] 13/18: ISIS-1976: remove code that seems for optimization

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 6bf096ebe704a7ab31b2cc583d6893ad8e15dc29
Author: Andi Huber 
AuthorDate: Thu Sep 6 07:19:28 2018 +0200

ISIS-1976: remove code that seems for optimization

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../persistence/adaptermanager/ObjectAdapterContext.java| 13 +
 .../adaptermanager/ObjectAdapterContext_AdapterManager.java |  5 ++---
 2 files changed, 3 insertions(+), 15 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 18af78f..f942f5a 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.commons.ensure.IsisAssertException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -350,18 +351,6 @@ public class ObjectAdapterContext {
 }
 }
 
-@Deprecated // don't expose caching
-public void addAdapterHonoringSpecImmutability(Object pojo, ObjectAdapter 
adapter) {
-// add all aggregated collections
-final ObjectSpecification objSpec = adapter.getSpecification();
-if (!adapter.isParentedCollection() || adapter.isParentedCollection() 
&& !objSpec.isImmutable()) {
-cache.putPojo(pojo, adapter);
-}
-
-// order is important - add to pojo map first, then identity map
-oidAdapterMap().add(adapter.getOid(), adapter);
-}
-
 public ObjectAdapter disposableAdapterForViewModel(Object viewModelPojo) {
 final ObjectSpecification objectSpecification = 
 
specificationLoader.loadSpecification(viewModelPojo.getClass());
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
index 7936a9d..1af091f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_AdapterManager.java
@@ -23,9 +23,7 @@ import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
@@ -171,7 +169,8 @@ class ObjectAdapterContext_AdapterManager {
 return adapter;
 }
 
-objectAdapterContext.addAdapterHonoringSpecImmutability(pojo, adapter);
+Assert.assertTrue("expected same", Objects.equals(adapter.getObject(), 
pojo));
+objectAdapterContext.addAdapter(adapter);
 
 // must inject after mapping, otherwise infinite loop
 servicesInjector.injectServicesInto(pojo);



[isis] 10/18: ISIS-1976: make ObjectAdapter's oid immutable

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit b66c9edb5d01c054960ad455fd21318a061979ac
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:29:22 2018 +0200

ISIS-1976: make ObjectAdapter's oid immutable

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java | 24 +++---
 .../runtime/persistence/adapter/PojoAdapter.java   | 11 --
 .../adaptermanager/ObjectAdapterContext.java   | 12 ---
 .../ObjectAdapterContext_Consistency.java  |  2 +-
 4 files changed, 13 insertions(+), 36 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index fc67020..86dc643 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -487,18 +487,18 @@ public interface ObjectAdapter extends Instance {
  */
 ObjectAdapter withPojo(Object newPojo);
 
-@Deprecated
-public static interface Friend {
-  /**
-  * Sometimes it is necessary to manage the replacement of the underlying
-  * domain object (by another component such as an object store). This 
method
-  * allows the adapter to be kept while the domain object is replaced.
-  */
- void replacePojo(Object pojo);
-}
-
-@Deprecated
-Friend friend();
+//@Deprecated
+//public static interface Friend {
+//  /**
+//  * Sometimes it is necessary to manage the replacement of the underlying
+//  * domain object (by another component such as an object store). This 
method
+//  * allows the adapter to be kept while the domain object is replaced.
+//  */
+// void replacePojo(Object pojo);
+//}
+//
+//@Deprecated
+//Friend friend();
 
 
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index f80048c..c335815 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -407,15 +407,4 @@ public class PojoAdapter extends InstanceAbstract 
implements ObjectAdapter {
 return new PojoAdapter(newPojo, oid, authenticationSession, 
specificationLoader, persistenceSession);
 }
 
-
-@Override
-public Friend friend() {
-return new Friend() {
-@Override
-public void replacePojo(Object pojo) {
-PojoAdapter.this.pojo = pojo;
-}
-};
-}
-
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 06642b2..18af78f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -502,23 +502,11 @@ public class ObjectAdapterContext {
 return accessor.getProperty(ownerAdapter, 
InteractionInitiatedBy.FRAMEWORK);
 }
 
-/**
- * @deprecated https://issues.apache.org/jira/browse/ISIS-1976
- */
 @Deprecated
 public ObjectAdapter remapRecreatedPojo(ObjectAdapter adapter, final 
Object pojo) {
 final ObjectAdapter newAdapter = adapter.withPojo(pojo);
 cache.removeAdapter(adapter);
 cache.removeAdapter(newAdapter);
-
-//FIXME[ISIS-1976] can't remove yet, does have strange side-effects 
-if(true){
-adapter.friend().replacePojo(pojo);
-mapAndInjectServices(adapter);
-return adapter;
-}
-//---
-
 mapAndInjectServices(newAdapter);
 return newAdapter;
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
index d078639..2d15fb0 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
@@ -113,7 +113,7 @@ class

[isis] 14/18: ISIS-1976: simplify

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 989333f782487d2edd22e56ef236b18a55f3762c
Author: Andi Huber 
AuthorDate: Thu Sep 6 08:06:21 2018 +0200

ISIS-1976: simplify

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adaptermanager/ObjectAdapterContext.java   | 69 --
 .../adaptermanager/RootAndCollectionAdapters.java  |  7 +++
 2 files changed, 30 insertions(+), 46 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index f942f5a..477c873 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -22,18 +22,13 @@ import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
 import java.util.function.Function;
-import java.util.function.Supplier;
-
-import com.google.common.cache.Cache;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.ensure.Ensure;
 import org.apache.isis.core.commons.ensure.IsisAssertException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
@@ -49,9 +44,7 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.memento.Data;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
 
 /**
  * Encapsulate ObjectAdpater life-cycling.  
@@ -203,10 +196,6 @@ public class ObjectAdapterContext {
 return cache.lookupAdapterById(oid);
 }
 
-private OidAdapterHashMap oidAdapterMap() {
-return cache.oidAdapterMap;
-}
-
 // -- CACHING BOTH
 
 @Deprecated // don't expose caching
@@ -377,38 +366,40 @@ public class ObjectAdapterContext {
  * Note that there is no management of {@link Version}s here. That is
  * because the {@link PersistenceSession} is expected to manage this.
  *
- * @param hintRootOid - allow a different persistent root oid to be 
provided.
+ * @param newRootOid - allow a different persistent root oid to be 
provided.
  * @param session 
  */
 @Deprecated // expected to be moved
-public void remapAsPersistent(final ObjectAdapter adapter, RootOid 
hintRootOid, PersistenceSession session) {
+public void remapAsPersistent(final ObjectAdapter adapter, RootOid 
newRootOid, PersistenceSession session) {
 
-final ObjectAdapter rootAdapter = adapter.getAggregateRoot();  // 
TODO: REVIEW: think this is redundant; would seem this method is only ever 
called for roots anyway.
+Objects.requireNonNull(newRootOid);
+
+ // TODO: REVIEW: think this is redundant; would seem this method is only 
ever called for roots anyway.
+final ObjectAdapter rootAdapter = adapter.getAggregateRoot();  
 final RootOid transientRootOid = (RootOid) rootAdapter.getOid();
+
+Assert.assertTrue("expected same", Objects.equals(adapter, 
rootAdapter));
 
 final RootAndCollectionAdapters rootAndCollectionAdapters = 
 new RootAndCollectionAdapters(adapter, adapterManagerMixin);
 
-removeFromCache(rootAndCollectionAdapters, transientRootOid);
+Assert.assertTrue("expected same", 
Objects.equals(rootAndCollectionAdapters.getRootAdapter().getOid(), 
transientRootOid));
+removeFromCache(rootAndCollectionAdapters);
 
-// intended for testing (bit nasty)
 final RootOid persistedRootOid;
-if(hintRootOid != null) {
-if(hintRootOid.isTransient()) {
+{
+if(newRootOid.isTransient()) {
 throw new IsisAssertException("hintRootOid must be 
persistent");
 }
-final ObjectSpecId hintRootOidObjectSpecId = 
hintRootOid.getObjectSpecId();
+final ObjectSpecId hintRootOidObjectSpecId = 
newRootOid.getObjectSpecId();
 final ObjectSpecId adapterObjectSpec

[isis] 05/18: ISIS-1976: prepare removal of OA's replacePojo

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 543759a46cf5772bc6404079103e7eb2fb634bdb
Author: Andi Huber 
AuthorDate: Wed Sep 5 17:31:09 2018 +0200

ISIS-1976: prepare removal of OA's replacePojo

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java| 28 ++
 .../system/persistence/PersistenceSession5.java| 26 +---
 .../adaptermanager/ObjectAdapterContext.java   | 23 +-
 3 files changed, 52 insertions(+), 25 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 7c554f6..d22ef39 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -1140,15 +1140,17 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 final Version datastoreVersion = getVersionIfAny(pc);
 
 final RootOid originalOid;
-ObjectAdapter adapter = objectAdapterContext.lookupAdapterFor(pojo);
-if (adapter != null) {
-ensureRootObject(pojo);
-originalOid = (RootOid) adapter.getOid();
+final ObjectAdapter originalAdapter = 
objectAdapterContext.lookupAdapterFor(pojo);
+final ObjectAdapter newAdapter;
+
+if (originalAdapter != null) {
+ensureRootObject(pojo); //[ahuber] while already mapped has no 
side-effect
+originalOid = (RootOid) originalAdapter.getOid();
 
-final Version originalVersion = adapter.getVersion();
+final Version originalVersion = originalAdapter.getVersion();
 
 // sync the pojo held by the adapter with that just loaded
-objectAdapterContext.remapRecreatedPojo(adapter, pojo);
+newAdapter = 
objectAdapterContext.remapRecreatedPojo(originalAdapter, pojo);
 
 // since there was already an adapter, do concurrency check
 // (but don't set abort cause if checking is suppressed through 
thread-local)
@@ -1171,24 +1173,30 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 LOG.info("concurrency conflict detected but suppressed, on 
{} ({})", thisOid, otherVersion);
 }
 }
+
 } else {
 originalOid = createPersistentOrViewModelOid(pojo);
 
+ObjectAdapter adapter;
+
 // it appears to be possible that there is already an adapter for 
this Oid,
 // ie from ObjectStore#resolveImmediately()
 adapter = objectAdapterContext.lookupAdapterFor(originalOid);
 if (adapter != null) {
-objectAdapterContext.remapRecreatedPojo(adapter, pojo);
+adapter = objectAdapterContext.remapRecreatedPojo(adapter, 
pojo);
 } else {
 adapter = 
objectAdapterContext.addRecreatedPojoToCache(originalOid, pojo);
 
 CallbackFacet.Util.callCallback(adapter, 
LoadedCallbackFacet.class);
 postLifecycleEventIfRequired(adapter, 
LoadedLifecycleEventFacet.class);
 }
+
+newAdapter = adapter;
+
 }
-
-adapter.setVersion(datastoreVersion);
-
+
+newAdapter.setVersion(datastoreVersion);
+
 return objectAdapterContext.lookupAdapterFor(pojo);
 }
 
diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index 90886dc..8fdeef5 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -1132,15 +1132,17 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 final Version datastoreVersion = getVersionIfAny(pc);
 
 final RootOid originalOid;
-ObjectAdapter adapter = objectAdapterContext.lookupAdapterFor(pojo);
-if (adapter != null) {
+final ObjectAdapter originalAdapter = 
objectAdapterContext.lookupAdapterFor(pojo);
+final ObjectAdapter newAdapter;
+
+if (originalAdapter != null) {
 ensureRootObject(pojo); //[ahu

[isis] 12/18: ISIS-1976: restore check consistency to also check adapter's object equality

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a99c1cc5b921fe872a36faba32c386d647f659cb
Author: Andi Huber 
AuthorDate: Thu Sep 6 06:51:59 2018 +0200

ISIS-1976: restore check consistency to also check adapter's object
equality

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../ObjectAdapterContext_Consistency.java   | 21 +
 1 file changed, 21 insertions(+)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
index 2d15fb0..30746a1 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_Consistency.java
@@ -118,5 +118,26 @@ class ObjectAdapterContext_Consistency {
 + mapName
 + ": provided adapter's OID: " + adapterOid + ", \n"
 + "but map's adapter's OID was: " + 
adapterAccordingToMap.getOid());
+
+ensureThatArg(
+adapter.getObject(), 
equalTo(adapterAccordingToMap.getObject()),
+()->String.format("mismatch in %s (oid='%s')"
++ ": provided adapter's hash: %s (pojo='%s'), \n"
++ "but map's adapter's hash was: %s (pojo='%s')",
+mapName, adapterOid,
+Integer.toHexString(adapter.hashCode()), 
""+adapter.getObject(),
+Integer.toHexString(adapterAccordingToMap.hashCode()), 
""+adapterAccordingToMap.getObject()
+));
+
+//  TODO[ISIS-1976] too strict, remove
+//ensureThatArg(
+//adapter, equalTo(adapterAccordingToMap),
+//()->String.format("mismatch in %s (oid='%s')"
+//+ ": provided adapter's hash: %s (pojo='%s'), \n"
+//+ "but map's adapter's hash was: %s (pojo='%s')",
+//mapName, adapterOid,
+//Integer.toHexString(adapter.hashCode()), 
""+adapter.getObject(),
+//
Integer.toHexString(adapterAccordingToMap.hashCode()), 
""+adapterAccordingToMap.getObject()
+//));
 }
 }
\ No newline at end of file



[isis] 06/18: ISIS-1976: prepare removal of OA's lookup by pojo map

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit b3e78b7d479aa168a89e48261ffa759a7e178e78
Author: Andi Huber 
AuthorDate: Wed Sep 5 18:21:35 2018 +0200

ISIS-1976: prepare removal of OA's lookup by pojo map

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../metamodel/adapter/ObjectAdapterProvider.java   | 17 ++-
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 57 ++
 2 files changed, 73 insertions(+), 1 deletion(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index ba81787..e799f5d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.function.Function;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -36,6 +37,12 @@ public interface ObjectAdapterProvider {
 // -- INTERFACE
 
 /**
+ * @param pojo
+ * @return oid for the given domain object 
+ */
+Oid oidFor(Object domainObject);
+
+/**
  * @return standalone (value) or root adapter
  */
 ObjectAdapter adapterFor(Object domainObject);
@@ -44,7 +51,7 @@ public interface ObjectAdapterProvider {
  * @return collection adapter.
  */
 ObjectAdapter adapterFor(
-final Object pojo,
+final Object domainObject,
 final ObjectAdapter parentAdapter,
 OneToManyAssociation collection);
 
@@ -72,6 +79,11 @@ public interface ObjectAdapterProvider {
 ObjectAdapterProvider getObjectAdapterProvider();
 
 @Programmatic
+default Oid oidFor(Object domainObject) {
+return getObjectAdapterProvider().oidFor(domainObject);
+}
+
+@Programmatic
 default ObjectAdapter adapterFor(Object domainObject) {
 return getObjectAdapterProvider().adapterFor(domainObject);
 }
@@ -102,6 +114,9 @@ public interface ObjectAdapterProvider {
 }
 
 }
+
+
+
 
 
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index f54643d..ba820e3 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -28,6 +28,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -63,6 +64,20 @@ class ObjectAdapterContext_ObjectAdapterProvider implements 
ObjectAdapterProvide
 }
 
 @Override
+public Oid oidFor(Object pojo) {
+if(pojo == null) {
+return null;
+}
+final Oid persistentOrValueOid = persistentOrValueOid(pojo);
+if(persistentOrValueOid != null) {
+return persistentOrValueOid;
+}
+// Creates a new transient root for the supplied domain object
+final RootOid rootOid = 
persistenceSession.createTransientOrViewModelOid(pojo);
+return rootOid;
+}
+
+@Override
 public ObjectAdapter adapterFor(Object pojo) {
 
 if(pojo == null) {
@@ -135,6 +150,48 @@ class ObjectAdapterContext_ObjectAdapterProvider 
implements ObjectAdapterProvide
 
 // -- HELPER
 
+private Oid persistentOrValueOid(Object pojo) {
+
+Oid oid;
+
+// equivalent to  isInstanceOfPersistable = pojo instanceof 
Persistable;
+final boolean isInstanceOfPersistable = 
isisJdoMetamodelPlugin.isPersistenceEnhanced(pojo.getClass());
+
+// pojo may have been lazily loaded by object store

[isis] 16/18: ISIS-1976: lazy initialize OAs for services

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 9eacd3ca14c1d790940f0b61f034a603d672dab0
Author: Andi Huber 
AuthorDate: Thu Sep 6 13:02:52 2018 +0200

ISIS-1976: lazy initialize OAs for services

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../metamodel/adapter/ObjectAdapterProvider.java   |  18 +--
 .../core/metamodel/services/ServicesInjector.java  |   8 ++
 .../system/persistence/PersistenceSession4.java|  65 +-
 .../system/persistence/PersistenceSession5.java|  65 +-
 .../persistence/PersistenceSession5_Decouple.java  |  16 ++-
 .../system/persistence/PersistenceSession.java |  14 ++-
 .../adaptermanager/ObjectAdapterContext.java   |  63 +++---
 .../ObjectAdapterContext_NewIdentifier.java| 129 
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 132 +++--
 .../ObjectAdapterContext_ServiceLookup.java| 109 +
 10 files changed, 402 insertions(+), 217 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index fef5bf7..3b8e0ec 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -37,11 +37,11 @@ public interface ObjectAdapterProvider {
 
 // -- INTERFACE
 
-/**
- * @param pojo
- * @return oid for the given domain object 
- */
-Oid oidFor(Object domainObject);
+///**
+// * @param pojo
+// * @return oid for the given domain object 
+// */
+//Oid oidFor(Object domainObject);
 
 /**
  * @return standalone (value) or root adapter
@@ -86,10 +86,10 @@ public interface ObjectAdapterProvider {
 @Programmatic
 ObjectAdapterProvider getObjectAdapterProvider();
 
-@Programmatic
-default Oid oidFor(Object domainObject) {
-return getObjectAdapterProvider().oidFor(domainObject);
-}
+//@Programmatic
+//default Oid oidFor(Object domainObject) {
+//return getObjectAdapterProvider().oidFor(domainObject);
+//}
 
 @Programmatic
 default ObjectAdapter adapterFor(Object domainObject) {
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index c345f38..444211e 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -213,6 +214,13 @@ public class ServicesInjector implements 
ApplicationScopedComponent {
 return Collections.unmodifiableList(services);
 }
 
+/**
+ * @return Stream of all currently registered service instances.
+ */
+public Stream streamRegisteredServiceInstances() {
+return services.stream();
+}
+
 // -- INJECT SERVICES INTO
 
 /**
diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index d22ef39..e5e0b8c 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -1175,7 +1175,7 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 }
 
 } else {
-originalOid = createPersistentOrViewModelOid(pojo);
+originalOid = 
objectAdapterContext.createPersistentOrViewModelOid(pojo);
 
 ObjectAdapter adapter;
 
@@ -1200,70 +1200,13 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 return objectAdapterContext.lookupAdapterFor(pojo);
 }
 
-// -- create...Oid (main API)
-/**
- * Create a new {@link Oid#isTransient() transient} {@link Oid} for the
- * supplied pojo, uniquely distinguishable from any other {@link Oid}.
- */
 @Override
-public final RootOid createTransientOrViewModelOid(final Object pojo

[isis] 07/18: ISIS-1976: minor cleanup

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 5dcbc9f5e92983a48bd65306767ddb19a7fa85f7
Author: Andi Huber 
AuthorDate: Wed Sep 5 18:54:49 2018 +0200

ISIS-1976: minor cleanup

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adaptermanager/ObjectAdapterContext.java   | 66 --
 1 file changed, 36 insertions(+), 30 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index cc59c62..a9535a6 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -41,7 +41,6 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.memento.Data;
-import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 
 /**
@@ -110,29 +109,39 @@ public class ObjectAdapterContext {
 oidAdapterMap.close();
 } catch(final Throwable ex) {
 // ignore
-ObjectAdapterLegacy.LOG.error("close: oidAdapterMap#close() 
failed; continuing to avoid memory leakage");
+LOG.error("close: oidAdapterMap#close() failed; continuing to 
avoid memory leakage");
 }
 
 try {
 pojoAdapterMap.close();
 } catch(final Throwable ex) {
 // ignore
-ObjectAdapterLegacy.LOG.error("close: pojoAdapterMap#close() 
failed; continuing to avoid memory leakage");
+LOG.error("close: pojoAdapterMap#close() failed; continuing to 
avoid memory leakage");
 }
 }
 
 // -- CACHING
 
 @Deprecated // don't expose caching
-public boolean containsAdapterForPojo(Object pojo) {
-return pojoAdapterMap.containsPojo(pojo);
+protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
+return pojoAdapterMap.getAdapter(pojo);
+}
+
+private void putPojo(Object pojo, ObjectAdapter adapter) {
+pojoAdapterMap.add(adapter.getObject(), adapter);
 }
 
+private void removePojo(ObjectAdapter adapter) {
+pojoAdapterMap.remove(adapter);
+}
+
+// --
+
 @Deprecated // don't expose caching
-protected ObjectAdapter lookupAdapterByPojo(Object pojo) {
-return pojoAdapterMap.getAdapter(pojo);
+public boolean containsAdapterForPojo(Object pojo) {
+return lookupAdapterByPojo(pojo)!=null;
 }
-
+
 @Deprecated // don't expose caching
 protected ObjectAdapter lookupAdapterById(Oid oid) {
 return oidAdapterMap.getAdapter(oid);
@@ -147,7 +156,7 @@ public class ObjectAdapterContext {
 if (oid != null) { // eg. value objects don't have an Oid
 oidAdapterMap.add(oid, adapter);
 }
-pojoAdapterMap.add(adapter.getObject(), adapter);
+putPojo(adapter.getObject(), adapter);
 }
 
 @Deprecated // don't expose caching
@@ -160,7 +169,7 @@ public class ObjectAdapterContext {
 if (oid != null) { // eg. value objects don't have an Oid
 oidAdapterMap.remove(oid);
 }
-pojoAdapterMap.remove(adapter);
+removePojo(adapter);
 }
 
 // -- CACHE CONSISTENCY
@@ -299,7 +308,7 @@ public class ObjectAdapterContext {
 // add all aggregated collections
 final ObjectSpecification objSpec = adapter.getSpecification();
 if (!adapter.isParentedCollection() || adapter.isParentedCollection() 
&& !objSpec.isImmutable()) {
-pojoAdapterMap.add(pojo, adapter);
+putPojo(pojo, adapter);
 }
 
 // order is important - add to pojo map first, then identity map
@@ -382,16 +391,16 @@ public class ObjectAdapterContext {
 }
 
 // associate root adapter with the new Oid, and remap
-if (ObjectAdapterLegacy.LOG.isDebugEnabled()) {
-ObjectAdapterLegacy.LOG.debug("replacing root adapter and 
re-adding into maps; oid is now: {} (was: {})", persistedRootOid.enString(), 
transientRootOid.enString());
+if (LOG.isDebugEnabled()) {
+LOG.debug("replacing root adapter and re-adding into maps; oid is 
now: {} (was: {})", persistedRootOid.enString(), transientRootOid.enString());
 }
 
 final 

[isis] 18/18: ISIS-1976: further cleaning up

2018-09-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 4b7850bff21e012e8a230919269e42e3bfeaeab9
Author: Andi Huber 
AuthorDate: Thu Sep 6 15:11:54 2018 +0200

ISIS-1976: further cleaning up

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../runtime/persistence/adapter/PojoAdapter.java   |  7 ---
 .../adaptermanager/ObjectAdapterContext.java   |  2 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  1 -
 .../ObjectAdapterContext_ServiceLookup.java| 22 +++---
 4 files changed, 16 insertions(+), 16 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index c335815..2411c26 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.runtime.persistence.adapter;
 
+import java.util.function.Function;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -55,7 +57,7 @@ public class PojoAdapter extends InstanceAbstract implements 
ObjectAdapter {
 /**
  * can be {@link #replacePojo(Object) replace}d.
  */
-private Object pojo;
+private final Object pojo;
 /**
  * can be {@link #replaceOid(Oid) replace}d.
  */
@@ -83,8 +85,7 @@ public class PojoAdapter extends InstanceAbstract implements 
ObjectAdapter {
 this.pojo = pojo;
 this.oid = oid;
 }
-
-
+
 // -- getSpecification
 
 /**
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 44fc112..3f43ace 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -245,7 +245,7 @@ public class ObjectAdapterContext {
 // -- SERVICE LOOKUP
 
 public ObjectAdapter lookupServiceAdapterFor(RootOid rootOid) {
-return serviceLookupMixin.serviceAdapterFor(rootOid);
+return serviceLookupMixin.lookupServiceAdapterFor(rootOid);
 }
 
 // -- FACTORIES
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
index b231b0c..d8f422d 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -30,7 +30,6 @@ import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
index ae92baa..f6ff249 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java
@@ -24,6 +24,8 @@ import java.util.Objects;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.base._Timing;
+import org.apache.isis.commons.internal.base._Timing.StopWatch;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.core.commons.ensure.Assert;
@@ -52,22 +54,16 @@ class ObjectAdapterContext_ServiceLookup {
 this.servicesInjector = servicesInjector;
 }
 
-ObjectAdapter serviceAdapterFor(RootOid rootOid) {
+ObjectAdapter

[isis] branch ISIS-1976-rethink-object-adapters updated: # WARNING: head commit changed in the meantime

2018-09-07 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to 
refs/heads/ISIS-1976-rethink-object-adapters by this push:
 new 2aa55b4  # WARNING: head commit changed in the meantime
2aa55b4 is described below

commit 2aa55b4a5b8dd270500a474d003ae4d35bc32b8d
Author: Andi Huber 
AuthorDate: Fri Sep 7 10:00:59 2018 +0200

# WARNING: head commit changed in the meantime

ISIS-1934: Menu Action Confirmation Dialog does not escape menu
boundaries

Task-Url: https://issues.apache.org/jira/browse/ISIS-1934
---
 .../persistence/adaptermanager/ObjectAdapterContext.java   | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
index 3f43ace..60329a9 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext.java
@@ -171,10 +171,12 @@ public class ObjectAdapterContext {
 // -- DEBUG
 
 void printContextInfo(String msg) {
-String id = Integer.toHexString(this.hashCode());
-String session = ""+persistenceSession;
-System.out.println("!!! "+String.format("%s id=%s 
session='%s'", 
-msg, id, session));
+if(LOG.isDebugEnabled()) {
+String id = Integer.toHexString(this.hashCode());
+String session = ""+persistenceSession;
+System.out.println("!!! "+String.format("%s 
id=%s session='%s'", 
+msg, id, session));
+}
 }
 
 // -- LIFE-CYCLING



[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1976: prepare for merge (PR 121)

2018-09-07 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to 
refs/heads/ISIS-1976-rethink-object-adapters by this push:
 new 986a797  ISIS-1976: prepare for merge (PR 121)
986a797 is described below

commit 986a7971331f3ed88a98c55199a308d97ab011d3
Author: Andi Huber 
AuthorDate: Fri Sep 7 12:12:08 2018 +0200

ISIS-1976: prepare for merge (PR 121)

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../isis/core/metamodel/adapter/ObjectAdapter.java  | 13 -
 .../metamodel/adapter/ObjectAdapterProvider.java|  1 -
 .../persistence/PersistenceSession5_Decouple.java   | 21 -
 .../runtime/persistence/adapter/PojoAdapter.java| 10 --
 .../ObjectAdapterContext_ObjectAdapterProvider.java |  2 +-
 5 files changed, 21 insertions(+), 26 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
index 86dc643..c0fdb13 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
@@ -487,18 +487,5 @@ public interface ObjectAdapter extends Instance {
  */
 ObjectAdapter withPojo(Object newPojo);
 
-//@Deprecated
-//public static interface Friend {
-//  /**
-//  * Sometimes it is necessary to manage the replacement of the underlying
-//  * domain object (by another component such as an object store). This 
method
-//  * allows the adapter to be kept while the domain object is replaced.
-//  */
-// void replacePojo(Object pojo);
-//}
-//
-//@Deprecated
-//Friend friend();
-
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index 3b8e0ec..eaf3eb4 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -22,7 +22,6 @@ import java.util.List;
 import java.util.function.Function;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
index f5054f0..9eb2613 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
@@ -83,7 +83,24 @@ class PersistenceSession5_Decouple  {
 final RootOid rootOid,
 final ConcurrencyChecking concurrencyChecking) {
 
-//FIXME[ISIS-1976] guard against service lookup
+/* FIXME[ISIS-1976] guard against service lookup
+ * https://github.com/apache/isis/pull/121#discussion_r215889748
+ * 
+ * Eventually I'm hoping that this code will simplify and then become 
pluggable.
+ * Assuming that we stop supporting transient pojos, instead this code 
could
+ * iterate over a set of "PersistenceProviders", following the chain of
+ * responsibility pattern, where the first PersistenceProvider that 
recognises
+ * the format of the rootOid then takes responsibility for retrieving 
the
+ * corresponding pojo from its persistence store.
+ * 
+ * In the case of a PersistenceProvider for DN, that means a query to 
the DB. In
+ * the case of a PersistenceProvider for view models, it means 
unmarshalling the
+ * state from the oid into the pojo. (fyi, there's also the optional 
SPI
+ * service, UrlEncodingService or something like, whereby the root oid 
is a key
+ * into some other datastore. So really my "PersistenceProvider" is a
+ * generalization of that concept).
+ */
+
 final ObjectAdapter serviceAdapter = 
objectAdapterContext.lookupServiceAdapterFor(rootOid);
 if (serviceAdapter != null) {
 return serviceAdapter;
@@ -105,11 +122,13 @@ class PersistenceSession5_Decouple  {
  

[isis] branch master updated (0ae1dca -> 986a797)

2018-09-07 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 0ae1dca  ISIS-1934: fixes Action Confirmation Dialog does not escape 
menu boundaries
 add aa93d1e  ISIS-1976: make ObjectAdapter.pojo final
 add 1f5520f  ISIS-1976: removing ObjectAdapter.replacePojo(Object pojo)
 add afd1fb9  ISIS-1976: let JavaCollectionFacet no longer change OA's pojo
 add 63a89c8  ISIS-1976: let 
ObjectAdapterContext.replaceRootAdapter(ObjectAdapter, 
RootAndCollectionAdapters) no longer use OA's replacePojo
 add 543759a  ISIS-1976: prepare removal of OA's replacePojo
 add b3e78b7  ISIS-1976: prepare removal of OA's lookup by pojo map
 add 5dcbc9f  ISIS-1976: minor cleanup
 add 11aa135  ISIS-1976: improve the ObjectAdapterProvider interface (API)
 add 392687a  ISIS-1976: add layer of abstraction
 add b66c9ed  ISIS-1976: make ObjectAdapter's oid immutable
 add 30d9e29  ISIS-1976: improve code readability
 add a99c1cc  ISIS-1976: restore check consistency to also check adapter's 
object equality
 add 6bf096e  ISIS-1976: remove code that seems for optimization
 add 989333f  ISIS-1976: simplify
 add 9e286dc  ISIS-1976: further simplify
 add 9eacd3c  ISIS-1976: lazy initialize OAs for services
 add f343919  ISIS-1976: cleaning up
 add 4b7850b  ISIS-1976: further cleaning up
 add 2aa55b4  # WARNING: head commit changed in the meantime
 add 986a797  ISIS-1976: prepare for merge (PR 121)

No new revisions were added by this update.

Summary of changes:
 .../commons/internal/exceptions/_Exceptions.java   |  20 ++
 .../isis/core/metamodel/adapter/ObjectAdapter.java |  36 +-
 .../metamodel/adapter/ObjectAdapterProvider.java   |  44 ++-
 .../actions/action/invocation/CommandUtil.java |   2 +-
 .../javautilcollection/JavaArrayFacet.java |   4 +-
 .../javautilcollection/JavaCollectionFacet.java|  16 +-
 .../facets/collections/modify/CollectionFacet.java |   3 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java |   3 +-
 .../BooleanPrimitiveValueSemanticsProvider.java|  32 +-
 .../facets/value/booleans/BooleanValueFacet.java   |  10 +-
 .../BooleanWrapperValueSemanticsProvider.java  |  42 +--
 .../core/metamodel/services/ServicesInjector.java  |  49 ++-
 .../specimpl/OneToOneAssociationDefault.java   |   2 +-
 .../CollectionFacetOnStandaloneList.java   |   3 +-
 .../system/persistence/PersistenceSession4.java|  93 ++---
 .../system/persistence/PersistenceSession5.java|  91 ++---
 .../persistence/PersistenceSession5_Decouple.java  |  35 +-
 .../runtime/persistence/adapter/PojoAdapter.java   |  22 +-
 .../system/persistence/PersistenceSession.java |  14 +-
 .../adaptermanager/ObjectAdapterContext.java   | 374 +++--
 .../ObjectAdapterContext_AdapterManager.java   |  58 ++--
 .../ObjectAdapterContext_Consistency.java  |  31 +-
 .../ObjectAdapterContext_MementoSupport.java   |   6 +-
 .../ObjectAdapterContext_NewIdentifier.java| 129 +++
 ...ObjectAdapterContext_ObjectAdapterProvider.java | 103 +-
 .../ObjectAdapterContext_ServiceLookup.java| 109 ++
 .../adaptermanager/RootAndCollectionAdapters.java  |  16 +-
 .../model/mementos/ObjectAdapterMemento.java   |   2 +-
 .../wicket/model/models/EntityCollectionModel.java |   2 +-
 29 files changed, 857 insertions(+), 494 deletions(-)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_NewIdentifier.java
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ServiceLookup.java



[isis] 02/02: ISIS-1976: fixing NPE when represents-persistent is not recognized by the PM yet

2018-09-09 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 289890b96c1e13b9e1a5e691f54ed87f1c031795
Author: Andi Huber 
AuthorDate: Mon Sep 10 06:24:08 2018 +0200

ISIS-1976: fixing NPE when represents-persistent is not recognized by
the PM yet

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java|  6 ++
 .../system/persistence/PersistenceSession5.java| 18 
 .../system/persistence/PersistenceSession.java | 24 --
 .../system/persistence/PersistenceSessionBase.java |  2 ++
 .../ObjectAdapterContext_NewIdentifier.java| 13 +++-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  2 +-
 .../persistence/adaptermanager/OidProviders.java   | 23 +
 7 files changed, 45 insertions(+), 43 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index e5e0b8c..7ba1caa 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -1201,10 +1201,8 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 }
 
 @Override
-public String identifierFor(final Object pojo, final Oid.State type) {
-return type == Oid.State.TRANSIENT
-? UUID.randomUUID().toString()
-: 
JdoObjectIdSerializer.toOidIdentifier(getPersistenceManager().getObjectId(pojo));
+public String identifierFor(final Object pojo) {
+return 
JdoObjectIdSerializer.toOidIdentifier(getPersistenceManager().getObjectId(pojo));
 }
 
 
diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index e77e5fb..2a9ec77 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.core.runtime.system.persistence;
 
+import static java.util.Objects.requireNonNull;
 import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
 import java.lang.reflect.Array;
@@ -33,6 +34,7 @@ import java.util.UUID;
 
 import javax.jdo.FetchGroup;
 import javax.jdo.FetchPlan;
+import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
 import javax.jdo.identity.SingleFieldIdentity;
@@ -42,6 +44,8 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
 import org.datanucleus.enhancement.Persistable;
+import org.datanucleus.enhancer.methods.IsDeleted;
+import org.datanucleus.enhancer.methods.IsPersistent;
 import org.datanucleus.exceptions.NucleusObjectNotFoundException;
 import org.datanucleus.identity.DatastoreIdImpl;
 import org.slf4j.Logger;
@@ -1193,10 +1197,16 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 }
 
 @Override
-public String identifierFor(final Object pojo, final Oid.State type) {
-return type == Oid.State.TRANSIENT
-? UUID.randomUUID().toString()
-: 
JdoObjectIdSerializer.toOidIdentifier(getPersistenceManager().getObjectId(pojo));
+public String identifierFor(final Object pojo) {
+final Object jdoOid = getPersistenceManager().getObjectId(pojo);
+if(jdoOid==null) {
+return UUID.randomUUID().toString(); //FIXME[ISIS-1976] should be 
guarded against somewhere else
+}
+
+requireNonNull(jdoOid, 
+()->String.format("Pojo of type '%s' is not recognized by 
JDO.", 
+pojo.getClass().getName()));
+return JdoObjectIdSerializer.toOidIdentifier(jdoOid);
 }
 
 
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 f0850e5..eec2996 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
@@ -29,7 +2

[isis] branch ISIS-1976-rethink-object-adapters updated (2ce76eb -> 289890b)

2018-09-09 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 2ce76eb  ISIS-1976: let OAs for values also have an Oid
 new fe0c9c5  ISIS-1976: cleanup unreachable code paths
 new 289890b  ISIS-1976: fixing NPE when represents-persistent is not 
recognized by the PM yet

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../system/persistence/PersistenceSession4.java|  6 +-
 .../system/persistence/PersistenceSession5.java| 18 --
 .../system/persistence/PersistenceSession.java | 24 +++-
 .../system/persistence/PersistenceSessionBase.java |  2 +
 .../adaptermanager/ObjectAdapterContext.java   | 20 +--
 .../ObjectAdapterContext_Factories.java|  5 --
 .../ObjectAdapterContext_NewIdentifier.java| 65 +++---
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  2 +-
 .../adaptermanager/OidAdapterHashMap.java  |  4 +-
 .../persistence/adaptermanager/OidProviders.java   | 41 +++---
 10 files changed, 70 insertions(+), 117 deletions(-)



[isis] 07/08: ISIS-1976: remove some ObjectAdapter references from PS API

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 73d4e28a1934ea43121e1a939778e188bfbe16e5
Author: Andi Huber 
AuthorDate: Mon Sep 10 15:22:37 2018 +0200

ISIS-1976: remove some ObjectAdapter references from PS API

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../applib/services/bookmark/BookmarkService.java  |   2 +-
 .../jaxbadapters/PersistentEntitiesAdapter.java|   2 +-
 .../jaxbadapters/PersistentEntityAdapter.java  |   2 +-
 .../metamodel/adapter/ObjectAdapterProvider.java   |  30 ++-
 .../system/persistence/PersistenceSession4.java| 219 -
 .../system/persistence/PersistenceSession5.java| 197 --
 .../PersistenceSessionServiceInternalDefault.java  |   2 +-
 .../system/persistence/PersistenceSession.java |  28 ++-
 .../adaptermanager/ObjectAdapterContext.java   |  60 ++
 .../DelegatingInvocationHandlerDefault.java|   2 +-
 10 files changed, 256 insertions(+), 288 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
 
b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
index f45bc17f..fa026ca 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/BookmarkService.java
@@ -85,7 +85,7 @@ public interface BookmarkService {
 /**
  * Required in order to recreate view models.
  */
-DONT_RESET
+DONT_REFRESH
 }
 
 
diff --git 
a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
 
b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
index ab962d4..6cf79f3 100644
--- 
a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
+++ 
b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntitiesAdapter.java
@@ -35,7 +35,7 @@ public class PersistentEntitiesAdapter extends 
XmlAdapter>
 List domainObjects = _Lists.newArrayList();
 for (final OidDto oidDto : oidsDto.getOid()) {
 final Bookmark bookmark = Bookmark.from(oidDto);
-Object domainObject = bookmarkService.lookup(bookmark, 
BookmarkService.FieldResetPolicy.DONT_RESET);
+Object domainObject = bookmarkService.lookup(bookmark, 
BookmarkService.FieldResetPolicy.DONT_REFRESH);
 domainObjects.add(domainObject);
 }
 return domainObjects;
diff --git 
a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
 
b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
index 1a724a1..57efc83 100644
--- 
a/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
+++ 
b/core/applib/src/main/java/org/apache/isis/schema/utils/jaxbadapters/PersistentEntityAdapter.java
@@ -29,7 +29,7 @@ public class PersistentEntityAdapter extends 
XmlAdapter {
 
 final Bookmark bookmark = Bookmark.from(oidDto);
 
-return bookmarkService.lookup(bookmark, 
BookmarkService.FieldResetPolicy.DONT_RESET);
+return bookmarkService.lookup(bookmark, 
BookmarkService.FieldResetPolicy.DONT_REFRESH);
 }
 
 @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index eaf3eb4..773f292 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -18,10 +18,15 @@
  */
 package org.apache.isis.core.metamodel.adapter;
 
+import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+
 import java.util.List;
 import java.util.function.Function;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -36,16 +41,18 @@ public interface ObjectAdapterProvider {
 
 // -- INTERFACE
 
-///**
-// * @param pojo
-// * @return oid for the given domain object 
-// */
-//Oid oidFor(Object domainObject);
+/**
+ * @param pojo
+ * @return oid for the given domain object 
+ */
+default @Nullable Oid oidFor(@Nullable Object domainObject) {
+return mapIfPresentE

[isis] 06/08: ISIS-1976: decouple lifecycle event posting from PersistenceSession

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 8ba3a7cdc4ed556baf1db4e81b25f96bc6739443
Author: Andi Huber 
AuthorDate: Mon Sep 10 13:24:19 2018 +0200

ISIS-1976: decouple lifecycle event posting from PersistenceSession

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java|  97 ++---
 .../system/persistence/PersistenceSession5.java| 107 ++
 .../system/persistence/PersistenceSession.java |   3 +-
 .../system/persistence/PersistenceSessionBase.java |   9 --
 .../adaptermanager/ObjectAdapterContext.java   |  32 -
 ...ObjectAdapterContext_LifecycleEventSupport.java |  96 +
 .../ObjectAdapterContext_ObjectCreation.java   | 158 +
 .../ObjectAdapterContext_ObjectReCreation.java |  72 --
 8 files changed, 298 insertions(+), 276 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 1acd10d..35230c5 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -441,95 +441,14 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
  */
 @Override
 public ObjectAdapter createTransientInstance(final ObjectSpecification 
objectSpec) {
-return createInstance(objectSpec, Variant.TRANSIENT, null);
+return objectAdapterContext.newInstance(objectSpec);
 }
 
 @Override
 public ObjectAdapter createViewModelInstance(final ObjectSpecification 
objectSpec, final String memento) {
-return createInstance(objectSpec, Variant.VIEW_MODEL, memento);
+return objectAdapterContext.recreateInstance(objectSpec, memento);
 }
 
-private ObjectAdapter createInstance(
-final ObjectSpecification spec,
-final Variant variant,
-final String memento) {
-if (LOG.isDebugEnabled()) {
-LOG.debug("creating {} instance of {}", variant, spec);
-}
-final Object pojo;
-
-if(variant == Variant.VIEW_MODEL) {
-pojo = objectAdapterContext.recreateViewModel(spec, memento);
-} else {
-pojo = objectAdapterContext.instantiateAndInjectServices(spec);
-}
-
-final ObjectAdapter adapter = adapterFor(pojo);
-return initializePropertiesAndDoCallback(adapter);
-}
-
-private ObjectAdapter initializePropertiesAndDoCallback(final 
ObjectAdapter adapter) {
-
-// initialize new object
-final List fields = 
adapter.getSpecification().getAssociations(Contributed.EXCLUDED);
-for (ObjectAssociation field : fields) {
-field.toDefault(adapter);
-}
-final Object pojo = adapter.getObject();
-servicesInjector.injectServicesInto(pojo);
-
-CallbackFacet.Util.callCallback(adapter, CreatedCallbackFacet.class);
-
-if (Command.class.isAssignableFrom(pojo.getClass())) {
-
-// special case... the command object is created while the 
transaction is being started and before
-// the event bus service is initialized (nb: we initialize 
services *within* a transaction).  To resolve
-// this catch-22 situation, we simply suppress the posting of this 
event for this domain class.
-
-// this seems the least unpleasant of the various options 
available:
-// * we could have put a check in the EventBusService to ignore 
the post if not yet initialized;
-//   however this might hide other genuine errors
-// * we could have used the thread-local in JdoStateManagerForIsis 
and the "skip(...)" hook in EventBusServiceJdo
-//   to have this event be skipped; but that seems like co-opting 
some other design
-// * we could have the transaction initialize the EventBusService 
as a "special case" before creating the Command;
-//   but then do we worry about it being re-init'd later by the 
ServicesInitializer?
-
-// so, doing it this way is this simplest, least obscure.
-
-if(LOG.isDebugEnabled()) {
-LOG.debug("Skipping postEvent for creation of Command pojo");
-}
-
-} else {
-postLifecycleEventIfRequired(adapter, 
CreatedLifecycleEventFacet.class);
-}
-
-return adapter;
-}
-
-
-// -- helper: postEvent
-
-@SuppressWarning

[isis] 03/08: ISIS-1976: refactor OA-by-Oid supply responsibility into new interface

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2a7dd9dad4d573dd874b09188f60be9191834f8a
Author: Andi Huber 
AuthorDate: Mon Sep 10 10:57:54 2018 +0200

ISIS-1976: refactor OA-by-Oid supply responsibility into new interface

introduces ObjectAdapterByIdProvider

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adapter/ObjectAdapterByIdProvider.java |  86 +
 .../system/persistence/PersistenceSession4.java|  79 +++-
 .../persistence/PersistenceSession4_Decouple.java  | 213 -
 .../system/persistence/PersistenceSession5.java|  67 ++-
 .../system/persistence/PersistenceSession.java |  36 ++--
 .../adaptermanager/ObjectAdapterContext.java   |  12 ++
 ...tAdapterContext_ObjectAdapterByIdProvider.java} | 129 +
 .../wicket/model/models/EntityCollectionModel.java |  12 +-
 8 files changed, 254 insertions(+), 380 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterByIdProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterByIdProvider.java
new file mode 100644
index 000..d8928bf
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterByIdProvider.java
@@ -0,0 +1,86 @@
+/*
+ *  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.adapter;
+
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+
+/**
+ * 
+ * @since 2.0.0-M2
+ *
+ */
+public interface ObjectAdapterByIdProvider {
+
+// -- INTERFACE
+
+ObjectAdapter adapterFor(RootOid rootOid, ConcurrencyChecking 
concurrencyChecking);
+Map adaptersFor(Stream rootOids, 
ConcurrencyChecking concurrencyChecking);
+
+/**
+ * As per {@link #adapterFor(RootOid, ConcurrencyChecking)}, with
+ * {@link ConcurrencyChecking#NO_CHECK no checking}.
+ *
+ * 
+ * This method  will always return an object, possibly indicating 
it is persistent; so make sure that you
+ * know that the oid does indeed represent an object you know exists.
+ * 
+ */
+default ObjectAdapter adapterFor(final RootOid rootOid) {
+return adapterFor(rootOid, ConcurrencyChecking.NO_CHECK);
+}
+
+default Map adaptersFor(Stream rootOids) {
+return adaptersFor(rootOids, ConcurrencyChecking.NO_CHECK);
+}
+
+
+// -- FOR THOSE THAT IMPLEMENT THROUGH DELEGATION
+
+public static interface Delegating extends ObjectAdapterByIdProvider {
+
+@Programmatic
+ObjectAdapterByIdProvider getObjectAdapterByIdProvider();
+
+@Programmatic
+default ObjectAdapter adapterFor(RootOid rootOid, ConcurrencyChecking 
concurrencyChecking) {
+return getObjectAdapterByIdProvider().adapterFor(rootOid, 
concurrencyChecking);
+}
+
+
+@Programmatic
+default Map adaptersFor(Stream 
rootOids, ConcurrencyChecking concurrencyChecking) {
+return getObjectAdapterByIdProvider().adaptersFor(rootOids, 
concurrencyChecking);
+}
+
+
+}
+
+
+   
+
+
+
+
+
+}
diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 7ba1caa..390853a 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -18,12 +18,14 @@
  */
 package org.apache.isis.core.runtime.system.persisten

[isis] branch ISIS-1976-rethink-object-adapters updated (289890b -> 30842ab)

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 289890b  ISIS-1976: fixing NPE when represents-persistent is not 
recognized by the PM yet
 new a95d2e9  ISIS-1976: remove TypedOid; Oids: make cached hashes final 
and fix object contracts
 new 794344b  ISIS-1976: cleaning up some fixmes
 new 2a7dd9d  ISIS-1976: refactor OA-by-Oid supply responsibility into new 
interface
 new f1e233b  ISIS-1976: removing TransactionalClosures
 new d3c46e8  ISIS-1976: decouple viewmodel re-creation from 
PersistenceSession
 new 8ba3a7c  ISIS-1976: decouple lifecycle event posting from 
PersistenceSession
 new 73d4e28  ISIS-1976: remove some ObjectAdapter references from PS API
 new 30842ab  ISIS-1976: further remove OA references from PS API

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../applib/services/bookmark/BookmarkService.java  |   2 +-
 .../jaxbadapters/PersistentEntitiesAdapter.java|   2 +-
 .../jaxbadapters/PersistentEntityAdapter.java  |   2 +-
 .../adapter/ObjectAdapterByIdProvider.java |  86 
 .../metamodel/adapter/ObjectAdapterProvider.java   |  62 ++-
 .../adapter/oid/ParentedCollectionOid.java |  21 +-
 .../isis/core/metamodel/adapter/oid/RootOid.java   |  49 +-
 .../isis/core/metamodel/adapter/oid/TypedOid.java  |  30 --
 ...ctionInvocationFacetForDomainEventAbstract.java |  17 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |  14 +-
 .../PersistenceSessionServiceInternal.java |  10 +-
 .../PersistenceSessionServiceInternalNoop.java |  15 +-
 .../system/transaction/TransactionalClosure.java   |  25 -
 .../system/persistence/PersistenceSession4.java| 544 -
 .../persistence/PersistenceSession4_Decouple.java  | 213 
 .../system/persistence/PersistenceSession5.java| 525 
 .../PersistenceSessionServiceInternalDefault.java  |  43 +-
 .../AbstractIsisSessionTemplate.java   |  10 +-
 .../system/persistence/PersistenceSession.java | 152 +++---
 .../system/persistence/PersistenceSessionBase.java |   9 -
 .../adaptermanager/ObjectAdapterContext.java   |  34 +-
 ... ObjectAdapterContext_DependencyInjection.java} |  53 +-
 ...ObjectAdapterContext_LifecycleEventSupport.java |  96 
 .../ObjectAdapterContext_MementoSupport.java   |   2 +-
 ...tAdapterContext_ObjectAdapterByIdProvider.java} | 136 --
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  14 +
 .../ObjectAdapterContext_ObjectCreation.java   | 158 ++
 .../system/transaction/IsisTransactionManager.java |  24 +-
 .../transaction/TransactionalClosureAbstract.java  |  30 --
 .../TransactionalClosureWithReturn.java|  25 -
 .../TransactionalClosureWithReturnAbstract.java|  30 --
 .../resources/DomainObjectResourceServerside.java  |   2 +-
 .../restfulobjects/server/util/OidUtils.java   |  53 +-
 .../wicket/ConverterForObjectAdapter.java  |   6 +-
 .../wicket/ConverterForObjectAdapterMemento.java   |   9 +-
 .../wicket/model/models/EntityCollectionModel.java |  12 +-
 .../ui/pages/accmngt/register/RegisterPanel.java   |   6 +-
 .../DelegatingInvocationHandlerDefault.java|   7 +-
 38 files changed, 988 insertions(+), 1540 deletions(-)
 create mode 100644 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterByIdProvider.java
 delete mode 100644 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/TypedOid.java
 delete mode 100644 
core/metamodel/src/main/java/org/apache/isis/core/runtime/system/transaction/TransactionalClosure.java
 delete mode 100644 
core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4_Decouple.java
 copy 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/{ObjectAdapterContext_NewIdentifier.java
 => ObjectAdapterContext_DependencyInjection.java} (64%)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_LifecycleEventSupport.java
 rename 
core/{plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5_Decouple.java
 => 
runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectAdapterByIdProvider.java}
 (72%)
 create mode 100644 
core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_ObjectCreation.java
 delete mode 100644 
core/runtime/src/main/java/org/apache/isis/core/

[isis] 05/08: ISIS-1976: decouple viewmodel re-creation from PersistenceSession

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit d3c46e8680309bec805efefb324fde304a3c6690
Author: Andi Huber 
AuthorDate: Mon Sep 10 12:47:03 2018 +0200

ISIS-1976: decouple viewmodel re-creation from PersistenceSession

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java| 49 +---
 .../system/persistence/PersistenceSession5.java| 46 +--
 .../system/persistence/PersistenceSession.java |  2 -
 .../adaptermanager/ObjectAdapterContext.java   | 29 +--
 .../ObjectAdapterContext_DependencyInjection.java  | 88 ++
 .../ObjectAdapterContext_MementoSupport.java   |  2 +-
 ...ctAdapterContext_ObjectAdapterByIdProvider.java |  6 +-
 .../ObjectAdapterContext_ObjectReCreation.java | 72 ++
 8 files changed, 191 insertions(+), 103 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 8af6150..1acd10d 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -459,58 +459,15 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 final Object pojo;
 
 if(variant == Variant.VIEW_MODEL) {
-pojo = recreateViewModel(spec, memento);
+pojo = objectAdapterContext.recreateViewModel(spec, memento);
 } else {
-pojo = instantiateAndInjectServices(spec);
-
+pojo = objectAdapterContext.instantiateAndInjectServices(spec);
 }
 
 final ObjectAdapter adapter = adapterFor(pojo);
 return initializePropertiesAndDoCallback(adapter);
 }
 
-//FIXME[ISIS-1976] remove
-private Object recreateViewModel(final ObjectSpecification spec, final 
String memento) {
-final ViewModelFacet facet = spec.getFacet(ViewModelFacet.class);
-if(facet == null) {
-throw new IllegalArgumentException("spec does not have 
ViewModelFacet; spec is " + spec.getFullIdentifier());
-}
-
-final Object viewModelPojo;
-if(facet.getRecreationMechanism().isInitializes()) {
-viewModelPojo = instantiateAndInjectServices(spec);
-facet.initialize(viewModelPojo, memento);
-} else {
-viewModelPojo = facet.instantiate(spec.getCorrespondingClass(), 
memento);
-}
-return viewModelPojo;
-}
-
-@Override
-public Object instantiateAndInjectServices(final ObjectSpecification 
objectSpec) {
-
-final Class correspondingClass = objectSpec.getCorrespondingClass();
-if (correspondingClass.isArray()) {
-return Array.newInstance(correspondingClass.getComponentType(), 0);
-}
-
-final Class cls = correspondingClass;
-if (Modifier.isAbstract(cls.getModifiers())) {
-throw new IsisException("Cannot create an instance of an abstract 
class: " + cls);
-}
-
-final Object newInstance;
-try {
-newInstance = cls.newInstance();
-} catch (final IllegalAccessException | InstantiationException e) {
-throw new IsisException("Failed to create instance of type " + 
objectSpec.getFullIdentifier(), e);
-}
-
-servicesInjector.injectServicesInto(newInstance);
-return newInstance;
-
-}
-
 private ObjectAdapter initializePropertiesAndDoCallback(final 
ObjectAdapter adapter) {
 
 // initialize new object
@@ -877,6 +834,8 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
 getTransactionManager().executeWithinTransaction(()->{
 makePersistentTransactionAssumed(adapter);
+// clear out the map of transient -> persistent
+// already empty // 
PersistenceSession5.this.persistentByTransient.clear();
 });
 }
 
diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index 2e94fa3..3441cf0 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5

[isis] 04/08: ISIS-1976: removing TransactionalClosures

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f1e233be8e53ae344af56ff3dd9d764eb3338243
Author: Andi Huber 
AuthorDate: Mon Sep 10 12:08:43 2018 +0200

ISIS-1976: removing TransactionalClosures

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 ...ctionInvocationFacetForDomainEventAbstract.java |  17 +---
 ...tySetterOrClearFacetForDomainEventAbstract.java |  14 +--
 .../PersistenceSessionServiceInternal.java |  10 +-
 .../PersistenceSessionServiceInternalNoop.java |  15 ++-
 .../system/transaction/TransactionalClosure.java   |  25 -
 .../system/persistence/PersistenceSession4.java|  41 ++--
 .../system/persistence/PersistenceSession5.java|  35 +--
 .../PersistenceSessionServiceInternalDefault.java  |  14 ++-
 .../AbstractIsisSessionTemplate.java   |  10 +-
 .../system/persistence/PersistenceSession.java | 113 +++--
 .../system/transaction/IsisTransactionManager.java |  24 +++--
 .../transaction/TransactionalClosureAbstract.java  |  30 --
 .../TransactionalClosureWithReturn.java|  25 -
 .../TransactionalClosureWithReturnAbstract.java|  30 --
 .../ui/pages/accmngt/register/RegisterPanel.java   |   6 +-
 15 files changed, 128 insertions(+), 281 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 997ef69..11ec2ef 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -83,7 +83,6 @@ import 
org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.specimpl.MixedInMember2;
-import org.apache.isis.core.runtime.system.transaction.TransactionalClosure;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 
 public abstract class ActionInvocationFacetForDomainEventAbstract
@@ -159,18 +158,10 @@ implements ImperativeFacet {
 final ObjectAdapter[] argumentAdapters,
 final InteractionInitiatedBy interactionInitiatedBy) {
 
-final ObjectAdapter[] holder = new ObjectAdapter[1];
-
-getPersistenceSessionServiceInternal().executeWithinTransaction(
-new TransactionalClosure(){
-@Override
-public void execute() {
-holder[0] = doInvoke(owningAction, targetAdapter, 
mixedInAdapter, argumentAdapters, interactionInitiatedBy);
-
-}
-}
-);
-return holder[0];
+final ObjectAdapter holder = 
+
getPersistenceSessionServiceInternal().executeWithinTransaction(()->
+doInvoke(owningAction, targetAdapter, mixedInAdapter, 
argumentAdapters, interactionInitiatedBy));
+return holder;
 }
 
 ObjectAdapter doInvoke(
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 84b5ee1..bb2df98 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -48,7 +48,6 @@ import 
org.apache.isis.core.metamodel.services.ixn.InteractionDtoServiceInternal
 import 
org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import 
org.apache.isis.core.metamodel.services.publishing.PublishingServiceInternal;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.runtime.system.transaction.TransactionalClosure;
 import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 
 public abstract class PropertySetterOrClearFacetForDomainEventAbstract
@@ -161,16 +160,9 @@ extends SingleValueFacetAbstract>> {
 final ObjectAdapter newValueAdapter,
 final InteractionInitiatedBy interactionInitiatedBy) {
 
-getPersistenceSessionServic

[isis] 08/08: ISIS-1976: further remove OA references from PS API

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 30842ab1d93ff5a0930d1e9d2c809798419a2320
Author: Andi Huber 
AuthorDate: Mon Sep 10 16:15:13 2018 +0200

ISIS-1976: further remove OA references from PS API

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../metamodel/adapter/ObjectAdapterProvider.java   |  32 +
 .../system/persistence/PersistenceSession4.java| 155 +++--
 .../system/persistence/PersistenceSession5.java| 153 +++-
 .../PersistenceSessionServiceInternalDefault.java  |  27 +++-
 .../system/persistence/PersistenceSession.java |  20 +--
 .../adaptermanager/ObjectAdapterContext.java   |  81 +--
 ...ctAdapterContext_ObjectAdapterByIdProvider.java |   3 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  14 ++
 .../resources/DomainObjectResourceServerside.java  |   2 +-
 .../restfulobjects/server/util/OidUtils.java   |  53 ++-
 .../DelegatingInvocationHandlerDefault.java|   5 +-
 11 files changed, 174 insertions(+), 371 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
index 773f292..34ce26a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapterProvider.java
@@ -45,6 +45,7 @@ public interface ObjectAdapterProvider {
  * @param pojo
  * @return oid for the given domain object 
  */
+@Programmatic
 default @Nullable Oid oidFor(@Nullable Object domainObject) {
 return mapIfPresentElse(adapterFor(domainObject), 
ObjectAdapter::getOid, null);
 }
@@ -82,6 +83,27 @@ public interface ObjectAdapterProvider {
 final Function rootOidFactory);
 
 
+// -- DOMAIN OBJECT CREATION SUPPORT
+
+/**
+ * 
+ * Creates a new instance of the specified type and returns it.
+ *
+ * 
+ * The returned object will be initialised (had the relevant callback
+ * lifecycle methods invoked).
+ *
+ * 
+ * While creating the object it will be initialised with default values and
+ * its created lifecycle method (its logical constructor) will be invoked.
+ *
+ */
+ObjectAdapter newTransientInstance(ObjectSpecification objectSpec);
+
+@Nullable ObjectAdapter recreateViewModelInstance(ObjectSpecification 
objectSpec, @Nullable final String memento);
+
+// -- SERVICE LOOKUP 
+
 List getServices();
 
 
@@ -123,6 +145,16 @@ public interface ObjectAdapterProvider {
 }
 
 @Programmatic
+default ObjectAdapter newTransientInstance(ObjectSpecification 
objectSpec) {
+return getObjectAdapterProvider().newTransientInstance(objectSpec);
+}
+
+@Programmatic
+default ObjectAdapter recreateViewModelInstance(ObjectSpecification 
objectSpec, final String memento) {
+return 
getObjectAdapterProvider().recreateViewModelInstance(objectSpec, memento);
+}
+
+@Programmatic
 default List getServices() {
 return getObjectAdapterProvider().getServices();
 }
diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 26ff4c0..6869eab 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -48,13 +48,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.query.Query;
-import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
@@ -65,7 +62,7 @@ import 
org.apache.isis.core.metamodel.adapter.oid.ParentedCollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import

[isis] 01/08: ISIS-1976: remove TypedOid; Oids: make cached hashes final and fix object contracts

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a95d2e90608145acabc5d17763ebc2a3655a0fcf
Author: Andi Huber 
AuthorDate: Mon Sep 10 07:28:47 2018 +0200

ISIS-1976: remove TypedOid; Oids: make cached hashes final and fix
object contracts

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../adapter/oid/ParentedCollectionOid.java | 21 --
 .../isis/core/metamodel/adapter/oid/RootOid.java   | 49 +++---
 .../isis/core/metamodel/adapter/oid/TypedOid.java  | 30 -
 3 files changed, 22 insertions(+), 78 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java
index 765b034..9f463f6 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedCollectionOid.java
@@ -21,8 +21,7 @@ package org.apache.isis.core.metamodel.adapter.oid;
 
 import java.io.IOException;
 import java.io.Serializable;
-
-import com.google.common.base.Objects;
+import java.util.Objects;
 
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
@@ -40,7 +39,7 @@ public final class ParentedCollectionOid implements 
Serializable, Oid {
 private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
 
 private final String name;
-private int cachedHashCode;
+private final int hashCode;
 
 private final RootOid parentOid;
 
@@ -56,7 +55,7 @@ public final class ParentedCollectionOid implements 
Serializable, Oid {
 Assert.assertNotNull("rootOid required", rootOid);
 this.parentOid = rootOid;
 this.name = name;
-cacheState();
+this.hashCode = calculateHash();
 }
 
 
@@ -122,6 +121,7 @@ public final class ParentedCollectionOid implements 
Serializable, Oid {
 private ParentedCollectionOid(ParentedCollectionOid oid) throws 
IOException {
 this.parentOid = oid.getRootOid();
 this.name = oid.name;
+this.hashCode = calculateHash();
 }
 
 
@@ -169,25 +169,20 @@ public final class ParentedCollectionOid implements 
Serializable, Oid {
 }
 
 public boolean equals(final ParentedCollectionOid other) {
-return Objects.equal(other.getRootOid(), getRootOid()) && 
Objects.equal(other.name, name);
+return Objects.equals(other.getRootOid(), getRootOid()) && 
Objects.equals(other.name, name);
 }
 
 
 @Override
 public int hashCode() {
-cacheState();
-return cachedHashCode;
+return hashCode;
 }
 
-private void cacheState() {
-int hashCode = 17;
-hashCode = 37 * hashCode + getRootOid().hashCode();
-hashCode = 37 * hashCode + name.hashCode();
-cachedHashCode = hashCode;
+private int calculateHash() {
+return Objects.hash(getRootOid(), name);
 }
 
 
-
 // /
 // asPersistent
 // /
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 7cbb26d..3836542 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -21,11 +21,7 @@ package org.apache.isis.core.metamodel.adapter.oid;
 
 import java.io.IOException;
 import java.io.Serializable;
-
-import com.google.common.base.Objects;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.Objects;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.encoding.DataInputExtended;
@@ -36,25 +32,20 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.schema.common.v1.BookmarkObjectState;
 import org.apache.isis.schema.common.v1.OidDto;
 
-public class RootOid implements TypedOid, Serializable {
+public class RootOid implements Oid, Serializable {
 
 // -- fields
-private final static Logger LOG = LoggerFactory.getLogger(RootOid.class);
-
-private static final long serialVersionUID = 1L;
-
+private final static long serialVersionUID = 1L;
 private final static OidMarshaller OID_MARSHALLER = OidMarshaller.INSTANCE;
 
 private final ObjectSpecId objectSpecId;
 private final String identifier;
 private final State state;
-
+private final int hashCode;
 
 // 

[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1976: introduce 'isRecognized' to PS API (Draft)

2018-09-10 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to 
refs/heads/ISIS-1976-rethink-object-adapters by this push:
 new a416a1a  ISIS-1976: introduce 'isRecognized' to PS API (Draft)
a416a1a is described below

commit a416a1a37ba7ae62b7377bebc34d2879bb972fdd
Author: Andi Huber 
AuthorDate: Mon Sep 10 19:27:13 2018 +0200

ISIS-1976: introduce 'isRecognized' to PS API (Draft)

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../system/persistence/PersistenceSession4.java   | 11 +++
 .../system/persistence/PersistenceSession5.java   | 19 ---
 .../system/persistence/PersistenceSession.java|  4 
 .../persistence/adaptermanager/OidProviders.java  |  4 ++--
 4 files changed, 29 insertions(+), 9 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
index 6869eab..b9b6ca9 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession4.java
@@ -1032,6 +1032,17 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 }
 return false;
 }
+
+@Override
+public boolean isRecognized(Object pojo) {
+if (pojo!=null && pojo instanceof Persistable) {
+final Object jdoOid = pm().getObjectId(pojo);
+if(jdoOid!=null) {
+return true;
+}
+}
+return false;
+}
 
 @Override
 public MementoRecreateObjectSupport mementoSupport() {
diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index d0f879c..4b8c6ab 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -51,7 +51,6 @@ import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -855,12 +854,7 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
 @Override
 public String identifierFor(final Object pojo) {
-final Object jdoOid = getPersistenceManager().getObjectId(pojo);
-if(jdoOid==null) {
-_Exceptions.throwUnexpectedCodeReach();
-return UUID.randomUUID().toString(); //FIXME[ISIS-1976] should be 
guarded against somewhere else
-}
-
+final Object jdoOid = pm().getObjectId(pojo);
 requireNonNull(jdoOid, 
 ()->String.format("Pojo of type '%s' is not recognized by 
JDO.", 
 pojo.getClass().getName()));
@@ -1034,6 +1028,17 @@ implements 
IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 }
 return false;
 }
+
+@Override
+public boolean isRecognized(Object pojo) {
+if (pojo!=null && pojo instanceof Persistable) {
+final Object jdoOid = pm().getObjectId(pojo);
+if(jdoOid!=null) {
+return true;
+}
+}
+return false;
+}
 
 @Override
 public MementoRecreateObjectSupport mementoSupport() {
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 f26e3c3..c87c797 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
@@ -85,6 +85,9 @@ extends
 boolean isRepresentingPersistent(Object pojo);
 /**@since 2.0.0-M2*/
 boolean isDestroyed(Object pojo);
+/** whether pojo is recognized by the persistence layer, that is, it has 
an Obj

[isis] branch master updated (8bcb3c4 -> da07f5d)

2018-08-30 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 8bcb3c4  ISIS-1895: setup the IsisSessionFilter programmatically
 add a3b5b95  ISIS-1810: working on migration notes for 2.0.0-M1
 add 52ecca8  ISIS-1810: adds section on meta annotations
 add 8ab7ade  ISIS-1810: more on migration notes
 add 7c66895  ISIS-1810: more on migration notes
 add 3543496  ISIS-1810: more on migration notes
 add 6b051c4  ISIS-1810: more on migration notes
 add a045501  ISIS-1810: updates to documentation for 2.0.0-M1
 add 4aeeefc  ISIS-1810: merges documentation commits from master
 add 7310df4  ISIS-1810: updates for publish procedure of documentation
 add b4c64f1  ISIS-1810: upgrades to release notes, migration notes
 add 9d5132a  ISIS-1810: changes migration notes links
 add ee5d747  ISIS-1810: updates for 2.0.0-M1 docs
 add 7de9a4f  ISIS-1810: tidies up formatting of migration notes
 add 19e6dd6  ISIS-1810: tidies up formatting of migration notes
 add 968814d  ISIS-1810: doc updates
 new da07f5d  Merge remote-tracking branch 'apache/maint-2.0.0-M1'

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .travis.yml|   6 -
 adocs/documentation/pom.xml|  13 +-
 .../src/main/asciidoc/documentation.adoc   |  37 ++-
 .../src/main/asciidoc/guides/ad/ad.adoc| 364 +
 .../cgcom/_cgcom_asciidoc-publish-procedure.adoc   | 126 +--
 .../guides/cgcom/_cgcom_cutting-a-release.adoc |   7 +-
 ...cgcom_release-process-for-interim-releases.adoc |   4 +-
 .../asciidoc/guides/dg/_dg_asciidoc-templates.adoc |   6 +-
 .../guides/rgant/_rgant-Action_command.adoc|   3 +-
 .../guides/rgant/_rgant-Collection_editing.adoc|   5 +-
 .../main/asciidoc/guides/rgant/_rgant-Column.adoc  |  12 +-
 .../_rgant-DomainObjectLayout_cssClassUiEvent.adoc |  53 ++-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc |  50 ++-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc|   2 +-
 .../_rgant-DomainObject_createdLifecycleEvent.adoc |  52 ++-
 .../_rgant-DomainObject_loadedLifecycleEvent.adoc  |   2 +-
 ...rgant-DomainObject_persistedLifecycleEvent.adoc |   2 +-
 ...gant-DomainObject_persistingLifecycleEvent.adoc |   2 +-
 ..._rgant-DomainObject_removingLifecycleEvent.adoc |   2 +-
 .../_rgant-DomainObject_updatedLifecycleEvent.adoc |   2 +-
 ..._rgant-DomainObject_updatingLifecycleEvent.adoc |   2 +-
 .../asciidoc/guides/rgant/_rgant-HomePage.adoc |   4 +-
 .../main/asciidoc/guides/rgant/_rgant-Inject.adoc  |  48 ++-
 .../guides/rgant/_rgant-PostConstruct.adoc |  36 +-
 .../asciidoc/guides/rgant/_rgant-PrimaryKey.adoc   |   8 +-
 .../guides/rgant/_rgant-Property_editing.adoc  |   6 +-
 .../main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc |   6 +-
 ...rgcms_classes_contributee_HasTransactionId.adoc |   2 +-
 .../guides/rgcms/_rgcms_classes_domainevent.adoc   |   8 +-
 ...gcms_classes_domainevent_ActionDomainEvent.adoc |   3 -
 .../rgcms/_rgcms_classes_lifecycleevent.adoc   |  32 +-
 ..._classes_lifecycleevent_ObjectCreatedEvent.adoc |  11 +-
 ...lasses_lifecycleevent_ObjectPersistedEvent.adoc |  10 +-
 ...asses_lifecycleevent_ObjectPersistingEvent.adoc |  11 +-
 ...classes_lifecycleevent_ObjectRemovingEvent.adoc |  10 +-
 ..._classes_lifecycleevent_ObjectUpdatedEvent.adoc |   9 +-
 ...classes_lifecycleevent_ObjectUpdatingEvent.adoc |  10 +-
 .../guides/rgcms/_rgcms_classes_mixins_Dto.adoc|   2 +-
 .../guides/rgcms/_rgcms_classes_super.adoc |  29 +-
 ...gcms_classes_super_AbstractContainedObject.adoc |  33 --
 .../_rgcms_classes_super_AbstractDomainObject.adoc |  12 -
 ...classes_super_AbstractFactoryAndRepository.adoc |  14 -
 .../_rgcms_classes_super_AbstractService.adoc  |   5 +-
 .../_rgcms_classes_super_AbstractViewModel.adoc|   5 +-
 .../rgcms/_rgcms_classes_super_FixtureScript.adoc  |   3 +-
 .../guides/rgcms/_rgcms_classes_uievent.adoc   |   6 +-
 .../guides/rgcms/_rgcms_methods_lifecycle.adoc |  48 +--
 .../rgcms/_rgcms_methods_lifecycle_created.adoc|   2 +-
 .../rgcms/_rgcms_methods_prefixes_default.adoc |  16 +-
 .../rgcms/_rgcms_methods_reserved_disable.adoc |  12 +-
 ..._persistence-layer_AuditingServiceInternal.adoc |   8 +-
 ...stence-layer_ChangedObjectsServiceInternal.adoc |  16 +-
 ...ersistence-layer_PublishingServiceInternal.adoc |  39 +--
 ...s_presentation-layer_RepresentationService.adoc |  34 +-
 .../guides/rgsvc/_rgsvc_application-layer-api.adoc |   6 +-
 ...lication-layer-api_ActionInvocationContext.adoc |  15 +-
 ...vc_application-layer-api_Backgrou

[isis] 01/01: Merge remote-tracking branch 'apache/maint-2.0.0-M1'

2018-08-30 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit da07f5db98ade31b766299fd25228345c3298ea7
Merge: 8bcb3c4 968814d
Author: Andi Huber 
AuthorDate: Fri Aug 31 05:54:59 2018 +0200

Merge remote-tracking branch 'apache/maint-2.0.0-M1'

 .travis.yml|   6 -
 adocs/documentation/pom.xml|  13 +-
 .../src/main/asciidoc/documentation.adoc   |  37 ++-
 .../src/main/asciidoc/guides/ad/ad.adoc| 364 +
 .../cgcom/_cgcom_asciidoc-publish-procedure.adoc   | 126 +--
 .../guides/cgcom/_cgcom_cutting-a-release.adoc |   7 +-
 ...cgcom_release-process-for-interim-releases.adoc |   4 +-
 .../asciidoc/guides/dg/_dg_asciidoc-templates.adoc |   6 +-
 .../guides/rgant/_rgant-Action_command.adoc|   3 +-
 .../guides/rgant/_rgant-Collection_editing.adoc|   5 +-
 .../main/asciidoc/guides/rgant/_rgant-Column.adoc  |  12 +-
 .../_rgant-DomainObjectLayout_cssClassUiEvent.adoc |  53 ++-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc |  50 ++-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc|   2 +-
 .../_rgant-DomainObject_createdLifecycleEvent.adoc |  52 ++-
 .../_rgant-DomainObject_loadedLifecycleEvent.adoc  |   2 +-
 ...rgant-DomainObject_persistedLifecycleEvent.adoc |   2 +-
 ...gant-DomainObject_persistingLifecycleEvent.adoc |   2 +-
 ..._rgant-DomainObject_removingLifecycleEvent.adoc |   2 +-
 .../_rgant-DomainObject_updatedLifecycleEvent.adoc |   2 +-
 ..._rgant-DomainObject_updatingLifecycleEvent.adoc |   2 +-
 .../asciidoc/guides/rgant/_rgant-HomePage.adoc |   4 +-
 .../main/asciidoc/guides/rgant/_rgant-Inject.adoc  |  48 ++-
 .../guides/rgant/_rgant-PostConstruct.adoc |  36 +-
 .../asciidoc/guides/rgant/_rgant-PrimaryKey.adoc   |   8 +-
 .../guides/rgant/_rgant-Property_editing.adoc  |   6 +-
 .../main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc |   6 +-
 ...rgcms_classes_contributee_HasTransactionId.adoc |   2 +-
 .../guides/rgcms/_rgcms_classes_domainevent.adoc   |   8 +-
 ...gcms_classes_domainevent_ActionDomainEvent.adoc |   3 -
 .../rgcms/_rgcms_classes_lifecycleevent.adoc   |  32 +-
 ..._classes_lifecycleevent_ObjectCreatedEvent.adoc |  11 +-
 ...lasses_lifecycleevent_ObjectPersistedEvent.adoc |  10 +-
 ...asses_lifecycleevent_ObjectPersistingEvent.adoc |  11 +-
 ...classes_lifecycleevent_ObjectRemovingEvent.adoc |  10 +-
 ..._classes_lifecycleevent_ObjectUpdatedEvent.adoc |   9 +-
 ...classes_lifecycleevent_ObjectUpdatingEvent.adoc |  10 +-
 .../guides/rgcms/_rgcms_classes_mixins_Dto.adoc|   2 +-
 .../guides/rgcms/_rgcms_classes_super.adoc |  29 +-
 ...gcms_classes_super_AbstractContainedObject.adoc |  33 --
 .../_rgcms_classes_super_AbstractDomainObject.adoc |  12 -
 .../_rgcms_classes_super_AbstractService.adoc  |   5 +-
 .../_rgcms_classes_super_AbstractViewModel.adoc|   5 +-
 .../rgcms/_rgcms_classes_super_FixtureScript.adoc  |   3 +-
 .../guides/rgcms/_rgcms_classes_uievent.adoc   |   6 +-
 .../guides/rgcms/_rgcms_methods_lifecycle.adoc |  48 +--
 .../rgcms/_rgcms_methods_lifecycle_created.adoc|   2 +-
 .../rgcms/_rgcms_methods_prefixes_default.adoc |  16 +-
 .../rgcms/_rgcms_methods_reserved_disable.adoc |  12 +-
 ..._persistence-layer_AuditingServiceInternal.adoc |   8 +-
 ...stence-layer_ChangedObjectsServiceInternal.adoc |  16 +-
 ...ersistence-layer_PublishingServiceInternal.adoc |  39 +--
 ...s_presentation-layer_RepresentationService.adoc |  34 +-
 .../guides/rgsvc/_rgsvc_application-layer-api.adoc |   6 +-
 ...lication-layer-api_ActionInvocationContext.adoc |  15 +-
 ...vc_application-layer-api_BackgroundService.adoc |   7 +-
 ...rgsvc_application-layer-api_CommandContext.adoc |  59 ++--
 ...svc_application-layer-api_DtoMappingHelper.adoc |   2 +-
 ...rgsvc_application-layer-api_WrapperFactory.adoc |   4 +-
 ...vc_bootstrapping-spi_ClassDiscoveryService.adoc |   2 +-
 .../guides/rgsvc/_rgsvc_core-domain-api.adoc   |  17 +-
 .../rgsvc/_rgsvc_core-domain-api_ClockService.adoc |  19 +-
 ...gsvc_core-domain-api_DomainObjectContainer.adoc |  34 --
 ..._DomainObjectContainer_object-creation-api.adoc |  25 --
 ...mainObjectContainer_object-persistence-api.adoc |  52 ---
 ...n-api_DomainObjectContainer_validation-api.adoc |  28 --
 .../rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc   |   2 -
 .../_rgsvc_integration-api_BookmarkService.adoc|   2 +-
 .../rgsvc/_rgsvc_integration-api_JaxbService.adoc  |   2 +-
 .../main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc   | 135 +++-
 .../asciidoc/guides/rgsvc/_rgsvc_metadata-api.adoc |   2 +-
 .../guides/rgsvc/_rgsvc_persistence-layer-api.adoc |   2 +-
 ...rgsvc_persistence-layer-api_IsisJdoSupport.adoc |  12 +-
 ...rgsvc_persistence-layer-api_MetricsService.adoc |  19 +-
 ...vc_persistence-layer-api_RepositoryService.adoc |   9 +-
 ...rgsvc_persistence

[isis] branch master updated: ISIS-1974: polishing ThreadPoolSupport

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 237e0bb  ISIS-1974: polishing ThreadPoolSupport
237e0bb is described below

commit 237e0bb9ac7ed6ed3b5b838f52d4c81a884306a0
Author: Andi Huber 
AuthorDate: Fri Aug 31 09:36:08 2018 +0200

ISIS-1974: polishing ThreadPoolSupport
---
 .../core/runtime/threadpool/ThreadPoolSupport.java | 93 +-
 1 file changed, 54 insertions(+), 39 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
index 7a37e70..8295e55 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
@@ -54,9 +54,16 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 private static final Logger LOG = 
LoggerFactory.getLogger(ThreadPoolSupport.class);
 
 private final ThreadGroup group;
-private final ThreadPoolExecutor executor;
+private final ThreadPoolExecutor concurrentExecutor;
 private final ThreadPoolExecutor sequentialExecutor;
 
+/**
+ * @return the application-scoped singleton ThreadPoolSupport instance
+ */
+public static ThreadPoolSupport getInstance() {
+return _Context.computeIfAbsent(ThreadPoolSupport.class, __-> new 
ThreadPoolSupport());
+}
+
 private ThreadPoolSupport() {
 
 group = new ThreadGroup(ThreadPoolSupport.class.getName());
@@ -72,7 +79,7 @@ public final class ThreadPoolSupport implements AutoCloseable 
{
 ()->new LinkedBlockingQueue<>(queueCapacity);
 
 
-executor = new ThreadPoolExecutor(
+concurrentExecutor = new ThreadPoolExecutor(
 corePoolSize,
 maximumPoolSize,
 keepAliveTimeSecs, TimeUnit.SECONDS,
@@ -85,7 +92,44 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 threadFactory);
 
 }
+
+/*
+ * Implementation Note: triggered by _Context.clear() when application 
shuts down.
+ */
+@Override
+public void close() throws Exception {
+try {
+concurrentExecutor.shutdown();
+} finally {
+// in case the previous throws, continue execution here
+sequentialExecutor.shutdown();
+}
+}
 
+/**
+ * Executes specified {@code callables} on the default executor.  
+ * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
+ * @param callables nullable
+ * @return non-null
+ */
+public List> invokeAll(@Nullable final 
List> callables) {
+return invokeAll(concurrentExecutor, callables);
+}
+
+/**
+ * Executes specified {@code callables} on the sequential executor in 
sequence, one by one.
+ * @param callables nullable
+ * @return non-null
+ */
+public List> invokeAllSequential(@Nullable final 
List> callables) {
+return invokeAll(sequentialExecutor, callables);
+}
+
+/**
+ * Waits if necessary for the computation to complete. (Suppresses checked 
exceptions.)
+ * @param futures
+ * @return list of computation results.
+ */
 public static List join(final List> futures) {
 if (futures == null) {
 return null;
@@ -104,6 +148,11 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 }
 }
 
+/**
+ * Waits if necessary for the computation to complete. (Suppresses checked 
exceptions.)
+ * @param future
+ * @return the computation result
+ */
 public static Object join(final Future future) {
 try {
 return future.get();
@@ -113,13 +162,9 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 return null;
 }
 
-/**
- * Executes specified {@code callables} on the default executor.  
- * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
- * @param callables nullable
- * @return non-null
- */
-public List> invokeAll(@Nullable final 
List> callables) {
+// -- HELPER
+
+private List> invokeAll(ThreadPoolExecutor executor, 
@Nullable final List> callables) {
 if(isEmpty(callables)) {
 return Collections.emptyList();
 }
@@ -130,34 +175,4 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 }
 }
 
-/**
- * Executes specified {@code callables} on the sequential executor in 
sequence, one by one.
- * @param callables nullable
- * @return non-null
- */
-public List>

[isis] 02/02: ISIS-1895: refactoring into a new module package, also adding comments

2018-08-29 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a117c92b017211a1704851f2818deb033174a0bf
Author: Andi Huber 
AuthorDate: Thu Aug 30 06:33:57 2018 +0200

ISIS-1895: refactoring into a new module package, also adding comments

Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
 .../isis/core/webapp/IsisWebAppContextListener.java   |  8 ++--
 .../isis/core/webapp/{ => modules}/WebModule.java | 19 ---
 .../{ => modules}/WebModule_LogOnExceptionLogger.java |  2 +-
 .../core/webapp/{ => modules}/WebModule_NoWicket.java |  4 +++-
 .../core/webapp/{ => modules}/WebModule_RestEasy.java |  2 +-
 .../core/webapp/{ => modules}/WebModule_Shiro.java|  2 +-
 .../core/webapp/{ => modules}/WebModule_Wicket.java   |  2 +-
 7 files changed, 29 insertions(+), 10 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
index 40612fe..6579f22 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
@@ -32,12 +32,16 @@ import javax.servlet.annotation.WebListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.core.webapp.modules.WebModule;
+
 /**
  * 
  * Introduced to render web.xml listener configurations obsolete.
  *  
- * Acts as the single application entry-point when running within a Servlet 
context.
- * Installs WebModules on the ServletContext when discovered on the 
class-path. 
+ * Acts as the single application entry-point for setting up the 
+ * ServletContext programmatically.
+ *  
+ * Installs {@link WebModule}s on the ServletContext. 
  *
  *  
  * @since 2.0.0
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java
similarity index 72%
rename from 
core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java
rename to 
core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java
index e8594f2..a7cf761 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.webapp;
+package org.apache.isis.core.webapp.modules;
 
 import java.util.stream.Stream;
 
@@ -24,7 +24,15 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletException;
 
+import org.apache.isis.core.webapp.IsisWebAppContextListener;
+
 /**
+ * Introduced to render web.xml listener configurations obsolete.
+ * 
+ * WebModule instances are used by the {@link IsisWebAppContextListener} to 
setup 
+ * the ServletContext programmatically.
+ * 
+ * 
  * @since 2.0.0
  */
 public interface WebModule {
@@ -55,12 +63,17 @@ public interface WebModule {
  */
 static Stream discoverWebModules() {
 
+//TODO [ahuber] instead of providing a static list of modules, modules 
could be discovered on 
+// the class-path (in case we have plugins that provide such modules).
+// We need yet to decide a mechanism, that enforces a certain ordering 
of these modules, since
+// this influences the order in which filters are processed.
+
 return Stream.of(
-new WebModule_Shiro(),
+new WebModule_Shiro(), // filters before all others
 new WebModule_Wicket(),
 new WebModule_NoWicket(), // not required if the Wicket viewer 
is in use
 new WebModule_RestEasy(), // default REST provider
-new WebModule_LogOnExceptionLogger() // log any logon 
exceptions
+new WebModule_LogOnExceptionLogger() // log any logon 
exceptions, filters after all others
 );
 }
 
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule_LogOnExceptionLogger.java
 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_LogOnExceptionLogger.java
similarity index 98%
rename from 
core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule_LogOnExceptionLogger.java
rename to 
core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_LogOnExceptionLogger.java
index f9c9423..379c3e8 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule_LogOnExceptionLogger.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/modules/WebModule_LogOnExceptionLogger.java
@@ -16,7 +16,7 @@
  * 

[isis] branch master updated (809e2a0 -> a117c92)

2018-08-29 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 809e2a0  ISIS-1895: web.xml no longer needed for Listeners, Filters 
and Servlets
 new dbf1c42  ISIS-1895: minor java-doc improvements
 new a117c92  ISIS-1895: refactoring into a new module package, also adding 
comments

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../core/webapp/IsisWebAppContextListener.java | 19 +---
 .../isis/core/webapp/{ => modules}/WebModule.java  | 26 --
 .../WebModule_LogOnExceptionLogger.java|  2 +-
 .../webapp/{ => modules}/WebModule_NoWicket.java   |  4 +++-
 .../webapp/{ => modules}/WebModule_RestEasy.java   |  2 +-
 .../core/webapp/{ => modules}/WebModule_Shiro.java |  2 +-
 .../webapp/{ => modules}/WebModule_Wicket.java |  2 +-
 7 files changed, 37 insertions(+), 20 deletions(-)
 rename core/runtime/src/main/java/org/apache/isis/core/webapp/{ => 
modules}/WebModule.java (64%)
 rename core/runtime/src/main/java/org/apache/isis/core/webapp/{ => 
modules}/WebModule_LogOnExceptionLogger.java (98%)
 rename core/runtime/src/main/java/org/apache/isis/core/webapp/{ => 
modules}/WebModule_NoWicket.java (94%)
 rename core/runtime/src/main/java/org/apache/isis/core/webapp/{ => 
modules}/WebModule_RestEasy.java (98%)
 rename core/runtime/src/main/java/org/apache/isis/core/webapp/{ => 
modules}/WebModule_Shiro.java (98%)
 rename core/runtime/src/main/java/org/apache/isis/core/webapp/{ => 
modules}/WebModule_Wicket.java (98%)



[isis] 01/02: ISIS-1895: minor java-doc improvements

2018-08-29 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit dbf1c42502cb5607e009305437ef218e5ac97cf3
Author: Andi Huber 
AuthorDate: Thu Aug 30 06:21:49 2018 +0200

ISIS-1895: minor java-doc improvements

Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
 .../apache/isis/core/webapp/IsisWebAppContextListener.java  | 13 ++---
 .../main/java/org/apache/isis/core/webapp/WebModule.java|  7 +++
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
index 8568b28..40612fe 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppContextListener.java
@@ -37,8 +37,7 @@ import org.slf4j.LoggerFactory;
  * Introduced to render web.xml listener configurations obsolete.
  *  
  * Acts as the single application entry-point when running within a Servlet 
context.
- * Delegates the bootstrapping to appropriate 'bootstrappers' that are 
discovered 
- * on the class-path. 
+ * Installs WebModules on the ServletContext when discovered on the 
class-path. 
  *
  *  
  * @since 2.0.0
@@ -59,7 +58,7 @@ public class IsisWebAppContextListener implements 
ServletContextListener {
 final ServletContext context = event.getServletContext();
 
 WebModule.discoverWebModules()
-.filter(module->module.isAvailable(context))
+.filter(module->module.isAvailable(context)) // filter those 
WebModules that are applicable
 .forEach(module->addListener(context, module));
 
 activeListeners.forEach(listener->listener.contextInitialized(event));
@@ -73,12 +72,12 @@ public class IsisWebAppContextListener implements 
ServletContextListener {
 
 // -- HELPER
 
-private void addListener(ServletContext context, WebModule provider) {
-LOG.info(String.format("ServletContext: adding '%s'", 
provider.getName()));
+private void addListener(ServletContext context, WebModule module) {
+LOG.info(String.format("ServletContext: adding '%s'", 
module.getName()));
 try {
-acceptIfPresent(provider.init(context), activeListeners::add);
+acceptIfPresent(module.init(context), activeListeners::add);
 } catch (ServletException e) {
-LOG.error(String.format("Failed to add '%s' to the 
ServletContext.", provider.getName()), e);
+LOG.error(String.format("Failed to add '%s' to the 
ServletContext.", module.getName()), e);
 }  
 }
 
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java
index 8db2b6f..e8594f2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/webapp/WebModule.java
@@ -32,7 +32,7 @@ public interface WebModule {
 // -- INTERFACE
 
 /**
- * @return (display-) name of this provider
+ * @return (display-) name of this module
  */
 public String getName();
 
@@ -44,15 +44,14 @@ public interface WebModule {
 
 /**
  * @param ctx ServletContext
- * @return whether this provider is available on the class-path and also 
applicable 
+ * @return whether this module is available (on the class-path) and also 
applicable 
  */
 public boolean isAvailable(ServletContext ctx);
 
 // -- DISCOVERY 
 
 /**
- * Searches the class-path for 'bootstrappers'. 
- * @return stream of 'bootstrappers'
+ * @return Stream of 'known' WebModules, whether applicable or not is not 
decided here 
  */
 static Stream discoverWebModules() {
 



[isis] 01/03: ISIS-1974: (porting from 1.16.x) support sequential execution

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 539e004310ef7c2511e699ea01e00dca538304a8
Author: Andi Huber 
AuthorDate: Fri Aug 31 07:00:09 2018 +0200

ISIS-1974: (porting from 1.16.x)  support sequential execution

in ThreadPoolSupport

Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
 .../core/runtime/threadpool/ThreadPoolSupport.java | 69 ++
 1 file changed, 56 insertions(+), 13 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
index 5fb798e..7a37e70 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
@@ -19,6 +19,9 @@
 
 package org.apache.isis.core.runtime.threadpool;
 
+import static org.apache.isis.commons.internal.base._NullSafe.isEmpty;
+
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.Callable;
@@ -28,12 +31,16 @@ import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
+
+import javax.annotation.Nullable;
 
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.context._Context;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.context._Context;
+
 /**
  * ThreadPoolSupport is application-scoped, meaning ThreadPoolSupport is 
closed on
  * application's end of life-cycle.
@@ -48,6 +55,7 @@ public final class ThreadPoolSupport implements AutoCloseable 
{
 
 private final ThreadGroup group;
 private final ThreadPoolExecutor executor;
+private final ThreadPoolExecutor sequentialExecutor;
 
 private ThreadPoolSupport() {
 
@@ -56,21 +64,26 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 final int corePoolSize = Runtime.getRuntime().availableProcessors();
 final int maximumPoolSize = Runtime.getRuntime().availableProcessors();
 final int keepAliveTimeSecs = 5;
+
+final ThreadFactory threadFactory = (Runnable r) -> new Thread(group, 
r);
 
 final int queueCapacity = 25;
-final BlockingQueue workQueue = new 
LinkedBlockingQueue<>(queueCapacity);
-
+final Supplier> workQueueFactory = 
+()->new LinkedBlockingQueue<>(queueCapacity);
+
+
 executor = new ThreadPoolExecutor(
 corePoolSize,
 maximumPoolSize,
 keepAliveTimeSecs, TimeUnit.SECONDS,
-workQueue,
-new ThreadFactory() {
-@Override
-public Thread newThread(final Runnable r) {
-return new Thread(group, r);
-}
-});
+workQueueFactory.get(),
+threadFactory);
+
+sequentialExecutor = new ThreadPoolExecutor(1, 1, // fixed size = 1
+keepAliveTimeSecs, TimeUnit.MILLISECONDS,
+workQueueFactory.get(),
+threadFactory);
+
 }
 
 public static List join(final List> futures) {
@@ -100,7 +113,16 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 return null;
 }
 
-public List> invokeAll(final List> 
callables) {
+/**
+ * Executes specified {@code callables} on the default executor.  
+ * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
+ * @param callables nullable
+ * @return non-null
+ */
+public List> invokeAll(@Nullable final 
List> callables) {
+if(isEmpty(callables)) {
+return Collections.emptyList();
+}
 try {
 return executor.invokeAll(callables);
 } catch (InterruptedException e) {
@@ -108,13 +130,34 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 }
 }
 
+/**
+ * Executes specified {@code callables} on the sequential executor in 
sequence, one by one.
+ * @param callables nullable
+ * @return non-null
+ */
+public List> invokeAllSequential(@Nullable final 
List> callables) {
+if(isEmpty(callables)) {
+return Collections.emptyList();
+}
+try {
+return sequentialExecutor.invokeAll(callables);
+} catch (InterruptedException e) {
+throw new RuntimeExcepti

[isis] 03/03: ISIS-1974: (porting from maint-1.16.2)

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f8f3b5614020575d2a574f23935d31f48c6f
Author: Andi Huber 
AuthorDate: Fri Aug 31 09:16:17 2018 +0200

ISIS-1974: (porting from maint-1.16.2)

working towards removing SpecificationLoader
initializes the Isis metamodel and DN in parallel
---
 .../plugins/jdo/dn4/IsisJdoSupportPlugin4.java |  5 +-
 .../DataNucleusApplicationComponents4.java | 38 +---
 .../persistence/PersistenceSessionFactory4.java| 47 --
 .../plugins/jdo/dn5/IsisJdoSupportPlugin5.java |  5 +-
 .../DataNucleusApplicationComponents5.java | 15 +
 .../persistence/PersistenceSessionFactory5.java| 47 --
 .../isis/core/metamodel/IsisJdoRuntimePlugin.java  |  3 +-
 .../persistence/PersistenceSessionFactory.java |  9 ++-
 .../system/session/IsisSessionFactoryBuilder.java  | 71 +-
 .../objectstore/jdo/service/RegisterEntities.java  | 27 
 10 files changed, 133 insertions(+), 134 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
index 8470ee7..c1026c8 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
@@ -22,7 +22,6 @@ import javax.annotation.Nullable;
 
 import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
 import org.apache.isis.core.metamodel.IsisJdoRuntimePlugin;
-import 
org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import 
org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 import 
org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory4;
 
@@ -42,8 +41,8 @@ public class IsisJdoSupportPlugin4 implements 
IsisJdoMetamodelPlugin, IsisJdoRun
 }
 
 @Override
-public PersistenceSessionFactory 
getPersistenceSessionFactory(ConfigurationServiceInternal isisConfiguration) {
-return new PersistenceSessionFactory4(isisConfiguration);
+public PersistenceSessionFactory 
getPersistenceSessionFactory(/*ConfigurationServiceInternal 
isisConfiguration*/) {
+return new PersistenceSessionFactory4(/*isisConfiguration*/);
 }
 
 }
diff --git 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
index 8f08291..fbe6318 100644
--- 
a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
+++ 
b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
@@ -25,6 +25,17 @@ import java.util.Set;
 import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManagerFactory;
 
+import com.google.common.base.Joiner;
+import com.google.common.collect.Maps;
+
+import org.datanucleus.PersistenceNucleusContext;
+import org.datanucleus.PropertyNames;
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.datanucleus.metadata.MetaDataListener;
+import org.datanucleus.metadata.MetaDataManager;
+import org.datanucleus.store.StoreManager;
+import org.datanucleus.store.schema.SchemaAwareStoreManager;
+
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.factory.InstanceUtil;
@@ -36,16 +47,6 @@ import 
org.apache.isis.objectstore.jdo.datanucleus.DataNucleusLifeCycleHelper;
 import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPropertiesAware;
 import 
org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoNamedQuery;
 import 
org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoQueryFacet;
-import org.datanucleus.PersistenceNucleusContext;
-import org.datanucleus.PropertyNames;
-import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
-import org.datanucleus.metadata.MetaDataListener;
-import org.datanucleus.metadata.MetaDataManager;
-import org.datanucleus.store.StoreManager;
-import org.datanucleus.store.schema.SchemaAwareStoreManager;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.Maps;
 
 public class DataNucleusApplicationComponents4 implements 
ApplicationScopedComponent {
 
@@ -82,35 +83,25 @@ public class DataNucleusApplicationComponents4 implements 
ApplicationScopedCompo
 
 private final Set persistableClassNameSet;
 private final

[isis] branch master updated (da07f5d -> f8f3b56)

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from da07f5d  Merge remote-tracking branch 'apache/maint-2.0.0-M1'
 new 539e004  ISIS-1974: (porting from 1.16.x)  support sequential execution
 new fe8542e  ISIS-1841: Internal API: add a thread-safe variant of _Lacy
 new f8f3b56  ISIS-1974: (porting from maint-1.16.2)

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/isis/commons/internal/base/_Lazy.java   |  8 ++-
 .../base/{_Lazy.java => _LazyThreadSafe.java}  | 37 +++
 .../core/runtime/threadpool/ThreadPoolSupport.java | 69 +
 .../plugins/jdo/dn4/IsisJdoSupportPlugin4.java |  5 +-
 .../DataNucleusApplicationComponents4.java | 38 +---
 .../persistence/PersistenceSessionFactory4.java| 47 --
 .../plugins/jdo/dn5/IsisJdoSupportPlugin5.java |  5 +-
 .../DataNucleusApplicationComponents5.java | 15 +
 .../persistence/PersistenceSessionFactory5.java| 47 --
 .../isis/core/metamodel/IsisJdoRuntimePlugin.java  |  3 +-
 .../persistence/PersistenceSessionFactory.java |  9 ++-
 .../system/session/IsisSessionFactoryBuilder.java  | 71 +-
 .../objectstore/jdo/service/RegisterEntities.java  | 27 
 13 files changed, 221 insertions(+), 160 deletions(-)
 copy 
core/commons/src/main/java/org/apache/isis/commons/internal/base/{_Lazy.java => 
_LazyThreadSafe.java} (65%)



[isis] branch master updated (237e0bb -> 51ab3e1)

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 237e0bb  ISIS-1974: polishing ThreadPoolSupport
 new b730336  ISIS-1841: improve ThreadPoolSupport's time-resolution for 
logging
 new 51ab3e1  ISIS-1895: optimizations and cleanup

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../internal/base/{_Casts.java => _Timing.java}|  67 ++-
 .../configbuilder/IsisConfigurationBuilder.java|   6 +-
 .../core/runtime/threadpool/ThreadPoolSupport.java |  10 +-
 .../isis/core/webapp/IsisWebAppConfigProvider.java |  35 +-
 .../core/webapp/IsisWebAppContextListener.java |  12 +-
 .../apache/isis/core/webapp/modules/WebModule.java |  21 -
 .../core/webapp/modules/WebModule_RestEasy.java|   4 +-
 .../isis/core/webapp/modules/WebModule_Wicket.java |  11 +-
 .../wicket/viewer/IsisWicketApplication.java   | 635 +
 .../viewer/IsisWicketApplication_Experimental.java | 107 
 10 files changed, 475 insertions(+), 433 deletions(-)
 copy 
core/commons/src/main/java/org/apache/isis/commons/internal/base/{_Casts.java 
=> _Timing.java} (50%)
 create mode 100644 
core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_Experimental.java



[isis] 02/02: ISIS-1895: optimizations and cleanup

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 51ab3e1e28faf8d63d4a8dcf9285309f677f6595
Author: Andi Huber 
AuthorDate: Fri Aug 31 14:37:46 2018 +0200

ISIS-1895: optimizations and cleanup

cleaning up IsisWicketApplication

reuse configuration instances when applicable


Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
 .../configbuilder/IsisConfigurationBuilder.java|   6 +-
 .../isis/core/webapp/IsisWebAppConfigProvider.java |  35 +-
 .../core/webapp/IsisWebAppContextListener.java |  12 +-
 .../apache/isis/core/webapp/modules/WebModule.java |  21 -
 .../core/webapp/modules/WebModule_RestEasy.java|   4 +-
 .../isis/core/webapp/modules/WebModule_Wicket.java |  11 +-
 .../wicket/viewer/IsisWicketApplication.java   | 635 +
 .../viewer/IsisWicketApplication_Experimental.java | 107 
 8 files changed, 427 insertions(+), 404 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
index 9b3e5c2..a8790a0 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
@@ -366,7 +366,9 @@ public final class IsisConfigurationBuilder {
 }
 }
 
-
+public String peekAt(String key) {
+return configuration.getString(key);
+}
 
 // -- dumpResourcesToLog, toString
 
@@ -397,6 +399,4 @@ public final class IsisConfigurationBuilder {
 return toString.toString(this);
 }
 
-
-
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
index c36a9ae..5b22087 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/webapp/IsisWebAppConfigProvider.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.core.webapp;
 
+import static org.apache.isis.commons.internal.base._With.ifPresentElse;
+import static org.apache.isis.commons.internal.base._With.requires;
 import static org.apache.isis.commons.internal.context._Context.getOrThrow;
 import static org.apache.isis.commons.internal.context._Context.putSingleton;
 
@@ -26,7 +28,6 @@ import javax.servlet.ServletContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import 
org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath;
 import 
org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath;
@@ -53,28 +54,20 @@ public class IsisWebAppConfigProvider {
 
 /**
  * If available reuses the IsisConfigurationBuilder instance that is 
already on the ServletContext or
- * creates a new one. 
+ * creates a new one and puts it on the ServletContext.
  * 
  * @param servletContext
  * @return
  */
-public IsisConfigurationBuilder getConfigurationBuilder(final 
ServletContext servletContext) {
+public synchronized IsisConfigurationBuilder getConfigurationBuilder(final 
ServletContext servletContext) {
 IsisConfigurationBuilder isisConfigurationBuilder =
 (IsisConfigurationBuilder) 
servletContext.getAttribute(WebAppConstants.CONFIGURATION_BUILDER_KEY);
 if(isisConfigurationBuilder == null) {
 isisConfigurationBuilder = 
newIsisConfigurationBuilder(servletContext);
+
servletContext.setAttribute(WebAppConstants.CONFIGURATION_BUILDER_KEY, 
isisConfigurationBuilder);
 }
 return isisConfigurationBuilder;
 }
-
-/**
- * Shortcut for {@code 
getConfigurationBuilder(servletContext).peekConfiguration()}
- * @param servletContext
- * @return a configuration copy
- */
-public IsisConfiguration peekConfiguration(final ServletContext 
servletContext) {
-return getConfigurationBuilder(servletContext).peekConfiguration();
-}
 
 /**
  * Returns a new IsisConfigurationBuilder populated with all currently 
available configuration values. 
@@ -88,6 +81,24 @@ public class IsisWebAppConfigProvider {
 return isisConfigurationBuilder;
 }
 
+// -- PEEKING
+
+/**
+ * Try to fetch the value from config stored under {@code key} else 
fallback to {@code defaultValue}
+ * @param servletContext
+ * @param key
+ * @param defaultValue
+ * @return non-null
+ */
+public String peekAtOrDefault

[isis] 01/02: ISIS-1841: improve ThreadPoolSupport's time-resolution for logging

2018-08-31 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit b7303365e0be25744017ff04728c9b8cb392e174
Author: Andi Huber 
AuthorDate: Fri Aug 31 10:57:34 2018 +0200

ISIS-1841: improve ThreadPoolSupport's time-resolution for logging

also extend Internal API to support time measuring idioms
---
 .../apache/isis/commons/internal/base/_Timing.java | 85 ++
 .../core/runtime/threadpool/ThreadPoolSupport.java | 10 +--
 2 files changed, 90 insertions(+), 5 deletions(-)

diff --git 
a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java 
b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java
new file mode 100644
index 000..e34f107
--- /dev/null
+++ 
b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java
@@ -0,0 +1,85 @@
+/*
+ *  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.commons.internal.base;
+
+/**
+ * - internal use only -
+ * 
+ * Time measuring utilities.
+ * 
+ * 
+ * WARNING: Do NOT use any of the classes provided by this 
package! 
+ * These may be changed or removed without notice!
+ * 
+ *
+ * @since 2.0.0
+ */
+public final class _Timing {
+
+private _Timing(){}
+
+/**
+ * @return a new 'now' started instance of {@link StopWatch}
+ */
+public static StopWatch now() {
+return new StopWatch();
+}
+
+/**
+ * Non thread safe start/stop watch utilizing the currently running
+ * JVM's high-resolution time source.
+ */
+public static final class StopWatch {
+
+private long t0 = 0;
+private long t1 = 0;
+private boolean stopped;
+
+private StopWatch() {
+start();
+}
+
+public StopWatch start() {
+t0 = System.nanoTime();
+stopped = false;
+return this;
+}
+
+public StopWatch stop() {
+t1 = System.nanoTime();
+stopped  = true;
+return this;
+}
+
+public double getMillis() {
+return 0.000_001 * getNanos();
+}
+
+public double getMicros() {
+return 0.001 * getNanos();
+}
+
+public long getNanos() {
+return stopped ? t1 - t0 : System.nanoTime() - t0 ;
+}
+
+}
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
index 8295e55..13f220a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
@@ -130,12 +130,12 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
  * @param futures
  * @return list of computation results.
  */
-public static List join(final List> futures) {
+public static List join(@Nullable final List> 
futures) {
 if (futures == null) {
 return null;
 }
-
-final long t0 = System.currentTimeMillis();
+
+final long t0 = System.nanoTime();
 try{
 final List returnValues = _Lists.newArrayList();
 for (Future future : futures) {
@@ -143,8 +143,8 @@ public final class ThreadPoolSupport implements 
AutoCloseable {
 }
 return returnValues;
 } finally {
-final long t1 = System.currentTimeMillis();
-LOG.info("join'ing {} tasks: waited {} milliseconds ", 
futures.size(), (t1-t0));
+final long t1 = System.nanoTime();
+LOG.info("join'ing {} tasks: waited {} milliseconds ", 
futures.size(), 0.000_001 * (t1-t0));
 }
 }
 



[isis] branch master updated: ISIS-1976: minor polishing

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 2fcfc93  ISIS-1976: minor polishing
2fcfc93 is described below

commit 2fcfc93647a9a32401951b0f01676e9ed11a14dc
Author: Andi Huber 
AuthorDate: Wed Sep 5 13:40:24 2018 +0200

ISIS-1976: minor polishing

Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../apache/isis/commons/internal/base/_Lazy.java   | 64 ++
 .../base/{_Lazy.java => _Lazy_Simple.java} | 38 ++---
 ...{_LazyThreadSafe.java => _Lazy_ThreadSafe.java} | 39 ++---
 .../persistence/PersistenceSessionFactory4.java|  6 +-
 .../system/persistence/PersistenceSession5.java|  2 +-
 .../persistence/PersistenceSessionFactory5.java|  6 +-
 .../adaptermanager/ObjectAdapterContext.java   | 16 --
 .../objectstore/jdo/service/RegisterEntities.java  |  4 +-
 8 files changed, 60 insertions(+), 115 deletions(-)

diff --git 
a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java 
b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
index 18eb150..d105093 100644
--- 
a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
+++ 
b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.commons.internal.base;
 
-import static org.apache.isis.commons.internal.base._With.requires;
-
 import java.util.function.Supplier;
 
 /**
@@ -35,54 +33,50 @@ import java.util.function.Supplier;
  *
  * @since 2.0.0
  */
-public final class _Lazy implements Supplier {
-
-private final Supplier supplier;
-private T value;
-private boolean memoized;
-
-/**
- * Concurrent calls to this lazy's get() method might result in concurrent 
calls to the 
- * specified {@code supplier}. 
- * @param supplier
- * @return an (non-thread-safe) instance of _Lacy that initializes with 
the specified {@code supplier}
- */
-public static  _Lazy of(Supplier supplier) {
-return new _Lazy(supplier);
-}
-
-private _Lazy(Supplier supplier) {
-this.supplier = requires(supplier, "supplier");
-}
-
+public interface _Lazy extends Supplier {
+
+// -- INTERFACE
+
 /**
  * @return whether this lazy got initialized and holds a memoized value
  */
-public boolean isMemoized() {
-return memoized;
-}
+public boolean isMemoized();
 
 /**
  * Clears the lazy's memoized value. Resets this lazy to its initial 
state.
  * isMemoized() = false;
  *
  */
-public void clear() {
-this.memoized = false;
-this.value = null;
-}
+public void clear();
 
 /**
  * Evaluates this lazy value and memoizes it, when called the first time
  * after initialization or clear().
  */
 @Override
-public T get() {
-if(memoized) {
-return value;
-}
-memoized=true;
-return value = supplier.get();
+public T get();
+
+// -- FACTORIES
+
+/**
+ * Concurrent calls to this lazy's get() method might result in concurrent 
calls to the 
+ * specified {@code supplier}. 
+ * @param supplier
+ * @return an (non-thread-safe) instance of _Lacy that initializes with 
the specified {@code supplier}
+ */
+public static  _Lazy of(Supplier supplier) {
+return new _Lazy_Simple(supplier);
+}
+
+/**
+ * Thread-safe variant to {@link _Lazy#of(Supplier)}.
+ * Concurrent calls to this lazy's get() method will never result in 
concurrent calls to the 
+ * specified {@code supplier}. 
+ * @param supplier
+ * @return an (thread-safe) instance of _Lacy that initializes with the 
specified {@code supplier}
+ */
+public static  _Lazy threadSafe(Supplier supplier) {
+return new _Lazy_ThreadSafe(supplier);
 }
 
 }
diff --git 
a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java 
b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_Simple.java
similarity index 57%
copy from 
core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
copy to 
core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_Simple.java
index 18eb150..c8aa2c6 100644
--- 
a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
+++ 
b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy_Simple.java
@@ -24,58 +24,30 @@ import static 
org.apache.isis.commons.internal.base._With.requires;
 import java.util.function.Supplier;
 
 /**
- * - internal use only -
- * 
- * (non-thread-safe) Supplier with memoization.
- * 
- * 
- * WARNING: Do NOT use any of the classes provided by this 
package

[isis] branch master updated: ISIS-1895: fix SwaggerServiceDefault throws on initialization for tests

2018-09-05 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 6704695  ISIS-1895: fix SwaggerServiceDefault throws on initialization 
for tests
6704695 is described below

commit 67046955d1a35401f662940baf3ab7b4dc55d173
Author: Andi Huber 
AuthorDate: Wed Sep 5 12:01:19 2018 +0200

ISIS-1895: fix SwaggerServiceDefault throws on initialization for tests

when headless bootstrapping restful path is not a requirement

Task-Url: https://issues.apache.org/jira/browse/ISIS-1895
---
 .../core/metamodel/services/swagger/SwaggerServiceDefault.java| 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
index c63bd6b..7764a26 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
@@ -19,6 +19,9 @@
 package org.apache.isis.core.metamodel.services.swagger;
 
 import static org.apache.isis.commons.internal.base._Strings.prefix;
+import static org.apache.isis.commons.internal.base._With.ifPresentElse;
+import static 
org.apache.isis.commons.internal.resources._Resource.getRestfulPathIfAny;
+import static 
org.apache.isis.commons.internal.resources._Resource.prependContextPathIfPresent;
 
 import java.util.Map;
 
@@ -31,7 +34,6 @@ import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.swagger.SwaggerService;
-import org.apache.isis.commons.internal.resources._Resource;
 import 
org.apache.isis.core.metamodel.services.swagger.internal.SwaggerSpecGenerator;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -49,9 +51,9 @@ public class SwaggerServiceDefault implements SwaggerService {
 @PostConstruct
 public void init(final Map properties) {
 
-final String restfulPath = _Resource.getRestfulPathOrThrow(); 
+final String restfulPath = ifPresentElse(getRestfulPathIfAny(), 
"undefined");
 
-this.basePath = 
prefix(_Resource.prependContextPathIfPresent(restfulPath), "/");
+this.basePath = prefix(prependContextPathIfPresent(restfulPath), "/");
 }
 
 @Programmatic



[isis] branch ISIS-1976-rethink-object-adapters updated: ISIS-1976: experimental refactoring

2018-09-02 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1976-rethink-object-adapters
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to 
refs/heads/ISIS-1976-rethink-object-adapters by this push:
 new 866b09c  ISIS-1976: experimental refactoring
866b09c is described below

commit 866b09c47d66c5577ef57bc69819471249e60def
Author: a.hu...@corax.at 
AuthorDate: Sun Sep 2 10:57:14 2018 +0200

ISIS-1976: experimental refactoring

adapterFor(RootOid)
---
 .../system/persistence/PersistenceSession5.java|  13 +
 .../isis/core/runtime/memento/CollectionData.java  |   9 +
 .../apache/isis/core/runtime/memento/Memento.java  | 198 +--
 .../background/CommandExecutorServiceDefault.java  |  40 +--
 .../AbstractIsisSessionTemplate.java   |  93 +++
 .../adaptermanager/ObjectAdapterLegacy.java| 276 +
 6 files changed, 347 insertions(+), 282 deletions(-)

diff --git 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
index 1f78654..6d5baa6 100644
--- 
a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
+++ 
b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession5.java
@@ -1236,6 +1236,9 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 }
 
 
+/**
+ * foreign refs: 1
+ */
 @Override
 public ObjectAdapter adapterForAny(RootOid rootOid) {
 
@@ -1272,6 +1275,9 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 }
 }
 
+/**
+ * foreign refs: 1
+ */
 @Override
 public Map adaptersFor(final List 
rootOids) {
 return adaptersFor(rootOids, ConcurrencyChecking.NO_CHECK);
@@ -1336,6 +1342,8 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
  * This method  will always return an object, possibly indicating 
it is persistent; so make sure that you
  * know that the oid does indeed represent an object you know exists.
  * 
+ * 
+ * foreign refs: 4
  */
 @Override
 public ObjectAdapter adapterFor(final RootOid rootOid) {
@@ -1369,6 +1377,9 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
  * value.  This allows the client to retry if they wish.
  *
  * @throws {@link 
org.apache.isis.core.runtime.persistence.ObjectNotFoundException} if the object 
does not exist.
+ * 
+ * foreign refs: 0
+ * 
  */
 @Override
 public ObjectAdapter adapterFor(
@@ -1465,6 +1476,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 
 /**
  * {@inheritDoc}
+ * foreign refs: ~90
  */
 @Override
 public ObjectAdapter adapterFor(final Object pojo) {
@@ -1484,6 +1496,7 @@ implements 
IsisLifecycleListener2.PersistenceSessionLifecycleManagement {
 
 /**
  * {@inheritDoc}
+ * foreign refs: 2
  */
 @Override
 public ObjectAdapter adapterFor(final Object pojo, final ObjectAdapter 
parentAdapter, final OneToManyAssociation collection) {
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
index e28cc9e..1f2803f 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/CollectionData.java
@@ -55,5 +55,14 @@ public class CollectionData extends Data {
 str.append(")");
 return str.toString();
 }
+
+/**
+ * TODO[ISIS-1976] only introduced for refactoring.
+ */
+@Deprecated
+public Data[] getElements() {
+return elements;
+}
+
 
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
index 78f9f7c..9e1eedc 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
@@ -22,14 +22,14 @@ package org.apache.isis.core.runtime.memento;
 import java.io.Serializable;
 import java.util.List;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.ensure.Assert;
-import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.metamodel.adapter.Obj

[isis] branch master updated: Fixed missing images in powered-by_contactapp.adoc (#112)

2018-07-06 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
 new 907f87b  Fixed missing images in powered-by_contactapp.adoc (#112)
907f87b is described below

commit 907f87bf85fdbdeac8fd9476534323117232959e
Author: Rosco Kalis 
AuthorDate: Fri Jul 6 08:39:06 2018 +0200

Fixed missing images in powered-by_contactapp.adoc (#112)
---
 .../asciidoc/pages/powered-by/_powered-by_contactapp.adoc| 12 ++--
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git 
a/adocs/documentation/src/main/asciidoc/pages/powered-by/_powered-by_contactapp.adoc
 
b/adocs/documentation/src/main/asciidoc/pages/powered-by/_powered-by_contactapp.adoc
index 6eba2a3..52a0bcc 100644
--- 
a/adocs/documentation/src/main/asciidoc/pages/powered-by/_powered-by_contactapp.adoc
+++ 
b/adocs/documentation/src/main/asciidoc/pages/powered-by/_powered-by_contactapp.adoc
@@ -12,7 +12,7 @@ This app originated out of our users' need to quickly look up 
different employee
 At the same time the app managers would need to be able to easily edit or add 
to the existing contact information.
 We decided to create different Contact Groups consisting of multiple Contacts, 
each with their role within the group.
 
-image:http://i.imgur.com/j0x7bw8.png[width="97%;]
+image:https://github.com/incodehq/contactapp/blob/master/docs/contactapp-backend-benoit-foure.png[width="97%;]
 
 == Apache Isis with Ionic
 
@@ -22,15 +22,7 @@ since this allowed us to rapidly develop the required 
backend application and su
 mobile application could connect. We found that it worked together quite well, 
and with part of the team
 behind http://github.com/estatio/estatio[Estatio] we were able to create an 
app that is clear to use and manage.
 
-image:http://i.imgur.com/ETKG6Xe.png[width="32%;]
-
-and:
-
-image:http://i.imgur.com/zMX6OYq.png[width="32%;]
-
-and:
-
-image:http://i.imgur.com/qhXhKiu.png[width="32%;]
+image:https://github.com/incodehq/contactapp/blob/master/docs/contactapp-frontend.png[width="97%;]
 
 As our first Apache Isis app making use of mobile technologies it opens the 
doors for more to follow.
 Ionic has proven easy to learn and build apps with, and has a helpful 
community.  Meanwhile we've used



[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 improve java-doc

2018-01-23 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 5dd9f73  ISIS-1846 improve java-doc
5dd9f73 is described below

commit 5dd9f737062fd2466e39039deaf91db6aa1014f5
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Tue Jan 23 20:04:51 2018 +0100

ISIS-1846 improve java-doc
---
 .../main/java/org/apache/isis/applib/internal/context/_Context.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
 
b/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
index ab7b256..5d4889c 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/context/_Context.java
@@ -47,7 +47,8 @@ public final class _Context {
 * Puts a singleton instance onto the current context.
 * @param type non-null
 * @param singleton non-null
-* @throws IllegalStateException if there is already an instance of 
same type on the current context.
+* @throws IllegalStateException if there is already an instance of 
same {@code type}
+*  on the current context.
 */
public static void putSingleton(Class type, Object singleton) {
Objects.requireNonNull(type);
@@ -87,8 +88,7 @@ public final class _Context {

/**
 * Gets a singleton instance of {@code type} if there is any, 
-* otherwise throws the {@code onNotFound}'s result,
-* which could be null.
+* otherwise throws the {@code onNotFound}'s result.
 * @param type non-null
 * @param onNotFound non-null
 * @return

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 java-doc improved

2018-01-23 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 66cd1f2  ISIS-1846 java-doc improved
66cd1f2 is described below

commit 66cd1f2df3a827e133750a10f8684c2579f78cc5
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Wed Jan 24 08:28:53 2018 +0100

ISIS-1846 java-doc improved
---
 .../main/java/org/apache/isis/applib/internal/base/_NullSafe.java   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java
index 87d4073..2e54f97 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java
@@ -48,7 +48,7 @@ public final class _NullSafe {
// -- STREAM CREATION

/**
-* If {@code array} is {@code array} returns the empty stream, 
+* If {@code array} is {@code null} returns the empty stream, 
 * otherwise returns a stream of the array's elements.
 * @param array
 * @return non-null stream object
@@ -100,7 +100,7 @@ public final class _NullSafe {
/**
 * Allows to replace a lambda expression {@code x->x!=null} with {@code 
NullSafe::isPresent}
 * @param x
-* @return whether {@code x} is not null.
+* @return whether {@code x} is not null (present).
 */
public static boolean isPresent(Object x) {
return x!=null;
@@ -109,7 +109,7 @@ public final class _NullSafe {
/**
 * Allows to replace a lambda expression {@code x->x==null} with {@code 
NullSafe::isAbsent}
 * @param x
-* @return whether {@code x} is null.
+* @return whether {@code x} is null (absent).
 */
public static boolean isAbsent(Object x) {
return x==null;

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 added reviewer notes and questions

2018-01-24 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 62725eb  ISIS-1846 added reviewer notes and questions
62725eb is described below

commit 62725eb3dfd7cf5c995eb5d943781437bd37e274
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Wed Jan 24 09:27:47 2018 +0100

ISIS-1846 added reviewer notes and questions
---
 .../isis/applib/internal/reflection/_Reflect.java   | 17 ++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
 
b/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
index fcffa73..589cf31 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/reflection/_Reflect.java
@@ -44,23 +44,34 @@ public final class _Reflect {

// -- REFLECTIVE CLASS DISCOVERY

+   /**
+*  Provides search-methods on class hierarchies.  
+*/
public static interface Discovery {
+   
+   //TODO missing java-doc
public Set<Class> getTypesAnnotatedWith(Class annotation);
+   
+   //TODO missing java-doc
public  Set<Class> getSubTypesOf(Class type);
}
 
+   //TODO missing java-doc
public static Discovery discover(String packageNamePrefix) {
-   _Reflect_Manifest.prepareDiscovery();
+   _Reflect_Manifest.prepareDiscovery();   //TODO [ahuber] REVIEW 
why is this required?
return _Reflect_Discovery.of(packageNamePrefix);
}

+   //TODO missing java-doc
public static Discovery discover(List packageNamePrefixes) {
-   _Reflect_Manifest.prepareDiscovery();
+   _Reflect_Manifest.prepareDiscovery();   //TODO [ahuber] REVIEW 
why is this required?
return _Reflect_Discovery.of(packageNamePrefixes);
}

+   //TODO missing java-doc 
+   //TODO [ahuber] REVIEW how is this different from discover(String) 
public static Discovery discoverFullscan(String packageNamePrefix) {
-   _Reflect_Manifest.prepareDiscovery();
+   _Reflect_Manifest.prepareDiscovery();   //TODO [ahuber] REVIEW 
why is this required?
return _Reflect_Discovery.of(

ClasspathHelper.forClassLoader(_Context.getDefaultClassLoader()),
ClasspathHelper.forClass(Object.class),

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 test cases added for new utility classes

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 4a90358  ISIS-1846 test cases added for new utility classes
4a90358 is described below

commit 4a90358d4d4147b69a63d750e64a8769d18c9cc4
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 19:30:00 2018 +0100

ISIS-1846 test cases added for new utility classes
---
 .../isis/applib/internal/base/_NullSafe.java   |   2 +-
 .../apache/isis/applib/internal/base/_Strings.java |  11 +-
 .../isis/applib/internal/base/NullSafeTest.java| 116 
 .../isis/applib/internal/base/StringsTest.java | 207 +
 .../applib/internal/compare/ComparatorsTest.java   | 158 
 5 files changed, 488 insertions(+), 6 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java
index a51c9ed..985c19b 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_NullSafe.java
@@ -100,7 +100,7 @@ public final class _NullSafe {
 * @return whether {@code x} is null.
 */
public static boolean isAbsent(Object x) {
-   return x!=null;
+   return x==null;
}

// -- EQUALS/COMPARE
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java
index 6c43230..ae4ad23 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java
@@ -108,7 +108,8 @@ public final class _Strings {
// -- SPLITTING

/**
-* Splits the {@code input} into chunks separated by {@code separator}
+* Splits the {@code input} into chunks separated by {@code separator}, 
+* then puts all non-empty chunks on the stream.
 * @param input
 * @param separator
 * @return empty stream if {@code input} is null
@@ -122,7 +123,8 @@ public final class _Strings {
if(!input.contains(separator))
return Stream.of(input);

-   return Stream.of(input.split(Pattern.quote(separator)));
+   return Stream.of(input.split(Pattern.quote(separator)))
+   .filter(_Strings::isNotEmpty);
}
 
 // -- REPLACEMENT OPERATORS
@@ -152,6 +154,7 @@ public final class _Strings {
private final UnaryOperator operator;

private StringOperator(UnaryOperator operator) {
+   Objects.requireNonNull(operator);
this.operator = operator;
}
 
@@ -160,8 +163,6 @@ public final class _Strings {
}

public StringOperator andThen(UnaryOperator andThen) {
-   if(operator==null)
-   return new StringOperator(andThen::apply);
return new 
StringOperator(s->andThen.apply(operator.apply(s)));
}

@@ -172,7 +173,7 @@ public final class _Strings {
  * @return
  */
 public static StringOperator operator() {
-   return new StringOperator(null);
+   return new StringOperator(UnaryOperator.identity());
 }
 
 // -- SPECIAL COMPOSITES 
diff --git 
a/core/applib/src/test/java/org/apache/isis/applib/internal/base/NullSafeTest.java
 
b/core/applib/src/test/java/org/apache/isis/applib/internal/base/NullSafeTest.java
new file mode 100644
index 000..2ff8422
--- /dev/null
+++ 
b/core/applib/src/test/java/org/apache/isis/applib/internal/base/NullSafeTest.java
@@ -0,0 +1,116 @@
+/*
+ *  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

[isis] branch ISIS-1846_internal_utils updated: ISIS-1827 guava free drop-in replacement for all ExceptionRecognizers

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 03823d7  ISIS-1827 guava free drop-in replacement for all 
ExceptionRecognizers
03823d7 is described below

commit 03823d7f3ce95d73f944fc935e1a1dfd930f5177
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 21:39:07 2018 +0100

ISIS-1827 guava free drop-in replacement for all ExceptionRecognizers
---
 .../exceprecog/ExceptionRecognizerAbstract.java| 57 
 .../exceprecog/ExceptionRecognizerForType.java |  1 +
 ...rType.java => ExceptionRecognizerForType2.java} | 63 +++---
 ...xceptionRecognizerForJDODataStoreException.java |  4 +-
 ...traintViolationForeignKeyNoActionException.java | 17 +++---
 ...ionRecognizerForJDOObjectNotFoundException.java |  5 +-
 ...yConstraintViolationUniqueOrIndexException.java | 17 +++---
 7 files changed, 104 insertions(+), 60 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
 
b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 43628bd..f586624 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -20,18 +20,20 @@ package org.apache.isis.applib.services.exceprecog;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Throwables;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Throwables;
 
 /**
  * Abstract implementation of {@link ExceptionRecognizer} that looks 
@@ -93,11 +95,14 @@ public abstract class ExceptionRecognizerAbstract 
implements ExceptionRecognizer
 private boolean logRecognizedExceptions;
 
 // //
-
+
+// -- JAVA 8+
+
 public ExceptionRecognizerAbstract(final Category category, 
Predicate predicate, final Function<String,String> messageParser) {
-this.category = category;
+   Objects.requireNonNull(predicate);
+   this.category = category;
 this.predicate = predicate;
-this.messageParser = messageParser != null? messageParser: 
Functions.identity();
+this.messageParser = messageParser != null ? messageParser : 
Function.identity();
 }
 
 public ExceptionRecognizerAbstract(Predicate predicate, final 
Function<String,String> messageParser) {
@@ -112,6 +117,38 @@ public abstract class ExceptionRecognizerAbstract 
implements ExceptionRecognizer
 this(Category.OTHER, predicate);
 }
 
+// -- GUAVA LEGACY
+
+@Deprecated //TODO ISIS-1827 remove guava from public API
+public ExceptionRecognizerAbstract(final Category category, 
+   com.google.common.base.Predicate predicate, 
+   final com.google.common.base.Function<String,String> 
messageParser) {
+   Objects.requireNonNull(predicate);
+this.category = category;
+this.predicate = predicate::apply;
+this.messageParser = messageParser != null ? messageParser::apply : 
Function.identity();
+}
+
+@Deprecated //TODO ISIS-1827 remove guava from public API
+public ExceptionRecognizerAbstract(
+   com.google.common.base.Predicate predicate, 
+   final com.google.common.base.Function<String,String> 
messageParser) {
+this(Category.OTHER, predicate, messageParser);
+}
+
+@Deprecated //TODO ISIS-1827 remove guava from public API
+public ExceptionRecognizerAbstract(Category category, 
com.google.common.base.Predicate predicate) {
+this(category, predicate, null);
+}
+
+@Deprecated //TODO ISIS-1827 remove guava from public API
+public 
ExceptionRecognizerAbstract(com.google.common.base.Predicate 
predicate) {
+this(Category.OTHER, predicate);
+}
+
+// --
+
+
 
 @PostConstruct
 public void init(Map<String, String> properties) {
@@ -129,7 +166,7 @@ public abstract class ExceptionRecognizerAbstract 
implements ExceptionRecognizer
 public String 

[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 fix Enums copy paste error

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 463947d  ISIS-1846 fix Enums copy paste error
463947d is described below

commit 463947d2a996d55d3a371851ad2c93c049243f4c
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 22:07:53 2018 +0100

ISIS-1846 fix Enums copy paste error
---
 core/applib/src/main/java/org/apache/isis/applib/util/Enums.java | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java 
b/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java
index 0f73fc0..72625f8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java
@@ -41,8 +41,7 @@ public final class Enums {
 
 public static String getEnumNameFromFriendly(String anEnumFriendlyName) {
return _Strings.splitThenStream(anEnumFriendlyName, " ")
-   .map(_Strings::lower)
-   .map(_Strings::capitalize)
+   .map(_Strings::upper)
.collect(Collectors.joining("_"));
 }
 

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] branch ISIS-1846_internal_utils updated: ISIS-1827 reflect applib changes in ExceptionRecognizerDocDefault

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 6631872  ISIS-1827 reflect applib changes in 
ExceptionRecognizerDocDefault
6631872 is described below

commit 66318728bb8627fdd1a630d9c9db007ee82cf7ce
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 21:43:41 2018 +0100

ISIS-1827 reflect applib changes in ExceptionRecognizerDocDefault
---
 .../services/exceprecog/ExceptionRecognizerDocDefault.java | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
index 228c079..68e776a 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
-import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType;
+import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType2;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 
@@ -62,12 +62,13 @@ public class ExceptionRecognizerDocDefault
 //endregion
 
 static class ExceptionRecognizerForConcurrencyException
-extends ExceptionRecognizerForType {
+extends ExceptionRecognizerForType2 {
 public ExceptionRecognizerForConcurrencyException() {
 super(Category.CONCURRENCY, ConcurrencyException.class, 
prefix("Another user has just changed this data"));
 }
 }
-static class ExceptionRecognizerForRecoverableException extends 
ExceptionRecognizerForType {
+static class ExceptionRecognizerForRecoverableException 
+   extends ExceptionRecognizerForType2 {
 public ExceptionRecognizerForRecoverableException() {
 super(Category.CLIENT_ERROR, RecoverableException.class);
 }

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] 02/02: ISIS-1827 mark some unused public static guava functions deprecated

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git

commit dd3029cd7ba333d7d8217a6a0ad323f5253ddba4
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 22:23:22 2018 +0100

ISIS-1827 mark some unused public static guava functions deprecated
---
 .../org/apache/isis/applib/layout/component/CollectionLayoutData.java  | 3 +--
 .../main/java/org/apache/isis/applib/layout/component/FieldSet.java| 2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
 
b/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
index 26fc325..730d0a6 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
@@ -266,8 +266,7 @@ public class CollectionLayoutData
 this.link = link;
 }
 
-
-
+@Deprecated //[ahuber] not used, or otherwise replace with java 8+ 
function variant
 public static class Functions {
 private Functions(){}
 
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
 
b/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
index 2cb3be1..0f04033 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
@@ -201,7 +201,7 @@ public class FieldSet
 }
 
 
-
+@Deprecated //[ahuber] not used, or otherwise replace with java 8+ 
function variant
 public static class Util {
 private Util(){}
 public static Function nameOf() {

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] branch ISIS-1846_internal_utils updated (463947d -> dd3029c)

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git.


from 463947d  ISIS-1846 fix Enums copy paste error
 new 62c3f3b  ISIS-1827 added tests for all ExceptionRecognizers to reflect 
applib additions
 new dd3029c  ISIS-1827 mark some unused public static guava functions 
deprecated

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../layout/component/CollectionLayoutData.java |  3 +-
 .../isis/applib/layout/component/FieldSet.java |  2 +-
 ...t.java => ExceptionRecognizerForType2Test.java} | 12 
 .../exceprecog/ExceptionRecognizerGeneralTest.java | 32 ++
 4 files changed, 34 insertions(+), 15 deletions(-)
 copy 
core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/{ExceptionRecognizerForTypeTest.java
 => ExceptionRecognizerForType2Test.java} (84%)

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] 01/02: ISIS-1827 added tests for all ExceptionRecognizers to reflect applib additions

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 62c3f3b353054998359aa15488f984c50878ec57
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 22:20:26 2018 +0100

ISIS-1827 added tests for all ExceptionRecognizers to reflect applib
additions
---
 ...t.java => ExceptionRecognizerForType2Test.java} | 29 
 .../exceprecog/ExceptionRecognizerGeneralTest.java | 32 ++
 2 files changed, 43 insertions(+), 18 deletions(-)

diff --git 
a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
 
b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType2Test.java
similarity index 68%
copy from 
core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
copy to 
core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType2Test.java
index 239e59c..c541001 100644
--- 
a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
+++ 
b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType2Test.java
@@ -23,20 +23,26 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicates;
+import java.util.function.Function;
 
 import org.junit.Test;
 
-public class ExceptionRecognizerGeneralTest {
+public class ExceptionRecognizerForType2Test {
 
-private ExceptionRecognizerAbstract ersGeneral;
+private ExceptionRecognizerForType2 ersForType;
 
 static class FooException extends Exception {
 private static final long serialVersionUID = 1L;
 public FooException() {
 super("foo");
 }
+
+}
+static class BarException extends Exception {
+private static final long serialVersionUID = 1L;
+public BarException() {
+super("bar");
+}
 }
 
 private Function<String,String> prepend = new Function<String, String>() {
@@ -45,24 +51,23 @@ public class ExceptionRecognizerGeneralTest {
 return "pre: " + input;
 }
 };
-
-
+
 @Test
 public void whenRecognized() {
-ersGeneral = new 
ExceptionRecognizerAbstract(Predicates.alwaysTrue()){};
-assertThat(ersGeneral.recognize(new FooException()), is("foo"));
+ersForType = new ExceptionRecognizerForType2(FooException.class);
+assertThat(ersForType.recognize(new FooException()), is("foo"));
 }
 
 @Test
 public void whenDoesNotRecognize() {
-ersGeneral = new 
ExceptionRecognizerAbstract(Predicates.alwaysFalse()){};
-assertThat(ersGeneral.recognize(new FooException()), is(nullValue()));
+ersForType = new ExceptionRecognizerForType2(FooException.class);
+assertThat(ersForType.recognize(new BarException()), is(nullValue()));
 }
 
 @Test
 public void whenRecognizedWithMessageParser() {
-ersGeneral = new 
ExceptionRecognizerAbstract(Predicates.alwaysTrue(), prepend){};
-assertThat(ersGeneral.recognize(new FooException()), is("pre: foo"));
+ersForType = new ExceptionRecognizerForType2(FooException.class, 
prepend);
+assertThat(ersForType.recognize(new FooException()), is("pre: foo"));
 }
 
 }
diff --git 
a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
 
b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
index 239e59c..a2a0118 100644
--- 
a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
+++ 
b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
@@ -23,8 +23,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.junit.Assert.assertThat;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicates;
+import java.util.function.Predicate;
 
 import org.junit.Test;
 
@@ -39,7 +38,7 @@ public class ExceptionRecognizerGeneralTest {
 }
 }
 
-private Function<String,String> prepend = new Function<String, String>() {
+private com.google.common.base.Function<String,String> prepend = new 
com.google.common.base.Function<String, String>() {
 @Override
 public String apply(String input) {
 return "pre: " + input;
@@ -48,20 +47,41 @@ public clas

[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 another occurrence of capitalize consolidated

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 996cf2980 ISIS-1846 another occurrence of capitalize consolidated
996cf2980 is described below

commit 996cf2980e54a08b2bac23334954aee8c51f
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 22:44:42 2018 +0100

ISIS-1846 another occurrence of capitalize consolidated
---
 .../isis/core/specsupport/specs/CukeGlueAbstract.java| 16 +++-
 1 file changed, 3 insertions(+), 13 deletions(-)

diff --git 
a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/specs/CukeGlueAbstract.java
 
b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/specs/CukeGlueAbstract.java
index 8a3b95b..1b6bc45 100644
--- 
a/core/specsupport/src/main/java/org/apache/isis/core/specsupport/specs/CukeGlueAbstract.java
+++ 
b/core/specsupport/src/main/java/org/apache/isis/core/specsupport/specs/CukeGlueAbstract.java
@@ -28,6 +28,7 @@ import org.jmock.States;
 import org.jmock.internal.ExpectationBuilder;
 
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.core.specsupport.scenarios.ScenarioExecution;
 import org.apache.isis.core.specsupport.scenarios.ScenarioExecutionForUnit;
@@ -220,7 +221,7 @@ public abstract class CukeGlueAbstract {
 }
 final Class cls = obj.getClass();
 try {
-final String methodName = "get" + capitalize(propertyName);
+final String methodName = "get" + 
_Strings.capitalize(propertyName);
 final Method method = cls.getMethod(methodName, new Class[]{});
 if(method != null) {
 return method.invoke(obj);
@@ -230,7 +231,7 @@ public abstract class CukeGlueAbstract {
 }
 
 try {
-final String methodName = "is" + capitalize(propertyName);
+final String methodName = "is" + _Strings.capitalize(propertyName);
 final Method method = cls.getMethod(methodName, new Class[]{});
 if(method != null) {
 return method.invoke(obj);
@@ -254,17 +255,6 @@ public abstract class CukeGlueAbstract {
 return null;
 }
 
-private static String capitalize(final String str) {
-if (str == null || str.length() == 0) {
-return str;
-}
-if (str.length() == 1) {
-return str.toUpperCase();
-}
-return Character.toUpperCase(str.charAt(0)) + str.substring(1);
-}
-
-
 // //
 
 /**

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.


[isis] branch ISIS-1846_internal_utils updated: ISIS-1846 add capitalize to new _String utility + tests, cleanup Enums

2018-01-22 Thread ahuber
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-1846_internal_utils by 
this push:
 new 77b179b  ISIS-1846 add capitalize to new _String utility + tests, 
cleanup Enums
77b179b is described below

commit 77b179bfd285934eabc8436ded943bccb7efd9ec
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon Jan 22 22:06:03 2018 +0100

ISIS-1846 add capitalize to new _String utility + tests, cleanup Enums
---
 .../apache/isis/applib/internal/base/_Strings.java | 20 ++-
 .../java/org/apache/isis/applib/util/Enums.java| 41 ++
 .../isis/applib/internal/base/StringsTest.java | 28 +++
 3 files changed, 58 insertions(+), 31 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java
index ae4ad23..e8f3921 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/internal/base/_Strings.java
@@ -104,7 +104,25 @@ public final class _Strings {
}
 return input.toUpperCase();
 }
-   
+
+/**
+ * Converts the first character in {@code input} to upper case using the 
rules of the default locale. 
+ * @param input
+ * @return null if {@code input} is null
+ */
+public static String capitalize(@Nullable final String input) {
+   if(input==null) {
+   return null;
+   }
+   if (input.length() == 0) {
+   return input;
+   }
+   if (input.length() == 1) {
+   return input.toUpperCase();
+   }
+   return Character.toUpperCase(input.charAt(0)) + input.substring(1);
+}
+
// -- SPLITTING

/**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java 
b/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java
index bfc6549..0f73fc0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/Enums.java
@@ -19,10 +19,9 @@
 
 package org.apache.isis.applib.util;
 
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
+import java.util.stream.Collectors;
+
+import org.apache.isis.applib.internal.base._Strings;
 
 public final class Enums {
 
@@ -33,12 +32,18 @@ public final class Enums {
 }
 
 public static String getFriendlyNameOf(String anEnumName) {
-return Joiner.on(" 
").join(Iterables.transform(Splitter.on("_").split(anEnumName), 
LOWER_CASE_THEN_CAPITALIZE));
+   return _Strings.splitThenStream(anEnumName, "_")
+   .map(_Strings::lower)
+   .map(_Strings::capitalize)
+   .collect(Collectors.joining(" "));
 }
 
 
 public static String getEnumNameFromFriendly(String anEnumFriendlyName) {
-return Joiner.on("_").join(Iterables.transform(Splitter.on(" 
").split(anEnumFriendlyName), UPPER_CASE));
+   return _Strings.splitThenStream(anEnumFriendlyName, " ")
+   .map(_Strings::lower)
+   .map(_Strings::capitalize)
+   .collect(Collectors.joining("_"));
 }
 
 
@@ -80,28 +85,4 @@ public final class Enums {
 }
 
 
-private static Function<String, String> LOWER_CASE_THEN_CAPITALIZE = new 
Function<String, String>() {
-@Override
-public String apply(String input) {
-return capitalize(input.toLowerCase());
-}
-};
-
-private static Function<String, String> UPPER_CASE = new Function<String, 
String>() {
-@Override
-public String apply(String input) {
-return input.toUpperCase();
-}
-};
-
-private static String capitalize(final String str) {
-if (str == null || str.length() == 0) {
-return str;
-}
-if (str.length() == 1) {
-return str.toUpperCase();
-}
-return Character.toUpperCase(str.charAt(0)) + str.substring(1);
-}
-
 }
diff --git 
a/core/applib/src/test/java/org/apache/isis/applib/internal/base/StringsTest.java
 
b/core/applib/src/test/java/org/apache/isis/applib/internal/base/StringsTest.java
index 6765de9..0180bc1 100644
--- 
a/core/applib/src/test/java/org/apache/isis/applib/internal/base/StringsTest.java
+++ 
b/core/applib/src/test/java/org/apache/isis/applib/internal/base/StringsTest.java
@@ -74,6 +74,34 @@ public class StringsTest {
}

@Test
+   public void capitalizeWithNull() 

<    1   2   3   4   5   6   7   8   9   10   >