You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2014/01/17 14:09:21 UTC

[jira] [Commented] (ISIS-648) Improve support for bulk update

    [ https://issues.apache.org/jira/browse/ISIS-648?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13874749#comment-13874749 ] 

ASF subversion and git services commented on ISIS-648:
------------------------------------------------------

Commit e7f97df59ccbb0c996dcd53e5626f67a53a0b0a5 in branch refs/heads/master from [~danhaywood]
[ https://git-wip-us.apache.org/repos/asf?p=isis.git;h=e7f97df ]

ISIS-648, ISIS-652, ISIS-653, ISIS-655: bulk actions, request scoped services

ISIS-652: @RequestScoped services
- CDI 1.0 now a dependency of applib (for the @RequestScoped annotation)
- javassist is now a dependency of runtime
- ServiceInitializer, create javassist proxy for request-scoped services/beans
  (delegates to threadlocal held within the proxy)
- functionality in JavassistClassSubstitor now moved into core (ClassSubstitutorAbstract) so that
  ObjectSpecifications for @RequestScoped services are automatically setup correctly
  (the synthetic methods etc are disregarded)
- old JavassistClassSubstitor in core-bytecode-javassist now marked as deprecated
- PersistenceSession#open automatically initializes all request-scoped services (by downcasting to RequestScopedService and
  calling __isis_startRequest), and #close() similarly tidies up (by calling to __isis_endRequest)
- UserProfileLoaderDefault, when creating the UserProfile object, excludes any request-scoped services

ISIS-648, ISIS-655: enhanced bulk update support
- @Bulk#appliesTo property - whether to render action *only* as bulk
  - updates to EntityActionUtil to suppress in UI
- Bulk.InteractionContext#invokedAs added, to tell object whether the action called as a bulk or regular
- change in behaviour when invoking bulk actions, navigate to return value of action of last object called (if not null)
- ActionResultResponseType (etc) factored out for common handling of results from either
  regular actions or bulk actions

ISIS-655, refactored bulk interaction context
- Bulk.InteractionContext is now a request scoped service
  - deprecated the old threadlocal current
  - PersistenceSession#open copies over the service to the threadlocal
- deprecated Bulk.InteractionContext#with(...) methods
  - no longer required, so throw an explanatory exception (yes, this is a tiny breaking change...)

ISIS-653, Scratchpad @RequestScoped service
- Scratchpad service to get and set userdata, added to applib
  - allows apps to pass contextual information from one object's action to next
- TodoItem updated to demonstrate usage


> Improve support for bulk update
> -------------------------------
>
>                 Key: ISIS-648
>                 URL: https://issues.apache.org/jira/browse/ISIS-648
>             Project: Isis
>          Issue Type: New Feature
>          Components: Core, Viewer: Wicket
>    Affects Versions: viewer-wicket-1.3.1, core-1.3.0
>            Reporter: Dan Haywood
>            Assignee: Dan Haywood
>             Fix For: viewer-wicket-1.4.0, core-1.4.0
>
>
> As originally described in http://markmail.org/message/7uqgptkwkspai276
> ~~~
> The requirement is to be able to:
> a) provide the ability for some actions to be bulk-only
> b) provide a mechanism so that all objects selected to have a bulk action upon be able to interact with each other in the context of that action
>     - for example, to pass information along
> c) for the return type of a bulk action to be respected rather than ignore
>     - because there are many such returns, only the value of the last one should be acted up
> Tackling (a) first, that is an extension to the @Bulk annotation: @Bulk(BULK_AND_REGULAR) or @Bulk(BULK_ONLY)
> For (b), enhance the existing @Bulk.InteractionContext class so that can put or get user data.
> For (c), this is an enhancement to the Wicket viewer
> ~~~
> As a worked example of how to use these capabilties: we want to be able to update a bunch of objects, which then add themselves to some sort of wizard.
> public class ToDoItem {
>     @Bulk(BULK_ONLY)
>     public ToDoItemBulkChangeWizard bulkUpdate() {
>         Bulk.InteractionContext ctxt = Bulk.InteractionContext.get();
>         ToDoItemBulkChangeWizard wizard = (ToDoItemBulkChangeWizard)ctxt.getIserData("wizard");
>         if(wizard == null) { 
>             wizard = container.newViewModelInstance(ToDoItemBulkChangeWizard.class, new UUID().toString());
>             ctxt.setUserData("wizard", wizard);
>         }
>         wizard.add(this);
>         return wizard;       
>     }
> }
> public class ToDoItemBulkChangeWizard extends AbstractViewModel {
>     // viewModelInit() and viewModelMemento() omitted
>     private List<ToDoItem> _items = Lists.newArrayList();
>     public List<ToDoItem> getItems() { return _items; }
>     @Programmatic
>     public void add(ToDoItem item) { _items.add(item); }
>     public ToDoItemBulkChangeWizard markAllAsCompleted() {
>         for(ToDoItem item: _items) {
>            item.complete();
>         }
>     }
>     public ToDoItemBulkChangeWizard markAllAsNotYetCompleted() {
>         for(ToDoItem item: _items) {
>            item.notYetComplete();
>         }
>     }   
> }
> Note that the wizard above would need to serialize the _sites field somehow.  The BookmarkServiceDefault (serialize each object to its oid string) and the ViewModelSupportDefault class (serialize a bunch of strings to a single string) should allow you to do this.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)