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 2014/05/10 09:18:05 UTC

git commit: ISIS-550: removed WrapperPolicy, replaced with ExecutionMode#SKIP_RULES

Repository: isis
Updated Branches:
  refs/heads/ISIS-550 c1a259667 -> c2b250f01


ISIS-550: removed WrapperPolicy, replaced with ExecutionMode#SKIP_RULES

In addition:
- all the events inherit from java.util.EventObject
- additional convenience methods wrapNoExecute(.) and wrapSkipRules(.) in WrapperFactory.


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

Branch: refs/heads/ISIS-550
Commit: c2b250f01e0b6ace2a71ac1c25d90694d50fc65e
Parents: c1a2596
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat May 10 08:08:45 2014 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat May 10 08:08:45 2014 +0100

----------------------------------------------------------------------
 .../annotation/PostsActionInvokedEvent.java     |  7 ---
 .../annotation/PostsCollectionAddedToEvent.java |  7 ---
 .../PostsCollectionRemovedFromEvent.java        |  7 ---
 .../annotation/PostsPropertyChangedEvent.java   |  7 ---
 .../isis/applib/annotation/WrapperPolicy.java   | 35 -----------
 .../services/eventbus/ActionInvokedEvent.java   | 22 ++++---
 .../eventbus/CollectionAddedToEvent.java        | 28 ++++-----
 .../eventbus/CollectionRemovedFromEvent.java    | 27 ++++-----
 .../services/eventbus/PropertyChangedEvent.java | 15 +++--
 .../applib/services/wrapper/WrapperFactory.java | 52 ++++++++++++++++-
 .../facets/PostsEventWithWrapperPolicy.java     | 61 --------------------
 .../event/PostsCollectionAddedToEventFacet.java |  3 +-
 ...ostsCollectionAddedToEventFacetAbstract.java | 13 +----
 .../PostsCollectionRemovedFromEventFacet.java   |  3 +-
 ...CollectionRemovedFromEventFacetAbstract.java | 13 +----
 .../event/PostsPropertyChangedEventFacet.java   |  3 +-
 .../PostsPropertyChangedEventFacetAbstract.java | 13 +----
 ...ctionAddedToEventAnnotationFacetFactory.java |  4 +-
 ...tsCollectionAddedToEventFacetAnnotation.java |  4 +-
 ...nRemovedFromEventAnnotationFacetFactory.java |  4 +-
 ...llectionRemovedFromEventFacetAnnotation.java |  4 +-
 ...pertyChangedEventAnnotationFacetFactory.java |  4 +-
 ...ostsPropertyChangedEventFacetAnnotation.java |  4 +-
 ...nAddedEventFacetAnnotationTest_newEvent.java |  4 +-
 ...emovedEventFacetAnnotationTest_newEvent.java |  4 +-
 ...hangedEventFacetAnnotationTest_newEvent.java |  4 +-
 .../core/wrapper/WrapperFactoryAbstract.java    | 10 ++++
 .../handlers/DomainObjectInvocationHandler.java | 53 ++++-------------
 .../dom/src/main/java/dom/todo/ToDoItem.java    | 13 +++--
 29 files changed, 159 insertions(+), 269 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsActionInvokedEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsActionInvokedEvent.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsActionInvokedEvent.java
index 6b772e7..ba11074 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsActionInvokedEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsActionInvokedEvent.java
@@ -26,7 +26,6 @@ import java.lang.annotation.Target;
 
 import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
 
 /**
  * Applies only to actions; any changes should be propagated as events to subscribers.  
@@ -58,10 +57,4 @@ public @interface PostsActionInvokedEvent {
      */
     Class<? extends ActionInvokedEvent<?>> value() default ActionInvokedEvent.Default.class;
 
