You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/01/22 17:57:13 UTC

[45/50] [abbrv] isis git commit: ISIS-970: fixing integ test failures resulting from the new hiddenFacet multi-valued type support.

ISIS-970: fixing integ test failures resulting from the new hiddenFacet multi-valued type support.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/4716513e
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/4716513e
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/4716513e

Branch: refs/heads/master
Commit: 4716513ec4f396e6a48b219e2d12e30e946f0d04
Parents: 432ec3f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jan 22 12:40:22 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jan 22 16:32:46 2015 +0000

----------------------------------------------------------------------
 .../core/metamodel/facetapi/FacetAbstract.java  | 26 +++++++++++++++++++-
 .../metamodel/facetapi/MultiTypedFacet.java     |  2 ++
 .../facets/MultiTypedFacetAbstract.java         | 10 ++++++++
 .../members/hidden/HiddenFacetAbstract.java     | 11 +++++++++
 .../facets/object/value/ValueFacetAbstract.java | 10 ++++++++
 5 files changed, 58 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4716513e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
index 5ac2575..54a5794 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
@@ -89,11 +89,35 @@ public abstract class FacetAbstract implements Facet {
     @Override
     public void setUnderlyingFacet(final Facet underlyingFacet) {
         if(underlyingFacet != null) {
-            Ensure.ensureThatArg(underlyingFacet.facetType(), IsisMatchers.classEqualTo(facetType));
+            if(underlyingFacet instanceof MultiTypedFacet) {
+                final MultiTypedFacet multiTypedFacet = (MultiTypedFacet) underlyingFacet;
+                final boolean matches = compatible(multiTypedFacet);
+                if(!matches) {
+                    throw new IllegalArgumentException("illegal argument, expected underlying facet (a multi-valued facet) to have equivalent to the facet type (or facet types) of this facet");
+                }
+            } else {
+                Ensure.ensureThatArg(underlyingFacet.facetType(), IsisMatchers.classEqualTo(facetType));
+            }
         }
         this.underlyingFacet = underlyingFacet;
     }
 
+    private boolean compatible(final MultiTypedFacet multiTypedFacet) {
+
+        if (!(this instanceof MultiTypedFacet)) {
+            return multiTypedFacet.containsFacetTypeOf(this.facetType);
+        }
+
+        final MultiTypedFacet thisAsMultiTyped = (MultiTypedFacet) this;
+        final Class<? extends Facet>[] facetTypes = thisAsMultiTyped.facetTypes();
+        for (final Class<? extends Facet> facetType : facetTypes) {
+            if(multiTypedFacet.containsFacetTypeOf(facetType)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Assume implementation is <i>not</i> a no-op.
      * 

http://git-wip-us.apache.org/repos/asf/isis/blob/4716513e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MultiTypedFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MultiTypedFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MultiTypedFacet.java
index 205deac..08aa514 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MultiTypedFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MultiTypedFacet.java
@@ -37,4 +37,6 @@ public interface MultiTypedFacet extends Facet {
     public Class<? extends Facet>[] facetTypes();
 
     public <T extends Facet> T getFacet(Class<T> facet);
+
+    boolean containsFacetTypeOf(Class<? extends Facet> facetType);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4716513e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MultiTypedFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MultiTypedFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MultiTypedFacetAbstract.java
index 8496597..642f161 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MultiTypedFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MultiTypedFacetAbstract.java
@@ -44,4 +44,14 @@ public abstract class MultiTypedFacetAbstract extends FacetAbstract implements M
     @Override
     public abstract <T extends Facet> T getFacet(Class<T> facetType);
 
+    @Override
+    public boolean containsFacetTypeOf(final Class<? extends Facet> requiredFacetType) {
+        for (final Class<? extends Facet> facetType : facetTypes()) {
+            if(facetType == requiredFacetType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4716513e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
index 4f64625..6986076 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/HiddenFacetAbstract.java
@@ -80,4 +80,15 @@ public abstract class HiddenFacetAbstract extends WhenAndWhereValueFacetAbstract
         return (T) this;
     }
 
+    @Override
+    public boolean containsFacetTypeOf(final Class<? extends Facet> requiredFacetType) {
+        for (final Class<? extends Facet> facetType : facetTypes()) {
+            if(facetType == requiredFacetType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4716513e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
index 8bbcad3..bc41a4c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
@@ -162,6 +162,16 @@ public abstract class ValueFacetAbstract extends MultipleValueFacetAbstract impl
         return facetHolder.getFacet(facetType);
     }
 
+    @Override
+    public boolean containsFacetTypeOf(final Class<? extends Facet> requiredFacetType) {
+        for (final Class<? extends Facet> facetType : facetTypes()) {
+            if(facetType == requiredFacetType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     // /////////////////////////////////////////
     // Dependencies (from constructor)
     // /////////////////////////////////////////