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/02/13 12:37:54 UTC

svn commit: r897737 - in /websites/staging/isis/trunk: cgi-bin/ content/ content/core/ content/reference/ content/reference/services/

Author: buildbot
Date: Thu Feb 13 11:37:53 2014
New Revision: 897737

Log:
Staging update by buildbot for isis

Added:
    websites/staging/isis/trunk/content/reference/services/wrapper-factory.html
Removed:
    websites/staging/isis/trunk/content/core/wrapper.html
Modified:
    websites/staging/isis/trunk/cgi-bin/   (props changed)
    websites/staging/isis/trunk/content/   (props changed)
    websites/staging/isis/trunk/content/core/integtestsupport.html
    websites/staging/isis/trunk/content/core/specsupport-and-integtestsupport.html
    websites/staging/isis/trunk/content/core/unittestsupport.html
    websites/staging/isis/trunk/content/documentation.html
    websites/staging/isis/trunk/content/reference/Event.html
    websites/staging/isis/trunk/content/reference/services/bookmark-service.html

Propchange: websites/staging/isis/trunk/cgi-bin/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Feb 13 11:37:53 2014
@@ -1 +1 @@
-1567714
+1567888

Propchange: websites/staging/isis/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Feb 13 11:37:53 2014
@@ -1 +1 @@
-1567714
+1567888

Modified: websites/staging/isis/trunk/content/core/integtestsupport.html
==============================================================================
--- websites/staging/isis/trunk/content/core/integtestsupport.html (original)
+++ websites/staging/isis/trunk/content/core/integtestsupport.html Thu Feb 13 11:37:53 2014
@@ -3,7 +3,7 @@
   <head>
 
     <meta charset="utf-8">
-      <title>Integration testing Support (1.2.0 only)
</title>
+      <title>Integration testing Support
</title>
     <meta name="description" content="">
     <meta name="author" content="">
 
@@ -174,7 +174,7 @@
       };
       function twshare () {
           window.open(
-                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=Integration testing Support (1.2.0 only)
",
+                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=Integration testing Support
",
                   'Share on Twitter',
                   'width=800,height=526');
       };
@@ -277,31 +277,30 @@
 
 <div class="page-header">
 <p><a href="./../documentation.html">Docs</a>&nbsp;&raquo&nbsp;<a href="./../core/about.html">Core</a></p>
-<h1>Integration testing Support (1.2.0 only)
+<h1>Integration testing Support
 
 </h1>
 </div>
 
 <blockquote>
-  <p>Integration test support has been enhanced in 1.3.0-SNAPSHOT to also support BDD (given/when/then) specifications.  See <a href="specsupport-and-integtestsupport.html">here</a> for more details.</p>
+  <p>See also Isis' <a href="specsupport-and-integtestsupport.html">BDD support</a>.</p>
 </blockquote>
 
-<p>This <code>isis-core-integtestsupport</code> module provides the ability to bootstrap Isis within a JUnit testing framework, using any object store.  This is done using a JUnit rule.</p>
+<p>The <code>isis-core-integtestsupport</code> module provides the ability to bootstrap Isis within a JUnit testing framework, using any object store.  This is done using a JUnit rule.</p>
 
 <p>In addition, the UI can be integration tested by "wrapping" each domain object in a proxy.  This proxy ensures that the "see it/use it/do it" rules (ie to hide, disable, or validate) are enforced.  The wrapping is performed using the <code>WrapperFactory</code>, part of the <a href="wrapper.html">isis-core-wrapper</a> module.</p>
 
 <p>To use, update the <code>pom.xml</code>:</p>
 
