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 12:33:37 UTC

[4/5] isis git commit: ISIS-993: hold the domainClass within the grid.

ISIS-993: hold the domainClass within the grid.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ecf6d170
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ecf6d170
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ecf6d170

Branch: refs/heads/ISIS-993
Commit: ecf6d1708be0a409cd8fb5d0257235b3b0de1f5b
Parents: 6053d1a
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Feb 10 10:37:18 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Feb 10 10:37:18 2016 +0000

----------------------------------------------------------------------
 .../layout/common/DomainObjectLayoutData.java   | 12 +++++
 .../apache/isis/applib/layout/common/Grid.java  | 20 ++++++--
 .../isis/applib/layout/common/GridAbstract.java | 17 +++++++
 .../layout/common/PropertyLayoutData.java       |  6 +--
 .../applib/services/layout/GridService.java     | 50 +++++++++++++++-----
 .../facets/object/grid/GridFacetDefault.java    |  2 +-
 .../services/grid/GridServiceDefault.java       | 32 +++++--------
 7 files changed, 98 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/core/applib/src/main/java/org/apache/isis/applib/layout/common/DomainObjectLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/DomainObjectLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/DomainObjectLayoutData.java
index 702a3d6..d15d27b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/DomainObjectLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/DomainObjectLayoutData.java
@@ -54,11 +54,13 @@ public class DomainObjectLayoutData implements Serializable,
 
     private BookmarkPolicy bookmarking;
 
+    @Override
     @XmlAttribute(required = false)
     public BookmarkPolicy getBookmarking() {
         return bookmarking;
     }
 
+    @Override
     public void setBookmarking(BookmarkPolicy bookmarking) {
         this.bookmarking = bookmarking;
     }
@@ -67,11 +69,13 @@ public class DomainObjectLayoutData implements Serializable,
 
     private String cssClass;
 
+    @Override
     @XmlAttribute(required = false)
     public String getCssClass() {
         return cssClass;
     }
 
+    @Override
     public void setCssClass(String cssClass) {
         this.cssClass = cssClass;
     }
@@ -79,11 +83,13 @@ public class DomainObjectLayoutData implements Serializable,
 
     private String cssClassFa;
 
+    @Override
     @XmlAttribute(required = false)
     public String getCssClassFa() {
         return cssClassFa;
     }
 
+    @Override
     public void setCssClassFa(String cssClassFa) {
         this.cssClassFa = cssClassFa;
     }
@@ -92,11 +98,13 @@ public class DomainObjectLayoutData implements Serializable,
 
     private org.apache.isis.applib.annotation.ActionLayout.CssClassFaPosition cssClassFaPosition;
 
+    @Override
     @XmlAttribute(required = false)
     public org.apache.isis.applib.annotation.ActionLayout.CssClassFaPosition getCssClassFaPosition() {
         return cssClassFaPosition;
     }
 
+    @Override
     public void setCssClassFaPosition(org.apache.isis.applib.annotation.ActionLayout.CssClassFaPosition cssClassFaPosition) {
         this.cssClassFaPosition = cssClassFaPosition;
     }
@@ -104,11 +112,13 @@ public class DomainObjectLayoutData implements Serializable,
 
     private String describedAs;
 
+    @Override
     @XmlElement(required = false)
     public String getDescribedAs() {
         return describedAs;
     }
 
+    @Override
     public void setDescribedAs(String describedAs) {
         this.describedAs = describedAs;
     }
@@ -117,11 +127,13 @@ public class DomainObjectLayoutData implements Serializable,
 
     private String named;
 
+    @Override
     @XmlElement(required = false)
     public String getNamed() {
         return named;
     }
 
