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/31 11:57:32 UTC

[16/18] isis git commit: ISIS-993: bootstrap3 schema now properly defined and serializing ok. Also juggling around with the common (nee members)

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/provider/PageNormalizerServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/provider/PageNormalizerServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/provider/PageNormalizerServiceDefault.java
index 789821b..918faa2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/provider/PageNormalizerServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/provider/PageNormalizerServiceDefault.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.layout.bootstrap3.BS3Page;
 import org.apache.isis.applib.layout.fixedcols.FCPage;
-import org.apache.isis.applib.layout.members.v1.Page;
+import org.apache.isis.applib.layout.common.Page;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
@@ -42,11 +42,11 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
 )
 public class PageNormalizerServiceDefault implements PageNormalizerService, SpecificationLoaderAware {
 
-    public static final String MEMBERS_TNS = "http://isis.apache.org/schema/applib/layout/members/v1";
-    public static final String MEMBERS_SCHEMA_LOCATION = "http://isis.apache.org/schema/applib/layout/members/v1/members.xsd";
+    private static final Logger LOG = LoggerFactory.getLogger(PageNormalizerServiceDefault.class);
 
+    public static final String COMMON_TNS = "http://isis.apache.org/schema/applib/layout/common";
+    public static final String COMMON_SCHEMA_LOCATION = "http://isis.apache.org/schema/applib/layout/common/common.xsd";
 
-    private static final Logger LOG = LoggerFactory.getLogger(PageNormalizerServiceDefault.class);
     private SpecificationLoader specificationLookup;
 
     private PageNormalizerFC pageNormalizerFC;
@@ -86,8 +86,8 @@ public class PageNormalizerServiceDefault implements PageNormalizerService, Spec
     @Override
     public String schemaLocationsFor(final Page page) {
         final List<String> parts = Lists.newArrayList();
-        parts.add(MEMBERS_TNS);
-        parts.add(MEMBERS_SCHEMA_LOCATION);
+        parts.add(COMMON_TNS);
+        parts.add(COMMON_SCHEMA_LOCATION);
         if(page instanceof FCPage) {
             parts.add(PageNormalizerFC.TNS);
             parts.add(PageNormalizerFC.SCHEMA_LOCATION);

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
index 6f307f7..519867b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
@@ -42,7 +42,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.layout.members.v1.Page;
+import org.apache.isis.applib.layout.common.Page;
 import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.services.layout.PageService;
 import org.apache.isis.applib.value.Blob;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/PageFacetDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/PageFacetDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/PageFacetDefaultTest.java
index ca65e96..2ca8356 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/PageFacetDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/layoutxml/PageFacetDefaultTest.java
@@ -22,7 +22,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.junit.Test;
 
-import org.apache.isis.applib.layout.members.v1.FieldSet;
+import org.apache.isis.applib.layout.common.FieldSet;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/bootstrap3/BS3PageTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/bootstrap3/BS3PageTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/bootstrap3/BS3PageTest.java
new file mode 100644
index 0000000..c5a81d6
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/bootstrap3/BS3PageTest.java
@@ -0,0 +1,149 @@
+/*
+ *  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.core.metamodel.layout.bootstrap3;
+
+import java.util.Map;
+
+import javax.xml.bind.Marshaller;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.isis.applib.layout.bootstrap3.BS3Col;
+import org.apache.isis.applib.layout.bootstrap3.BS3Page;
+import org.apache.isis.applib.layout.bootstrap3.BS3Row;
+import org.apache.isis.applib.layout.bootstrap3.BS3Tab;
+import org.apache.isis.applib.layout.bootstrap3.BS3TabGroup;
+import org.apache.isis.applib.layout.common.ActionLayoutData;
+import org.apache.isis.applib.layout.common.CollectionLayoutData;
+import org.apache.isis.applib.layout.common.DomainObjectLayoutData;
+import org.apache.isis.applib.layout.common.FieldSet;
+import org.apache.isis.applib.layout.common.PropertyLayoutData;
+import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.core.metamodel.services.layout.provider.PageNormalizerServiceDefault;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class BS3PageTest {
+
+    private JaxbService jaxbService;
+
+    @Before
+    public void setUp() throws Exception {
+        jaxbService = new JaxbService.Simple();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+
+    }
+
+    @Test
+    public void xxx() throws Exception {
+
+        final BS3Page bs3Page = new BS3Page();
+
+        // header
+        final BS3Row headerRow = bs3Page.getRows().get(0);
+        final BS3Col headerCol = (BS3Col) headerRow.getCols().get(0);
+        headerCol.setSpan(12);
+
+        final DomainObjectLayoutData objectLayoutData = new DomainObjectLayoutData();
+        headerCol.setDomainObject(objectLayoutData);
+
+        final ActionLayoutData deleteActionLayoutData = new ActionLayoutData();
+        deleteActionLayoutData.setId("delete");
+        headerCol.setActions(Lists.<ActionLayoutData>newArrayList());
+        headerCol.getActions().add(deleteActionLayoutData);
+
+        // content
+        final BS3Row contentRow = new BS3Row();
+        bs3Page.getRows().add(contentRow);
+
+        final BS3Col contentCol = (BS3Col) contentRow.getCols().get(0);
+        contentCol.setSpan(12);
+
+        // a tabgroup containing a 'Common' tab
+        final BS3TabGroup tabGroup = new BS3TabGroup();
+        contentCol.getTabGroups().add(tabGroup);
+        BS3Tab bs3Tab = tabGroup.getTabs().get(0);
+        bs3Tab.setName("Common");
+
+        // with a left col...
+        final BS3Row tabRow = bs3Tab.getRows().get(0);
+        final BS3Col tabLeftCol = (BS3Col) tabRow.getCols().get(0);
+        tabLeftCol.setSpan(6);
+
+        // containing a fieldset
+        final FieldSet leftPropGroup = new FieldSet("General");
+        tabLeftCol.setFieldSets(Lists.<FieldSet>newArrayList());
+        tabLeftCol.getFieldSets().add(leftPropGroup);
+        leftPropGroup.setName("General");
+
+        // with a single property
+        final PropertyLayoutData namePropertyLayoutData = leftPropGroup.getProperties().get(0);
+        namePropertyLayoutData.setNamed("name");
+
+        // and its associated action
+        final ActionLayoutData updateNameActionLayoutData = new ActionLayoutData();
+        updateNameActionLayoutData.setId("updateName");
+        namePropertyLayoutData.setActions(Lists.<ActionLayoutData>newArrayList());
+        namePropertyLayoutData.getActions().add(updateNameActionLayoutData);
+
+        // and the tab also has a right col...
+        final BS3Col tabRightCol = (BS3Col) tabRow.getCols().get(0);
+        tabRightCol.setSpan(6);
+
+        // containing a collection
+        final CollectionLayoutData similarToColl = new CollectionLayoutData();
+        tabRightCol.setCollections(Lists.<CollectionLayoutData>newArrayList());
+        tabRightCol.getCollections().add(similarToColl);
+        similarToColl.setId("similarTo");
+
+
+        final String schemaLocations = new PageNormalizerServiceDefault().schemaLocationsFor(bs3Page);
+        String xml = jaxbService.toXml(bs3Page,
+                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
+        System.out.println(xml);
+
+        BS3Page bs3Pageroundtripped = jaxbService.fromXml(BS3Page.class, xml);
+        String xmlRoundtripped = jaxbService.toXml(bs3Pageroundtripped,
+                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
+        assertThat(xml, is(equalTo(xmlRoundtripped)));
+
+
+        System.out.println("==========");
+
+        dumpXsd(bs3Page);
+    }
+
+    protected void dumpXsd(final BS3Page bs3Page) {
+        Map<String, String> schemas = jaxbService.toXsd(bs3Page, JaxbService.IsisSchemas.INCLUDE);
+        for (Map.Entry<String, String> entry : schemas.entrySet()) {
+            System.out.println(entry.getKey() + ":");
+            System.out.println(entry.getValue());
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/fixedcols/FCPageTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/fixedcols/FCPageTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/fixedcols/FCPageTest.java
new file mode 100644
index 0000000..9bce74b
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layout/fixedcols/FCPageTest.java
@@ -0,0 +1,120 @@
+/*
+ *  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.core.metamodel.layout.fixedcols;
+
+import java.util.Map;
+
+import javax.xml.bind.Marshaller;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.isis.applib.layout.fixedcols.FCColumn;
+import org.apache.isis.applib.layout.fixedcols.FCPage;
+import org.apache.isis.applib.layout.fixedcols.FCTab;
+import org.apache.isis.applib.layout.fixedcols.FCTabGroup;
+import org.apache.isis.applib.layout.common.ActionLayoutData;
+import org.apache.isis.applib.layout.common.CollectionLayoutData;
+import org.apache.isis.applib.layout.common.FieldSet;
+import org.apache.isis.applib.layout.common.PropertyLayoutData;
+import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.core.metamodel.services.layout.provider.PageNormalizerServiceDefault;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class FCPageTest {
+
+    private JaxbService jaxbService;
+
+    @Before
+    public void setUp() throws Exception {
+        jaxbService = new JaxbService.Simple();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+
+    }
+
+    @Test
+    public void xxx() throws Exception {
+
+        final FCPage fcPage = new FCPage();
+
+        fcPage.setTabGroups(Lists.<FCTabGroup>newArrayList());
+        fcPage.getTabGroups().add(new FCTabGroup());
+        FCTabGroup tabGroup = fcPage.getTabGroups().get(0);
+        FCTab FCTab = tabGroup.getTabs().get(0);
+        FCTab.setName("Common");
+        FCColumn left = FCTab.getLeft();
+
+        FieldSet leftPropGroup = new FieldSet();
+        left.setFieldSets(Lists.<FieldSet>newArrayList());
+        left.getFieldSets().add(leftPropGroup);
+        leftPropGroup.setName("General");
+
+        CollectionLayoutData similarToColl = new CollectionLayoutData();
+        left.setCollections(Lists.<CollectionLayoutData>newArrayList());
+        left.getCollections().add(similarToColl);
+        similarToColl.setId("similarTo");
+
+        left.getFieldSets().add(new FieldSet("General"));
+        PropertyLayoutData namePropertyLayoutData = new PropertyLayoutData("name");
+        left.getFieldSets().get(0).getProperties().add(namePropertyLayoutData);
+
+        ActionLayoutData updateNameActionLayoutData = new ActionLayoutData();
+        updateNameActionLayoutData.setId("updateName");
+        namePropertyLayoutData.setActions(Lists.<ActionLayoutData>newArrayList());
+        namePropertyLayoutData.getActions().add(updateNameActionLayoutData);
+
+        ActionLayoutData deleteActionLayoutData = new ActionLayoutData();
+        deleteActionLayoutData.setId("delete");
+        fcPage.setActions(Lists.<ActionLayoutData>newArrayList());
+        fcPage.getActions().add(deleteActionLayoutData);
+
+        final String schemaLocations = new PageNormalizerServiceDefault().schemaLocationsFor(fcPage);
+        String xml = jaxbService.toXml(fcPage,
+                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
+        System.out.println(xml);
+
+        FCPage fcPageRoundtripped = jaxbService.fromXml(FCPage.class, xml);
+        String xmlRoundtripped = jaxbService.toXml(fcPageRoundtripped,
+                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
+        assertThat(xml, is(equalTo(xmlRoundtripped)));
+
+
+        System.out.println("==========");
+
+        dumpXsd(fcPage);
+    }
+
+    protected void dumpXsd(final FCPage fcPage) {
+        Map<String, String> schemas = jaxbService.toXsd(fcPage, JaxbService.IsisSchemas.INCLUDE);
+        for (Map.Entry<String, String> entry : schemas.entrySet()) {
+            System.out.println(entry.getKey() + ":");
+            System.out.println(entry.getValue());
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/FCPageTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/FCPageTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/FCPageTest.java
deleted file mode 100644
index 29bd0c4..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/FCPageTest.java
+++ /dev/null
@@ -1,120 +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.core.metamodel.layoutxml.v1_0;
-
-import java.util.Map;
-
-import javax.xml.bind.Marshaller;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import org.apache.isis.applib.layout.members.v1.ActionLayoutData;
-import org.apache.isis.applib.layout.members.v1.CollectionLayoutData;
-import org.apache.isis.applib.layout.fixedcols.FCColumn;
-import org.apache.isis.applib.layout.fixedcols.FCPage;
-import org.apache.isis.applib.layout.members.v1.PropertyLayoutData;
-import org.apache.isis.applib.layout.members.v1.FieldSet;
-import org.apache.isis.applib.layout.fixedcols.FCTab;
-import org.apache.isis.applib.layout.fixedcols.FCTabGroup;
-import org.apache.isis.applib.services.jaxb.JaxbService;
-import org.apache.isis.core.metamodel.services.layout.provider.PageNormalizerServiceDefault;
-
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class FCPageTest {
-
-    private JaxbService jaxbService;
-
-    @Before
-    public void setUp() throws Exception {
-        jaxbService = new JaxbService.Simple();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-
-    }
-
-    @Test
-    public void xxx() throws Exception {
-
-        final FCPage fcPage = new FCPage();
-
-        fcPage.setTabGroups(Lists.<FCTabGroup>newArrayList());
-        fcPage.getTabGroups().add(new FCTabGroup());
-        FCTabGroup tabGroup = fcPage.getTabGroups().get(0);
-        FCTab FCTab = tabGroup.getTabs().get(0);
-        FCTab.setName("Common");
-        FCColumn left = FCTab.getLeft();
-
-        FieldSet leftPropGroup = new FieldSet();
-        left.setFieldSets(Lists.<FieldSet>newArrayList());
-        left.getFieldSets().add(leftPropGroup);
-        leftPropGroup.setName("General");
-
-        CollectionLayoutData similarToColl = new CollectionLayoutData();
-        left.setCollections(Lists.<CollectionLayoutData>newArrayList());
-        left.getCollections().add(similarToColl);
-        similarToColl.setId("similarTo");
-
-        left.getFieldSets().add(new FieldSet("General"));
-        PropertyLayoutData namePropertyLayoutData = new PropertyLayoutData("name");
-        left.getFieldSets().get(0).getProperties().add(namePropertyLayoutData);
-
-        ActionLayoutData updateNameActionLayoutData = new ActionLayoutData();
-        updateNameActionLayoutData.setId("updateName");
-        namePropertyLayoutData.setActions(Lists.<ActionLayoutData>newArrayList());
-        namePropertyLayoutData.getActions().add(updateNameActionLayoutData);
-
-        ActionLayoutData deleteActionLayoutData = new ActionLayoutData();
-        deleteActionLayoutData.setId("delete");
-        fcPage.setActions(Lists.<ActionLayoutData>newArrayList());
-        fcPage.getActions().add(deleteActionLayoutData);
-
-        final String schemaLocations = new PageNormalizerServiceDefault().schemaLocationsFor(fcPage);
-        String xml = jaxbService.toXml(fcPage,
-                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
-        System.out.println(xml);
-
-        FCPage FCPageRoundtripped = jaxbService.fromXml(FCPage.class, xml);
-        String xmlRoundtripped = jaxbService.toXml(FCPageRoundtripped,
-                ImmutableMap.<String,Object>of(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
-        assertThat(xml, is(equalTo(xmlRoundtripped)));
-
-
-        System.out.println("==========");
-
-        dumpXsd(fcPage);
-    }
-
-    protected void dumpXsd(final FCPage FCPage) {
-        Map<String, String> schemas = jaxbService.toXsd(FCPage, JaxbService.IsisSchemas.INCLUDE);
-        for (Map.Entry<String, String> entry : schemas.entrySet()) {
-            System.out.println(entry.getKey() + ":");
-            System.out.println(entry.getValue());
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/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 6f39c53..d27f624 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
@@ -31,7 +31,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
-import org.apache.isis.applib.layout.members.v1.CollectionLayoutData;
+import org.apache.isis.applib.layout.common.CollectionLayoutData;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.commons.lang.Closure;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/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 d54f13b..debcd80 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.members.v1.CollectionLayoutData;
+import org.apache.isis.applib.layout.common.CollectionLayoutData;
 import org.apache.isis.applib.layout.fixedcols.FCColumn;
 import org.apache.isis.applib.layout.fixedcols.FCColumn.Hint;
-import org.apache.isis.applib.layout.members.v1.FieldSet;
+import org.apache.isis.applib.layout.common.FieldSet;
 import org.apache.isis.applib.layout.fixedcols.FCTabGroup;
 import org.apache.isis.applib.layout.fixedcols.FCTab;
 import org.apache.isis.applib.services.memento.MementoService.Memento;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityPanelFactory.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityPanelFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityPanelFactory.java
index 0430f42..c187f2a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityPanelFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityPanelFactory.java
@@ -23,7 +23,7 @@ import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.applib.layout.fixedcols.FCPage;
-import org.apache.isis.applib.layout.members.v1.Page;
+import org.apache.isis.applib.layout.common.Page;
 import org.apache.isis.core.metamodel.facets.object.layoutmetadata.PageFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/PropUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/PropUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/PropUtil.java
index 6e390ac..f846e26 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/PropUtil.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/PropUtil.java
@@ -27,7 +27,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.fixedcols.FCColumn;
-import org.apache.isis.applib.layout.members.v1.FieldSet;
+import org.apache.isis.applib.layout.common.FieldSet;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/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 d7f8240..5bd57d0 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
@@ -31,7 +31,7 @@ import org.apache.wicket.markup.repeater.RepeatingView;
 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.members.v1.CollectionLayoutData;
+import org.apache.isis.applib.layout.common.CollectionLayoutData;
 import org.apache.isis.applib.layout.fixedcols.FCColumn;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/column/EntityColumn.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/column/EntityColumn.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/column/EntityColumn.java
index 4cda729..66bc4c6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/column/EntityColumn.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/column/EntityColumn.java
@@ -32,8 +32,8 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.repeater.RepeatingView;
 
 import org.apache.isis.applib.layout.fixedcols.FCColumn;
-import org.apache.isis.applib.layout.members.v1.FieldSet;
-import org.apache.isis.applib.layout.members.v1.PropertyLayoutData;
+import org.apache.isis.applib.layout.common.FieldSet;
+import org.apache.isis.applib.layout.common.PropertyLayoutData;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/propgroup/PropertyGroup.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/propgroup/PropertyGroup.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/propgroup/PropertyGroup.java
index e595806..6a13547 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/propgroup/PropertyGroup.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/propgroup/PropertyGroup.java
@@ -27,8 +27,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.members.v1.FieldSet;
-import org.apache.isis.applib.layout.members.v1.PropertyLayoutData;
+import org.apache.isis.applib.layout.common.FieldSet;
+import org.apache.isis.applib.layout.common.PropertyLayoutData;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 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/65f7d320/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index dd192d1..235b356 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -749,3 +749,7 @@ tr.headers th form input {
 .tabGroups > .row {
     padding-bottom: 10px;
 }
+
+.entityPage .middleColumn .tabbable {
+    padding-bottom: 10px;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 563434a..45c42d7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -29,7 +29,7 @@ import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.string.Strings;
 
-import org.apache.isis.applib.layout.members.v1.Page;
+import org.apache.isis.applib.layout.common.Page;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout-BS3.xml
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout-BS3.xml b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout-BS3.xml
new file mode 100644
index 0000000..7bc7d20
--- /dev/null
+++ b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObject.layout-BS3.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<bs3:page xsi:schemaLocation="http://isis.apache.org/schema/applib/layout/common http://isis.apache.org/schema/applib/layout/common/common.xsd http://isis.apache.org/schema/applib/layout/bootstrap3 http://isis.apache.org/schema/applib/layout/bootstrap3/bootstrap3.xsd" xmlns:common="http://isis.apache.org/schema/applib/layout/common" xmlns:bs3="http://isis.apache.org/schema/applib/layout/bootstrap3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+    <bs3:row>
+        <bs3:col span="12">
+            <common:domainObject/>
+            <common:action id="delete"/>
+        </bs3:col>
+    </bs3:row>
+
+    <bs3:row>
+        <bs3:col span="12">
+            <bs3:tabGroup>
+                <bs3:tab name="Metadata">
+                    <bs3:row>
+                        <bs3:col span="7">
+                            <common:fieldSet name="General">
+                                <common:action id="downloadJdoMetadata" position="PANEL"/>
+                                <common:action id="downloadLayoutXml" position="PANEL_DROPDOWN"/>
+                                <common:property id="name" labelPosition="TOP">
+                                    <common:action id="updateName">
+                                        <common:describedAs>This allows the name to be updated</common:describedAs>
+                                    </common:action>
+                                </common:property>
+                            </common:fieldSet>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
+            <bs3:tabGroup>
+                <bs3:tab name="SimilarTo">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <common:collection id="similarTo" defaultView="table"/>
+                            <common:collection id="others" defaultView="hide"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+            </bs3:tabGroup>
+        </bs3:col>
+    </bs3:row>
+</bs3:page>

http://git-wip-us.apache.org/repos/asf/isis/blob/65f7d320/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 4284f73..9e6d5ac 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
@@ -1,38 +1,36 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<page xsi:schemaLocation="http://isis.apache.org/schema/applib/layout/members/v1 http://isis.apache.org/schema/applib/layout/members/v1/members.xsd http://isis.apache.org/schema/applib/layout/fixedcols http://isis.apache.org/schema/applib/layout/fixedcols/fixedcols.xsd" xmlns="http://isis.apache.org/schema/applib/layout/fixedcols" xmlns:ns2="http://isis.apache.org/schema/applib/layout/members/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<page xsi:schemaLocation="http://isis.apache.org/schema/applib/layout/common http://isis.apache.org/schema/applib/layout/common/common.xsd http://isis.apache.org/schema/applib/layout/fixedcols http://isis.apache.org/schema/applib/layout/fixedcols/fixedcols.xsd" xmlns="http://isis.apache.org/schema/applib/layout/fixedcols" xmlns:c="http://isis.apache.org/schema/applib/layout/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
-    <action id="delete"/>
 
     <left span="0">
     </left>
     <tabGroup>
-        <tab name="Metadata">
-            <left span="12">
-                <fieldSet name="Foo">
-                    <ns2:property id="versionSequence"/>
-                </fieldSet>
+        <tab name="Properties">
+            <left span="8">
+                <c:fieldSet name="General">
+                    <c:action id="delete"/>
+                    <c:property id="name" labelPosition="TOP">
+                        <c:action id="updateName">
+                            <c:describedAs>This allows the name to be updated</c:describedAs>
+                        </c:action>
+                    </c:property>
+                </c:fieldSet>
             </left>
+            <middle span="4">
+                <c:fieldSet name="Foo">
+                    <c:action id="downloadJdoMetadata" position="PANEL"/>
+                    <c:action id="downloadLayoutXml" position="PANEL"/>
+                    <c:property id="versionSequence"/>
+                </c:fieldSet>
+            </middle>
         </tab>
-        <tab name="General">
-            <left span="12">
-                <fieldSet name="General">
-                    <ns2:action id="downloadJdoMetadata" position="PANEL"/>
-                    <ns2:action id="downloadLayoutXml" position="PANEL_DROPDOWN"/>
-                    <ns2:property id="name" labelPosition="TOP">
-                        <ns2:action id="updateName">
-                            <ns2:describedAs>This allows the name to be updated</ns2:describedAs>
-                        </ns2:action>
-                    </ns2:property>
-                </fieldSet>
-            </left>
-        </tab>
-    </tabGroup>
-    <tabGroup>
-        <tab name="SimilarTo">
-            <left span="12">
-                <collection id="similarTo" defaultView="table"/>
-                <collection id="others" defaultView="hide"/>
+        <tab name="Collections">
+            <left span="6">
+                <c:collection id="similarTo" defaultView="table"/>
             </left>
+            <right span="6">
+                <c:collection id="others" defaultView="table"/>
+            </right>
         </tab>
     </tabGroup>
 </page>
\ No newline at end of file