-<pre>
-    &lt;dependency&gt;
-        &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
-        &lt;artifactId&gt;isis-core-integtestsupport&lt;/artifactId&gt;
-    &lt;/dependency&gt;
-    &lt;dependency&gt;
-        &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
-        &lt;artifactId&gt;isis-core-wrapper&lt;/artifactId&gt;
-    &lt;/dependency&gt;
-</pre>
+<pre><code>&lt;dependency&gt;
+    &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
+    &lt;artifactId&gt;isis-core-integtestsupport&lt;/artifactId&gt;
+&lt;/dependency&gt;
+&lt;dependency&gt;
+    &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
+    &lt;artifactId&gt;isis-core-wrapper&lt;/artifactId&gt;
+&lt;/dependency&gt;
+</code></pre>
 
 <p>A full example is provided in the <a href="../intro/getting-started/quickstart-archetype.html">quickstart archetype</a>.  But to briefly explain; the recommended approach is to create an abstract class for all your integration tests.  Here is the one from the quickstart archetype:</p>
 

Modified: websites/staging/isis/trunk/content/core/specsupport-and-integtestsupport.html
==============================================================================
--- websites/staging/isis/trunk/content/core/specsupport-and-integtestsupport.html (original)
+++ websites/staging/isis/trunk/content/core/specsupport-and-integtestsupport.html Thu Feb 13 11:37:53 2014
@@ -314,7 +314,7 @@ or regular integration tests.</p>
 
 <p>For both BDD specs and integration tests, the <code>ScenarioExecution</code> also provides access to the configured domain services (accessible through the <code>service(...)</code> method) and the <code>DomainObjectContainer</code> (through the <code>container()</code> method).</p>
 
-<p>In addition, UI behaviour can be integration tested by "wrapping" each domain object in a proxy.  This proxy ensures that the "see it/use it/do it" rules (ie to hide, disable, or validate) are enforced.  The wrapping is performed using the <code>WrapperFactory</code>, part of the <a href="wrapper.html">isis-core-wrapper</a> module.    The <code>ScenarioExecution</code>'s <code>wrap()</code> and <code>unwrap()</code> helper methods provide access to this capability.</p>
+<p>In addition, UI behaviour can be integration tested by "wrapping" each domain object in a proxy.  This proxy ensures that the "see it/use it/do it" rules (ie to hide, disable, or validate) are enforced.  The wrapping is performed using the <code>WrapperFactory</code>, part of the <a href="../reference/services/wrapper-factory.html">isis-core-wrapper</a> module.    The <code>ScenarioExecution</code>'s <code>wrap()</code> and <code>unwrap()</code> helper methods provide access to this capability.</p>
 
 <p>The <code>ScenarioExecution</code> also provides the <code>install()</code> method, allowing fixtures to be installed in the normal way.  If using the JDO Object store, then these fixtures the <code>IsisJdoSupport</code> service can be used to run arbitrary SQL against the underlying database (eg to truncate/delete existing tables as need be).</p>
 

Modified: websites/staging/isis/trunk/content/core/unittestsupport.html
==============================================================================
--- websites/staging/isis/trunk/content/core/unittestsupport.html (original)
+++ websites/staging/isis/trunk/content/core/unittestsupport.html Thu Feb 13 11:37:53 2014
@@ -286,12 +286,11 @@
 
 <p>To use, update the <code>pom.xml</code>:</p>
 
-<pre>
-    &lt;dependency&gt;
-        &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
-        &lt;artifactId&gt;isis-core-unittestsupport&lt;/artifactId&gt;
-    &lt;/dependency&gt;
-</pre>
+<pre><code>&lt;dependency&gt;
+    &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
+    &lt;artifactId&gt;isis-core-unittestsupport&lt;/artifactId&gt;
+&lt;/dependency&gt;
+</code></pre>
 
 <h2>SortedSets Contract Test</h2>
 
@@ -429,14 +428,6 @@
 }
 </code></pre>
 
-<p>Prior to 1.3.0-SNAPSHOT, it is necessary to manually lookup the <code>@ClassUnderTest</code> instance from the <code>context</code>:</p>
-
-<pre><code>    @Before
-    public void setUp() throws Exception {
-        collaborating = context.getClassUnderTest();
-    }
-</code></pre>
-
 <p>The example tests can be found <a href="https://github.com/apache/isis/tree/master/core/unittestsupport/src/test/java/org/apache/isis/core/unittestsupport/jmocking">here</a></p>
 
 <h2>ValueTypeContractTestAbstract</h2>

