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 15:41:14 UTC
[50/50] [abbrv] isis git commit: ISIS-993: started to add tab
component
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 <da...@haywood-associates.co.uk>
Authored: Thu Jan 7 08:20:40 2016 +0000
Committer: Dan Haywood <da...@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><actions></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><actions></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><actions></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><actions></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 <div> 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>