ISIS-993: further refactoring, working towards factoring out EntityColumnMembers. However getting an exception when there are two tab groups (with the id/feedback... not sure why yet).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9bad36c9 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9bad36c9 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9bad36c9 Branch: refs/heads/ISIS-993 Commit: 9bad36c92dc61e3465c757c101a7f11d93256bf5 Parents: 01781b8 Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Sat Jan 9 09:07:21 2016 +0000 Committer: Dan Haywood <d...@haywood-associates.co.uk> Committed: Mon Jan 25 14:38:24 2016 +0000 ---------------------------------------------------------------------- .../apache/isis/applib/layout/v1_0/Column.java | 24 ++++ .../json/LayoutMetadataReaderFromJson.java | 10 +- .../metamodel/spec/ObjectSpecifications.java | 28 +--- .../viewer/wicket/model/models/EntityModel.java | 19 ++- .../entity/properties/EntityColumnMembers.java | 50 ++++++++ .../entity/properties/EntityPropertiesForm.java | 128 ++++++++++--------- .../components/entity/properties/PropUtil.java | 25 +++- .../dom/simple/SimpleObject.layout.xml | 10 +- 8 files changed, 194 insertions(+), 100 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java ---------------------------------------------------------------------- diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java index f208a7f..fc8ec6d 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java +++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/Column.java @@ -28,6 +28,8 @@ import javax.xml.bind.annotation.XmlType; import com.google.common.collect.Lists; +import org.apache.isis.applib.annotation.MemberGroupLayout; + @XmlType( propOrder = { "propertyGroups" @@ -101,5 +103,27 @@ public class Column implements Serializable { this.owner = owner; } + public enum Hint { + LEFT, + MIDDLE, + RIGHT; + + public int from(MemberGroupLayout.ColumnSpans columnSpans) { + if(this == LEFT) return columnSpans.getLeft(); + if(this == MIDDLE) return columnSpans.getMiddle(); + if(this == RIGHT) return columnSpans.getRight(); + throw new IllegalStateException(); + } + + public Column from(final Tab tab) { + if(tab == null) { + return null; + } + if(this == LEFT) return tab.getLeft(); + if(this == MIDDLE) return tab.getMiddle(); + if(this == RIGHT) return tab.getRight(); + throw new IllegalStateException(); + } + } } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java index 215c202..0a29c6f 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/json/LayoutMetadataReaderFromJson.java @@ -81,7 +81,7 @@ import org.apache.isis.core.metamodel.layoutmetadata.TypicalLengthFacetRepr; import org.apache.isis.core.metamodel.spec.ActionType; 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.applib.layout.v1_0.Column.Hint; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; @@ -462,13 +462,13 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader2 { ColumnRepr columnRepr; columnRepr = addColumnWithSpan(metadata, columnSpans.getLeft()); - updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.LEFT, columnRepr, actionIdsForAssociations); + updateColumnMemberGroups(objectSpec, Hint.LEFT, columnRepr, actionIdsForAssociations); columnRepr = addColumnWithSpan(metadata, columnSpans.getMiddle()); - updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.MIDDLE, columnRepr, actionIdsForAssociations); + updateColumnMemberGroups(objectSpec, Hint.MIDDLE, columnRepr, actionIdsForAssociations); columnRepr = addColumnWithSpan(metadata, columnSpans.getRight()); - updateColumnMemberGroups(objectSpec, MemberGroupLayoutHint.RIGHT, columnRepr, actionIdsForAssociations); + updateColumnMemberGroups(objectSpec, Hint.RIGHT, columnRepr, actionIdsForAssociations); columnRepr = addColumnWithSpan(metadata, columnSpans.getCollections()); updateCollectionColumnRepr(objectSpec, columnRepr, actionIdsForAssociations); @@ -479,7 +479,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader2 { return gson.toJson(metadata); } - private static void updateColumnMemberGroups(final ObjectSpecification objectSpec, final MemberGroupLayoutHint hint, final ColumnRepr columnRepr, final Set<String> actionIdsForAssociations) { + private static void updateColumnMemberGroups(final ObjectSpecification objectSpec, final Hint hint, final ColumnRepr columnRepr, final Set<String> actionIdsForAssociations) { final List<ObjectAssociation> objectAssociations = propertiesOf(objectSpec); final Map<String, List<ObjectAssociation>> associationsByGroup = ObjectAssociation.Util.groupByMemberOrderName(objectAssociations ); http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/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 2c24f0d..b184d35 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,9 +25,7 @@ import java.util.Set; import com.google.common.collect.Lists; -import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans; import org.apache.isis.applib.layout.v1_0.Column; -import org.apache.isis.applib.layout.v1_0.Tab; import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet; @@ -36,30 +34,10 @@ public final class ObjectSpecifications { private ObjectSpecifications() { } - public enum MemberGroupLayoutHint { - LEFT, - MIDDLE, - RIGHT; - - public int from(ColumnSpans columnSpans) { - if(this == LEFT) return columnSpans.getLeft(); - if(this == MIDDLE) return columnSpans.getMiddle(); - if(this == RIGHT) return columnSpans.getRight(); - throw new IllegalStateException(); - } - - public Column from(final Tab tab) { - if(this == LEFT) {return tab.getLeft();} - if(this == MIDDLE) return tab.getMiddle(); - if(this == RIGHT) return tab.getRight(); - throw new IllegalStateException(); - } - } - public static List<String> orderByMemberGroups( final ObjectSpecification objSpec, final Set<String> groupNamesToOrder, - final MemberGroupLayoutHint hint) { + final Column.Hint hint) { final MemberGroupLayoutFacet facet = objSpec.getFacet(MemberGroupLayoutFacet.class); final List<String> leftColumnGroupNames = Lists.newArrayList(groupNamesToOrder); @@ -69,10 +47,10 @@ public final class ObjectSpecifications { return leftColumnGroupNames; } - if(hint == MemberGroupLayoutHint.MIDDLE) { + if(hint == Column.Hint.MIDDLE) { return facet.getColumnSpans().getMiddle()>0? facet.getMiddle(): Collections.<String>emptyList(); } - if(hint == MemberGroupLayoutHint.RIGHT) { + if(hint == Column.Hint.RIGHT) { return facet.getColumnSpans().getRight()>0? facet.getRight(): Collections.<String>emptyList(); } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java index 53b6bd1..bebb67c 100644 --- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java +++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java @@ -44,7 +44,7 @@ import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolic import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet; import org.apache.isis.core.metamodel.spec.ObjectSpecId; import org.apache.isis.core.metamodel.spec.ObjectSpecification; -import org.apache.isis.core.metamodel.spec.ObjectSpecifications.MemberGroupLayoutHint; +import org.apache.isis.applib.layout.v1_0.Column.Hint; import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi; import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation; import org.apache.isis.core.runtime.services.memento.MementoServiceDefault; @@ -130,7 +130,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> { private Mode mode = Mode.VIEW; private RenderingHint renderingHint = RenderingHint.REGULAR; private final Map<PropertyMemento, ScalarModel> propertyScalarModels = Maps.newHashMap(); - private MemberGroupLayoutHint memberGroupLayoutHint; + private Hint hint; /** * Toggled by 'entityDetailsButton'. @@ -451,11 +451,11 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> { entityDetailsVisible = !entityDetailsVisible; } - public MemberGroupLayoutHint getMemberGroupLayoutHint() { - return memberGroupLayoutHint; + public Hint getHint() { + return hint; } - public void setMemberGroupLayoutHint(MemberGroupLayoutHint memberGroupLayoutHint) { - this.memberGroupLayoutHint = memberGroupLayoutHint; + public void setHint(Hint hint) { + this.hint = hint; } @@ -649,15 +649,20 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> { private Column columnMetadata; + private Column.Hint columnHint; - public EntityModel withColumnMetadata(final Column columnMetadata) { + public EntityModel withColumnMetadata(final Column columnMetadata, final Column.Hint columnHint) { this.columnMetadata = columnMetadata; + this.columnHint = columnHint; return this; } public Column getColumnMetadata() { return columnMetadata; } + public Column.Hint getColumnHint() { + return columnHint; + } // ////////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.java new file mode 100644 index 0000000..805a904 --- /dev/null +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityColumnMembers.java @@ -0,0 +1,50 @@ +/* + * 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 org.apache.wicket.Component; + +import org.apache.isis.core.metamodel.adapter.ObjectAdapter; +import org.apache.isis.viewer.wicket.model.models.EntityModel; +import org.apache.isis.viewer.wicket.ui.panels.FormAbstract; + +public class EntityColumnMembers extends FormAbstract<ObjectAdapter> { + + private static final long serialVersionUID = 1L; + + + private final Component owningPanel; + + public EntityColumnMembers( + final String id, + final EntityModel entityModel, + final Component owningPanel) { + + super(id, entityModel); + this.owningPanel = owningPanel; // for repainting + + buildGui(); + } + + private void buildGui() { + + final EntityModel entityModel = (EntityModel) getModel(); + + } +} http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/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 f0ba38d..1f8792a 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 @@ -64,7 +64,7 @@ import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayo 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.applib.layout.v1_0.Column.Hint; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAction; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; @@ -151,7 +151,6 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements private void buildGui() { final EntityModel entityModel = (EntityModel) getModel(); - final Tab tabMetaDataIfAny = entityModel.getTabMetadata(); final ColumnSpans columnSpans; @@ -169,71 +168,71 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } renderedFirstField = false; - + // left column + // (unlike middle and right columns, the left column is always added to hold the edit buttons and feedback) MarkupContainer leftColumn = new WebMarkupContainer(ID_LEFT_COLUMN); add(leftColumn); - - boolean addedProperties; - if(columnSpans.getLeft() > 0) { - 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); + if(columnSpans.getLeft() > 0) { - final List<String> groupNames = columnMetaDataIfAny != null - ? FluentIterable - .from(columnMetaDataIfAny.getPropertyGroups()) - .transform(PropertyGroup.Util.nameOf()) - .toList() - : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), - hint); + addPropertiesAndCollections(leftColumn, entityModel, tabMetaDataIfAny, Hint.LEFT); - addedProperties = !groupNames.isEmpty(); - addButtons(leftColumn); - addFeedbackGui(leftColumn); } else { Components.permanentlyHide(this, ID_LEFT_COLUMN); - addedProperties = false; } - if(!addedProperties) { - // a bit hacky... - Components.permanentlyHide(this, - ID_EDIT_BUTTON, ID_OK_BUTTON, ID_CANCEL_BUTTON, - ID_FEEDBACK); - } - + // middle column + MarkupContainer middleColumn; if(columnSpans.getMiddle() > 0) { - MarkupContainer middleColumn = new WebMarkupContainer(ID_MIDDLE_COLUMN); + middleColumn = new WebMarkupContainer(ID_MIDDLE_COLUMN); add(middleColumn); - final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? MemberGroupLayoutHint.MIDDLE - .from(tabMetaDataIfAny) : null; - addPropertiesAndCollections(middleColumn, MemberGroupLayoutHint.MIDDLE, entityModel, columnSpans, columnMetaDataIfAny); + + addPropertiesAndCollections(middleColumn, entityModel, tabMetaDataIfAny, Hint.MIDDLE); } else { + middleColumn = null; Components.permanentlyHide(this, ID_MIDDLE_COLUMN); } // right column + MarkupContainer rightColumn; if(columnSpans.getRight() > 0) { - MarkupContainer rightColumn = new WebMarkupContainer(ID_RIGHT_COLUMN); + rightColumn = new WebMarkupContainer(ID_RIGHT_COLUMN); add(rightColumn); - final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? MemberGroupLayoutHint.RIGHT - .from(tabMetaDataIfAny) : null; - addPropertiesAndCollections(rightColumn, MemberGroupLayoutHint.RIGHT, entityModel, columnSpans, columnMetaDataIfAny); + + addPropertiesAndCollections(rightColumn, entityModel, tabMetaDataIfAny, Hint.RIGHT); } else { + rightColumn = null; Components.permanentlyHide(this, ID_RIGHT_COLUMN); } + // column spans + if(columnSpans.getLeft() > 0) { + addClassForSpan(leftColumn, Hint.LEFT.from(columnSpans)); + } + if(columnSpans.getMiddle() > 0) { + addClassForSpan(middleColumn, Hint.MIDDLE.from(columnSpans)); + } + if(columnSpans.getRight() > 0) { + addClassForSpan(rightColumn, Hint.RIGHT.from(columnSpans)); + } + + // edit buttons and feedback + final Hint leftHint = Hint.LEFT; + final Column leftColumnMetaDataIfAny = leftHint.from(tabMetaDataIfAny); + final List<String> groupNames = PropUtil.propertyGroupNames(entityModel, leftHint, leftColumnMetaDataIfAny); + final boolean hasProperties = !groupNames.isEmpty(); + if (hasProperties) { + addButtons(leftColumn); + addFeedbackGui(leftColumn); + + } else { + Components.permanentlyHide(this, + ID_EDIT_BUTTON, ID_OK_BUTTON, ID_CANCEL_BUTTON, + ID_FEEDBACK); + } + + // collections (only if not being added to a tab) if(tabMetaDataIfAny == null && columnSpans.getCollections() > 0) { final String idCollectionsToShow; @@ -262,20 +261,31 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } private void addPropertiesAndCollections( - final MarkupContainer col, - final MemberGroupLayoutHint hint, + final MarkupContainer middleColumn, final EntityModel entityModel, - final ColumnSpans columnSpans, final Column columnMetaDataIfAny) { - addPropertiesInColumn(col, hint, entityModel, columnSpans, columnMetaDataIfAny); - addCollectionsIfRequired(col, entityModel, columnMetaDataIfAny); + final Tab tabMetaDataIfAny, final Hint hint) { + final Column columnMetaDataIfAny = hint.from(tabMetaDataIfAny); + + final EntityModel entityModelWithHints = + new EntityModel(entityModel.getPageParameters()) + .withColumnMetadata(columnMetaDataIfAny, hint); + + addPropertiesAndCollections(middleColumn, entityModelWithHints); + } + + private void addPropertiesAndCollections( + final MarkupContainer col, + final EntityModel entityModel) { + addPropertiesInColumn(col, entityModel); + addCollectionsIfRequired(col, entityModel); } private void addPropertiesInColumn( final MarkupContainer markupContainer, - final MemberGroupLayoutHint hint, - final EntityModel entityModel, - final ColumnSpans columnSpans, final Column columnMetaDataIfAny) { - final int span = hint.from(columnSpans); + final EntityModel entityModel) { + + final Column columnMetaDataIfAny = entityModel.getColumnMetadata(); + final Hint hint = entityModel.getColumnHint(); final ObjectAdapter adapter = entityModel.getObject(); final ObjectSpecification objSpec = adapter.getSpecification(); @@ -327,19 +337,17 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements actionsPanelDropDown, AdditionalLinksPanel.Style.DROPDOWN); } - - addClassForSpan(markupContainer, span); } private void addCollectionsIfRequired( final MarkupContainer column, - final EntityModel entityModel, - final Column columnMetaDataIfAny) { + final EntityModel entityModel) { + + final Column columnMetaDataIfAny = entityModel.getColumnMetadata(); + if(columnMetaDataIfAny != null) { - final EntityModel modelWithMetadata = new EntityModel(entityModel.getPageParameters()).withColumnMetadata( - columnMetaDataIfAny); getComponentFactoryRegistry() - .addOrReplaceComponent(column, "collections", ComponentType.ENTITY_COLLECTIONS, modelWithMetadata); + .addOrReplaceComponent(column, "collections", ComponentType.ENTITY_COLLECTIONS, entityModel); } else { Components.permanentlyHide(column, "collections"); } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/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 index 23a9a8d..ff0d5b8 100644 --- 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 @@ -21,20 +21,44 @@ package org.apache.isis.viewer.wicket.ui.components.entity.properties; import java.util.List; import java.util.Map; +import com.google.common.collect.FluentIterable; + 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.applib.layout.v1_0.Column; +import org.apache.isis.applib.layout.v1_0.PropertyGroup; 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.ObjectSpecifications; import org.apache.isis.core.metamodel.spec.feature.Contributed; import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation; +import org.apache.isis.viewer.wicket.model.models.EntityModel; public final class PropUtil { private PropUtil() { } + static List<String> propertyGroupNames( + final EntityModel entityModel, + final Column.Hint hint, final Column columnMetaDataIfAny) { + final ObjectAdapter adapter = entityModel.getObject(); + final ObjectSpecification objSpec = adapter.getSpecification(); + + final Map<String, List<ObjectAssociation>> associationsByGroup = + propertiesByMemberOrder(adapter); + + return columnMetaDataIfAny != null + ? FluentIterable + .from(columnMetaDataIfAny.getPropertyGroups()) + .transform(PropertyGroup.Util.nameOf()) + .toList() + : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), + hint); + } + static Map<String, List<ObjectAssociation>> propertiesByMemberOrder(final ObjectAdapter adapter) { final List<ObjectAssociation> properties = visibleProperties(adapter); return ObjectAssociation.Util.groupByMemberOrderName(properties); @@ -64,5 +88,4 @@ public final class PropUtil { filter); } - } http://git-wip-us.apache.org/repos/asf/isis/blob/9bad36c9/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 c9e7ac8..7d4f0e4 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 @@ -15,8 +15,6 @@ </propertyGroup> </left> <right span="6"> - <collection id="similarTo" defaultView="table"/> - <collection id="others" defaultView="hide"/> </right> </tab> <tab name="Metadata"> @@ -31,4 +29,12 @@ </left> </tab> </tabGroup> + <tabGroup> + <tab name="Collections"> + <left span="6"> + <collection id="similarTo" defaultView="table"/> + <collection id="others" defaultView="hide"/> + </left> + </tab> + </tabGroup> </objectLayout> \ No newline at end of file