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 2013/07/25 00:01:01 UTC

git commit: ISIS-480: single edit form for all properties (even if multi-column)

Updated Branches:
  refs/heads/master 1b8f71a52 -> b83dba4b3


ISIS-480: single edit form for all properties (even if multi-column)


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

Branch: refs/heads/master
Commit: b83dba4b3c4b97791d5357ed00ce5cd51ae75a8e
Parents: 1b8f71a
Author: Dan Haywood <da...@apache.org>
Authored: Wed Jul 24 22:52:54 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Jul 24 22:52:54 2013 +0100

----------------------------------------------------------------------
 .../entity/combined/EntityCombinedPanel.html    |  6 +-
 .../entity/combined/EntityCombinedPanel.java    | 50 ++-----------
 .../entity/properties/EntityPropertiesForm.java | 78 +++++++++++++++++---
 .../properties/EntityPropertiesPanel.html       | 73 ++++++++++++------
 .../metamodel/spec/ObjectSpecifications.java    |  8 ++
 .../src/main/java/dom/todo/ToDoItem.layout.json |  4 +-
 6 files changed, 132 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/b83dba4b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
index ca3e476..2609608 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
@@ -24,11 +24,9 @@
         <div class="row-fluid">
     		<div wicket:id="entitySummary" />
         </div>
+		<div wicket:id="entityProperties"/>
         <div class="row-fluid">
-			<div wicket:id="entityPropertiesLeft"/>
-            <div wicket:id="entityPropertiesMiddle"/>
-            <div wicket:id="entityPropertiesRight"/>
-			<div wicket:id="entityCollections"/>
+            <div TODOwicket:id="entityCollectionsOverflow"/>
         </div>
 	</div>
 </wicket:panel>

http://git-wip-us.apache.org/repos/asf/isis/blob/b83dba4b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
index 46bbfeb..ae6767f 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
@@ -19,12 +19,7 @@
 
 package org.apache.isis.viewer.wicket.ui.components.entity.combined;
 
-import org.apache.wicket.Component;
-
-import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
-import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
@@ -37,11 +32,10 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 public class EntityCombinedPanel extends PanelAbstract<EntityModel> {
 
     private static final long serialVersionUID = 1L;
-    
-    private static final String ID_ENTITY_PROPERTIES_MIDDLE = "entityPropertiesMiddle";
-    private static final String ID_ENTITY_PROPERTIES_LEFT = "entityPropertiesLeft";
-    private static final String ID_ENTITY_PROPERTIES_RIGHT = "entityPropertiesRight";
 
+    private static final String ID_ENTITY_PROPERTIES = "entityProperties";
+
+    
     public EntityCombinedPanel(final String id, final EntityModel entityModel) {
         super(id, entityModel);
         buildGui();
@@ -54,44 +48,10 @@ public class EntityCombinedPanel extends PanelAbstract<EntityModel> {
             this.add(new CssClassAppender(facet.value()));
         }
 
-        final MemberGroupLayoutFacet mglFacet = model.getObject().getSpecification().getFacet(MemberGroupLayoutFacet.class);
-        final ColumnSpans columnSpans = mglFacet.getColumnSpans();
-        
         addOrReplace(ComponentType.ENTITY_SUMMARY, model);
         
-        // left property column
-        model.setMemberGroupLayoutHint(MemberGroupLayoutHint.LEFT);
-        final Component leftColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, ID_ENTITY_PROPERTIES_LEFT, ComponentType.ENTITY_PROPERTIES, model);
-        addClassForSpan(leftColumn, columnSpans.getLeft());
-        
-        // middle property column
-        if(columnSpans.getMiddle() > 0) {
-            model.setMemberGroupLayoutHint(MemberGroupLayoutHint.MIDDLE);
-            final Component middleColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, ID_ENTITY_PROPERTIES_MIDDLE, ComponentType.ENTITY_PROPERTIES, model);
-            addClassForSpan(middleColumn, columnSpans.getMiddle());
-        } else {
-            permanentlyHide(ID_ENTITY_PROPERTIES_MIDDLE);
-        }
-        
-        // right property column
-        if(columnSpans.getRight() > 0) {
-            model.setMemberGroupLayoutHint(MemberGroupLayoutHint.RIGHT);
-            final Component rightColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, ID_ENTITY_PROPERTIES_RIGHT, ComponentType.ENTITY_PROPERTIES, model);
-            addClassForSpan(rightColumn, columnSpans.getRight());
-        } else {
-            permanentlyHide(ID_ENTITY_PROPERTIES_RIGHT);
-        }
-
-        // collections column
-        if(columnSpans.getCollections() > 0) {
-            final Component propertiesColumn = addOrReplace(ComponentType.ENTITY_COLLECTIONS, model);
-            addClassForSpan(propertiesColumn, columnSpans.getCollections());
-        } else {
-            permanentlyHide(ComponentType.ENTITY_COLLECTIONS.toString());
-        }
+        getComponentFactoryRegistry().addOrReplaceComponent(this, ID_ENTITY_PROPERTIES, ComponentType.ENTITY_PROPERTIES, model);
     }
 
