ISIS-993: started to add tab component

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

Branch: refs/heads/ISIS-993
Commit: 0f3d01fda549b310f28a679af714bac95bbf6c74
Parents: 4a8ff11
Author: Dan Haywood <d...@haywood-associates.co.uk>
Authored: Thu Jan 7 08:20:40 2016 +0000
Committer: Dan Haywood <d...@haywood-associates.co.uk>
Committed: Mon Jan 25 14:38:24 2016 +0000

----------------------------------------------------------------------
 .../schema/applib/layout/layout-1.0.xsd         | 10 ++--
 .../asciidoc/schema/applib/layout/layout.xsd    | 10 ++--
 .../isis/applib/layout/v1_0/Collection.java     |  3 ++
 .../isis/applib/layout/v1_0/DomainObject.java   |  8 +++
 .../isis/applib/layout/v1_0/Property.java       | 26 +++++----
 .../isis/applib/layout/v1_0/PropertyGroup.java  |  3 ++
 .../org/apache/isis/applib/layout/v1_0/Tab.java |  3 +-
 .../layoutxml/v1_0/DomainObjectTest.java        |  1 +
 .../EntityTabbedPanel$EntityTabPanel.html       | 29 ++++++++++
 .../entity/tabbed/EntityTabbedPanel.html        |  4 +-
 .../entity/tabbed/EntityTabbedPanel.java        | 56 ++++++++++++++++++--
 .../dom/simple/SimpleObject.layout.xml          | 16 +++++-
 12 files changed, 140 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout-1.0.xsd
----------------------------------------------------------------------
diff --git 
a/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout-1.0.xsd 
b/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout-1.0.xsd
index 63fa0a5..221c807 100644
--- a/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout-1.0.xsd
+++ b/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout-1.0.xsd
@@ -1,9 +1,9 @@
 <?xml version="1.0" standalone="yes"?>
 <xs:schema elementFormDefault="qualified" version="1.0" 
targetNamespace="http://isis.apache.org/schema/applib/layout"; 
xmlns:tns="http://isis.apache.org/schema/applib/layout"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
 
-  <xs:element name="domainObject" type="tns:domain-object"/>
+  <xs:element name="domainObject" type="tns:domainObject"/>
 
-  <xs:complexType name="domain-object">
+  <xs:complexType name="domainObject">
     <xs:sequence>
       <xs:element name="actions">
         <xs:complexType>
@@ -45,11 +45,11 @@
 
   <xs:complexType name="tab">
     <xs:sequence>
-      <xs:element name="name" type="xs:string" minOccurs="0"/>
       <xs:element name="left" type="tns:column"/>
       <xs:element name="middle" type="tns:column" minOccurs="0"/>
       <xs:element name="right" type="tns:column" minOccurs="0"/>
     </xs:sequence>
+    <xs:attribute name="name" type="xs:string" use="required"/>
   </xs:complexType>
 
   <xs:complexType name="column">
@@ -78,10 +78,10 @@
 
   <xs:complexType name="property">
     <xs:sequence>
-      <xs:element name="actions" minOccurs="0">
+      <xs:element name="actions">
         <xs:complexType>
           <xs:sequence>
-            <xs:element name="action" type="tns:action" maxOccurs="unbounded"/>
+            <xs:element name="action" type="tns:action" minOccurs="0" 
maxOccurs="unbounded"/>
           </xs:sequence>
         </xs:complexType>
       </xs:element>

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd
----------------------------------------------------------------------
diff --git 
a/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd 
b/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd
index 63fa0a5..221c807 100644
--- a/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd
+++ b/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd
@@ -1,9 +1,9 @@
 <?xml version="1.0" standalone="yes"?>
 <xs:schema elementFormDefault="qualified" version="1.0" 
targetNamespace="http://isis.apache.org/schema/applib/layout"; 
xmlns:tns="http://isis.apache.org/schema/applib/layout"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
 
-  <xs:element name="domainObject" type="tns:domain-object"/>
+  <xs:element name="domainObject" type="tns:domainObject"/>
 
-  <xs:complexType name="domain-object">
+  <xs:complexType name="domainObject">
     <xs:sequence>
       <xs:element name="actions">
         <xs:complexType>
@@ -45,11 +45,11 @@
 
   <xs:complexType name="tab">
     <xs:sequence>
-      <xs:element name="name" type="xs:string" minOccurs="0"/>
       <xs:element name="left" type="tns:column"/>
       <xs:element name="middle" type="tns:column" minOccurs="0"/>
       <xs:element name="right" type="tns:column" minOccurs="0"/>
     </xs:sequence>
