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/04 08:52:11 UTC

isis git commit: ISIS-993: Now allow unreferenced collections to be associated with columns. Also sorting out hints for collection selection under tabs.

Repository: isis
Updated Branches:
  refs/heads/ISIS-993 8fcac9648 -> 20faf33a0


ISIS-993: Now allow unreferenced collections to be associated with columns.  Also sorting out hints for collection selection under tabs.


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

Branch: refs/heads/ISIS-993
Commit: 20faf33a050b10e0085b01cc027d6d0ef6dd4386
Parents: 8fcac96
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Thu Feb 4 07:51:22 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Feb 4 07:51:22 2016 +0000

----------------------------------------------------------------------
 .../applib/layout/bootstrap3/bootstrap3.xsd     |  1 +
 .../isis/applib/layout/bootstrap3/BS3Col.java   | 22 +++++++++++-
 .../applib/layout/bootstrap3/BS3TabGroup.java   |  4 +--
 .../isis/applib/layout/common/FieldSet.java     |  3 +-
 .../bootstrap3/GridNormalizerServiceBS3.java    | 38 +++++++++++++++++---
 .../model/hints/HasUiHintDisambiguator.java     | 24 +++++++++++++
 .../wicket/model/hints/UiHintContainer.java     | 16 +++++++--
 .../model/models/EntityCollectionModel.java     | 13 +++++++
 .../collection/EntityCollectionPanel.java       | 18 +++++++---
 .../ui/components/layout/bs3/tabs/TabPanel.java | 11 +++++-
 .../dom/simple/SimpleObject.layout.xml          | 21 +++++++++--
 11 files changed, 152 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/adocs/documentation/src/main/asciidoc/schema/applib/layout/bootstrap3/bootstrap3.xsd
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/schema/applib/layout/bootstrap3/bootstrap3.xsd b/adocs/documentation/src/main/asciidoc/schema/applib/layout/bootstrap3/bootstrap3.xsd
index 12c9de7..39ca5fa 100644
--- a/adocs/documentation/src/main/asciidoc/schema/applib/layout/bootstrap3/bootstrap3.xsd
+++ b/adocs/documentation/src/main/asciidoc/schema/applib/layout/bootstrap3/bootstrap3.xsd
@@ -55,6 +55,7 @@
                 <xs:attribute name="id" type="xs:string"/>
                 <xs:attribute name="span" type="xs:int" use="required"/>
                 <xs:attribute name="unreferencedActions" type="xs:boolean"/>
+                <xs:attribute name="unreferencedCollections" type="xs:boolean"/>
             </xs:extension>
         </xs:complexContent>
     </xs:complexType>

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Col.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Col.java b/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Col.java
index f51fcba..0f00364 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Col.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Col.java
@@ -105,7 +105,7 @@ public class BS3Col extends BS3RowContent
      * Whether this column should be used to hold any unreferenced actions (contributed or &quot;native&quot;).
      *
      * <p>
-     *     Any layout must have precisely one column that has this attribute set.
+     *     Any layout must have precisely one column or {@link FieldSet} that has this attribute set.
      * </p>
      */
     @XmlAttribute(required = false)
@@ -118,6 +118,26 @@ public class BS3Col extends BS3RowContent
     }
 
 
+    private Boolean unreferencedCollections;
+    /**
+     * Whether this column should be used to hold any unreferenced collections (contributed or &quot;native&quot;).
+     *
+     * <p>
+     *     Any layout must have precisely one column or {@link BS3TabGroup tabgroup} that has this attribute set.
+     * </p>
+     */
+    @XmlAttribute(required = false)
+    public Boolean isUnreferencedCollections() {
+        return unreferencedCollections;
+    }
+
+    public void setUnreferencedCollections(final Boolean unreferencedCollections) {
+        this.unreferencedCollections = unreferencedCollections;
+    }
+
+
+
+
 
     private DomainObjectLayoutData domainObject;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3TabGroup.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3TabGroup.java b/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3TabGroup.java