-    private static void addClassForSpan(final Component component, final int numGridCols) {
-        component.add(new CssClassAppender("span"+numGridCols));
-    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/b83dba4b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index bdd4b6d..344fc79 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Session;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -37,6 +38,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.util.visit.IVisit;
 import org.apache.wicket.util.visit.IVisitor;
 
+import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.filter.Filters;
@@ -46,9 +48,11 @@ import org.apache.isis.core.commons.authentication.MessageBroker;
 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;
+import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecifications;
+import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociations;
@@ -65,6 +69,7 @@ import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
 import org.apache.isis.viewer.wicket.ui.panels.ButtonWithPreValidateHook;
 import org.apache.isis.viewer.wicket.ui.panels.FormAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Components;
+import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.viewer.wicket.ui.util.EvenOrOddCssClassAppenderFactory;
 
 class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
@@ -74,6 +79,10 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
     private static final String ID_MEMBER_GROUP = "memberGroup";
     private static final String ID_MEMBER_GROUP_NAME = "memberGroupName";
 
+    private static final String ID_LEFT_COLUMN = "leftColumn";
+    private static final String ID_MIDDLE_COLUMN = "middleColumn";
+    private static final String ID_RIGHT_COLUMN = "rightColumn";
+    
     private static final String ID_PROPERTIES = "properties";
     private static final String ID_PROPERTY = "property";
     private static final String ID_EDIT_BUTTON = "edit";
@@ -102,16 +111,54 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
     }
 
     private void buildGui() {
-        boolean added = addPropertiesAndOrCollections();
-        addButtons();
-        addFeedbackGui();
+
+        final EntityModel entityModel = (EntityModel) getModel();
+        final ColumnSpans columnSpans = entityModel.getObject().getSpecification().getFacet(MemberGroupLayoutFacet.class).getColumnSpans();
+
+        // left column
+        MarkupContainer leftColumn = new WebMarkupContainer(ID_LEFT_COLUMN);
+        add(leftColumn);
+        
+        boolean added = addPropertiesInColumn(leftColumn, MemberGroupLayoutHint.LEFT, columnSpans);
+        addButtons(leftColumn);
+        addFeedbackGui(leftColumn);
         if(!added) {
             // a bit hacky...
             Components.permanentlyHide(this, editButton.getId(), okButton.getId(), cancelButton.getId(), ID_FEEDBACK);
         }
+        
+        // middle column
+        if(columnSpans.getMiddle() > 0) {
+            MarkupContainer middleColumn = new WebMarkupContainer(ID_MIDDLE_COLUMN);
+            add(middleColumn);
+            addPropertiesInColumn(middleColumn, MemberGroupLayoutHint.MIDDLE, columnSpans);
+        } else {
+            Components.permanentlyHide(this, ID_MIDDLE_COLUMN);
+        }
+
+        // right column
+        if(columnSpans.getRight() > 0) {
+            MarkupContainer rightColumn = new WebMarkupContainer(ID_RIGHT_COLUMN);
+            add(rightColumn);
+            addPropertiesInColumn(rightColumn, MemberGroupLayoutHint.RIGHT, columnSpans);
+        } else {
+            Components.permanentlyHide(this, ID_RIGHT_COLUMN);
+        }
+        
+        // TODO: figure out overflow logic....
+        // collections column
+        if(columnSpans.getCollections() > 0) {
+            final Component collectionsColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ENTITY_COLLECTIONS, entityModel);
+            addClassForSpan(collectionsColumn, columnSpans.getCollections());
+        } else {
+            Components.permanentlyHide(this, ComponentType.ENTITY_COLLECTIONS.toString());
+        }
+
     }
 
