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 2016/02/10 22:46:20 UTC
[13/13] isis git commit: ISIS-993: GridFacetDefault now derives a
grid from facets if no XML is available.
ISIS-993: GridFacetDefault now derives a grid from facets if no XML is available.
This design probably means that a lot of the existing "fixedcol" code could be removed; in effect we always render using BS3. Will leave in for the moment, though.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/959d4247
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/959d4247
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/959d4247
Branch: refs/heads/ISIS-993
Commit: 959d42477b4aefa383c562f166a91be630e3f3eb
Parents: 4104039
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Feb 10 21:23:47 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Feb 10 21:23:47 2016 +0000
----------------------------------------------------------------------
.../applib/layout/grid/bootstrap3/BS3Col.java | 3 +-
.../facets/object/grid/GridFacetDefault.java | 98 ++++++++++++++++++--
.../json/LayoutMetadataReaderFromJson.java | 4 +-
.../services/grid/GridServiceDefault.java | 6 +-
.../services/metamodel/MetadataMenu.java | 3 +-
core/pom.xml | 2 +
.../ui/components/layout/bs3/col/Col.java | 5 +
.../dom/simple/SimpleObject.layout.xml | 6 ++
8 files changed, 112 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
index bc289d8..2b33287 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
@@ -247,11 +247,10 @@ public class BS3Col extends BS3RowContent
return "col-" + size.toCssClassFragment() + "-" + getSpan();
}
-
@Override public String toString() {
return "BS3Col{" +
"id='" + id + '\'' +
+ ", span=" + span +
'}';
}
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
index 69ada55..b4329db 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetDefault.java
@@ -18,16 +18,29 @@
*/
package org.apache.isis.core.metamodel.facets.object.grid;
+import java.util.Arrays;
+import java.util.List;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.annotation.MemberGroupLayout;
+import org.apache.isis.applib.layout.component.CollectionLayoutData;
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.applib.layout.component.FieldSet;
import org.apache.isis.applib.layout.component.Grid;
+import org.apache.isis.applib.layout.grid.bootstrap3.BS3Col;
+import org.apache.isis.applib.layout.grid.bootstrap3.BS3Grid;
+import org.apache.isis.applib.layout.grid.bootstrap3.BS3Row;
import org.apache.isis.applib.services.layout.GridService;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
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.OneToManyAssociation;
public class GridFacetDefault
extends FacetAbstract
@@ -52,7 +65,6 @@ public class GridFacetDefault
private final GridService gridService;
private Grid grid;
- private boolean blacklisted;
private GridFacetDefault(
final FacetHolder facetHolder,
@@ -63,22 +75,91 @@ public class GridFacetDefault
this.deploymentCategory = deploymentCategory;
}
- /**
- * Blacklisting only occurs if running in production mode.
- */
public Grid getGrid() {
- if (deploymentCategory.isProduction() || blacklisted) {
+ if (deploymentCategory.isProduction() && this.grid != null) {
return this.grid;
}
final Class<?> domainClass = getSpecification().getCorrespondingClass();
- final Grid grid = gridService.fromXml(domainClass);
- if(deploymentCategory.isProduction() && grid == null) {
- blacklisted = true;
+ Grid grid = gridService.fromXml(domainClass);
+ if(grid == null) {
+ grid = deriveGrid();
}
+
this.grid = normalize(grid);
return this.grid;
}
+ private Grid deriveGrid() {
+ final BS3Grid bs3Grid = new BS3Grid();
+ bs3Grid.setDomainClass(getSpecification().getCorrespondingClass());
+
+ final BS3Row headerRow = new BS3Row();
+ bs3Grid.getRows().add(headerRow);
+ final BS3Col headerRowCol = new BS3Col();
+ headerRowCol.setSpan(12);
+ headerRowCol.setUnreferencedActions(true);
+ headerRowCol.setDomainObject(new DomainObjectLayoutData());
+ headerRow.getCols().add(headerRowCol);
+
+ final BS3Row propsRow = new BS3Row();
+ bs3Grid.getRows().add(propsRow);
+
+ final MemberGroupLayoutFacet memberGroupLayoutFacet =
+ getSpecification().getFacet(MemberGroupLayoutFacet.class);
+ if(memberGroupLayoutFacet != null) {
+ // if have @MemberGroupLayout (or equally, a .layout.json file)
+ final MemberGroupLayout.ColumnSpans columnSpans = memberGroupLayoutFacet.getColumnSpans();
+ addFieldSetsToColumn(propsRow, columnSpans.getLeft(), memberGroupLayoutFacet.getLeft(), true);
+ addFieldSetsToColumn(propsRow, columnSpans.getMiddle(), memberGroupLayoutFacet.getMiddle(), false);
+ addFieldSetsToColumn(propsRow, columnSpans.getRight(), memberGroupLayoutFacet.getRight(), false);
+
+ final BS3Col col = new BS3Col();
+ final int collectionSpan = columnSpans.getCollections();
+ col.setUnreferencedCollections(true);
+ col.setSpan(collectionSpan > 0? collectionSpan: 12);
+ propsRow.getCols().add(col);
+
+ // will already be sorted per @MemberOrder
+ final List<OneToManyAssociation> collections = getSpecification().getCollections(Contributed.INCLUDED);
+ for (OneToManyAssociation collection : collections) {
+ col.getCollections().add(new CollectionLayoutData(collection.getId()));
+ }
+ } else {
+
+ // if no layout hints other than @MemberOrder
+ addFieldSetsToColumn(propsRow, 4, Arrays.asList("General"), true);
+
+ final BS3Col col = new BS3Col();
+ col.setUnreferencedCollections(true);
+ col.setSpan(12);
+ propsRow.getCols().add(col);
+ }
+ return bs3Grid;
+ }
+
+ void addFieldSetsToColumn(
+ final BS3Row propsRow,
+ final int span,
+ final List<String> memberGroupNames,
+ final boolean unreferencedProperties) {
+
+ if(span > 0 || unreferencedProperties) {
+ final BS3Col col = new BS3Col();
+ col.setSpan(span); // in case we are here because of 'unreferencedProperties' needs setting
+ propsRow.getCols().add(col);
+ final List<String> leftMemberGroups = memberGroupNames;
+ for (String memberGroup : leftMemberGroups) {
+ final FieldSet fieldSet = new FieldSet(memberGroup);
+ if(unreferencedProperties && col.getFieldSets().isEmpty()) {
+ fieldSet.setUnreferencedProperties(true);
+ }
+ col.getFieldSets().add(fieldSet);
+ }
+ }
+ }
+
+
+
private Grid normalize(final Grid grid) {
if(grid == null) {
return null;
@@ -88,6 +169,7 @@ public class GridFacetDefault
return gridService.normalize(grid);
}
+
private ObjectSpecification getSpecification() {
return (ObjectSpecification) getFacetHolder();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/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 05b84fc..59cdb77 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
@@ -415,7 +415,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader2, Serv
}
try {
- final GridService gridService = getObjectLayoutMetadataService();
+ final GridService gridService = getGridService();
if(gridService.exists(domainClass)) {
blacklisted.add(domainClass);
return null;
@@ -699,7 +699,7 @@ public class LayoutMetadataReaderFromJson implements LayoutMetadataReader2, Serv
- private GridService getObjectLayoutMetadataService() {
+ private GridService getGridService() {
return servicesInjector.lookupService(GridService.class);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
index 6da6da7..e9dc2b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridServiceDefault.java
@@ -41,13 +41,14 @@ import org.slf4j.LoggerFactory;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.layout.GridNormalizerService;
import org.apache.isis.applib.layout.component.Grid;
import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.layout.GridNormalizerService;
import org.apache.isis.applib.services.layout.GridService;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.deployment.DeploymentCategoryAware;
import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
+import org.apache.isis.core.metamodel.layoutmetadata.json.LayoutMetadataReaderFromJson;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
@@ -69,6 +70,8 @@ public class GridServiceDefault
// cache (used only in prototyping mode)
private final Map<String, Grid> pageByXml = Maps.newHashMap();
+ private LayoutMetadataReaderFromJson layoutMetadataReaderFromJson = new LayoutMetadataReaderFromJson();
+
@Override
@Programmatic
public boolean exists(final Class<?> domainClass) {
@@ -94,7 +97,6 @@ public class GridServiceDefault
return null;
}
-
if(!deploymentCategory.isProduction()) {
final Grid grid = pageByXml.get(xml);
if(grid != null) {
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
index e5f469b..2872f1e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetadataMenu.java
@@ -88,7 +88,8 @@ public class MetadataMenu implements SpecificationLoaderSpiAware {
restrictTo = RestrictTo.PROTOTYPING
)
@ActionLayout(
- cssClassFa = "fa-download"
+ cssClassFa = "fa-download",
+ named = "Download Layouts (XML)"
)
@MemberOrder(sequence="500.400.1")
public Blob downloadLayouts(final GridService.Style style) {
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index 3734a80..0f609dd 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -96,6 +96,8 @@
ISIS-1288: seen integration tests to fail;
domain object date holding 1-Aug-2015 after xactn retrieved as 31-Jul-2015
+ https://github.com/datanucleus/datanucleus-jodatime/commit/b85795a1bf5f92909a95d2c8f8822bba2ba38b5f
+
<datanucleus-jodatime.version>4.1.1</datanucleus-jodatime.version>
-->
<datanucleus-maven-plugin.version>4.0.2</datanucleus-maven-plugin.version>
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 93198b2..057ea4b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -86,6 +86,11 @@ public class Col extends PanelAbstract<EntityModel> {
setRenderBodyOnly(true);
+ if(bs3Col.getSpan() == 0) {
+ Components.permanentlyHide(this, ID_COL);
+ return;
+ }
+
final WebMarkupContainer div = new WebMarkupContainer(ID_COL);
CssClassAppender.appendCssClassTo(div, bs3Col.toCssClass());
http://git-wip-us.apache.org/repos/asf/isis/blob/959d4247/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 47529e2..5072933 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,6 +15,12 @@
<c:fieldSet name="Properties">
<c:property id="name"/>
</c:fieldSet>
+ </bs3:col>
+ </bs3:row>
+ </bs3:tab>
+ <bs3:tab name="Misc">
+ <bs3:row>
+ <bs3:col span="12">
<c:fieldSet name="Misc">
<c:property id="versionSequence"/>
</c:fieldSet>