+    @Override
     public void setNamed(String named) {
         this.named = named;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/core/applib/src/main/java/org/apache/isis/applib/layout/common/Grid.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/Grid.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/Grid.java
index 7380a3a..fd7b067 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/Grid.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/Grid.java
@@ -19,10 +19,8 @@
 package org.apache.isis.applib.layout.common;
 
 import java.util.LinkedHashMap;
-import java.util.List;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.layout.bootstrap3.BS3Col;
 import org.apache.isis.applib.services.layout.GridService;
 
 /**
@@ -34,15 +32,26 @@ import org.apache.isis.applib.services.layout.GridService;
  */
 public interface Grid {
 
+    @Programmatic
+    Class<?> getDomainClass();
+
+    @Programmatic
+    void setDomainClass(final Class<?> domainClass);
+
+    @Programmatic
     boolean isNormalized();
 
+    @Programmatic
     void setNormalized(final boolean normalized);
 
-    @Programmatic LinkedHashMap<String, PropertyLayoutData> getAllPropertiesById();
+    @Programmatic
+    LinkedHashMap<String, PropertyLayoutData> getAllPropertiesById();
 
-    @Programmatic LinkedHashMap<String, CollectionLayoutData> getAllCollectionsById();
+    @Programmatic
+    LinkedHashMap<String, CollectionLayoutData> getAllCollectionsById();
 
-    @Programmatic LinkedHashMap<String, ActionLayoutData> getAllActionsById();
+    @Programmatic
+    LinkedHashMap<String, ActionLayoutData> getAllActionsById();
 
     interface Visitor {
         void visit(final DomainObjectLayoutData domainObjectLayoutData);
@@ -69,6 +78,7 @@ public interface Grid {
         }
     }
 
+    @Programmatic
     void visit(final Grid.Visitor visitor);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/core/applib/src/main/java/org/apache/isis/applib/layout/common/GridAbstract.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/GridAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/GridAbstract.java
index 2efb85c..d320dff 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/GridAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/GridAbstract.java
@@ -39,6 +39,23 @@ import org.apache.isis.applib.services.layout.GridService;
 @XmlTransient // ignore this class
 public abstract class GridAbstract implements Grid {
 
+
+    private Class<?> domainClass;
+
+    @Programmatic
+    @XmlTransient
+    public Class<?> getDomainClass() {
+        return domainClass;
+    }
+
+    @Programmatic
+    @XmlTransient
+    public void setDomainClass(final Class<?> domainClass) {
+        this.domainClass = domainClass;
+    }
+
+
+
     private boolean normalized;
 
     @Programmatic

http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/core/applib/src/main/java/org/apache/isis/applib/layout/common/PropertyLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/PropertyLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/PropertyLayoutData.java
index 9bbec66..923833a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/PropertyLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/PropertyLayoutData.java
@@ -242,13 +242,11 @@ public class PropertyLayoutData
     }
 
 
-
-
-    @Override public String toString() {
+    @Override
+    public String toString() {
         return "PropertyLayoutData{" +
                 "id='" + id + '\'' +
                 '}';
     }
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/core/applib/src/main/java/org/apache/isis/applib/services/layout/GridService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/layout/GridService.java b/core/applib/src/main/java/org/apache/isis/applib/services/layout/GridService.java
index ec2d699..fc33df4 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/layout/GridService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/layout/GridService.java
@@ -18,6 +18,8 @@ package org.apache.isis.applib.services.layout;
 
 import java.util.List;
 
+import org.apache.isis.applib.annotation.MemberGroupLayout;
+import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.layout.common.Grid;
 
@@ -26,12 +28,14 @@ public interface GridService {
     /**
      * Whether any metadata exists for this domain class, and if so then whether it is valid or invalid.
      */
-    @Programmatic boolean exists(Class<?> domainClass);
+    @Programmatic
+    boolean exists(Class<?> domainClass);
 
     /**
      * Returns (raw unnormalized) metadata, eg per the <code>.layout.xml</code> file.
      */
-    @Programmatic Grid fromXml(Class<?> domainClass);
+    @Programmatic
+    Grid fromXml(Class<?> domainClass);
 
     /**
      * Normalize the grid with respect to the specified domain class.
@@ -40,27 +44,48 @@ public interface GridService {
      *     This will (often) modify the grid graph in order to add in any unreferenced actions and so forth.
      * </p>
      */
-    Grid normalize(Grid grid, final Class<?> domainClass);
+    Grid normalize(Grid grid);
 
-    Grid complete(Grid grid, final Class<?> domainClass);
+    Grid complete(Grid grid);
 
-    Grid minimal(Grid grid, final Class<?> domainClass);
+    Grid minimal(Grid grid);
 
     enum Style {
 
+        /**
+         * As per {@link #NORMALIZED}, but also with all (non-null) facets for all
+         * properties/collections/actions also included included in the grid.
+         *
+         * <p>
+         *     The intention here is that any layout metadata annotations can be removed from the code.
+         * </p>
+         */
         COMPLETE,
         /**
-         * Default, corresponding to raw state along with any additional regions added
-         * as a result of normalization process.
+         * Default, whereby missing properties/collections/actions are added to regions,
+         * and unused/empty regions are removed/trimmed.
+         *
+         * <p>
+         *     It should be possible to remove any {@link MemberOrder} and {@link MemberGroupLayout} annotations but
+         *     any layout annotations would need to be retained.
+         * </p>
          */
         NORMALIZED,
+        /**
+         * As per {@link #NORMALIZED}, but with no properties/collections/actions.
+         *
+         * <p>
+         *     The intention here is for layout annotations that &quot;bind&quot; the properties/collections/actions
+         *     to the regions to be retained.
+         * </p>
+         */
         MINIMAL
     }
 
     /**
-     * Obtains the (normalized) layout metadata, if any, for the (domain class of the) specified domain object.
+     * Obtains the layout metadata, if any, for the (domain class of the) specified domain object.
      *
-     * @param style - whether the returned grid should be complete (having been normalized), or should be as
+     * @param style - whether the returned grid should be complete, normalized, or as
      *              minimal as possible.
      */
     @Programmatic Grid toGrid(Object domainObject, final Style style);
@@ -78,12 +103,13 @@ public interface GridService {
     /**
      * For all of the available {@link GridNormalizerService}s available, return only the first one for any that
      * are for the same grid implementation.
-     * <p/>
+     * 
      * <p>
-     * This allows default implementations (eg for bootstrap3) to be overridden while also allowing for the more
-     * general idea of multiple implementations.
+     *   This allows default implementations (eg for bootstrap3) to be overridden while also allowing for the more
+     *   general idea of multiple implementations.
      * </p>
      */
     @Programmatic
     List<GridNormalizerService<?>> gridNormalizerServices();
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/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 4f5f0ae..fc9ee46 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
@@ -85,7 +85,7 @@ public class GridFacetDefault
         }
         final Class<?> domainClass = getSpecification().getCorrespondingClass();
 
-        return gridService.normalize(grid, domainClass);
+        return gridService.normalize(grid);
     }
 
     private ObjectSpecification getSpecification() {

http://git-wip-us.apache.org/repos/asf/isis/blob/ecf6d170/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 1d078f5..97588b9 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
@@ -127,11 +127,12 @@ public class GridServiceDefault
                     .toList();
             final JAXBContext context = JAXBContext.newInstance(pageImplementations.toArray(new Class[0]));
 
-            final Grid metadata = (Grid) jaxbService.fromXml(context, xml);
+            final Grid grid = (Grid) jaxbService.fromXml(context, xml);
+            grid.setDomainClass(domainClass);
             if(!deploymentCategory.isProduction()) {
-                pageByXml.put(xml, metadata);
+                pageByXml.put(xml, grid);
             }
-            return metadata;
+            return grid;
         } catch(Exception ex) {
 
             if(!deploymentCategory.isProduction()) {
@@ -150,7 +151,7 @@ public class GridServiceDefault
 
     @Override
     @Programmatic
-    public Grid normalize(final Grid grid, final Class<?> domainClass) {
+    public Grid normalize(final Grid grid) {
 
         // if have .layout.json and then add a .layout.xml without restarting, then note that
         // the changes won't be picked up.  Normalizing would be required
@@ -159,6 +160,8 @@ public class GridServiceDefault
             return grid;
         }
 
+        final Class<?> domainClass = grid.getDomainClass();
+
         for (GridNormalizerService gridNormalizerService : gridNormalizerServices()) {
             gridNormalizerService.normalize(grid, domainClass);
         }
@@ -170,8 +173,9 @@ public class GridServiceDefault
 
     @Override
     @Programmatic
-    public Grid complete(final Grid grid, final Class<?> domainClass) {
+    public Grid complete(final Grid grid) {
 
+        final Class<?> domainClass = grid.getDomainClass();
         for (GridNormalizerService gridNormalizerService : gridNormalizerServices()) {
             gridNormalizerService.complete(grid, domainClass);
         }
@@ -181,8 +185,9 @@ public class GridServiceDefault
 
     @Override
     @Programmatic
-    public Grid minimal(final Grid grid, final Class<?> domainClass) {
+    public Grid minimal(final Grid grid) {
 
+        final Class<?> domainClass = grid.getDomainClass();
         for (GridNormalizerService gridNormalizerService : gridNormalizerServices()) {
             gridNormalizerService.minimal(grid, domainClass);
         }
@@ -217,25 +222,14 @@ public class GridServiceDefault
             final GridFacet facet = objectSpec.getFacet(GridFacet.class);
             return facet != null? facet.getGrid(): null;
         case COMPLETE:
-            return completeGridFor(domainClass);
+            return complete(fromXml(domainClass));
         case MINIMAL:
-            return minimalGridFor(domainClass);
+            return minimal(fromXml(domainClass));
         default:
             throw new IllegalArgumentException("unsupported style");
         }
     }
 
-    protected Grid minimalGridFor(final Class<?> domainClass) {
-        Grid grid = fromXml(domainClass);
-        return grid;
-    }
-
-    protected Grid completeGridFor(final Class<?> domainClass) {
-        Grid grid = fromXml(domainClass);
-        grid = normalize(grid, domainClass);
-        return grid;
-    }
-
     @Override
     public String tnsAndSchemaLocation(final Grid grid) {
         final List<String> parts = Lists.newArrayList();