Repository: isis Updated Branches: refs/heads/master b66fb6e66 -> 5278ba07d
ISIS-1609: fix for facet factories @Property(editing=ENABLED) for JAXB. Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/bd11d5f2 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/bd11d5f2 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/bd11d5f2 Branch: refs/heads/master Commit: bd11d5f2c5eba27d89d5f724b781c010d1fb8436 Parents: b66fb6e Author: Dan Haywood <[email protected]> Authored: Sun Apr 30 14:03:59 2017 +0100 Committer: Dan Haywood <[email protected]> Committed: Sun Apr 30 14:03:59 2017 +0100 ---------------------------------------------------------------------- ...acetOnCollectionDerivedFromRecreatableObject.java | 6 ++++-- ...OnCollectionDerivedFromViewModelFacetFactory.java | 8 +++++++- ...dFacetOnPropertyDerivedFromRecreatableObject.java | 6 ++++-- ...ertyDerivedFromRecreatableObjectFacetFactory.java | 7 +++++-- .../recreatable/RecreatableObjectFacetAbstract.java | 14 ++++++++++++++ ...atableObjectFacetForXmlRootElementAnnotation.java | 5 +++++ .../metamodel/facets/object/recreatable/Util.java | 15 +++++++++++++++ .../facets/object/viewmodel/ViewModelFacet.java | 9 +++++++++ 8 files changed, 63 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java index 94ee319..68ddf32 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java @@ -28,8 +28,10 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; public class DisabledFacetOnCollectionDerivedFromRecreatableObject extends DisabledFacetAbstract { - public DisabledFacetOnCollectionDerivedFromRecreatableObject(final FacetHolder holder) { - super(When.ALWAYS, Where.ANYWHERE, holder); + public DisabledFacetOnCollectionDerivedFromRecreatableObject( + final FacetHolder holder, + final Semantics semantics) { + super(When.ALWAYS, Where.ANYWHERE, holder, semantics); } @Override http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java index de2edc9..509be1e 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.java @@ -20,10 +20,12 @@ package org.apache.isis.core.metamodel.facets.object.recreatable; import java.lang.reflect.Method; + import org.apache.isis.core.metamodel.facetapi.FacetUtil; import org.apache.isis.core.metamodel.facetapi.FeatureType; import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.FacetedMethod; +import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.isis.core.metamodel.spec.ObjectSpecification; @@ -42,8 +44,12 @@ public class DisabledFacetOnCollectionDerivedFromViewModelFacetFactory extends F if (!spec.containsDoOpFacet(ViewModelFacet.class)) { return; } + final ViewModelFacet facet = spec.getFacet(ViewModelFacet.class); + final DisabledFacetAbstract.Semantics semantics = Util.inferSemanticsFrom(facet); + final FacetedMethod facetHolder = processMethodContext.getFacetHolder(); - FacetUtil.addFacet(new DisabledFacetOnCollectionDerivedFromRecreatableObject(facetHolder)); + FacetUtil.addFacet(new DisabledFacetOnCollectionDerivedFromRecreatableObject(facetHolder, semantics)); } + } http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObject.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObject.java index e002900..ec69b18 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObject.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObject.java @@ -28,8 +28,10 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; public class DisabledFacetOnPropertyDerivedFromRecreatableObject extends DisabledFacetAbstract { - public DisabledFacetOnPropertyDerivedFromRecreatableObject(final FacetHolder holder) { - super(When.ALWAYS, Where.ANYWHERE, holder); + public DisabledFacetOnPropertyDerivedFromRecreatableObject( + final FacetHolder holder, + final Semantics semantics) { + super(When.ALWAYS, Where.ANYWHERE, holder, semantics); } @Override http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.java index c03b65c..ba91515 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.java @@ -24,6 +24,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil; import org.apache.isis.core.metamodel.facetapi.FeatureType; import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.FacetedMethod; +import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstract; import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.isis.core.metamodel.spec.ObjectSpecification; @@ -38,12 +39,14 @@ public class DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory ext final Method method = processMethodContext.getMethod(); final Class<?> declaringClass = method.getDeclaringClass(); final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass); - if (!spec.containsDoOpFacet(ViewModelFacet.class)) { return; } + final ViewModelFacet facet = spec.getFacet(ViewModelFacet.class); + final DisabledFacetAbstract.Semantics semantics = Util.inferSemanticsFrom(facet); + final FacetedMethod facetHolder = processMethodContext.getFacetHolder(); - FacetUtil.addFacet(new DisabledFacetOnPropertyDerivedFromRecreatableObject(facetHolder)); + FacetUtil.addFacet(new DisabledFacetOnPropertyDerivedFromRecreatableObject(facetHolder, semantics)); } } http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java index 1433695..2e1da5c 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java @@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.facets.MarkerFacetAbstract; import org.apache.isis.core.metamodel.facets.PostConstructMethodCache; 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.specimpl.dflt.ObjectSpecificationDefault; public abstract class RecreatableObjectFacetAbstract extends MarkerFacetAbstract implements ViewModelFacet { @@ -60,6 +61,19 @@ public abstract class RecreatableObjectFacetAbstract extends MarkerFacetAbstract } @Override + public boolean isImplicitlyImmutable() { + final FacetHolder facetHolder = getFacetHolder(); + if(facetHolder instanceof ObjectSpecificationDefault) { + final ObjectSpecificationDefault objectSpec = (ObjectSpecificationDefault) facetHolder; + final Class<?> correspondingClass = objectSpec.getCorrespondingClass(); + if(ViewModel.Cloneable.class.isAssignableFrom(correspondingClass)) { + return false; + } + } + return true; + } + + @Override public Object clone(Object pojo) { ViewModel.Cloneable viewModelCloneable = (ViewModel.Cloneable) pojo; return viewModelCloneable.clone(); http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java index 35992e5..cd99f5f 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java @@ -60,6 +60,11 @@ public class RecreatableObjectFacetForXmlRootElementAnnotation extends Recreatab } @Override + public boolean isImplicitlyImmutable() { + return false; + } + + @Override public Object clone(Object pojo) { final String xml = getJaxbService().toXml(pojo); final Object cloned = getJaxbService().fromXml(pojo.getClass(), xml); http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/Util.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/Util.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/Util.java new file mode 100644 index 0000000..8c0b1e8 --- /dev/null +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/Util.java @@ -0,0 +1,15 @@ +package org.apache.isis.core.metamodel.facets.object.recreatable; + +import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetAbstract; +import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; + +class Util { + private Util() { + } + + static DisabledFacetAbstract.Semantics inferSemanticsFrom(final ViewModelFacet facet) { + return facet.isImplicitlyImmutable() ? + DisabledFacetAbstract.Semantics.DISABLED : + DisabledFacetAbstract.Semantics.ENABLED; + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/bd11d5f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacet.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacet.java index 355895e..c149703 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacet.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/viewmodel/ViewModelFacet.java @@ -93,6 +93,15 @@ public interface ViewModelFacet extends Facet { boolean isCloneable(Object pojo); /** + * Whether can infer the view model is immutable or not. + * + * <p> + * Equivalent to {@link #isCloneable(Object)}, but at the class rather than object level. + * </p> + */ + boolean isImplicitlyImmutable(); + + /** * View models are implicitly immutable (their state is determined by their {@link #memento(Object)}), so this * method allows the framework to clone an existing view model to mutate it, thereby simulating editable * view models.