Modified: websites/staging/isis/trunk/content/documentation.html
==============================================================================
--- websites/staging/isis/trunk/content/documentation.html (original)
+++ websites/staging/isis/trunk/content/documentation.html Thu Feb 13 11:37:53 2014
@@ -541,7 +541,7 @@
 <div class="row">
 <div class="col-md-12"></p>
 
-<h2>Applib Services</h2>
+<h2>Domain  Services</h2>
 
 <p></div>
 </div>
@@ -578,9 +578,7 @@
 
 <ul>
 <li><a href="./reference/services/auditing-service.html">Auditing Service</a></li>
-<li><a href="./reference/services/publishing-service.html">Publishing Service</a>
-</div>
-<div class="col-md-4"></li>
+<li><a href="./reference/services/publishing-service.html">Publishing Service</a></li>
 </ul>
 
 <h4>Performance tuning/co-ordination [1.4.0-snapshot]</h4>
@@ -591,11 +589,22 @@
 <li><a href="./reference/services/bulk-interaction.html">Bulk.Interaction</a></li>
 </ul>
 
+<p></div>
+<div class="col-md-4"></p>
+
 <h4>Other:</h4>
 
 <ul>
+<li><a href="reference/services/wrapper-factory.html">Wrapper Factory</a> [stub]</li>
 <li><a href="./reference/services/settings-services.html">Settings Services</a></li>
-<li><a href="./reference/services/developer-utilities-service.html">Developer Utilities Service</a>
+<li><a href="./reference/services/developer-utilities-service.html">Developer Utilities Service</a></li>
+</ul>
+
+<h4>Third-party:</h4>
+
+<ul>
+<li><a href="https://github.com/danhaywood/isis-domainservice-docx">Docx Mail merge</a></li>
+<li><a href="https://github.com/danhaywood/isis-domainservice-excel">Excel download/upload</a>
 </div>
 </div>
 <div class="row">
@@ -659,8 +668,7 @@
 <ul>
 <li><a href="core/unittestsupport.html">Unit Test Support</a></li>
 <li><a href="core/integtestsupport.html">Integration Test Support</a></li>
-<li><a href="core/specsupport-and-integtestsupport.html">BDD/Integ Test Support</a></li>
-<li><a href="core/wrapper.html">Wrapper Factory</a> [stub]
+<li><a href="core/specsupport-and-integtestsupport.html">BDD/Integ Test Support</a>
 </div>
 <div class="col-md-4"></li>
 </ul>
@@ -690,7 +698,7 @@
 <p><div class="row">
 <div class="col-md-12"></p>
 
-<h2>Viewers</div></h2>
+<h2>Wicket Viewer</div></h2>
 
 <p><div class="col-md-4"></p>
 
@@ -703,14 +711,35 @@
 <li><a href="components/viewers/wicket/configuring-the-about-page.html">The About page</a></li>
 <li><a href="components/viewers/wicket/customizing-the-viewer.html">Customizing the viewer</a>
 </div>
+<div class="col-md-4"></li>
+</ul>
+
+<h4>Third-party:</h4>
+
+<ul>
+<li><a href="https://github.com/danhaywood/isis-wicket-excel">Excel download</a></li>
+<li><a href="https://github.com/danhaywood/isis-wicket-fullcalendar2">Fullcalendar2</a></li>
+<li><a href="https://github.com/danhaywood/isis-wicket-gmap3">Gmap3</a></li>
+<li><a href="https://github.com/danhaywood/isis-wicket-wickedcharts">Wicked charts</a>
+</div>
 <div class="col-md-4">
