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:36 UTC

[3/5] isis git commit: ISIS-993: fleshing out the GridNormalizerServiceAbstract for the "complete" and "minimal" updating of Grid graphs (prior to conversion to XML).

ISIS-993: fleshing out the GridNormalizerServiceAbstract for the "complete" and "minimal" updating of Grid graphs (prior to conversion to XML).


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

Branch: refs/heads/ISIS-993
Commit: 6053d1a8efed2d5cae9cbbc8b0497796397686cd
Parents: 5c83175
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Feb 10 10:21:00 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Feb 10 10:21:00 2016 +0000

----------------------------------------------------------------------
 .../isis/applib/layout/bootstrap3/BS3Grid.java  |   2 +-
 .../applib/layout/common/ActionLayoutData.java  |  19 +-
 .../layout/common/CollectionLayoutData.java     |  22 +-
 .../common/CollectionLayoutDataOwner.java       |   1 +
 .../layout/common/DomainObjectLayoutData.java   |  16 +-
 .../isis/applib/layout/common/FieldSet.java     |  11 +-
 .../applib/layout/common/HasBookmarking.java    |  14 +
 .../isis/applib/layout/common/HasCssClass.java  |  12 +
 .../applib/layout/common/HasCssClassFa.java     |  16 +
 .../applib/layout/common/HasDescribedAs.java    |  12 +
 .../isis/applib/layout/common/HasHidden.java    |  14 +
 .../isis/applib/layout/common/HasNamed.java     |  17 ++
 .../isis/applib/layout/common/MemberRegion.java |   2 +-
 .../layout/common/PropertyLayoutData.java       |  16 +-
 .../members/cssclassfa/CssClassFaPosition.java  |  24 ++
 .../grid/GridNormalizerServiceAbstract.java     | 301 ++++++++++++++++++-
 16 files changed, 479 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Grid.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Grid.java b/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Grid.java
index a893cfb..5d0cb47 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Grid.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/bootstrap3/BS3Grid.java
@@ -113,7 +113,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
 
 
 
-    interface Visitor extends Grid.Visitor {
+    public interface Visitor extends Grid.Visitor {
         void preVisit(final BS3Grid bs3Grid);
         void visit(final BS3Grid bs3Grid);
         void postVisit(final BS3Grid bs3Grid);

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/ActionLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/ActionLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/ActionLayoutData.java
index f1aa540..5097349 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/ActionLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/ActionLayoutData.java
@@ -48,7 +48,8 @@ import org.apache.isis.applib.annotation.Where;
         , "metadataError"
     }
 )
-public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwner> {
+public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwner>,HasCssClass, HasCssClassFa,
+        HasDescribedAs, HasHidden, HasNamed, HasBookmarking {
 
     private static final long serialVersionUID = 1L;
 
@@ -79,11 +80,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private BookmarkPolicy bookmarking;
 
+    @Override
     @XmlAttribute(required = false)
     public BookmarkPolicy getBookmarking() {
         return bookmarking;
     }
 
+    @Override
     public void setBookmarking(BookmarkPolicy bookmarking) {
         this.bookmarking = bookmarking;
     }
@@ -91,11 +94,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private String cssClass;
 
+    @Override
     @XmlAttribute(required = false)
     public String getCssClass() {
         return cssClass;
     }
 
+    @Override
     public void setCssClass(String cssClass) {
         this.cssClass = cssClass;
     }
@@ -103,11 +108,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private String cssClassFa;
 
+    @Override
     @XmlAttribute(required = false)
     public String getCssClassFa() {
         return cssClassFa;
     }
 
+    @Override
     public void setCssClassFa(String cssClassFa) {
         this.cssClassFa = cssClassFa;
     }
@@ -116,11 +123,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     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;
     }
@@ -128,11 +137,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private String describedAs;
 
+    @Override
     @XmlElement(required = false)
     public String getDescribedAs() {
         return describedAs;
     }
 
+    @Override
     public void setDescribedAs(String describedAs) {
         this.describedAs = describedAs;
     }
@@ -141,11 +152,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private Where hidden;
 
+    @Override
     @XmlAttribute(required = false)
     public Where getHidden() {
         return hidden;
     }
 
+    @Override
     public void setHidden(Where hidden) {
         this.hidden = hidden;
     }
@@ -154,11 +167,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private String named;
 
+    @Override
     @XmlElement(required = false)
     public String getNamed() {
         return named;
     }
 
+    @Override
     public void setNamed(String named) {
         this.named = named;
     }
@@ -167,11 +182,13 @@ public class ActionLayoutData implements Serializable, Owned<ActionLayoutDataOwn
 
     private Boolean namedEscaped;
 
+    @Override
     @XmlAttribute(required = false)
     public Boolean getNamedEscaped() {
         return namedEscaped;
     }
 
+    @Override
     public void setNamedEscaped(Boolean namedEscaped) {
         this.namedEscaped = namedEscaped;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutData.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutData.java
index 19758d6..05a331f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutData.java
@@ -52,7 +52,11 @@ import org.apache.isis.applib.annotation.Where;
                 , "metadataError"
         }
 )