-    private boolean addPropertiesAndOrCollections() {
+    private boolean addPropertiesInColumn(MarkupContainer markupContainer, MemberGroupLayoutHint hint, ColumnSpans columnSpans) {
+        final int span = hint.from(columnSpans);
+        
         final EntityModel entityModel = (EntityModel) getModel();
         final ObjectAdapter adapter = entityModel.getObject();
         final ObjectSpecification objSpec = adapter.getSpecification();
@@ -119,10 +166,11 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
         final List<ObjectAssociation> associations = visibleProperties(adapter, objSpec, Where.OBJECT_FORMS);
 
         final RepeatingView memberGroupRv = new RepeatingView(ID_MEMBER_GROUP);
-        add(memberGroupRv);
+        markupContainer.add(memberGroupRv);
 
         Map<String, List<ObjectAssociation>> associationsByGroup = ObjectAssociations.groupByMemberOrderName(associations);
-        final List<String> groupNames = ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), entityModel.getMemberGroupLayoutHint());
+        
+        final List<String> groupNames = ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), hint);
         
         for(String groupName: groupNames) {
             final List<ObjectAssociation> associationsInGroup = associationsByGroup.get(groupName);
@@ -147,6 +195,8 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
                 addPropertyToForm(entityModel, association, propertyRvContainer);
             }
         }
+        
+        addClassForSpan(markupContainer, span);
         return !groupNames.isEmpty();
     }
 
@@ -169,7 +219,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
         return Filters.and(ObjectAssociationFilters.PROPERTIES, ObjectAssociationFilters.dynamicallyVisible(getAuthenticationSession(), adapter, where));
     }
 
-    private void addButtons() {
+    private void addButtons(MarkupContainer markupContainer) {
         
         editButton = new AjaxButton(ID_EDIT_BUTTON, Model.of("Edit")) {
             private static final long serialVersionUID = 1L;
@@ -200,7 +250,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
             }
             
         };
-        add(editButton);
+        markupContainer.add(editButton);
 
         
         okButton = new ButtonWithPreValidateHook(ID_OK_BUTTON, Model.of("OK")) {
@@ -298,7 +348,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
             }
 
         };
-        add(okButton);
+        markupContainer.add(okButton);
 
         cancelButton = new AjaxButton(ID_CANCEL_BUTTON, Model.of("Cancel")) {
             private static final long serialVersionUID = 1L;
@@ -349,7 +399,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
             }
         };
 
-        add(cancelButton);
+        markupContainer.add(cancelButton);
 
         okButton.setOutputMarkupPlaceholderTag(true);
         editButton.setOutputMarkupPlaceholderTag(true);
@@ -437,10 +487,10 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
         requestRepaintPanel(target);
     }
 