-<h4>RestfulObjects <a href="components/viewers/restfulobjects/release-notes/about.html">2.1.0</a></h4></li>
+</div>
+</div>
+<div class="row">
+<div class="col-md-12">
+<h2>Restful Objects Viewer</div></h2></li>
 </ul>
 
+<p><div class="col-md-4"></p>
+
+<h4>RestfulObjects <a href="components/viewers/restfulobjects/release-notes/about.html">2.1.0</a></h4>
+
 <p><p class="display:none"/></p>
 
 <ul>
-<li><a href="components/viewers/restfulobjects/about.html">About</a></li>
+<li><a href="components/viewers/restfulobjects/about.html">About</a>
+</div>
+<div class="col-md-4"></li>
 </ul>
 
 <h5>Applib service impl.</h5>
@@ -719,13 +748,6 @@
 <li><a href="components/viewers/restfulobjects/event-serializer-rospec.html">Event Serializer per RO Spec</a>
 </div>
 <div class="col-md-4">
-<h4>Third Party</h4></li>
-</ul>
-
-<h5>DHTMLX</h5>
-
-<ul>
-<li><a href="third-party/viewers/dhtmlx/about.html">About</a>
 </div>
 </div></li>
 </ul>
@@ -863,12 +885,20 @@
 <p></div>
 <div class="col-md-4"></p>
 
-<h4>Plugins</h4>
+<h4>Third Party Viewers</h4>
+
+<ul>
+<li><a href="third-party/viewers/dhtmlx/about.html">DHTMLX</a></li>
+</ul>
+
+<h4>Third-party Plugins</h4>
 
 <ul>
-<li><a href="other/eclipse-plugin.html">JRebel Plugin</a> (third-party) [stub]</li>
+<li><a href="https://github.com/danhaywood/isis-jrebel-plugin">JRebel Plugin</a></li>
 </ul>
 
+<p>)</p>
+
 <!--
 
 

Modified: websites/staging/isis/trunk/content/reference/Event.html
==============================================================================
--- websites/staging/isis/trunk/content/reference/Event.html (original)
+++ websites/staging/isis/trunk/content/reference/Event.html Thu Feb 13 11:37:53 2014
@@ -3,7 +3,7 @@
   <head>
 
     <meta charset="utf-8">
-      <title></title>
+      <title>Events
</title>
     <meta name="description" content="">
     <meta name="author" content="">
 
@@ -174,7 +174,7 @@
       };
       function twshare () {
           window.open(
-                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=",
+                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=Events
",
                   'Share on Twitter',
                   'width=800,height=526');
       };
@@ -277,13 +277,11 @@
 
 <div class="page-header">
 <p><a href="./../documentation.html">Docs</a>&nbsp;&raquo&nbsp;<a href="./../reference/about.html">Reference</a></p>
-<h1>
+<h1>Events
 
 </h1>
 </div>
 
-<h1>Events</h1>
-
 <blockquote>
   <p>The InteractionEvent hierarchy.</p>
 </blockquote>
@@ -291,7 +289,8 @@
 <p>Although not supported by the default programming model, the applib
 nevertheless defines an event hierarchy that characterizes all of the
 different types of interactions that can occur. This is used by the
-wrapper programming model, and is exploited by the JUnit viewer.</p>
+<a href="../services/wrapper-factory.html">wrapper factory</a> service, and is exploited 
+by the core <a href="../core/integtestsupport.html">integration testing</a> support.</p>
 
 <p>The following UML class diagram shows the hierarchy of events:</p>
 

