ISIS-993: slight simplification to metadata to make easier to fit into existing wicket cpt implementation; Wicket components now rendering again
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/f7d55cf3 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/f7d55cf3 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/f7d55cf3 Branch: refs/heads/ISIS-993 Commit: f7d55cf3aab05aacb511f6b27b07c7ebf8a7e0ff Parents: 79248dc Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Fri Jan 8 10:28:12 2016 +0000 Committer: Dan Haywood <d...@haywood-associates.co.uk> Committed: Mon Jan 25 14:38:24 2016 +0000 ---------------------------------------------------------------------- .../schema/applib/layout/layout-1.0.xsd | 8 +-- .../asciidoc/schema/applib/layout/layout.xsd | 8 +-- .../apache/isis/applib/layout/v1_0/Column.java | 45 ++++++------- .../isis/applib/layout/v1_0/ColumnContent.java | 1 + .../isis/applib/layout/v1_0/PropertyGroup.java | 7 +- .../org/apache/isis/applib/layout/v1_0/Tab.java | 30 ++++++++- .../object/layoutxml/LayoutXmlFacetDefault.java | 16 +++-- .../layoutxml/v1_0/DomainObjectTest.java | 15 ++--- .../viewer/wicket/model/models/EntityModel.java | 12 ++-- .../collections/EntityCollectionsPanel.html | 2 +- .../entity/properties/EntityPropertiesForm.java | 69 ++++++++++++-------- .../properties/EntityPropertiesPanel.html | 7 +- .../entity/tabgroups/EntityTabGroupsPanel.java | 2 +- .../dom/simple/SimpleObject.layout.xml | 3 +- 14 files changed, 132 insertions(+), 93 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 ba275c2..6aeb3d6 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 @@ -48,17 +48,15 @@ <xs:complexType name="column"> <xs:sequence> - <xs:choice minOccurs="0" maxOccurs="unbounded"> - <xs:element name="propertyGroup" type="tns:propertyGroup"/> - <xs:element name="collection" type="tns:collection"/> - </xs:choice> + <xs:element name="propertyGroup" type="tns:propertyGroup" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="collection" type="tns:collection" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="span" type="xs:int" use="required"/> </xs:complexType> <xs:complexType name="propertyGroup"> <xs:sequence> - <xs:element name="actions"> + <xs:element name="actions" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="action" type="tns:action" minOccurs="0" maxOccurs="unbounded"/> http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 ba275c2..6aeb3d6 100644 --- a/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd +++ b/adocs/documentation/src/main/asciidoc/schema/applib/layout/layout.xsd @@ -48,17 +48,15 @@ <xs:complexType name="column"> <xs:sequence> - <xs:choice minOccurs="0" maxOccurs="unbounded"> - <xs:element name="propertyGroup" type="tns:propertyGroup"/> - <xs:element name="collection" type="tns:collection"/> - </xs:choice> + <xs:element name="propertyGroup" type="tns:propertyGroup" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="collection" type="tns:collection" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="span" type="xs:int" use="required"/> </xs:complexType> <xs:complexType name="propertyGroup"> <xs:sequence> - <xs:element name="actions"> + <xs:element name="actions" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="action" type="tns:action" minOccurs="0" maxOccurs="unbounded"/> http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 7e7129c..905438f 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 @@ -23,17 +23,15 @@ import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; -import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @XmlType( propOrder = { - "span" - , "content" + "propertyGroups" + , "collections" } ) public class Column implements Serializable { @@ -60,35 +58,30 @@ public class Column implements Serializable { - private List<ColumnContent> content = Lists.newArrayList(); + private List<PropertyGroup> propertyGroups = Lists.newArrayList(); - @XmlElements({ - @XmlElement(name = "propertyGroup", required = false, type = PropertyGroup.class), - @XmlElement(name = "collection", required = false, type = Collection.class) - - }) - public List<ColumnContent> getContent() { - return content; + // no wrapper + @XmlElement(name = "propertyGroup", required = false) + public List<PropertyGroup> getPropertyGroups() { + return propertyGroups; } - public void setContent(List<ColumnContent> content) { - this.content = content; + public void setPropertyGroups(final List<PropertyGroup> propertyGroups) { + this.propertyGroups = propertyGroups; } - @XmlTransient - public Iterable<PropertyGroup> getPropertyGroups() { - return Iterables.transform( - Iterables.filter(getContent(), Util.is(PropertyGroup.class)), - Util.cast(PropertyGroup.class)); - } - @XmlTransient - public Iterable<Collection> getCollections() { - return Iterables.transform( - Iterables.filter(getContent(), Util.is(Collection.class)), - Util.cast(Collection.class)); - } + private List<Collection> collections = Lists.newArrayList(); + + // no wrapper + @XmlElement(name = "collection", required = false) + public List<Collection> getCollections() { + return collections; + } + public void setCollections(final List<Collection> collections) { + this.collections = collections; + } private Tab owner; http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnContent.java ---------------------------------------------------------------------- diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnContent.java b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnContent.java index ccd0e3f..526aa26 100644 --- a/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnContent.java +++ b/core/applib/src/main/java/org/apache/isis/applib/layout/v1_0/ColumnContent.java @@ -20,4 +20,5 @@ package org.apache.isis.applib.layout.v1_0; public interface ColumnContent { + } http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 f249071..78ef28a 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 @@ -66,12 +66,9 @@ public class PropertyGroup implements ColumnContent, ActionHolder, Serializable - private List<Action> actions = Lists.newArrayList(); + private List<Action> actions; - /** - * The <code><actions></code> element must be present but can be empty. - */ - @XmlElementWrapper(required = true) + @XmlElementWrapper(required = false) @XmlElement(name = "action", required = false) public List<Action> getActions() { return actions; http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 4a07dca..e81d20a 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 @@ -19,12 +19,17 @@ package org.apache.isis.applib.layout.v1_0; import java.io.Serializable; +import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; +import com.google.common.collect.Lists; + +import org.apache.isis.applib.annotation.Programmatic; + @XmlType( name="tab" , propOrder = { @@ -105,6 +110,29 @@ public class Tab implements Serializable { this.owner = owner; } + /** + * Aggregates the contents of all collections on this tab. + */ + @Programmatic + public List<ColumnContent> getContents() { + final List<ColumnContent> contents = Lists.newArrayList(); + appendContent(contents, getLeft()); + appendContent(contents, getMiddle()); + appendContent(contents, getRight()); + return contents; + } - + private static void appendContent(final List<ColumnContent> contents, final Column column) { + if(column == null) { + return; + } + final List<PropertyGroup> propertyGroups = column.getPropertyGroups(); + if(propertyGroups != null) { + contents.addAll(propertyGroups); + } + final List<Collection> collections = column.getCollections(); + if(collections != null) { + contents.addAll(collections); + } + } } http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java ---------------------------------------------------------------------- diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java index ca42fa6..eedda94 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layoutxml/LayoutXmlFacetDefault.java @@ -198,7 +198,7 @@ public class LayoutXmlFacetDefault boolean wasSet = defaultPropertyGroupRef.compareAndSet(null, new PropertyGroup(MemberGroupLayoutFacet.DEFAULT_GROUP)); final PropertyGroup defaultPropertyGroup = defaultPropertyGroupRef.get(); if(wasSet) { - firstColumnRef.get().getContent().add(defaultPropertyGroup); + firstColumnRef.get().getPropertyGroups().add(defaultPropertyGroup); } Iterables.removeAll(propertyIds, oneToOneAssociationById.keySet()); for (final String propertyId : missingPropertyIds) { @@ -223,7 +223,7 @@ public class LayoutXmlFacetDefault lastTabGroup.getTabs().add(tab); Column left = new Column(12); tab.setLeft(left); - left.getContent().add(new Collection(collectionId)); + left.getCollections().add(new Collection(collectionId)); } } @@ -339,10 +339,18 @@ public class LayoutXmlFacetDefault FacetUtil.addFacet(PagedFacetForCollectionXml.create(collection, oneToManyAssociation)); FacetUtil.addFacet(SortedByFacetForCollectionXml.create(collection, oneToManyAssociation)); - // copy the collection name onto the tab + // @MemberOrder#name based on the collection's id (so that each has a single "member group") + final String groupName = collection.getId(); + final String sequence = nextInSequenceFor(groupName); + FacetUtil.addFacet( + new MemberOrderFacetXml(groupName, sequence, translationService, oneToManyAssociation)); + + // if there is only a single column and no other contents, then copy the collection Id onto the tab' final Column column = collection.getOwner(); final Tab tab = column.getOwner(); - tab.setName(collection.getId()); + if(tab.getContents().size() == 1) { + tab.setName(collection.getId()); + } } private String nextInSequenceFor(final String propertyGroupName) { http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 437783a..a8d06c0 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 @@ -18,7 +18,6 @@ */ package org.apache.isis.core.metamodel.layoutxml.v1_0; -import java.util.List; import java.util.Map; import javax.xml.bind.Marshaller; @@ -69,11 +68,13 @@ public class DomainObjectTest { Column left = tab.getLeft(); PropertyGroup leftPropGroup = new PropertyGroup(); - left.getContent().add(leftPropGroup); + left.setPropertyGroups(Lists.<PropertyGroup>newArrayList()); + left.getPropertyGroups().add(leftPropGroup); leftPropGroup.setName("General"); Collection similarToColl = new Collection(); - left.getContent().add(similarToColl); + left.setCollections(Lists.<Collection>newArrayList()); + left.getCollections().add(similarToColl); similarToColl.setId("similarTo"); Property nameProperty = leftPropGroup.getProperties().get(0); @@ -81,14 +82,12 @@ public class DomainObjectTest { Action updateNameAction = new Action(); updateNameAction.setId("updateName"); - final List<Action> propertyActions = Lists.newArrayList(); - nameProperty.setActions(propertyActions); + nameProperty.setActions(Lists.<Action>newArrayList()); nameProperty.getActions().add(updateNameAction); Action deleteAction = new Action(); deleteAction.setId("delete"); - final List<Action> domainObjectActions = Lists.newArrayList(); - domainObject.setActions(domainObjectActions); + domainObject.setActions(Lists.<Action>newArrayList()); domainObject.getActions().add(deleteAction); String xml = jaxbService.toXml(domainObject, @@ -115,7 +114,7 @@ public class DomainObjectTest { protected void dumpXsd(final DomainObject domainObject) { Map<String, String> schemas = jaxbService.toXsd(domainObject, JaxbService.IsisSchemas.INCLUDE); for (Map.Entry<String, String> entry : schemas.entrySet()) { - System.out.println(entry.getKey() + ":"); + //System.out.println(entry.getKey() + ":"); System.out.println(entry.getValue()); } } http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 97ef07c..899f48e 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 @@ -634,17 +634,17 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> { // ////////////////////////////////////////////////////////// - // tab (if any) + // tab metadata (if any) // ////////////////////////////////////////////////////////// - private Tab tab; + private Tab tabMetadata; - public Tab getTab() { - return tab; + public Tab getTabMetadata() { + return tabMetadata; } - public void setTab(final Tab tab) { - this.tab = tab; + public void setTabMetadata(final Tab tabMetadata) { + this.tabMetadata = tabMetadata; } // ////////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html index f46ec4a..2d39517 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collections/EntityCollectionsPanel.html @@ -38,7 +38,7 @@ </div> </div> - <div wicket:id="owner" class="collection panel-body"> + <div wicket:id="collection" class="collection panel-body"> [collection] </div> </div> http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 8339981..5901d08 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 @@ -155,11 +155,14 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements final EntityModel entityModel = (EntityModel) getModel(); - final Tab tabIfAny = entityModel.getTab(); + final Tab tabMetaDataIfAny = entityModel.getTabMetadata(); final ColumnSpans columnSpans; - if(tabIfAny != null) { - columnSpans = ColumnSpans.asSpans(tabIfAny.getLeft().getSpan(), tabIfAny.getMiddle().getSpan(), tabIfAny.getRight().getSpan()); + if(tabMetaDataIfAny != null) { + columnSpans = ColumnSpans.asSpans( + tabMetaDataIfAny.getLeft().getSpan(), + tabMetaDataIfAny.getMiddle().getSpan(), + tabMetaDataIfAny.getRight().getSpan()); } else { final MemberGroupLayoutFacet memberGroupLayoutFacet = entityModel.getObject().getSpecification().getFacet(MemberGroupLayoutFacet.class); @@ -174,7 +177,7 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements boolean addedProperties; if(columnSpans.getLeft() > 0) { - addedProperties = addPropertiesInColumn(leftColumn, MemberGroupLayoutHint.LEFT, tabIfAny, columnSpans); + addedProperties = addMembersInColumn(leftColumn, MemberGroupLayoutHint.LEFT, tabMetaDataIfAny, columnSpans); addButtons(leftColumn); addFeedbackGui(leftColumn); } else { @@ -192,7 +195,7 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements if(columnSpans.getMiddle() > 0) { MarkupContainer middleColumn = new WebMarkupContainer(ID_MIDDLE_COLUMN); add(middleColumn); - addPropertiesInColumn(middleColumn, MemberGroupLayoutHint.MIDDLE, tabIfAny, columnSpans); + addMembersInColumn(middleColumn, MemberGroupLayoutHint.MIDDLE, tabMetaDataIfAny, columnSpans); } else { Components.permanentlyHide(this, ID_MIDDLE_COLUMN); } @@ -201,13 +204,13 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements if(columnSpans.getRight() > 0) { MarkupContainer rightColumn = new WebMarkupContainer(ID_RIGHT_COLUMN); add(rightColumn); - addPropertiesInColumn(rightColumn, MemberGroupLayoutHint.RIGHT, tabIfAny, columnSpans); + addMembersInColumn(rightColumn, MemberGroupLayoutHint.RIGHT, tabMetaDataIfAny, columnSpans); } else { Components.permanentlyHide(this, ID_RIGHT_COLUMN); } - // collections - if(columnSpans.getCollections() > 0) { + // collections (only if not being added to a tab) + if(tabMetaDataIfAny == null && columnSpans.getCollections() > 0) { final String idCollectionsToShow; final String idCollectionsToHide; int collectionSpan; @@ -223,19 +226,18 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements final Component collectionsColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, idCollectionsToShow, ComponentType.ENTITY_COLLECTIONS, entityModel); addClassForSpan(collectionsColumn, collectionSpan); - + Components.permanentlyHide(this, idCollectionsToHide); } else { Components.permanentlyHide(this, ID_ENTITY_COLLECTIONS); Components.permanentlyHide(this, ID_ENTITY_COLLECTIONS_OVERFLOW); } - } - private boolean addPropertiesInColumn( + private boolean addMembersInColumn( final MarkupContainer markupContainer, final MemberGroupLayoutHint hint, - final Tab tabIfAny, + final Tab tabMetaDataIfAny, final ColumnSpans columnSpans) { final int span = hint.from(columnSpans); @@ -243,20 +245,20 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements final ObjectAdapter adapter = entityModel.getObject(); final ObjectSpecification objSpec = adapter.getSpecification(); - final List<ObjectAssociation> associations = visibleProperties(adapter, objSpec, Where.OBJECT_FORMS); + final Column columnMetaDataIfAny = tabMetaDataIfAny != null ? hint.from(tabMetaDataIfAny) : null; + + // if in a tab, then collections are also rendered. + final List<ObjectAssociation> properties = visibleAssociations(adapter, ObjectAssociation.Filters.PROPERTIES); final RepeatingView memberGroupRv = new RepeatingView(ID_MEMBER_GROUP); markupContainer.add(memberGroupRv); - final Map<String, List<ObjectAssociation>> associationsByGroup = ObjectAssociation.Util.groupByMemberOrderName(associations); - - final List<String> groupNames; - if(tabIfAny != null) { - final Column column = hint.from(tabIfAny); - groupNames = Lists.newArrayList(Iterables.transform(column.getPropertyGroups(), propertyGroupName())); - } else { - groupNames = ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), hint); - } + final Map<String, List<ObjectAssociation>> associationsByGroup = + ObjectAssociation.Util.groupByMemberOrderName(properties); + + final List<String> groupNames = tabMetaDataIfAny != null + ? Lists.newArrayList(Iterables.transform(columnMetaDataIfAny.getPropertyGroups(), propertyGroupName())) + : ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), hint); for(final String groupName: groupNames) { final List<ObjectAssociation> associationsInGroup = associationsByGroup.get(groupName); @@ -296,6 +298,13 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } addClassForSpan(markupContainer, span); + + // if in a tab, then also render collections + if(columnMetaDataIfAny != null) { + final List<ObjectAssociation> collections = visibleAssociations(adapter, ObjectAssociation.Filters.COLLECTIONS); + + } + return !groupNames.isEmpty(); } @@ -330,13 +339,21 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> implements } - private List<ObjectAssociation> visibleProperties(final ObjectAdapter adapter, final ObjectSpecification objSpec, Where where) { - return objSpec.getAssociations(Contributed.INCLUDED, visiblePropertyFilter(adapter, where)); + private List<ObjectAssociation> visibleAssociations( + final ObjectAdapter adapter, + final Filter<ObjectAssociation> associationFilter) { + final ObjectSpecification objSpec = adapter.getSpecification(); + + return objSpec.getAssociations(Contributed.INCLUDED, visibleAssociationFilter(adapter, Where.OBJECT_FORMS, + associationFilter)); } @SuppressWarnings("unchecked") - private Filter<ObjectAssociation> visiblePropertyFilter(final ObjectAdapter adapter, Where where) { - return Filters.and(ObjectAssociation.Filters.PROPERTIES, ObjectAssociation.Filters.dynamicallyVisible(adapter, + private static Filter<ObjectAssociation> visibleAssociationFilter( + final ObjectAdapter adapter, + final Where where, + final Filter<ObjectAssociation> associationFilter) { + return Filters.and(associationFilter, ObjectAssociation.Filters.dynamicallyVisible(adapter, InteractionInitiatedBy.USER, where )); } http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 afff1d6..4e917e2 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 @@ -36,7 +36,7 @@ </div> <div class="properties panel-body"> <div wicket:id="properties"> - <div wicket:id="owner" class="property">[property]</div> + <div wicket:id="property" class="property">[property]</div> </div> </div> </div> @@ -64,7 +64,7 @@ </div> <div class="properties panel-body"> <div wicket:id="properties"> - <div wicket:id="owner" class="property">[property]</div> + <div wicket:id="property" class="property">[property]</div> </div> </div> </div> @@ -84,7 +84,7 @@ </div> <div class="properties panel-body"> <div wicket:id="properties"> - <div wicket:id="owner" class="property">[property]</div> + <div wicket:id="property" class="property">[property]</div> </div> </div> </div> @@ -96,7 +96,6 @@ <div class="row"> <div wicket:id="entityCollectionsOverflow"></div> </div> - </form> </div> </wicket:panel> http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.java ---------------------------------------------------------------------- diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.java index 1ab845e..e8438e1 100644 --- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.java +++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/tabgroups/EntityTabGroupsPanel.java @@ -115,7 +115,7 @@ public class EntityTabGroupsPanel extends PanelAbstract<EntityModel> { super(id); final EntityModel modelWithTabHints = new EntityModel(model.getPageParameters()); - model.setTab(tab); + model.setTabMetadata(tab); getComponentFactoryRegistry().addOrReplaceComponent(this, ID_ENTITY_PROPERTIES_AND_COLLECTIONS, ComponentType.ENTITY_PROPERTIES, modelWithTabHints); http://git-wip-us.apache.org/repos/asf/isis/blob/f7d55cf3/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 2abd6be..d367269 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 @@ -1,3 +1,5 @@ +DELIBERATE SYNTAX ERROR TO DISABLE NEW RENDERING + <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <domainObject xsi:schemaLocation="http://isis.apache.org/schema/applib/layout http://isis.apache.org/schema/applib/layout/layout-1.0.xsd" xmlns="http://isis.apache.org/schema/applib/layout" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <actions> @@ -7,7 +9,6 @@ <tab name="Common"> <left span="4"> <propertyGroup name="General"> - <actions/> <property id="name" labelPosition="TOP"> <actions> <action id="updateName"/>