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 2016/02/24 00:40:16 UTC

[13/13] isis git commit: ISIS-1311: sorted out issue with Persistable mixins (return Long, not Object, otherwise trips up).

ISIS-1311: sorted out issue with Persistable mixins (return Long, not Object, otherwise trips up).

Also, fixed issue with tables that were incorrectly showing the datanucleusId and datanucleusVersion because of how check for HiddenFacets against mixin associations.  Now generalized/improved the lookup of facet (had a different facetType key in the ObjectAssociationMixin compared to the underlying ObjectActionDefault).


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

Branch: refs/heads/ISIS-993
Commit: 4ccb9caa1293e3d0e4e5feb6f90319050692f42f
Parents: 34771c2
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Feb 23 23:21:04 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Feb 23 23:21:04 2016 +0000

----------------------------------------------------------------------
 .../isis/core/metamodel/facetapi/FacetUtil.java |  5 ++
 .../jdosupport/Persistable_datanucleusId.java   | 71 ++++++++++++++++++++
 .../Persistable_datanucleusVersion.java         | 64 ++++++++++++++++++
 .../spec/feature/ObjectAssociation.java         | 17 +++--
 4 files changed, 153 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4ccb9caa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
index 8d9eb73..0c8b6d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetUtil.java
@@ -165,6 +165,11 @@ public final class FacetUtil {
     }
 
     public static void copyFacets(final FacetHolder source, final FacetHolder target) {
+        final Class<? extends Facet>[] facetTypes = source.getFacetTypes();
+        for (Class<? extends Facet> facetType : facetTypes) {
+            final Facet facet = source.getFacet(facetType);
+
+        }
         List<Facet> facets = source.getFacets(org.apache.isis.applib.filter.Filters.<Facet>any());
         for (Facet facet : facets) {
             target.addFacet(facet);

http://git-wip-us.apache.org/repos/asf/isis/blob/4ccb9caa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusId.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusId.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusId.java
new file mode 100644
index 0000000..15a7296
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusId.java
@@ -0,0 +1,71 @@
+/*
+ *  Copyright 2015-2016 Eurocommercial Properties NV
+ *
+ *  Licensed 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.services.jdosupport;
+
+import javax.jdo.JDOHelper;
+
+import org.datanucleus.enhancement.Persistable;
+import org.datanucleus.identity.DatastoreId;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Contributed;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
+
+@Mixin
+public class Persistable_datanucleusId {
+
+    private final Persistable persistable;
+
+    public Persistable_datanucleusId(final Persistable persistable) {
+        this.persistable = persistable;
+    }
+
+    public static class ActionDomainEvent extends org.apache.isis.applib.IsisApplibModule.ActionDomainEvent<Persistable_datanucleusId> {}
+
+    @Action(
+            domainEvent = ActionDomainEvent.class,
+            semantics = SemanticsOf.SAFE
+    )
+    @ActionLayout(
+            contributed = Contributed.AS_ASSOCIATION
+    )
+    @PropertyLayout(
+            named = "Id",
+            hidden = Where.ALL_TABLES
+    )
+    @MemberOrder(name = "Metadata", sequence = "800.1")
+    public Long datanucleusId() {
+        final Object objectId = JDOHelper.getObjectId(persistable);
+        if(objectId instanceof DatastoreId) {
+            final DatastoreId datastoreId = (DatastoreId) objectId;
+            final Object id = datastoreId.getKeyAsObject();
+            return id != null && id instanceof Long ? (Long) id : null;
+        }
+        return null;
+    }
+
+    public boolean hideDatanucleusId() {
+        return datanucleusId() == null;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ccb9caa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersion.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersion.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersion.java
new file mode 100644
index 0000000..083ba86
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersion.java
@@ -0,0 +1,64 @@
+/*
+ *  Copyright 2015-2016 Eurocommercial Properties NV
+ *
+ *  Licensed 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.services.jdosupport;
+
+import javax.jdo.JDOHelper;
+
+import org.datanucleus.enhancement.Persistable;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.Contributed;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
+
+@Mixin
+public class Persistable_datanucleusVersion {
+
+    private final Persistable persistable;
+
+    public Persistable_datanucleusVersion(final Persistable persistable) {
+        this.persistable = persistable;
+    }
+
+    public static class ActionDomainEvent extends org.apache.isis.applib.IsisApplibModule.ActionDomainEvent<Persistable_datanucleusVersion> {}
+
+    @Action(
+            domainEvent = ActionDomainEvent.class,
+            semantics = SemanticsOf.SAFE
+    )
+    @ActionLayout(
+            contributed = Contributed.AS_ASSOCIATION
+    )
+    @PropertyLayout(
+            named = "Version",
+            hidden = Where.ALL_TABLES
+    )
+    @MemberOrder(name = "Metadata", sequence = "800.2")
+    public Long datanucleusVersion() {
+        final Object version = JDOHelper.getVersion(persistable);
+        return version != null && version instanceof Long ? (Long) version : null;
+    }
+
+    public boolean hideDatanucleusVersion() {
+        return datanucleusVersion() == null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ccb9caa/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
index 50024dc..ae31903 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
@@ -36,6 +36,8 @@ import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.WhenAndWhereValueFacet;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
@@ -351,11 +353,18 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
             return new Filter<ObjectAssociation>() {
                 @Override
                 public boolean accept(final ObjectAssociation association) {
-                    final HiddenFacet facet = association.getFacet(HiddenFacet.class);
-                    if(facet == null) {
-                        return true;
+                    final List<Facet> facets = association.getFacets(new Filter<Facet>() {
+                        @Override public boolean accept(final Facet facet) {
+                            return facet instanceof WhenAndWhereValueFacet && facet instanceof HiddenFacet;
+                        }
+                    });
+                    for (Facet facet : facets) {
+                        final WhenAndWhereValueFacet wawF = (WhenAndWhereValueFacet) facet;
+                        if (wawF.where().includes(context) && wawF.when() == When.ALWAYS) {
+                            return false;
+                        }
                     }
-                    return !(facet.where().includes(context) && facet.when() == When.ALWAYS);
+                    return true;
                 }
             };
         }