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 2013/01/19 20:43:01 UTC

svn commit: r847312 - in /websites/staging/isis/trunk: cgi-bin/ content/ content/getting-started/screenshots.html

Author: buildbot
Date: Sat Jan 19 19:43:00 2013
New Revision: 847312

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/getting-started/screenshots.html

Propchange: websites/staging/isis/trunk/cgi-bin/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Sat Jan 19 19:43:00 2013
@@ -1 +1 @@
-1435638
+1435647

Propchange: websites/staging/isis/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Sat Jan 19 19:43:00 2013
@@ -1 +1 @@
-1435638
+1435647

Modified: websites/staging/isis/trunk/content/getting-started/screenshots.html
==============================================================================
--- websites/staging/isis/trunk/content/getting-started/screenshots.html (original)
+++ websites/staging/isis/trunk/content/getting-started/screenshots.html Sat Jan 19 19:43:00 2013
@@ -277,12 +277,6 @@
     </td>
   </tr>
   <tr>
-    <td>Follow Link<br/><br/><i>Navigation to an entity's detailed page is by following the hyperlink.  This navigation is consistent throughout the UI.</i></td>
-    <td>
-      <img src="resources/screencast-08-collection-action.png" width="420" height="315"></img>
-    </td>
-  </tr>
-  <tr>
     <td>Bulk collections<br/><br/><i>Bulk actions can be invoked on all selected elements.  Bulk actions are indicated using <tt>@Bulk</tt> annotation:</i><pre>
 public class ToDoItem {
     ...
@@ -294,162 +288,317 @@ public class ToDoItem {
 </div>
 </pre></td>
     <td>
+      <img src="resources/screencast-08-collection-action.png" width="420" height="315"></img>
+    </td>
+  </tr>
+  <tr>
+    <td>&nbsp;</td>
+    <td>
       <img src="resources/screencast-09-collection-action-invoked.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Follow Link<br/><br/><i>Navigation to an entity's detailed page is by following the hyperlink.  This navigation is consistent throughout the UI.</i></td>
     <td>
       <img src="resources/screencast-10-follow-link.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Entity detail pages<br/><br/><i>The Wicket viewer shows an icon and title for the entity top left; (scalar) properties are displayed underneath , and (vector) collections on the right.  This is all inferred form the domain class's structure:</i><pre>
+public class ToDoItem {
+    public String title() {
+        final TitleBuffer buf = new TitleBuffer();
+        buf.append(getDescription());
+        if (isComplete()) {
+            buf.append(" - Completed!");
+        } else {
+            if (getDueBy() != null) {
+                buf.append(" due by ", getDueBy());
+            }
+        }
+        return buf.toString();
+    }
+    ...
+    @RegEx(validation = "\w[@&amp;:\-\,\.\+ \w]*")
+    @MemberOrder(sequence = "1")
+    public String getDescription() { ... }
+    public void setDescription(String description) { ... }
+    ...
+    @Disabled
+    @MemberOrder(sequence = "1")
+    @Resolve(Type.EAGERLY)
+    public List<ToDoItem> getDependencies() { ... }
+    public void setDependencies(List<ToDoItem>) { ... }
+    ...
+</div>
+</pre></i><br/><i>Actions are shown top right, and near to collections:</i><pre>
+public class ToDoItem {
+    ...
+    @Named("Clone")
+    @MemberOrder(sequence = "3")
+    public ToDoItem duplicate() { ... }
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-11-todo-entity.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Edit entity<br/><br/><i>The entity's properties can be edited through the 'Edit' button</i></td>
     <td>
       <img src="resources/screencast-12-todo-entity-edit.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Drop downs<br/><br/><i>Drop downs are provided for enums (such as Category):</i><pre>
+public class ToDoItem {
+    public static enum Category {
+        Professional, Domestic, Other;
+    }
+    ...
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-13-todo-edit-enum.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Optimistic locking<br/><br/><i>Updating the entity bumps up its version number.  Behind the scenes this is done by the JDO objectstore</i><pre>
+@javax.jdo.annotations.Version(
+    strategy=VersionStrategy.VERSION_NUMBER, 
+    column="VERSION")
+...
+public class ToDoItem implements Comparable<ToDoItem> {
+    ...
+    @Hidden(where=Where.ALL_TABLES)
+    @Disabled
+    @MemberOrder(name="Detail", sequence = "99")
+    @Named("Version")
+    public Long getVersionSequence() {
+        if(!(this instanceof PersistenceCapable)) {
+            return null;
+        } 
+        PersistenceCapable persistenceCapable = 
+            (PersistenceCapable) this;
+        final Long version = 
+            (Long) JDOHelper.getVersion(persistenceCapable);
+        return version;
+    }
+    ...
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-14-optimistic-locking.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Invoking actions<br/><br/><i>Actions can be invoked; there may or may not be arguments:</i><pre>
+public class ToDoItem {
+    ...
+    public ToDoItem completed() {
+        setComplete(true);
+        return this;
+    }
+    ...
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-15-invoke-action.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Disabling actions<br/><br/><i>Actions can be disabled (as can editing properties) using supporting methods:</i><pre>
+public class ToDoItem {
+    ...
+    public ToDoItem completed() { ... }
+    public String disableCompleted() {
+        return complete ? "Already completed" : null;
+    }
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-16-invoke-action-disabled.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Actions grouped<br/><br/><i>Often actions relate to a particular colleciton of an entity.  The Wicket viewer renders such actions next to that collection.  For example:</i><pre>
+public class ToDoItem {
+    ...
+    @MemberOrder(name="dependencies", sequence = "3")
+    public ToDoItem add(final ToDoItem toDoItem) { ... }
+        getDependencies().add(toDoItem);
+        return this;
+    }
+    ...
+    // }}
+</pre><i>There might also be validation logic:</i><pre>
+public class ToDoItem {
+    ...
+    public String validateAdd(final ToDoItem toDoItem) {
+        if(getDependencies().contains(toDoItem)) {
+            return "Already a dependency";
+        }
+        if(toDoItem == this) {
+            return "Can't set up a dependency to self";
+        }
+        return null;
+    }
+    ...
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-17-invoke-action-grouped-params.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Actions can take arguments<br/><br/><i>In the case of arguments (or indeed when editing properties) that are references to entities, these can be looked up using an autocomplete action on a repository:</i><pre>
+@AutoComplete(repository=ToDoItems.class, action="autoComplete")
+public class ToDoItem { ... }
+</pre><i>and:</i></p>
+
+<pre>
+public class ToDoItems {
+    ...
+    @Hidden
+    public List<ToDoItem> autoComplete(final String description) {
+        return ... 
+    }
+    ...
+</div>
+</pre>
+
+<p></td>
     <td>
       <img src="resources/screencast-18-invoke-action-args.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Collections (and properties) can be derived<br/><br/><i>The viewer will render the state of the object, which can be persisted state or derived on the fly.  A common pattern is to delegate to an (automatically injected) domain service:</i><pre>
+public class ToDoItem {
+    ...
+    @MemberOrder(sequence = "5")
+    @NotPersisted
+    @Resolve(Type.EAGERLY)
+    public List<ToDoItem> getSimilarItems() {
+        return toDoItems.similarTo(this);
+    }
+    ...
+    private ToDoItems toDoItems;
+    // automatically injected
+    public void setToDoItems(final ToDoItems toDoItems) {
+        this.toDoItems = toDoItems;
+    }
+    ...
+</div>
+</pre></td>
     <td>
       <img src="resources/screencast-19-collection.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Breadcrumbs<br/><br/><i>The Wicket viewer has breadcrumbs which can be used either to get back to a previous entity or to invoke a (query-only) action:</i></p>
+
+<pre>
+public class ToDoItems {
+    ...
+    @ActionSemantics(Of.SAFE)
+    public List<ToDoItem> notYetComplete() { ... }
+    ...
+</div>
+</pre>
+
+<p></td>
     <td>
       <img src="resources/screencast-20-breadcrumbs.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Audit Service<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-21-audit-list.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Audit Records<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-22-audit-records.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Multi-User<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-23-fixtures-install-for.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>&nbsp;<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-24-fixtures-install-args.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>&nbsp;<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-25-fixtures-installed-for-guest.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Login as user<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-26-login-as-guest.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Permissions<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-27a-guests-todos.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Data per user or shared<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-27b-guests-todos.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr><td span=2><h3>RestfulObjects Viewer</h3></td></tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Authenticate<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-28-restful-login.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>List domain services<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-29-restful-services.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Domain service members<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-30-restful-todoitems-service.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Domain service action<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-31-restful-todoitems-notyetcomplete.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Invoking a domain service action<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-32-restful-todoitems-notyetcomplete-invoke.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Action returning a list<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-33-restful-todoitems-notyetcomplete-results.png" width="420" height="315"></img>
     </td>
   </tr>
   <tr>
-    <td>xx<br/><br/><i>yy</i></td>
+    <td>Representation of an entity<br/><br/><i>&nbsp;</i></td>
     <td>
       <img src="resources/screencast-34-restful-entity.png" width="420" height="315"></img>
     </td>