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/03/09 09:17:33 UTC

[1/8] isis git commit: ISIS-993: domain object facets (from grid XML) should overwrite existing facets in metamodel (if present)

Repository: isis
Updated Branches:
  refs/heads/master 986a8d4c2 -> 4241b4a52


ISIS-993: domain object facets (from grid XML) should overwrite existing facets in metamodel (if present)

... eg bookmarking, naming


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

Branch: refs/heads/master
Commit: cf14cead09f73fb3cca051be1fa99427ffb9b2e1
Parents: 986a8d4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 06:52:51 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 06:52:51 2016 +0000

----------------------------------------------------------------------
 .../BookmarkPolicyFacetForDomainObjectXml.java  | 42 ++++++++++++++++++
 .../CssClassFaFacetForDomainObjectXml.java      | 45 ++++++++++++++++++++
 .../CssClassFacetForDomainObjectXml.java        | 43 +++++++++++++++++++
 .../DescribedAsFacetForDomainObjectXml.java     | 43 +++++++++++++++++++
 .../NamedFacetForDomainObjectXml.java           | 45 ++++++++++++++++++++
 .../PluralFacetForDomainObjectXml.java          | 41 ++++++++++++++++++
 .../grid/GridSystemServiceAbstract.java         | 17 ++++++++
 7 files changed, 276 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java
