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/01/25 16:08:05 UTC

[44/50] [abbrv] isis git commit: ISIS-993: renaming of the view metadata classes.

ISIS-993: renaming of the view metadata classes.


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

Branch: refs/heads/ISIS-993
Commit: e647a951ebdaecb73b1dd1938559b0aeb163ff5d
Parents: fc5355f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Jan 14 17:00:00 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Jan 25 15:06:07 2016 +0000

----------------------------------------------------------------------
 .../layout/v1_0/CollectionLayoutMetadata.java   |   8 +-
 .../apache/isis/applib/layout/v1_0/Column.java  | 148 ----------------
 .../isis/applib/layout/v1_0/ColumnMetadata.java | 148 ++++++++++++++++
 .../layout/v1_0/ObjectLayoutMetadata.java       | 100 +++++------
 .../isis/applib/layout/v1_0/PropertyGroup.java  | 145 ----------------
 .../layout/v1_0/PropertyGroupMetadata.java      | 145 ++++++++++++++++
 .../layout/v1_0/PropertyLayoutMetadata.java     |   8 +-
 .../org/apache/isis/applib/layout/v1_0/Tab.java | 168 -------------------
 .../isis/applib/layout/v1_0/TabGroup.java       | 112 -------------
 .../applib/layout/v1_0/TabGroupMetadata.java    | 112 +++++++++++++
 .../isis/applib/layout/v1_0/TabMetadata.java    | 168 +++++++++++++++++++
 .../ObjectLayoutMetadataFacetDefault.java       |  84 +++++-----
 .../json/LayoutMetadataReaderFromJson.java      |   2 +-
 .../metamodel/spec/ObjectSpecifications.java    |   8 +-
 .../ObjectLayoutMetadataFacetDefaultTest.java   |   8 +-
 .../v1_0/ObjectLayoutMetadataTest.java          |  26 +--
 .../viewer/wicket/model/models/EntityModel.java |  36 ++--
 .../collections/EntityCollectionsPanel.java     |   4 +-
 .../entity/properties/EntityColumn.java         |  12 +-
 .../entity/properties/EntityPropertiesForm.java |  18 +-
 .../components/entity/properties/PropUtil.java  |   8 +-
 .../tabbed/ColumnTabGroupListColumnPanel.java   |  16 +-
 .../entity/tabgroup/TabGroupPanel.java          | 103 ++++++++++++
 .../entity/tabgrouplist/TabGroupListPanel.java  | 125 ++------------
 .../ui/components/entity/tabpanel/TabPanel.java |   6 +-
 25 files changed, 862 insertions(+), 856 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/CollectionLayoutMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/CollectionLayoutMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/CollectionLayoutMetadata.java
index e6ce973..1936a2b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/CollectionLayoutMetadata.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/CollectionLayoutMetadata.java
@@ -49,7 +49,7 @@ import org.apache.isis.applib.annotation.Where;
                 , "metadataError"
         }
 )
