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"> </div>
+ </div>
+ <div class="row">
+ <div class="col-sm-12"> </div>
+ </div>
+ <div class="row">
+ <div class="col-sm-12"> </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"> </div>
+ </div>
+ <div class="row">
+ <div class="col-sm-12"> </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.
+ }
+
+}