+    <xs:attribute name="name" type="xs:string" use="required"/>
   </xs:complexType>
 
   <xs:complexType name="column">
@@ -78,10 +78,10 @@
 
   <xs:complexType name="property">
     <xs:sequence>
-      <xs:element name="actions" minOccurs="0">
+      <xs:element name="actions">
         <xs:complexType>
           <xs:sequence>
-            <xs:element name="action" type="tns:action" maxOccurs="unbounded"/>
+            <xs:element name="action" type="tns:action" minOccurs="0" 
maxOccurs="unbounded"/>
           </xs:sequence>
         </xs:complexType>
       </xs:element>

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
----------------------------------------------------------------------
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java 
b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
index 4c48c2a..cf2dc48 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Collection.java
@@ -61,6 +61,9 @@ public class Collection implements ColumnContent, 
ActionHolder {
 
     private List<Action> actions = Lists.newArrayList();
 
+    /**
+     * The <code>&lt;actions&gt;</code> element must be present but can be 
empty.
+     */
     @XmlElementWrapper(name = "actions", required = true)
     @XmlElement(name = "action", required = false)
     public List<Action> getActions() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
----------------------------------------------------------------------
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
 
b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
index c1868fc..c5fa00d 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/DomainObject.java
@@ -45,6 +45,10 @@ public class DomainObject implements Dto, ActionHolder {
 
     private List<Action> actions = Lists.newArrayList();
 
+
+    /**
+     * The <code>&lt;actions&gt;</code> element must be present but can be 
empty.
+     */
     @XmlElementWrapper(name = "actions", required = true)
     @XmlElement(name = "action", required = false)
     public List<Action> getActions() {
@@ -62,6 +66,10 @@ public class DomainObject implements Dto, ActionHolder {
     }};
 
     // no wrapper
+
+    /**
+     * Must have at least one tab group; no wrapper.
+     */
     @XmlElement(name = "tabGroup", required = true)
     public List<TabGroup> getTabGroups() {
         return tabGroups;

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
----------------------------------------------------------------------
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java 
b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
index d3ee9b2..5345d06 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Property.java
@@ -58,6 +58,21 @@ public class Property implements ActionHolder {
     }
 
 
+    private List<Action> actions = Lists.newArrayList();
+
+    /**
+     * The <code>&lt;actions&gt;</code> element must be present but can be 
empty.
+     */
+    @XmlElementWrapper(required = true)
+    @XmlElement(name = "action", required = false)
+    public List<Action> getActions() {
+        return actions;
+    }
+
+    public void setActions(List<Action> actions) {
+        this.actions = actions;
+    }
+
     private PropertyLayout layout = new PropertyLayout();
 
     @XmlElement(required = true)
@@ -70,15 +85,4 @@ public class Property implements ActionHolder {
     }
 
 
-    private List<Action> actions = Lists.newArrayList();
-
-    @XmlElementWrapper(required = false)
-    @XmlElement(name = "action", required = true)
-    public List<Action> getActions() {
-        return actions;
-    }
-
-    public void setActions(List<Action> actions) {
-        this.actions = actions;
-    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/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
index 9d883fa..e7b169f 100644
--- 
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
@@ -64,6 +64,9 @@ public class PropertyGroup implements ColumnContent, 
ActionHolder {
 
     private List<Action> actions = Lists.newArrayList();
 
+    /**
+     * The <code>&lt;actions&gt;</code> element must be present but can be 
empty.
+     */
     @XmlElementWrapper(required = true)
     @XmlElement(name = "action", required = false)
     public List<Action> getActions() {

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/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
index 43ea13f..988d1e8 100644
--- 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
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.layout.v1_0;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
@@ -34,7 +35,7 @@ public class Tab {
 
     private String name;
 
-    @XmlElement(required = false)
+    @XmlAttribute(required = true)
     public String getName() {
         return name;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/DomainObjectTest.java
----------------------------------------------------------------------
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/DomainObjectTest.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/DomainObjectTest.java
index 26f361c..51269c5 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/DomainObjectTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/layoutxml/v1_0/DomainObjectTest.java
@@ -63,6 +63,7 @@ public class DomainObjectTest {
 
         TabGroup tabGroup = domainObject.getTabGroups().get(0);
         Tab tab = tabGroup.getTabs().get(0);
+        tab.setName("Common");
         Column left = tab.getLeft();
 
         PropertyGroup leftPropGroup = new PropertyGroup();

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel$EntityTabPanel.html
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel$EntityTabPanel.html
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel$EntityTabPanel.html
new file mode 100644
index 0000000..94582b1
--- /dev/null
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel$EntityTabPanel.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<html xmlns:wicket="http://wicket.apache.org";>
+<body>
+<wicket:panel>
+       <div class="tabPanel">
+        <div wicket:id="entityPropertiesAndCollections"></div>
+
+       </div>
+</wicket:panel>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.html
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.html
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.html
index 8165722..999a22e 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.html
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.html
@@ -22,7 +22,9 @@
 <wicket:panel>
        <div class="entityTabbed">
                <div wicket:id="entitySummary"></div>
-               <div wicket:id="entityPropertiesAndCollections"></div>
+
+        <div wicket:id="tabs">[tabbed panel will be here]</div>
+
        </div>
 </wicket:panel>
 </body>

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.java
index c1e37cd..c1c65ba 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabbed/EntityTabbedPanel.java
@@ -19,7 +19,18 @@
 
 package org.apache.isis.viewer.wicket.ui.components.entity.tabbed;
 
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+
 import org.apache.isis.applib.layout.v1_0.DomainObject;
+import org.apache.isis.applib.layout.v1_0.Tab;
+import org.apache.isis.applib.layout.v1_0.TabGroup;
 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.layoutxml.LayoutXmlFacet;
@@ -28,6 +39,8 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
+import 
de.agilecoders.wicket.core.markup.html.bootstrap.tabs.AjaxBootstrapTabbedPanel;
+
 /**
  * {@link PanelAbstract Panel} to represent an entity on a single page made up
  * of several &lt;div&gt; regions.
@@ -53,13 +66,48 @@ public class EntityTabbedPanel extends 
PanelAbstract<EntityModel> {
             CssClassAppender.appendCssClassTo(this, cssClass);
         }
 
-        LayoutXmlFacet layoutXmlFacet = 
model.getTypeOfSpecification().getFacet(LayoutXmlFacet.class);
-        // force metadata to be derived && synced
-        DomainObject currentlyUnused = layoutXmlFacet.getLayoutMetadata();
+        // forces metadata to be derived && synced
+        final LayoutXmlFacet layoutXmlFacet = 
model.getTypeOfSpecification().getFacet(LayoutXmlFacet.class);
+        final DomainObject domainObject = layoutXmlFacet.getLayoutMetadata();
+
 
         addOrReplace(ComponentType.ENTITY_SUMMARY, model);
 
-        getComponentFactoryRegistry().addOrReplaceComponent(this, 
ID_ENTITY_PROPERTIES_AND_COLLECTIONS, ComponentType.ENTITY_PROPERTIES, model);
+
+        List<TabGroup> tabGroups = domainObject.getTabGroups();
+        TabGroup tabGroup = tabGroups.get(0);
+
+        List<ITab> tabs = Lists.newArrayList();
+        List<Tab> tabList = tabGroup.getTabs();
+
+        for (Tab tab : tabList) {
+
+            tabs.add(new AbstractTab(Model.of(tab.getName())) {
+                private static final long serialVersionUID = 1L;
+
+                @Override
+                public Panel getPanel(String panelId) {
+                    return new EntityTabPanel(panelId, getModel());
+                }
+
+            });
+
+        }
+
+
+        addOrReplace(new AjaxBootstrapTabbedPanel("tabs", tabs));
+
+    }
+
+    private static class EntityTabPanel extends PanelAbstract {
+        private static final long serialVersionUID = 1L;
+
+        public EntityTabPanel(String id, final EntityModel model) {
+            super(id);
+            getComponentFactoryRegistry().addOrReplaceComponent(this, 
ID_ENTITY_PROPERTIES_AND_COLLECTIONS, ComponentType.ENTITY_PROPERTIES, model);
+
+        }
+
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/0f3d01fd/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 b479d1c..036b99d 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
@@ -4,15 +4,27 @@
         <action id="delete"/>
     </actions>
     <tabGroup>
-        <tab>
+        <tab name="Common">
             <left span="4">
                 <propertyGroup name="General">
                     <actions/>
                     <property id="name">
                         <actions>
                             <action id="updateName"/>
-                            <action id="downloadJdoMetadata"/>
                         </actions>
+                        <layout/>
+                    </property>
+                </propertyGroup>
+            </left>
+        </tab>
+        <tab name="Other">
+            <left span="4">
+                <propertyGroup name="Metadata">
+                    <actions>
+                        <action id="downloadJdoMetadata"/>
+                    </actions>
+                    <property id="versionSequence">
+                        <actions/>
                         <layout labelPosition="TOP" multiLine="5" 
cssClass="abcde"/>
                     </property>
                 </propertyGroup>

Reply via email to