Modified: websites/staging/isis/trunk/content/reference/services/bookmark-service.html
==============================================================================
--- websites/staging/isis/trunk/content/reference/services/bookmark-service.html (original)
+++ websites/staging/isis/trunk/content/reference/services/bookmark-service.html Thu Feb 13 11:37:53 2014
@@ -322,7 +322,7 @@ public interface BookmarkService {
 
 <h3>Register the Service</h3>
 
-<p>Register this service like any other service, in <code>isis.properties</code>, eg:</p>
+<p>Register this service in <code>isis.properties</code>, eg:</p>
 
 <pre><code>isis.services=...,\
               org.apache.isis.core.metamodel.services.bookmarks.BookmarkServiceDefault,\

Added: websites/staging/isis/trunk/content/reference/services/wrapper-factory.html
==============================================================================
--- websites/staging/isis/trunk/content/reference/services/wrapper-factory.html (added)
+++ websites/staging/isis/trunk/content/reference/services/wrapper-factory.html Thu Feb 13 11:37:53 2014
@@ -0,0 +1,465 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+
+    <meta charset="utf-8">
+      <title>Wrapper Factory
</title>
+    <meta name="description" content="">
+    <meta name="author" content="">
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
+    <!--[if lt IE 9]>
+      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+
+    
+    <!-- Le styles -->
+    <link href="./../../bootstrap-3.0.0/css/bootstrap.css" rel="stylesheet">
+    <link href="./../../prettify.css" rel="stylesheet">
+
+    <style type="text/css">
+        body {
+          padding-top: 60px;
+        }
+        .sprite {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../images/sprites.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .edit-page {
+            display: inline-block;
+            height: 20px;
+            margin: 0 auto 4px;
+            outline: medium none;
+            text-indent: -999em;
+            width: 24px;
+            background-image: url('./../../images/edit.png');
+            background-repeat: no-repeat;
+            overflow: hidden;
+            cursor: pointer;
+        }
+        .fb-share {
+            background-position: 0px -40px;
+        }
+        .gp-share {
+            background-position: 0px 0px;
+        }
+        .tw-share {
+            background-position: 0px -80px;
+        }
+        .markdown-content {
+            min-height: 500px;
+        }
+        .book-image img {
+          border: 1px;
+          border-style: solid;
+        }
+        .release-matrix .heading {
+            background-color: #eeeeee;
+        }
+        .release-matrix .new {
+            color: #dd0000;
+            font-weight: bolder;
+        }
+        .stub,.note {
+            position: relative;
+            padding: 7px 15px;
+            margin-bottom: 18px;
+            color: #404040;
+            background-color: #eedc94;
+            background-repeat: repeat-x;
+            background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
+            background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
+            background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
+            background-image: -o-linear-gradient(top, #fceec1, #eedc94);
+            background-image: linear-gradient(top, #fceec1, #eedc94);
+            filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);
+            text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+            border-color: #eedc94 #eedc94 #e4c652;
+            border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+            text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+            border-width: 1px;
+            border-style: solid;
+            -webkit-border-radius: 4px;
+            -moz-border-radius: 4px;
+            border-radius: 4px;
+            -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
+        }
+        
+        div.XXXisis-tweak form {
+            margin-top: 6px;
+            margin-bottom: -2px;
+        }
+        
+        div.row div.col-md-12 {
+          border-top: 1px solid #eeeeee;
+        }
+        
+        
+        /* Isis specific stuff */
+
+        .container {
+          width: 940px;
+        }
+
+        .markdown-content .documentation .span-one-third p {
+          margin-bottom: 0px;
+        }
+
+        .markdown-content .documentation .group {
+          margin-top: 9px;
+        }
+
+        .documentation .group h2 {
+          border-bottom: 1px solid #DDD
+        }
+        .documentation h2 a, .documentation h3 a {
+          /* same as code style */
+          padding: 0 3px 2px;
+          font-family: Monaco, Andale Mono, Courier New, monospace;
+          font-size: 12px;
+          -webkit-border-radius: 3px;
+          -moz-border-radius: 3px;
+          border-radius: 3px;
+          padding: 1px 3px;
+        }
+        
+        .carousel-indicators li {
+          border: 1px solid rgb(192,70,1);
+        }
+
+        .carousel-indicators li.active {
+          background-color: rgb(192,70,1);
+        }
+        
+        .carousel-control .icon-prev,
+        .carousel-control .icon-next {
+          color: rgb(192,70,1);
+          font-size: 60px;
+        }
+        
+        .page-header {
+          margin-top: 0px;
+        }
+
+        .markdown-content blockquote p {
+            font-size: small;
+            font-style: italic;
+        }
+        
+    </style>
+    <script type="text/javascript">
+      function fbshare () {
+          window.open(
+                  "http://www.facebook.com/sharer/sharer.php?u="+document.URL,
+                  'Share on Facebook',
+                  'width=640,height=426');
+      };
+      function gpshare () {
+          window.open(
+                  "https://plus.google.com/share?url="+document.URL,
+                  'Share on Google+',
+                  'width=584,height=385');
+      };
+      function twshare () {
+          window.open(
+                  "https://twitter.com/intent/tweet?url="+document.URL+"&text=Wrapper Factory
",
+                  'Share on Twitter',
+                  'width=800,height=526');
+      };
+    </script>
+
+    <!-- Le fav and touch icons -->
+    <link rel="shortcut icon" href="./../../images/favicon.ico">
+
+    <script src="./../../javascript/prettify.js" type="text/javascript"></script>
+    
+    <script src="//code.jquery.com/jquery.js"></script>
+    <script src="./../../javascript/prettyprint.js"></script>
+    <script src="./../../bootstrap-3.0.0/js/bootstrap.js"></script>
+
+
+    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
+    <!--
+    <DISABLEDscript src="./../../javascript/common.js"></DISABLEDscript>
+    -->
+
+    
+    
+    
+
+    <script>
+    $(function () { prettyPrint() })
+    $().dropdown()
+    </script>
+
+  </head>
+
+  <body>
+
+    <nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
+      <div class="container">
+        <a class="navbar-brand" href="./../../index.html">Apache Isis&trade;</a>
+        <ul class="nav navbar-nav">
+          <li><a href="./../../download.html">Download</a></li>
+          <li><a href="./../../documentation.html">Documentation</a></li>
+          <li class="dropdown">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Screenshots<b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <li><a href="./../../intro/elevator-pitch/isis-in-pictures.html">Screenshots</a></li>
+              <li><a href="./../../intro/tutorials/screencasts.html">Screencasts</a></li>
+              <li><a href="./../../intro/powered-by/powered-by.html">Powered by</a></li>
+              <li><a href="http://isisdemo.mmyco.co.uk/">Online Demo</a></li>
+            </ul>
+          </li>
+
+          <li class="dropdown">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Support<b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <li><a href="./../../support.html">Mailing Lists</a></li>
+              <li><a href="http://isis.markmail.org/search/?q=">ML Archives</a></li>
+              <li><a href="https://issues.apache.org/jira/browse/ISIS">JIRA</a></li>
+              <li><a href="http://stackoverflow.com/questions/tagged/isis">Stack Overflow</a></li>
+              <li><a href="http://github.com/apache/isis">Github mirror</a></li>
+            </ul>
+          </li>
+
+          <FORM class="navbar-form navbar-right" id="searchbox_012614087480249044419:dn-q5gtwxya" action="http://www.google.com/cse">
+            <div class="form-group">
+              <input type="hidden" name="cx" value="012614087480249044419:dn-q5gtwxya">
+              <INPUT type="hidden" name="cof" value="FORID:0">
+              <INPUT class="form-control" name="q" type="text" placeholder="Search">
+            </div>
+          </FORM>
+          
+          <li class="dropdown  navbar-right">
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache <b class="caret"></b></a>
+            <ul class="dropdown-menu">
+              <li>
+                <a href="http://www.apache.org/">Apache Homepage <i class="icon-share-alt"></i></a>
+              </li>
+              <li>
+                <a href="http://www.apache.org/licenses/">Licenses <i class="icon-share-alt"></i></a>
+              </li>
+              <li>
+                <a href="http://www.apache.org/security/">Security <i class="icon-share-alt"></i></a>
+              </li>
+              <li>
+                <a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship <i class="icon-share-alt"></i></a>
+              </li>
+              <li>
+                <a href="http://www.apache.org/foundation/thanks.html">Thanks <i class="icon-share-alt"></i></a>
+              </li>
+              <li>
+                <a href="./../../more-thanks.html">More thanks <i class="icon-share-alt"></i></a>
+              </li>
+            </ul>
+          </li>
+        </ul>
+
+      </div>
+    </nav>
+
+    <div class="container">
+      <div class="markdown-content">
+      
+
+<div class="page-header">
+<p><a href="./../../documentation.html">Docs</a>&nbsp;&raquo&nbsp;<a href="./../../reference/about.html">Reference</a>&nbsp;&raquo&nbsp;<a href="./../../reference/services/about.html">Services</a></p>
+<h1>Wrapper Factory
+
+</h1>
+</div>
+
+<p>The 'wrapper' factory provides the ability to enforce business rules for programmatic interactions between domain objects.  For example, if the calling object attempts to modify an unmodifiable property on the target object, then an exception will be thrown.  Said another way: interactions are performed "as if" they are through the viewer.</p>
+
+<p>This capability goes beyond enforcing the (imperative) constraints within the <code>hideXxx()</code>, <code>disableXxx()</code> and <code>validateXxx()</code> supporting methods; it also enforces (declarative) constraints such as those represented by annotations, eg <code>@MaxLength</code> or <code>@Regex</code>.</p>
+
+<p>This capability is frequently used within <a href="../../core/integtestsupport.html">integration tests</a>, but can also be used in production code.  (There are analogies that can be drawn here with the way that JEE beans can interact through an EJB local interface).</p>
+
+<h3>In a little more detail</h3>
+
+<p>The service works by returning a "wrapper" around a supplied domain object (a CGLIB proxy), and it is this wrapper that ensures hat the hide/disable/validate rules implies by the Isis programming model are enforced.   The wrapper can be interacted with as follows: </p>
+
+<ul>
+<li>a get method for properties or collections </li>
+<li>a set method for properties </li>
+<li>an addTo or removeFrom method for collections </li>
+<li>any action </li>
+</ul>
+
+<p>Calling any of the above methods may result in a (subclass of) <code>InteractionException</code> if the object disallows it.  For example, if a property is annotated with <code>@Hidden</code> then a <code>HiddenException</code> will be thrown. Similarly if an action has a <code>validateXxx()</code> method and the supplied arguments are invalid then an <code>InvalidException</code> will be thrown. </p>
+
+<p>In addition, the following methods may also be called: </p>
+
+<ul>
+<li>the <code>title()</code> method </li>
+<li>any <code>defaultXxx()</code> or <code>choicesXxx()</code> method </li>
+</ul>
+
+<p>An exception will be thrown if any other methods are thrown.</p>
+
+<h3>API</h3>
+
+<p>The <code>WrapperFactory</code> API is defined as follows:</p>
+
+<pre><code>@Hidden
+public interface WrapperFactory {
+
+    public static enum ExecutionMode { EXECUTE, NO_EXECUTE }
+
+    public &lt;T&gt; T wrap(T domainObject);
+    public &lt;T&gt; T wrap(T domainObject, ExecutionMode mode);
+    public &lt;T&gt; T unwrap(T possibleWrappedDomainObject);
+
+    public &lt;T&gt; boolean isWrapper(T possibleWrappedDomainObject);
+
+    public List&lt;InteractionListener&gt; getListeners();
+    public boolean addInteractionListener(InteractionListener listener);
+    public boolean removeInteractionListener(InteractionListener listener);
+    public void notifyListeners(InteractionEvent ev);
+
+}
+</code></pre>
+
+<p>where:</p>
+
+<ul>
+<li><code>ExecutionMode</code> determines whether interactions with the wrapper are 
+actually passed onto the underlying domain object.</li>
+<li><code>wrap(...)</code> returns the wrapper around the underlying domain object (this 
+does nothing if the object has already been wrapped)</li>
+<li><code>unwrap(...)</code> returns the underlying domain object within the wrapper (this 
+does nothing if the object is not a wrapper)</li>
+</ul>
+
+<p>The API also provides the ability to register <code>InteractionListener</code>s with the
+wrapper.</p>
+
+<h3>Usage</h3>
+
+<p>The caller will typically obtain the target object (eg from some repository)
+and then use the injected <code>WrapperFactory</code> to wrap it before interacting 
+with it. </p>
+
+<p>For example:</p>
+
+<pre><code>public class CustomerAgent {
+
+    public void refundOrder(final Order order) {
+        final Order wrappedOrder = wrapperFactory.wrap(order);
+        try {
+            wrappedOrder.refund();
+        } catch(InteractionException ex) {
+            container.raiseError(ex.getMessage());
+            return;
+        }
+    }
+
+    ...        
+    private WrapperFactory wrapperFactory;    // injected
+    private DomainObjectContainer container;  // injected
+}
+</code></pre>
+
+<p>Here the <code>Order</code>'s <code>refund()</code> action has various business logic.  Rather than
+re-implement this logic, the <code>CustomerAgent</code> wraps the order in order to interact with it.</p>
+
+<h3>Hints and Tips</h3>
+
+<p>The <a href="./exception-recognizers.html">Exception Recognizers</a> provides the possibility 
+to remove the boilerplate; any <code>InteractionException</code> could be automatically
+recognized and converted into a suitable message.  The calling method could therefore
+simply propogate the exception:</p>
+
+<p>For example:</p>
+
+<pre><code>public class CustomerAgent {
+
+    public void refundOrder(final Order order) throws InteractionException {
+        wrapperFactory.wrap(order).refund();
+    }
+
+    ...        
+    private WrapperFactory wrapperFactory;    // injected
+}
+</code></pre>
+
+<blockquote>
+  <p>At the time of writing Isis does not provide an out-of-the-box implementation
+  of such an <code>ExceptionRecognizer</code>; but it should be simple enough to write one...</p>
+</blockquote>
+
+<h3>Register the Service</h3>
+
+<p>Register this service in <code>isis.properties</code>, eg:</p>
+
+<pre><code>isis.services=...,\
+              org.apache.isis.core.wrapper.WrapperFactoryDefault,\
+              ...
+</code></pre>
+
+<h3>Maven dependencies</h3>
+
+<p>Add the following to your application's "dom" module's <code>pom.xml</code>:</p>
+
+<pre><code>&lt;dependency&gt;
+    &lt;groupId&gt;org.apache.isis.core&lt;/groupId&gt;
+    &lt;artifactId&gt;isis-core-wrapper&lt;/artifactId&gt;
+&lt;/dependency&gt;
+</code></pre>
+
+
+
+      </div>
+
+        <div id="edit" class="modal hide fade in" style="xxxdisplay: none; ">
+            <div class="modal-header">
+                <a class="close" data-dismiss="modal">x</a>
+
+                <h3>Thank you for contributing to the documention!</h3>
+            </div>
+            <div class="modal-body">
+                <h4>Any help with the documentation is greatly appreciated.</h4>
+                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
+                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
+                <!--[if gt IE 6]>
+                <h4>Internet Explorer Users</h4>
+                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
+                <![endif]-->
+
+            </div>
+            <div class="modal-footer">
+                Do you have an Apache ID?
+                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
+                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
+            </div>
+        </div>
+        <!--
+        <script src="./../../javascript/bootstrap-modal.js"></script>
+        -->
+
+      <footer>
+        <hr/>
+        <p>
+        Copyright &copy; 2010~2014 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+        <br/>
+        Apache Isis, Isis, Apache, the Apache feather logo, and the Apache Isis project logo are trademarks of The Apache Software Foundation.
+        </p>
+      </footer>
+
+    </div> <!-- /container -->
+
+  </body>
+</html>