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 07:29:37 UTC

[1/2] isis git commit: ISIS-933: fixing layout issues when the layout.xml HAS been specified...

Repository: isis
Updated Branches:
  refs/heads/ISIS-993 4ccb9caa1 -> 23f923342


ISIS-933: fixing layout issues when the layout.xml HAS been specified...

* was adding in properties to fieldsets twice, even if already in the fieldset.  (This bug because previously I had been focusing on getting the auto-add for non-referenced properties to work, based on @MemberOrder)

Also:
* ensuring that can reload dynamically without having to invalidate cache.  This bug was due to the SpeificationCacheDefault ( which maintains two separate hashmaps to cache specs) getting out-of-whack internally ... specId holding one version of a spec, while className holding a different on.
* remove versionSequence from SimpleObject (as now have the Persistable_... mixins).


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

Branch: refs/heads/ISIS-993
Commit: 97abf1b441e813a18a637d64d07ae31c1c934fd3
Parents: 4ccb9ca
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Feb 24 06:25:06 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Feb 24 06:25:06 2016 +0000

----------------------------------------------------------------------
 .../services/grid/GridNormalizerServiceAbstract.java | 15 ---------------
 .../grid/bootstrap3/GridNormalizerServiceBS3.java    | 15 ++++++++++++++-
 .../metamodel/specloader/ObjectReflectorDefault.java |  2 +-
 .../specloader/SpecificationCacheDefault.java        |  5 ++++-
 .../viewer/wicket/ui/pages/entity/EntityPage.java    |  7 ++++---
 .../main/java/domainapp/dom/simple/SimpleObject.java | 14 ++------------
 .../domainapp/dom/simple/SimpleObject.layout.xml     | 11 +++++------
 7 files changed, 30 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
index 8d92c89..db40d07 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
@@ -21,7 +21,6 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
 
 import javax.inject.Inject;
 
@@ -641,20 +640,6 @@ public abstract class GridNormalizerServiceAbstract<G extends Grid>
     }
 
 
