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/master Commit: 6053d1a8efed2d5cae9cbbc8b0497796397686cd Parents: 5c83175 Author: Dan Haywood <d...@haywood-associates.co.uk> Authored: Wed Feb 10 10:21:00 2016 +0000 Committer: Dan Haywood <d...@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.