[isis] 23/24: ISIS-1976: minor cleanup
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()
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
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
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
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
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
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
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)
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
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)
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
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
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
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)
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
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
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
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)
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
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
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
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
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
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 ...
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)
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
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
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
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)
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
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
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
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 ...
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
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
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)
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)
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
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
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
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)
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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)
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)
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
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)
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
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
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
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)
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
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
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
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
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)
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)
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'
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
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
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)
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
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
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)
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)
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)
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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)
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
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
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
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()