You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/09/26 19:46:08 UTC

[isis] 03/04: ISIS-1976: remove deprecated bulk actions

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git

commit bb045b1ae3be3b0689f6def9c0c87282bcdbd982
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Sep 26 21:33:44 2018 +0200

    ISIS-1976: remove deprecated bulk actions
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1976
---
 .../org/apache/isis/applib/annotation/Action.java  |  31 +---
 .../apache/isis/applib/annotation/InvokeOn.java    |  66 -------
 .../services/actinvoc/ActionInvocationContext.java | 197 ---------------------
 .../isis/core/metamodel/facets/Annotations.java    |   3 +-
 .../action/ActionAnnotationFacetFactory.java       |  20 ---
 .../action/bulk/BulkFacetForActionAnnotation.java  |  50 ------
 .../actions/action/bulk/BulkFacetObjectOnly.java   |  33 ----
 ...ctionInvocationFacetForDomainEventAbstract.java |   2 -
 .../metamodel/facets/actions/bulk/BulkFacet.java   |  37 ----
 .../facets/actions/bulk/BulkFacetAbstract.java     |  37 ----
 .../grid/bootstrap3/GridSystemServiceBS3.java      |   3 +-
 .../core/metamodel/spec/feature/ObjectAction.java  |  86 +++++----
 .../specloader/specimpl/ObjectActionDefault.java   |  58 ++----
 .../action/ActionAnnotationFacetFactoryTest.java   | 101 ++---------
 .../collection/AssociatedWithActionsHelper.java    |   1 -
 .../collection/bulk/BulkActionsHelper.java         |  81 ---------
 .../collection/bulk/BulkActionsLinkFactory.java    |  25 +--
 .../StandaloneCollectionPanel.java                 |  27 +--
 18 files changed, 87 insertions(+), 771 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
