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 2015/01/22 17:53:28 UTC

[13/52] [abbrv] isis git commit: ISIS-970: updated ActionLayoutFacetFactory to support @ActionLayout(bookmarking=...), plus also reading from xxx.layout.json.

ISIS-970: updated ActionLayoutFacetFactory to support @ActionLayout(bookmarking=...), plus also reading from xxx.layout.json.


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

Branch: refs/heads/ISIS-970
Commit: 77da1846d18492f1201df6937e5b535299f7b150
Parents: 525c0c4
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Dec 30 14:27:23 2014 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Thu Jan 22 16:32:26 2015 +0000

----------------------------------------------------------------------
 .../isis/applib/annotation/ActionLayout.java    | 20 +++++---
 .../layout/ActionLayoutFacetFactory.java        |  9 ++++
 ...arkPolicyFacetForActionLayoutAnnotation.java | 42 ++++++++++++++++
 ...PolicyFacetOnActionFromLayoutProperties.java | 52 ++++++++++++++++++++
 ...cyFacetViaBookmarkableAnnotationFactory.java |  3 +-
 .../layoutmetadata/ActionLayoutFacetRepr.java   |  2 +
 6 files changed, 121 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/77da1846/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index 7d896db..6bdb007 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -33,6 +33,20 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 public @interface ActionLayout {
 
+
+    /**
+     * Whether (and how) this action can be bookmarked in the UI.
+     *
+     * <p>
+     *     For bookmarkable actions, either {@link org.apache.isis.applib.annotation.BookmarkPolicy#AS_ROOT}
+     *     and {@link org.apache.isis.applib.annotation.BookmarkPolicy#AS_CHILD} can be used (they are treated
+     *     identically).
+     * </p>
+     */
+    BookmarkPolicy bookmarking() default BookmarkPolicy.NEVER;
+
+    // //////////////////////////////////////
+
     /**
      * Indicates the css class that an action should have.
      *
@@ -108,11 +122,5 @@ public @interface ActionLayout {
     boolean prototype() default false;
 
 
-    // //////////////////////////////////////
-
-    /**
-     * Whether (and how) this domain object can be bookmarked in the UI.
-     */
-    BookmarkPolicy bookmarking() default BookmarkPolicy.NEVER;
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/77da1846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
index d9132c9..e80b54b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
@@ -35,6 +35,7 @@ import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
+import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 
 
 public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory {
@@ -56,6 +57,14 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
         final ActionLayout actionLayout = Annotations.getAnnotation(processMethodContext.getMethod(), ActionLayout.class);
 
 
+        // bookmarkable
+        BookmarkPolicyFacet bookmarkableFacet = BookmarkPolicyFacetOnActionFromLayoutProperties.create(properties, holder);
+        if(bookmarkableFacet == null) {
+            bookmarkableFacet = BookmarkPolicyFacetForActionLayoutAnnotation.create(actionLayout, holder);
+        }
+        FacetUtil.addFacet(bookmarkableFacet);
+
+
         // cssClass
         CssClassFacet cssClassFacet = CssClassFacetOnActionFromLayoutProperties.create(properties, holder);
         if(cssClassFacet == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/77da1846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.java
new file mode 100644
index 0000000..1a9f573
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetForActionLayoutAnnotation.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.actions.layout;
+
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+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 BookmarkPolicyFacetForActionLayoutAnnotation extends BookmarkPolicyFacetAbstract {
+
+    public static BookmarkPolicyFacet create(final ActionLayout actionLayout, final FacetHolder holder) {
+        if (actionLayout == null) {
+            return null;
+        }
+        final BookmarkPolicy bookmarkPolicy = actionLayout.bookmarking();
+        return bookmarkPolicy != null && bookmarkPolicy != BookmarkPolicy.NEVER ? new BookmarkPolicyFacetForActionLayoutAnnotation(bookmarkPolicy, holder) : null;
+    }
+
+    private BookmarkPolicyFacetForActionLayoutAnnotation(final BookmarkPolicy bookmarkPolicy, final FacetHolder holder) {
+        super(bookmarkPolicy, holder);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/77da1846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetOnActionFromLayoutProperties.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetOnActionFromLayoutProperties.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetOnActionFromLayoutProperties.java
new file mode 100644
index 0000000..dc4dd6f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/BookmarkPolicyFacetOnActionFromLayoutProperties.java
@@ -0,0 +1,52 @@
+/*
+ *  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.actions.layout;
+
+import java.util.Properties;
+import com.google.common.base.Strings;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
+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 BookmarkPolicyFacetOnActionFromLayoutProperties extends BookmarkPolicyFacetAbstract {
+
+    public static BookmarkPolicyFacet create(Properties properties, FacetHolder holder) {
+        final BookmarkPolicy bookmarkPolicy = hidden(properties);
+        return bookmarkPolicy != null && bookmarkPolicy != BookmarkPolicy.NEVER ? new BookmarkPolicyFacetOnActionFromLayoutProperties(bookmarkPolicy, holder): null;
+    }
+
+    private static BookmarkPolicy hidden(Properties properties) {
+        if(properties == null) {
+            return null;
+        }
+        String bookmarking = Strings.emptyToNull(properties.getProperty("bookmarking"));
+        if(bookmarking == null) {
+            // alternate key
+            bookmarking = Strings.emptyToNull(properties.getProperty("bookmarkable"));
+            return null;
+        }
+        return BookmarkPolicy.valueOf(bookmarking);
+    }
+
+    private BookmarkPolicyFacetOnActionFromLayoutProperties(BookmarkPolicy bookmarkPolicy, FacetHolder holder) {
+        super(bookmarkPolicy, holder);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/77da1846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
index f28e94a..0a81675 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetViaBookmarkableAnnotationFactory.java
@@ -84,7 +84,8 @@ public class BookmarkPolicyFacetViaBookmarkableAnnotationFactory extends FacetFa
                     final ActionSemanticsFacet semanticsFacet = objectAction.getFacet(ActionSemanticsFacet.class);
                     if(semanticsFacet == null || semanticsFacet.isNoop() || semanticsFacet.value() != Of.SAFE) {
                       validationFailures.add(
-                      "Action %s is bookmarkable but action semantics are not explicitly indicated as being safe.  Either add @ActionSemantics(Of.Safe), or remove @Bookmarkable.", 
+                          "Action %s is bookmarkable but action semantics are not explicitly indicated as being safe.  " +
+                          "Either add @Action(semantics=SemanticsOf.SAFE), or remove @ActionLayout(bookmarking=...).",
                       objectAction.getIdentifier().toClassAndNameIdentityString());
                     }
                 }

http://git-wip-us.apache.org/repos/asf/isis/blob/77da1846/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
index d5a9123..4fb113c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/layoutmetadata/ActionLayoutFacetRepr.java
@@ -18,9 +18,11 @@ package org.apache.isis.core.metamodel.layoutmetadata;
 
 
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Where;
 
 public class ActionLayoutFacetRepr {
+    public BookmarkPolicy bookmarking;
     public String cssClass;
     public String cssClassFa;
     public String cssClassFaPosition;