-    protected static String nextInSequenceFor(
-            final String key, final Map<String, int[]> seqByKey) {
-        synchronized (seqByKey) {
-            int[] holder = seqByKey.get(key);
-            if(holder == null) {
-                holder = new int[]{0};
-                seqByKey.put(key, holder);
-            }
-            holder[0]++;
-            return ""+holder[0];
-        }
-    }
-
-
     protected SpecificationLoader specificationLookup;
 
     public void setSpecificationLoader(final SpecificationLoader specificationLookup) {

http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
index 9ad5161..e99a9e1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridNormalizerServiceBS3.java
@@ -509,8 +509,21 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
     protected void addPropertiesTo(
             final FieldSet fieldSet,
             final List<String> propertyIds) {
+        final List<PropertyLayoutData> properties = fieldSet.getProperties();
+        final ImmutableList<String> existingIds = FluentIterable
+                .from(properties)
+                .transform(new Function<PropertyLayoutData, String>() {
+                    @Nullable
+                    @Override
+                    public String apply(@Nullable final PropertyLayoutData propertyLayoutData) {
+                        return propertyLayoutData.getId();
+                    }
+                })
+                .toList();
         for (final String propertyId : propertyIds) {
-            fieldSet.getProperties().add(new PropertyLayoutData(propertyId));
+            if(!existingIds.contains(propertyId)) {
+                properties.add(new PropertyLayoutData(propertyId));
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 2957dd7..a48fab0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -385,7 +385,7 @@ public final class ObjectReflectorDefault
             // don't have an ObjectSpecId; hence the guard.
             if(spec.containsDoOpFacet(ObjectSpecIdFacet.class)) {
                 ObjectSpecId specId = spec.getSpecId();
-                if (getCache().getByObjectType(specId) == null) {
+                if (getCache().getByObjectType(specId) != spec) {
                     getCache().recache(spec);
                 }
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
index ad23aff..1e4df63 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFac
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
 
 class SpecificationCacheDefault {
     
@@ -41,6 +42,7 @@ class SpecificationCacheDefault {
 
     public void cache(final String className, final ObjectSpecification spec) {
         specByClassName.put(className, spec);
+        recache(spec);
     }
     
 
@@ -60,7 +62,8 @@ class SpecificationCacheDefault {
     }
 
     /**
-     * Populated as a result of running {@link MetaModelValidator#validate() validation} after xxxallxxx most specs have been loaded. 
+     * Populated as a result of running {@link MetaModelValidator#validate(ValidationFailures)} validation} after
+     * xxxallxxx most specs have been loaded.
      */
     void setCacheBySpecId(Map<ObjectSpecId, ObjectSpecification> specById) {
         this.specById = Maps.newHashMap();

http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 26ab321..f1d05e1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -145,9 +145,10 @@ public class EntityPage extends PageAbstract {
 
             // if none, then fallback to invalidating entire cache
             // (this is the original LayoutMetadataFromJson behaviour)
-            if(!getDeploymentType().isProduction()) {
-                getSpecificationLoader().invalidateCacheFor(objectAdapter.getObject());
-            }
+
+//            if(!getDeploymentType().isProduction()) {
+//                getSpecificationLoader().invalidateCacheFor(objectAdapter.getObject());
+//            }
 
             // as a side-effect, this will update facets
             final Grid unused = facet.getGrid();

http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.java b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.java
index 6ac1bf3..366dbb3 100644
--- a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.java
+++ b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.java
@@ -21,7 +21,6 @@ package domainapp.dom.simple;
 import java.util.List;
 
 import javax.inject.Inject;
-import javax.jdo.JDOHelper;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.VersionStrategy;
 
@@ -31,6 +30,7 @@ import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -85,7 +85,7 @@ public class SimpleObject implements Comparable<SimpleObject> {
             length = NAME_LENGTH
     )
     @Property(
-            //editing = Editing.DISABLED
+            editing = Editing.DISABLED
     )
     @PropertyLayout(
             namedEscaped = false
@@ -135,16 +135,6 @@ public class SimpleObject implements Comparable<SimpleObject> {
     }
 
 
-    /**
-     * version (derived property)
-     */
-    public java.sql.Timestamp getVersionSequence() {
-        return (java.sql.Timestamp) JDOHelper.getVersion(this);
-    }
-
-    public boolean hideVersionSequence() {
-        return getName().contains("ob");
-    }
 
     @Override
     public int compareTo(final SimpleObject other) {

http://git-wip-us.apache.org/repos/asf/isis/blob/97abf1b4/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout.xml b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout.xml
index c0eaded..85b6a0c 100644
--- a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout.xml
+++ b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout.xml
@@ -13,18 +13,17 @@
                     <bs3:row>
                         <bs3:col span="12">
                             <c:fieldSet name="Properties">
-                                <c:property id="name"/>
-                                <c:property id="versionSequence"/>
+                                <c:property id="name">
+                                    <c:action id="updateName" position="BELOW"/>
+                                </c:property>
                             </c:fieldSet>
                         </bs3:col>
                     </bs3:row>
                 </bs3:tab>
-                <bs3:tab name="Misc">
+                <bs3:tab name="Metadata">
                     <bs3:row>
                         <bs3:col span="12">
-                            <c:fieldSet name="Metadata">
-                                <c:property id="versionSequence"/>
-                            </c:fieldSet>
+                            <c:fieldSet name="Metadata"/>
                         </bs3:col>
                     </bs3:row>
                 </bs3:tab>


[2/2] isis git commit: ISIS-1311: split out Persistable_datanucleusVersion mixin into two, one for timestamps and one for longs (per different VersionStrategy in JDO annotation).

Posted by da...@apache.org.
ISIS-1311: split out Persistable_datanucleusVersion mixin into two, one for timestamps and one for longs (per different VersionStrategy in JDO annotation).

Also:
- remove the hideXxx() for Object_downloadLayoutXml mixin, will always be visible.


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

Branch: refs/heads/ISIS-993
Commit: 23f92334256fb76ee57d9f2807df2602cab60096
Parents: 97abf1b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Feb 24 06:28:55 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Feb 24 06:28:55 2016 +0000

----------------------------------------------------------------------
 .../layout/Object_downloadLayoutXml.java        |  6 +-
 .../jdosupport/Persistable_datanucleusId.java   |  6 +-
 .../Persistable_datanucleusVersion.java         | 64 --------------------
 .../Persistable_datanucleusVersionLong.java     | 64 ++++++++++++++++++++
 ...Persistable_datanucleusVersionTimestamp.java | 64 ++++++++++++++++++++
 5 files changed, 132 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/23f92334/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java b/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
index eee95b0..0a0fb47 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_downloadLayoutXml.java
@@ -52,7 +52,7 @@ public class Object_downloadLayoutXml {
             cssClassFa = "fa-download",
             position = ActionLayout.Position.PANEL_DROPDOWN
     )
-    @MemberOrder(name = "Metadata", sequence = "550.1")
+    @MemberOrder(name = "Metadata", sequence = "700.1")
     public Object $$(
             @ParameterLayout(named = "File name")
             final String fileName,
@@ -67,10 +67,6 @@ public class Object_downloadLayoutXml {
         return new Clob(Util.withSuffix(fileName, style.name().toLowerCase() + ".xml"), "text/xml", xml);
     }
 
-    public boolean hide$$() {
-        // can use either style to determine whether this action should be hidden
-        return getGrid(GridService.Style.NORMALIZED) == null;
-    }
     public String default0$$() {
         return Util.withSuffix(object.getClass().getSimpleName(), "layout");
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/23f92334/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
index 15a7296..51041e6 100644
--- 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
@@ -53,7 +53,7 @@ public class Persistable_datanucleusId {
             hidden = Where.ALL_TABLES
     )
     @MemberOrder(name = "Metadata", sequence = "800.1")
-    public Long datanucleusId() {
+    public Long $$() {
         final Object objectId = JDOHelper.getObjectId(persistable);
         if(objectId instanceof DatastoreId) {
             final DatastoreId datastoreId = (DatastoreId) objectId;
@@ -63,8 +63,8 @@ public class Persistable_datanucleusId {
         return null;
     }
 
-    public boolean hideDatanucleusId() {
-        return datanucleusId() == null;
+    public boolean hide$$() {
+        return $$() == null;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/23f92334/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
deleted file mode 100644
index 083ba86..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersion.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  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/23f92334/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionLong.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionLong.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionLong.java
new file mode 100644
index 0000000..0bf2603
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionLong.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_datanucleusVersionLong {
+
+    private final Persistable persistable;
+
+    public Persistable_datanucleusVersionLong(final Persistable persistable) {
+        this.persistable = persistable;
+    }
+
+    public static class ActionDomainEvent extends org.apache.isis.applib.IsisApplibModule.ActionDomainEvent<Persistable_datanucleusVersionLong> {}
+
+    @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 $$() {
+        final Object version = JDOHelper.getVersion(persistable);
+        return version != null && version instanceof Long ? (Long) version : null;
+    }
+
+    public boolean hide$$() {
+        return $$() == null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/23f92334/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionTimestamp.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionTimestamp.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionTimestamp.java
new file mode 100644
index 0000000..24960a9
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/jdosupport/Persistable_datanucleusVersionTimestamp.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_datanucleusVersionTimestamp {
+
+    private final Persistable persistable;
+
+    public Persistable_datanucleusVersionTimestamp(final Persistable persistable) {
+        this.persistable = persistable;
+    }
+
+    public static class ActionDomainEvent extends org.apache.isis.applib.IsisApplibModule.ActionDomainEvent<Persistable_datanucleusVersionTimestamp> {}
+
+    @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 java.sql.Timestamp $$() {
+        final Object version = JDOHelper.getVersion(persistable);
+        return version != null && version instanceof java.sql.Timestamp ? (java.sql.Timestamp) version : null;
+    }
+
+    public boolean hide$$() {
+        return $$() == null;
+    }
+
+}