-    /**
-     * If invoked through the {@link WrapperFactory}, whether business rules (&quot;see it, use it, do it&quot;)
-     * should be enforced or not.
-     */
-    WrapperPolicy wrapperPolicy() default WrapperPolicy.ENFORCE_RULES;
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionAddedToEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionAddedToEvent.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionAddedToEvent.java
index 04037b8..d3a8f31 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionAddedToEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionAddedToEvent.java
@@ -60,11 +60,4 @@ public @interface PostsCollectionAddedToEvent {
      * This subclass must provide a no-arg constructor; the fields are set reflectively.
      */
     Class<? extends CollectionAddedToEvent<?,?>> value() default CollectionAddedToEvent.Default.class;
-    
-    /**
-     * If invoked through the {@link WrapperFactory}, whether business rules (&quot;see it, use it, do it&quot;)
-     * should be enforced or not.
-     */
-    WrapperPolicy wrapperPolicy() default WrapperPolicy.ENFORCE_RULES;
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionRemovedFromEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionRemovedFromEvent.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionRemovedFromEvent.java
index f94851f..40b194f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionRemovedFromEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsCollectionRemovedFromEvent.java
@@ -25,7 +25,6 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
 
 /**
  * Applies only to collections; any changes should be propagated as events to subscribers.  
@@ -61,10 +60,4 @@ public @interface PostsCollectionRemovedFromEvent {
      */
     Class<? extends CollectionRemovedFromEvent<?,?>> value() default CollectionRemovedFromEvent.Default.class;
 
-    /**
-     * If invoked through the {@link WrapperFactory}, whether business rules (&quot;see it, use it, do it&quot;)
-     * should be enforced or not.
-     */
-    WrapperPolicy wrapperPolicy() default WrapperPolicy.ENFORCE_RULES;
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsPropertyChangedEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsPropertyChangedEvent.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsPropertyChangedEvent.java
index b55c961..81a6219 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsPropertyChangedEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PostsPropertyChangedEvent.java
@@ -25,7 +25,6 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
 
 /**
  * Applies only to properties; any changes should be propagated as events to subscribers.  
@@ -57,10 +56,4 @@ public @interface PostsPropertyChangedEvent {
      */
     Class<? extends PropertyChangedEvent<?,?>> value() default PropertyChangedEvent.Default.class;
 
-    /**
-     * If invoked through the {@link WrapperFactory}, whether business rules (&quot;see it, use it, do it&quot;)
-     * should be enforced or not.
-     */
-    WrapperPolicy wrapperPolicy() default WrapperPolicy.ENFORCE_RULES;
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/annotation/WrapperPolicy.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/WrapperPolicy.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/WrapperPolicy.java
deleted file mode 100644
index a69c817..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/WrapperPolicy.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *  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.annotation;
-
-import org.apache.isis.applib.services.wrapper.WrapperFactory;
-
-/**
- * An attribute of {@link PostsPropertyChangedEvent}, {@link PostsCollectionAddedToEvent} and other related annotations;
- * is a hint to indicate that if the object member is interacted with through a {@link WrapperFactory}, then whether 
- * business rules (&quot;see it, use it, do it&quot;) should be enforced or not.
- * 
- * <p>
- * This provides a half-way house between strictly UI-interactions and fully programmatic interactions, so that an 
- * event can be fired programmatically even if the object is disabled in the UI.
- */
-public enum WrapperPolicy {
-    ENFORCE_RULES,
-    SKIP_RULES
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
index 2140525..7dabf9b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/ActionInvokedEvent.java
@@ -18,14 +18,17 @@
  */
 package org.apache.isis.applib.services.eventbus;
 
-import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
+import org.apache.isis.applib.annotation.PostsActionInvokedEvent;
 import org.apache.isis.applib.util.ObjectContracts;
 
-public abstract class ActionInvokedEvent<S> {
+public abstract class ActionInvokedEvent<S> extends java.util.EventObject {
     
-    public static class Default extends ActionInvokedEvent<Object> {}
+    private static final long serialVersionUID = 1L;
+
+    public static class Default extends ActionInvokedEvent<Object> {
+        private static final long serialVersionUID = 1L;
+    }
 
-    private final S source;
     private final String action;
     private final String parameters;
     
@@ -40,14 +43,19 @@ public abstract class ActionInvokedEvent<S> {
         this(null, null, null);
     }
     
-    public ActionInvokedEvent(S source, String action, String parameters) {
-        this.source = source;
+    public ActionInvokedEvent(
+            final S source, 
+            final String action, 
+            final String parameters) {
+        super(source);
         this.action = action;
         this.parameters = parameters;
     }
     
+    @Override
+    @SuppressWarnings("unchecked")
     public S getSource() {
-        return source;
+        return (S)source;
     }
     public String getAction() {
         return action;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
index 7b2d8f1..2b4302d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionAddedToEvent.java
@@ -22,11 +22,14 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
 import org.apache.isis.applib.util.ObjectContracts;
 
-public abstract class CollectionAddedToEvent<S,T> {
+public abstract class CollectionAddedToEvent<S,T> extends java.util.EventObject {
     
-    public static class Default extends CollectionAddedToEvent<Object, Object> {}
+    private static final long serialVersionUID = 1L;
+
+    public static class Default extends CollectionAddedToEvent<Object, Object> {
+        private static final long serialVersionUID = 1L;
+    }
 
-    private final S source;
     private final Identifier identifier;
     private final T value;
     
@@ -41,22 +44,19 @@ public abstract class CollectionAddedToEvent<S,T> {
         this(null, null, null);
     }
     
-    /**
-     * @deprecated - use {@link #CollectionAddedToEvent(Object, Identifier, Object)}
-     */
-    @Deprecated
-    public CollectionAddedToEvent(S source, T value) {
-        this(source, null, value);
-    }
-
-    public CollectionAddedToEvent(S source, Identifier identifier, T value) {
-        this.source = source;
+    public CollectionAddedToEvent(
+            final S source, 
+            final Identifier identifier, 
+            final T value) {
+        super(source);
         this.identifier = identifier;
         this.value = value;
     }
     
+    @Override
+    @SuppressWarnings("unchecked")
     public S getSource() {
-        return source;
+        return (S)source;
     }
     public Identifier getIdentifier() {
         return identifier;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
index 17b8fed..47ff424 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/CollectionRemovedFromEvent.java
@@ -21,11 +21,14 @@ package org.apache.isis.applib.services.eventbus;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.util.ObjectContracts;
 
-public abstract class CollectionRemovedFromEvent<S,T> {
+public abstract class CollectionRemovedFromEvent<S,T> extends java.util.EventObject {
     
-    public static class Default extends CollectionRemovedFromEvent<Object, Object> {}
+    private static final long serialVersionUID = 1L;
+
+    public static class Default extends CollectionRemovedFromEvent<Object, Object> {
+        private static final long serialVersionUID = 1L;
+    }
 
-    private final S source;
     private final Identifier identifier;
     private final T value;
     
@@ -39,21 +42,19 @@ public abstract class CollectionRemovedFromEvent<S,T> {
     public CollectionRemovedFromEvent() {
         this(null, null, null);
     }
-    /**
-     * @deprecated - use {@link #CollectionRemovedFromEvent(Object, Identifier, Object)}
-     */
-    @Deprecated
-    public CollectionRemovedFromEvent(S source, T value) {
-        this(source, null, value);
-    }
-    public CollectionRemovedFromEvent(S source, Identifier identifier, T value) {
-        this.source = source;
+    public CollectionRemovedFromEvent(
+            final S source, 
+            final Identifier identifier, 
+            final T value) {
+        super(source);
         this.identifier = identifier;
         this.value = value;
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
     public S getSource() {
-        return source;
+        return (S) source;
     }
     public Identifier getIdentifier() {
         return identifier;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
index 9ae0afe..13666ff 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/PropertyChangedEvent.java
@@ -22,11 +22,14 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
 import org.apache.isis.applib.util.ObjectContracts;
 
-public abstract class PropertyChangedEvent<S,T> {
+public abstract class PropertyChangedEvent<S,T> extends java.util.EventObject {
     
-    public static class Default extends PropertyChangedEvent<Object, Object> {}
+    private static final long serialVersionUID = 1L;
+
+    public static class Default extends PropertyChangedEvent<Object, Object> {
+        private static final long serialVersionUID = 1L;
+    }
     
-    private final S source;
     private final Identifier identifier;
     private final T oldValue;
     private final T newValue;
@@ -52,14 +55,16 @@ public abstract class PropertyChangedEvent<S,T> {
     }
 
     public PropertyChangedEvent(S source, Identifier identifier, T oldValue, T newValue) {
-        this.source = source;
+        super(source);
         this.identifier = identifier;
         this.oldValue = oldValue;
         this.newValue = newValue;
     }
     
+    @Override
+    @SuppressWarnings("unchecked")
     public S getSource() {
-        return source;
+        return (S) source;
     }
     public Identifier getIdentifier() {
         return identifier;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
index 1fb3c5a..4a8a452 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
@@ -70,7 +70,33 @@ public interface WrapperFactory {
      * @see WrapperFactory#wrap(Object, ExecutionMode)
      */
     public static enum ExecutionMode {
-        EXECUTE, NO_EXECUTE
+        /**
+         * Validate all business rules and then execute.
+         */
+        EXECUTE(true,true), 
+        /**
+         * Skip all business rules and then execute.
+         */
+        SKIP_RULES(false, true), 
+        /**
+         * Validate all business rules but do not execute.
+         */
+        NO_EXECUTE(true, false);
+        
+        private final boolean enforceRules;
+        private final boolean execute;
+
+        private ExecutionMode(final boolean enforceRules, final boolean execute) {
+            this.enforceRules = enforceRules;
+            this.execute = execute;
+        }
+
+        public boolean shouldEnforceRules() {
+            return enforceRules;
+        }
+        public boolean shouldExecute() {
+            return execute;
+        }
     }
 
     WrapperFactory NOOP = new WrapperFactory(){
@@ -81,6 +107,16 @@ public interface WrapperFactory {
         }
 
         @Override
+        public <T> T wrapNoExecute(T domainObject) {
+            return domainObject;
+        }
+        
+        @Override
+        public <T> T wrapSkipRules(T domainObject) {
+            return domainObject;
+        }
+        
+        @Override
         public <T> T wrap(T domainObject, ExecutionMode mode) {
             return domainObject;
         }
@@ -126,6 +162,20 @@ public interface WrapperFactory {
     <T> T wrap(T domainObject);
 
     /**
+     * Convenience method for {@link #wrap(Object, ExecutionMode)} with {@link ExecutionMode#NO_EXECUTE},
+     * to make this feature more discoverable.
+     */
+    @Programmatic
+    <T> T wrapNoExecute(T domainObject);
+    
+    /**
+     * Convenience method for {@link #wrap(Object, ExecutionMode)} with {@link ExecutionMode#SKIP_RULES},
+     * to make this feature more discoverable.
+     */
+    @Programmatic
+    <T> T wrapSkipRules(T domainObject);
+    
+    /**
      * Same as {@link #wrap(Object)}, except the actual execution occurs only if
      * the <tt>execute</tt> parameter indicates.
      * 

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PostsEventWithWrapperPolicy.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PostsEventWithWrapperPolicy.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PostsEventWithWrapperPolicy.java
deleted file mode 100644
index 0c12c1c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/PostsEventWithWrapperPolicy.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  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;
-
-import org.apache.isis.applib.annotation.WrapperPolicy;
-import org.apache.isis.applib.services.eventbus.EventBusService;
-import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
-import org.apache.isis.core.commons.lang.ObjectExtensions;
-import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
-import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
-import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
-
-public interface PostsEventWithWrapperPolicy {
-
-    WrapperPolicy getWrapperPolicy();
-    
-    public static class Util {
-        private Util(){}
-
-        /**
-         * Returns the provided {@link Facet facet} as an {@link PostsEventWithWrapperPolicy} if
-         * it either is one or if it is a {@link DecoratingFacet} that in turn wraps
-         * an {@link PostsEventWithWrapperPolicy}.
-         * 
-         * <p>
-         * Otherwise, returns <tt>null</tt>.
-         */
-        public static PostsEventWithWrapperPolicy getWrapperPolicyFacet(final Facet facet) {
-            if (facet instanceof PostsEventWithWrapperPolicy) {
-                return (PostsEventWithWrapperPolicy) facet;
-            }
-            if (facet.getUnderlyingFacet() instanceof PostsEventWithWrapperPolicy) {
-                return (PostsEventWithWrapperPolicy) facet.getUnderlyingFacet();
-            }
-            if (facet instanceof DecoratingFacet) {
-                final DecoratingFacet<?> decoratingFacet = ObjectExtensions.asT(facet);
-                return getWrapperPolicyFacet(decoratingFacet.getDecoratedFacet());
-            }
-            return null;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
index 72edf00..f437667 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacet.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.collections.event;
 import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
-import org.apache.isis.core.metamodel.facets.PostsEventWithWrapperPolicy;
 import org.apache.isis.core.metamodel.facets.SingleValueFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
 
@@ -30,6 +29,6 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToF
  * Indicates that (the specified subclass of) {@link CollectionAddedToEvent} should be posted to the
  * {@link EventBusService}.
  */
-public interface PostsCollectionAddedToEventFacet extends SingleValueFacet<Class<? extends CollectionAddedToEvent<?,?>>>, CollectionAddToFacet, MultiTypedFacet, PostsEventWithWrapperPolicy {
+public interface PostsCollectionAddedToEventFacet extends SingleValueFacet<Class<? extends CollectionAddedToEvent<?,?>>>, CollectionAddToFacet, MultiTypedFacet {
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
index 4f89185..7423a41 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionAddedToEventFacetAbstract.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.collections.event;
 
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -40,16 +39,10 @@ public abstract class PostsCollectionAddedToEventFacetAbstract
 	    return CollectionAddToFacet.class;
     }
 
-    private final WrapperPolicy wrapperPolicy;
-
-    public PostsCollectionAddedToEventFacetAbstract(Class<? extends CollectionAddedToEvent<?, ?>> changedEventType, WrapperPolicy wrapperPolicy, FacetHolder holder) {
+    public PostsCollectionAddedToEventFacetAbstract(
+            final Class<? extends CollectionAddedToEvent<?, ?>> changedEventType, 
+            final FacetHolder holder) {
         super(type(), changedEventType, holder);
-        this.wrapperPolicy = wrapperPolicy;
-    }
-
-    @Override
-    public WrapperPolicy getWrapperPolicy() {
-        return wrapperPolicy;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
index d351f84..90a657b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacet.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.collections.event;
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
-import org.apache.isis.core.metamodel.facets.PostsEventWithWrapperPolicy;
 import org.apache.isis.core.metamodel.facets.SingleValueFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
 
@@ -30,6 +29,6 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemove
  * Indicates that (the specified subclass of) {@link CollectionRemovedFromEvent} should be posted to the
  * {@link EventBusService}.
  */
-public interface PostsCollectionRemovedFromEventFacet extends SingleValueFacet<Class<? extends CollectionRemovedFromEvent<?,?>>>, CollectionRemoveFromFacet, MultiTypedFacet, PostsEventWithWrapperPolicy {
+public interface PostsCollectionRemovedFromEventFacet extends SingleValueFacet<Class<? extends CollectionRemovedFromEvent<?,?>>>, CollectionRemoveFromFacet, MultiTypedFacet {
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
index a317467..18fc423 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAbstract.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.collections.event;
 
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -40,16 +39,10 @@ public abstract class PostsCollectionRemovedFromEventFacetAbstract
 	    return CollectionRemoveFromFacet.class;
     }
 
-    private final WrapperPolicy wrapperPolicy;
-
-    public PostsCollectionRemovedFromEventFacetAbstract(Class<? extends CollectionRemovedFromEvent<?, ?>> changedEventType, WrapperPolicy wrapperPolicy, FacetHolder holder) {
+    public PostsCollectionRemovedFromEventFacetAbstract(
+            final Class<? extends CollectionRemovedFromEvent<?, ?>> changedEventType, 
+            final FacetHolder holder) {
         super(type(), changedEventType, holder);
-        this.wrapperPolicy = wrapperPolicy;
-    }
-
-    @Override
-    public WrapperPolicy getWrapperPolicy() {
-        return wrapperPolicy;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
index e5c108f..a01e7f4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacet.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.properties.event;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
-import org.apache.isis.core.metamodel.facets.PostsEventWithWrapperPolicy;
 import org.apache.isis.core.metamodel.facets.SingleValueFacet;
 import org.apache.isis.core.metamodel.facets.properties.modify.PropertyClearFacet;
 import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFacet;
@@ -31,6 +30,6 @@ import org.apache.isis.core.metamodel.facets.properties.modify.PropertySetterFac
  * Indicates that (the specified subclass of) {@link PropertyChangedEvent} should be posted to the
  * {@link EventBusService}.
  */
-public interface PostsPropertyChangedEventFacet extends SingleValueFacet<Class<? extends PropertyChangedEvent<?,?>>>, PropertyClearFacet, PropertySetterFacet, MultiTypedFacet, PostsEventWithWrapperPolicy {
+public interface PostsPropertyChangedEventFacet extends SingleValueFacet<Class<? extends PropertyChangedEvent<?,?>>>, PropertyClearFacet, PropertySetterFacet, MultiTypedFacet {
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
index 69ff6a0..1acbf8d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/event/PostsPropertyChangedEventFacetAbstract.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.properties.event;
 
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -35,16 +34,10 @@ public abstract class PostsPropertyChangedEventFacetAbstract
         return PostsPropertyChangedEventFacet.class;
     }
 
-    private final WrapperPolicy wrapperPolicy;
-
-    public PostsPropertyChangedEventFacetAbstract(final Class<? extends PropertyChangedEvent<?,?>> changedEventType, final WrapperPolicy wrapperPolicy, final FacetHolder holder) {
+    public PostsPropertyChangedEventFacetAbstract(
+            final Class<? extends PropertyChangedEvent<?,?>> changedEventType, 
+            final FacetHolder holder) {
         super(type(), changedEventType, holder);
-        this.wrapperPolicy = wrapperPolicy;
-    }
-
-    @Override
-    public WrapperPolicy getWrapperPolicy() {
-        return wrapperPolicy;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
index 504dd64..5292f07 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventAnnotationFacetFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.progmodel.facets.collections.event;
 import java.lang.reflect.Method;
 
 import org.apache.isis.applib.annotation.PostsCollectionAddedToEvent;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.adapter.ServicesProviderAware;
@@ -66,8 +65,7 @@ public class PostsCollectionAddedToEventAnnotationFacetFactory extends FacetFact
         // the collectionAddToFacet will end up as the underlying facet of the PostsCollectionAddedToEventFacetAnnotation
 
         final Class<? extends CollectionAddedToEvent<?,?>> changedEventType = annotation.value();
-        final WrapperPolicy wrapperPolicy = annotation.wrapperPolicy();
-        return new PostsCollectionAddedToEventFacetAnnotation(changedEventType, wrapperPolicy, getterFacet, collectionAddToFacet, servicesProvider, holder);
+        return new PostsCollectionAddedToEventFacetAnnotation(changedEventType, getterFacet, collectionAddToFacet, servicesProvider, holder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
index bd69339..e566300 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedToEventFacetAnnotation.java
@@ -27,7 +27,6 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -52,12 +51,11 @@ public class PostsCollectionAddedToEventFacetAnnotation
 
 	public PostsCollectionAddedToEventFacetAnnotation(
 			final Class<? extends CollectionAddedToEvent<?, ?>> eventType,
-            final WrapperPolicy wrapperPolicy,
 			final PropertyOrCollectionAccessorFacet getterFacet,
 			final CollectionAddToFacet collectionAddToFacet,
 			final ServicesProvider servicesProvider, 
 			final FacetHolder holder) {
-		super(eventType, wrapperPolicy, holder);
+		super(eventType, holder);
         this.getterFacet = getterFacet;
 		this.collectionAddToFacet = collectionAddToFacet;
 		this.servicesProvider = servicesProvider;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
index 67e8871..abf039c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventAnnotationFacetFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.progmodel.facets.collections.event;
 import java.lang.reflect.Method;
 
 import org.apache.isis.applib.annotation.PostsCollectionRemovedFromEvent;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.adapter.ServicesProviderAware;
@@ -66,8 +65,7 @@ public class PostsCollectionRemovedFromEventAnnotationFacetFactory extends Facet
         // the collectionRemoveFromFacet will end up as the underlying facet of the PostsCollectionRemovedFromEventFacetAnnotation
 
         final Class<? extends CollectionRemovedFromEvent<?,?>> changedEventType = annotation.value();
-        final WrapperPolicy wrapperPolicy = annotation.wrapperPolicy();
-        return new PostsCollectionRemovedFromEventFacetAnnotation(changedEventType, wrapperPolicy, getterFacet, collectionRemoveFromFacet, servicesProvider, holder);
+        return new PostsCollectionRemovedFromEventFacetAnnotation(changedEventType, getterFacet, collectionRemoveFromFacet, servicesProvider, holder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
index a19b55d..98524cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedFromEventFacetAnnotation.java
@@ -27,7 +27,6 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -52,11 +51,10 @@ public class PostsCollectionRemovedFromEventFacetAnnotation extends
 
 	public PostsCollectionRemovedFromEventFacetAnnotation(
 			final Class<? extends CollectionRemovedFromEvent<?, ?>> eventType,
-			final WrapperPolicy wrapperPolicy,
 			final PropertyOrCollectionAccessorFacet getterFacet,
 			final CollectionRemoveFromFacet collectionRemoveFromFacet,
 			final ServicesProvider servicesProvider, final FacetHolder holder) {
-		super(eventType, wrapperPolicy, holder);
+		super(eventType, holder);
 		this.getterFacet = getterFacet;
 		this.collectionRemoveFromFacet = collectionRemoveFromFacet;
 		this.servicesProvider = servicesProvider;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
index 1a75d60..030a5b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventAnnotationFacetFactory.java
@@ -24,7 +24,6 @@ import java.util.Comparator;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.PostsPropertyChangedEvent;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
@@ -90,8 +89,7 @@ public class PostsPropertyChangedEventAnnotationFacetFactory extends FacetFactor
         }
         
         final Class<? extends PropertyChangedEvent<?, ?>> changedEventType = annotation.value();
-        final WrapperPolicy wrapperPolicy = annotation.wrapperPolicy();
-        return new PostsPropertyChangedEventFacetAnnotation(changedEventType, wrapperPolicy, getterFacet, setterFacet, clearFacet, servicesProvider, holder);
+        return new PostsPropertyChangedEventFacetAnnotation(changedEventType, getterFacet, setterFacet, clearFacet, servicesProvider, holder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
index afc96bb..017cf48 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotation.java
@@ -27,7 +27,6 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.FatalException;
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -52,13 +51,12 @@ public class PostsPropertyChangedEventFacetAnnotation extends PostsPropertyChang
 
     public PostsPropertyChangedEventFacetAnnotation(
             final Class<? extends PropertyChangedEvent<?, ?>> eventType, 
-            final WrapperPolicy wrapperPolicy,
             final PropertyOrCollectionAccessorFacet getterFacet, 
             final PropertySetterFacet setterFacet, 
             final PropertyClearFacet clearFacet, 
             final ServicesProvider servicesProvider, 
             final FacetHolder holder) {
-        super(eventType, wrapperPolicy, holder);
+        super(eventType, holder);
         this.getterFacet = getterFacet;
         this.setterFacet = setterFacet;
         this.clearFacet = clearFacet;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedEventFacetAnnotationTest_newEvent.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedEventFacetAnnotationTest_newEvent.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedEventFacetAnnotationTest_newEvent.java
index c4f15c9..07baa29 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedEventFacetAnnotationTest_newEvent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionAddedEventFacetAnnotationTest_newEvent.java
@@ -33,7 +33,9 @@ public class PostsCollectionAddedEventFacetAnnotationTest_newEvent {
     }
     public static class SomeReferencedObject {}
     
-    public static class SomeDomainObjectCollectionAddedToEvent extends CollectionAddedToEvent<SomeDomainObject, SomeReferencedObject> {}
+    public static class SomeDomainObjectCollectionAddedToEvent extends CollectionAddedToEvent<SomeDomainObject, SomeReferencedObject> {
+        private static final long serialVersionUID = 1L;
+    }
     
     @Test
     public void test() throws Exception {

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedEventFacetAnnotationTest_newEvent.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedEventFacetAnnotationTest_newEvent.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedEventFacetAnnotationTest_newEvent.java
index a713a74..76ea7a4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedEventFacetAnnotationTest_newEvent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/event/PostsCollectionRemovedEventFacetAnnotationTest_newEvent.java
@@ -32,7 +32,9 @@ public class PostsCollectionRemovedEventFacetAnnotationTest_newEvent {
     }
     public static class SomeReferencedObject {}
     
-    public static class SomeDomainObjectCollectionRemovedFromEvent extends CollectionRemovedFromEvent<SomeDomainObject, SomeReferencedObject> {}
+    public static class SomeDomainObjectCollectionRemovedFromEvent extends CollectionRemovedFromEvent<SomeDomainObject, SomeReferencedObject> {
+        private static final long serialVersionUID = 1L;
+    }
     
     @Test
     public void test() throws Exception {

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotationTest_newEvent.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotationTest_newEvent.java b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotationTest_newEvent.java
index f997473..4e4391d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotationTest_newEvent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/progmodel/facets/properties/event/PostsPropertyChangedEventFacetAnnotationTest_newEvent.java
@@ -29,7 +29,9 @@ public class PostsPropertyChangedEventFacetAnnotationTest_newEvent {
 
     public static class SomeDomainObject {}
     
-    public static class SomeDatePropertyChangedEvent extends PropertyChangedEvent<SomeDomainObject, LocalDate> {}
+    public static class SomeDatePropertyChangedEvent extends PropertyChangedEvent<SomeDomainObject, LocalDate> {
+        private static final long serialVersionUID = 1L;
+    }
     
     @Test
     public void test() throws Exception {

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
index 88c33c8..d0ba943 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/WrapperFactoryAbstract.java
@@ -214,6 +214,16 @@ public abstract class WrapperFactoryAbstract implements WrapperFactory, Authenti
     }
 
     @Override
+    public <T> T wrapNoExecute(final T domainObject) {
+        return wrap(domainObject, ExecutionMode.NO_EXECUTE);
+    }
+    
+    @Override
+    public <T> T wrapSkipRules(final T domainObject) {
+        return wrap(domainObject, ExecutionMode.SKIP_RULES);
+    }
+    
+    @Override
     public <T> T wrap(final T domainObject, final ExecutionMode mode) {
         if (isWrapper(domainObject)) {
             return domainObject;

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
index 1dc2293..01b03a0 100644
--- a/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/wrapper/src/main/java/org/apache/isis/core/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -27,7 +27,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.annotation.WrapperPolicy;
 import org.apache.isis.applib.events.CollectionAccessEvent;
 import org.apache.isis.applib.events.InteractionEvent;
 import org.apache.isis.applib.events.ObjectTitleEvent;
@@ -55,7 +54,6 @@ import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.PostsEventWithWrapperPolicy;
 import org.apache.isis.core.metamodel.facets.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.actions.choices.ActionChoicesFacet;
 import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
@@ -329,7 +327,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         final InteractionResult interactionResult = targetNoSpec.isValidResult(targetAdapter);
         notifyListenersAndVetoIfRequired(interactionResult);
 
-        if (getExecutionMode() == ExecutionMode.EXECUTE) {
+        if (getExecutionMode().shouldExecute()) {
             if (targetAdapter.isTransient()) {
                 getObjectPersistor().makePersistent(targetAdapter);
             }
@@ -370,8 +368,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
 
         final Object argumentObj = underlying(args[0]);
 
-        final WrapperPolicy wrapperPolicy = determineWrapperPolicy(otoa, argumentObj);
-        if(wrapperPolicy == WrapperPolicy.ENFORCE_RULES) {
+        if(getExecutionMode().shouldEnforceRules()) {
             checkVisibility(getAuthenticationSession(), targetAdapter, otoa);
             checkUsability(getAuthenticationSession(), targetAdapter, otoa);
         }
@@ -381,12 +378,12 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         resolveIfRequired(targetAdapter);
 
 
-        if(wrapperPolicy == WrapperPolicy.ENFORCE_RULES) {
+        if(getExecutionMode().shouldEnforceRules()) {
             final InteractionResult interactionResult = otoa.isAssociationValid(targetAdapter, argumentAdapter).getInteractionResult();
             notifyListenersAndVetoIfRequired(interactionResult);
         }
 
-        if (getExecutionMode() == ExecutionMode.EXECUTE) {
+        if (getExecutionMode().shouldExecute()) {
             otoa.set(targetAdapter, argumentAdapter);
         }
 
@@ -395,19 +392,6 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         return null;
     }
 
-    private static WrapperPolicy determineWrapperPolicy(final OneToOneAssociation otoa, final Object argumentObj) {
-        final PostsEventWithWrapperPolicy wrapperPolicyFacet;
-        if(argumentObj != null) {
-            final PropertySetterFacet setterFacet = otoa.getFacet(PropertySetterFacet.class);
-            wrapperPolicyFacet = PostsEventWithWrapperPolicy.Util.getWrapperPolicyFacet(setterFacet);
-        } else {
-            final PropertyClearFacet clearFacet = otoa.getFacet(PropertyClearFacet.class);
-            wrapperPolicyFacet = PostsEventWithWrapperPolicy.Util.getWrapperPolicyFacet(clearFacet);
-        }
-        return wrapperPolicyFacet != null ? wrapperPolicyFacet.getWrapperPolicy() : WrapperPolicy.ENFORCE_RULES;
-    }
-
-    
 
     // /////////////////////////////////////////////////////////////////
     // collection - access
@@ -480,8 +464,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
             throw new IllegalArgumentException("Invoking a addTo should only have a single argument");
         }
 
-        final WrapperPolicy wrapperPolicy = determineAddToWrapperPolicy(otma);
-        if(wrapperPolicy == WrapperPolicy.ENFORCE_RULES) {
+        if(getExecutionMode().shouldEnforceRules()) {
             checkVisibility(getAuthenticationSession(), targetAdapter, otma);
             checkUsability(getAuthenticationSession(), targetAdapter, otma);
         }
@@ -494,12 +477,12 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         }
         final ObjectAdapter argumentNO = getAdapterManager().adapterFor(argumentObj);
 
-        if(wrapperPolicy == WrapperPolicy.ENFORCE_RULES) {
+        if(getExecutionMode().shouldEnforceRules()) {
             final InteractionResult interactionResult = otma.isValidToAdd(targetAdapter, argumentNO).getInteractionResult();
             notifyListenersAndVetoIfRequired(interactionResult);
         }
 
-        if (getExecutionMode() == ExecutionMode.EXECUTE) {
+        if (getExecutionMode().shouldExecute()) {
             otma.addElement(targetAdapter, argumentNO);
         }
 
@@ -508,12 +491,6 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         return null;
     }
 
-    private static WrapperPolicy determineAddToWrapperPolicy(final OneToManyAssociation otma) {
-        final CollectionAddToFacet facet = otma.getFacet(CollectionAddToFacet.class);
-        final PostsEventWithWrapperPolicy wrapperPolicyFacet = PostsEventWithWrapperPolicy.Util.getWrapperPolicyFacet(facet);
-        return wrapperPolicyFacet != null ? wrapperPolicyFacet.getWrapperPolicy() : WrapperPolicy.ENFORCE_RULES;
-    }
-
 
     // /////////////////////////////////////////////////////////////////
     // collection - remove from
@@ -524,8 +501,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
             throw new IllegalArgumentException("Invoking a removeFrom should only have a single argument");
         }
 
-        final WrapperPolicy wrapperPolicy = determineRemoveFromWrapperPolicy(otma);
-        if(wrapperPolicy == WrapperPolicy.ENFORCE_RULES) {
+        if(getExecutionMode().shouldEnforceRules()) {
             checkVisibility(getAuthenticationSession(), targetAdapter, otma);
             checkUsability(getAuthenticationSession(), targetAdapter, otma);
         }
@@ -539,12 +515,12 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         }
         final ObjectAdapter argumentAdapter = getAdapterManager().adapterFor(argumentObj);
 
-        if(wrapperPolicy == WrapperPolicy.ENFORCE_RULES) {
+        if(getExecutionMode().shouldEnforceRules()) {
             final InteractionResult interactionResult = otma.isValidToRemove(targetAdapter, argumentAdapter).getInteractionResult();
             notifyListenersAndVetoIfRequired(interactionResult);
         }
 
-        if (getExecutionMode() == ExecutionMode.EXECUTE) {
+        if (getExecutionMode().shouldExecute()) {
             otma.removeElement(targetAdapter, argumentAdapter);
         }
 
@@ -553,13 +529,6 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         return null;
     }
 
-    private static WrapperPolicy determineRemoveFromWrapperPolicy(final OneToManyAssociation otma) {
-        final CollectionRemoveFromFacet removeFromFacet = otma.getFacet(CollectionRemoveFromFacet.class);
-
-        final PostsEventWithWrapperPolicy wrapperPolicyFacet = PostsEventWithWrapperPolicy.Util.getWrapperPolicyFacet(removeFromFacet);
-        return wrapperPolicyFacet != null ? wrapperPolicyFacet.getWrapperPolicy() : WrapperPolicy.ENFORCE_RULES;
-    }
-
     // /////////////////////////////////////////////////////////////////
     // action
     // /////////////////////////////////////////////////////////////////
@@ -581,7 +550,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         final InteractionResult interactionResult = noa.isProposedArgumentSetValid(targetAdapter, argAdapters).getInteractionResult();
         notifyListenersAndVetoIfRequired(interactionResult);
 
-        if (getExecutionMode() == ExecutionMode.EXECUTE) {
+        if (getExecutionMode().shouldExecute()) {
             final ObjectAdapter actionReturnNO = noa.execute(targetAdapter, argAdapters);
             return AdapterUtils.unwrap(actionReturnNO);
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/c2b250f0/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
index 6f81049..2dae290 100644
--- a/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
+++ b/example/application/quickstart_wicket_restful_jdo/dom/src/main/java/dom/todo/ToDoItem.java
@@ -50,6 +50,7 @@ import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.eventbus.PropertyChangedEvent;
 import org.apache.isis.applib.services.scratchpad.Scratchpad;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
+import org.apache.isis.applib.services.wrapper.WrapperFactory.ExecutionMode;
 import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.value.Blob;
@@ -487,8 +488,8 @@ public class ToDoItem implements Comparable<ToDoItem> {
     @javax.jdo.annotations.Element(column="dependentId")
     private SortedSet<ToDoItem> dependencies = new TreeSet<ToDoItem>();
 
-    @PostsCollectionAddedToEvent(wrapperPolicy=WrapperPolicy.SKIP_RULES)
-    @PostsCollectionRemovedFromEvent(wrapperPolicy=WrapperPolicy.SKIP_RULES)
+    @PostsCollectionAddedToEvent
+    @PostsCollectionRemovedFromEvent
     @SortedBy(DependenciesComparator.class)
     public SortedSet<ToDoItem> getDependencies() {
         return dependencies;
@@ -511,8 +512,8 @@ public class ToDoItem implements Comparable<ToDoItem> {
             final ToDoItem toDoItem) {
     	// By wrapping the call, Isis will detect that the collection is modified 
     	// and it will automatically send a CollectionAddedToEvent to the Event Bus.
-    	// See ToDoItemSubscriptions.
-        wrapperFactory.wrap(this).addToDependencies(toDoItem);
+    	// ToDoItemSubscriptions is a demo subscriber to this event
+        wrapperFactory.wrapSkipRules(this).addToDependencies(toDoItem);
         return this;
     }
     public List<ToDoItem> autoComplete0Add(final @MinLength(2) String search) {
@@ -544,8 +545,8 @@ public class ToDoItem implements Comparable<ToDoItem> {
             final ToDoItem toDoItem) {
     	// By wrapping the call, Isis will detect that the collection is modified 
     	// and it will automatically send a CollectionRemovedFromEvent to the Event Bus.
-    	// See ToDoItemSubscriptions.
-        wrapperFactory.wrap(this).removeFromDependencies(toDoItem);
+        // ToDoItemSubscriptions is a demo subscriber to this event
+        wrapperFactory.wrapSkipRules(this).removeFromDependencies(toDoItem);
         return this;
     }
     // disable action dependent on state of object