You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by bu...@apache.org on 2014/11/19 11:45:42 UTC

svn commit: r929760 - in /websites/staging/isis/trunk: cgi-bin/ content/ content/intro/tutorials/apacheconeu-2014.html

Author: buildbot
Date: Wed Nov 19 10:45:41 2014
New Revision: 929760

Log:
Staging update by buildbot for isis

Modified:
    websites/staging/isis/trunk/cgi-bin/   (props changed)
    websites/staging/isis/trunk/content/   (props changed)
    websites/staging/isis/trunk/content/intro/tutorials/apacheconeu-2014.html

Propchange: websites/staging/isis/trunk/cgi-bin/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Nov 19 10:45:41 2014
@@ -1 +1 @@
-1640512
+1640519

Propchange: websites/staging/isis/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Nov 19 10:45:41 2014
@@ -1 +1 @@
-1640512
+1640519

Modified: websites/staging/isis/trunk/content/intro/tutorials/apacheconeu-2014.html
==============================================================================
--- websites/staging/isis/trunk/content/intro/tutorials/apacheconeu-2014.html (original)
+++ websites/staging/isis/trunk/content/intro/tutorials/apacheconeu-2014.html Wed Nov 19 10:45:41 2014
@@ -962,38 +962,77 @@ mvn clean install
 <li>write a domain service subscriber to subscribe to events</li>
 <li>use the domain service to perform log events</li>
 <li>use the domain service to veto actions (hide/disable or validate)</li>
-<li>Bulk actions</li>
+<li>Bulk actions (and the ScratchPad)</li>
 </ul>
 
 <p>Bulk actions are actions that can be invoked on a collection of actions, that is on collections returned by invoking an action.  Actions are specified as being bulk actions using the <a href="http://isis.apache.org/reference/recognized-annotations/Bulk.html">@Bulk</a> annotation.  Note that currently (1.8.0-SNAPSHOT) only no-arg actions can be specified as bulk actions.</p>
 
 <ul>
-<li>Write a no-arg action for your domain entity </li>
-<li>Inject the <a href="http://isis.apache.org/reference/services/bulk-interaction.html">Bulk.InteractionContext</a> service and use this to </li>
+<li>Write a no-arg action for your domain entity, annotate with <code>@Bulk</code></li>
+<li>Inject the <a href="http://isis.apache.org/reference/services/bulk-interaction.html">Bulk.InteractionContext</a> (request-scoped) service</li>
+<li>Use the <code>Bulk.InteractionContext</code> service to determine whether the action was invoked in bulk or as a regular action.
+<ul>
+<li>return null if invoked as a bulk action; the Wicket viewer will go back to the original collection</li>
+<li>(if return non-null, then Wicket viewer will navigate to the object of the last invocation... generally not what is required)</li>
+</ul></li>
 </ul>
 
-<h2>Performance tuning</h2>
+<p>The similar <a href="http://isis.apache.org/reference/services/scratchpad.html">ScratchPad</a> (request-scoped) domain service is a good way to share information between bulk action invocations:</p>
 
-<p>TODO</p>
+<ul>
+<li>Inject the [ScratchPad] domain service</li>
+<li>for each action, store state (eg a running total)</li>
+<li>In the last invoked bulk action, perform some aggregate processing (eg calculate the average) and return</li>
+</ul>
+
+<h2>Performance tuning (optional)</h2>
+
+<p>The <a href="http://isis.apache.org/reference/services/query-results-cache.html">QueryResultsCache</a> (request-scoped) domain service allows arbitrary objects to be cached for the duration of a request.</p>
 
+<p>This can be helpful for "naive" code which would normally make the same query within a loop.  </p>
+
+<ul>
+<li>optional: inject the <code>QueryResultsCache</code> service, invoke queries "through" the cache API
 <ul>
-<li>QueryResultsCache</li>
-<li>Scratchpad Services</li>
+<li>remember that the service is request-scoped, so it only really makes sense to use this service for code that invokes queries within a loop</li>
+</ul></li>
 </ul>
 
 <h2>Extending the Wicket UI</h2>
 
+<p>Each element in the Wicket viewer (entity form, properties, collections, action button etc) is a component, each created by a internal API (<code>ComponentFactory</code>, described <a href="http://isis.apache.org/components/viewers/wicket/customizing-the-viewer.html">here</a>).  For collections there can be multiple views, and the Wicket viewer provides a view selector drop down (top right of each collection panel).</p>
+
+<p>Moreover, we can add additional views.  In this section we'll explore some of these, already provided through <a href="http://www.isisaddons.org/">Isis addons</a>.</p>
+
 <h3>Excel download</h3>
 
-<p>TODO</p>
+<p>The <a href="https://github.com/isisaddons/isis-wicket-excel">Excel download add-on</a> allows the collection to be downloaded as an Excel spreadsheet (<code>.xlsx</code>).</p>
+
+<ul>
+<li>Use the instructions on the add-on module's README  to add in the excel download module (ie: update the POM).</li>
+</ul>
 
 <h3>Fullcalendar2</h3>
 
-<p>TODO</p>
+<p>The <a href="https://github.com/isisaddons/isis-wicket-fullcalendar2">Fullcalendar2 download add-on</a> allows entities to be rendered in a full-page calendar.</p>
+
+<ul>
+<li>Use the instructions on the add-on module's README  to add in the fullcalendar2 module (ie: update the POM).</li>
+<li>on one of your entities, implement either the <code>CalendarEventable</code> interface or the (more complex) <code>Calendarable</code> interface.</li>
+<li>update fixture scripts to populate any new properties</li>
+<li>when the app is run, a collection of the entities should be shown within a calendar view</li>
+</ul>
 
 <h3>gmap3</h3>
 
-<p>TODO</p>
+<p>The <a href="https://github.com/isisaddons/isis-wicket-gmap3">Gmap3 download add-on</a> allows entities that implement certain APIs to be rendered in a full-page gmap3.</p>
+
+<ul>
+<li>Use the instructions on the add-on module's README to add in the gmap3 module (ie: update the POM).</li>
+<li>on one of your entities, implement the <code>Locatable</code> interface</li>
+<li>update fixture scripts to populate any new properties</li>
+<li>when the app is run, a collection of the entities should be shown within a map view</li>
+</ul>
 
 <h2>Add-ons</h2>