ISIS-993: refactoring EntityPropertiesForm so can factor out a new component.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/01781b8c Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/01781b8c Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/01781b8c Branch: refs/heads/ISIS-993 Commit: 01781b8c1371f7245f5a38d9c5f55baa2c9f4396 Parents: a1ed890 Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Sat Jan 9 08:15:10 2016 +0000 Committer: Dan Haywood <d...@haywood-associates.co.uk> Committed: Mon Jan 25 14:38:24 2016 +0000 ---------------------------------------------------------------------- .../entity/properties/EntityColumnMembers.html | 46 +++++++++ .../entity/properties/EntityPropertiesForm.java | 98 +++++++++----------- .../properties/EntityPropertiesPanel.html | 96 ++++++++++--------- .../components/entity/properties/PropUtil.java | 68 ++++++++++++++ .../entity/tabgroups/EntityTabGroupsPanel.html | 4 +- 5 files changed, 211 insertions(+), 101 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/01781b8c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.html ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.html new file mode 100644 index 0000000..07ca0f3 --- /dev/null +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.html @@ -0,0 +1,46 @@ +<?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 wicket:id="columnMembers" class="columnMembers"> + <div class="inputFormTable properties"> + <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> + <div class="panel panel-default"> + <div class="panel-heading"> + <span wicket:id="memberGroupName" class="panel-title">[group name]</span> + <div class="pull-right additionalLinks"> + <div wicket:id="associatedActionLinksPanel"></div> + <div wicket:id="associatedActionLinksPanelDropDown"></div> + </div> + </div> + <div class="properties panel-body"> + <div wicket:id="properties"> + <div wicket:id="property" class="property">[property]</div> + </div> + </div> + </div> + </fieldset> + </div> + <div wicket:id="collections"></div> + </div> + </wicket:panel> + </body> +</html> http://git-wip-us.apache.org/repos/asf/isis/blob/01781b8c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java index 3f2771d..f0ba38d 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java @@ -176,8 +176,29 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements boolean addedProperties; if(columnSpans.getLeft() > 0) { - addedProperties = addPropertiesAndCollections( - leftColumn, MemberGroupLayoutHint.LEFT, entityModel, tabMetaDataIfAny, columnSpans); + final MemberGroupLayoutHint hint = MemberGroupLayoutHint.LEFT; + + final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? hint + .from(tabMetaDataIfAny) : null; + addPropertiesAndCollections(leftColumn, hint, entityModel, + columnSpans, columnMetaDataIfAny); + + final ObjectAdapter adapter = entityModel.getObject(); + final ObjectSpecification objSpec = adapter.getSpecification(); + + final Map<String, List<ObjectAssociation>> associationsByGroup = + PropUtil + .propertiesByMemberOrder(adapter); + + final List<String> groupNames = columnMetaDataIfAny != null + ? FluentIterable + .from(columnMetaDataIfAny.getPropertyGroups()) + .transform(PropertyGroup.Util.nameOf()) + .toList() + : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), + hint); + + addedProperties = !groupNames.isEmpty(); addButtons(leftColumn); addFeedbackGui(leftColumn); } else { @@ -195,8 +216,9 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements if(columnSpans.getMiddle() > 0) { MarkupContainer middleColumn = new WebMarkupContainer(ID_MIDDLE_COLUMN); add(middleColumn); - addPropertiesAndCollections( - middleColumn, MemberGroupLayoutHint.MIDDLE, entityModel, tabMetaDataIfAny, columnSpans); + final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? MemberGroupLayoutHint.MIDDLE + .from(tabMetaDataIfAny) : null; + addPropertiesAndCollections(middleColumn, MemberGroupLayoutHint.MIDDLE, entityModel, columnSpans, columnMetaDataIfAny); } else { Components.permanentlyHide(this, ID_MIDDLE_COLUMN); } @@ -205,8 +227,9 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements if(columnSpans.getRight() > 0) { MarkupContainer rightColumn = new WebMarkupContainer(ID_RIGHT_COLUMN); add(rightColumn); - addPropertiesAndCollections( - rightColumn, MemberGroupLayoutHint.RIGHT, entityModel, tabMetaDataIfAny, columnSpans); + final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? MemberGroupLayoutHint.RIGHT + .from(tabMetaDataIfAny) : null; + addPropertiesAndCollections(rightColumn, MemberGroupLayoutHint.RIGHT, entityModel, columnSpans, columnMetaDataIfAny); } else { Components.permanentlyHide(this, ID_RIGHT_COLUMN); } @@ -238,19 +261,16 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } } - private boolean addPropertiesAndCollections( + private void addPropertiesAndCollections( final MarkupContainer col, final MemberGroupLayoutHint hint, final EntityModel entityModel, - final Tab tabMetaDataIfAny, - final ColumnSpans columnSpans) { - final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? hint.from(tabMetaDataIfAny) : null; - final boolean addedProperties = addPropertiesInColumn(col, hint, entityModel, columnSpans, columnMetaDataIfAny); - addCollectionsIfRequired(col, hint, entityModel, tabMetaDataIfAny); - return addedProperties; + final ColumnSpans columnSpans, final Column columnMetaDataIfAny) { + addPropertiesInColumn(col, hint, entityModel, columnSpans, columnMetaDataIfAny); + addCollectionsIfRequired(col, entityModel, columnMetaDataIfAny); } - private boolean addPropertiesInColumn( + private void addPropertiesInColumn( final MarkupContainer markupContainer, final MemberGroupLayoutHint hint, final EntityModel entityModel, @@ -259,13 +279,8 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements final ObjectAdapter adapter = entityModel.getObject(); final ObjectSpecification objSpec = adapter.getSpecification(); - final List<ObjectAssociation> properties = visibleProperties(adapter); - - final RepeatingView memberGroupRv = new RepeatingView(ID_MEMBER_GROUP); - markupContainer.add(memberGroupRv); - - final Map<String, List<ObjectAssociation>> associationsByGroup = ObjectAssociation.Util.groupByMemberOrderName(properties); - + final Map<String, List<ObjectAssociation>> associationsByGroup = PropUtil + .propertiesByMemberOrder(adapter); final List<String> groupNames = columnMetaDataIfAny != null ? FluentIterable .from(columnMetaDataIfAny.getPropertyGroups()) @@ -273,6 +288,9 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements .toList() : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), hint); + final RepeatingView memberGroupRv = new RepeatingView(ID_MEMBER_GROUP); + markupContainer.add(memberGroupRv); + for(final String groupName: groupNames) { final List<ObjectAssociation> associationsInGroup = associationsByGroup.get(groupName); if(associationsInGroup==null) { @@ -311,19 +329,15 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } addClassForSpan(markupContainer, span); - - return !groupNames.isEmpty(); } private void addCollectionsIfRequired( final MarkupContainer column, - final MemberGroupLayoutHint hint, final EntityModel entityModel, - final Tab tabMetaDataIfAny) { - - if(tabMetaDataIfAny != null) { - final Column columnMetadata = hint.from(tabMetaDataIfAny); - final EntityModel modelWithMetadata = new EntityModel(entityModel.getPageParameters()).withColumnMetadata(columnMetadata); + final Column columnMetaDataIfAny) { + if(columnMetaDataIfAny != null) { + final EntityModel modelWithMetadata = new EntityModel(entityModel.getPageParameters()).withColumnMetadata( + columnMetaDataIfAny); getComponentFactoryRegistry() .addOrReplaceComponent(column, "collections", ComponentType.ENTITY_COLLECTIONS, modelWithMetadata); } else { @@ -352,30 +366,6 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } } - private List<ObjectAssociation> visibleProperties(final ObjectAdapter adapter) { - return visibleProperties(adapter, Filters.<ObjectAssociation>any()); - } - - private List<ObjectAssociation> visibleProperties( - final ObjectAdapter adapter, - final Filter<ObjectAssociation> filter) { - final ObjectSpecification objSpec = adapter.getSpecification(); - - return objSpec.getAssociations( - Contributed.INCLUDED, visiblePropertiesFilter(adapter, filter)); - } - - @SuppressWarnings("unchecked") - private static Filter<ObjectAssociation> visiblePropertiesFilter( - final ObjectAdapter adapter, - final Filter<ObjectAssociation> filter) { - return Filters.and( - ObjectAssociation.Filters.PROPERTIES, - ObjectAssociation.Filters.dynamicallyVisible( - adapter, InteractionInitiatedBy.USER, Where.OBJECT_FORMS), - filter); - } - @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); @@ -815,7 +805,7 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } - private static void addClassForSpan(final Component component, final int numGridCols) { + static void addClassForSpan(final Component component, final int numGridCols) { component.add(new CssClassAppender("col-xs-"+numGridCols)); } http://git-wip-us.apache.org/repos/asf/isis/blob/01781b8c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html index ad8872a..9b8a582 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.html @@ -24,25 +24,27 @@ <form wicket:id="entityProperties" class="inputForm" role="form"> <div class="row" style="padding-bottom: 20px"> <div wicket:id="leftColumn"> - <div class="inputFormTable properties"> - <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> - <div class="panel panel-default"> - <div class="panel-heading"> - <span wicket:id="memberGroupName" class="panel-title">[group name]</span> - <div class="pull-right additionalLinks"> - <div wicket:id="associatedActionLinksPanel"></div> - <div wicket:id="associatedActionLinksPanelDropDown"></div> + <div class="columnMembers"> + <div class="inputFormTable properties"> + <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> + <div class="panel panel-default"> + <div class="panel-heading"> + <span wicket:id="memberGroupName" class="panel-title">[group name]</span> + <div class="pull-right additionalLinks"> + <div wicket:id="associatedActionLinksPanel"></div> + <div wicket:id="associatedActionLinksPanelDropDown"></div> + </div> </div> - </div> - <div class="properties panel-body"> - <div wicket:id="properties"> - <div wicket:id="property" class="property">[property]</div> + <div class="properties panel-body"> + <div wicket:id="properties"> + <div wicket:id="property" class="property">[property]</div> + </div> </div> </div> - </div> - </fieldset> + </fieldset> + </div> + <div wicket:id="collections"></div> </div> - <div wicket:id="collections"></div> <div class="feedbackPanel"> <span wicket:id="feedback"></span> </div> @@ -53,46 +55,50 @@ </div> </div> <div wicket:id="middleColumn"> - <div class="inputFormTable properties"> - <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> - <div class="panel panel-default"> - <div class="panel-heading"> - <span wicket:id="memberGroupName" class="panel-title">[group name]</span> - <div class="pull-right additionalLinks"> - <div wicket:id="associatedActionLinksPanel"></div> - <div wicket:id="associatedActionLinksPanelDropDown"></div> + <div class="columnMembers"> + <div class="inputFormTable properties"> + <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> + <div class="panel panel-default"> + <div class="panel-heading"> + <span wicket:id="memberGroupName" class="panel-title">[group name]</span> + <div class="pull-right additionalLinks"> + <div wicket:id="associatedActionLinksPanel"></div> + <div wicket:id="associatedActionLinksPanelDropDown"></div> + </div> </div> - </div> - <div class="properties panel-body"> - <div wicket:id="properties"> - <div wicket:id="property" class="property">[property]</div> + <div class="properties panel-body"> + <div wicket:id="properties"> + <div wicket:id="property" class="property">[property]</div> + </div> </div> </div> - </div> - </fieldset> + </fieldset> + </div> + <div wicket:id="collections"></div> </div> - <div wicket:id="collections"></div> </div> <div wicket:id="rightColumn"> - <div class="inputFormTable properties"> - <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> - <div class="panel panel-default"> - <div class="panel-heading"> - <span wicket:id="memberGroupName" class="panel-title">[group name]</span> - <div class="pull-right additionalLinks"> - <div wicket:id="associatedActionLinksPanel"></div> - <div wicket:id="associatedActionLinksPanelDropDown"></div> + <div class="columnMembers"> + <div class="inputFormTable properties"> + <fieldset wicket:id="memberGroup" class="memberGroup myBlockContainer"> + <div class="panel panel-default"> + <div class="panel-heading"> + <span wicket:id="memberGroupName" class="panel-title">[group name]</span> + <div class="pull-right additionalLinks"> + <div wicket:id="associatedActionLinksPanel"></div> + <div wicket:id="associatedActionLinksPanelDropDown"></div> + </div> </div> - </div> - <div class="properties panel-body"> - <div wicket:id="properties"> - <div wicket:id="property" class="property">[property]</div> + <div class="properties panel-body"> + <div wicket:id="properties"> + <div wicket:id="property" class="property">[property]</div> + </div> </div> </div> - </div> - </fieldset> + </fieldset> + </div> + <div wicket:id="collections"></div> </div> - <div wicket:id="collections"></div> </div> <div wicket:id="entityCollections"></div> </div> http://git-wip-us.apache.org/repos/asf/isis/blob/01781b8c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java new file mode 100644 index 0000000..23a9a8d --- /dev/null +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/PropUtil.java @@ -0,0 +1,68 @@ +/* + * 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.viewer.wicket.ui.components.entity.properties; + +import java.util.List; +import java.util.Map; + +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.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy; +import org.apache.isis.core.metamodel.spec.ObjectSpecification; +import org.apache.isis.core.metamodel.spec.feature.Contributed; +import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; + +public final class PropUtil { + + private PropUtil() { + } + + static Map<String, List<ObjectAssociation>> propertiesByMemberOrder(final ObjectAdapter adapter) { + final List<ObjectAssociation> properties = visibleProperties(adapter); + return ObjectAssociation.Util.groupByMemberOrderName(properties); + } + + private static List<ObjectAssociation> visibleProperties(final ObjectAdapter adapter) { + return visibleProperties(adapter, Filters.<ObjectAssociation>any()); + } + + private static List<ObjectAssociation> visibleProperties( + final ObjectAdapter adapter, + final Filter<ObjectAssociation> filter) { + final ObjectSpecification objSpec = adapter.getSpecification(); + + return objSpec.getAssociations( + Contributed.INCLUDED, visiblePropertiesFilter(adapter, filter)); + } + + @SuppressWarnings("unchecked") + private static Filter<ObjectAssociation> visiblePropertiesFilter( + final ObjectAdapter adapter, + final Filter<ObjectAssociation> filter) { + return Filters.and( + ObjectAssociation.Filters.PROPERTIES, + ObjectAssociation.Filters.dynamicallyVisible( + adapter, InteractionInitiatedBy.USER, Where.OBJECT_FORMS), + filter); + } + + +} http://git-wip-us.apache.org/repos/asf/isis/blob/01781b8c/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.html ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.html index fded796..4e45e96 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.html +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.html @@ -25,8 +25,8 @@ <div wicket:id="tabGroups"> <div class="row"> - <div wicket:id="tabGroup" class="col-xs-8">[tabbed panel will be here]</div> - <div XXXXwicket:id="collections" class = "fixedColumn col-xs-4"> + <div wicket:id="tabGroup" class="col-xs-12">[tabbed panel will be here]</div> + <div XXXXwicket:id="entityColumnMembers" class = "fixedColumn col-xs-4"> </div> </div> </div>