index 6a8bb57..1005f22 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Action.java
@@ -89,10 +89,8 @@ public @interface Action {
      */
     Where hidden() default Where.NOT_SPECIFIED;
 
-
     // //////////////////////////////////////
 
-
     /**
      * The action semantics, either {@link SemanticsOf#SAFE_AND_REQUEST_CACHEABLE cached}, {@link SemanticsOf#SAFE safe} (query-only),
      * {@link SemanticsOf#IDEMPOTENT idempotent} or
@@ -100,35 +98,8 @@ public @interface Action {
      */
     SemanticsOf semantics() default SemanticsOf.NOT_SPECIFIED;
 
-
-    // //////////////////////////////////////
-
-
-    /**
-     * Whether an action can be invoked on a single object and/or on many objects in a collection.
-     *
-     * <p>
-     * Actions to be invoked on collection (currently) have a number of constraints:
-     * <ul>
-     * <li>It must take no arguments
-     * <li>It cannot be hidden (any annotations or supporting methods to that effect will be
-     *     ignored).
-     * <li>It cannot be disabled (any annotations or supporting methods to that effect will be
-     *     ignored).
-     * </ul>
-     *
-     * <p>
-     * Has no meaning if annotated on an action of a domain service.
-     * </p>
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    InvokeOn invokeOn() default InvokeOn.NOT_SPECIFIED;
-
     // //////////////////////////////////////
 
-
     /**
      * Whether the action invocation should be reified into a {@link org.apache.isis.applib.services.command.Command} object.
      */
@@ -161,7 +132,7 @@ public @interface Action {
      * </p>
      *
      * <p>
-     *     Tprocessor itself is used by {@link ContentMappingServiceForCommandDto} and
+     *     The processor itself is used by {@link ContentMappingServiceForCommandDto} and
      *     {@link ContentMappingServiceForCommandsDto} to dynamically transform the DTOs.
      * </p>
      */
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/InvokeOn.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/InvokeOn.java
deleted file mode 100644
index 8f6f4de..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/InvokeOn.java
+++ /dev/null
@@ -1,66 +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;
-
-/**
- * Whether an action can be invoked on a single object and/or on many objects in a collection.
- *
- * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
- */
-@Deprecated
-public enum InvokeOn {
-    /**
-     * The action can only be invoked on a single object.  This is the default.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    OBJECT_ONLY,
-    /**
-     * The action can be invoked either on a single object or on a collection of objects (each in turn).
-     *
-     * <p>
-     *     Corresponds to (the deprecated) <code>@Bulk(appliesTo=BULK_AND_REGULAR)</code> annotation.
-     * </p>
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    OBJECT_AND_COLLECTION,
-    /**
-     * The action is intended to be invoked only on a collection of objects (each in turn).
-     *
-     * <p>
-     *     Corresponds to (the deprecated) <code>@Bulk(appliesTo=BULK_ONLY)</code> annotation.
-     * </p>
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    COLLECTION_ONLY,
-    /**
-     * Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta
-     * annotations or superclasses/interfaces).
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    NOT_SPECIFIED;
-
-}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/actinvoc/ActionInvocationContext.java b/core/applib/src/main/java/org/apache/isis/applib/services/actinvoc/ActionInvocationContext.java
deleted file mode 100644
index 056f24e..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/services/actinvoc/ActionInvocationContext.java
+++ /dev/null
@@ -1,197 +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.services.actinvoc;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import javax.enterprise.context.RequestScoped;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.InvokedOn;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-
-/**
- * This service (API and implementation) provides access to context information about a bulk action invocation.
- *
- * <p>
- * This implementation has no UI and there is only one implementation (this class) in applib, so it is annotated
- * with {@link org.apache.isis.applib.annotation.DomainService}.  This means that it is automatically registered
- * and available for use; no further configuration is required.
- * </p>
- *
- * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
- */
-@Deprecated
-@DomainService(
-        nature = NatureOfService.DOMAIN,
-        menuOrder = "" + Integer.MAX_VALUE
-        )
-@RequestScoped
-public class ActionInvocationContext {
-
-    /**
-     * Intended only to support unit testing.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    public static ActionInvocationContext onObject(final Object domainObject) {
-        ActionInvocationContext aic = new ActionInvocationContext();
-        aic.setInvokedOn(InvokedOn.OBJECT);
-        aic.setDomainObjects(Collections.singletonList(domainObject));
-        return aic;
-    }
-
-    /**
-     * Intended only to support unit testing.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    public static ActionInvocationContext onCollection(final Object... domainObjects) {
-        return onCollection(Arrays.asList(domainObjects));
-    }
-
-    /**
-     * Intended only to support unit testing.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    public static ActionInvocationContext onCollection(final List<Object> domainObjects) {
-        ActionInvocationContext aic = new ActionInvocationContext();
-        aic.setInvokedOn(InvokedOn.COLLECTION);
-        aic.setDomainObjects(domainObjects);
-        return aic;
-    }
-
-    // //////////////////////////////////////
-
-
-    private InvokedOn invokedOn;
-    private List<Object> domainObjects;
-
-    private int index;
-
-
-    // //////////////////////////////////////
-
-    /**
-     * <b>NOT API</b>: intended to be called only by the framework.
-     */
-    @Programmatic
-    public void setInvokedOn(final InvokedOn invokedOn) {
-        this.invokedOn = invokedOn;
-    }
-
-    /**
-     * <b>NOT API</b>: intended to be called only by the framework.
-     */
-    @Programmatic
-    public void setDomainObjects(final List<Object> domainObjects) {
-        this.domainObjects = domainObjects;
-    }
-
-    /**
-     * <b>NOT API</b>: intended to be called only by the framework.
-     */
-    @Programmatic
-    public void setIndex(final int index) {
-        this.index = index;
-    }
-
-    // //////////////////////////////////////
-
-
-    /**
-     * Whether this particular {@link ActionInvocationContext} was applied as a {@link InvokedOn#COLLECTION bulk} action
-     * (against each domain object in a list of domain objects) or as a {@link InvokedOn#OBJECT regular}
-     * action (against a single domain object).
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    @Programmatic
-    public InvokedOn getInvokedOn() {
-        return invokedOn;
-    }
-
-
-    /**
-     * The list of domain objects which are being acted upon.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    @Programmatic
-    public List<Object> getDomainObjects() {
-        return domainObjects;
-    }
-
-    /**
-     * The number of {@link #domainObjects domain objects} being acted upon.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    @Programmatic
-    public int getSize() {
-        return domainObjects.size();
-    }
-
-    /**
-     * The 0-based index to the object being acted upon.
-     *
-     * <p>
-     * Will be a value in range [0, {@link #getSize() size}).
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    @Programmatic
-    public int getIndex() {
-        return index;
-    }
-
-    /**
-     * Whether this object being acted upon is the first such.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    @Programmatic
-    public boolean isFirst() {
-        return this.index == 0;
-    }
-
-    /**
-     * Whether this object being acted upon is the last such.
-     *
-     * @deprecated - instead of bulk actions, use view models with collection parameters and {@link Action#associateWith()}.
-     */
-    @Deprecated
-    @Programmatic
-    public boolean isLast() {
-        return this.index == (getSize()-1);
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index a67640a..b104d13 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -42,6 +42,7 @@ import org.apache.isis.applib.annotation.MemberOrder;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.lang.ThrowableExtensions;
 import org.apache.isis.core.commons.reflection.Reflect;
@@ -210,7 +211,7 @@ public final class Annotations  {
 
         // directly annotated
         if(annotationClass.isAssignableFrom(annotationType)) {
-            annotationAndDepths.add(new AnnotationAndDepth<>((T) annotation, depth));
+            annotationAndDepths.add(new AnnotationAndDepth<>(_Casts.uncheckedCast(annotation), depth));
         }
 
         // if meta-annotation
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index 67263ad..9e5f4fd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -35,8 +35,6 @@ import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacetForActionAnnotation;
-import org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation;
-import org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetObjectOnly;
 import org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetAbstract;
@@ -49,7 +47,6 @@ import org.apache.isis.core.metamodel.facets.actions.action.prototype.PrototypeF
 import org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.typeof.TypeOfFacetForActionAnnotation;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
 import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
@@ -74,7 +71,6 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract {
         processHidden(processMethodContext);
         processRestrictTo(processMethodContext);
         processSemantics(processMethodContext);
-        processBulk(processMethodContext);
 
         // must come after processing semantics
         processCommand(processMethodContext);
@@ -186,22 +182,6 @@ public class ActionAnnotationFacetFactory extends FacetFactoryAbstract {
         FacetUtil.addFacet(facet);
     }
 
-    void processBulk(final ProcessMethodContext processMethodContext) {
-        final Method method = processMethodContext.getMethod();
-        final List<Action> actions = Annotations.getAnnotations(method, Action.class);
-        final FacetHolder holder = processMethodContext.getFacetHolder();
-
-        // check for @Action(invokeOn=...)
-        BulkFacet facet = BulkFacetForActionAnnotation.create(actions, holder);
-
-        // fallback
-        if(facet == null) {
-            facet = new BulkFacetObjectOnly(holder);
-        }
-
-        FacetUtil.addFacet(facet);
-    }
-
     void processCommand(final ProcessMethodContext processMethodContext) {
 
         //final Class<?> cls = processMethodContext.getCls();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForActionAnnotation.java
deleted file mode 100644
index 07c159d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetForActionAnnotation.java
+++ /dev/null
@@ -1,50 +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.actions.action.bulk;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.InvokeOn;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacetAbstract;
-
-public class BulkFacetForActionAnnotation extends BulkFacetAbstract {
-
-    public static BulkFacet create(
-            final List<Action> actions,
-            final FacetHolder holder) {
-
-        return actions.stream()
-                .map(Action::invokeOn)
-                .filter(invokeOn -> invokeOn != null && invokeOn != InvokeOn.NOT_SPECIFIED)
-                .findFirst()
-                .map(invokeOn -> new BulkFacetForActionAnnotation(invokeOn, holder))
-                .orElse(null);
-    }
-
-    private BulkFacetForActionAnnotation(
-            final InvokeOn appliesTo,
-            final FacetHolder holder) {
-        super(appliesTo, holder);
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetObjectOnly.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetObjectOnly.java
deleted file mode 100644
index d101ca3..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/bulk/BulkFacetObjectOnly.java
+++ /dev/null
@@ -1,33 +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.actions.action.bulk;
-
-import org.apache.isis.applib.annotation.InvokeOn;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacetAbstract;
-
-public class BulkFacetObjectOnly extends BulkFacetAbstract {
-
-    public BulkFacetObjectOnly(
-            final FacetHolder holder) {
-        super(InvokeOn.OBJECT_ONLY, holder);
-    }
-
-}
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 cd030b2..bd8d99d 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
@@ -201,8 +201,6 @@ implements ImperativeFacet {
             // otherwise, go ahead and execute action in the 'foreground'
             final ObjectAdapter mixinElseRegularAdapter = mixedInAdapter != null ? mixedInAdapter : targetAdapter;
 
-            owningAction.setupBulkActionInvocationContext(mixinElseRegularAdapter);
-
             final Object mixinElseRegularPojo = ObjectAdapter.Util.unwrap(mixinElseRegularAdapter);
 
             final List<ObjectAdapter> argumentAdapterList = Arrays.asList(argumentAdapters);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/BulkFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/BulkFacet.java
deleted file mode 100644
index 610cdb0..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/BulkFacet.java
+++ /dev/null
@@ -1,37 +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.actions.bulk;
-
-import org.apache.isis.applib.annotation.InvokeOn;
-import org.apache.isis.core.metamodel.facets.SingleValueFacet;
-
-/**
- * Indicates that the action (entity or service) can also be used as a bulk
- * action against collections of objects.
- *
- * <p>
- * In the standard Apache Isis Programming Model, corresponds to annotating the
- * action method using <tt>@Bulk</tt>.
- */
-public interface BulkFacet extends SingleValueFacet<InvokeOn> {
-
-    @Override
-    public InvokeOn value();
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/BulkFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/BulkFacetAbstract.java
deleted file mode 100644
index c7822d7..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/bulk/BulkFacetAbstract.java
+++ /dev/null
@@ -1,37 +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.actions.bulk;
-
-import org.apache.isis.applib.annotation.InvokeOn;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
-
-public abstract class BulkFacetAbstract extends SingleValueFacetAbstract<InvokeOn> implements BulkFacet {
-
-    public static Class<? extends Facet> type() {
-        return BulkFacet.class;
-    }
-
-    public BulkFacetAbstract(InvokeOn appliesTo, final FacetHolder holder) {
-        super(type(), appliesTo, holder);
-    }
-
-}
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 d1b3567..2be41aa 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
@@ -155,8 +155,7 @@ public class GridSystemServiceBS3 extends GridSystemServiceAbstract<BS3Grid> {
                 ObjectMember.Util.mapById(getOneToManyAssociations(objectSpec));
         final Map<String, ObjectAction> objectActionById =
                 ObjectMember.Util.mapById(
-                        objectSpec.streamObjectActions(Contributed.INCLUDED)
-                        .filter(ObjectAction.Predicates.notBulkOnly()));
+                        objectSpec.streamObjectActions(Contributed.INCLUDED));
 
         final BS3Grid bs3Grid = (BS3Grid) grid;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index eb4956e..23a8af0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -29,7 +29,6 @@ import com.google.common.collect.FluentIterable;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.InvokeOn;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
@@ -44,7 +43,6 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
@@ -194,13 +192,13 @@ public interface ObjectAction extends ObjectMember {
 
 
 
-    // -- setupBulkActionInvocationContext
-    /**
-     * internal API, called by {@link ActionInvocationFacet} if the action is actually executed (ie in the foreground).
-     */
-    void setupBulkActionInvocationContext(
-            final ObjectAdapter targetAdapter);
-
+//    // -- setupBulkActionInvocationContext
+//    /**
+//     * internal API, called by {@link ActionInvocationFacet} if the action is actually executed (ie in the foreground).
+//     */
+//    void setupBulkActionInvocationContext(
+//            final ObjectAdapter targetAdapter);
+//
 
 
 
@@ -308,7 +306,7 @@ public interface ObjectAction extends ObjectMember {
                     ObjectAction.Predicates.memberOrderNotAssociationOf(adapterSpec)
                     .and(ObjectAction.Predicates.dynamicallyVisible(adapter, 
                             InteractionInitiatedBy.USER, Where.ANYWHERE))
-                    .and(ObjectAction.Predicates.notBulkOnly())
+//                    .and(ObjectAction.Predicates.notBulkOnly())
                     .and(ObjectAction.Predicates.excludeWizardActions(adapterSpec));
 
             final Stream<ObjectAction> userActions = 
@@ -350,7 +348,7 @@ public interface ObjectAction extends ObjectMember {
 
             Predicate<ObjectAction> predicate = 
                 ObjectAction.Predicates.memberOrderOf(association)
-                .and(ObjectAction.Predicates.notBulkOnly())
+//                .and(ObjectAction.Predicates.notBulkOnly())
                 .and(ObjectAction.Predicates.excludeWizardActions(objectSpecification));
 
             final Stream<ObjectAction> userActions = 
@@ -442,33 +440,33 @@ public interface ObjectAction extends ObjectMember {
             return (ObjectAction oa) -> oa.getType() == type;
         }
 
-        public static Predicate<ObjectAction> bulk() {
-            return new Predicate<ObjectAction>() {
-
-                @Override
-                public boolean test(ObjectAction oa) {
-
-                    final BulkFacet bulkFacet = oa.getFacet(BulkFacet.class);
-                    if(bulkFacet == null || bulkFacet.isNoop() || bulkFacet.value() == InvokeOn.OBJECT_ONLY) {
-                        return false;
-                    }
-                    if (oa.getParameterCount() != 0) {
-                        return false;
-                    }
-
-                    // currently don't support returning Blobs or Clobs
-                    // (because haven't figured out how to rerender the current page, but also to do a download)
-                    ObjectSpecification returnSpec = oa.getReturnType();
-                    if (returnSpec != null) {
-                        Class<?> returnType = returnSpec.getCorrespondingClass();
-                        if (returnType == Blob.class || returnType == Clob.class) {
-                            return false;
-                        }
-                    }
-                    return true;
-                }
-            };
-        }
+//        public static Predicate<ObjectAction> bulk() {
+//            return new Predicate<ObjectAction>() {
+//
+//                @Override
+//                public boolean test(ObjectAction oa) {
+//
+//                    final BulkFacet bulkFacet = oa.getFacet(BulkFacet.class);
+//                    if(bulkFacet == null || bulkFacet.isNoop() || bulkFacet.value() == InvokeOn.OBJECT_ONLY) {
+//                        return false;
+//                    }
+//                    if (oa.getParameterCount() != 0) {
+//                        return false;
+//                    }
+//
+//                    // currently don't support returning Blobs or Clobs
+//                    // (because haven't figured out how to rerender the current page, but also to do a download)
+//                    ObjectSpecification returnSpec = oa.getReturnType();
+//                    if (returnSpec != null) {
+//                        Class<?> returnType = returnSpec.getCorrespondingClass();
+//                        if (returnType == Blob.class || returnType == Clob.class) {
+//                            return false;
+//                        }
+//                    }
+//                    return true;
+//                }
+//            };
+//        }
 
         public static Predicate<ObjectAction> dynamicallyVisible(
                 final ObjectAdapter target,
@@ -480,12 +478,12 @@ public interface ObjectAction extends ObjectMember {
             };
         }
 
-        public static Predicate<ObjectAction> notBulkOnly() {
-            return (ObjectAction t) -> {
-                    BulkFacet facet = t.getFacet(BulkFacet.class);
-                    return facet == null || facet.value() != InvokeOn.COLLECTION_ONLY;
-            };
-        }
+//        public static Predicate<ObjectAction> notBulkOnly() {
+//            return (ObjectAction t) -> {
+//                    BulkFacet facet = t.getFacet(BulkFacet.class);
+//                    return facet == null || facet.value() != InvokeOn.COLLECTION_ONLY;
+//            };
+//        }
 
         public static Predicate<ObjectAction> excludeWizardActions(final ObjectSpecification objectSpecification) {
             return wizardActions(objectSpecification).negate();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index 92e67fc..1d8f59f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -25,12 +25,8 @@ import java.util.Objects;
 import java.util.concurrent.Callable;
 import java.util.function.Predicate;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.ApplicationException;
 import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.annotation.InvokedOn;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.command.Command;
@@ -48,7 +44,6 @@ import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
 import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
@@ -73,7 +68,7 @@ import org.apache.isis.schema.cmd.v1.CommandDto;
 
 public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectAction {
 
-    private final static Logger LOG = LoggerFactory.getLogger(ObjectActionDefault.class);
+    //private final static Logger LOG = LoggerFactory.getLogger(ObjectActionDefault.class);
 
     public static ActionType getType(final String typeStr) {
         final ActionType type = ActionType.valueOf(typeStr);
@@ -549,24 +544,24 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     }
 
 
-    /**
-     * Internal API
-     */
-    @Override
-    public void setupBulkActionInvocationContext(final ObjectAdapter targetAdapter) {
-
-        final Object targetPojo = ObjectAdapter.Util.unwrap(targetAdapter);
-
-        final BulkFacet bulkFacet = getFacetHolder().getFacet(BulkFacet.class);
-        if (bulkFacet != null) {
-            final org.apache.isis.applib.services.actinvoc.ActionInvocationContext actionInvocationContext = getActionInvocationContext();
-            if (actionInvocationContext != null && actionInvocationContext.getInvokedOn() == null) {
-
-                actionInvocationContext.setInvokedOn(InvokedOn.OBJECT);
-                actionInvocationContext.setDomainObjects(Collections.singletonList(targetPojo));
-            }
-        }
-    }
+//    /**
+//     * Internal API
+//     */
+//    @Override
+//    public void setupBulkActionInvocationContext(final ObjectAdapter targetAdapter) {
+//
+//        final Object targetPojo = ObjectAdapter.Util.unwrap(targetAdapter);
+//
+//        final BulkFacet bulkFacet = getFacetHolder().getFacet(BulkFacet.class);
+//        if (bulkFacet != null) {
+//            final org.apache.isis.applib.services.actinvoc.ActionInvocationContext actionInvocationContext = getActionInvocationContext();
+//            if (actionInvocationContext != null && actionInvocationContext.getInvokedOn() == null) {
+//
+//                actionInvocationContext.setInvokedOn(InvokedOn.OBJECT);
+//                actionInvocationContext.setDomainObjects(Collections.singletonList(targetPojo));
+//            }
+//        }
+//    }
 
     @Override
     public boolean isPrototype() {
@@ -611,9 +606,6 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     }
 
-
-
-
     // -- toString
 
     @Override
@@ -636,16 +628,4 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
         return sb.toString();
     }
 
-
-
-    // -- services (lookup)
-
-
-    protected org.apache.isis.applib.services.actinvoc.ActionInvocationContext getActionInvocationContext() {
-        return lookupService(org.apache.isis.applib.services.actinvoc.ActionInvocationContext.class);
-    }
-
-
-
-
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
index ac6004f..2752c1f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
@@ -30,11 +30,17 @@ import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.UUID;
 
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.CommandExecuteIn;
 import org.apache.isis.applib.annotation.CommandPersistence;
 import org.apache.isis.applib.annotation.CommandReification;
-import org.apache.isis.applib.annotation.InvokeOn;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
@@ -62,7 +68,6 @@ import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInv
 import org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetFromConfiguration;
 import org.apache.isis.core.metamodel.facets.actions.action.typeof.TypeOfFacetForActionAnnotation;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
 import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
@@ -70,13 +75,6 @@ import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFa
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
 
 @SuppressWarnings({"hiding", "serial"})
 public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
@@ -284,6 +282,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
         public void withDefaultEvent() {
 
             class Customer {
+                @SuppressWarnings("unused")
                 public void someAction() {
                 }
             }
@@ -406,6 +405,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
         public void whenNotPresent() {
 
             class Customer {
+                @SuppressWarnings("unused")
                 public void someAction() {
                 }
             }
@@ -478,6 +478,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
         public void whenNoAnnotation() {
 
             class Customer {
+                @SuppressWarnings("unused")
                 public void someAction() {
                 }
             }
@@ -498,82 +499,6 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
 
     }
 
-    @Deprecated
-    public static class Bulk extends ActionAnnotationFacetFactoryTest {
-
-        @Test @Ignore // deprecated use
-        public void whenObjectOnly() {
-
-            class Customer {
-                @Action(invokeOn = InvokeOn.OBJECT_ONLY)
-                public void someAction() {
-                }
-            }
-
-            // given
-            final Class<?> cls = Customer.class;
-            actionMethod = findMethod(cls, "someAction");
-
-            // when
-            final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, actionMethod, mockMethodRemover, facetedMethod);
-            facetFactory.processBulk(processMethodContext);
-
-            // then
-            final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
-            assertNull(facet); 
-
-        }
-
-        @Test @Ignore // deprecated use
-        public void whenCollectionOnly() {
-
-            class Customer {
-                @Action(invokeOn = InvokeOn.COLLECTION_ONLY)
-                public void someAction() {
-                }
-            }
-
-            // given
-            final Class<?> cls = Customer.class;
-            actionMethod = findMethod(cls, "someAction");
-
-            // when
-            final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, actionMethod, mockMethodRemover, facetedMethod);
-            facetFactory.processBulk(processMethodContext);
-
-            // then
-            final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
-            Assert.assertNotNull(facet);
-            assertThat(facet.value(), is(InvokeOn.COLLECTION_ONLY));
-
-        }
-
-        @Test @Ignore // deprecated use
-        public void whenObjectAndCollection() {
-
-            class Customer {
-                @Action(invokeOn = InvokeOn.OBJECT_AND_COLLECTION)
-                public void someAction() {
-                }
-            }
-
-            // given
-            final Class<?> cls = Customer.class;
-            actionMethod = findMethod(cls, "someAction");
-
-            // when
-            final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, actionMethod, mockMethodRemover, facetedMethod);
-            facetFactory.processBulk(processMethodContext);
-
-            // then
-            final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
-            Assert.assertNotNull(facet);
-            assertThat(facet.value(), is(InvokeOn.OBJECT_AND_COLLECTION));
-
-        }
-
-    }
-
     public static class Command extends ActionAnnotationFacetFactoryTest {
 
         @Test
@@ -1116,9 +1041,8 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
         @Test
         public void whenDeprecatedTypeOfAnnotationOnActionNotReturningCollection() {
 
-            class Order {
-            }
             class Customer {
+                @SuppressWarnings("unused")
                 public Customer someAction() {
                     return null;
                 }
@@ -1143,6 +1067,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
             class Order {
             }
             class Customer {
+                @SuppressWarnings("rawtypes")
                 @Action(typeOf = Order.class)
                 public Collection someAction() {
                     return null;
@@ -1195,6 +1120,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
             class Order {
             }
             class Customer {
+                @SuppressWarnings("unused")
                 public Order[] someAction() {
                     return null;
                 }
@@ -1221,6 +1147,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
             class Order {
             }
             class Customer {
+                @SuppressWarnings("unused")
                 public Collection<Order> someAction() {
                     return null;
                 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
index 04a54c9..59c27a7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
@@ -36,7 +36,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
-import org.apache.isis.viewer.wicket.ui.components.collection.bulk.BulkActionsHelper;
 
 /**
  * See also {@link BulkActionsHelper}.
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsHelper.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsHelper.java
deleted file mode 100644
index 056b8f7..0000000
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsHelper.java
+++ /dev/null
@@ -1,81 +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.viewer.wicket.ui.components.collection.bulk;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.apache.isis.commons.internal.collections._Lists;
-
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.Contributed;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
-import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
-import org.apache.isis.viewer.wicket.ui.components.collection.AssociatedWithActionsHelper;
-
-/**
- * See also {@link AssociatedWithActionsHelper}.
- */
-public class BulkActionsHelper implements Serializable {
-
-    private final EntityCollectionModel collectionModel;
-
-    private static final long serialVersionUID = 1L;
-
-    public BulkActionsHelper(final EntityCollectionModel collectionModel) {
-        this.collectionModel = collectionModel;
-    }
-
-    public List<ObjectAction> getBulkActions(final IsisSessionFactory isisSessionFactory) {
-
-        if(collectionModel.isParented()) {
-            return Collections.emptyList();
-        }
-
-        final ObjectSpecification objectSpec = getObjectSpecification(isisSessionFactory);
-
-        final List<ActionType> actionTypes = inferActionTypes(isisSessionFactory);
-        final Stream<ObjectAction> objectActions = objectSpec.streamObjectActions(actionTypes, Contributed.INCLUDED);
-
-        return objectActions
-                .filter(ObjectAction.Predicates.bulk())
-                .collect(Collectors.toList());
-    }
-
-    private ObjectSpecification getObjectSpecification(final IsisSessionFactory isisSessionFactory) {
-        return collectionModel.getTypeOfSpecification();
-    }
-
-    private List<ActionType> inferActionTypes(final IsisSessionFactory isisSessionFactory) {
-        final List<ActionType> actionTypes = _Lists.newArrayList();
-        actionTypes.add(ActionType.USER);
-        final DeploymentCategory deploymentCategory = isisSessionFactory.getDeploymentCategory();
-        if ( !deploymentCategory.isProduction()) {
-            actionTypes.add(ActionType.PROTOTYPE);
-        }
-        return actionTypes;
-    }
-
-}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
index 38fe8e9..799051f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/bulk/BulkActionsLinkFactory.java
@@ -21,9 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.collection.bulk;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.link.Link;
+
 import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.annotation.InvokedOn;
-import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.Command.Executor;
 import org.apache.isis.applib.services.command.CommandContext;
@@ -52,12 +56,6 @@ import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn;
 import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.link.Link;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import org.apache.isis.commons.internal.collections._Lists;
 
 public final class BulkActionsLinkFactory implements ActionLinkFactory {
 
@@ -100,17 +98,8 @@ public final class BulkActionsLinkFactory implements ActionLinkFactory {
                                     concurrencyChecking, getPersistenceSession(), getSpecificationLoader()))
                             .collect(Collectors.toList());
 
-                    final List<Object> domainObjects =
-                            _Lists.map(toggledAdapters, ObjectAdapter.Functions.getObject());
-
-                    final ActionInvocationContext actionInvocationContext = getServicesInjector().lookupService(ActionInvocationContext.class);
-                    if (actionInvocationContext != null) {
-                        actionInvocationContext.setInvokedOn(InvokedOn.COLLECTION);
-                        actionInvocationContext.setDomainObjects(domainObjects);
-                    }
-
                     ObjectAdapter lastReturnedAdapter = null;
-                    int i=0;
+                    
                     for(final ObjectAdapter adapter : toggledAdapters) {
 
                         final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
index 2197bbd..8584c00 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
@@ -41,7 +41,6 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.AdditionalLinksPanel;
 import org.apache.isis.viewer.wicket.ui.components.actionprompt.ActionPromptModalWindow;
-import org.apache.isis.viewer.wicket.ui.components.collection.bulk.BulkActionsHelper;
 import org.apache.isis.viewer.wicket.ui.components.collection.bulk.BulkActionsLinkFactory;
 import org.apache.isis.viewer.wicket.ui.components.collection.bulk.BulkActionsProvider;
 import org.apache.isis.viewer.wicket.ui.components.collection.count.CollectionCountProvider;
@@ -69,7 +68,6 @@ implements CollectionCountProvider, CollectionSelectorProvider, BulkActionsProvi
 
     private final ActionPromptModalWindow actionPromptModalWindow;
     private final CollectionSelectorPanel selectorDropdownPanel;
-    private final BulkActionsHelper bulkActionsHelper;
 
     private boolean additionalLinksAdded;
 
@@ -124,8 +122,6 @@ implements CollectionCountProvider, CollectionSelectorProvider, BulkActionsProvi
 
         final ComponentFactoryRegistry componentFactoryRegistry = getComponentFactoryRegistry();
         componentFactoryRegistry.addOrReplaceComponent(outerDiv, ComponentType.COLLECTION_CONTENTS, entityCollectionModel);
-
-        bulkActionsHelper = new BulkActionsHelper(entityCollectionModel);
     }
 
     // -- ActionPromptModalWindowProvider
@@ -145,10 +141,9 @@ implements CollectionCountProvider, CollectionSelectorProvider, BulkActionsProvi
     public ObjectAdapterToggleboxColumn getToggleboxColumn() {
 
         if (toggleboxColumn == null) {
-            final List<ObjectAction> bulkActions = bulkActionsHelper.getBulkActions(getIsisSessionFactory());
 
             final EntityCollectionModel entityCollectionModel = getModel();
-            if(bulkActions.isEmpty() || entityCollectionModel.isParented()) {
+            if(entityCollectionModel.isParented()) {
                 return null;
             }
 
@@ -174,29 +169,9 @@ implements CollectionCountProvider, CollectionSelectorProvider, BulkActionsProvi
 
     @Override
     public void configureBulkActions(final ObjectAdapterToggleboxColumn toggleboxColumn) {
-
-        if(additionalLinksAdded) {
-            return;
-        }
-        final BulkActionsLinkFactory linkFactory =
-                new BulkActionsLinkFactory(getModel(), toggleboxColumn);
-
-        final List<ObjectAction> bulkActions = bulkActionsHelper.getBulkActions(getIsisSessionFactory());
-
-        final List<LinkAndLabel> linkAndLabels = _Lists.map(bulkActions, (ObjectAction objectAction) ->
-                linkFactory.newLink(objectAction, ID_ADDITIONAL_LINK, null));
-
-        AdditionalLinksPanel.addAdditionalLinks(
-                outerDiv, ID_ADDITIONAL_LINKS, linkAndLabels, AdditionalLinksPanel.Style.INLINE_LIST);
-        additionalLinksAdded = true;
-
     }
 
 
-
-
-
-
     // -- CollectionSelectorProvider
 
     @Override