index 6f65bf7..434c2ae 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3TabGroup.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3TabGroup.java
@@ -45,10 +45,10 @@ public class BS3TabGroup extends BS3ElementAbstract implements BS3TabOwner {
 
     private Boolean unreferencedCollections;
     /**
-     * Whether this column should be used to hold any unreferenced collections (contributed or &quot;native&quot;).
+     * Whether this tab group should be used to hold any unreferenced collections (contributed or &quot;native&quot;).
      *
      * <p>
-     *     Any layout must have precisely one column that has this attribute set.
+     *     Any layout must have precisely one tab group or {@link BS3Col col} that has this attribute set.
      * </p>
      */
     @XmlAttribute(required = false)

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
index 40769eb..fe8bf65 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
@@ -33,6 +33,7 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.layout.bootstrap3.BS3Col;
 
 /**
  * A {@link MemberRegion region} of the page containing a set of
@@ -86,7 +87,7 @@ public class FieldSet implements MemberRegion, ActionLayoutDataOwner, Serializab
      * Whether this fieldset should be used to hold any unreferenced actions (contributed or &quot;native&quot;).
      *
      * <p>
-     *     Any layout must have precisely one fieldset that has this attribute set.
+     *     Any layout must have precisely one fieldset or {@link BS3Col col} that has this attribute set.
      * </p>
      */
     @XmlAttribute(required = false)

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/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 5761965..c0e0fa9 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
@@ -122,11 +122,13 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
         // unreferencedActions, unreferencedProperties and unreferencedCollections attribute set.
 
         final AtomicReference<BS3Col> colForUnreferencedActionsRef = new AtomicReference<>();
+        final AtomicReference<BS3Col> colForUnreferencedCollectionsRef = new AtomicReference<>();
         final AtomicReference<FieldSet> fieldSetForUnreferencedActionsRef = new AtomicReference<>();
         final AtomicReference<FieldSet> fieldSetForUnreferencedPropertiesRef = new AtomicReference<>();
         final AtomicReference<BS3TabGroup> tabGroupForUnreferencedCollectionsRef = new AtomicReference<>();
 
         bs3Grid.visit(new BS3Grid.VisitorAdapter(){
+
             @Override
             public void visit(final BS3Col bs3Col) {
                 if(isSet(bs3Col.isUnreferencedActions())) {
@@ -138,6 +140,15 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
                         colForUnreferencedActionsRef.set(bs3Col);
                     }
                 }
+                if(isSet(bs3Col.isUnreferencedCollections())) {
+                    if(colForUnreferencedCollectionsRef.get() != null) {
+                        bs3Col.setMetadataError("More than one col with 'unreferencedCollections' attribute set");
+                    } else if(tabGroupForUnreferencedCollectionsRef.get() != null) {
+                        bs3Col.setMetadataError("Already found a tabgroup with 'unreferencedCollections' attribute set");
+                    } else {
+                        colForUnreferencedCollectionsRef.set(bs3Col);
+                    }
+                }
             }
 
             @Override
@@ -165,6 +176,8 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
                 if(isSet(bs3TabGroup.isUnreferencedCollections())) {
                     if(tabGroupForUnreferencedCollectionsRef.get() != null) {
                         bs3TabGroup.setMetadataError("More than one tabgroup with 'unreferencedCollections' attribute set");
+                    } else if(colForUnreferencedCollectionsRef.get() != null) {
+                        bs3TabGroup.setMetadataError("Already found a column with 'unreferencedCollections' attribute set");
                     } else {
                         tabGroupForUnreferencedCollectionsRef.set(bs3TabGroup);
                     }
@@ -173,18 +186,18 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
         });
 
         if(colForUnreferencedActionsRef.get() == null && fieldSetForUnreferencedActionsRef.get() == null) {
-            bs3Grid.getMetadataErrors().add("No column and no fieldset has the 'unreferencedActions' attribute set");
+            bs3Grid.getMetadataErrors().add("No column and also no fieldset found with the 'unreferencedActions' attribute set");
         }
         if(fieldSetForUnreferencedPropertiesRef.get() == null) {
-            bs3Grid.getMetadataErrors().add("No fieldset has the 'unreferencedProperties' attribute set");
+            bs3Grid.getMetadataErrors().add("No fieldset found with the 'unreferencedProperties' attribute set");
         }
-        if(tabGroupForUnreferencedCollectionsRef.get() == null) {
-            bs3Grid.getMetadataErrors().add("No tabgroup has the 'unreferencedCollections' attribute set");
+        if(colForUnreferencedCollectionsRef.get() == null && tabGroupForUnreferencedCollectionsRef.get() == null) {
+            bs3Grid.getMetadataErrors().add("No column and also no tabgroup found with the 'unreferencedCollections' attribute set");
         }
 
         if(     colForUnreferencedActionsRef.get() == null && fieldSetForUnreferencedActionsRef.get() == null ||
                 fieldSetForUnreferencedPropertiesRef.get() == null ||
-                tabGroupForUnreferencedCollectionsRef.get() == null) {
+                colForUnreferencedCollectionsRef.get() == null && tabGroupForUnreferencedCollectionsRef.get() == null) {
             return false;
         }
 
@@ -219,6 +232,11 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
             final BS3TabGroup bs3TabGroup = tabGroupForUnreferencedCollectionsRef.get();
             if(bs3TabGroup != null) {
                 addMissingCollectionsTo(bs3TabGroup, missingCollectionIds, objectSpec);
+            } else {
+                final BS3Col bs3Col = colForUnreferencedCollectionsRef.get();
+                if(bs3Col != null) {
+                    addMissingCollectionsTo(bs3Col, missingCollectionIds);
+                }
             }
         }
 
@@ -294,6 +312,16 @@ public class GridNormalizerServiceBS3 extends GridNormalizerServiceAbstract<BS3G
     }
 
     protected void addMissingCollectionsTo(
+            final BS3Col tabRowCol,
+            final List<String> missingCollectionIds) {
+        for (final String collectionId : missingCollectionIds) {
+            final CollectionLayoutData layoutMetadata = new CollectionLayoutData(collectionId);
+            layoutMetadata.setDefaultView("table");
+            tabRowCol.getCollections().add(layoutMetadata);
+        }
+    }
+
+    protected void addMissingCollectionsTo(
             final BS3TabGroup tabGroup,
             final List<String> missingCollectionIds,
             final ObjectSpecification objectSpec) {

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/HasUiHintDisambiguator.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/HasUiHintDisambiguator.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/HasUiHintDisambiguator.java
new file mode 100644
index 0000000..2ce0153
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/HasUiHintDisambiguator.java
@@ -0,0 +1,24 @@
+/**
+ *  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.viewer.wicket.model.hints;
+
+public interface HasUiHintDisambiguator {
+
+    String getHintDisambiguator();
+    
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
index ed93f16..4b65489 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/hints/UiHintContainer.java
@@ -51,7 +51,10 @@ public interface UiHintContainer {
 
 
         public static String hintPathFor(Component component) {
-            return Strings.afterFirstPathComponent(fullHintPathFor(component), Component.PATH_SEPARATOR);
+            final String fullHintPath = fullHintPathFor(component);
+            final String firstPathComponent =
+                    Strings.afterFirstPathComponent(fullHintPath, Component.PATH_SEPARATOR);
+            return firstPathComponent;
         }
 
         private static String fullHintPathFor(Component component) {
@@ -60,11 +63,20 @@ public interface UiHintContainer {
                 if (buffer.length() > 0) {
                     buffer.prepend(Component.PATH_SEPARATOR);
                 }
+                final Class<? extends Component> aClass = c.getClass();
+                if(HasUiHintDisambiguator.class.isAssignableFrom(aClass)) {
+                    final HasUiHintDisambiguator hasUiHintDisambiguator = (HasUiHintDisambiguator) c;
+                    buffer.prepend(hasUiHintDisambiguator.getHintDisambiguator());
+                    buffer.prepend("-");
+                }
                 buffer.prepend(c.getId());
             }
-            return buffer.toString();
+            final String fullHintPath = buffer.toString();
+            return fullHintPath;
         }
 
 
     }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 76ed8bc..17c6fc9 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -486,6 +486,19 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
     }
 
 
+    @Override
+    protected void doSetHint(final String scopeKey, final String attributeName, final String value) {
+        if(isParented()) {
+            // same logic as in EntityModel's similar override
+            ScopedSessionAttribute scopedSessionAttribute = scopedSessionAttributeByName.get(attributeName);
+            if(scopedSessionAttribute == null) {
+                scopedSessionAttribute = ScopedSessionAttribute.create(parentObjectAdapterMemento, scopeKey, attributeName);
+            }
+            scopedSessionAttribute.set(value);
+        }
+    }
+
+
     // //////////////////////////////////////
 
     private static AdapterManager getAdapterManagerStatic() {

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
index e6b3743..f5a6c16 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
@@ -63,8 +63,15 @@ public class EntityCollectionPanel extends PanelAbstract<EntityModel> {
         super(id, entityModel);
 
         selectedItemSessionAttribute = ScopedSessionAttribute.create(
-                entityModel, this, EntityCollectionModel.SESSION_ATTRIBUTE_SELECTED_ITEM);
+                entityModel, this,  EntityCollectionModel.SESSION_ATTRIBUTE_SELECTED_ITEM);
 
+    }
+
+    /**
+     * Build UI only after added to parent.
+     */
+    public void onInitialize() {
+        super.onInitialize();
         buildGui();
     }
 
@@ -86,7 +93,6 @@ public class EntityCollectionPanel extends PanelAbstract<EntityModel> {
         collectionRvContainer.add(fieldSet);
 
         final CollectionPanel collectionPanel = new CollectionPanel(ID_COLLECTION, entityCollectionModel);
-        fieldSet.addOrReplace(collectionPanel);
 
         Label labelComponent = collectionPanel.createLabel(ID_COLLECTION_NAME, association.getName());
         final NamedFacet namedFacet = association.getFacet(NamedFacet.class);
@@ -110,8 +116,9 @@ public class EntityCollectionPanel extends PanelAbstract<EntityModel> {
         if (componentFactories.size() <= 1) {
             permanentlyHide(ID_SELECTOR_DROPDOWN);
         } else {
-            CollectionSelectorPanel selectorDropdownPanel;
-            selectorDropdownPanel = new CollectionSelectorPanel(ID_SELECTOR_DROPDOWN, entityCollectionModel, selectedItemSessionAttribute);
+            CollectionSelectorPanel selectorDropdownPanel =
+                    new CollectionSelectorPanel(ID_SELECTOR_DROPDOWN,
+                    entityCollectionModel, selectedItemSessionAttribute);
 
             final Model<ComponentFactory> componentFactoryModel = new Model<>();
 
@@ -125,5 +132,8 @@ public class EntityCollectionPanel extends PanelAbstract<EntityModel> {
 
             collectionPanel.setSelectorDropdownPanel(selectorDropdownPanel);
         }
+        fieldSet.addOrReplace(collectionPanel);
     }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabPanel.java
index 994fb4b..4d2de72 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/tabs/TabPanel.java
@@ -5,12 +5,13 @@ import org.apache.wicket.markup.repeater.RepeatingView;
 
 import org.apache.isis.applib.layout.bootstrap3.BS3Row;
 import org.apache.isis.applib.layout.bootstrap3.BS3Tab;
+import org.apache.isis.viewer.wicket.model.hints.HasUiHintDisambiguator;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.components.layout.bs3.Util;
 import org.apache.isis.viewer.wicket.ui.components.layout.bs3.row.Row;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
-public class TabPanel extends PanelAbstract {
+public class TabPanel extends PanelAbstract implements HasUiHintDisambiguator {
 
     private static final long serialVersionUID = 1L;
     private final BS3Tab bs3Tab;
@@ -22,6 +23,14 @@ public class TabPanel extends PanelAbstract {
         buildGui(model, bs3Tab);
     }
 
+    /**
+     * when tabs are rendered, they don't distinguish within the path hierarchy: even if on different tabs, the first
+     * panel will have the same Wicket path hierarchy.  This property allows us to distinguish.
+     */
+    public String getHintDisambiguator() {
+        return bs3Tab.getName();
+    }
+
     protected void buildGui(final EntityModel model, final BS3Tab bs3Tab) {
 
         Util.appendCssClassIfRequired(this, bs3Tab);

http://git-wip-us.apache.org/repos/asf/isis/blob/20faf33a/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 34bbb54..4201dfd 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
@@ -40,11 +40,26 @@
         </bs3:col>
     </bs3:row>
     <bs3:row>
-        <bs3:col span="6">
+        <bs3:col span="4">
             <c:fieldSet name="Properties" unreferencedProperties="true"/>
         </bs3:col>
-        <bs3:col span="6">
-            <bs3:tabGroup unreferencedCollections="true"/>
+        <bs3:col span="8">
+            <bs3:tabGroup  unreferencedCollections="true">
+                <bs3:tab name="Others">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <c:collection id="others" defaultView="table"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Similar To">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <c:collection id="similarTo"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
         </bs3:col>
     </bs3:row>
 </bs3:grid>