-public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner, Serializable {
+public class CollectionLayoutData
+        implements MemberRegion<CollectionLayoutDataOwner>,
+                   ActionLayoutDataOwner,
+                   Serializable,
+                   HasCssClass, HasDescribedAs, HasHidden, HasNamed {
 
     private static final long serialVersionUID = 1L;
 
@@ -81,11 +85,13 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
 
     private String cssClass;
 
+    @Override
     @XmlAttribute(required = false)
     public String getCssClass() {
         return cssClass;
     }
 
+    @Override
     public void setCssClass(String cssClass) {
         this.cssClass = cssClass;
     }
@@ -94,11 +100,13 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
 
     private String describedAs;
 
+    @Override
     @XmlElement(required = false)
     public String getDescribedAs() {
         return describedAs;
     }
 
+    @Override
     public void setDescribedAs(String describedAs) {
         this.describedAs = describedAs;
     }
@@ -123,11 +131,13 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
 
     private Where hidden;
 
+    @Override
     @XmlAttribute(required = false)
     public Where getHidden() {
         return hidden;
     }
 
+    @Override
     public void setHidden(Where hidden) {
         this.hidden = hidden;
     }
@@ -135,11 +145,13 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
 
     private String named;
 
+    @Override
     @XmlElement(required = false)
     public String getNamed() {
         return named;
     }
 
+    @Override
     public void setNamed(String named) {
         this.named = named;
     }
@@ -147,11 +159,13 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
 
     private Boolean namedEscaped;
 
+    @Override
     @XmlAttribute(required = false)
     public Boolean getNamedEscaped() {
         return namedEscaped;
     }
 
+    @Override
     public void setNamedEscaped(Boolean namedEscaped) {
         this.namedEscaped = namedEscaped;
     }
@@ -197,7 +211,7 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
 
 
 
-    private MemberRegionOwner owner;
+    private CollectionLayoutDataOwner owner;
     /**
      * Owner.
      *
@@ -206,11 +220,11 @@ public class CollectionLayoutData implements MemberRegion, ActionLayoutDataOwner
      * </p>
      */
     @XmlTransient
-    public MemberRegionOwner getOwner() {
+    public CollectionLayoutDataOwner getOwner() {
         return owner;
     }
 
-    public void setOwner(final MemberRegionOwner owner) {
+    public void setOwner(final CollectionLayoutDataOwner owner) {
         this.owner = owner;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutDataOwner.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutDataOwner.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutDataOwner.java
index 438ae56..0eae2c7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutDataOwner.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/CollectionLayoutDataOwner.java
@@ -21,5 +21,6 @@ package org.apache.isis.applib.layout.common;
 import java.util.List;
 
 public interface CollectionLayoutDataOwner extends MemberRegionOwner {
+
     List<CollectionLayoutData> getCollections();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/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 0db726a..702a3d6 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
@@ -43,7 +43,8 @@ import org.apache.isis.applib.annotation.BookmarkPolicy;
             , "metadataError"
         }
 )
-public class DomainObjectLayoutData implements Serializable {
+public class DomainObjectLayoutData implements Serializable,
+        HasBookmarking, HasCssClass, HasCssClassFa, HasDescribedAs, HasNamed {
 
     private static final long serialVersionUID = 1L;
 
@@ -126,6 +127,19 @@ public class DomainObjectLayoutData implements Serializable {
     }
 
 
+    private Boolean namedEscaped;
+
+    @Override
+    @XmlAttribute(required = false)
+    public Boolean getNamedEscaped() {
+        return namedEscaped;
+    }
+
+    @Override
+    public void setNamedEscaped(Boolean namedEscaped) {
+        this.namedEscaped = namedEscaped;
+    }
+
 
 
     private String plural;

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
index 262796b..7037135 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/FieldSet.java
@@ -51,7 +51,10 @@ import org.apache.isis.applib.layout.bootstrap3.BS3Col;
                 , "metadataError"
         }
 )
-public class FieldSet implements MemberRegion, ActionLayoutDataOwner, Serializable {
+public class FieldSet
+        implements MemberRegion<FieldSetOwner>,
+                   ActionLayoutDataOwner,
+                   Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -162,7 +165,7 @@ public class FieldSet implements MemberRegion, ActionLayoutDataOwner, Serializab
     }
 
 
-    private MemberRegionOwner owner;
+    private FieldSetOwner owner;
     /**
      * Owner.
      *
@@ -171,11 +174,11 @@ public class FieldSet implements MemberRegion, ActionLayoutDataOwner, Serializab
      * </p>
      */
     @XmlTransient
-    public MemberRegionOwner getOwner() {
+    public FieldSetOwner getOwner() {
         return owner;
     }
 
-    public void setOwner(final MemberRegionOwner owner) {
+    public void setOwner(final FieldSetOwner owner) {
         this.owner = owner;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasBookmarking.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasBookmarking.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasBookmarking.java
new file mode 100644
index 0000000..ad841a2
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasBookmarking.java
@@ -0,0 +1,14 @@
+package org.apache.isis.applib.layout.common;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+
+/**
+ * Created by Dan on 10/02/2016.
+ */
+public interface HasBookmarking {
+    @XmlAttribute(required = false) BookmarkPolicy getBookmarking();
+
+    void setBookmarking(BookmarkPolicy bookmarking);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClass.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClass.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClass.java
new file mode 100644
index 0000000..e42dc09
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClass.java
@@ -0,0 +1,12 @@
+package org.apache.isis.applib.layout.common;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+/**
+ * Created by Dan on 10/02/2016.
+ */
+public interface HasCssClass {
+    @XmlAttribute(required = false) String getCssClass();
+
+    void setCssClass(String cssClass);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClassFa.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClassFa.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClassFa.java
new file mode 100644
index 0000000..763b8dd
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasCssClassFa.java
@@ -0,0 +1,16 @@
+package org.apache.isis.applib.layout.common;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+/**
+ * Created by Dan on 10/02/2016.
+ */
+public interface HasCssClassFa {
+    @XmlAttribute(required = false) String getCssClassFa();
+
+    void setCssClassFa(String cssClassFa);
+
+    @XmlAttribute(required = false) org.apache.isis.applib.annotation.ActionLayout.CssClassFaPosition getCssClassFaPosition();
+
+    void setCssClassFaPosition(org.apache.isis.applib.annotation.ActionLayout.CssClassFaPosition cssClassFaPosition);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasDescribedAs.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasDescribedAs.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasDescribedAs.java
new file mode 100644
index 0000000..f19c95a
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasDescribedAs.java
@@ -0,0 +1,12 @@
+package org.apache.isis.applib.layout.common;
+
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Created by Dan on 10/02/2016.
+ */
+public interface HasDescribedAs {
+    @XmlElement(required = false) String getDescribedAs();
+
+    void setDescribedAs(String describedAs);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasHidden.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasHidden.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasHidden.java
new file mode 100644
index 0000000..7953141
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasHidden.java
@@ -0,0 +1,14 @@
+package org.apache.isis.applib.layout.common;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+import org.apache.isis.applib.annotation.Where;
+
+/**
+ * Created by Dan on 10/02/2016.
+ */
+public interface HasHidden {
+    @XmlAttribute(required = false) Where getHidden();
+
+    void setHidden(Where hidden);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasNamed.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasNamed.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasNamed.java
new file mode 100644
index 0000000..4a29ee9
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/HasNamed.java
@@ -0,0 +1,17 @@
+package org.apache.isis.applib.layout.common;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Created by Dan on 10/02/2016.
+ */
+public interface HasNamed {
+    @XmlElement(required = false) String getNamed();
+
+    void setNamed(String named);
+
+    @XmlAttribute(required = false) Boolean getNamedEscaped();
+
+    void setNamedEscaped(Boolean namedEscaped);
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/applib/src/main/java/org/apache/isis/applib/layout/common/MemberRegion.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/common/MemberRegion.java b/core/applib/src/main/java/org/apache/isis/applib/layout/common/MemberRegion.java
index daf4aed4..f335cde 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/common/MemberRegion.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/common/MemberRegion.java
@@ -27,7 +27,7 @@ package org.apache.isis.applib.layout.common;
  *     (containing a single collection and associated actions)
  * </p>
  */
-public interface MemberRegion extends Owned<MemberRegionOwner> {
+public interface MemberRegion<T extends MemberRegionOwner> extends Owned<T> {
 
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/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 91e7ee0..9bbec66 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
@@ -45,7 +45,11 @@ import org.apache.isis.applib.annotation.Where;
                 , "metadataError"
         }
 )
-public class PropertyLayoutData implements ActionLayoutDataOwner, Serializable, Owned<FieldSet> {
+public class PropertyLayoutData
+        implements ActionLayoutDataOwner,
+                   Serializable,
+                   Owned<FieldSet>,
+                   HasCssClass, HasDescribedAs, HasHidden, HasNamed {
 
     private static final long serialVersionUID = 1L;
 
@@ -74,11 +78,13 @@ public class PropertyLayoutData implements ActionLayoutDataOwner, Serializable,
 
     private String cssClass;
 
+    @Override
     @XmlAttribute(required = false)
     public String getCssClass() {
         return cssClass;
     }
 
+    @Override
     public void setCssClass(String cssClass) {
         this.cssClass = cssClass;
     }
@@ -86,11 +92,13 @@ public class PropertyLayoutData implements ActionLayoutDataOwner, Serializable,
 
     private String describedAs;
 
+    @Override
     @XmlElement(required = false)
     public String getDescribedAs() {
         return describedAs;
     }
 
+    @Override
     public void setDescribedAs(String describedAs) {
         this.describedAs = describedAs;
     }
@@ -98,11 +106,13 @@ public class PropertyLayoutData implements ActionLayoutDataOwner, Serializable,
 
     private Where hidden;
 
+    @Override
     @XmlAttribute(required = false)
     public Where getHidden() {
         return hidden;
     }
 
+    @Override
     public void setHidden(Where hidden) {
         this.hidden = hidden;
     }
@@ -134,11 +144,13 @@ public class PropertyLayoutData implements ActionLayoutDataOwner, Serializable,
 
     private String named;
 
+    @Override
     @XmlElement(required = false)
     public String getNamed() {
         return named;
     }
 
+    @Override
     public void setNamed(String named) {
         this.named = named;
     }
@@ -146,11 +158,13 @@ public class PropertyLayoutData implements ActionLayoutDataOwner, Serializable,
 
     private Boolean namedEscaped;
 
+    @Override
     @XmlAttribute(required = false)
     public Boolean getNamedEscaped() {
         return namedEscaped;
     }
 
+    @Override
     public void setNamedEscaped(Boolean namedEscaped) {
         this.namedEscaped = namedEscaped;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaPosition.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaPosition.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaPosition.java
index 4692f6a..a08e4af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaPosition.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaPosition.java
@@ -72,4 +72,28 @@ public enum CssClassFaPosition {
         }
         throw new IllegalArgumentException("not recognized: " + cssClassFaPosition);
     }
+    @Deprecated
+    public DomainObjectLayout.CssClassFaPosition toDomainObjectLayoutPosition() {
+        if (this == CssClassFaPosition.LEFT) {
+            return DomainObjectLayout.CssClassFaPosition.LEFT;
+        } else {
+            return DomainObjectLayout.CssClassFaPosition.RIGHT;
+        }
+    }
+    @Deprecated
+    public ViewModelLayout.CssClassFaPosition toViewModelLayoutPosition() {
+        if (this == CssClassFaPosition.LEFT) {
+            return ViewModelLayout.CssClassFaPosition.LEFT;
+        } else {
+            return ViewModelLayout.CssClassFaPosition.RIGHT;
+        }
+    }
+    @Deprecated
+    public ActionLayout.CssClassFaPosition toActionLayoutPosition() {
+        if (this == CssClassFaPosition.LEFT) {
+            return ActionLayout.CssClassFaPosition.LEFT;
+        } else {
+            return ActionLayout.CssClassFaPosition.RIGHT;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/6053d1a8/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
index 79d3548..3c38356 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridNormalizerServiceAbstract.java
@@ -17,6 +17,7 @@
 package org.apache.isis.core.metamodel.services.grid;
 
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
@@ -30,22 +31,30 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.DomainObjectContainer;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.layout.GridNormalizerService;
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.common.ActionLayoutData;
 import org.apache.isis.applib.layout.common.ActionLayoutDataOwner;
 import org.apache.isis.applib.layout.common.CollectionLayoutData;
+import org.apache.isis.applib.layout.common.DomainObjectLayoutData;
 import org.apache.isis.applib.layout.common.FieldSet;
 import org.apache.isis.applib.layout.common.Grid;
+import org.apache.isis.applib.layout.common.HasBookmarking;
+import org.apache.isis.applib.layout.common.HasCssClass;
+import org.apache.isis.applib.layout.common.HasCssClassFa;
+import org.apache.isis.applib.layout.common.HasDescribedAs;
+import org.apache.isis.applib.layout.common.HasHidden;
+import org.apache.isis.applib.layout.common.HasNamed;
 import org.apache.isis.applib.layout.common.MemberRegionOwner;
 import org.apache.isis.applib.layout.common.PropertyLayoutData;
-import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCColumn;
-import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCColumnOwner;
-import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCGrid;
-import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCTab;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.jaxb.JaxbService;
+import org.apache.isis.applib.services.layout.GridNormalizerService;
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionXml;
 import org.apache.isis.core.metamodel.facets.actions.layout.BookmarkPolicyFacetForActionXml;
@@ -54,6 +63,11 @@ import org.apache.isis.core.metamodel.facets.actions.layout.CssClassFacetForActi
 import org.apache.isis.core.metamodel.facets.actions.layout.DescribedAsFacetForActionXml;
 import org.apache.isis.core.metamodel.facets.actions.layout.HiddenFacetForActionLayoutXml;
 import org.apache.isis.core.metamodel.facets.actions.layout.NamedFacetForActionXml;
+import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.core.metamodel.facets.collections.layout.CssClassFacetForCollectionXml;
 import org.apache.isis.core.metamodel.facets.collections.layout.DefaultViewFacetForCollectionXml;
 import org.apache.isis.core.metamodel.facets.collections.layout.DescribedAsFacetForCollectionXml;
@@ -61,7 +75,18 @@ import org.apache.isis.core.metamodel.facets.collections.layout.HiddenFacetForCo
 import org.apache.isis.core.metamodel.facets.collections.layout.NamedFacetForCollectionXml;
 import org.apache.isis.core.metamodel.facets.collections.layout.PagedFacetForCollectionXml;
 import org.apache.isis.core.metamodel.facets.collections.layout.SortedByFacetForCollectionXml;
+import org.apache.isis.core.metamodel.facets.collections.sortedby.SortedByFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
 import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetXml;
+import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
+import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
+import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.CssClassFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.DescribedAsFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyXml;
@@ -70,6 +95,10 @@ import org.apache.isis.core.metamodel.facets.properties.propertylayout.MultiLine
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.NamedFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.RenderedAdjustedFacetForPropertyXml;
 import org.apache.isis.core.metamodel.facets.properties.propertylayout.TypicalLengthFacetForPropertyXml;
+import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCColumn;
+import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCColumnOwner;
+import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCGrid;
+import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.FCTab;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
@@ -150,15 +179,273 @@ public abstract class GridNormalizerServiceAbstract<G extends Grid>
     @Programmatic
     @Override
     public void complete(final G grid, final Class<?> domainClass) {
-        // TODO: do some different logic here...
         normalize(grid, domainClass);
+        final ObjectSpecification objectSpec = specificationLookup.loadSpecification(domainClass);
+
+        grid.visit(new FCGrid.VisitorAdapter() {
+            @Override
+            public void visit(final ActionLayoutData actionLayoutData) {
+                final ObjectAction objectAction = objectSpec.getObjectAction(actionLayoutData.getId());
+
+                setBookmarkingIfAny(actionLayoutData, objectAction);
+                setCssClassIfAny(actionLayoutData, objectAction);
+                setCssClassFaIfAny(actionLayoutData, objectAction);
+                setDescribedAsIfAny(actionLayoutData, objectAction);
+                setHiddenIfAny(actionLayoutData, objectAction);
+                setNamedIfAny(actionLayoutData, objectAction);
+                setActionPositionIfAny(actionLayoutData, objectAction);
+            }
+
+            @Override
+            public void visit(final CollectionLayoutData collectionLayoutData) {
+                final ObjectAssociation collection = objectSpec.getAssociation(collectionLayoutData.getId());
+
+                setCssClassIfAny(collectionLayoutData, collection);
+                setDefaultViewIfAny(collectionLayoutData, collection);
+                setDescribedAsIfAny(collectionLayoutData, collection);
+                setHiddenIfAny(collectionLayoutData, collection);
+                setNamedIfAny(collectionLayoutData, collection);
+                setPagedIfAny(collectionLayoutData, collection);
+                setSortedByIfAny(collectionLayoutData, collection);
+            }
+
+            @Override
+            public void visit(final PropertyLayoutData propertyLayoutData) {
+                final ObjectAssociation property = objectSpec.getAssociation(propertyLayoutData.getId());
+
+                setCssClassIfAny(propertyLayoutData, property);
+                setDescribedAsIfAny(propertyLayoutData, property);
+                setHiddenIfAny(propertyLayoutData, property);
+                setNamedIfAny(propertyLayoutData, property);
+                setLabelPositionIfAny(propertyLayoutData, property);
+                setMultiLineIfAny(propertyLayoutData, property);
+                setRenderedAsDayBeforeIfAny(propertyLayoutData, property);
+                setTypicalLengthIfAny(propertyLayoutData, property);
+            }
+
+            @Override
+            public void visit(final DomainObjectLayoutData domainObjectLayoutData) {
+                setBookmarkingIfAny(domainObjectLayoutData, objectSpec);
+                setCssClassIfAny(domainObjectLayoutData, objectSpec);
+                setCssClassFaIfAny(domainObjectLayoutData, objectSpec);
+                setDescribedAsIfAny(domainObjectLayoutData, objectSpec);
+                setNamedIfAny(domainObjectLayoutData, objectSpec);
+                setPluralIfAny(domainObjectLayoutData, objectSpec);
+            }
+        });
+    }
+
+    private static boolean isDoOp(final Facet facet) {
+        return facet != null && !facet.isNoop();
+    }
+
+    protected void setBookmarkingIfAny(
+            final HasBookmarking hasBookmarking,
+            final FacetHolder facetHolder) {
+        final BookmarkPolicyFacet bookmarkPolicyFacet = facetHolder.getFacet(BookmarkPolicyFacet.class);
+        if(isDoOp(bookmarkPolicyFacet)) {
+            final BookmarkPolicy bookmarking = bookmarkPolicyFacet.value();
+            if(bookmarking != null) {
+                hasBookmarking.setBookmarking(bookmarking);
+            }
+        }
+    }
+
+    protected void setCssClassIfAny(
+            final HasCssClass hasCssClass,
+            final FacetHolder facetHolder) {
+        final CssClassFacet cssClassFacet = facetHolder.getFacet(CssClassFacet.class);
+        if(isDoOp(cssClassFacet)) {
+            try {
+                // try...finally because CSS class may vary by object, and we pass in only null
+                final String cssClass = cssClassFacet.cssClass(null);
+                if(!Strings.isNullOrEmpty(cssClass)) {
+                    hasCssClass.setCssClass(cssClass);
+                }
+            } catch(Exception ignore) {
+                // ignore
+            }
+        }
+    }
+
+    protected void setCssClassFaIfAny(
+            final HasCssClassFa hasCssClassFa,
+            final FacetHolder facetHolder) {
+        final CssClassFaFacet cssClassFaFacet = facetHolder.getFacet(CssClassFaFacet.class);
+        if (isDoOp(cssClassFaFacet)) {
+            final String cssClassFa = cssClassFaFacet.value();
+            final CssClassFaPosition position = cssClassFaFacet.getPosition();
+            if(!Strings.isNullOrEmpty(cssClassFa)) {
+                hasCssClassFa.setCssClassFa(cssClassFa);
+                hasCssClassFa.setCssClassFaPosition(position.toActionLayoutPosition());
+            }
+        }
+    }
+
+    protected void setDefaultViewIfAny(
+            final CollectionLayoutData collectionLayoutData,
+            final FacetHolder facetHolder) {
+        final DefaultViewFacet defaultViewFacet = facetHolder.getFacet(DefaultViewFacet.class);
+        if(isDoOp(defaultViewFacet)) {
+            final String defaultView = defaultViewFacet.value();
+            if(!Strings.isNullOrEmpty(defaultView)) {
+                collectionLayoutData.setDefaultView(defaultView);
+            }
+        }
+    }
+
+    protected void setDescribedAsIfAny(
+            final HasDescribedAs hasDescribedAs,
+            final FacetHolder facetHolder) {
+        final DescribedAsFacet describedAsFacet = facetHolder.getFacet(DescribedAsFacet.class);
+        if(isDoOp(describedAsFacet)) {
+            final String describedAs = describedAsFacet.value();
+            if(!Strings.isNullOrEmpty(describedAs)) {
+                hasDescribedAs.setDescribedAs(describedAs);
+            }
+        }
     }
 
+    protected void setHiddenIfAny(
+            final HasHidden hasHidden,
+            final FacetHolder facetHolder) {
+        final HiddenFacet hiddenFacet = facetHolder.getFacet(HiddenFacet.class);
+        if (isDoOp(hiddenFacet)) {
+            final Where where = hiddenFacet.where();
+            if(where != null) {
+                hasHidden.setHidden(where);
+            }
+        }
+    }
+
+    protected void setLabelPositionIfAny(
+            final PropertyLayoutData propertyLayoutData,
+            final FacetHolder facetHolder) {
+        final LabelAtFacet labelAtFacet = facetHolder.getFacet(LabelAtFacet.class);
+        if(isDoOp(labelAtFacet)) {
+            final LabelPosition labelPosition = labelAtFacet.label();
+            if(labelPosition != null) {
+                propertyLayoutData.setLabelPosition(labelPosition);
+            }
+        }
+    }
+
+    protected void setMultiLineIfAny(
+            final PropertyLayoutData propertyLayoutData,
+            final FacetHolder facetHolder) {
+        final MultiLineFacet multiLineFacet = facetHolder.getFacet(MultiLineFacet.class);
+        if(isDoOp(multiLineFacet)) {
+            final int numberOfLines = multiLineFacet.numberOfLines();
+            if(numberOfLines > 0) {
+                propertyLayoutData.setMultiLine(numberOfLines);
+            }
+        }
+    }
+
+    protected void setNamedIfAny(
+            final HasNamed hasNamed,
+            final FacetHolder facetHolder) {
+        final NamedFacet namedFacet = facetHolder.getFacet(NamedFacet.class);
+        if(isDoOp(namedFacet)) {
+            final String named = namedFacet.value();
+            final boolean escaped = namedFacet.escaped();
+            if(!Strings.isNullOrEmpty(named)){
+                hasNamed.setNamed(named);
+                hasNamed.setNamedEscaped(escaped);
+            }
+        }
+    }
+
+    protected void setPagedIfAny(
+            final CollectionLayoutData collectionLayoutData,
+            final FacetHolder facetHolder) {
+        final PagedFacet pagedFacet = facetHolder.getFacet(PagedFacet.class);
+        if(isDoOp(pagedFacet)) {
+            final int value = pagedFacet.value();
+            if(value > 0) {
+                collectionLayoutData.setPaged(value);
+            }
+        }
+    }
+
+    protected void setPluralIfAny(
+            final DomainObjectLayoutData domainObjectLayoutData,
+            final FacetHolder facetHolder) {
+        final PluralFacet pluralFacet = facetHolder.getFacet(PluralFacet.class);
+        if(isDoOp(pluralFacet)) {
+            final String plural = pluralFacet.value();
+            if(!Strings.isNullOrEmpty(plural)) {
+                domainObjectLayoutData.setPlural(plural);
+            }
+        }
+    }
+
+
+    protected void setActionPositionIfAny(
+            final ActionLayoutData actionLayoutData,
+            final FacetHolder facetHolder) {
+        final ActionPositionFacet actionPositionFacet = facetHolder.getFacet(ActionPositionFacet.class);
+        if(isDoOp(actionPositionFacet)) {
+            final ActionLayout.Position position = actionPositionFacet.position();
+            if(position != null) {
+                actionLayoutData.setPosition(position);
+            }
+        }
+    }
+
+    protected void setRenderedAsDayBeforeIfAny(
+            final PropertyLayoutData propertyLayoutData,
+            final FacetHolder facetHolder) {
+        final RenderedAdjustedFacet renderedAdjustedFacet = facetHolder.getFacet(RenderedAdjustedFacet.class);
+        if(isDoOp(renderedAdjustedFacet)) {
+            final int adjusted = renderedAdjustedFacet.value();
+            propertyLayoutData.setRenderedAsDayBefore(adjusted != 0);
+        }
+    }
+
+    protected void setSortedByIfAny(
+            final CollectionLayoutData collectionLayoutData,
+            final FacetHolder facetHolder) {
+        final SortedByFacet sortedByFacet = facetHolder.getFacet(SortedByFacet.class);
+        if(isDoOp(sortedByFacet)) {
+            final Class<? extends Comparator<?>> className = sortedByFacet.value();
+            if(className != null) {
+                collectionLayoutData.setSortedBy(className.getCanonicalName());
+            }
+        }
+    }
+
+    protected void setTypicalLengthIfAny(
+            final PropertyLayoutData propertyLayoutData,
+            final FacetHolder facetHolder) {
+        final TypicalLengthFacet typicalLengthFacet = facetHolder.getFacet(TypicalLengthFacet.class);
+        if(isDoOp(typicalLengthFacet)) {
+            final int typicalLength = typicalLengthFacet.value();
+            if(typicalLength > 0) {
+                propertyLayoutData.setTypicalLength(typicalLength);
+            }
+        }
+    }
+
+
     @Programmatic
     @Override
     public void minimal(final G grid, final Class<?> domainClass) {
-        // TODO: do some different logic here...
         normalize(grid, domainClass);
+        grid.visit(new FCGrid.VisitorAdapter() {
+            @Override
+            public void visit(final ActionLayoutData actionLayoutData) {
+                actionLayoutData.getOwner().getActions().remove(actionLayoutData);
+            }
+
+            @Override public void visit(final CollectionLayoutData collectionLayoutData) {
+                collectionLayoutData.getOwner().getCollections().remove(this);
+            }
+
+            @Override public void visit(final PropertyLayoutData propertyLayoutData) {
+                propertyLayoutData.getOwner().getProperties().remove(this);
+            }
+        });
     }
     /**
      * Ensures that all object members (properties, collections and actions) are in the metadata.