new file mode 100644
index 0000000..4c46f16
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/BookmarkPolicyFacetForDomainObjectXml.java
@@ -0,0 +1,42 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
+import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetAbstract;
+
+public class BookmarkPolicyFacetForDomainObjectXml extends BookmarkPolicyFacetAbstract {
+
+    public static BookmarkPolicyFacet create(final DomainObjectLayoutData domainObjectLayout, final FacetHolder holder) {
+        if (domainObjectLayout == null) {
+            return null;
+        }
+        final BookmarkPolicy bookmarkPolicy = domainObjectLayout.getBookmarking();
+        return bookmarkPolicy != null && bookmarkPolicy != BookmarkPolicy.NEVER ? new BookmarkPolicyFacetForDomainObjectXml(bookmarkPolicy, holder) : null;
+    }
+
+    private BookmarkPolicyFacetForDomainObjectXml(final BookmarkPolicy bookmarkPolicy, final FacetHolder holder) {
+        super(bookmarkPolicy, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java
new file mode 100644
index 0000000..3b0d471
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFaFacetForDomainObjectXml.java
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacetAbstract;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
+
+public class CssClassFaFacetForDomainObjectXml extends CssClassFaFacetAbstract {
+
+    public static CssClassFaFacet create(final DomainObjectLayoutData domainObjectLayout, final FacetHolder holder) {
+        if(domainObjectLayout == null) {
+            return null;
+        }
+        final String cssClassFa = Strings.emptyToNull(domainObjectLayout.getCssClassFa());
+        CssClassFaPosition cssClassFaPosition = CssClassFaPosition.from(domainObjectLayout.getCssClassFaPosition());
+        return cssClassFa != null ? new CssClassFaFacetForDomainObjectXml(cssClassFa, cssClassFaPosition, holder) : null;
+    }
+
+    private CssClassFaFacetForDomainObjectXml(final String value, final CssClassFaPosition position, final FacetHolder holder) {
+        super(value, position, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java
new file mode 100644
index 0000000..d931134
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetForDomainObjectXml.java
@@ -0,0 +1,43 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacetAbstract;
+
+public class CssClassFacetForDomainObjectXml extends CssClassFacetAbstract {
+
+    public static CssClassFacet create(DomainObjectLayoutData domainObjectLayout, FacetHolder holder) {
+        if(domainObjectLayout == null) {
+            return null;
+        }
+        final String cssClass = Strings.emptyToNull(domainObjectLayout.getCssClass());
+        return cssClass != null ? new CssClassFacetForDomainObjectXml(cssClass, holder) : null;
+    }
+
+    private CssClassFacetForDomainObjectXml(String value, FacetHolder holder) {
+        super(value, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java
new file mode 100644
index 0000000..3b8273a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DescribedAsFacetForDomainObjectXml.java
@@ -0,0 +1,43 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
+import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacetAbstract;
+
+public class DescribedAsFacetForDomainObjectXml extends DescribedAsFacetAbstract {
+
+    public static DescribedAsFacet create(DomainObjectLayoutData domainObjectLayout, FacetHolder holder) {
+        if(domainObjectLayout == null) {
+            return null;
+        }
+        final String describedAs = Strings.emptyToNull(domainObjectLayout.getDescribedAs());
+        return describedAs != null ? new DescribedAsFacetForDomainObjectXml(describedAs, holder) : null;
+    }
+
+    private DescribedAsFacetForDomainObjectXml(String value, FacetHolder holder) {
+        super(value, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/NamedFacetForDomainObjectXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/NamedFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/NamedFacetForDomainObjectXml.java
new file mode 100644
index 0000000..775a832
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/NamedFacetForDomainObjectXml.java
@@ -0,0 +1,45 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract;
+
+public class NamedFacetForDomainObjectXml extends NamedFacetAbstract {
+
+    public static NamedFacet create(final DomainObjectLayoutData domainObjectLayout, final FacetHolder holder) {
+        if(domainObjectLayout == null) {
+            return null;
+        }
+        final String named = Strings.emptyToNull(domainObjectLayout.getNamed());
+        Boolean escaped = domainObjectLayout.getNamedEscaped();
+        return named != null ? new NamedFacetForDomainObjectXml(named, (escaped == null || escaped), holder) : null;
+    }
+
+    private NamedFacetForDomainObjectXml(final String value, final boolean escaped, final FacetHolder holder) {
+
+        super(value, escaped, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PluralFacetForDomainObjectXml.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PluralFacetForDomainObjectXml.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PluralFacetForDomainObjectXml.java
new file mode 100644
index 0000000..170567e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PluralFacetForDomainObjectXml.java
@@ -0,0 +1,41 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
+
+import com.google.common.base.Strings;
+
+import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
+import org.apache.isis.core.metamodel.facets.object.plural.PluralFacetAbstract;
+
+public class PluralFacetForDomainObjectXml extends PluralFacetAbstract {
+
+    public static PluralFacet create(final DomainObjectLayoutData domainObjectLayout, final FacetHolder holder) {
+        if(domainObjectLayout == null) {
+            return null;
+        }
+        final String plural = Strings.emptyToNull(domainObjectLayout.getPlural());
+        return plural != null ? new PluralFacetForDomainObjectXml(plural, holder) : null;
+    }
+
+    private PluralFacetForDomainObjectXml(final String value, final FacetHolder holder) {
+        super(value, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/cf14cead/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
index 3b25c17..54ea7a2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridSystemServiceAbstract.java
@@ -83,6 +83,12 @@ 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.domainobjectlayout.BookmarkPolicyFacetForDomainObjectXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFaFacetForDomainObjectXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFacetForDomainObjectXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DescribedAsFacetForDomainObjectXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.NamedFacetForDomainObjectXml;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.PluralFacetForDomainObjectXml;
 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;
@@ -217,6 +223,17 @@ public abstract class GridSystemServiceAbstract<G extends Grid>
             private int actionCollectionSequence = 1;
 
             @Override
+            public void visit(final DomainObjectLayoutData domainObjectLayoutData) {
+
+                FacetUtil.addOrReplaceFacet(BookmarkPolicyFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec));
+                FacetUtil.addOrReplaceFacet(CssClassFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec));
+                FacetUtil.addOrReplaceFacet(CssClassFaFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec));
+                FacetUtil.addOrReplaceFacet(DescribedAsFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec));
+                FacetUtil.addOrReplaceFacet(NamedFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec));
+                FacetUtil.addOrReplaceFacet(PluralFacetForDomainObjectXml.create(domainObjectLayoutData, objectSpec));
+            }
+
+            @Override
             public void visit(final ActionLayoutData actionLayoutData) {
                 final ActionLayoutDataOwner actionLayoutDataOwner = actionLayoutData.getOwner();
                 final ObjectAction objectAction = objectActionById.get(actionLayoutData.getId());


[4/8] isis git commit: ISIS-1313: tiny fix for mojo docs.

Posted by da...@apache.org.
ISIS-1313: tiny fix for mojo docs.


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

Branch: refs/heads/master
Commit: 88a80fcaa640f0ca9dbe8ee890a88e607b67b85b
Parents: c024ce5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 07:17:29 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 07:17:29 2016 +0000

----------------------------------------------------------------------
 .../src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/88a80fca/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc b/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
index 5fac71a..f4c3028 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
@@ -375,7 +375,7 @@ DTO from the XSD generated by the preceding profile:
                     <id>xjc-generate</id>
                     <phase>generate-sources</phase>
                     <goals>
-                    <goal>generate</goal>
+                        <goal>generate</goal>
                     </goals>
                 </execution>
             </executions>


[5/8] isis git commit: ISIS-1313: adding missing fa- icon for Dto mixin action.

Posted by da...@apache.org.
ISIS-1313: adding missing fa- icon for Dto mixin action.


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

Branch: refs/heads/master
Commit: a97462f187c72d2788c49327b3c3205f54be8109
Parents: 88a80fc
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 07:18:06 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 07:18:06 2016 +0000

----------------------------------------------------------------------
 .../java/org/apache/isis/applib/services/dto/Dto_downloadXsd.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/a97462f1/core/applib/src/main/java/org/apache/isis/applib/services/dto/Dto_downloadXsd.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/dto/Dto_downloadXsd.java b/core/applib/src/main/java/org/apache/isis/applib/services/dto/Dto_downloadXsd.java
index a139f15..a50744e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/dto/Dto_downloadXsd.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/dto/Dto_downloadXsd.java
@@ -64,7 +64,7 @@ public class Dto_downloadXsd {
             restrictTo = RestrictTo.PROTOTYPING
     )
     @ActionLayout(
-
+            cssClassFa = "fa-download"
     )
     @MemberOrder(sequence = "500.2")
     public Object $$(


[8/8] isis git commit: ISIS-1317: Object_rebuildMetamodel mixin; also changes to supporting services.

Posted by da...@apache.org.
ISIS-1317: Object_rebuildMetamodel mixin; also changes to supporting services.

Specifically:
- GridService (and GridLoaderService), to remove grid for a domain class
- MetaModelService, to invalidate and recreate an ObjectSpecification

In addition:
- in GridService/GridLoaderService, introduced supportsReloading() rather than using deploymentCategory#isProduction() directly.  This will make it easier to be overridden in application code.

Also updated docs.


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

Branch: refs/heads/master
Commit: 4241b4a521646143060bd20e089c527525d599b0
Parents: 2c3a04c
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 08:00:07 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 08:00:07 2016 +0000

----------------------------------------------------------------------
 .../guides/_rgcms_classes_mixins_Object.adoc    | 58 ++++++++++++++----
 .../_rgcms_classes_mixins_Persistable.adoc      | 12 +++-
 .../guides/_rgsvc_api_MetamodelService.adoc     |  4 ++
 .../guides/_rgsvc_spi_GridLoaderService.adoc    | 12 ++--
 .../asciidoc/guides/_rgsvc_spi_GridService.adoc | 32 +++++-----
 .../applib/services/grid/GridLoaderService.java | 11 ++++
 .../isis/applib/services/grid/GridService.java  | 12 ++++
 .../layout/Object_rebuildMetamodel.java         | 58 ++++++++++++++++++
 .../services/metamodel/MetaModelService.java    |  4 ++
 .../facets/object/grid/GridFacetDefault.java    | 14 ++---
 .../facets/object/grid/GridFacetFactory.java    |  7 +--
 .../services/grid/GridLoaderServiceDefault.java | 64 ++++++++++++++------
 .../services/grid/GridServiceDefault.java       | 11 +++-
 .../metamodel/MetaModelServiceDefault.java      | 26 ++++----
 14 files changed, 248 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Object.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Object.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Object.adoc
index 74b789a..9886577 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Object.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Object.adoc
@@ -8,31 +8,67 @@
 (As of `1.12.0-SNAPSHOT`) the framework provides a single mixin that contributes to simply `java.lang.Object`.  It provides the ability to download the layout XML for any domain object (in practical terms: entities and view models).
 
 
-The `Object_downloadLayoutXml` mixin defines the following action:
+[[_rgcms_classes_mixins_Object_downloadLayoutXml]]
+== `downloadLayoutXml()`
+
+The `Object_downloadLayoutXml` mixin provides an action to download the xref:ugfun.adoc#_ugfun_object-layout_dynamic_xml[layout XML] for the current domain object.  It has the following signature:
 
 [source,java]
 ----
-@Mixin
-public class Object_downloadLayoutXml {
-    public Object_downloadLayoutXml(final Object object) { ... }     // <1>
-    public String downloadLayoutXml(final String fileName) { ... }   // <2>
+public Object downloadLayoutXml(
+    @ParameterLayout(named = "File name")
+    final String fileName,
+    final LayoutService.Style style) {          // <1>
     ...
 }
 ----
-<1> provided as an action to all objects
-<2> actually this method is called '$$' in the code, a "special case" that means to use the derive the action name
-from the class name.
+<1> either current, complete, normalized or minimal.
+
+See the documentation on xref:ugfun.adoc#_ugfun_object-layout_dynamic_xml[layout XML] and also
+the xref:rgsvc.adoc#_rgsvc_api_LayoutService[`LayoutService`] for more information on these styles
 
 
-== Appearance in the UI
+=== Appearance in the UI
 
-This mixin property are all associated with the "Metadata" fieldset.
+This mixin actions are all associated with the "Metadata" fieldset.
 
 A number of other xref:rgcms.adoc#_rgcms_classes_mixins_Persistable[mixins] also contribute properties and actions to the "Metadata" fieldset.
 
 
 
-== Related Services
+=== Related Services
 
 This mixin calls xref:rgsvc.adoc#_rgsvc_api_LayoutService[`LayoutService`] to obtain the layout XML.
 
+
+
+
+[[_rgcms_classes_mixins_Object_rebuildMetamodel]]
+== `rebuildMetamodel()`
+
+The `Object_rebuildMetamodel` mixin provides the ability to discard the current internal metamodel data (an instance
+of `ObjectSpecification`) for the domain class of the rendered object, and recreate from code and other sources (most
+notably, layout XML data).  It has the following signature:
+
+[source,java]
+----
+public void rebuildMetamodel() {
+    ...
+}
+----
+
+
+=== Appearance in the UI
+
+This mixin actions are all associated with the "Metadata" fieldset.
+
+A number of other xref:rgcms.adoc#_rgcms_classes_mixins_Persistable[mixins] also contribute properties and actions to
+the "Metadata" fieldset.
+
+
+
+=== Related Services
+
+This mixin calls xref:rgsvc.adoc#_rgsvc_api_MetaModelService[`MetaModelService`] and the
+xref:rgsvc.adoc#_rgsvc_spi_GridService[`GridService`] to invalidate their caches.
+

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Persistable.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Persistable.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Persistable.adoc
index 35f0d5d..160f7ec 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Persistable.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgcms_classes_mixins_Persistable.adoc
@@ -13,7 +13,17 @@ need to write any code to obtain the mixins that contribute to this interface.
 == `downloadJdoMetadata()`
 
 The `Persistable_downloadJdoMetadata` mixin provides an action which allows the
-JDO link:http://www.datanucleus.org/products/datanucleus/jdo/metadata_xml.html[class metadata] to be downloaded as XML.  The mixin's action returns the XML text wrapped up in a xref:rgcms.adoc#_rgcms_classes_value-types_Clob[`Clob`].
+JDO link:http://www.datanucleus.org/products/datanucleus/jdo/metadata_xml.html[class metadata] to be downloaded as XML.  It has the following signature:
+
+[source,java]
+----
+public Clob downloadJdoMetadata(                    // <1>
+    @ParameterLayout(named = ".jdo file name")
+    final String fileName) {
+    ...
+}
+----
+<1> returns the XML text wrapped up in a xref:rgcms.adoc#_rgcms_classes_value-types_Clob[`Clob`].
 
 
 === Appearance in the UI

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
index ea6d9de..04e2d40 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_api_MetamodelService.adoc
@@ -22,10 +22,14 @@ public interface MetaModelService {
     Class<?> fromObjectType(final String objectType);   // <1>
     @Programmatic
     String toObjectType(final Class<?> domainType);     // <2>
+    @Programmatic
+    void rebuild(final Class<?> domainType);            // <3>
 }
 ----
 <1> reverse lookup of a domain class' object type
 <2> lookup of a domain class' object type
+<3> (`1.12.0-SNAPSHOT`) invalidate and rebuild the internal metadata (an `ObjectSpecification`) for the specified
+domain type.
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridLoaderService.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridLoaderService.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridLoaderService.adoc
index c406c17..3990213 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridLoaderService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridLoaderService.adoc
@@ -15,12 +15,16 @@ The SPI defined by this service is:
 [source,java]
 ----
 public interface GridLoaderService {
-    boolean existsFor(Class<?> domainClass);    // <1>
-    Grid load(final Class<?> domainClass);      // <2>
+    boolean supportsReloading();                // <1>
+    void remove(Class<?> domainClass);          // <2>
+    boolean existsFor(Class<?> domainClass);    // <3>
+    Grid load(final Class<?> domainClass);      // <4>
 }
 ----
-<1> whether any persisted layout metadata (eg a `.layout.xml` file) exists for this domain class.
-<2> returns a new instance of a xref:rgcms.adoc#_rgcms_classes_layout_component[`Grid`] for the specified domain class, eg as loaded from a `layout.xml` file.  If none exists, will return null (and the calling xref:rgsvc.adoc#_rgsvc_spi_GridService[`GridService`] will use xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`] to obtain a default grid for the domain class).
+<1> whether dynamic reloading of layouts is enabled.  The default implementation enables reloading for prototyping, disables in production
+<2> support metamodel invalidation/rebuilding of spec, eg as called by this xref:rgcms.adoc#_rgcms_classes_mixins_Object_rebuildMetamodel[Object mixin] action.
+<3> whether any persisted layout metadata (eg a `.layout.xml` file) exists for this domain class.
+<4> returns a new instance of a xref:rgcms.adoc#_rgcms_classes_layout_component[`Grid`] for the specified domain class, eg as loaded from a `layout.xml` file.  If none exists, will return null (and the calling xref:rgsvc.adoc#_rgsvc_spi_GridService[`GridService`] will use xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`] to obtain a default grid for the domain class).
 
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridService.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridService.adoc b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridService.adoc
index 5a6839d..5d15f8f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_rgsvc_spi_GridService.adoc
@@ -23,22 +23,26 @@ The SPI defined by this service is:
 [source,java]
 ----
 public interface GridService {
-    boolean existsFor(Class<?> domainClass);    // <1>
-    Grid load(final Class<?> domainClass);      // <2>
-    Grid defaultGridFor(Class<?> domainClass);  // <3>
-    Grid normalize(final Grid grid);            // <4>
-    Grid complete(Grid grid);                   // <5>
-    Grid minimal(Grid grid);                    // <6>
+    boolean supportsReloading();                // <1>
+    void remove(Class<?> domainClass);          // <2>
+    boolean existsFor(Class<?> domainClass);    // <3>
+    Grid load(final Class<?> domainClass);      // <4>
+    Grid defaultGridFor(Class<?> domainClass);  // <5>
+    Grid normalize(final Grid grid);            // <6>
+    Grid complete(Grid grid);                   // <7>
+    Grid minimal(Grid grid);                    // <8>
 }
 ----
-<1> whether any persisted layout metadata (eg a `.layout.xml` file) exists for this domain class.  Just delegates to corresponding method in xref:rgsvc.adoc#_rgsvc_spi_GridLoaderService[`GridLoaderService`].
-<2> returns a new instance of a xref:rgcms.adoc#_rgcms_classes_layout_component[`Grid`] for the specified domain class, eg as loaded from a `layout.xml` file.  If none exists, will return null (and the calling xref:rgsvc.adoc#_rgsvc_spi_GridService[`GridService`] will use xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`] to obtain a default grid for the domain class).
-<3> returns a default grid, eg two columns in ratio 4:8.  Used when no existing grid layout exists for a domain class.
-<4> validates and normalizes a grid, modifying the grid so that all of the domain object's members (properties, collections, actions) are bound to regions of the grid.  This is done using existing metadata, most notably that of the xref:rgant.adoc#_rgant_MemberOrder[`@MemberOrder`] annotation.  Such a grid, if persisted as the layout XML file for the domain class, allows the `@MemberOrder` annotation to be removed from the source code of the domain class (but other annotations must be retained).
-<5> Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML.  Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (xref:rgant.adoc#_rgant_ActionLayout[`@ActionLayout`], xref:rgant.adoc#_rgant_PropertyLayout[`@PropertyLayout`] and xref:rgant.adoc#_rgant_CollectionLayout[`@CollectionLayout`]) to be removed from the source code of the domain class.
-<6> Takes a normalized grid and strips out removes all members, leaving only the grid structure.  Such a grid, if persisted as the layout XML file for the domain class, requires that the xref:rgant.adoc#_rgant_MemberOrder[`@MemberOrder`] annotation is retained in the source code of said class in order to bind members to the regions of the grid.
-
-The first two methods just delegate to the corresponding methods in xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`], while the last four delegate to the  corresponding method in xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`].  The service inspects the ``Grid``'s concrete class to determine which actual `GridSystemService` instance to delegate to.
+<1> whether dynamic reloading of layouts is enabled.  The default implementation enables reloading for prototyping, disables in production
+<2> support metamodel invalidation/rebuilding of spec, eg as called by this xref:rgcms.adoc#_rgcms_classes_mixins_Object_rebuildMetamodel[Object mixin] action.
+<3> whether any persisted layout metadata (eg a `.layout.xml` file) exists for this domain class.  Just delegates to corresponding method in xref:rgsvc.adoc#_rgsvc_spi_GridLoaderService[`GridLoaderService`].
+<4> returns a new instance of a xref:rgcms.adoc#_rgcms_classes_layout_component[`Grid`] for the specified domain class, eg as loaded from a `layout.xml` file.  If none exists, will return null (and the calling xref:rgsvc.adoc#_rgsvc_spi_GridService[`GridService`] will use xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`] to obtain a default grid for the domain class).
+<5> returns a default grid, eg two columns in ratio 4:8.  Used when no existing grid layout exists for a domain class.
+<6> validates and normalizes a grid, modifying the grid so that all of the domain object's members (properties, collections, actions) are bound to regions of the grid.  This is done using existing metadata, most notably that of the xref:rgant.adoc#_rgant_MemberOrder[`@MemberOrder`] annotation.  Such a grid, if persisted as the layout XML file for the domain class, allows the `@MemberOrder` annotation to be removed from the source code of the domain class (but other annotations must be retained).
+<7> Takes a normalized grid and enriches it with additional metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML.  Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations (xref:rgant.adoc#_rgant_ActionLayout[`@ActionLayout`], xref:rgant.adoc#_rgant_PropertyLayout[`@PropertyLayout`] and xref:rgant.adoc#_rgant_CollectionLayout[`@CollectionLayout`]) to be removed from the source code of the domain class.
+<8> Takes a normalized grid and strips out removes all members, leaving only the grid structure.  Such a grid, if persisted as the layout XML file for the domain class, requires that the xref:rgant.adoc#_rgant_MemberOrder[`@MemberOrder`] annotation is retained in the source code of said class in order to bind members to the regions of the grid.
+
+The first four methods just delegate to the corresponding methods in xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`], while the last four delegate to the  corresponding method in xref:rgsvc.adoc#_rgsvc_spi_GridSystemService[`GridSystemService`].  The service inspects the ``Grid``'s concrete class to determine which actual `GridSystemService` instance to delegate to.
 
 
 == Implementation

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
index c6c49c2..3ca1a78 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
@@ -22,6 +22,17 @@ import org.apache.isis.applib.layout.component.Grid;
 public interface GridLoaderService {
 
     /**
+     * Whether dynamic reloading of layouts is enabled.
+     */
+    @Programmatic
+    boolean supportsReloading();
+
+    /**
+     * To support metamodel invalidation/rebuilding of spec.
+     */
+    @Programmatic void remove(Class<?> domainClass);
+
+    /**
      * Whether any persisted layout metadata (eg a <code>.layout.xml</code> file) exists for this domain class.
      */
     @Programmatic

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
index fc198eb..f60a13b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
@@ -28,6 +28,18 @@ import org.apache.isis.applib.layout.component.Grid;
 public interface GridService {
 
     /**
+     * Whether dynamic reloading of layouts is enabled.
+     */
+    @Programmatic
+    boolean supportsReloading();
+
+    /**
+     * To support metamodel invalidation/rebuilding of spec.
+     */
+    @Programmatic
+    void remove(Class<?> domainClass);
+
+    /**
      * Whether any persisted layout metadata (eg a <code>.layout.xml</code> file) exists for this domain class.
      */
     @Programmatic

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_rebuildMetamodel.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_rebuildMetamodel.java b/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_rebuildMetamodel.java
new file mode 100644
index 0000000..8dc1972
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/layout/Object_rebuildMetamodel.java
@@ -0,0 +1,58 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.applib.services.layout;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.services.metamodel.MetaModelService;
+
+@Mixin
+public class Object_rebuildMetamodel {
+
+    private final Object object;
+
+    public Object_rebuildMetamodel(final Object object) {
+        this.object = object;
+    }
+
+    public static class ActionDomainEvent extends org.apache.isis.applib.IsisApplibModule.ActionDomainEvent<Object_rebuildMetamodel> {}
+
+    @Action(
+            domainEvent = ActionDomainEvent.class,
+            semantics = SemanticsOf.IDEMPOTENT,
+            restrictTo = RestrictTo.PROTOTYPING
+    )
+    @ActionLayout(
+            cssClassFa = "fa-trash-o",
+            position = ActionLayout.Position.PANEL_DROPDOWN
+    )
+    @MemberOrder(name = "Metadata", sequence = "710.1")
+    public void $$() {
+        metaModelService.rebuild(object.getClass());
+    }
+
+    @Inject
+    MetaModelService metaModelService;
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 107a58b..91baf40 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@ -43,4 +43,8 @@ public interface MetaModelService {
     String toObjectType(final Class<?> domainType);
 
 
+    @Programmatic
+    void rebuild(final Class<?> domainType);
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/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 6a3374c..b70ea17 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
@@ -23,7 +23,6 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.layout.component.Grid;
 import org.apache.isis.applib.services.grid.GridService;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -43,27 +42,23 @@ public class GridFacetDefault
 
     public static GridFacet create(
             final FacetHolder facetHolder,
-            final GridService gridService,
-            final DeploymentCategory deploymentCategory) {
-        return new GridFacetDefault(facetHolder, gridService, deploymentCategory);
+            final GridService gridService) {
+        return new GridFacetDefault(facetHolder, gridService);
     }
 
-    private final DeploymentCategory deploymentCategory;
     private final GridService gridService;
 
     private Grid grid;
 
     private GridFacetDefault(
             final FacetHolder facetHolder,
-            final GridService gridService,
-            final DeploymentCategory deploymentCategory) {
+            final GridService gridService) {
         super(GridFacetDefault.type(), facetHolder, Derivation.NOT_DERIVED);
         this.gridService = gridService;
-        this.deploymentCategory = deploymentCategory;
     }
 
     public Grid getGrid() {
-        if (deploymentCategory.isProduction() && this.grid != null) {
+        if (!gridService.supportsReloading() && this.grid != null) {
             return this.grid;
         }
         final Class<?> domainClass = getSpecification().getCorrespondingClass();
@@ -85,5 +80,4 @@ public class GridFacetDefault
         return (ObjectSpecification) getFacetHolder();
     }
 
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
index c39acec..e91f2ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/grid/GridFacetFactory.java
@@ -39,12 +39,9 @@ public class GridFacetFactory extends FacetFactoryAbstract implements ServicesIn
     public void process(final ProcessClassContext processClassContext) {
         final FacetHolder facetHolder = processClassContext.getFacetHolder();
 
-        final GridService gridService =
-                servicesInjector.lookupService(GridService.class);
+        final GridService gridService = servicesInjector.lookupService(GridService.class);
 
-        FacetUtil.addFacet(
-                GridFacetDefault.create(facetHolder,
-                        gridService, getDeploymentCategory()));
+        FacetUtil.addFacet(GridFacetDefault.create(facetHolder, gridService));
     }
 
     private ServicesInjector servicesInjector;

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
index a62cd54..76a74b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/GridLoaderServiceDefault.java
@@ -58,7 +58,7 @@ public class GridLoaderServiceDefault implements GridLoaderService, DeploymentCa
     private final Map<Class<?>, String> badXmlByClass = Maps.newHashMap();
 
     // cache (used only in prototyping mode)
-    private final Map<String, Grid> pageByXml = Maps.newHashMap();
+    private final Map<String, Grid> gridByXml = Maps.newHashMap();
 
     private List<Class<? extends Grid>> pageImplementations;
 
@@ -76,6 +76,23 @@ public class GridLoaderServiceDefault implements GridLoaderService, DeploymentCa
                 .toList();
     }
 
+    @Override
+    public boolean supportsReloading() {
+        return !deploymentCategory.isProduction();
+    }
+
+    @Override
+    public void remove(final Class<?> domainClass) {
+        if(!supportsReloading()) {
+            return;
+        }
+        badXmlByClass.remove(domainClass);
+        final String xml = loadXml(domainClass);
+        if(xml == null) {
+            return;
+        }
+        gridByXml.remove(xml);
+    }
 
     @Override
     @Programmatic
@@ -87,24 +104,13 @@ public class GridLoaderServiceDefault implements GridLoaderService, DeploymentCa
     @Override
     @Programmatic
     public Grid load(final Class<?> domainClass) {
-        final String resourceName = resourceNameFor(domainClass);
-        final String xml;
-        try {
-            xml = resourceContentOf(domainClass, resourceName);
-        } catch (IOException | IllegalArgumentException ex) {
-
-            if(LOG.isDebugEnabled()) {
-                final String message = String .format(
-                        "Failed to locate file %s (relative to %s.class); ex: %s)",
-                        resourceName, domainClass.getName(), ex.getMessage());
-
-                LOG.debug(message);
-            }
+        final String xml = loadXml(domainClass);
+        if(xml == null) {
             return null;
         }
 
-        if(!deploymentCategory.isProduction()) {
-            final Grid grid = pageByXml.get(xml);
+        if(supportsReloading()) {
+            final Grid grid = gridByXml.get(xml);
             if(grid != null) {
                 return grid;
             }
@@ -127,21 +133,22 @@ public class GridLoaderServiceDefault implements GridLoaderService, DeploymentCa
 
             final Grid grid = (Grid) jaxbService.fromXml(context, xml);
             grid.setDomainClass(domainClass);
-            if(!deploymentCategory.isProduction()) {
-                pageByXml.put(xml, grid);
+            if(supportsReloading()) {
+                gridByXml.put(xml, grid);
             }
             return grid;
         } catch(Exception ex) {
 
-            if(!deploymentCategory.isProduction()) {
+            if(supportsReloading()) {
                 // save fact that this was bad XML, so that we don't log again if called next time
                 badXmlByClass.put(domainClass, xml);
             }
 
             // note that we don't blacklist if the file exists but couldn't be parsed;
             // the developer might fix so we will want to retry.
+            final String resourceName = resourceNameFor(domainClass);
             final String message = "Failed to parse " + resourceName + " file (" + ex.getMessage() + ")";
-            if(deploymentCategory.isPrototyping()) {
+            if(supportsReloading()) {
                 container.warnUser(message);
             }
             LOG.warn(message);
@@ -150,6 +157,23 @@ public class GridLoaderServiceDefault implements GridLoaderService, DeploymentCa
         }
     }
 
+    private String loadXml(final Class<?> domainClass) {
+        final String resourceName = resourceNameFor(domainClass);
+        try {
+            return resourceContentOf(domainClass, resourceName);
+        } catch (IOException | IllegalArgumentException ex) {
+
+            if(LOG.isDebugEnabled()) {
+                final String message = String .format(
+                        "Failed to locate file %s (relative to %s.class); ex: %s)",
+                        resourceName, domainClass.getName(), ex.getMessage());
+
+                LOG.debug(message);
+            }
+            return null;
+        }
+    }
+
     private static String resourceContentOf(final Class<?> cls, final String resourceName) throws IOException {
         final URL url = Resources.getResource(cls, resourceName);
         return Resources.toString(url, Charset.defaultCharset());

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/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 087f5e4..9cdde9e 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
@@ -47,10 +47,19 @@ public class GridServiceDefault implements GridService {
     public static final String COMMON_TNS = "http://isis.apache.org/applib/layout/component";
     public static final String COMMON_SCHEMA_LOCATION = "http://isis.apache.org/applib/layout/component/component.xsd";
 
-
     // //////////////////////////////////////
 
     @Override
+    public boolean supportsReloading() {
+        return gridLoaderService.supportsReloading();
+    }
+
+    @Override
+    public void remove(final Class<?> domainClass) {
+        gridLoaderService.remove(domainClass);
+    }
+
+    @Override
     @Programmatic
     public boolean existsFor(final Class<?> domainClass) {
         return gridLoaderService.existsFor(domainClass);

http://git-wip-us.apache.org/repos/asf/isis/blob/4241b4a5/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 9a23a1d..25c4ba0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -18,13 +18,7 @@
  */
 package org.apache.isis.core.metamodel.services.metamodel;
 
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.base.Function;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
+import javax.inject.Inject;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,12 +26,14 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.grid.GridService;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderAware;
+import org.apache.isis.core.metamodel.spec.feature.Contributed;
 
 @DomainService(
         nature = NatureOfService.DOMAIN
@@ -48,7 +44,6 @@ public class MetaModelServiceDefault implements MetaModelService, SpecificationL
     private final static Logger LOG = LoggerFactory.getLogger(MetaModelServiceDefault.class);
 
 
-    //region > fromObjectType, toObjectType
     @Programmatic
     public Class<?> fromObjectType(final String objectType) {
         if(objectType == null) {
@@ -69,15 +64,24 @@ public class MetaModelServiceDefault implements MetaModelService, SpecificationL
         final ObjectSpecId objectSpecId = objectSpecIdFacet.value();
         return objectSpecId.asString();
     }
-    //endregion
 
-    //region > injected dependencies
+    @Override
+    public void rebuild(final Class<?> domainType) {
+        specificationLookup.invalidateCache(domainType);
+        gridService.remove(domainType);
+        final ObjectSpecification objectSpecification = specificationLookup.loadSpecification(domainType);
+        // ensure the spec is fully rebuilt
+        objectSpecification.getObjectActions(Contributed.INCLUDED);
+        objectSpecification.getAssociations(Contributed.INCLUDED);
+    }
+
     private SpecificationLoader specificationLookup;
 
     @Override
     public void setSpecificationLoader(final SpecificationLoader specificationLookup) {
         this.specificationLookup = specificationLookup;
     }
-    //endregion
 
+    @Inject
+    GridService gridService;
 }


[3/8] isis git commit: ISIS-1287: adding quote to the home page.

Posted by da...@apache.org.
ISIS-1287: adding quote to the home page.


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

Branch: refs/heads/master
Commit: c024ce5c04392bd9cb96a5fc27a5a8050a8dd501
Parents: 1cfb478
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 07:16:45 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 07:16:45 2016 +0000

----------------------------------------------------------------------
 adocs/documentation/src/main/asciidoc/index.html | 12 ++++++++++++
 1 file changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c024ce5c/adocs/documentation/src/main/asciidoc/index.html
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/index.html b/adocs/documentation/src/main/asciidoc/index.html
index 75dc5be..fd53aae 100644
--- a/adocs/documentation/src/main/asciidoc/index.html
+++ b/adocs/documentation/src/main/asciidoc/index.html
@@ -514,6 +514,18 @@
                                 <blockquote>
                                     <div class="row">
                                         <div class="large-12 medium-12">
+                                            <p>As students most of us prefer sticking with business logic than spending much time with UX enhancements.  Apache Isis provides a great platform to create a perfectly working prototypes with loads of inbuilt UX concerns and customizations without worrying a single bit on the GUI perspective.
+And I must say this: "Great Support from the development team"</p>
+                                            <small>Vishma Dias, University of Moratuwa, Sri Lanka.</small>
+                                        </div>
+                                    </div>
+                                </blockquote>
+                            </div>
+
+                            <div>
+                                <blockquote>
+                                    <div class="row">
+                                        <div class="large-12 medium-12">
                                             <p>From a Sprint retrospective:</p>
                                             <p>&quot;We normally don't see anything at all for the first three months, and now you're showing me working screens after two weeks&quot;</p>
                                             <small>Project programme manager</small>


[6/8] isis git commit: ISIS-1299: JAXB-annotated view models are now edited.

Posted by da...@apache.org.
ISIS-1299: JAXB-annotated view models are now edited.

I suspect that ISIS-993 also had broken other directly cloneable view models; anyway, is now fixed.


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

Branch: refs/heads/master
Commit: 981d731f3642ccbe67c3a8c78c677c1bf1794a4f
Parents: a97462f
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 07:23:48 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 07:23:48 2016 +0000

----------------------------------------------------------------------
 ...onInvocationFacetForDomainEventAbstract.java | 12 +++---
 ...nCollectionDerivedFromRecreatableObject.java |  3 +-
 ...eObjectFacetForXmlRootElementAnnotation.java | 13 ++++++
 .../viewer/wicket/model/models/EntityModel.java | 39 +-----------------
 .../viewer/wicket/model/models/ScalarModel.java | 42 ++++++++++++++------
 .../components/property/PropertyEditPanel.java  |  8 +++-
 6 files changed, 58 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/981d731f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index e5fa819..d604d3c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -412,10 +412,10 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             }
             if (result == null) {
                 if(targetAdapter.getSpecification().isViewModelCloneable(targetAdapter)) {
-                    // if this was a void method on a ViewModel.Cloneable, then (to save boilerplate in the domain)
+                    // if this was a void method on cloneable view model, then (to save boilerplate in the domain)
                     // automatically do the clone and return the clone instead.
-                    final ViewModel.Cloneable cloneable = (ViewModel.Cloneable) targetAdapter.getObject();
-                    final Object clone = cloneable.clone();
+                    final ViewModelFacet facet = targetAdapter.getSpecification().getFacet(ViewModelFacet.class);
+                    final Object clone = facet.clone(targetAdapter.getObject());
                     final ObjectAdapter clonedAdapter = getAdapterManager().adapterFor(clone);
                     return InvocationResult.forActionThatReturned(clonedAdapter);
                 }
@@ -425,10 +425,10 @@ public abstract class ActionInvocationFacetForDomainEventAbstract
             ObjectAdapter resultAdapter = getAdapterManager().adapterFor(result);
 
             if(resultAdapter.getSpecification().isViewModelCloneable(resultAdapter)) {
-                // if the object returned is a ViewModel.Cloneable, then
+                // if the object returned is cloneable, then
                 // (to save boilerplate in the domain) automatically do the clone.
-                final ViewModel.Cloneable cloneable = (ViewModel.Cloneable) result;
-                result = cloneable.clone();
+                final ViewModelFacet facet = resultAdapter.getSpecification().getFacet(ViewModelFacet.class);
+                result = facet.clone(result);
                 resultAdapter = getAdapterManager().adapterFor(result);
             }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/981d731f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java
index 5cc87f1..94ee319 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/DisabledFacetOnCollectionDerivedFromRecreatableObject.java
@@ -35,7 +35,8 @@ public class DisabledFacetOnCollectionDerivedFromRecreatableObject extends Disab
     @Override
     public String disabledReason(final ObjectAdapter target) {
         final ViewModelFacet facet = target.getSpecification().getFacet(ViewModelFacet.class);
-        final boolean cloneable = facet.isCloneable(target.getObject());
+        final Object targetObject = target.getObject();
+        final boolean cloneable = facet.isCloneable(targetObject);
         return !cloneable ? "Non-cloneable view models are read-only" : null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/981d731f/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
index 5c167af..0d3d6ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForXmlRootElementAnnotation.java
@@ -54,6 +54,19 @@ public class RecreatableObjectFacetForXmlRootElementAnnotation extends Recreatab
         return encoded;
     }
 
+    @Override
+    public boolean isCloneable(Object pojo) {
+        return true;
+    }
+
+    @Override
+    public Object clone(Object pojo) {
+        final String xml = getJaxbService().toXml(pojo);
+        final Object cloned = getJaxbService().fromXml(pojo.getClass(), xml);
+        return cloned;
+    }
+
+
     private JaxbService getJaxbService() {
         return servicesInjector.lookupService(JaxbService.class);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/981d731f/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 47e8315..2e744b7 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -29,7 +29,6 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.annotation.BookmarkPolicy;
-import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.Hint;
 import org.apache.isis.applib.services.memento.MementoService.Memento;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
@@ -39,7 +38,7 @@ import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.services.grid.fixedcols.applib.Hint;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
@@ -485,42 +484,6 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
         return message;
     }
 
-    // //////////////////////////////////////////////////////////
-    // validation & apply
-    // //////////////////////////////////////////////////////////
-
-    public String getReasonInvalidIfAny() {
-        final ObjectAdapter adapter = getObjectAdapterMemento().getObjectAdapter(ConcurrencyChecking.CHECK);
-        final Consent validity = adapter.getSpecification().isValid(adapter, InteractionInitiatedBy.USER);
-        return validity.isAllowed() ? null : validity.getReason();
-    }
-
-    /**
-     * Apply changes to the underlying adapter (possibly returning a new adapter).
-     *
-     * @return adapter, which may be different from the original (if a {@link ViewModelFacet#isCloneable(Object) cloneable} view model, for example.
-     */
-    public ObjectAdapter apply() {
-        ObjectAdapter adapter = getObjectAdapterMemento().getObjectAdapter(ConcurrencyChecking.CHECK);
-        for (final ScalarModel scalarModel : propertyScalarModels.values()) {
-            scalarModel.applyValue(adapter);
-        }
-
-        final ViewModelFacet recreatableObjectFacet = adapter.getSpecification().getFacet(ViewModelFacet.class);
-        if(recreatableObjectFacet != null) {
-            final Object viewModel = adapter.getObject();
-            final boolean cloneable = recreatableObjectFacet.isCloneable(viewModel);
-            if(cloneable) {
-                final Object newViewModel = recreatableObjectFacet.clone(viewModel);
-                adapter = getAdapterManager().adapterFor(newViewModel);
-            }
-        }
-
-        getObjectAdapterMemento().setAdapter(adapter);
-        toViewMode();
-
-        return adapter;
-    }
 
     // //////////////////////////////////////////////////////////
     // Pending

http://git-wip-us.apache.org/repos/asf/isis/blob/981d731f/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 09d8f39..840c1dc 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -40,8 +40,8 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
@@ -768,7 +768,6 @@ public class ScalarModel extends EntityModel implements LinksProvider {
     }
 
 
-    @Override
     public String getReasonInvalidIfAny() {
         final OneToOneAssociation property = getPropertyMemento().getProperty();
 
@@ -780,7 +779,12 @@ public class ScalarModel extends EntityModel implements LinksProvider {
         return validity.isAllowed() ? null : validity.getReason();
     }
 
-    public void applyValue(final ObjectAdapter adapter) {
+    /**
+     * Apply changes to the underlying adapter (possibly returning a new adapter).
+     *
+     * @return adapter, which may be different from the original (if a {@link ViewModelFacet#isCloneable(Object) cloneable} view model, for example.
+     */
+    public ObjectAdapter applyValue(ObjectAdapter adapter) {
         final OneToOneAssociation property = getPropertyMemento().getProperty();
 
         //
@@ -796,21 +800,35 @@ public class ScalarModel extends EntityModel implements LinksProvider {
         //
 
         //
-        // on the other hand, we mustn't attempt to apply changes for disabled properties...
-        // even if the property is persisted (it might be written to by an action), it is never updated by
-        // an edit.
+        // previously (prior to XML layouts and 'single property' edits) we also used to check if
+        // the property was disabled, using:
+        //
+        // if(property.containsDoOpFacet(DisabledFacet.class)) {
+        //    // skip, as per comments above
+        //    return;
+        // }
         //
-        // Fundamentally, then, any non-disabled property (whether persisted or not) should be updated in the
-        // Isis runtime.
+        // However, this would seem to be wrong, because the presence of a DisabledFacet doesn't necessarily mean
+        // that the property is disabled (its disabledReason(...) might return null).
         //
+        // In any case, the only code that calls this method already does the check, so think this is safe
+        // to just remove.
 
-        if(property.containsDoOpFacet(DisabledFacet.class)) {
-            // skip, as per comments above
-            return;
-        }
 
         final ObjectAdapter associate = getObject();
         property.set(adapter, associate, InteractionInitiatedBy.USER);
+
+        final ViewModelFacet recreatableObjectFacet = adapter.getSpecification().getFacet(ViewModelFacet.class);
+        if(recreatableObjectFacet != null) {
+            final Object viewModel = adapter.getObject();
+            final boolean cloneable = recreatableObjectFacet.isCloneable(viewModel);
+            if(cloneable) {
+                final Object newViewModel = recreatableObjectFacet.clone(viewModel);
+                adapter = getAdapterManager().adapterFor(newViewModel);
+            }
+        }
+
+        return adapter;
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/981d731f/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
index 0617a9a..cde6e31 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
@@ -213,13 +213,17 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel>
             ObjectAdapter adapter = getScalarModel().getParentObjectAdapterMemento()
                     .getObjectAdapter(AdapterManager.ConcurrencyChecking.CHECK);
 
-            getScalarModel().applyValue(adapter);
+            final ObjectAdapter objectAdapter = getScalarModel().applyValue(adapter);
+            // (borrowed some code previously in EntityModel)
+            if(objectAdapter != adapter) {
+                getModel().getParentObjectAdapterMemento().setAdapter(adapter);
+            }
 
             // flush any queued changes, so concurrency or violation exceptions (if any)
             // will be thrown here
             getTransactionManager().flushTransaction();
 
-            final EntityPage entityPage = new EntityPage(adapter, null);
+            final EntityPage entityPage = new EntityPage(objectAdapter, null);
             setResponsePage(entityPage);
 
             return true;


[7/8] isis git commit: ISIS-1299: updated documentation.

Posted by da...@apache.org.
ISIS-1299: updated documentation.


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

Branch: refs/heads/master
Commit: 2c3a04cb9b647938ec67eafcdb5d09e82ce2651f
Parents: 981d731
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 07:31:03 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 07:31:03 2016 +0000

----------------------------------------------------------------------
 .../main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc  | 13 +++++++++++++
 1 file changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/2c3a04cb/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
----------------------------------------------------------------------
diff --git a/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc b/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
index f4c3028..f3e53c1 100644
--- a/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/_ugbtb_view-models_jaxb.adoc
@@ -10,6 +10,19 @@ As noted in the xref:ugbtb.adoc#_ugbtb_view-models_use-cases[introduction], view
 JAXB annotations.  The serialized form of these view models is therefore XML, which also enables these view models
 to act as DTOs.
 
+In case it's not obvious, these DTOs are still usable as "regular" view models; they will render in the
+xref:ugvw.adoc#[Wicket viewer] just like any other.  In fact, these JAXB-annotated view models are in many regards the
+most powerful of all the various ways of writing view models:
+
+* their entire state (collections as well as properties) is automatically managed from interaction to interaction. +
++
+In contrast, using xref:rgant.adoc#_rgant_ViewModel[`@ViewModel`] (or its
+xref:rgant.adoc#_rgant_DomainObject_nature[`@DomainObject#nature()`] equivalent) will only manage the state of
+properties, but not collections.  And if using the xref:rgcms.adoc#_rgcms_classes_super_ViewModel[`ViewModel`]
+interface, then the programmer must write all the state management (lots of boilerplate).
+
+* (as of `1.12.0-SNAPSHOT`), JAXB-annotated view models are editable.
+
 The examples in this section uses the DTO for `ToDoItem`, taken from the (non-ASF) http://github.com/isisaddons/isis-app-todoapp[Isis addons' todoapp].  This DTO is defined as follows:
 
 [source,java]


[2/8] isis git commit: ISIS-993: fixing the JDK7 re-implementation (which was resulting in spurious top-level actions appearing as top-level)

Posted by da...@apache.org.
ISIS-993: fixing the JDK7 re-implementation (which was resulting in spurious top-level actions appearing as top-level)

For some reason FluentIterable#transform(...) doesn't iterate as I expected.  Replacing with a simple loop.


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

Branch: refs/heads/master
Commit: 1cfb478e022502f0f7ea26dca87bae8094ce5bb6
Parents: cf14cea
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Mar 9 07:11:25 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Mar 9 07:11:25 2016 +0000

----------------------------------------------------------------------
 .../grid/bootstrap3/GridSystemServiceBS3.java   | 140 +++++++++----------
 1 file changed, 67 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/1cfb478e/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
index 06ad48e..8e1eafa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/grid/bootstrap3/GridSystemServiceBS3.java
@@ -473,80 +473,74 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
                 .transform(ObjectMember.Functions.getId())
                 .toList();
 
-            FluentIterable.from(sortedPossiblyMissingActionIds)
-                .transform(
-                        new Function<String, Void>() {
-                            @Nullable @Override
-                            public Void apply(@Nullable final String actionId) {
-                                final ObjectAction oa = objectActionById.get(actionId);
-                                final MemberOrderFacet memberOrderFacet = oa.getFacet(MemberOrderFacet.class);
-                                if(memberOrderFacet == null) {
-                                    return null;
-                                }
-                                final String memberOrderName = memberOrderFacet.name();
-                                if (memberOrderName == null) {
-                                    return null;
-                                }
-                                final String id = asId(memberOrderName);
-
-                                if (oneToOneAssociationById.containsKey(id)) {
-                                    associatedActionIds.add(actionId);
-
-                                    if(!(memberOrderFacet instanceof MemberOrderFacetAnnotation)) {
-                                        // if binding not via annotation, then explicitly bind this
-                                        // action to the property
-                                        final PropertyLayoutData propertyLayoutData = propertyLayoutDataById.get(id);
-                                        final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
-
-                                        final ActionPositionFacet actionPositionFacet = oa.getFacet(ActionPositionFacet.class);
-                                        final ActionLayoutDataOwner owner;
-                                        final ActionLayout.Position position;
-                                        if(actionPositionFacet != null) {
-                                            position = actionPositionFacet.position();
-                                            owner = position == ActionLayout.Position.PANEL ||
-                                                    position == ActionLayout.Position.PANEL_DROPDOWN
-                                                        ? propertyLayoutData.getOwner()
-                                                        : propertyLayoutData;
-                                        } else {
-                                            position = ActionLayout.Position.BELOW;
-                                            owner = propertyLayoutData;
-                                        }
-                                        actionLayoutData.setPosition(position);
-                                        addActionTo(owner, actionLayoutData);
-                                    }
+        for (String actionId : sortedPossiblyMissingActionIds) {
+            final ObjectAction oa = objectActionById.get(actionId);
+            final MemberOrderFacet memberOrderFacet = oa.getFacet(MemberOrderFacet.class);
+            if(memberOrderFacet == null) {
+                continue;
+            }
+            final String memberOrderName = memberOrderFacet.name();
+            if (memberOrderName == null) {
+                continue;
+            }
+            final String id = asId(memberOrderName);
+
+            if (oneToOneAssociationById.containsKey(id)) {
+                associatedActionIds.add(actionId);
+
+                if(!(memberOrderFacet instanceof MemberOrderFacetAnnotation)) {
+                    // if binding not via annotation, then explicitly bind this
+                    // action to the property
+                    final PropertyLayoutData propertyLayoutData = propertyLayoutDataById.get(id);
+                    final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
+
+                    final ActionPositionFacet actionPositionFacet = oa.getFacet(ActionPositionFacet.class);
+                    final ActionLayoutDataOwner owner;
+                    final ActionLayout.Position position;
+                    if(actionPositionFacet != null) {
+                        position = actionPositionFacet.position();
+                        owner = position == ActionLayout.Position.PANEL ||
+                                position == ActionLayout.Position.PANEL_DROPDOWN
+                                ? propertyLayoutData.getOwner()
+                                : propertyLayoutData;
+                    } else {
+                        position = ActionLayout.Position.BELOW;
+                        owner = propertyLayoutData;
+                    }
+                    actionLayoutData.setPosition(position);
+                    addActionTo(owner, actionLayoutData);
+                }
 
-                                    return null;
-                                }
-                                if (oneToManyAssociationById.containsKey(id)) {
-                                    associatedActionIds.add(actionId);
-
-                                    if(!(memberOrderFacet instanceof MemberOrderFacetAnnotation)) {
-                                        // if binding not via annotation, then explicitly bind this
-                                        // action to the property
-                                        final CollectionLayoutData collectionLayoutData = collectionLayoutDataById.get(id);
-                                        final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
-                                        addActionTo(collectionLayoutData, actionLayoutData);
-                                    }
-                                    return null;
-                                }
-                                // if the @MemberOrder for the action references a field set (that has bound
-                                // associations), then don't mark it as missing, but instead explicitly add it to the
-                                // list of actions of that fieldset.
-                                final Set<String> boundAssociationIds = boundAssociationIdsByFieldSetId.get(id);
-                                if(boundAssociationIds != null && !boundAssociationIds.isEmpty()) {
-
-                                    associatedActionIds.add(actionId);
-
-                                    final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
-
-                                    actionLayoutData.setPosition(ActionLayout.Position.PANEL_DROPDOWN);
-                                    final FieldSet fieldSet = fieldSetIds.get(id);
-                                    addActionTo(fieldSet, actionLayoutData);
-                                    return null;
-                                }
-                                return null;
-                            }
-                        });
+                continue;
+            }
+            if (oneToManyAssociationById.containsKey(id)) {
+                associatedActionIds.add(actionId);
+
+                if(!(memberOrderFacet instanceof MemberOrderFacetAnnotation)) {
+                    // if binding not via annotation, then explicitly bind this
+                    // action to the property
+                    final CollectionLayoutData collectionLayoutData = collectionLayoutDataById.get(id);
+                    final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
+                    addActionTo(collectionLayoutData, actionLayoutData);
+                }
+                continue;
+            }
+            // if the @MemberOrder for the action references a field set (that has bound
+            // associations), then don't mark it as missing, but instead explicitly add it to the
+            // list of actions of that fieldset.
+            final Set<String> boundAssociationIds = boundAssociationIdsByFieldSetId.get(id);
+            if(boundAssociationIds != null && !boundAssociationIds.isEmpty()) {
+
+                associatedActionIds.add(actionId);
+
+                final ActionLayoutData actionLayoutData = new ActionLayoutData(actionId);
+
+                actionLayoutData.setPosition(ActionLayout.Position.PANEL_DROPDOWN);
+                final FieldSet fieldSet = fieldSetIds.get(id);
+                addActionTo(fieldSet, actionLayoutData);
+                continue;
+            }
+        }
 
         // ... the missing actions are those in the second tuple, excluding those associated (via @MemberOrder#name)
         // to a property or collection.