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: {