* @return adapter, which may be different from the original (if a {@link org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet#isCloneable(Object) cloneable} view model, for example.
*/
public ObjectAdapter apply() {
ObjectAdapter adapter = getObjectAdapterMemento().getObjectAdapter(ConcurrencyChecking.CHECK);
for (final ScalarModel scalarModel : propertyScalarModels.values()) {
final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty();
//
// previously there was a guard here to only apply changes provided:
//
// property.containsDoOpFacet(NotPersistedFacet.class) == null
//
// however, that logic is wrong; although a property may not be directly
// persisted so far as JDO is concerned, it may be indirectly persisted
// as the result of business logic in the setter.
//
// for example, see ExampleTaggableEntity (in isisaddons-module-tags).
//
final ObjectAdapter associate = scalarModel.getObject();
property.set(adapter, associate);
}
final ViewModelFacet viewModelFacet = adapter.getSpecification().getFacet(ViewModelFacet.class);
if(viewModelFacet != null) {
final Object viewModel = adapter.getObject();