-public class CollectionLayoutMetadata implements ColumnContent, ActionOwner, Serializable, HasPath, Owned<Column> {
+public class CollectionLayoutMetadata implements ColumnContent, ActionOwner, Serializable, HasPath, Owned<ColumnMetadata> {
 
     private static final long serialVersionUID = 1L;
 
@@ -194,7 +194,7 @@ public class CollectionLayoutMetadata implements ColumnContent, ActionOwner, Ser
 
 
 
-    private Column owner;
+    private ColumnMetadata owner;
     /**
      * Owner.
      *
@@ -203,11 +203,11 @@ public class CollectionLayoutMetadata implements ColumnContent, ActionOwner, Ser
      * </p>
      */
     @XmlTransient
-    public Column getOwner() {
+    public ColumnMetadata getOwner() {
         return owner;
     }
 
-    public void setOwner(final Column owner) {
+    public void setOwner(final ColumnMetadata owner) {
         this.owner = owner;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java
deleted file mode 100644
index 6ff7527..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.applib.layout.v1_0;
-
-import java.io.Serializable;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout;
-import org.apache.isis.applib.annotation.Programmatic;
-
-@XmlType(
-        propOrder = {
-                "propertyGroups"
-                , "collections"
-        }
-)
-public class Column implements Serializable, Owner, Owned<ColumnOwner> {
-
-    private static final long serialVersionUID = 1L;
-
-    public Column() {
-    }
-
-    public Column(final int span) {
-        setSpan(span);
-    }
-
-    private int span = 4;
-
-    @XmlAttribute(required = true)
-    public int getSpan() {
-        return span;
-    }
-
-    public void setSpan(final int span) {
-        this.span = span;
-    }
-
-
-
-    private List<PropertyGroup> propertyGroups = Lists.newArrayList();
-
-    // no wrapper
-    @XmlElement(name = "propertyGroup", required = false)
-    public List<PropertyGroup> getPropertyGroups() {
-        return propertyGroups;
-    }
-
-    public void setPropertyGroups(final List<PropertyGroup> propertyGroups) {
-        this.propertyGroups = propertyGroups;
-    }
-
-
-    private List<CollectionLayoutMetadata> collections = Lists.newArrayList();
-
-    // no wrapper
-    @XmlElement(name = "collection", required = false)
-    public List<CollectionLayoutMetadata> getCollections() {
-        return collections;
-    }
-
-    public void setCollections(final List<CollectionLayoutMetadata> collections) {
-        this.collections = collections;
-    }
-
-
-    private ColumnOwner owner;
-    /**
-     * Owner.
-     *
-     * <p>
-     *     Set programmatically by framework after reading in from XML.
-     * </p>
-     */
-    @XmlTransient
-    public ColumnOwner getOwner() {
-        return owner;
-    }
-
-    public void setOwner(final ColumnOwner owner) {
-        this.owner = owner;
-    }
-
-
-
-    private String path;
-
-    @Programmatic
-    @XmlTransient
-    public String getPath() {
-        return path;
-    }
-
-    @Programmatic
-    public void setPath(final String path) {
-        this.path = path;
-    }
-
-
-
-
-    public enum Hint {
-        LEFT,
-        MIDDLE,
-        RIGHT;
-
-        public int from(MemberGroupLayout.ColumnSpans columnSpans) {
-            if(this == LEFT) return columnSpans.getLeft();
-            if(this == MIDDLE) return columnSpans.getMiddle();
-            if(this == RIGHT) return columnSpans.getRight();
-            throw new IllegalStateException();
-        }
-
-        public Column from(final Tab tab) {
-            if(tab == null) {
-                return null;
-            }
-            if(this == LEFT) return tab.getLeft();
-            if(this == MIDDLE) return tab.getMiddle();
-            if(this == RIGHT) return tab.getRight();
-            throw new IllegalStateException();
-        }
-
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnMetadata.java
new file mode 100644
index 0000000..3663600
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnMetadata.java
@@ -0,0 +1,148 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.applib.layout.v1_0;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.annotation.MemberGroupLayout;
+import org.apache.isis.applib.annotation.Programmatic;
+
+@XmlType(
+        propOrder = {
+                "propertyGroups"
+                , "collections"
+        }
+)
+public class ColumnMetadata implements Serializable, Owner, Owned<ColumnOwner> {
+
+    private static final long serialVersionUID = 1L;
+
+    public ColumnMetadata() {
+    }
+
+    public ColumnMetadata(final int span) {
+        setSpan(span);
+    }
+
+    private int span = 4;
+
+    @XmlAttribute(required = true)
+    public int getSpan() {
+        return span;
+    }
+
+    public void setSpan(final int span) {
+        this.span = span;
+    }
+
+
+
+    private List<PropertyGroupMetadata> propertyGroups = Lists.newArrayList();
+
+    // no wrapper
+    @XmlElement(name = "propertyGroup", required = false)
+    public List<PropertyGroupMetadata> getPropertyGroups() {
+        return propertyGroups;
+    }
+
+    public void setPropertyGroups(final List<PropertyGroupMetadata> propertyGroups) {
+        this.propertyGroups = propertyGroups;
+    }
+
+
+    private List<CollectionLayoutMetadata> collections = Lists.newArrayList();
+
+    // no wrapper
+    @XmlElement(name = "collection", required = false)
+    public List<CollectionLayoutMetadata> getCollections() {
+        return collections;
+    }
+
+    public void setCollections(final List<CollectionLayoutMetadata> collections) {
+        this.collections = collections;
+    }
+
+
+    private ColumnOwner owner;
+    /**
+     * Owner.
+     *
+     * <p>
+     *     Set programmatically by framework after reading in from XML.
+     * </p>
+     */
+    @XmlTransient
+    public ColumnOwner getOwner() {
+        return owner;
+    }
+
+    public void setOwner(final ColumnOwner owner) {
+        this.owner = owner;
+    }
+
+
+
+    private String path;
+
+    @Programmatic
+    @XmlTransient
+    public String getPath() {
+        return path;
+    }
+
+    @Programmatic
+    public void setPath(final String path) {
+        this.path = path;
+    }
+
+
+
+
+    public enum Hint {
+        LEFT,
+        MIDDLE,
+        RIGHT;
+
+        public int from(MemberGroupLayout.ColumnSpans columnSpans) {
+            if(this == LEFT) return columnSpans.getLeft();
+            if(this == MIDDLE) return columnSpans.getMiddle();
+            if(this == RIGHT) return columnSpans.getRight();
+            throw new IllegalStateException();
+        }
+
+        public ColumnMetadata from(final TabMetadata tabMetadata) {
+            if(tabMetadata == null) {
+                return null;
+            }
+            if(this == LEFT) return tabMetadata.getLeft();
+            if(this == MIDDLE) return tabMetadata.getMiddle();
+            if(this == RIGHT) return tabMetadata.getRight();
+            throw new IllegalStateException();
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ObjectLayoutMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ObjectLayoutMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ObjectLayoutMetadata.java
index 6cbf901..a19be11 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ObjectLayoutMetadata.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ObjectLayoutMetadata.java
@@ -63,51 +63,51 @@ public class ObjectLayoutMetadata implements Dto, ActionOwner, Serializable, Col
 
 
 
-    private Column left;
+    private ColumnMetadata left;
 
     @XmlElement(required = false)
-    public Column getLeft() {
+    public ColumnMetadata getLeft() {
         return left;
     }
 
-    public void setLeft(final Column left) {
+    public void setLeft(final ColumnMetadata left) {
         this.left = left;
     }
 
 
 
-    private List<TabGroup> tabGroups;
+    private List<TabGroupMetadata> tabGroups;
 
     // no wrapper
     @XmlElement(name = "tabGroup", required = true)
-    public List<TabGroup> getTabGroups() {
+    public List<TabGroupMetadata> getTabGroups() {
         return tabGroups;
     }
 
-    public void setTabGroups(List<TabGroup> tabGroups) {
+    public void setTabGroups(List<TabGroupMetadata> tabGroups) {
         this.tabGroups = tabGroups;
     }
 
 
 
-    private Column right;
+    private ColumnMetadata right;
 
     @XmlElement(required = false)
-    public Column getRight() {
+    public ColumnMetadata getRight() {
         return right;
     }
 
-    public void setRight(final Column right) {
+    public void setRight(final ColumnMetadata right) {
         this.right = right;
     }
     
 
     public interface Visitor {
         void visit(final ObjectLayoutMetadata objectLayoutMetadata);
-        void visit(final TabGroup tabGroup);
-        void visit(final Tab tab);
-        void visit(final Column column);
-        void visit(final PropertyGroup propertyGroup);
+        void visit(final TabGroupMetadata tabGroup);
+        void visit(final TabMetadata tabMetadata);
+        void visit(final ColumnMetadata columnMetadata);
+        void visit(final PropertyGroupMetadata propertyGroupMetadata);
         void visit(final PropertyLayoutMetadata propertyLayoutMetadata);
         void visit(final CollectionLayoutMetadata collectionLayoutMetadata);
         void visit(final ActionLayoutMetadata actionLayoutMetadata);
@@ -117,13 +117,13 @@ public class ObjectLayoutMetadata implements Dto, ActionOwner, Serializable, Col
         @Override
         public void visit(final ObjectLayoutMetadata objectLayoutMetadata) { }
         @Override
-        public void visit(final TabGroup tabGroup) { }
+        public void visit(final TabGroupMetadata tabGroup) { }
         @Override
-        public void visit(final Tab tab) { }
+        public void visit(final TabMetadata tabMetadata) { }
         @Override
-        public void visit(final Column column) { }
+        public void visit(final ColumnMetadata columnMetadata) { }
         @Override
-        public void visit(final PropertyGroup propertyGroup) {}
+        public void visit(final PropertyGroupMetadata propertyGroupMetadata) {}
         @Override
         public void visit(final PropertyLayoutMetadata propertyLayoutMetadata) {}
         @Override
@@ -141,49 +141,49 @@ public class ObjectLayoutMetadata implements Dto, ActionOwner, Serializable, Col
         visitor.visit(this);
         traverseActions(this, visitor);
         traverseColumn(getLeft(), this, visitor);
-        final List<TabGroup> tabGroups = getTabGroups();
-        for (final TabGroup tabGroup : tabGroups) {
+        final List<TabGroupMetadata> tabGroups = getTabGroups();
+        for (final TabGroupMetadata tabGroup : tabGroups) {
             tabGroup.setOwner(this);
             visitor.visit(tabGroup);
-            final List<Tab> tabs = tabGroup.getTabs();
-            for (final Tab tab : tabs) {
-                tab.setOwner(tabGroup);
-                visitor.visit(tab);
-                traverseColumn(tab.getLeft(), tab, visitor);
-                traverseColumn(tab.getMiddle(), tab, visitor);
-                traverseColumn(tab.getRight(), tab, visitor);
+            final List<TabMetadata> tabs = tabGroup.getTabs();
+            for (final TabMetadata tabMetadata : tabs) {
+                tabMetadata.setOwner(tabGroup);
+                visitor.visit(tabMetadata);
+                traverseColumn(tabMetadata.getLeft(), tabMetadata, visitor);
+                traverseColumn(tabMetadata.getMiddle(), tabMetadata, visitor);
+                traverseColumn(tabMetadata.getRight(), tabMetadata, visitor);
             }
         }
         traverseColumn(getRight(), this, visitor);
     }
 
-    private void traverseColumn(final Column column, final ColumnOwner columnOwner, final Visitor visitor) {
-        if(column == null) {
+    private void traverseColumn(final ColumnMetadata columnMetadata, final ColumnOwner columnOwner, final Visitor visitor) {
+        if(columnMetadata == null) {
             return;
         }
-        column.setOwner(columnOwner);
-        visitor.visit(column);
-        traversePropertyGroups(column, visitor);
-        traverseCollections(column, visitor);
+        columnMetadata.setOwner(columnOwner);
+        visitor.visit(columnMetadata);
+        traversePropertyGroups(columnMetadata, visitor);
+        traverseCollections(columnMetadata, visitor);
     }
 
-    private void traversePropertyGroups(final Column column, final Visitor visitor) {
-        for (final PropertyGroup propertyGroup : column.getPropertyGroups()) {
-            propertyGroup.setOwner(column);
-            visitor.visit(propertyGroup);
-            traverseActions(propertyGroup, visitor);
-            final List<PropertyLayoutMetadata> properties = propertyGroup.getProperties();
+    private void traversePropertyGroups(final ColumnMetadata columnMetadata, final Visitor visitor) {
+        for (final PropertyGroupMetadata propertyGroupMetadata : columnMetadata.getPropertyGroups()) {
+            propertyGroupMetadata.setOwner(columnMetadata);
+            visitor.visit(propertyGroupMetadata);
+            traverseActions(propertyGroupMetadata, visitor);
+            final List<PropertyLayoutMetadata> properties = propertyGroupMetadata.getProperties();
             for (final PropertyLayoutMetadata propertyLayoutMetadata : properties) {
-                propertyLayoutMetadata.setOwner(propertyGroup);
+                propertyLayoutMetadata.setOwner(propertyGroupMetadata);
                 visitor.visit(propertyLayoutMetadata);
                 traverseActions(propertyLayoutMetadata, visitor);
             }
         }
     }
 
-    private void traverseCollections(final Column column, final Visitor visitor) {
-        for (final CollectionLayoutMetadata collectionLayoutMetadata : column.getCollections()) {
-            collectionLayoutMetadata.setOwner(column);
+    private void traverseCollections(final ColumnMetadata columnMetadata, final Visitor visitor) {
+        for (final CollectionLayoutMetadata collectionLayoutMetadata : columnMetadata.getCollections()) {
+            collectionLayoutMetadata.setOwner(columnMetadata);
             visitor.visit(collectionLayoutMetadata);
             traverseActions(collectionLayoutMetadata, visitor);
         }
@@ -246,13 +246,13 @@ public class ObjectLayoutMetadata implements Dto, ActionOwner, Serializable, Col
 
     @Programmatic
     @XmlTransient
-    public LinkedHashMap<String, Tab> getAllTabsByName() {
-        final LinkedHashMap<String, Tab> tabsByName = Maps.newLinkedHashMap();
+    public LinkedHashMap<String, TabMetadata> getAllTabsByName() {
+        final LinkedHashMap<String, TabMetadata> tabsByName = Maps.newLinkedHashMap();
 
         visit(new ObjectLayoutMetadata.VisitorAdapter() {
             @Override
-            public void visit(final Tab tab) {
-                tabsByName.put(tab.getName(), tab);
+            public void visit(final TabMetadata tabMetadata) {
+                tabsByName.put(tabMetadata.getName(), tabMetadata);
             }
         });
         return tabsByName;
@@ -261,13 +261,13 @@ public class ObjectLayoutMetadata implements Dto, ActionOwner, Serializable, Col
 
     @Programmatic
     @XmlTransient
-    public LinkedHashMap<String, PropertyGroup> getAllPropertyGroupsByName() {
-        final LinkedHashMap<String, PropertyGroup> propertyGroupsByName = Maps.newLinkedHashMap();
+    public LinkedHashMap<String, PropertyGroupMetadata> getAllPropertyGroupsByName() {
+        final LinkedHashMap<String, PropertyGroupMetadata> propertyGroupsByName = Maps.newLinkedHashMap();
 
         visit(new ObjectLayoutMetadata.VisitorAdapter() {
             @Override
-            public void visit(final PropertyGroup propertyGroup) {
-                propertyGroupsByName.put(propertyGroup.getName(), propertyGroup);
+            public void visit(final PropertyGroupMetadata propertyGroupMetadata) {
+                propertyGroupsByName.put(propertyGroupMetadata.getName(), propertyGroupMetadata);
             }
         });
         return propertyGroupsByName;

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
deleted file mode 100644
index a91deea..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroup.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.applib.layout.v1_0;
-
-import java.io.Serializable;
-import java.util.List;
-
-import javax.annotation.Nullable;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementWrapper;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.MemberOrder;
-import org.apache.isis.applib.annotation.Programmatic;
-
-@XmlType(
-        propOrder = {
-                "name"
-                , "actions"
-                , "properties"
-        }
-)
-public class PropertyGroup implements ColumnContent, ActionOwner, Serializable, HasPath, Owned<Column> {
-
-    private static final long serialVersionUID = 1L;
-
-    public PropertyGroup() {
-    }
-
-    public PropertyGroup(final String name) {
-        setName(name);
-    }
-
-    private String name;
-
-    /**
-     * Corresponds to the {@link MemberOrder#name()} (when applied to properties).
-     */
-    @XmlAttribute(required = true)
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-
-    private List<ActionLayoutMetadata> actions = Lists.newArrayList();
-
-    @XmlElementWrapper(required = false)
-    @XmlElement(name = "action", required = false)
-    public List<ActionLayoutMetadata> getActions() {
-        return actions;
-    }
-
-    public void setActions(List<ActionLayoutMetadata> actionLayoutMetadatas) {
-        this.actions = actionLayoutMetadatas;
-    }
-
-
-
-    private List<PropertyLayoutMetadata> properties = Lists.newArrayList();
-
-    @XmlElement(name = "property", required = true)
-    public List<PropertyLayoutMetadata> getProperties() {
-        return properties;
-    }
-
-    public void setProperties(List<PropertyLayoutMetadata> properties) {
-        this.properties = properties;
-    }
-
-
-    private Column owner;
-    /**
-     * Owner.
-     *
-     * <p>
-     *     Set programmatically by framework after reading in from XML.
-     * </p>
-     */
-    @XmlTransient
-    public Column getOwner() {
-        return owner;
-    }
-
-    public void setOwner(final Column owner) {
-        this.owner = owner;
-    }
-
-
-
-
-    private String path;
-
-    @Programmatic
-    @XmlTransient
-    public String getPath() {
-        return path;
-    }
-
-    @Programmatic
-    public void setPath(final String path) {
-        this.path = path;
-    }
-
-
-
-
-    public static class Util {
-        private Util(){}
-        public static Function<? super PropertyGroup, String> nameOf() {
-            return new Function<PropertyGroup, String>() {
-                @Nullable @Override
-                public String apply(@Nullable final PropertyGroup propertyGroup) {
-                    return propertyGroup.getName();
-                }
-            };
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroupMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroupMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroupMetadata.java
new file mode 100644
index 0000000..b0580ec
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyGroupMetadata.java
@@ -0,0 +1,145 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.applib.layout.v1_0;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.annotation.Nullable;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Programmatic;
+
+@XmlType(
+        propOrder = {
+                "name"
+                , "actions"
+                , "properties"
+        }
+)
+public class PropertyGroupMetadata implements ColumnContent, ActionOwner, Serializable, HasPath, Owned<ColumnMetadata> {
+
+    private static final long serialVersionUID = 1L;
+
+    public PropertyGroupMetadata() {
+    }
+
+    public PropertyGroupMetadata(final String name) {
+        setName(name);
+    }
+
+    private String name;
+
+    /**
+     * Corresponds to the {@link MemberOrder#name()} (when applied to properties).
+     */
+    @XmlAttribute(required = true)
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+
+    private List<ActionLayoutMetadata> actions = Lists.newArrayList();
+
+    @XmlElementWrapper(required = false)
+    @XmlElement(name = "action", required = false)
+    public List<ActionLayoutMetadata> getActions() {
+        return actions;
+    }
+
+    public void setActions(List<ActionLayoutMetadata> actionLayoutMetadatas) {
+        this.actions = actionLayoutMetadatas;
+    }
+
+
+
+    private List<PropertyLayoutMetadata> properties = Lists.newArrayList();
+
+    @XmlElement(name = "property", required = true)
+    public List<PropertyLayoutMetadata> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(List<PropertyLayoutMetadata> properties) {
+        this.properties = properties;
+    }
+
+
+    private ColumnMetadata owner;
+    /**
+     * Owner.
+     *
+     * <p>
+     *     Set programmatically by framework after reading in from XML.
+     * </p>
+     */
+    @XmlTransient
+    public ColumnMetadata getOwner() {
+        return owner;
+    }
+
+    public void setOwner(final ColumnMetadata owner) {
+        this.owner = owner;
+    }
+
+
+
+
+    private String path;
+
+    @Programmatic
+    @XmlTransient
+    public String getPath() {
+        return path;
+    }
+
+    @Programmatic
+    public void setPath(final String path) {
+        this.path = path;
+    }
+
+
+
+
+    public static class Util {
+        private Util(){}
+        public static Function<? super PropertyGroupMetadata, String> nameOf() {
+            return new Function<PropertyGroupMetadata, String>() {
+                @Nullable @Override
+                public String apply(@Nullable final PropertyGroupMetadata propertyGroupMetadata) {
+                    return propertyGroupMetadata.getName();
+                }
+            };
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyLayoutMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyLayoutMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyLayoutMetadata.java
index dccf7b8..1b20700 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyLayoutMetadata.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/PropertyLayoutMetadata.java
@@ -43,7 +43,7 @@ import org.apache.isis.applib.annotation.Where;
                 , "metadataError"
         }
 )
-public class PropertyLayoutMetadata implements ActionOwner, Serializable, HasPath, Owned<PropertyGroup> {
+public class PropertyLayoutMetadata implements ActionOwner, Serializable, HasPath, Owned<PropertyGroupMetadata> {
 
     private static final long serialVersionUID = 1L;
 
@@ -192,7 +192,7 @@ public class PropertyLayoutMetadata implements ActionOwner, Serializable, HasPat
     }
 
 
-    private PropertyGroup owner;
+    private PropertyGroupMetadata owner;
     /**
      * Owner.
      *
@@ -201,11 +201,11 @@ public class PropertyLayoutMetadata implements ActionOwner, Serializable, HasPat
      * </p>
      */
     @XmlTransient
-    public PropertyGroup getOwner() {
+    public PropertyGroupMetadata getOwner() {
         return owner;
     }
 
-    public void setOwner(final PropertyGroup owner) {
+    public void setOwner(final PropertyGroupMetadata owner) {
         this.owner = owner;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Tab.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Tab.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Tab.java
deleted file mode 100644
index 1a8f652..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Tab.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.applib.layout.v1_0;
-
-import java.io.Serializable;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Programmatic;
-
-@XmlType(
-        name="tab"
-        , propOrder = {
-                "name"
-                , "left"
-                , "middle"
-                , "right"
-        }
-)
-public class Tab implements ColumnOwner, Serializable, HasPath, Owned<TabGroup> {
-
-    private static final long serialVersionUID = 1L;
-
-    private String name;
-
-    @XmlAttribute(required = true)
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-
-
-    private Column left = new Column();
-
-    @XmlElement(required = true)
-    public Column getLeft() {
-        return left;
-    }
-
-    public void setLeft(final Column left) {
-        this.left = left;
-    }
-
-
-    private Column middle;
-
-    @XmlElement(required = false)
-    public Column getMiddle() {
-        return middle;
-    }
-
-    public void setMiddle(final Column middle) {
-        this.middle = middle;
-    }
-
-
-    private Column right;
-
-    @XmlElement(required = false)
-    public Column getRight() {
-        return right;
-    }
-
-    public void setRight(final Column right) {
-        this.right = right;
-    }
-
-
-
-    private TabGroup owner;
-    /**
-     * Owner.
-     *
-     * <p>
-     *     Set programmatically by framework after reading in from XML.
-     * </p>
-     */
-    @XmlTransient
-    public TabGroup getOwner() {
-        return owner;
-    }
-
-    public void setOwner(final TabGroup owner) {
-        this.owner = owner;
-    }
-
-    /**
-     * Aggregates the contents of all collections on this tab.
-     */
-    @Programmatic
-    public List<ColumnContent> getContents() {
-        final List<ColumnContent> contents = Lists.newArrayList();
-        appendContent(contents, getLeft());
-        appendContent(contents, getMiddle());
-        appendContent(contents, getRight());
-        return contents;
-    }
-
-
-
-
-    private String path;
-
-    @Programmatic
-    @XmlTransient
-    public String getPath() {
-        return path;
-    }
-
-    @Programmatic
-    public void setPath(final String path) {
-        this.path = path;
-    }
-
-
-
-    private static void appendContent(final List<ColumnContent> contents, final Column column) {
-        if(column == null) {
-            return;
-        }
-        final List<PropertyGroup> propertyGroups = column.getPropertyGroups();
-        if(propertyGroups != null) {
-            contents.addAll(propertyGroups);
-        }
-        final List<CollectionLayoutMetadata> collectionLayoutMetadatas = column.getCollections();
-        if(collectionLayoutMetadatas != null) {
-            contents.addAll(collectionLayoutMetadatas);
-        }
-    }
-
-    public static class Predicates {
-        public static Predicate<Tab> notEmpty() {
-            return new Predicate<Tab>() {
-                @Override
-                public boolean apply(final Tab tab) {
-                    return !tab.getContents().isEmpty();
-                }
-            };
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroup.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroup.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroup.java
deleted file mode 100644
index acb91c3..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroup.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you 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.applib.layout.v1_0;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-
-import org.apache.isis.applib.annotation.Programmatic;
-
-@XmlType(
-        propOrder = {
-                "tabs"
-        }
-
-)
-public class TabGroup implements ColumnOwner, Serializable, HasPath, Owned<TabGroupOwner> {
-
-    private static final long serialVersionUID = 1L;
-
-    // must be at least one tab.
-    private List<Tab> tabs = new ArrayList<Tab>(){{
-        add(new Tab());
-    }};
-
-
-
-    // no wrapper
-    @XmlElement(name = "tab", required = true)
-    public List<Tab> getTabs() {
-        return tabs;
-    }
-
-    public void setTabs(List<Tab> tabs) {
-        this.tabs = tabs;
-    }
-
-
-
-    private TabGroupOwner owner;
-
-    /**
-     * Owner.
-     *
-     * <p>
-     *     Set programmatically by framework after reading in from XML.
-     * </p>
-     */
-    @XmlTransient
-    public TabGroupOwner getOwner() {
-        return owner;
-    }
-
-    public void setOwner(final TabGroupOwner owner) {
-        this.owner = owner;
-    }
-
-
-
-
-    private String path;
-
-    @Programmatic
-    @XmlTransient
-    public String getPath() {
-        return path;
-    }
-
-    @Programmatic
-    public void setPath(final String path) {
-        this.path = path;
-    }
-
-
-
-    public static class Predicates {
-        public static Predicate<TabGroup> notEmpty() {
-            return new Predicate<TabGroup>() {
-                @Override
-                public boolean apply(final TabGroup tabGroup) {
-                    return FluentIterable
-                            .from(tabGroup.getTabs())
-                            .anyMatch(Tab.Predicates.notEmpty());
-                }
-            };
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroupMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroupMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroupMetadata.java
new file mode 100644
index 0000000..aaebfca
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabGroupMetadata.java
@@ -0,0 +1,112 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.applib.layout.v1_0;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+@XmlType(
+        propOrder = {
+                "tabs"
+        }
+
+)
+public class TabGroupMetadata implements ColumnOwner, Serializable, HasPath, Owned<TabGroupOwner> {
+
+    private static final long serialVersionUID = 1L;
+
+    // must be at least one tab.
+    private List<TabMetadata> tabs = new ArrayList<TabMetadata>(){{
+        add(new TabMetadata());
+    }};
+
+
+
+    // no wrapper
+    @XmlElement(name = "tab", required = true)
+    public List<TabMetadata> getTabs() {
+        return tabs;
+    }
+
+    public void setTabs(List<TabMetadata> tabs) {
+        this.tabs = tabs;
+    }
+
+
+
+    private TabGroupOwner owner;
+
+    /**
+     * Owner.
+     *
+     * <p>
+     *     Set programmatically by framework after reading in from XML.
+     * </p>
+     */
+    @XmlTransient
+    public TabGroupOwner getOwner() {
+        return owner;
+    }
+
+    public void setOwner(final TabGroupOwner owner) {
+        this.owner = owner;
+    }
+
+
+
+
+    private String path;
+
+    @Programmatic
+    @XmlTransient
+    public String getPath() {
+        return path;
+    }
+
+    @Programmatic
+    public void setPath(final String path) {
+        this.path = path;
+    }
+
+
+
+    public static class Predicates {
+        public static Predicate<TabGroupMetadata> notEmpty() {
+            return new Predicate<TabGroupMetadata>() {
+                @Override
+                public boolean apply(final TabGroupMetadata tabGroup) {
+                    return FluentIterable
+                            .from(tabGroup.getTabs())
+                            .anyMatch(TabMetadata.Predicates.notEmpty());
+                }
+            };
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabMetadata.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabMetadata.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabMetadata.java
new file mode 100644
index 0000000..8303ad8
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/TabMetadata.java
@@ -0,0 +1,168 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.applib.layout.v1_0;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.annotation.Programmatic;
+
+@XmlType(
+        name="tab"
+        , propOrder = {
+                "name"
+                , "left"
+                , "middle"
+                , "right"
+        }
+)
+public class TabMetadata implements ColumnOwner, Serializable, HasPath, Owned<TabGroupMetadata> {
+
+    private static final long serialVersionUID = 1L;
+
+    private String name;
+
+    @XmlAttribute(required = true)
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+
+    private ColumnMetadata left = new ColumnMetadata();
+
+    @XmlElement(required = true)
+    public ColumnMetadata getLeft() {
+        return left;
+    }
+
+    public void setLeft(final ColumnMetadata left) {
+        this.left = left;
+    }
+
+
+    private ColumnMetadata middle;
+
+    @XmlElement(required = false)
+    public ColumnMetadata getMiddle() {
+        return middle;
+    }
+
+    public void setMiddle(final ColumnMetadata middle) {
+        this.middle = middle;
+    }
+
+
+    private ColumnMetadata right;
+
+    @XmlElement(required = false)
+    public ColumnMetadata getRight() {
+        return right;
+    }
+
+    public void setRight(final ColumnMetadata right) {
+        this.right = right;
+    }
+
+
+
+    private TabGroupMetadata owner;
+    /**
+     * Owner.
+     *
+     * <p>
+     *     Set programmatically by framework after reading in from XML.
+     * </p>
+     */
+    @XmlTransient
+    public TabGroupMetadata getOwner() {
+        return owner;
+    }
+
+    public void setOwner(final TabGroupMetadata owner) {
+        this.owner = owner;
+    }
+
+    /**
+     * Aggregates the contents of all collections on this tab.
+     */
+    @Programmatic
+    public List<ColumnContent> getContents() {
+        final List<ColumnContent> contents = Lists.newArrayList();
+        appendContent(contents, getLeft());
+        appendContent(contents, getMiddle());
+        appendContent(contents, getRight());
+        return contents;
+    }
+
+
+
+
+    private String path;
+
+    @Programmatic
+    @XmlTransient
+    public String getPath() {
+        return path;
+    }
+
+    @Programmatic
+    public void setPath(final String path) {
+        this.path = path;
+    }
+
+
+
+    private static void appendContent(final List<ColumnContent> contents, final ColumnMetadata columnMetadata) {
+        if(columnMetadata == null) {
+            return;
+        }
+        final List<PropertyGroupMetadata> propertyGroups = columnMetadata.getPropertyGroups();
+        if(propertyGroups != null) {
+            contents.addAll(propertyGroups);
+        }
+        final List<CollectionLayoutMetadata> collectionLayoutMetadatas = columnMetadata.getCollections();
+        if(collectionLayoutMetadatas != null) {
+            contents.addAll(collectionLayoutMetadatas);
+        }
+    }
+
+    public static class Predicates {
+        public static Predicate<TabMetadata> notEmpty() {
+            return new Predicate<TabMetadata>() {
+                @Override
+                public boolean apply(final TabMetadata tabMetadata) {
+                    return !tabMetadata.getContents().isEmpty();
+                }
+            };
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutmetadata/ObjectLayoutMetadataFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutmetadata/ObjectLayoutMetadataFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutmetadata/ObjectLayoutMetadataFacetDefault.java
index ca26797..eef8864 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutmetadata/ObjectLayoutMetadataFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutmetadata/ObjectLayoutMetadataFacetDefault.java
@@ -35,14 +35,14 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.layout.v1_0.ActionLayoutMetadata;
 import org.apache.isis.applib.layout.v1_0.ActionOwner;
 import org.apache.isis.applib.layout.v1_0.CollectionLayoutMetadata;
-import org.apache.isis.applib.layout.v1_0.Column;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
 import org.apache.isis.applib.layout.v1_0.ColumnOwner;
 import org.apache.isis.applib.layout.v1_0.ObjectLayoutMetadata;
 import org.apache.isis.applib.layout.v1_0.Owned;
-import org.apache.isis.applib.layout.v1_0.PropertyGroup;
+import org.apache.isis.applib.layout.v1_0.PropertyGroupMetadata;
 import org.apache.isis.applib.layout.v1_0.PropertyLayoutMetadata;
-import org.apache.isis.applib.layout.v1_0.Tab;
-import org.apache.isis.applib.layout.v1_0.TabGroup;
+import org.apache.isis.applib.layout.v1_0.TabMetadata;
+import org.apache.isis.applib.layout.v1_0.TabGroupMetadata;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.layout.ObjectLayoutMetadataService;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
@@ -184,25 +184,25 @@ public class ObjectLayoutMetadataFacetDefault
         final LinkedHashMap<String, CollectionLayoutMetadata> collectionIds = metadata.getAllCollectionsById();
         final LinkedHashMap<String, ActionLayoutMetadata> actionIds = metadata.getAllActionsById();
 
-        final AtomicReference<PropertyGroup> defaultPropertyGroupRef = new AtomicReference<>();
-        final AtomicReference<Column> firstColumnRef = new AtomicReference<>();
-        final AtomicReference<TabGroup> lastTabGroupRef = new AtomicReference<>();
+        final AtomicReference<PropertyGroupMetadata> defaultPropertyGroupRef = new AtomicReference<>();
+        final AtomicReference<ColumnMetadata> firstColumnRef = new AtomicReference<>();
+        final AtomicReference<TabGroupMetadata> lastTabGroupRef = new AtomicReference<>();
 
         // capture the first column, and also
         // capture the first property group (if any) with the default name ('General')
         metadata.visit(new ObjectLayoutMetadata.VisitorAdapter() {
             @Override
-            public void visit(final Column column) {
-                firstColumnRef.compareAndSet(null, column);
+            public void visit(final ColumnMetadata columnMetadata) {
+                firstColumnRef.compareAndSet(null, columnMetadata);
             }
             @Override
-            public void visit(final PropertyGroup propertyGroup) {
-                if(MemberGroupLayoutFacet.DEFAULT_GROUP.equals(propertyGroup.getName())) {
-                    defaultPropertyGroupRef.compareAndSet(null, propertyGroup);
+            public void visit(final PropertyGroupMetadata propertyGroupMetadata) {
+                if(MemberGroupLayoutFacet.DEFAULT_GROUP.equals(propertyGroupMetadata.getName())) {
+                    defaultPropertyGroupRef.compareAndSet(null, propertyGroupMetadata);
                 }
             }
             @Override
-            public void visit(final TabGroup tabGroup) {
+            public void visit(final TabGroupMetadata tabGroup) {
                 lastTabGroupRef.set(tabGroup);
             }
         });
@@ -220,13 +220,13 @@ public class ObjectLayoutMetadataFacetDefault
 
         if(!missingPropertyIds.isEmpty()) {
             // ensure that there is a property group to use
-            boolean wasSet = defaultPropertyGroupRef.compareAndSet(null, new PropertyGroup(MemberGroupLayoutFacet.DEFAULT_GROUP));
-            final PropertyGroup defaultPropertyGroup = defaultPropertyGroupRef.get();
+            boolean wasSet = defaultPropertyGroupRef.compareAndSet(null, new PropertyGroupMetadata(MemberGroupLayoutFacet.DEFAULT_GROUP));
+            final PropertyGroupMetadata defaultPropertyGroupMetadata = defaultPropertyGroupRef.get();
             if(wasSet) {
-                firstColumnRef.get().getPropertyGroups().add(defaultPropertyGroup);
+                firstColumnRef.get().getPropertyGroups().add(defaultPropertyGroupMetadata);
             }
             for (final String propertyId : missingPropertyIds) {
-                defaultPropertyGroup.getProperties().add(new PropertyLayoutMetadata(propertyId));
+                defaultPropertyGroupMetadata.getProperties().add(new PropertyLayoutMetadata(propertyId));
             }
         }
 
@@ -243,16 +243,16 @@ public class ObjectLayoutMetadataFacetDefault
 
         if(!missingCollectionIds.isEmpty()) {
             while(metadata.getTabGroups().size() < 2) {
-                final TabGroup tabGroup = new TabGroup();
+                final TabGroupMetadata tabGroup = new TabGroupMetadata();
                 metadata.getTabGroups().add(tabGroup);
                 lastTabGroupRef.set(tabGroup);
             }
-            final TabGroup lastTabGroup = lastTabGroupRef.get();
+            final TabGroupMetadata lastTabGroup = lastTabGroupRef.get();
             for (final String collectionId : missingCollectionIds) {
-                final Tab tab = new Tab();
-                lastTabGroup.getTabs().add(tab);
-                Column left = new Column(12);
-                tab.setLeft(left);
+                final TabMetadata tabMetadata = new TabMetadata();
+                lastTabGroup.getTabs().add(tabMetadata);
+                ColumnMetadata left = new ColumnMetadata(12);
+                tabMetadata.setLeft(left);
                 final CollectionLayoutMetadata layoutMetadata = new CollectionLayoutMetadata(collectionId);
                 layoutMetadata.setDefaultView("table");
                 left.getCollections().add(layoutMetadata);
@@ -290,23 +290,23 @@ public class ObjectLayoutMetadataFacetDefault
             }
 
             @Override
-            public void visit(final TabGroup tabGroup) {
+            public void visit(final TabGroupMetadata tabGroup) {
                 tabGroup.setPath(pathFor(tabGroup, "tabGroup"));
             }
 
             @Override
-            public void visit(final Tab tab) {
-                tab.setPath(pathFor(tab, "tab"));
+            public void visit(final TabMetadata tabMetadata) {
+                tabMetadata.setPath(pathFor(tabMetadata, "tab"));
             }
 
             @Override
-            public void visit(final Column column) {
-                column.setPath(pathFor(column, "column"));
+            public void visit(final ColumnMetadata columnMetadata) {
+                columnMetadata.setPath(pathFor(columnMetadata, "column"));
             }
 
             @Override
-            public void visit(final PropertyGroup propertyGroup) {
-                propertyGroup.setPath(pathFor(propertyGroup, "propertyGroup"));
+            public void visit(final PropertyGroupMetadata propertyGroupMetadata) {
+                propertyGroupMetadata.setPath(pathFor(propertyGroupMetadata, "propertyGroup"));
             }
 
             @Override
@@ -386,9 +386,9 @@ public class ObjectLayoutMetadataFacetDefault
 
                 final String memberOrderName;
                 final int memberOrderSequence;
-                if(actionOwner instanceof PropertyGroup) {
-                    final PropertyGroup propertyGroup = (PropertyGroup) actionOwner;
-                    final List<PropertyLayoutMetadata> properties = propertyGroup.getProperties();
+                if(actionOwner instanceof PropertyGroupMetadata) {
+                    final PropertyGroupMetadata propertyGroupMetadata = (PropertyGroupMetadata) actionOwner;
+                    final List<PropertyLayoutMetadata> properties = propertyGroupMetadata.getProperties();
                     final PropertyLayoutMetadata propertyLayoutMetadata = properties.get(0); // any will do
                     memberOrderName = propertyLayoutMetadata.getId();
                     memberOrderSequence = actionPropertyGroupSequence++;
@@ -409,7 +409,7 @@ public class ObjectLayoutMetadataFacetDefault
                         new MemberOrderFacetXml(memberOrderName, ""+memberOrderSequence, translationService, objectAction));
 
 
-                if(actionOwner instanceof PropertyGroup) {
+                if(actionOwner instanceof PropertyGroupMetadata) {
                     if(actionLayoutMetadata.getPosition() == null ||
                             actionLayoutMetadata.getPosition() == org.apache.isis.applib.annotation.ActionLayout.Position.BELOW ||
                             actionLayoutMetadata.getPosition() == org.apache.isis.applib.annotation.ActionLayout.Position.RIGHT) {
@@ -453,8 +453,8 @@ public class ObjectLayoutMetadataFacetDefault
                 FacetUtil.addFacet(TypicalLengthFacetForPropertyXml.create(propertyLayoutMetadata, oneToOneAssociation));
 
                 // @MemberOrder#name based on owning property group, @MemberOrder#sequence monotonically increasing
-                final PropertyGroup propertyGroup = propertyLayoutMetadata.getOwner();
-                final String groupName = propertyGroup.getName();
+                final PropertyGroupMetadata propertyGroupMetadata = propertyLayoutMetadata.getOwner();
+                final String groupName = propertyGroupMetadata.getName();
                 final String sequence = nextInSequenceFor(groupName, propertySequenceByGroup);
                 FacetUtil.addFacet(
                         new MemberOrderFacetXml(groupName, sequence, translationService, oneToOneAssociation));
@@ -484,13 +484,13 @@ public class ObjectLayoutMetadataFacetDefault
                         new MemberOrderFacetXml(groupName, sequence, translationService, oneToManyAssociation));
 
                 // if there is only a single column and no other contents, then copy the collection Id onto the tab'
-                final Column column = collectionLayoutMetadata.getOwner();
-                final ColumnOwner holder = column.getOwner();
-                if(holder instanceof Tab) {
-                    final Tab tab = (Tab) holder;
-                    if(tab.getContents().size() == 1 && Strings.isNullOrEmpty(tab.getName()) ) {
+                final ColumnMetadata columnMetadata = collectionLayoutMetadata.getOwner();
+                final ColumnOwner holder = columnMetadata.getOwner();
+                if(holder instanceof TabMetadata) {
+                    final TabMetadata tabMetadata = (TabMetadata) holder;
+                    if(tabMetadata.getContents().size() == 1 && Strings.isNullOrEmpty(tabMetadata.getName()) ) {
                         final String collectionName = oneToManyAssociation.getName();
-                        tab.setName(collectionName);
+                        tabMetadata.setName(collectionName);
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
index 5c5c039..fd48915 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java
@@ -84,7 +84,7 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
-import org.apache.isis.applib.layout.v1_0.Column.Hint;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata.Hint;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
index b184d35..acc1edc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
@@ -25,7 +25,7 @@ import java.util.Set;
 
 import com.google.common.collect.Lists;
 
-import org.apache.isis.applib.layout.v1_0.Column;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
 import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
 
 
@@ -37,7 +37,7 @@ public final class ObjectSpecifications {
     public static List<String> orderByMemberGroups(
             final ObjectSpecification objSpec,
             final Set<String> groupNamesToOrder,
-            final Column.Hint hint) {
+            final ColumnMetadata.Hint hint) {
 
         final MemberGroupLayoutFacet facet = objSpec.getFacet(MemberGroupLayoutFacet.class);
         final List<String> leftColumnGroupNames = Lists.newArrayList(groupNamesToOrder);
@@ -47,10 +47,10 @@ public final class ObjectSpecifications {
             return leftColumnGroupNames;
         }
         
-        if(hint == Column.Hint.MIDDLE) {
+        if(hint == ColumnMetadata.Hint.MIDDLE) {
             return facet.getColumnSpans().getMiddle()>0? facet.getMiddle(): Collections.<String>emptyList();
         }
-        if(hint == Column.Hint.RIGHT) {
+        if(hint == ColumnMetadata.Hint.RIGHT) {
             return facet.getColumnSpans().getRight()>0? facet.getRight(): Collections.<String>emptyList();
         }
         

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/ObjectLayoutMetadataFacetDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/ObjectLayoutMetadataFacetDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/ObjectLayoutMetadataFacetDefaultTest.java
index 5ff3426..42fa829 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/ObjectLayoutMetadataFacetDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/ObjectLayoutMetadataFacetDefaultTest.java
@@ -22,7 +22,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.junit.Test;
 
-import org.apache.isis.applib.layout.v1_0.PropertyGroup;
+import org.apache.isis.applib.layout.v1_0.PropertyGroupMetadata;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -33,10 +33,10 @@ public class ObjectLayoutMetadataFacetDefaultTest {
     @Test
     public void xxx() throws Exception {
 
-        final AtomicReference<PropertyGroup> x = new AtomicReference<>();
+        final AtomicReference<PropertyGroupMetadata> x = new AtomicReference<>();
 
-        PropertyGroup firstValue = new PropertyGroup();
-        PropertyGroup otherValue = new PropertyGroup();
+        PropertyGroupMetadata firstValue = new PropertyGroupMetadata();
+        PropertyGroupMetadata otherValue = new PropertyGroupMetadata();
 
         assertThat(x.get(), is(nullValue()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/ObjectLayoutMetadataTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/ObjectLayoutMetadataTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/ObjectLayoutMetadataTest.java
index 7e72c7a..a70177e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/ObjectLayoutMetadataTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/ObjectLayoutMetadataTest.java
@@ -31,12 +31,12 @@ import org.junit.Test;
 
 import org.apache.isis.applib.layout.v1_0.ActionLayoutMetadata;
 import org.apache.isis.applib.layout.v1_0.CollectionLayoutMetadata;
-import org.apache.isis.applib.layout.v1_0.Column;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
 import org.apache.isis.applib.layout.v1_0.ObjectLayoutMetadata;
 import org.apache.isis.applib.layout.v1_0.PropertyLayoutMetadata;
-import org.apache.isis.applib.layout.v1_0.PropertyGroup;
-import org.apache.isis.applib.layout.v1_0.Tab;
-import org.apache.isis.applib.layout.v1_0.TabGroup;
+import org.apache.isis.applib.layout.v1_0.PropertyGroupMetadata;
+import org.apache.isis.applib.layout.v1_0.TabMetadata;
+import org.apache.isis.applib.layout.v1_0.TabGroupMetadata;
 import org.apache.isis.applib.services.jaxb.JaxbService;
 
 import static org.hamcrest.CoreMatchers.equalTo;
@@ -62,15 +62,15 @@ public class ObjectLayoutMetadataTest {
 
         final ObjectLayoutMetadata objectLayoutMetadata = new ObjectLayoutMetadata();
 
-        objectLayoutMetadata.setTabGroups(Lists.<TabGroup>newArrayList());
-        objectLayoutMetadata.getTabGroups().add(new TabGroup());
-        TabGroup tabGroup = objectLayoutMetadata.getTabGroups().get(0);
-        Tab tab = tabGroup.getTabs().get(0);
-        tab.setName("Common");
-        Column left = tab.getLeft();
+        objectLayoutMetadata.setTabGroups(Lists.<TabGroupMetadata>newArrayList());
+        objectLayoutMetadata.getTabGroups().add(new TabGroupMetadata());
+        TabGroupMetadata tabGroup = objectLayoutMetadata.getTabGroups().get(0);
+        TabMetadata tabMetadata = tabGroup.getTabs().get(0);
+        tabMetadata.setName("Common");
+        ColumnMetadata left = tabMetadata.getLeft();
 
-        PropertyGroup leftPropGroup = new PropertyGroup();
-        left.setPropertyGroups(Lists.<PropertyGroup>newArrayList());
+        PropertyGroupMetadata leftPropGroup = new PropertyGroupMetadata();
+        left.setPropertyGroups(Lists.<PropertyGroupMetadata>newArrayList());
         left.getPropertyGroups().add(leftPropGroup);
         leftPropGroup.setName("General");
 
@@ -79,7 +79,7 @@ public class ObjectLayoutMetadataTest {
         left.getCollections().add(similarToColl);
         similarToColl.setId("similarTo");
 
-        left.getPropertyGroups().add(new PropertyGroup("General"));
+        left.getPropertyGroups().add(new PropertyGroupMetadata("General"));
         PropertyLayoutMetadata namePropertyLayoutMetadata = new PropertyLayoutMetadata("name");
         left.getPropertyGroups().get(0).getProperties().add(namePropertyLayoutMetadata);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 66d2636..1732418 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -30,10 +30,10 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.annotation.BookmarkPolicy;
-import org.apache.isis.applib.layout.v1_0.Column;
-import org.apache.isis.applib.layout.v1_0.Column.Hint;
-import org.apache.isis.applib.layout.v1_0.Tab;
-import org.apache.isis.applib.layout.v1_0.TabGroup;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata.Hint;
+import org.apache.isis.applib.layout.v1_0.TabMetadata;
+import org.apache.isis.applib.layout.v1_0.TabGroupMetadata;
 import org.apache.isis.applib.services.memento.MementoService.Memento;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
@@ -644,71 +644,71 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
     // tab and column metadata (if any)
     // //////////////////////////////////////////////////////////
 
-    private List<TabGroup> tabGroupListMetadata;
+    private List<TabGroupMetadata> tabGroupListMetadata;
 
-    public List<TabGroup> getTabGroupListMetadata() {
+    public List<TabGroupMetadata> getTabGroupListMetadata() {
         return tabGroupListMetadata;
     }
 
     /**
      * Returns a new copy that SHARES the property scalar models (for edit form).
      */
-    public EntityModel cloneWithTabGroupListMetadata(final List<TabGroup> tabGroupListMetadata) {
+    public EntityModel cloneWithTabGroupListMetadata(final List<TabGroupMetadata> tabGroupListMetadata) {
         final EntityModel entityModel = new EntityModel(this.adapterMemento, this.propertyScalarModels);
         entityModel.tabGroupListMetadata = tabGroupListMetadata;
         return entityModel;
     }
 
 
-    private TabGroup tabGroupMetadata;
+    private TabGroupMetadata tabGroupMetadata;
 
-    public TabGroup getTabGroupMetadata() {
+    public TabGroupMetadata getTabGroupMetadata() {
         return tabGroupMetadata;
     }
 
     /**
      * Returns a new copy that SHARES the property scalar models (for edit form).
      */
-    public EntityModel cloneWithTabGroupMetadata(final TabGroup tabGroupMetadata) {
+    public EntityModel cloneWithTabGroupMetadata(final TabGroupMetadata tabGroupMetadata) {
         final EntityModel entityModel = new EntityModel(this.adapterMemento, this.propertyScalarModels);
         entityModel.tabGroupMetadata = tabGroupMetadata;
         return entityModel;
     }
 
 
-    private Tab tabMetadata;
+    private TabMetadata tabMetadata;
 
-    public Tab getTabMetadata() {
+    public TabMetadata getTabMetadata() {
         return tabMetadata;
     }
 
     /**
      * Returns a new copy that SHARES the property scalar models (for edit form).
      */
-    public EntityModel cloneWithTabMetadata(final Tab tabMetadata) {
+    public EntityModel cloneWithTabMetadata(final TabMetadata tabMetadata) {
         final EntityModel entityModel = new EntityModel(this.adapterMemento, this.propertyScalarModels);
         entityModel.tabMetadata = tabMetadata;
         return entityModel;
     }
 
 
-    private Column columnMetadata;
-    private Column.Hint columnHint;
+    private ColumnMetadata columnMetadata;
+    private ColumnMetadata.Hint columnHint;
 
     /**
      * Returns a new copy that SHARES the property scalar models (for edit form).
      */
-    public EntityModel cloneWithColumnMetadata(final Column columnMetadata, final Column.Hint columnHint) {
+    public EntityModel cloneWithColumnMetadata(final ColumnMetadata columnMetadata, final ColumnMetadata.Hint columnHint) {
         final EntityModel entityModel = new EntityModel(this.adapterMemento, this.propertyScalarModels);
         entityModel.columnMetadata = columnMetadata;
         entityModel.columnHint = columnHint;
         return entityModel;
     }
 
-    public Column getColumnMetadata() {
+    public ColumnMetadata getColumnMetadata() {
         return columnMetadata;
     }
-    public Column.Hint getColumnHint() {
+    public ColumnMetadata.Hint getColumnHint() {
         return columnHint;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
index cf6f1d9..9cbe7e4 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.java
@@ -35,7 +35,7 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.filter.Filters;
 import org.apache.isis.applib.layout.v1_0.CollectionLayoutMetadata;
-import org.apache.isis.applib.layout.v1_0.Column;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -99,7 +99,7 @@ public class EntityCollectionsPanel extends PanelAbstract<EntityModel> {
         final EntityModel entityModel = getModel();
         final ObjectAdapter adapter = entityModel.getObject();
 
-        final Column columnMetadataIfAny = entityModel.getColumnMetadata();
+        final ColumnMetadata columnMetadataIfAny = entityModel.getColumnMetadata();
         final Filter<ObjectAssociation> filter;
         if (columnMetadataIfAny != null) {
             final ImmutableList<String> collectionIds = FluentIterable

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumn.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumn.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumn.java
index a0b7b2b..47cb002 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumn.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumn.java
@@ -31,8 +31,8 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.repeater.RepeatingView;
 
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.layout.v1_0.Column;
-import org.apache.isis.applib.layout.v1_0.PropertyGroup;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
+import org.apache.isis.applib.layout.v1_0.PropertyGroupMetadata;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
@@ -93,8 +93,8 @@ public class EntityColumn extends PanelAbstract<EntityModel> {
             final MarkupContainer markupContainer,
             final EntityModel entityModel) {
 
-        final Column columnMetaDataIfAny = entityModel.getColumnMetadata();
-        final Column.Hint hint = entityModel.getColumnHint();
+        final ColumnMetadata columnMetaDataIfAny = entityModel.getColumnMetadata();
+        final ColumnMetadata.Hint hint = entityModel.getColumnHint();
         final ObjectAdapter adapter = entityModel.getObject();
         final ObjectSpecification objSpec = adapter.getSpecification();
 
@@ -103,7 +103,7 @@ public class EntityColumn extends PanelAbstract<EntityModel> {
         final List<String> groupNames = columnMetaDataIfAny != null
                 ? FluentIterable
                 .from(columnMetaDataIfAny.getPropertyGroups())
-                .transform(PropertyGroup.Util.nameOf())
+                .transform(PropertyGroupMetadata.Util.nameOf())
                 .toList()
                 : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), hint);
 
@@ -152,7 +152,7 @@ public class EntityColumn extends PanelAbstract<EntityModel> {
             final MarkupContainer column,
             final EntityModel entityModel) {
 
-        final Column columnMetaDataIfAny = entityModel.getColumnMetadata();
+        final ColumnMetadata columnMetaDataIfAny = entityModel.getColumnMetadata();
 
         if(columnMetaDataIfAny != null) {
             getComponentFactoryRegistry()

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index 7981790..a940591 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -44,9 +44,9 @@ import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.filter.Filters;
-import org.apache.isis.applib.layout.v1_0.Column;
-import org.apache.isis.applib.layout.v1_0.Column.Hint;
-import org.apache.isis.applib.layout.v1_0.Tab;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata.Hint;
+import org.apache.isis.applib.layout.v1_0.TabMetadata;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 import org.apache.isis.core.commons.authentication.MessageBroker;
@@ -124,12 +124,12 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements
     private void buildGui() {
 
         final EntityModel entityModel = (EntityModel) getModel();
-        final Tab tabMetaDataIfAny = entityModel.getTabMetadata();
+        final TabMetadata tabMetaDataIfAny = entityModel.getTabMetadata();
 
         final ColumnSpans columnSpans;
         if(tabMetaDataIfAny != null) {
-            final Column middle = tabMetaDataIfAny.getMiddle();
-            final Column right = tabMetaDataIfAny.getRight();
+            final ColumnMetadata middle = tabMetaDataIfAny.getMiddle();
+            final ColumnMetadata right = tabMetaDataIfAny.getRight();
             columnSpans = ColumnSpans.asSpans(
                     tabMetaDataIfAny.getLeft().getSpan(),
                     middle != null? middle.getSpan(): 0,
@@ -190,7 +190,7 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements
 
         // edit buttons and feedback (not supported on tabbed view)
         final Hint leftHint = Hint.LEFT;
-        final Column leftColumnMetaDataIfAny = leftHint.from(tabMetaDataIfAny);
+        final ColumnMetadata leftColumnMetaDataIfAny = leftHint.from(tabMetaDataIfAny);
         final boolean hasProperties = leftColumnMetaDataIfAny == null && !PropUtil.propertyGroupNames(entityModel, leftHint, leftColumnMetaDataIfAny).isEmpty();
         if (hasProperties) {
             addButtons(leftColumn);
@@ -233,9 +233,9 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements
     private void addPropertiesAndCollections(
             final MarkupContainer markupContainer,
             final EntityModel entityModel,
-            final Tab tabMetaDataIfAny,
+            final TabMetadata tabMetaDataIfAny,
             final Hint hint) {
-        final Column columnMetaDataIfAny = hint.from(tabMetaDataIfAny);
+        final ColumnMetadata columnMetaDataIfAny = hint.from(tabMetaDataIfAny);
 
         final EntityModel entityModelWithHints = entityModel.cloneWithColumnMetadata(columnMetaDataIfAny, hint);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java
index ff0d5b8..2ed5e61 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java
@@ -26,8 +26,8 @@ import com.google.common.collect.FluentIterable;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.filter.Filters;
-import org.apache.isis.applib.layout.v1_0.Column;
-import org.apache.isis.applib.layout.v1_0.PropertyGroup;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
+import org.apache.isis.applib.layout.v1_0.PropertyGroupMetadata;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -43,7 +43,7 @@ public final class PropUtil {
 
     static List<String> propertyGroupNames(
             final EntityModel entityModel,
-            final Column.Hint hint, final Column columnMetaDataIfAny) {
+            final ColumnMetadata.Hint hint, final ColumnMetadata columnMetaDataIfAny) {
         final ObjectAdapter adapter = entityModel.getObject();
         final ObjectSpecification objSpec = adapter.getSpecification();
 
@@ -53,7 +53,7 @@ public final class PropUtil {
         return columnMetaDataIfAny != null
                 ? FluentIterable
                 .from(columnMetaDataIfAny.getPropertyGroups())
-                .transform(PropertyGroup.Util.nameOf())
+                .transform(PropertyGroupMetadata.Util.nameOf())
                 .toList()
                 : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(),
                 hint);

http://git-wip-us.apache.org/repos/asf/isis/blob/e647a951/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/ColumnTabGroupListColumnPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/ColumnTabGroupListColumnPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/ColumnTabGroupListColumnPanel.java
index 108d784..b281222 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/ColumnTabGroupListColumnPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/ColumnTabGroupListColumnPanel.java
@@ -23,9 +23,9 @@ import java.util.List;
 
 import com.google.common.collect.FluentIterable;
 
-import org.apache.isis.applib.layout.v1_0.Column;
+import org.apache.isis.applib.layout.v1_0.ColumnMetadata;
 import org.apache.isis.applib.layout.v1_0.ObjectLayoutMetadata;
-import org.apache.isis.applib.layout.v1_0.TabGroup;
+import org.apache.isis.applib.layout.v1_0.TabGroupMetadata;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.object.layoutmetadata.ObjectLayoutMetadataFacet;
@@ -69,11 +69,11 @@ public class ColumnTabGroupListColumnPanel extends PanelAbstract<EntityModel> {
 
         addOrReplace(ComponentType.ENTITY_SUMMARY, model);
 
-        final int leftSpan = addColumnIfRequired(ID_LEFT_COLUMN, objectLayoutMetadata.getLeft(), Column.Hint.LEFT);
+        final int leftSpan = addColumnIfRequired(ID_LEFT_COLUMN, objectLayoutMetadata.getLeft(), ColumnMetadata.Hint.LEFT);
 
         final TabGroupListPanel middleTabs = addTabGroups(ID_MIDDLE_COLUMN, objectLayoutMetadata.getTabGroups());
 
-        final int rightSpan = addColumnIfRequired(ID_RIGHT_COLUMN, objectLayoutMetadata.getRight(), Column.Hint.RIGHT);
+        final int rightSpan = addColumnIfRequired(ID_RIGHT_COLUMN, objectLayoutMetadata.getRight(), ColumnMetadata.Hint.RIGHT);
 
         final int columnSpans = leftSpan + rightSpan;
         int tabGroupSpan = columnSpans < 12 ? 12 - (columnSpans) : 12;
@@ -82,11 +82,11 @@ public class ColumnTabGroupListColumnPanel extends PanelAbstract<EntityModel> {
     }
 
     private TabGroupListPanel addTabGroups(
-            final String id, final List<TabGroup> tabGroupList) {
+            final String id, final List<TabGroupMetadata> tabGroupList) {
         final EntityModel model = getModel();
-        final List<TabGroup> tabGroups = FluentIterable
+        final List<TabGroupMetadata> tabGroups = FluentIterable
                 .from(tabGroupList)
-                .filter(TabGroup.Predicates.notEmpty())
+                .filter(TabGroupMetadata.Predicates.notEmpty())
                 .toList();
         final EntityModel entityModelWitHints = model.cloneWithTabGroupListMetadata(tabGroups);
         final TabGroupListPanel middleComponent = new TabGroupListPanel(id, entityModelWitHints);
@@ -94,7 +94,7 @@ public class ColumnTabGroupListColumnPanel extends PanelAbstract<EntityModel> {
         return middleComponent;
     }
 
-    private int addColumnIfRequired(final String id, final Column col, final Column.Hint hint) {
+    private int addColumnIfRequired(final String id, final ColumnMetadata col, final ColumnMetadata.Hint hint) {
         if(col != null) {
             final EntityModel entityModel =
                     getModel().cloneWithColumnMetadata(col, hint);