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.

Reply via email to