-    private void addFeedbackGui() {
+    private void addFeedbackGui(MarkupContainer markupContainer) {
         feedback = new ComponentFeedbackPanel(ID_FEEDBACK, this);
         feedback.setOutputMarkupPlaceholderTag(true);
-        addOrReplace(feedback);
+        markupContainer.addOrReplace(feedback);
         feedback.setEscapeModelStrings(false);
 
         final ObjectAdapter adapter = getEntityModel().getObject();
@@ -450,6 +500,10 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
     }
 
     
+    private static void addClassForSpan(final Component component, final int numGridCols) {
+        component.add(new CssClassAppender("span"+numGridCols));
+    }
+
     ///////////////////////////////////////////////////////
     // Dependencies (from context)
     ///////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/b83dba4b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
index e988bae..0f65862 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html
@@ -21,32 +21,57 @@
 	<body>
 		<wicket:panel>
 			<div class="entityPropertiesPanel entityPropertiesComponentType">
-			    <form wicket:id="entityProperties" class="inputForm">
-			    	<div class="inputFormTable properties">
-		    	    	<fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer">
-		    	    		<legend wicket:id="memberGroupName">[group name]</legend>
-					    	<div wicket:id="properties">
-				              <div wicket:id="property" class="property">[property]</div>
-					    	</div>
-				    	</fieldset>
-			    	</div>
-				    <div class="feedbackPanel">
-				        <span wicket:id="feedback"/>
-				    </div>
-				    <div class="buttons">
-				    	<input type="submit" class="edit" wicket:id="edit"/>
-				    	<input type="submit" class="ok" wicket:id="ok"/>
-				    	<input type="submit" class="cancel" wicket:id="cancel"/>
-
-                        <div id="veil" style="position:fixed;"> 
-                            <div class="imgHolder">
-                                <wicket:link>
-                                    <img src="/images/spinning-icon.gif"/>
-                                </wicket:link>
+                <form wicket:id="entityProperties" class="inputForm">
+                    <div class="row-fluid">
+                        <div wicket:id="leftColumn">
+            		    	<div class="inputFormTable properties">
+            	    	    	<fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer">
+            	    	    		<legend wicket:id="memberGroupName">[group name]</legend>
+            				    	<div wicket:id="properties">
+            			              <div wicket:id="property" class="property">[property]</div>
+            				    	</div>
+            			    	</fieldset>
+            		    	</div>
+            			    <div class="feedbackPanel">
+            			        <span wicket:id="feedback"/>
+            			    </div>
+            			    <div class="buttons">
+            			    	<input type="submit" class="edit" wicket:id="edit"/>
+            			    	<input type="submit" class="ok" wicket:id="ok"/>
+            			    	<input type="submit" class="cancel" wicket:id="cancel"/>
+            
+                                <div id="veil" style="position:fixed;"> 
+                                    <div class="imgHolder">
+                                        <wicket:link>
+                                            <img src="/images/spinning-icon.gif"/>
+                                        </wicket:link>
+                                    </div>
+                                </div>
+            			    </div>
+                        </div>
+                        <div wicket:id="middleColumn">
+                            <div class="inputFormTable properties">
+                                <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer">
+                                    <legend wicket:id="memberGroupName">[group name]</legend>
+                                    <div wicket:id="properties">
+                                      <div wicket:id="property" class="property">[property]</div>
+                                    </div>
+                                </fieldset>
+                            </div>
+                        </div>
+                        <div wicket:id="rightColumn">
+                            <div class="inputFormTable properties">
+                                <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer">
+                                    <legend wicket:id="memberGroupName">[group name]</legend>
+                                    <div wicket:id="properties">
+                                      <div wicket:id="property" class="property">[property]</div>
+                                    </div>
+                                </fieldset>
                             </div>
                         </div>
-				    </div>
-				</form>
+                        <div wicket:id="entityCollections"/>
+                    </div>
+                </form>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/b83dba4b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
index 52cb53d..6714644 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecifications.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import com.google.common.collect.Lists;
 
+import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
 import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
 
 
@@ -37,6 +38,13 @@ public final class ObjectSpecifications {
         LEFT,
         MIDDLE,
         RIGHT;
+
+        public int from(ColumnSpans columnSpans) {
+            if(this == LEFT) return columnSpans.getLeft();
+            if(this == MIDDLE) return columnSpans.getMiddle();
+            if(this == LEFT) return columnSpans.getRight();
+            return 0;
+        }
     }
 
     public static List<String> orderByMemberGroups(ObjectSpecification objSpec, Set<String> groupNamesToOrder, MemberGroupLayoutHint memberGroupLayoutHint) {

http://git-wip-us.apache.org/repos/asf/isis/blob/b83dba4b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
index 0ec3d12..d12e577 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.layout.json
@@ -39,7 +39,7 @@
         }
     },
     {
-        span: 4,
+        span: 3,
         memberGroups: {
             Detail: {
                 members: {
@@ -59,7 +59,7 @@
         span: 0
     },
     {
-        span: 5,
+        span: 6,
         collections: {
             dependencies: {
                 actions: {