You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/09/03 14:32:14 UTC

[23/87] [abbrv] [partial] isis git commit: ISIS-1194: moving the wicket submodules to be direct children of core; removing the isis-viewer-wicket parent pom.

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_75_e6e6e6_1x400.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000..a39a0d7
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_75_e6e6e6_1x400.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_95_fef1ec_1x400.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_95_fef1ec_1x400.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000..4eef99f
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_glass_95_fef1ec_1x400.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_highlight-soft_75_20B5C2_1x100.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_highlight-soft_75_20B5C2_1x100.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_highlight-soft_75_20B5C2_1x100.png
new file mode 100644
index 0000000..424e1e7
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-bg_highlight-soft_75_20B5C2_1x100.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_00477F_256x240.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_00477F_256x240.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_00477F_256x240.png
new file mode 100644
index 0000000..b3c4f9f
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_00477F_256x240.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_2e83ff_256x240.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_2e83ff_256x240.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000..84b601b
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_2e83ff_256x240.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_454545_256x240.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_454545_256x240.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_454545_256x240.png
new file mode 100644
index 0000000..b6db1ac
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_454545_256x240.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_888888_256x240.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_888888_256x240.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_888888_256x240.png
new file mode 100644
index 0000000..feea0e2
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_888888_256x240.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_F0EFEA_256x240.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_F0EFEA_256x240.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_F0EFEA_256x240.png
new file mode 100644
index 0000000..60cf6fa
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_F0EFEA_256x240.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_cd0a0a_256x240.png
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_cd0a0a_256x240.png b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000..ed5b6b0
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/isis-wicket-theme/images/ui-icons_cd0a0a_256x240.png differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
new file mode 100644
index 0000000..512a499
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -0,0 +1,155 @@
+/*
+ *  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.
+ */
+$(function() {
+
+    'use strict';
+
+    if (typeof(Isis) === 'object' && typeof(Isis.openInNewTab) === 'function') {
+        return;
+    }
+
+    window.Isis = {
+        Topic: {
+            OPEN_IN_NEW_TAB: 'openInNewTab',
+            FOCUS_FIRST_ACTION_PARAMETER: 'focusFirstActionParameter'
+        },
+        copyModalShown: false
+    };
+
+    /**
+     * taken from http://www.minimit.com/articles/solutions-tutorials/vertical-center-bootstrap-3-modals
+     */
+    function centerModals() {
+        $('.modal').each(function() {
+            var $clone = $(this).clone().css('display', 'block').appendTo('body');
+            var top = Math.round(($clone.height() - $clone.find('.modal-content').height()) / 2);
+            top = top > 0 ? top : 0;
+            $clone.remove();
+            $(this).find('.modal-content').css("margin-top", top);
+        });
+    }
+    $(document, '.modal').on('show.bs.modal', centerModals);
+    $(window).on('resize', centerModals);
+
+    var isisVeilTimeoutId;
+    
+    var isisShowVeil = function() {
+        if(isisVeilTimeoutId) {
+            clearTimeout(isisVeilTimeoutId);
+            isisVeilTimeoutId = null;
+        }
+        $("#veil").show();
+    };
+
+    var isisFadeInVeil = function(attributes, jqxhr, settings) {
+        // use timeouts because JQuery's delay(...) cannot be stopped. 
+        isisVeilTimeoutId = setTimeout(function() {
+            $("#veil").fadeIn(750);
+        }, 250);
+        
+    };
+
+    var isisHideVeil = function() {
+        if(isisVeilTimeoutId) {
+            clearTimeout(isisVeilTimeoutId);
+            isisVeilTimeoutId = null;
+        }
+        $("#veil").stop().hide();
+    };
+
+    Wicket.Event.subscribe(Isis.Topic.OPEN_IN_NEW_TAB, function(jqEvent, url) {
+        var win=window.open(url, '_blank');
+        if(win) { win.focus(); }
+    });
+
+    Wicket.Event.subscribe(Isis.Topic.FOCUS_FIRST_ACTION_PARAMETER, function(jqEvent, modalWindowId) {
+        setTimeout(function() {
+            $('#'+modalWindowId).find('.inputFormTable.parameters').find('input,textarea,select').filter(':visible:first').focus();
+        }, 0);
+    });
+
+    /* for modal dialogs */
+    Wicket.Event.subscribe(Wicket.Event.Topic.AJAX_CALL_BEFORE_SEND, function(jqEvent, attributes, jqXHR, settings) {
+        if (attributes.c !== window && !$('#'+attributes.c).hasClass('noVeil')) {
+            isisFadeInVeil(attributes, jqXHR, settings);
+        }
+    });
+
+    Wicket.Event.subscribe(Wicket.Event.Topic.AJAX_CALL_COMPLETE, function(jqEvent, attributes, jqXHR, status) {
+        isisHideVeil(attributes, jqXHR, status);
+    });
+    
+
+    
+    /* only seem to work in non-modal situation */
+    $('.buttons .okButton:not(.noVeil)').click(isisFadeInVeil);
+    $('.buttons .ok:not(.noVeil)').click(isisFadeInVeil);
+    $('.cssSubMenuItemsPanel .cssSubMenuItem a:not(.noVeil)').click(isisFadeInVeil);
+
+    $('div.collectionContentsAsAjaxTablePanel > table.contents > tbody > tr.reloaded-after-concurrency-exception') 
+        .livequery(function(){
+            var x = $(this);
+            $(this).animate({ "backgroundColor": "#FFF" }, 1000, "linear", function() {
+                $(x).css('background-color','').removeClass("reloaded-after-concurrency-exception");
+            }); 
+        });
+
+    /**
+     * Show/hide the CopyLink modal window with alt+]
+     */
+    $('body').keydown(function(e) {
+        if (e.which === 221 && e.altKey) {
+            if (Isis.copyModalShown) {
+                $('.copyModal').modal('hide');
+                $('.modal-backdrop').remove();
+                Isis.copyModalShown = false;
+            }
+            else {
+                Isis.copyModalShown = true;
+                $('.copyLink').click();
+            }
+        }
+    });
+
+    /**
+     * Show/Hide the copy link only when hovering the entity icon and title
+     */
+    $('.entityIconTitleAndCopylink').hover(
+        function() {
+            $('.copyLink').css({visibility: 'visible'});
+        },
+        function() {
+            $('.copyLink').css({visibility: 'hidden'});
+        }
+    );
+});
+
+/**
+ * enables 'maxlength' to work as an attribute on 'textarea'
+ * 
+ * as per: see http://stackoverflow.com/questions/4459610/set-maxlength-in-html-textarea
+ */
+$(function() {  
+    $("textarea[maxlength]").bind('input propertychange', function() {  
+        var maxLength = $(this).attr('maxlength');  
+        if ($(this).val().length > maxLength) {  
+            $(this).val($(this).val().substring(0, maxLength));  
+        }  
+    })  
+});

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.livequery.js
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.livequery.js b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.livequery.js
new file mode 100644
index 0000000..0c8d4ff
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.livequery.js
@@ -0,0 +1,226 @@
+/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
+ * Dual licensed under the MIT (MIT_LICENSE.txt)
+ * and GPL Version 2 (GPL_LICENSE.txt) licenses.
+ *
+ * Version: 1.1.1
+ * Requires jQuery 1.3+
+ * Docs: http://docs.jquery.com/Plugins/livequery
+ */
+
+(function($) {
+
+$.extend($.fn, {
+    livequery: function(type, fn, fn2) {
+        var self = this, q;
+
+        // Handle different call patterns
+        if ($.isFunction(type))
+            fn2 = fn, fn = type, type = undefined;
+
+        // See if Live Query already exists
+        $.each( $.livequery.queries, function(i, query) {
+            if ( self.selector == query.selector && self.context == query.context &&
+                type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
+                    // Found the query, exit the each loop
+                    return (q = query) && false;
+        });
+
+        // Create new Live Query if it wasn't found
+        q = q || new $.livequery(this.selector, this.context, type, fn, fn2);
+
+        // Make sure it is running
+        q.stopped = false;
+
+        // Run it immediately for the first time
+        q.run();
+
+        // Contnue the chain
+        return this;
+    },
+
+    expire: function(type, fn, fn2) {
+        var self = this;
+
+        // Handle different call patterns
+        if ($.isFunction(type))
+            fn2 = fn, fn = type, type = undefined;
+
+        // Find the Live Query based on arguments and stop it
+        $.each( $.livequery.queries, function(i, query) {
+            if ( self.selector == query.selector && self.context == query.context &&
+                (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
+                    $.livequery.stop(query.id);
+        });
+
+        // Continue the chain
+        return this;
+    }
+});
+
+$.livequery = function(selector, context, type, fn, fn2) {
+    this.selector = selector;
+    this.context  = context;
+    this.type     = type;
+    this.fn       = fn;
+    this.fn2      = fn2;
+    this.elements = [];
+    this.stopped  = false;
+
+    // The id is the index of the Live Query in $.livequery.queries
+    this.id = $.livequery.queries.push(this)-1;
+
+    // Mark the functions for matching later on
+    fn.$lqguid = fn.$lqguid || $.livequery.guid++;
+    if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;
+
+    // Return the Live Query
+    return this;
+};
+
+$.livequery.prototype = {
+    stop: function() {
+        var query = this;
+
+        if ( this.type )
+            // Unbind all bound events
+            this.elements.unbind(this.type, this.fn);
+        else if (this.fn2)
+            // Call the second function for all matched elements
+            this.elements.each(function(i, el) {
+                query.fn2.apply(el);
+            });
+
+        // Clear out matched elements
+        this.elements = [];
+
+        // Stop the Live Query from running until restarted
+        this.stopped = true;
+    },
+
+    run: function() {
+        // Short-circuit if stopped
+        if ( this.stopped ) return;
+        var query = this;
+
+        var oEls = this.elements,
+            els  = $(this.selector, this.context),
+            nEls = els.not(oEls);
+
+        // Set elements to the latest set of matched elements
+        this.elements = els;
+
+        if (this.type) {
+            // Bind events to newly matched elements
+            nEls.bind(this.type, this.fn);
+
+            // Unbind events to elements no longer matched
+            if (oEls.length > 0)
+                $.each(oEls, function(i, el) {
+                    if ( $.inArray(el, els) < 0 )
+                        $.event.remove(el, query.type, query.fn);
+                });
+        }
+        else {
+            // Call the first function for newly matched elements
+            nEls.each(function() {
+                query.fn.apply(this);
+            });
+
+            // Call the second function for elements no longer matched
+            if ( this.fn2 && oEls.length > 0 )
+                $.each(oEls, function(i, el) {
+                    if ( $.inArray(el, els) < 0 )
+                        query.fn2.apply(el);
+                });
+        }
+    }
+};
+
+$.extend($.livequery, {
+    guid: 0,
+    queries: [],
+    queue: [],
+    running: false,
+    timeout: null,
+
+    checkQueue: function() {
+        if ( $.livequery.running && $.livequery.queue.length ) {
+            var length = $.livequery.queue.length;
+            // Run each Live Query currently in the queue
+            while ( length-- )
+                $.livequery.queries[ $.livequery.queue.shift() ].run();
+        }
+    },
+
+    pause: function() {
+        // Don't run anymore Live Queries until restarted
+        $.livequery.running = false;
+    },
+
+    play: function() {
+        // Restart Live Queries
+        $.livequery.running = true;
+        // Request a run of the Live Queries
+        $.livequery.run();
+    },
+
+    registerPlugin: function() {
+        $.each( arguments, function(i,n) {
+            // Short-circuit if the method doesn't exist
+            if (!$.fn[n]) return;
+
+            // Save a reference to the original method
+            var old = $.fn[n];
+
+            // Create a new method
+            $.fn[n] = function() {
+                // Call the original method
+                var r = old.apply(this, arguments);
+
+                // Request a run of the Live Queries
+                $.livequery.run();
+
+                // Return the original methods result
+                return r;
+            }
+        });
+    },
+
+    run: function(id) {
+        if (id != undefined) {
+            // Put the particular Live Query in the queue if it doesn't already exist
+            if ( $.inArray(id, $.livequery.queue) < 0 )
+                $.livequery.queue.push( id );
+        }
+        else
+            // Put each Live Query in the queue if it doesn't already exist
+            $.each( $.livequery.queries, function(id) {
+                if ( $.inArray(id, $.livequery.queue) < 0 )
+                    $.livequery.queue.push( id );
+            });
+
+        // Clear timeout if it already exists
+        if ($.livequery.timeout) clearTimeout($.livequery.timeout);
+        // Create a timeout to check the queue and actually run the Live Queries
+        $.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
+    },
+
+    stop: function(id) {
+        if (id != undefined)
+            // Stop are particular Live Query
+            $.livequery.queries[ id ].stop();
+        else
+            // Stop all Live Queries
+            $.each( $.livequery.queries, function(id) {
+                $.livequery.queries[ id ].stop();
+            });
+    }
+});
+
+// Register core DOM manipulation methods
+$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove', 'html');
+
+// Run Live Queries when the Document is ready
+$(function() { $.livequery.play(); });
+
+})(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.html
new file mode 100644
index 0000000..795a821
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+   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.
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+    <body>
+        <wicket:panel>
+            <div wicket:id="feedback"></div>
+
+            <form wicket:id="signInForm" role="form">
+                <div class="form-group">
+                    <label wicket:for="username"><wicket:message key="usernameLabel"/></label>
+                    <input type="text" class="form-control" wicket:id="username" placeholder="Enter username"/>
+                </div>
+                <div class="form-group">
+                    <label wicket:for="password"><wicket:message key="passwordLabel"/></label>
+                    <input type="password" class="form-control" wicket:id="password" placeholder="Enter password"/>
+                </div>
+                <div class="checkbox" wicket:id="rememberMeRow">
+                    <label>
+                        <input type="checkbox" wicket:id="rememberMe"/> <wicket:message key="rememberMeLabel"/>
+                    </label>
+                </div>
+
+                <button type="submit" class="btn btn-primary"><wicket:message key="signInButtonLabel"/></button>
+                <button type="reset" class="btn btn-default"><wicket:message key="resetButtonLabel"/></button>
+
+                <div class="form-group">
+                    <a wicket:id="passwdResetLink" class="btn btn-block btn-link"><wicket:message key="forgotPasswordLinkLabel"/></a>
+                </div>
+
+                <div class="form-group" wicket:enclosure="signUpLink">
+                    <a wicket:id="signUpLink" class="btn btn-block btn-info"><wicket:message key="signUpButtonLabel"/></a>
+                </div>
+            </form>
+
+        </wicket:panel>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java
new file mode 100644
index 0000000..9583424
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java
@@ -0,0 +1,168 @@
+/*
+ *  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.pages.login;
+
+import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+
+import javax.inject.Inject;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Page;
+import org.apache.wicket.authroles.authentication.panel.SignInPanel;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.isis.applib.services.email.EmailService;
+import org.apache.isis.applib.services.userreg.EmailNotificationService;
+import org.apache.isis.applib.services.userreg.UserRegistrationService;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.models.PageType;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
+
+/**
+ * An extension of Wicket's default SignInPanel that provides
+ * custom markup, based on Bootstrap, and uses
+ * {@link de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel}
+ * for Bootstrap styled error messages
+ */
+public class IsisSignInPanel extends SignInPanel {
+
+    private final boolean signUpLink;
+    private final boolean passwordResetLink;
+    private final boolean clearOriginalDestination;
+
+    /**
+     * Constructor
+     *  @param id
+     *            the component id
+     * @param rememberMe
+     *            True if form should include a remember-me checkbox
+     * @param signUpLink
+     * @param passwordResetLink
+     *            True if form should include the password reset link
+     * @param continueToOriginalDestination
+     */
+    public IsisSignInPanel(
+            final String id,
+            final boolean rememberMe,
+            final boolean signUpLink,
+            final boolean passwordResetLink,
+            final boolean continueToOriginalDestination) {
+        super(id, rememberMe);
+        this.signUpLink = signUpLink;
+        this.passwordResetLink = passwordResetLink;
+        this.clearOriginalDestination = !continueToOriginalDestination;
+    }
+
+    @Override
+    protected void onInitialize() {
+        super.onInitialize();
+
+        addOrReplace(new NotificationPanel("feedback"));
+
+        final Component passwordResetLink = addPasswordResetLink();
+        final Component signUpLink = addSignUpLink();
+
+        setVisibilityAllowedBasedOnAvailableServices(signUpLink, passwordResetLink);
+    }
+
+    private BookmarkablePageLink<Void> addPasswordResetLink() {
+        return addLink("passwdResetLink", PageType.PASSWORD_RESET, this.passwordResetLink);
+    }
+
+    private BookmarkablePageLink<Void> addSignUpLink() {
+        return addLink("signUpLink", PageType.SIGN_UP, this.signUpLink);
+    }
+
+    private BookmarkablePageLink<Void> addLink(
+            final String id,
+            final PageType pageType,
+            final boolean visibilityAllowed) {
+
+        final BookmarkablePageLink<Void> link;
+        if(pageClassRegistry != null) {
+            final Class<? extends Page> signUpPageClass = pageClassRegistry.getPageClass(pageType);
+            link = new BookmarkablePageLink<>(id, signUpPageClass);
+            if(!visibilityAllowed) {
+                link.setVisibilityAllowed(false);
+            }
+        } else {
+            // can happen if failed to bootstrap due to metamodel validation errors
+            link = new BookmarkablePageLink<>(id, null);
+            link.setVisibilityAllowed(false);
+        }
+
+
+        getSignInForm().addOrReplace(link);
+        return link;
+    }
+
+    private void setVisibilityAllowedBasedOnAvailableServices(final Component... components) {
+        IsisContext.doInSession(new Runnable() {
+            @Override
+            public void run() {
+                final UserRegistrationService userRegistrationService = lookupService(UserRegistrationService.class);
+                final EmailNotificationService emailNotificationService = lookupService(EmailNotificationService.class);
+                final boolean visibilityAllowed = userRegistrationService != null && emailNotificationService.isConfigured();
+                for (final Component component: components) {
+                    if(component.isVisibilityAllowed()) {
+                        component.setVisibilityAllowed(visibilityAllowed);
+                    }
+                }
+            }
+        });
+    }
+
+    private MarkupContainer getSignInForm() {
+        return (MarkupContainer) get("signInForm");
+    }
+
+    @Override
+    protected void onSignInSucceeded() {
+
+        if(clearOriginalDestination) {
+            clearOriginalDestination();
+        }
+        super.onSignInSucceeded();
+    }
+
+    @Override
+    protected void onSignInRemembered() {
+        if(clearOriginalDestination) {
+            clearOriginalDestination();
+        }
+        super.onSignInRemembered();
+    }
+
+
+    // //////////////////////////////////////
+
+    private <T> T lookupService(final Class<T> serviceClass) {
+        return IsisContext.getPersistenceSession().getServicesInjector().lookupService(serviceClass);
+    }
+
+    @Inject
+    private PageClassRegistry pageClassRegistry;
+
+    @Inject
+    private EmailNotificationService emailNotificationService;
+
+    @Inject
+    private EmailService emailService;
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.css
new file mode 100644
index 0000000..3727ba1
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.css
@@ -0,0 +1,100 @@
+/*
+ *  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.
+ */
+
+
+#header .applicationName {
+	display:none;
+}
+ 
+ .loginPanel {
+	width:310px;
+	background-color:#FFFFFF;
+	padding:20px;
+	border-radius:4px;
+	-moz-border-radius:4px;
+	-webkit-border-radius:4px;
+	margin-bottom:1%;
+	position:absolute;
+	clear:both;
+	height:200px;
+	left:50%;
+	top:50%;
+	margin-left:-175px;
+	margin-top:-100px;
+ }
+ 
+ .loginPanel h2 {
+ 	color:#423D37;
+ 	font-size:1.6em;
+ 	letter-spacing:0px;
+ 	line-height:150%;
+ 	margin-bottom:10px;
+ }
+ 
+ .loginPanel table {
+ 	width:100%;
+}
+
+.loginPanel table tr td {
+	padding:5px 0px;
+	text-align:left !important;
+}
+
+.loginPanel form input[type=text],
+.loginPanel form input[type=password] {
+	border-radius:4px;
+	-moz-borer-radius:4px;
+	-webkit-border-radius:4px;
+	padding:6px;
+	background-color:#F0EFEA;
+	border:1px solid #F0EFEA;
+	border-top:1px solid #CCCBC7;
+}
+
+
+.loginPanel form input[type=submit] {
+    background-color: #20B5C2;
+    border: 0 none;
+    border-radius: 4px 4px 4px 4px;
+    color: #FFFFFF;
+    cursor: pointer;
+    display: inline-block;
+    font-size: 0.9em;
+    padding: 5px 10px;
+}
+
+.loginPanel form input[type=reset] {
+    background-color: #E4E4DB;
+    border: 0 none;
+    border-radius: 4px 4px 4px 4px;
+    color: #46423C;
+    cursor: pointer;
+    display: inline-block;
+    font-size: 0.9em;
+    padding: 5px 10px;
+    text-transform: uppercase;
+}
+
+.loginPanel table tr td {
+	color:#46423C;
+}
+
+.wicketSignInPanel .mainMessage {
+	margin-top: 550px;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.html
new file mode 100644
index 0000000..75aff05
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.html
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org"
+      xml:lang="en"  
+      lang="en">
+    <body>
+        <wicket:extend>
+            <div class="row">
+                <div class="loginPanel col-sm-offset-4 col-sm-4">
+                    <h2><wicket:message key="loginHeader">Login</wicket:message></h2>
+                    <div wicket:id="signInPanel"></div>
+                </div>
+            </div>
+        </wicket:extend>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.java
new file mode 100644
index 0000000..5834131
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.java
@@ -0,0 +1,107 @@
+/*
+ *  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.pages.login;
+
+import javax.inject.Inject;
+
+import org.apache.isis.viewer.wicket.model.models.PageType;
+import org.apache.isis.viewer.wicket.ui.errors.ExceptionModel;
+import org.apache.isis.viewer.wicket.ui.pages.PageNavigationService;
+import org.apache.isis.viewer.wicket.ui.pages.accmngt.AccountManagementPageAbstract;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
+import org.apache.wicket.authroles.authentication.panel.SignInPanel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.cookies.CookieUtils;
+import org.apache.wicket.util.string.Strings;
+
+/**
+ * Boilerplate, pick up our HTML and CSS.
+ */
+public class WicketSignInPage extends AccountManagementPageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    public static final String ISIS_VIEWER_WICKET_SUPPRESS_REMEMBER_ME = "isis.viewer.wicket.suppressRememberMe";
+    public static final String ISIS_VIEWER_WICKET_SUPPRESS_SIGN_UP = "isis.viewer.wicket.suppressSignUp";
+    public static final String ISIS_VIEWER_WICKET_SUPPRESS_PASSWORD_RESET = "isis.viewer.wicket.suppressPasswordReset";
+    public static final String ISIS_VIEWER_WICKET_CLEAR_ORIGINAL_DESTINATION = "isis.viewer.wicket.clearOriginalDestination";
+
+    public WicketSignInPage(final PageParameters parameters) {
+        this(parameters, getAndClearExceptionModelIfAny());
+    }
+
+    public WicketSignInPage(final PageParameters parameters, ExceptionModel exceptionModel) {
+        super(parameters, exceptionModel);
+
+        if (AuthenticatedWebSession.exists() && AuthenticatedWebSession.get().isSignedIn()) {
+            pageNavigationService.restartAt(PageType.HOME);
+        }
+    }
+
+    @Override
+    protected void onInitialize() {
+        super.onInitialize();
+
+        addSignInPanel();
+
+        checkForSuccessFeedback();
+    }
+
+    /**
+     * Checks for a cookie with name {@value #FEEDBACK_COOKIE_NAME} that is
+     * used as a temporary container for stateless session scoped success feedback
+     * messages.
+     */
+    private void checkForSuccessFeedback() {
+        CookieUtils cookieUtils = new CookieUtils();
+        String successFeedback = cookieUtils.load(FEEDBACK_COOKIE_NAME);
+        if (!Strings.isEmpty(successFeedback)) {
+            success(successFeedback);
+            cookieUtils.remove(FEEDBACK_COOKIE_NAME);
+        }
+    }
+
+    protected SignInPanel addSignInPanel() {
+        final boolean suppressRememberMe = getConfiguration().getBoolean(ISIS_VIEWER_WICKET_SUPPRESS_REMEMBER_ME, false);
+        final boolean suppressSignUpLink = getConfiguration().getBoolean(ISIS_VIEWER_WICKET_SUPPRESS_SIGN_UP, false);
+        final boolean suppressPasswordResetLink = getConfiguration().getBoolean(ISIS_VIEWER_WICKET_SUPPRESS_PASSWORD_RESET, false);
+        final boolean clearOriginalDestination = getConfiguration().getBoolean(ISIS_VIEWER_WICKET_CLEAR_ORIGINAL_DESTINATION, false);
+        final boolean rememberMe = !suppressRememberMe;
+        final boolean signUpLink = !suppressSignUpLink;
+        final boolean passwordReset = !suppressPasswordResetLink;
+        final boolean continueToOriginalDestination = !clearOriginalDestination;
+        SignInPanel signInPanel = createSignInPanel("signInPanel", rememberMe, signUpLink, passwordReset, continueToOriginalDestination);
+        add(signInPanel);
+        return signInPanel;
+    }
+
+    protected SignInPanel createSignInPanel(
+            final String id,
+            final boolean rememberMe,
+            final boolean signUpLink,
+            final boolean passwordResetLink,
+            final boolean continueToOriginalDestination) {
+        final SignInPanel signInPanel = new IsisSignInPanel(id, rememberMe, signUpLink, passwordResetLink, continueToOriginalDestination);
+        return signInPanel;
+    }
+
+    @Inject
+    private PageNavigationService pageNavigationService;
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.properties
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.properties b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.properties
new file mode 100644
index 0000000..53f15ac
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/WicketSignInPage.properties
@@ -0,0 +1,27 @@
+#
+#  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.
+#
+
+loginHeader=Login
+usernameLabel=Username
+passwordLabel=Password
+rememberMeLabel=Remember me
+signInButtonLabel=Sign in
+resetButtonLabel=Reset
+forgotPasswordLinkLabel=Forgot your password?
+signUpButtonLabel=Don't have an account? Sign up now.

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.css
new file mode 100644
index 0000000..bd982b8
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.css
@@ -0,0 +1,63 @@
+/*
+ *  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.
+ */
+
+
+#header .applicationName {
+	display:none;
+}
+ 
+
+.mmvErrorPage .mainMessage {
+	margin-top: 550px;
+}
+
+
+ .validationErrorsPanel .errorInfo {
+    margin-left: 50px;
+    margin-right: 50px;
+    padding-top: 50px;
+}
+
+
+.validationErrorsPanel .mainMessage {
+    background:#FFFFFF;
+    border-radius:4px;
+    -moz-border-radius:4px;
+    -webkit-border-radius:4px;
+    padding: 15px;
+    display: block;
+    text-align:center;
+    font-size:1.2em;
+}
+
+ .validationErrorsPanel .errorDetail {
+    margin-top: 30px; 
+}
+
+
+
+.validationErrorsPanel ul {
+	list-style: initial;
+	padding: 10px;
+	margin-left: 20px;
+}
+
+.validationErrorsPanel li {
+    padding: 5px;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.html
new file mode 100644
index 0000000..edb1766
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.html
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+    <head>
+        <title wicket:id="pageTitle"></title>
+    </head>
+    <body style="background-color: #d3d3d3">
+        <div id="container" class="container-fluid">
+            <div class="jumbotron" style="background-color: transparent">
+
+                <div class="row">
+                    <div class="col-sm-12">&#160;</div>
+                </div>
+                <div class="row">
+                    <div class="col-sm-12">&#160;</div>
+                </div>
+                <div class="row">
+                    <div class="col-sm-12">&#160;</div>
+                </div>
+
+                <div class="headerContainer row">
+                    <div id="header" class="col-sm-offset-4 col-sm-4">
+                        <h1 wicket:id="applicationName" class="applicationName">[application name]</h1>
+                    </div>
+                    <div class="clearfix"></div>
+                </div>
+
+                <div class="row">
+                    <div class="col-sm-12">&#160;</div>
+                </div>
+                <div class="row">
+                    <div class="col-sm-12">&#160;</div>
+                </div>
+
+                <div id="body" class="row">
+                    <div class="validationErrorsPanel col-sm-offset-1 col-sm-10">
+                        <div class="errorInfo clear">
+                            <h2 class="mainMessage">The application failed to start due to a number of metamodel validation errors.</h2>
+                            <div class="errorDetail">
+                                <wicket:container wicket:id="error">
+                                    <div wicket:id="errorMessage" class="alert alert-danger" role="alert">[error message]</div>
+                                </wicket:container>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
new file mode 100644
index 0000000..6c1d2ab
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/mmverror/MmvErrorPage.java
@@ -0,0 +1,134 @@
+/*
+ *  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.pages.mmverror;
+
+import java.util.List;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.head.CssReferenceHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.IModel;
+
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+
+/**
+ * A page being shown when the meta model validation has failed
+ */
+public class MmvErrorPage extends WebPage {
+    
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_PAGE_TITLE = "pageTitle";
+    private static final String ID_APPLICATION_NAME = "applicationName";
+
+    /**
+     * {@link Inject}ed when {@link #init() initialized}.
+     */
+    @Inject
+    @Named("applicationName")
+    private String applicationName;
+
+    /**
+     * {@link Inject}ed when {@link #init() initialized}.
+     */
+    @Inject
+    @Named("applicationCss")
+    private String applicationCss;
+    
+    /**
+     * {@link Inject}ed when {@link #init() initialized}.
+     */
+    @Inject
+    @Named("applicationJs")
+    private String applicationJs;
+
+    private static final String ID_ERROR = "error";
+    private static final String ID_ERROR_MESSAGE = "errorMessage";
+
+    public MmvErrorPage(final IModel<List<? extends String>> model) {
+        super(model);
+        addPageTitle();
+        addApplicationName();
+        addValidationErrors();
+    }
+
+    @SuppressWarnings("unchecked")
+    private IModel<List<? extends String>> getModel() {
+        return (IModel<List<? extends String>>) getDefaultModel();
+    }
+
+    private MarkupContainer addPageTitle() {
+        return add(new Label(ID_PAGE_TITLE, applicationName));
+    }
+
+    private void addApplicationName() {
+        add(new Label(ID_APPLICATION_NAME, applicationName));
+    }
+
+    private void addValidationErrors() {
+        ListView<String> validationErrorsView = new ListView<String>(ID_ERROR, getModel()) {
+            @Override
+            protected void populateItem(ListItem<String> item) {
+                final String validationError = item.getModelObject();
+                item.add(new Label(ID_ERROR_MESSAGE, validationError));
+            }
+        };
+        add(validationErrorsView);
+    }
+
+    @Override
+    public void renderHead(IHeaderResponse response) {
+        super.renderHead(response);
+        response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference())));
+        
+        if(applicationCss != null) {
+            response.render(CssReferenceHeaderItem.forUrl(applicationCss));
+        }
+        if(applicationJs != null) {
+            response.render(JavaScriptReferenceHeaderItem.forUrl(applicationJs));
+        }
+    }
+
+    @Override
+    public boolean isErrorPage() {
+        return true;
+    }
+
+    // ///////////////////////////////////////////////////
+    // System components
+    // ///////////////////////////////////////////////////
+
+    protected IsisConfiguration getConfiguration() {
+        return IsisContext.getConfiguration();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif
new file mode 100644
index 0000000..0e2b686
Binary files /dev/null and b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/spinning-icon.gif differ

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.css
new file mode 100644
index 0000000..eaeea17
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.css
@@ -0,0 +1,18 @@
+/*
+ *  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.
+ */

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html
new file mode 100644
index 0000000..6239dd3
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+    <body>
+        <wicket:extend>
+            <div class="standaloneCollectionPage">
+                <div wicket:id="bookmarks"></div>
+                <div wicket:id="standaloneCollection"></div>
+            </div>
+        </wicket:extend>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
new file mode 100644
index 0000000..4bbc61e
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
@@ -0,0 +1,56 @@
+/*
+ *  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.pages.standalonecollection;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+
+import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
+
+/**
+ * Web page representing an action invocation.
+ */
+@AuthorizeInstantiation("org.apache.isis.viewer.wicket.roles.USER")
+public class StandaloneCollectionPage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
+     */
+    public StandaloneCollectionPage(final EntityCollectionModel model) {
+        super(PageParametersUtils.newPageParameters(), actionNameFrom(model), ComponentType.STANDALONE_COLLECTION);
+        addChildComponents(themeDiv, model);
+
+        addBookmarkedPages(themeDiv);
+    }
+
+    private static String actionNameFrom(final EntityCollectionModel model) {
+        ActionModel actionModel = model.getActionModelHint();
+        if(actionModel != null) {
+            return actionModel.getActionMemento().getAction().getName();
+        }
+        return "Results"; // fallback, probably not required because hint should always exist on the model. 
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css
new file mode 100644
index 0000000..bc29a7f
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css
@@ -0,0 +1,25 @@
+/*
+ *  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.
+ */
+.valuePage .actionName {
+    font-size: large;
+    line-height:150%;
+    clear:both;
+    margin-bottom: 20px;
+}
+ 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html
new file mode 100644
index 0000000..d1b793b
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+    <body>
+        <wicket:extend>
+            <div class="valuePage">
+                <div wicket:id="bookmarks"></div>
+                <div class="myBlockContainer">
+                    <div class="iconAndTitle panel panel-default actionPanelHeaderNew">
+                        <div class="panel-heading">
+                            <div wicket:id="actionName" class="panel-title actionName">[action name]</div>
+                        </div>
+                        <div wicket:id="value" class="panel-body"></div>
+                    </div>
+                </div>
+            </div>
+        </wicket:extend>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java
new file mode 100644
index 0000000..58e991c
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java
@@ -0,0 +1,70 @@
+/*
+ *  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.pages.value;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.basic.Label;
+
+import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.ValueModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
+
+/**
+ * Web page representing an action invocation.
+ */
+@AuthorizeInstantiation("org.apache.isis.viewer.wicket.roles.USER")
+public class ValuePage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ACTION_NAME = "actionName";
+    
+    /**
+     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
+     */
+    public ValuePage(final ValueModel valueModel) {
+        this(valueModel, actionNameFrom(valueModel));
+        
+    }
+
+    
+    private ValuePage(ValueModel valueModel, String actionName) {
+        super(PageParametersUtils.newPageParameters(), actionName, ComponentType.VALUE);
+        
+        themeDiv.addOrReplace(new Label(ID_ACTION_NAME, actionName));
+
+        addChildComponents(themeDiv, valueModel);
+
+        addBookmarkedPages(themeDiv);
+        
+    }
+
+    private static String actionNameFrom(final ValueModel valueModel) {
+        ActionModel actionModel = valueModel.getActionModelHint();
+        if(actionModel != null) {
+            return actionModel.getActionMemento().getAction().getName();
+        }
+        return "Results"; // fallback, probably not required because hint should always exist on the model. 
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css
new file mode 100644
index 0000000..9e3094a
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css
@@ -0,0 +1,24 @@
+/*
+ *  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.
+ */
+.voidReturnPage .actionName {
+    font-size: large;
+    line-height:150%;
+    clear:both;
+    margin-bottom: 20px;
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html
new file mode 100644
index 0000000..e8fdf3e
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+    <body>
+        <wicket:extend>
+            <div class="voidReturnPage">
+                <div wicket:id="bookmarks"></div>
+                <div class="myBlockContainer">
+                    <div class="iconAndTitle panel panel-default actionPanelHeaderNew">
+                        <div class="panel-heading">
+                            <div class="panel-title">
+                                 <div wicket:id="actionName" class="actionName">[action name]</div>
+                            </div>
+                        </div>
+                        <div class="panel-body">
+                            <div wicket:id="voidReturn"></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </wicket:extend>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/99094b7e/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
new file mode 100644
index 0000000..a396d88
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
@@ -0,0 +1,62 @@
+/*
+ *  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.pages.voidreturn;
+
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.VoidModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
+
+/**
+ * Web page representing an action invocation.
+ */
+@AuthorizeInstantiation("org.apache.isis.viewer.wicket.roles.USER")
+public class VoidReturnPage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ACTION_NAME = "actionName";
+
+    public VoidReturnPage(final VoidModel model) {
+        this(model, actionNameFrom(model));
+    }
+
+    private VoidReturnPage(final VoidModel model, final String actionName) {
+        super(PageParametersUtils.newPageParameters(), actionName, ComponentType.VOID_RETURN);
+
+        themeDiv.addOrReplace(new Label(ID_ACTION_NAME, actionName));
+        
+        addChildComponents(themeDiv, model);
+
+        addBookmarkedPages(themeDiv);
+    }
+    
+    private static String actionNameFrom(final VoidModel model) {
+        ActionModel actionModel = model.getActionModelHint();
+        if(actionModel != null) {
+            return actionModel.getActionMemento().getAction().getName();
+        }
+        return "Results"; // fallback, probably not required because hint should always exist on the model. 
+    }
+
+}